@font-face{font-family:"Space Grotesk";src:url("assets/space-grotesk.ttf") format("truetype");font-weight:300 700;font-display:swap}
@font-face{font-family:"Work Sans";src:url("assets/work-sans.ttf") format("truetype");font-weight:100 900;font-display:swap}
@font-face{font-family:"IBM Plex Mono";src:url("assets/ibm-plex-mono.ttf") format("truetype");font-weight:400;font-display:swap}

:root{
  --bg:#0c1330;
  --bg-2:#111a3c;
  --surface:#18224a;
  --ink:#f3efe4;
  --muted:#aab2cf;
  --accent:#ffc72c;
  --accent-ink:#0c1330;
  --paper:#f4f0e6;
  --paper-ink:#141a36;
  --paper-muted:#4a5273;
  --line:rgba(243,239,228,.22);
  --line-strong:rgba(243,239,228,.55);
  --display:"Space Grotesk","Helvetica Neue",Arial,sans-serif;
  --text:"Work Sans","Helvetica Neue",Arial,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;
  --ease:cubic-bezier(.22,1,.36,1);
  --gutter:clamp(20px,4vw,56px);
}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:16px;-webkit-text-size-adjust:100%}
html.lock{overflow:hidden}
body{margin:0;background:var(--bg);color:var(--ink);font:400 17px/1.6 var(--text);overflow-x:clip}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer}
h1,h2,h3,p,ol,ul{margin:0}
ol,ul{padding:0;list-style:none}
a{color:inherit}
:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:12px;top:-60px;z-index:100;background:var(--accent);color:var(--accent-ink);padding:12px 20px;font-weight:600;text-decoration:none}
.skip:focus{top:12px}
.wrap{width:100%;max-width:1360px;margin-inline:auto;padding-inline:var(--gutter)}
.label{font:400 12px/1.3 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.h-display{font:700 clamp(36px,5.2vw,76px)/1 var(--display);letter-spacing:-.035em}

/* top bar */
.top{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px var(--gutter);max-width:1360px;margin-inline:auto}
.brand{display:inline-flex;align-items:center;gap:10px;min-height:44px;font:700 20px/1 var(--display);letter-spacing:-.02em;text-decoration:none;text-transform:uppercase}
.brand-mark{width:22px;height:22px;border-radius:50%;border:3px solid var(--accent);position:relative}
.brand-mark::before{content:"";position:absolute;left:50%;top:2px;width:3px;height:7px;margin-left:-1.5px;background:var(--accent);border-radius:2px}
.brand-mark::after{content:"";position:absolute;left:50%;top:50%;width:3px;height:6px;margin-left:-1.5px;background:var(--accent);border-radius:2px;transform-origin:50% 0;transform:translateY(-1px) rotate(180deg)}
.top-nav{display:flex;gap:4px;overflow-x:auto}
.top-nav a{display:inline-flex;align-items:center;min-height:44px;padding:0 14px;font:400 13px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;text-decoration:none;white-space:nowrap;border-radius:2px}

/* hero */
.hero{padding-top:clamp(8px,2vw,24px);border-bottom:2px solid var(--line)}
.hero-grid{display:grid;gap:32px;align-items:end;padding-bottom:clamp(32px,4vw,56px)}
.wordmark{font:700 27vw/.84 var(--display);letter-spacing:-.045em;text-transform:uppercase;color:var(--ink)}
.wordmark span{display:block;animation:rise .8s var(--ease) both}
.wordmark span:last-child{color:var(--accent);animation-delay:.09s}
.hero-side{display:grid;gap:20px;animation:fade .8s .2s var(--ease) both}
.kicker{font:400 13px/1.3 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.lede{font:600 clamp(22px,2.2vw,30px)/1.2 var(--display);letter-spacing:-.02em;max-width:22ch}

.plate{display:grid;grid-template-columns:96px 1fr;gap:20px;align-items:start;background:var(--accent);color:var(--accent-ink);padding:20px;border-radius:4px}
.plate .label{color:var(--accent-ink);margin-bottom:8px}
.plate-title{font:700 clamp(22px,2vw,28px)/1.1 var(--display);letter-spacing:-.02em}
.plate-meta{font:400 13px/1.4 var(--mono);margin:8px 0 16px}
.clock{width:96px;height:96px}
.clock-face{fill:none;stroke:var(--accent-ink);stroke-width:5}
.clock-ticks path{stroke:var(--accent-ink);stroke-width:5;stroke-linecap:round}
.hand-h,.hand-m{stroke:var(--accent-ink);stroke-width:6;stroke-linecap:round;fill:none}
.hand-s{transform-origin:50px 50px;animation:sweep 60s linear infinite}
.hand-s path{stroke:var(--accent-ink);stroke-width:2;fill:none;opacity:.55}
.clock-pin{fill:var(--accent-ink)}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:48px;padding:12px 20px;border:2px solid var(--ink);border-radius:2px;background:transparent;font:600 16px/1.2 var(--text);transition:background-color .18s var(--ease),color .18s var(--ease),transform .18s var(--ease),border-color .18s var(--ease)}
.btn:active,.stop:active,.d-close:active,.d-save:active,.d-back:active,.top-nav a:active,.foot-link:active,.shelf-open:active{transform:scale(.97)}
.btn-dark{background:var(--accent-ink);border-color:var(--accent-ink);color:var(--accent)}
.btn-dark:disabled{opacity:.6;cursor:default}
.btn-accent{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn-toggle{justify-content:flex-start;min-height:52px;border-color:var(--line-strong);background:var(--surface)}
.btn-toggle .tick{width:18px;height:22px;border:2px solid currentColor;border-bottom-width:0;clip-path:polygon(0 0,100% 0,100% 100%,50% 72%,0 100%)}
.btn-toggle .badge{font:400 13px/1 var(--mono);padding:4px 8px;border:1px solid currentColor;border-radius:99px}
.btn-toggle[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn-toggle[aria-pressed="true"] .tick{background:currentColor}

/* route (topic filter) */
.route-wrap{padding-bottom:clamp(24px,3vw,40px)}
.route-head{display:flex;justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:8px}
.route-hint{font-size:14px;color:var(--muted)}
.route-scroll{overflow-x:auto;padding-inline-end:24px;margin-inline:calc(var(--gutter) * -1);padding-inline-start:var(--gutter);scrollbar-width:thin}
.route-track{position:relative;min-width:640px;padding-top:36px}
.route{display:flex;position:relative}
.route::before{content:"";position:absolute;left:calc(100% / 12);right:calc(100% / 12);top:10px;height:4px;background:var(--line-strong);border-radius:2px}
.route li{flex:1 1 0}
.stop{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;width:100%;min-height:88px;padding:0 4px 8px;background:none;border:0;color:var(--ink);text-align:center;transition:transform .18s var(--ease)}
.dot{width:24px;height:24px;border-radius:50%;border:4px solid var(--ink);background:var(--bg);transition:background-color .2s var(--ease),border-color .2s var(--ease),transform .2s var(--ease)}
.stop-name{font:600 17px/1.1 var(--display);letter-spacing:-.01em}
.stop-count{font:400 12px/1 var(--mono);letter-spacing:.08em;color:var(--muted);text-transform:uppercase}
.stop[aria-pressed="true"] .dot{background:var(--accent);border-color:var(--accent);transform:scale(1.25)}
.stop[aria-pressed="true"] .stop-name{color:var(--accent)}
.bus{position:absolute;z-index:2;top:0;left:calc((var(--i,0) + .5) * (100% / 6));width:46px;height:24px;margin-left:-23px;background:var(--accent);border-radius:7px 7px 3px 3px;transition:left .32s var(--ease)}
.bus::before{content:"";position:absolute;inset:5px 5px auto 5px;height:8px;background:repeating-linear-gradient(90deg,var(--bg) 0 8px,transparent 8px 11px);border-radius:1px}
.bus::after{content:"";position:absolute;left:7px;bottom:-4px;width:8px;height:8px;border-radius:50%;background:var(--bg);box-shadow:24px 0 0 var(--bg),0 0 0 2px var(--accent),24px 0 0 2px var(--accent)}

/* board */
.board{background:var(--bg-2);padding-block:clamp(64px,8vw,128px) clamp(64px,7vw,112px)}
.board-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:end;gap:16px 48px;margin-bottom:clamp(32px,4vw,48px)}
.board-note{max-width:36ch;color:var(--muted)}
.controls{display:grid;gap:16px;padding:20px;background:var(--bg);border:2px solid var(--line);border-radius:4px;margin-bottom:16px}
.field{display:grid;gap:6px}
.field label{font:400 12px/1.2 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.field input,.field select{width:100%;min-height:52px;padding:10px 14px;font-size:16px;background:var(--surface);border:2px solid var(--line-strong);border-radius:2px;color:var(--ink)}
.field input::placeholder{color:#8d96b8;opacity:1}
.field select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink) 50%),linear-gradient(135deg,var(--ink) 50%,transparent 50%);background-position:calc(100% - 22px) 50%,calc(100% - 16px) 50%;background-size:6px 6px;background-repeat:no-repeat;padding-right:40px}
.field select option{color:#141a36;background:#f4f0e6}
.count{font:400 13px/1.3 var(--mono);letter-spacing:.06em;color:var(--muted);min-height:20px;margin-bottom:8px}
.notice{padding:16px 0;color:var(--accent)}

.list{border-top:2px solid var(--line-strong)}
.row{position:relative;display:grid;grid-template-columns:64px 1fr;gap:4px 20px;align-items:start;padding:24px 8px;border-bottom:2px dashed var(--line);transition:background-color .18s var(--ease),color .18s var(--ease)}
.mins{display:flex;flex-direction:column;align-items:flex-start;color:var(--accent)}
.mins-num{font:700 clamp(48px,6vw,88px)/.9 var(--display);letter-spacing:-.05em}
.mins-unit{font:400 12px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;margin-top:4px}
.meta{display:flex;flex-wrap:wrap;gap:4px 12px;font:400 12px/1.4 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.meta .cat{color:var(--accent);font-weight:400}
.row-title{font:700 clamp(24px,3vw,42px)/1.05 var(--display);letter-spacing:-.025em;max-width:24ch}
.open{all:unset;cursor:pointer}
.open::after{content:"";position:absolute;inset:0}
.open:focus-visible{outline:none}
.open:focus-visible::after{outline:3px solid var(--accent);outline-offset:-3px}
.sum{margin-top:10px;max-width:56ch;color:var(--muted)}
.row-side{display:none}
.saved-mark{display:none;align-items:center;gap:8px;font:400 12px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase}
.saved-mark::before{content:"";width:12px;height:16px;background:currentColor;clip-path:polygon(0 0,100% 0,100% 100%,50% 72%,0 100%)}
.row.is-saved .saved-mark{display:inline-flex}
.go{font:700 32px/1 var(--display);transition:transform .2s var(--ease)}

.empty{padding:clamp(32px,6vw,72px) 0;display:grid;justify-items:start;gap:12px}
.empty[hidden]{display:none}
.empty-big{font:700 clamp(56px,13vw,200px)/.85 var(--display);letter-spacing:-.05em;text-transform:uppercase;color:transparent;-webkit-text-stroke:2px var(--line-strong)}
.empty h3{font:700 clamp(24px,3vw,36px)/1.1 var(--display);letter-spacing:-.02em}
.empty p:not(.empty-big){color:var(--muted);max-width:44ch}
.empty .btn{margin-top:8px}

/* saved shelf: full-bleed yellow band */
.shelf{background:var(--accent);color:var(--accent-ink);padding-block:clamp(80px,10vw,144px)}
.shelf-grid{display:grid;gap:32px}
.shelf-note{margin-top:16px;max-width:34ch;font-weight:500}
.shelf-list{border-top:2px solid var(--accent-ink)}
.shelf-list li{border-bottom:2px dashed rgba(12,19,48,.5)}
.shelf-open{all:unset;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%;min-height:64px;padding:12px 8px;cursor:pointer;font:700 clamp(20px,2vw,26px)/1.15 var(--display);letter-spacing:-.02em;transition:background-color .18s var(--ease),color .18s var(--ease),transform .18s var(--ease)}
.shelf-open:focus-visible{outline:3px solid var(--accent-ink);outline-offset:-3px}
.shelf-open small{font:400 12px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;white-space:nowrap}
.shelf-empty{font-weight:500;padding:16px 0}
.shelf-empty[hidden]{display:none}
.shelf .btn{margin-top:20px}
.shelf :focus-visible{outline-color:var(--accent-ink)}

.foot{padding-block:32px;background:var(--bg);font-size:15px;color:var(--muted)}
.foot-grid{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 32px}
.foot strong{color:var(--ink)}
.foot-link{display:inline-flex;align-items:center;gap:8px;min-height:44px;color:var(--ink);font:400 13px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase}

/* detail dialog */
.detail{position:fixed;inset:0 0 0 auto;width:min(960px,100%);max-width:none;height:100dvh;max-height:none;margin:0;padding:0;border:0;background:var(--paper);color:var(--paper-ink);overflow-y:auto;overscroll-behavior:contain}
.detail:not([open]){display:none}
.detail[open]{display:block;animation:slide .26s var(--ease)}
.detail::backdrop{background:rgba(6,10,28,.72)}
.detail :focus-visible{outline-color:var(--paper-ink)}
.d-bar{position:sticky;top:0;z-index:3;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:6px var(--gutter) 10px;background:var(--paper);border-bottom:2px solid var(--paper-ink)}
.d-bar .label{color:var(--paper-muted)}
.d-close{display:inline-flex;align-items:center;gap:10px;min-height:48px;padding:0 18px;border:2px solid var(--paper-ink);border-radius:2px;background:var(--paper-ink);color:var(--accent);font:600 16px/1 var(--text);transition:background-color .18s var(--ease),color .18s var(--ease),transform .18s var(--ease)}
.d-progress{position:absolute;left:0;right:0;bottom:-2px;height:2px;pointer-events:none}
.d-line{position:absolute;left:0;top:0;height:6px;width:calc(var(--p,0) * 100%);margin-top:-2px;background:var(--accent);border-top:2px solid var(--paper-ink)}
.d-bus{position:absolute;top:-14px;left:calc(var(--p,0) * (100% - 28px));width:28px;height:14px;background:var(--accent);border:2px solid var(--paper-ink);border-radius:5px 5px 2px 2px}
.d-article{padding:clamp(32px,5vw,72px) var(--gutter) clamp(64px,8vw,112px);max-width:820px}
.d-meta{font:400 12px/1.5 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--paper-muted)}
.d-title{font:700 clamp(36px,5.6vw,68px)/1 var(--display);letter-spacing:-.035em;margin:16px 0 20px}
.d-sum{font:500 clamp(19px,2vw,22px)/1.45 var(--text);color:var(--paper-muted);max-width:44ch}
.d-save{display:inline-flex;align-items:center;gap:12px;min-height:52px;margin-top:28px;padding:12px 22px;border:2px solid var(--paper-ink);border-radius:2px;background:var(--accent);color:var(--accent-ink);font:600 17px/1.2 var(--text);transition:background-color .18s var(--ease),color .18s var(--ease),transform .18s var(--ease)}
.d-save-icon{width:16px;height:22px;border:2.5px solid currentColor;border-bottom-width:0;clip-path:polygon(0 0,100% 0,100% 100%,50% 72%,0 100%)}
.d-save[aria-pressed="true"]{background:var(--paper-ink);color:var(--accent)}
.d-save[aria-pressed="true"] .d-save-icon{background:currentColor}
.d-body{margin-top:clamp(32px,4vw,56px);padding-top:clamp(24px,3vw,40px);border-top:2px dashed var(--paper-ink)}
.d-body p{font:400 clamp(18px,1.4vw,20px)/1.7 var(--text);max-width:62ch;margin-bottom:1.3em;color:#1d2442}
.d-body p:first-child::first-letter{float:left;font:700 4.4em/.8 var(--display);padding:.08em .1em 0 0;color:var(--paper-ink)}
.d-end{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:40px;font:400 13px/1.4 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--paper-muted)}
.d-back{min-height:44px;padding:0 4px;border:0;background:none;color:var(--paper-ink);font:600 15px/1 var(--text);text-decoration:underline;text-underline-offset:4px;transition:color .18s var(--ease),transform .18s var(--ease)}

/* hover: pointer devices only */
@media (hover:hover) and (pointer:fine){
  .top-nav a:hover{background:var(--surface)}
  .brand:hover .brand-mark{transform:rotate(30deg)}
  .btn-dark:not(:disabled):hover{background:#1f2b5e;border-color:#1f2b5e}
  .btn-accent:hover{background:var(--ink);border-color:var(--ink)}
  .btn-toggle:hover{border-color:var(--accent)}
  .btn-toggle[aria-pressed="true"]:hover{background:var(--ink);border-color:var(--ink)}
  .stop:hover .dot{border-color:var(--accent);transform:scale(1.15)}
  .stop:hover .stop-name{color:var(--accent)}
  .field input:hover,.field select:hover{border-color:var(--accent)}
  .row:hover{background:var(--accent);color:var(--accent-ink)}
  .row:hover .mins,.row:hover .sum,.row:hover .meta,.row:hover .meta .cat{color:var(--accent-ink)}
  .row:hover .go{transform:translateX(6px)}
  .shelf-open:hover{background:var(--accent-ink);color:var(--accent)}
  .foot-link:hover{color:var(--accent)}
  .d-close:hover{background:var(--accent);color:var(--paper-ink)}
  .d-save:hover{background:var(--paper-ink);color:var(--accent)}
  .d-save[aria-pressed="true"]:hover{background:var(--accent);color:var(--accent-ink)}
  .d-back:hover{color:#8a6500}
  .brand-mark{transition:transform .25s var(--ease)}
}

/* wide screens */
@media (min-width:760px){
  .controls{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) auto;align-items:end}
  .row{grid-template-columns:120px 1fr auto;gap:4px 32px;padding:28px 16px}
  .row-side{display:flex;flex-direction:column;align-items:flex-end;justify-content:space-between;align-self:stretch;gap:12px;min-width:72px}
  .shelf-grid{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:64px}
}
@media (min-width:980px){
  .hero-grid{grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:48px}
  .wordmark{font-size:min(16vw,260px)}
  .top{padding-block:12px}
}
@media (max-width:759px){
  .row .saved-mark{grid-column:2}
  .row .go{display:none}
  .row-side{display:flex;grid-column:2}
  .plate{grid-template-columns:72px 1fr;padding:16px}
  .clock{width:72px;height:72px}
  .route-scroll{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent)}
  .d-bar .label{display:none}
  .d-close{flex:1;justify-content:center}
}

@keyframes rise{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:none}}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes sweep{to{transform:rotate(360deg)}}
@keyframes slide{from{opacity:.4;transform:translateX(48px)}to{opacity:1;transform:none}}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .wordmark span,.hero-side{animation:fade .4s both}
  .hand-s{animation:none}
  .detail[open]{animation:fade .2s both}
  .bus,.dot,.btn,.row,.go{transition:none}
}
