/* base.css: design tokens, reset, typography, header and brand. */
:root{color-scheme:light;padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px)}body{margin:0}[hidden]{display:none!important}
/* Layout concept: signage-style control panel on the left, full-bleed map on the right.
   Under 820px the map sits on top and the panel becomes a scrolling lower sheet. */
:root{
  --paper:#eef1f4; --panel:#ffffff; --ink:#0f1c2c; --mute:#5b6b7c; --line:#d6dde4;
  --accent:#1f5fae; --accent-ink:#ffffff;
  --bus:#1f5fae; --trolley:#17814f; --train:#d4501a;
  --good:#17703f; --warn:#a85f00; --bad:#b8301f; --info:#1f5fae; --unk:#5b6b7c;
  --good-bg:#e1f3e8; --warn-bg:#fbeed6; --bad-bg:#fbe3df; --info-bg:#e1ecf9; --unk-bg:#e8ecf0;
  --map-bg:#dfe5ea; --tile-filter:none; --shadow:0 6px 22px rgba(15,28,44,.18);
  --f-title:"Helvetica Neue",Helvetica,Arial,sans-serif;
  --f-display:"Barlow Condensed","Arial Narrow",system-ui,sans-serif;
  --f-body:"Barlow",system-ui,-apple-system,"Segoe UI",sans-serif;
  --f-mono:"IBM Plex Mono",ui-monospace,Menlo,monospace;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --paper:#0a1119; --panel:#111b27; --ink:#e7eef6; --mute:#9aabbd; --line:#25364a;
    --accent:#5da4f3; --accent-ink:#06121f;
    --bus:#5da4f3; --trolley:#3cc088; --train:#ff7d47;
    --good:#52d08c; --warn:#f0b04a; --bad:#ff8a78; --info:#7db6f7; --unk:#9aabbd;
    --good-bg:#12301f; --warn-bg:#33270f; --bad-bg:#3a1a15; --info-bg:#122a46; --unk-bg:#1b2a3a;
    --map-bg:#0e1620; --tile-filter:invert(1) hue-rotate(180deg) brightness(.92) contrast(.88) saturate(.7);
    --shadow:0 6px 22px rgba(0,0,0,.5); color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --paper:#0a1119; --panel:#111b27; --ink:#e7eef6; --mute:#9aabbd; --line:#25364a;
  --accent:#5da4f3; --accent-ink:#06121f;
  --bus:#5da4f3; --trolley:#3cc088; --train:#ff7d47;
  --good:#52d08c; --warn:#f0b04a; --bad:#ff8a78; --info:#7db6f7; --unk:#9aabbd;
  --good-bg:#12301f; --warn-bg:#33270f; --bad-bg:#3a1a15; --info-bg:#122a46; --unk-bg:#1b2a3a;
  --map-bg:#0e1620; --tile-filter:invert(1) hue-rotate(180deg) brightness(.92) contrast(.88) saturate(.7);
  --shadow:0 6px 22px rgba(0,0,0,.5); color-scheme:dark;
}
/* The page is exactly one screen tall. dvh follows a phone browser's collapsing toolbar (vh is the fallback); --kb is the height an
   on-screen keyboard covers when the browser does not shrink the layout for it (set by js/sheet.js, 0 otherwise). */
html{height:100vh;height:calc(100dvh - var(--kb,0px))}
body{height:100%}
body{background:var(--paper);color:var(--ink);font-family:var(--f-body);font-size:14px;line-height:1.4;overflow:hidden}
*{box-sizing:border-box}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.brand{padding:16px 18px 12px;border-bottom:1px solid var(--line)}
/* The wordmark is set in the plain Helvetica-style system stack (ARCHITECTURE.md 15.1); no webfont, so no licensed font file ships. */
.brand h1{margin:0;font:700 26px/1 var(--f-title);letter-spacing:normal;text-transform:none;color:var(--accent)}
.status{display:flex;align-items:center;gap:8px;margin-top:8px;font-size:13px;color:var(--mute);min-width:0}
.dot{flex:none;width:9px;height:9px;border-radius:50%;background:var(--unk)}
.dot.live{background:var(--good);animation:pulse 2s ease-out infinite}
.dot.stale{background:var(--warn)} .dot.err{background:var(--bad)}
@keyframes pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--good) 55%,transparent)}100%{box-shadow:0 0 0 8px transparent}}
@media (prefers-reduced-motion:reduce){.dot.live{animation:none}}
.status b{color:var(--ink);font-weight:600}
