@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-vietnamese-wght-normal-BUzh504Q.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-latin-ext-wght-normal-CcLUaPy7.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-latin-wght-normal-DLoelf7F.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-latin-ext-400-normal-DRk46D-x.woff2)format("woff2"),url(/assets/atkinson-hyperlegible-latin-ext-400-normal-Bbz-b3yf.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-latin-400-normal-BrHNak5F.woff2)format("woff2"),url(/assets/atkinson-hyperlegible-latin-400-normal-BbWidj28.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/atkinson-hyperlegible-latin-ext-700-normal-BoVPHkS0.woff2)format("woff2"),url(/assets/atkinson-hyperlegible-latin-ext-700-normal-CKkU2Dpt.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/atkinson-hyperlegible-latin-700-normal-GZI4o3u0.woff2)format("woff2"),url(/assets/atkinson-hyperlegible-latin-700-normal-BK6Glc0m.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:VT323;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/vt323-vietnamese-400-normal-D0VnvwZ9.woff2)format("woff2"),url(/assets/vt323-vietnamese-400-normal-D_5Q7Vcv.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:VT323;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/vt323-latin-ext-400-normal-iUdYUaX4.woff2)format("woff2"),url(/assets/vt323-latin-ext-400-normal-DqOq58ri.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:VT323;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/vt323-latin-400-normal-wDgJuOC9.woff2)format("woff2"),url(/assets/vt323-latin-400-normal-Dqn9ZSPj.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper:#f6efe0;--paper-deep:#ecdfc4;--ink:#1d2331;--ink-soft:#4b5163;--sign:#0f4c9c;--sign-dark:#0a356e;--amber:#ffb000;--amber-glow:#ffb0008c;--board:#15161b;--go:#2e7d32;--stop:#c62828;--radius:18px;--shadow:0 3px 0 #1d23312e, 0 10px 24px #1d23311f;--font-display:"Bricolage Grotesque Variable", "Trebuchet MS", sans-serif;--font-body:"Atkinson Hyperlegible", "Verdana", sans-serif;--font-board:"VT323", "Courier New", monospace;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body{min-height:100%;margin:0}body{font-family:var(--font-body);color:var(--ink);background-color:var(--paper);-webkit-tap-highlight-color:transparent;background-image:linear-gradient(#0f4c9c0d 1px,#0000 1px),linear-gradient(90deg,#0f4c9c0d 1px,#0000 1px),radial-gradient(circle at 20% 10%,#ffb0001f,#0000 40%),radial-gradient(circle at 90% 80%,#0f4c9c1a,#0000 45%);background-size:28px 28px,28px 28px,100% 100%,100% 100%;background-attachment:fixed;font-size:17px;line-height:1.45}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.02em;margin:0 0 .4em;font-weight:800}.app{max-width:820px;padding:0 14px calc(24px + env(safe-area-inset-bottom));flex-direction:column;min-height:100vh;margin:0 auto;display:flex}main{flex:1}button,select{font:inherit;color:var(--ink);border:2px solid var(--ink);cursor:pointer;min-height:48px;box-shadow:0 3px 0 var(--ink);background:#fff;border-radius:999px;padding:10px 18px;font-weight:700;transition:transform 80ms,box-shadow 80ms,background .2s}button:active:not(:disabled){box-shadow:0 0 0 var(--ink);transform:translateY(3px)}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--amber);font-family:var(--font-display);font-size:1.1em}button.big{font-family:var(--font-display);border-radius:var(--radius);min-height:64px;padding:16px 26px;font-size:1.35rem}button.icon{width:48px;padding:0;font-size:1.3rem}:focus-visible{outline:3px solid var(--sign);outline-offset:3px}.topbar{z-index:20;padding:calc(10px + env(safe-area-inset-top)) 14px 10px;background:var(--sign);color:#fff;border-bottom:4px solid var(--amber);align-items:center;gap:12px;margin:0 -14px 14px;display:flex;position:sticky;top:0}.topbar h1{flex:1;margin:0;font-size:1.4rem}.topbar .brand{font-family:var(--font-display);opacity:.85;white-space:nowrap;font-weight:700}.topbar button.icon{background:#fff}.home{text-align:center;flex-direction:column;align-items:center;gap:22px;padding-top:5vh;display:flex}.hero{background:var(--sign);color:#fff;width:min(560px,100%);box-shadow:var(--shadow), inset 0 0 0 5px var(--sign-dark), inset 0 0 0 8px #fff;border-radius:28px;padding:28px 30px 24px;animation:.5s ease-out both rise;position:relative}.hero:after{content:"";background:linear-gradient(90deg,#8a8f99,#d7dae0,#8a8f99);width:14px;height:30px;margin-left:-7px;position:absolute;bottom:-30px;left:50%}.hero h1{margin:6px 0 10px;font-size:clamp(2.6rem,9vw,4.2rem);line-height:1}.hero-icons{font-size:2.6rem;animation:2.8s ease-in-out infinite drive}.hero .city{background:var(--amber);color:var(--ink);border-radius:999px;margin:8px 0 0;padding:4px 14px;font-weight:700;display:inline-block}.menu{gap:14px;width:min(420px,100%);margin-top:16px;display:grid}.menu>*{animation:.5s ease-out both rise}.menu>:first-child{animation-delay:.12s}.menu>:nth-child(2){animation-delay:.2s}.menu>:nth-child(3){animation-delay:.28s}.stats{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.stats>div{background:var(--board);color:#f3e6c8;min-width:110px;box-shadow:var(--shadow);border-radius:12px;flex-direction:column;padding:10px 14px;display:flex}.stats .num{font-family:var(--font-board);color:var(--amber);text-shadow:0 0 10px var(--amber-glow);font-size:2.4rem;line-height:1}.scorebar{justify-content:flex-end;gap:16px;margin-bottom:8px;font-weight:700;display:flex}.task{background:var(--board);color:#f3e6c8;border-radius:var(--radius);box-shadow:var(--shadow);gap:4px;padding:12px 16px;animation:.35s ease-out both rise;display:grid}.task b{font-family:var(--font-board);letter-spacing:.02em;color:var(--amber);text-shadow:0 0 8px var(--amber-glow);font-size:1.55rem;font-weight:400}.endpoint{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.label{opacity:.8}.map{border-radius:var(--radius);border:3px solid var(--ink);height:min(46vh,420px);box-shadow:var(--shadow);background:var(--paper-deep);margin:12px 0;overflow:hidden}.pin{color:#fff;width:36px;height:36px;font-family:var(--font-display);border:3px solid #fff;border-radius:50% 50% 50% 4px;place-items:center;font-weight:800;display:grid;transform:rotate(-45deg);box-shadow:0 3px 8px #00000059}.pin>*{transform:rotate(45deg)}.pin.small{border-width:2px;border-radius:50%;width:26px;height:26px;font-size:.85rem;transform:none}.stop-dot{background:#fff;border:4px solid;border-radius:50%;width:14px;height:14px;transform:translateY(7px)}.guess{flex-wrap:wrap;align-items:center;gap:8px;min-height:44px;margin:8px 0;display:flex}.actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;display:flex}.actions.sticky{z-index:10;padding:10px 0 calc(10px + env(safe-area-inset-bottom));background:linear-gradient(transparent, var(--paper) 30%);position:sticky;bottom:0}.hint{color:var(--ink-soft);margin:6px 0;font-weight:700}.line-picker section,section.line-picker{margin:14px 0}.line-picker h3{align-items:center;gap:6px;font-size:1.15rem;display:flex}.line-grid{grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:10px;display:grid}.line-badge{font-family:var(--font-display);letter-spacing:-.01em;white-space:nowrap;border:3px solid #00000047;border-radius:10px;justify-content:center;align-items:center;gap:5px;font-weight:800;display:inline-flex;position:relative;box-shadow:inset 0 -4px #0000002e,0 2px #0003}button.line-badge{border-radius:12px;min-height:56px;padding:6px 8px;font-size:1.3rem;transition:transform .12s}button.line-badge:active:not(:disabled){transform:scale(.94);box-shadow:inset 0 -2px #0000002e}button.line-badge.selected{outline:4px solid var(--ink);outline-offset:2px;transform:translateY(-2px)rotate(-2deg)}span.line-badge.normal{padding:6px 14px;font-size:1.3rem}.line-badge.small{border-width:2px;border-radius:8px;padding:2px 9px;font-size:1rem}.line-badge.line-tram{border-radius:999px}.line-badge .check{background:var(--ink);color:#fff;border-radius:50%;place-items:center;width:24px;height:24px;font-size:.85rem;animation:.2s ease-out pop;display:grid;position:absolute;top:-10px;right:-8px}.line-badge.correct{outline:3px solid var(--go);outline-offset:2px}.line-badge.wrong{outline:3px dashed var(--stop);outline-offset:2px;opacity:.75}.line-badge.missed{outline:3px dotted var(--amber);outline-offset:2px}.legend{flex-wrap:wrap;gap:14px;font-size:.85rem;display:flex}.legend-chip{color:var(--ink);font-family:var(--font-body);background:#fff;font-weight:700}.banner{text-align:center;border-radius:var(--radius);border:3px solid var(--ink);box-shadow:var(--shadow);margin:12px 0;padding:16px;animation:.35s ease-out both pop}.banner .big{font-family:var(--font-board);font-size:3.2rem;line-height:1}.banner.best{background:var(--amber)}.banner.alternative{background:#bfe3c0}.banner.partial{background:#fff}.banner.miss{background:#f3c9c4}.options{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:8px;display:grid}button.option{text-align:left;border-radius:14px;flex-direction:column;align-items:flex-start;gap:6px;font-weight:400;display:flex}button.option.active{background:var(--sign);color:#fff}.option-title{font-family:var(--font-display);font-weight:800}.option-lines{flex-wrap:wrap;gap:6px;display:flex}.steps{border-left:6px dotted var(--ink-soft);margin:16px 0 16px 12px;padding:0;list-style:none}.step{padding:8px 0 8px 18px;position:relative}.step:before{content:"";border:4px solid var(--ink);background:#fff;border-radius:50%;width:16px;height:16px;position:absolute;top:14px;left:-13px}.step-head{flex-wrap:wrap;align-items:center;gap:8px;font-weight:700;display:flex}.step-body b{font-family:var(--font-board);font-size:1.3rem;font-weight:400}.step.walk{color:var(--ink-soft)}.explorer-head{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.directions{flex-wrap:wrap;gap:8px;display:flex}.directions button.active,.segmented button.active{background:var(--sign);color:#fff}.stop-list{columns:2 220px;border-radius:var(--radius);box-shadow:var(--shadow);background:#fff;margin:12px 0;padding:12px 12px 12px 48px}.panel{border:2px solid var(--ink);border-radius:var(--radius);box-shadow:var(--shadow);background:#ffffffbf;margin:12px 0;padding:16px}.panel.center{text-align:center;flex-direction:column;align-items:center;margin-top:10vh;display:flex}.panel label{gap:6px;margin-bottom:10px;font-weight:700;display:grid}.segmented{flex-wrap:wrap;gap:8px;display:flex}.test-result ul{padding-left:20px}.small{font-size:.88rem}.muted{color:var(--ink-soft)}.error{color:var(--stop);font-weight:700}.ok{color:var(--go)}.warning{background:#fff3cd;border:2px dashed #b58100;border-radius:12px;padding:10px 14px;font-weight:700}.attribution{color:var(--ink-soft);text-align:center;margin-top:16px;font-size:.78rem}.spinner{border:6px solid var(--paper-deep);border-top-color:var(--sign);border-right-color:var(--amber);border-radius:50%;width:52px;height:52px;animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@keyframes rise{0%{opacity:0;transform:translateY(14px)}}@keyframes pop{0%{opacity:0;transform:scale(.6)}70%{transform:scale(1.06)}}@keyframes drive{0%,to{transform:translate(-10px)}50%{transform:translate(10px)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.panel>button{margin:4px 8px 4px 0}.map-tools{flex-wrap:wrap;align-items:center;gap:12px;margin-top:10px;display:flex}.map-tools button.active{background:var(--sign);color:#fff}.map-legend{align-items:center;gap:6px;font-size:.9rem;font-weight:700;display:inline-flex}.legend-solid,.legend-dots{background:var(--ink);border-radius:3px;width:30px;height:6px;display:inline-block}.legend-dots{background:radial-gradient(circle, var(--ink) 3px, transparent 3.5px) 0 50% / 10px 8px repeat-x;height:8px;margin-left:8px}.guess-explain{border:2px dashed var(--ink-soft);border-radius:var(--radius);background:#fff;gap:10px;margin-bottom:12px;padding:12px 14px;display:grid}.guess-line{align-items:flex-start;gap:10px;display:flex}.map-wrap{margin:12px 0}.map-wrap .map{margin:6px 0 0}.map-layers{justify-content:flex-end;gap:4px;display:flex}.map-layers button{min-height:34px;box-shadow:none;background:#fff;border-width:2px;padding:2px 10px;font-size:.85rem}.map-layers button.active{background:var(--sign);color:#fff}
