*{box-sizing:border-box}.site-footer{margin:34px 0 0;padding:26px 20px;border-top:1px solid #e8dfe5;display:grid;gap:17px;font:14px/1.6 system-ui,sans-serif;color:#766675}.site-footer div{display:grid;gap:4px}.site-footer b{color:#361323}.site-footer nav{display:flex;flex-wrap:wrap;gap:12px 24px}.site-footer a{color:#981641;text-decoration:underline;text-underline-offset:4px}.site-footer small{font-size:12px}.login-page>.site-footer{max-width:1200px;margin:20px auto;padding:24px}.public-page{margin:0;background:#faf7f9;color:#311b28;font:16px/1.75 system-ui,sans-serif}.public-header{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:24px max(24px,calc((100vw - 1060px)/2));background:white;border-bottom:1px solid #eee4ea}.public-header>a:first-child{display:flex;align-items:center;gap:16px;color:inherit;text-decoration:none}.public-header img{border-radius:50%;object-fit:contain}.public-content{max-width:1060px;margin:40px auto;padding:40px;background:white;border:1px solid #efe6eb;border-radius:20px;min-height:390px}.public-content h1{font-size:clamp(28px,4vw,44px);line-height:1.2;letter-spacing:-1px}.site-cta{display:inline-block;padding:12px 20px;background:#a51a4c;color:white;border-radius:10px;font-weight:700;text-decoration:none}.site-cta:focus-visible,.site-footer a:focus-visible{outline:3px solid #b53f70;outline-offset:4px}.public-page>.site-footer{max-width:1060px;margin:25px auto}.error-code{font-size:55px;font-weight:800;color:#a51a4c;margin:0}.public-content p{max-width:800px}@media(max-width:700px){.public-header{padding:16px;flex-wrap:wrap}.public-content{margin:20px 12px;padding:24px}.site-footer{padding:22px 16px}.public-header b{font-size:14px}}
/* Responsive layer for every web page (login, first access, public pages, manager and owner screens): Android, iOS and the web.
   Loaded last on each page, so these shared rules win over older per-screen ones. tests/responsive_audit.py checks them. */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{-webkit-tap-highlight-color:rgba(152,22,65,.16);overflow-wrap:break-word}
.priority-metrics>*{min-width:0}
button,a,summary,select,label,[role=button]{touch-action:manipulation}
img,video,canvas{max-width:100%}
input[type=date],input[type=datetime-local],input[type=time],input[type=month]{min-width:0;max-width:100%}
input::-webkit-date-and-time-value{text-align:left}
.login-page{min-height:100vh;min-height:100dvh}
@media(max-width:800px){.login-shell{min-height:100vh;min-height:100dvh}}
/* Fixed bars stay clear of the notch, the home indicator and the rounded corners (viewport-fit=cover). */
body>aside{padding-top:max(25px,env(safe-area-inset-top))}
@media(max-width:760px){body>aside{padding-top:max(18px,env(safe-area-inset-top))!important}}
/* Touch: every control at least 44 px (phones, tablets and any touch screen). */
@media(max-width:1024px),(pointer:coarse){
 button,select,summary,[role=button],.text-button{min-height:44px}
 #nav button,.account-menu>summary,.account-tools button{min-height:44px}
 .site-footer nav{gap:0 20px}
 .site-footer nav a,.small-brand,.reset-link,.public-content a.back-link,.public-header a{display:inline-flex;align-items:center;min-height:44px}
 .site-footer nav a{min-width:44px;justify-content:center}
 .password-field button{min-height:44px;min-width:44px;top:3px;right:4px;padding:5px 9px}
 label.check,.remember-check,.daily-mock{min-height:44px;display:flex;align-items:center;gap:8px}
 .real-calendar button,.visit-week button{min-width:44px}
 input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=range]),select{min-height:44px}
 label:has(>input[type=checkbox]),label:has(>input[type=radio]){min-height:44px;display:flex;align-items:center;gap:8px}
 body>main>a[href="/"]:first-child{display:inline-flex;align-items:center;min-height:44px}
}
/* Phones: 16 px in fields (iOS does not zoom on focus) and a 16 px side gutter. */
@media(max-width:760px){
 input,select,textarea{font-size:16px!important}
 input[type=file]{min-height:44px}
 body>main{padding-left:max(16px,env(safe-area-inset-left))!important;padding-right:max(16px,env(safe-area-inset-right))!important}
}
/* Tables scroll inside their own box; fennix-ui.js marks a box that has more columns and the hint shows. */
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;max-width:100%}
.tablewrap.is-scrollable{background:linear-gradient(90deg,#fff 30%,#fff0) left/40px 100% no-repeat local,linear-gradient(270deg,#fff 30%,#fff0) right/40px 100% no-repeat local,radial-gradient(farthest-side at 0 50%,#3a0d2030,#0000) left/14px 100% no-repeat scroll,radial-gradient(farthest-side at 100% 50%,#3a0d2030,#0000) right/14px 100% no-repeat scroll}
.table-scroll-hint{display:none;margin:6px 0 4px;font-size:13px;color:#7d6f79}
.tablewrap.is-scrollable+.table-scroll-hint,.table-scroll-hint.on{display:block}
/* Wide screens: the content keeps a readable width and the sidebar layout stays as it is. */
@media(min-width:1500px){body>main #content{max-width:1440px}}
.intro p,.card>p,.notice-box{max-width:110ch}
/* Modals fit the screen and scroll inside. */
dialog{max-width:calc(100vw - 24px);max-height:85vh;max-height:85dvh;overflow:auto;overscroll-behavior:contain}
@media(max-width:760px){dialog{width:calc(100vw - 24px);padding:20px 16px}}
/* Manager agenda (fennix-reports.js): week/month switch, week list, the day's items and the client card's visits. */
.visit-toolbar{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:end;margin:14px 0}
.visit-switch{display:inline-flex;border:1px solid var(--line,#eae2e7);border-radius:10px;overflow:hidden}
.visit-switch button{border:0;border-radius:0;min-width:84px}
.visit-switch button[aria-pressed=true]{background:var(--red,#bb093a);color:#fff;font-weight:700}
.visit-nav{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.visit-nav b{min-width:0;text-transform:capitalize}
.visit-toolbar>label{display:flex;flex-direction:column;gap:4px;min-width:min(240px,100%)}
.visit-updated{margin:6px 0 0}
.visit-week{list-style:none;padding:0;margin:16px 0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.visit-week button{width:100%;min-height:72px;display:grid;gap:3px;align-content:start;text-align:left;padding:8px}
.visit-week button.selected,.real-calendar button.selected{border:2px solid var(--red,#bb093a);background:#fff1f5}
.visit-week button.today,.real-calendar button.today{box-shadow:inset 0 -3px 0 #c99522}
.visit-week small,.real-calendar small{display:block;font-size:11px;color:var(--red,#bb093a);overflow-wrap:anywhere}
.visit-item .actions{margin-top:4px}
.visit-note{border-left:4px solid #c99522;padding-left:10px}
.visit-planned{border-left:4px solid var(--green,#227b62);padding-left:10px}
.manager-visits{border:1px solid var(--line,#eae2e7);border-radius:12px;padding:12px;margin:12px 0;background:#fff;min-width:0;max-width:100%;white-space:normal;position:sticky;left:0}
.manager-visits h3{margin:0 0 4px}.manager-visits-list{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:8px}
.manager-visits-list li{border-top:1px solid var(--line,#eae2e7);padding-top:6px;overflow-wrap:anywhere}.manager-visits-list p{margin:2px 0 0}
@media(max-width:760px){
 .visit-week{grid-template-columns:1fr}
 .visit-week button{min-height:48px;grid-template-columns:auto 1fr;align-items:center;column-gap:10px}
 .visit-nav{width:100%;justify-content:space-between}.visit-nav b{flex:1;text-align:center}
 .visit-nav-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
 .visit-nav button{min-width:48px}
 .visit-switch{width:100%}.visit-switch button{flex:1}
 .visit-toolbar>label{width:100%}
 .real-calendar{gap:1px;margin-left:-12px;margin-right:-12px}
 .real-calendar button{padding:6px 1px;border-radius:6px}
 .manager-visits{max-width:calc(100vw - 48px)}
}
/* Footer links (Início, Sobre, Contato, Privacidade): on touch screens one compact line of small links, 32 px tall, not big buttons. */
@media(max-width:1024px),(pointer:coarse){
 .site-footer nav{flex-wrap:wrap;gap:0 14px}
 .site-footer nav a{min-height:32px;min-width:32px;font-size:13px;padding:0 2px}
}
@media(max-width:760px){
 .site-footer{gap:6px;padding:12px 16px calc(12px + env(safe-area-inset-bottom));margin-top:16px}
 .site-footer div{display:none}.site-footer small{font-size:11px;line-height:1.4}
 .site-footer nav{justify-content:center;gap:0 12px}.site-footer nav a{font-size:12.5px;white-space:nowrap}
}
/* Login: colours taken from the logo (fennix-logo.png: highlight #d42a46, body #c81e40, edge #a01038) over the brand wine #4a0b24.
   White on #a01038 = 8.0:1, white on #c81e40 = 5.7:1, #a01038 on white = 8.0:1 (WCAG AA). */
.login-page{--lg-hi:#d42a46;--lg-red:#c81e40;--lg-deep:#a01038;--lg-dark:#7d0b2e;--lg-wine:#4a0b24;--lg-soft:#ffe1e8;--fx:var(--lg-deep);
 background:radial-gradient(120% 80% at 50% 0%,var(--lg-red) 0%,var(--lg-deep) 45%,var(--lg-dark) 80%,var(--lg-wine) 100%) fixed var(--lg-wine);color:var(--ink)}
.login-page .login-shell{box-shadow:0 28px 90px #2a0614a6}
.login-story{background:radial-gradient(90% 70% at 30% 20%,var(--lg-hi) 0%,var(--lg-red) 35%,var(--lg-deep) 70%,var(--lg-dark) 100%)}
.login-story:after{border-color:#fff;opacity:.08}
.login-story .brand-line,.login-story .story-text,.login-story small{color:var(--lg-soft)}
.story-bottom span:before{color:#fff}
.login-logo{box-shadow:0 0 0 3px #ffffff40,0 10px 28px #2a061466}
.login-page input:focus,.login-page textarea:focus,.login-page select:focus{outline:3px solid #c81e4040;border-color:var(--lg-red)}
.login-page .auth-primary{background:var(--lg-deep);box-shadow:0 6px 16px #a0103840}.login-page .auth-primary:hover{background:#8e0d33}
.login-page .text-button,.login-page #feedback,.login-form-panel a{color:var(--lg-deep)}
.login-page .remember-check input{accent-color:var(--lg-deep)}
.login-page button:focus-visible,.login-page a:focus-visible{outline:3px solid var(--lg-red);outline-offset:3px}
.login-page>.site-footer{border-top-color:#ffffff33;color:var(--lg-soft)}.login-page>.site-footer b{color:#fff}
.login-page>.site-footer a{color:#fff}.login-page>.site-footer a:focus-visible,.login-story a:focus-visible{outline-color:#fff}
/* Phones: logo, title, fields, Mostrar, Manter conectado, Entrar, Esqueci, help and footer links on one screen, no scrolling.
   (When the keyboard opens the page may scroll to keep the field visible: fennix-login.js.) */
@media(max-width:800px){
 .login-page{display:flex;flex-direction:column;justify-content:center;min-height:100vh;min-height:100dvh;padding:max(10px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) 0 max(16px,env(safe-area-inset-left))}
 .login-page .login-shell{display:flex;flex-direction:column;flex:1 1 auto;justify-content:center;gap:10px;min-height:0;background:transparent;box-shadow:none;border-radius:0;overflow:visible;width:100%;max-width:440px;margin:0 auto}
 .login-story{background:none;padding:0;min-height:0;flex-direction:row;align-items:center;justify-content:center;gap:12px;overflow:visible}
 .login-story:after,.login-story h1,.login-story .story-text,.login-story .story-bottom,.login-story small{display:none}
 .login-story>div{display:block}
 .login-logo{width:64px;height:64px}
 .login-story .brand-line{margin:0;font-size:15px;font-weight:700;color:#fff;line-height:1.3;max-width:13em}
 .login-form-panel{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:10px;background:#fff;border-radius:18px;padding:16px 18px 6px;box-shadow:0 18px 50px #2a06148c}
 .login-form-panel>*,#formArea>*{grid-column:1/-1}
 #formArea{display:contents}
 .login-form-panel .small-brand{display:none}
 .login-form-panel h2{font-size:21px;letter-spacing:-.4px;margin:0 0 2px}
 .login-form-panel .muted{margin:0;font-size:13px;line-height:1.4}
 .login-form-panel form{margin-top:6px}
 .login-form-panel label{margin:8px 0 4px;font-size:13.5px}
 .login-form-panel input:not([type=checkbox]){padding:10px 12px}
 .remember-field{margin:6px 0 0}.remember-check{min-height:44px;font-size:14px}.remember-field small{margin:0 0 0 32px;font-size:12px}
 .login-form-panel #forgot{display:block;margin:0;padding:0;min-height:44px}
 .login-page .auth-primary{margin-top:2px;min-height:48px;padding:12px 20px;font-size:16px}
 .login-page .password-field button{top:50%;transform:translateY(-50%)}
 #formArea>.register-hint{grid-column:1;order:1;margin:6px 0 0;padding:4px 0 0;border-top:1px solid var(--line)}
 .register-hint b,.register-hint p{display:none}
 .login-form-panel>.login-footer{grid-column:2;order:1;margin:6px 0 0;padding:4px 0 0;border-top:1px solid var(--line);justify-content:flex-end}
 .login-footer span{display:none}
 .register-hint .text-button,.login-footer .text-button{min-height:44px;padding:4px 0;font-size:13px;line-height:1.25}
 .login-footer .text-button{text-align:right}
 .login-form-panel>#feedback{order:2;margin:0 0 8px;font-size:13px;line-height:1.45}#feedback:empty{display:none}
 .login-page>.site-footer{flex:none;width:100%;max-width:none;margin:8px 0 0;padding:4px 0 max(6px,env(safe-area-inset-bottom));border-top:0;gap:0}
 .login-page>.site-footer small{display:none}
 .login-page>.site-footer nav{flex-wrap:nowrap;justify-content:center;gap:0 clamp(8px,3vw,16px)}
 .login-page>.site-footer nav a{font-size:clamp(11.5px,3.4vw,13px)}
}
/* Tall phones: a larger logo. */
@media(max-width:800px) and (min-height:800px){.login-logo{width:84px;height:84px}.login-story .brand-line{font-size:16px}}
/* Short phones (iPhone SE, 360×640): smaller logo and spacing. */
@media(max-width:800px) and (max-height:700px){
 .login-page{padding-top:max(6px,env(safe-area-inset-top))}
 .login-page .login-shell{gap:8px}
 .login-logo{width:48px;height:48px}
 .login-story .brand-line{font-size:14px}
 .login-form-panel{padding:12px 16px 4px}
 .login-form-panel h2{font-size:19px}
 .login-form-panel .muted{display:none}
 .login-form-panel label{margin:6px 0 3px}
 .remember-field small{font-size:11.5px;margin-top:-4px}
 .login-page>.site-footer{margin-top:4px}
}
/* Landscape phones (740×360): logo on the left, the form in two columns on the right. Best effort; the page may scroll a little. */
@media(max-width:950px) and (max-height:500px) and (orientation:landscape){
 .login-page{justify-content:flex-start;padding-top:max(6px,env(safe-area-inset-top))}
 .login-page .login-shell{flex-direction:row;align-items:center;max-width:760px;gap:16px}
 .login-story{flex-direction:column;flex:0 0 140px;text-align:center;gap:8px}
 .login-logo{width:56px;height:56px}.login-story .brand-line{font-size:13px}
 .login-form-panel{flex:1;padding:10px 14px 2px}
 .login-form-panel .muted,.remember-field small{display:none}
 .login-form-panel h2{font-size:18px}
 .login-form-panel #loginForm{display:grid;grid-template-columns:1fr 1fr;column-gap:12px;margin-top:2px}
 .login-form-panel form>label[for=username]{grid-area:1/1}.login-form-panel form>#username{grid-area:2/1}
 .login-form-panel form>label[for=password]{grid-area:1/2}.login-form-panel form>.password-field{grid-area:2/2}
 .login-form-panel form>.remember-field{grid-area:3/1}.login-form-panel form>#forgot{grid-area:3/2;justify-self:end}
 .login-form-panel form>.auth-primary{grid-area:4/1/5/3;min-height:44px}
 .login-form-panel label{margin:4px 0 3px}
 .login-page>.site-footer{margin-top:2px}
}
.login-alert{display:flex;gap:10px;align-items:flex-start;margin:10px 0 4px;padding:10px 12px;border-radius:12px;background:#fde6ec;border:2px solid #a01038;color:#6e0723;font-size:15px;line-height:1.35}
.login-alert[hidden]{display:none}.login-alert b{font-weight:700}.login-alert-ico{flex:none;font-size:20px;line-height:1.1;color:#a01038}
.login-page input[aria-invalid=true]{border-color:#a01038!important;box-shadow:0 0 0 3px #a0103833!important}
@keyframes fxShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}40%{transform:translateX(6px)}60%{transform:translateX(-4px)}80%{transform:translateX(3px)}}
.fx-shake{animation:fxShake .42s ease-in-out}
@media (prefers-reduced-motion:reduce){.fx-shake{animation:none}}
@media(max-width:950px) and (max-height:500px) and (orientation:landscape){.login-form-panel form>.login-alert{grid-area:4/1/5/3;margin:4px 0;padding:6px 10px;font-size:14px}.login-form-panel form>.login-alert:not([hidden])~.auth-primary{grid-area:5/1/6/3}}
