:root{--void:#0b0414;--indigo:#160a29;--plum:#241043;--violet:#a855f7;--magenta:#c026d3;--lilac:#e9d5ff;--hot:#f0abfc;--cyan:#22d3ee;--lavender:#c4b5fd;--soft-white:#f5f3ff;--font-display:"Space Grotesk", system-ui, sans-serif;--font-body:"Inter", system-ui, sans-serif;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-family:var(--font-body);color:var(--soft-white);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:radial-gradient(ellipse 120% 80% at 50% 30%, var(--indigo) 0%, var(--void) 70%);background-color:var(--void);overscroll-behavior:none;overflow:hidden}button{-webkit-tap-highlight-color:transparent;font-family:inherit}a{color:inherit;text-decoration:none}.app{flex-direction:column;max-width:520px;margin:0 auto;display:flex;position:fixed;inset:0;overflow:hidden}.bg-vignette{pointer-events:none;background:radial-gradient(ellipse 80% 70% at 50% 42%, transparent 40%, var(--void) 100%);mix-blend-mode:multiply;z-index:1;position:fixed;inset:0}.bg-grain{pointer-events:none;opacity:.04;z-index:2;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");position:fixed;inset:-50%}.topbar{z-index:5;flex:none;padding:18px 20px 10px;position:relative}.brand{align-items:flex-start;gap:12px;display:flex}.brand-mark{color:var(--hot);filter:drop-shadow(0 0 10px var(--magenta));margin-top:4px;font-size:22px;line-height:1}.brand h1{font-family:var(--font-display);letter-spacing:-.02em;color:var(--soft-white);text-shadow:0 0 18px #c026d359;margin:0;font-size:21px;font-weight:600}.brand-sub{color:var(--lavender);max-width:38ch;margin:2px 0 0;font-size:12.5px;line-height:1.35}.route-tabs{gap:8px;margin-top:14px;display:flex}.route-tab{color:var(--lavender);letter-spacing:.01em;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#24104380;border:1px solid #a855f740;border-radius:999px;flex:1;padding:9px 10px;font-size:12.5px;font-weight:500;transition:all .25s}.route-tab.active{color:var(--soft-white);border-color:var(--violet);background:linear-gradient(135deg,#a855f759,#c026d347);box-shadow:0 0 18px #a855f766,inset 0 0 12px #f0abfc26}.stage{z-index:4;flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}.route-map{flex:auto;width:100%;min-height:0;display:block}.river{fill:none;stroke:#5b8def;stroke-width:1.4px;stroke-linecap:round;stroke-linejoin:round;opacity:.5;filter:drop-shadow(0 0 2.5px #5b8def99)}.route-ghost{fill:none;stroke:#a855f729;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.route-bloom{fill:none;stroke:var(--magenta);stroke-width:13px;stroke-linecap:round;stroke-linejoin:round;opacity:.45;filter:url(#softGlow)}.route-halo{fill:none;stroke:var(--violet);stroke-width:5.5px;stroke-linecap:round;stroke-linejoin:round;opacity:.55;filter:url(#neon)}.route-core{fill:none;stroke:url(#lineGrad);stroke-width:2.4px;stroke-linecap:round;stroke-linejoin:round;opacity:.5}.route-progress{fill:none;stroke:var(--hot);stroke-width:3px;stroke-linecap:round;stroke-linejoin:round;filter:url(#neon)}.node-halo{opacity:.5}.node-ring{fill:#0b041499;stroke:var(--violet);stroke-width:1.6px}.node-core{fill:var(--lilac);filter:url(#neon)}.node-num{fill:var(--void);font-family:var(--font-display);text-anchor:middle;dominant-baseline:central;pointer-events:none;font-size:8px;font-weight:700}.node-label{fill:var(--soft-white);font-family:var(--font-body);letter-spacing:-.01em;paint-order:stroke;stroke:var(--void);stroke-width:2.5px;stroke-linejoin:round;pointer-events:none;font-size:9.5px;font-weight:500}.node-sonar{fill:none;stroke:var(--hot);stroke-width:2px}.leg-dist{fill:var(--lavender);font-family:var(--font-body);font-variant-numeric:tabular-nums;letter-spacing:.02em;dominant-baseline:central;paint-order:stroke;stroke:var(--void);stroke-width:2.6px;stroke-linejoin:round;opacity:.9;pointer-events:none;font-size:8px;font-weight:600}.node.is-current .node-core{fill:var(--hot)}.node.is-current .node-ring{stroke:var(--hot);stroke-width:2.2px}.node.is-current .node-label{fill:var(--hot);font-weight:600}.node.is-done .node-core{fill:var(--cyan);opacity:.85}.node.is-done .node-ring{stroke:#22d3ee99}.node.is-done .node-halo{opacity:.25}.node.is-selected .node-ring{stroke:var(--lilac);stroke-width:2.6px}.stat-strip{z-index:5;flex:none;grid-template-columns:repeat(4,1fr);gap:1px;padding:4px 16px 8px;display:grid}.stat{flex-direction:column;align-items:center;gap:1px;padding:6px 4px;display:flex}.stat-val{font-family:var(--font-display);color:var(--soft-white);font-variant-numeric:tabular-nums;font-size:19px;font-weight:600}.stat-frac{color:var(--lavender);font-size:13px}.stat-key{text-transform:uppercase;letter-spacing:.12em;color:var(--lavender);opacity:.7;font-size:9.5px}.controls{z-index:5;padding:10px 16px calc(16px + env(safe-area-inset-bottom));flex:none;align-items:stretch;gap:10px;display:flex;position:relative}.nav-btn{width:52px;color:var(--lilac);cursor:pointer;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#2410438c;border:1px solid #a855f74d;border-radius:16px;flex:none;font-size:26px;line-height:1;transition:all .2s}.nav-btn:active{transform:scale(.95)}.nav-btn:disabled{opacity:.3;cursor:default}.now-pill{border:1px solid var(--violet);cursor:pointer;text-align:left;background:linear-gradient(135deg,#a855f738,#c026d32e);border-radius:16px;flex-direction:column;flex:auto;justify-content:center;align-items:flex-start;gap:1px;padding:8px 18px;display:flex;overflow:hidden;box-shadow:0 0 22px #a855f74d}.now-label{text-transform:uppercase;letter-spacing:.14em;color:var(--lavender);font-size:9.5px}.now-name{font-family:var(--font-display);color:var(--soft-white);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:15px;font-weight:600;overflow:hidden}.sheet-scrim{z-index:20;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0b041499;position:fixed;inset:0}.sheet{z-index:21;max-width:520px;padding:10px 22px calc(26px + env(safe-area-inset-bottom));background:linear-gradient(180deg, var(--plum) 0%, var(--indigo) 100%);touch-action:none;border-top:1px solid #e9d5ff2e;border-radius:26px 26px 0 0;margin:0 auto;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -18px 60px #c026d340,0 0 0 1px #a855f71f}.sheet-grip{background:#c4b5fd66;border-radius:999px;width:42px;height:4px;margin:4px auto 14px}.sheet-head{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.sheet-stopno{letter-spacing:.12em;text-transform:uppercase;color:var(--lavender);font-variant-numeric:tabular-nums;font-size:11px}.sheet-kind{color:var(--lilac);background:#a855f72e;border:1px solid #a855f759;border-radius:999px;padding:4px 10px;font-size:11px;font-weight:600}.kind-wine-bar{color:var(--hot);background:#f0abfc24;border-color:#f0abfc66}.kind-cafe{color:var(--cyan);background:#22d3ee1f;border-color:#22d3ee59}.sheet-title{font-family:var(--font-display);letter-spacing:-.02em;color:var(--soft-white);text-shadow:0 0 22px #c026d359;margin:0 0 8px;font-size:26px;font-weight:600}.sheet-vibe{color:var(--lavender);margin:0 0 14px;font-size:14.5px;line-height:1.5}.sheet-meta{color:var(--lavender);flex-direction:column;gap:6px;margin-bottom:18px;font-size:13px;display:flex}.sheet-actions{gap:10px;display:flex}.btn{border:1px solid var(--violet);background:linear-gradient(135deg, var(--violet), var(--magenta));color:var(--soft-white);text-align:center;cursor:pointer;border-radius:14px;flex:1;padding:13px 10px;font-size:13.5px;font-weight:600;transition:transform .15s,box-shadow .2s;box-shadow:0 0 18px #a855f74d}.btn:active{transform:scale(.97)}.btn-ghost{color:var(--lilac);box-shadow:none;background:#24104399;border-color:#a855f759}.btn-on{background:linear-gradient(135deg, var(--hot), var(--magenta))}.btn-done{color:var(--cyan);box-shadow:none;background:#22d3ee29;border-color:#22d3ee80}@media (prefers-reduced-motion:reduce){*{transition-duration:.001ms!important;animation-duration:.001ms!important}}
