@import url('https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,400;0,500;0,600;0,700;1,500&family=Noto+Sans+Mono:wght@400;500&display=swap');

:root { --ink: #e9e3d4; --moss: #0e241e; --paper: #d7cfbd; --coral: #ff7358; --sun: #f4bf54; --line: rgba(233,227,212,.22); }
* { box-sizing: border-box; }
body { margin: 0; min-width: 320px; background: var(--moss); color: var(--ink); font-family: 'Noto Sans', sans-serif; }
main { min-height: 100vh; overflow: hidden; }
.masthead { min-height: 0; position: relative; padding: clamp(1.35rem,3vw,2.4rem) max(7vw,2rem) 1.5rem; border-bottom: 1px solid var(--line); }
.kicker, label, .hint, .status, .route-meta { text-transform: uppercase; letter-spacing: .1em; font-size: .68rem; }
.kicker { color: var(--sun); position: relative; z-index: 1; }
h1 { font: 600 clamp(2rem,5vw,3.4rem)/1 'Noto Sans', sans-serif; letter-spacing: -.055em; margin: .5rem 0 .65rem; position: relative; z-index: 1; }
h1 em { color: var(--coral); font-style: normal; font-weight: 400; }
.lede { font: 400 clamp(.9rem,1.4vw,1.05rem)/1.5 'Noto Sans', sans-serif; max-width: 38rem; margin: 0; position: relative; z-index: 1; }
.grid-lines { position:absolute; inset:0; opacity:.35; background-image: linear-gradient(90deg, transparent 49.8%, var(--line) 50%, transparent 50.2%), linear-gradient(0deg, transparent 49.8%, var(--line) 50%, transparent 50.2%); background-size: 25% 100%, 100% 7rem; mask-image: linear-gradient(to bottom, transparent, #000 30%); }
.workbench { padding: 2rem max(7vw,2rem); background: var(--paper); color: var(--moss); }
form { display: grid; grid-template-columns: 1fr auto 1fr minmax(8rem,.5fr) minmax(7rem,.4fr) minmax(5.5rem,.3fr) auto; gap: 1rem; align-items: end; }
.field-wrap { position: relative; } label { display:block; margin-bottom:.55rem; font-weight:600; } input, select { width:100%; appearance:none; background:transparent; border:0; border-bottom:2px solid var(--moss); border-radius:0; padding:.35rem 0 .7rem; color:var(--moss); font:500 1.15rem 'Noto Sans',sans-serif; outline-offset:5px; } input::placeholder { color:#62766e; } select { font-size:.82rem; padding-bottom:.88rem; }
.overnight-option { display:flex; align-items:center; align-self:end; gap:.48rem; margin:0 0 .72rem; color:var(--moss); letter-spacing:.055em; text-transform:none; white-space:nowrap; font-size:.67rem; cursor:pointer; }.overnight-option input { appearance:auto; width:1rem; height:1rem; margin:0; accent-color:var(--coral); border:0; padding:0; }
.practical-toggle { margin:1rem .5rem 0 0; border:1px solid var(--sun); background:transparent; color:var(--sun); padding:.52rem .75rem; font:600 .67rem 'Noto Sans',sans-serif; letter-spacing:.07em; text-transform:uppercase; }.practical-toggle:disabled { opacity:.6; cursor:wait; }.practical-result { white-space:pre-line; margin-top:.7rem; border-left:3px solid var(--sun); color:#f4df9d; padding:.65rem .85rem; background:rgba(244,191,84,.1); font:.75rem/1.6 'Noto Sans Mono',monospace; }
button { cursor:pointer; font-family:inherit; } .swap { border:0; background:transparent; color:var(--moss); font-size:1.5rem; padding:.3rem; } .find { border:0; padding:.95rem 1.15rem; background:var(--moss); color:var(--paper); font-size:.7rem; text-transform:uppercase; letter-spacing:.08em; white-space:nowrap; transition:transform .2s; } .find:hover { transform:translate(-2px,-2px); box-shadow:3px 3px 0 var(--coral); } .find span { color:var(--sun); font-size:1.2rem; margin-left:.4rem; }
.suggestions { position:absolute; z-index:3; left:0; right:0; top:100%; background:var(--ink); box-shadow:0 6px 14px #0003; } .suggestions:empty { display:none; } .suggestions button { border:0; display:block; padding:.65rem .8rem; width:100%; text-align:left; background:none; color:var(--moss); font: .8rem 'Noto Sans',sans-serif; } .suggestions button:hover { background:var(--sun); }
.hint { margin:.9rem 0 0; color:#4e625b; letter-spacing:.04em; text-transform:none; }.status { min-height:3rem; padding:1.2rem max(7vw,2rem); color:#a3b4a5; }.status.error { color:#ff9e8b; }.results { padding:0 max(7vw,4rem) 5rem; }.results-header { display:flex; justify-content:space-between; gap:1rem; align-items:baseline; margin:1rem 0 2rem; }.results h2 { font:600 clamp(1.9rem,4vw,3.2rem)/1 'Noto Sans',sans-serif; letter-spacing:-.05em; margin:0; }.count { color:var(--sun); }.ordering-note { margin:-1rem 0 1.8rem; color:#a3b4a5; font-size:.72rem; line-height:1.5; }.route-card { position:relative; border-top:1px solid var(--line); padding:1.5rem 0 1.7rem 3.4rem; animation:arrive .45s both; }.route-number { position:absolute; left:0; top:1.6rem; color:var(--sun); font-size:.7rem; }.route-kind { color:var(--sun); font-size:.62rem; letter-spacing:.11em; text-transform:uppercase; margin-bottom:.35rem; }.route-path { font:500 clamp(1.05rem,1.7vw,1.4rem)/1.45 'Noto Sans',sans-serif; }.station { display:inline-flex; gap:.32rem; align-items:baseline; }.station:not(:last-child)::after { content:' → '; color:var(--coral); font-family:'Noto Sans Mono',monospace; font-size:.8em; margin-right:.1rem; }.crs { color:var(--sun); font: .52em 'Noto Sans Mono',monospace; letter-spacing:.07em; }.route-meta { color:#a3b4a5; margin-top:1rem; }.transfer-notes { margin-top:1rem; border-left:3px solid var(--sun); background:rgba(244,191,84,.1); color:#f4df9d; padding:.75rem .9rem; font-size:.78rem; line-height:1.5; }.transfer-notes p { margin:0; }.itinerary-toggle { margin:1rem .5rem 0 0; border:1px solid var(--coral); background:var(--coral); color:var(--moss); padding:.52rem .75rem; font:600 .67rem 'Noto Sans',sans-serif; letter-spacing:.07em; text-transform:uppercase; }.itinerary-toggle:disabled { opacity:.6; cursor:wait; }.itinerary-result { white-space:pre-line; margin-top:.7rem; border-left:3px solid var(--coral); color:#ffd4ca; padding:.65rem .85rem; background:rgba(255,115,88,.1); font:.75rem/1.6 'Noto Sans Mono',monospace; }.full-path-toggle { margin-top:1rem; border:1px solid rgba(244,191,84,.6); background:transparent; color:var(--sun); padding:.5rem .7rem; font-size:.67rem; letter-spacing:.07em; text-transform:uppercase; }.full-path-toggle:hover { background:var(--sun); color:var(--moss); }.route-card details { margin-top:1rem; color:#cad1c3; font-size:.75rem; }.route-card summary { cursor:pointer; color:var(--sun); }.full-route-path { margin-top:.7rem; color:#d9dfd5; line-height:1.75; }.proof { padding-left:1.2rem; line-height:1.65; }.notice { border-left:3px solid var(--coral); padding:1rem 1.2rem; background:#17352c; color:#cfd9cd; font: .85rem/1.5 'Noto Sans Mono',monospace; } @keyframes arrive { from { opacity:0; transform:translateY(14px) } to { opacity:1; transform:translateY(0) } }
.map-panel { margin:0 max(7vw,4rem) 2.5rem; border:1px solid var(--line); background:#102b24; }.map-caption { display:flex; justify-content:space-between; gap:1rem; padding:.85rem 1rem; text-transform:uppercase; letter-spacing:.1em; font-size:.65rem; color:var(--sun); }.map-caption small { color:#a3b4a5; text-align:right; }.leaflet-container { background:#18382e; font-family:'Noto Sans',sans-serif; }.leaflet-control-attribution { font-size:9px!important; }.leaflet-popup-content { color:var(--moss); font-family:'Noto Sans',sans-serif; font-size:.72rem; }#route-map { height:clamp(300px,48vw,510px); }.route-card { cursor:pointer; }.route-card.selected { border-left:3px solid var(--coral); padding-left:calc(3.4rem - 3px); background:linear-gradient(90deg,rgba(255,115,88,.11),transparent 65%); }
.stopover-workshop { margin:0 max(7vw,4rem) 2.5rem; padding:1.4rem 1.5rem 1.55rem; border:1px solid rgba(244,191,84,.55); background:linear-gradient(115deg,rgba(244,191,84,.12),rgba(16,43,36,.4) 55%); }.stopover-heading { display:flex; justify-content:space-between; align-items:end; gap:1rem; }.stopover-heading h2 { margin:.35rem 0 0; font:600 clamp(1.55rem,3vw,2.35rem)/1 'Noto Sans',sans-serif; letter-spacing:-.04em; }.stopover-heading p { margin:0; color:var(--sun); font:.68rem/1.45 'Noto Sans Mono',monospace; text-align:right; }.stopover-intro { max-width:51rem; margin:1.15rem 0; color:#cbd4c6; font-size:.82rem; line-height:1.55; }.stopover-suggestions { display:flex; flex-wrap:wrap; gap:.45rem; margin:.75rem 0 1.25rem; }.stopover-suggestions:empty { display:none; }.stopover-suggestions button,.add-stopover { border:1px solid rgba(244,191,84,.65); background:transparent; color:var(--sun); padding:.4rem .55rem; font:.65rem 'Noto Sans Mono',monospace; }.stopover-suggestions button:hover,.add-stopover:hover { background:var(--sun); color:var(--moss); }.stopover-form { display:grid; grid-template-columns:minmax(8rem,.7fr) minmax(7rem,.5fr) minmax(12rem,1.1fr) minmax(5rem,.4fr) auto auto; gap:.8rem; align-items:end; }.stopover-form input,.stopover-form select { border-color:var(--sun); color:var(--ink); font-size:.9rem; }.stopover-form label { color:#d8dfd3; }.plan-stopovers { border:0; background:var(--sun); color:var(--moss); padding:.7rem .8rem; font:600 .67rem 'Noto Sans',sans-serif; letter-spacing:.07em; text-transform:uppercase; white-space:nowrap; }.stopover-list { display:flex; flex-wrap:wrap; gap:.5rem; margin-top:1rem; }.stopover-chip { display:flex; align-items:center; gap:.45rem; padding:.43rem .5rem .43rem .65rem; border-left:2px solid var(--coral); background:#17352c; color:#e4e9dc; font:.72rem 'Noto Sans Mono',monospace; }.stopover-chip button { border:0; color:var(--coral); background:transparent; font-size:1rem; line-height:1; }.stopover-result { white-space:pre-line; margin-top:1rem; border-left:3px solid var(--sun); color:#f4df9d; padding:.75rem .9rem; background:rgba(244,191,84,.1); font:.75rem/1.6 'Noto Sans Mono',monospace; }
@media (max-width:700px) { .masthead { min-height:42vh; } form { grid-template-columns:1fr auto; }.field-wrap, .overnight-option { grid-column:1 / -1; }.swap { grid-column:2; grid-row:1; justify-self:end; }.find { grid-column:1 / -1; }.results-header { display:block; }.count { display:block; margin-top:.7rem; }.stopover-heading { display:block; }.stopover-heading p { text-align:left; margin-top:.7rem; }.stopover-form { grid-template-columns:1fr 1fr; }.stopover-form .field-wrap:nth-child(3) { grid-column:1 / -1; }.add-stopover,.plan-stopovers { grid-column:1 / -1; } }
