/* mobile-v1: phones and cheap Androids. Loaded AFTER the app css; additive only (no colour changes except the contrast fixes marked AA). */
html,body{max-width:100%;overflow-x:clip}
@media(max-width:860px),(pointer:coarse){
 /* 44px+ hit areas (WCAG 2.5.5 / Material 48dp); inputs 16px so iOS/Android never zoom */
 button,select,.btn2,.open,.lc,.vl,.xv,.hic,.hsearch,.av,a.dst,[role=tab],summary{min-height:44px;min-width:44px;touch-action:manipulation}
 input:not([type=checkbox]):not([type=radio]),select,textarea{min-height:48px;font-size:16px}
 input[type=checkbox],input[type=radio]{width:24px;height:24px}
 label:has(>input[type=checkbox]),label:has(>input[type=radio]){min-height:44px;display:inline-flex;align-items:center;gap:8px}
 .tm{min-width:44px;min-height:44px}
 header.top .hsearch{min-width:44px!important;padding-inline:12px}
 td input[type=checkbox]{margin:10px}
 .exi{position:relative}.exi::after{content:"";position:absolute;inset:-14px}
 td button,td a{min-height:44px;display:inline-flex;align-items:center}
 nav.tabs a,nav.tabs button{min-height:48px}
 /* real viewport height on mobile browsers, notch-safe */
 #login,.boot{min-height:100vh;min-height:100dvh}
 header.top{padding-top:env(safe-area-inset-top);padding-left:max(10px,env(safe-area-inset-left));padding-right:max(10px,env(safe-area-inset-right))}
 footer,main{padding-bottom:max(16px,env(safe-area-inset-bottom))}
 /* 360px: nothing may push the page sideways; wide tables scroll inside their own box */
 main,.card,.sch,.g2,.g3,.g2c{min-width:0}
 img,svg,video,canvas{max-width:100%}
 .tw{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}
 /* sun-readable: slightly heavier body text and stronger muted ink */
 body{font-size:max(15px,1em);-webkit-text-size-adjust:100%}
 .mut,.cnt,small{color:#44526b}
 :focus-visible{outline:3px solid #1f7fd6;outline-offset:2px}
 a,button,select,summary,[role=tab]{-webkit-tap-highlight-color:#1f7fd633}
}
/* AA contrast fixes found by docs/A11Y_AUDIT.md (light) */
.fresh,td.num{color:#44526b}
[data-theme=dark] .mut,[data-theme=dark] small,[data-theme=dark] .cnt,[data-theme=dark] .fresh{color:#a9b8d0}
/* Calm build: low memory / save-data / slow network / reduced motion. Still polished: static, flat, no blur, no infinite loops. */
html[data-lite] *,html[data-lite] *::before,html[data-lite] *::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
html[data-lite] *{backdrop-filter:none!important;-webkit-backdrop-filter:none!important;text-shadow:none!important}
html[data-lite] .card,html[data-lite] .kpi,html[data-lite] .lcard,html[data-lite] header.top{box-shadow:0 1px 3px #0a1f4422!important}
html[data-lite] .lhero .routes,html[data-lite] .lhero .grid,html[data-lite] .wm{display:none!important}
html[data-lite] .lhero{background:#0a1f44!important}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
