:root{--sky:#dcecf8;--surface:#ffffffdb;--surface-solid:#fff;--border:#16213a1a;--text:#16213a;--muted:#6b7691;--accent:#2f7cf6;--accent-ink:#fff;--built:#e2d7c0;--rising:#ff9d2e;--projected:#38b6f0;--proposed:#a98dff;--dead:#aab0bb;--shadow:0 1px 2px #16213a0f, 0 8px 24px #16213a1a;--radius:16px;--ease-out:cubic-bezier(.23, 1, .32, 1);--ease-in-out:cubic-bezier(.77, 0, .175, 1);--ease-drawer:cubic-bezier(.32, .72, 0, 1);--font:"Inter", system-ui, -apple-system, sans-serif;--display:"Nunito", "Inter", system-ui, sans-serif;--sab:env(safe-area-inset-bottom,0px);--sat:env(safe-area-inset-top,0px)}*{box-sizing:border-box}html{-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;overscroll-behavior:none}html,body,#root{height:100%;margin:0}body{font-family:var(--font);color:var(--text);background:var(--sky);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.4;overflow:hidden}button,select{font:inherit;color:inherit}button,a,[role=button],label.toggle,.r{touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}input,select{font-size:16px}b{font-weight:600}.app{width:100%;height:100dvh;position:relative}.canvas{touch-action:none;cursor:grab;width:100%;height:100%;display:block;position:absolute;inset:0}.canvas:active{cursor:grabbing}.canvas.has-hover{cursor:pointer}.ui{pointer-events:none;position:absolute;inset:0}.ui>*{pointer-events:auto}.panel{background:var(--surface);-webkit-backdrop-filter:blur(14px);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.header{left:16px;top:calc(16px + var(--sat));align-items:center;gap:10px;display:flex;position:absolute}.brand{border-radius:999px;align-items:center;gap:10px;padding:8px 14px 8px 10px;display:flex}.brand .logo{background:linear-gradient(160deg, var(--rising), #ff6b3d);color:#fff;border-radius:8px;place-items:center;width:28px;height:28px;display:grid;box-shadow:inset 0 -2px #00000026}.brand .logo svg{width:18px;height:18px}.brand h1{font:900 17px/1 var(--display);letter-spacing:-.01em;margin:0}.brand p{color:var(--muted);margin:2px 0 0;font-size:11.5px}.iconbtn{border:1px solid var(--border);background:var(--surface);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);width:40px;height:40px;box-shadow:var(--shadow);cursor:pointer;font:800 16px var(--display);transition:transform .12s var(--ease-out), background .12s;border-radius:999px;place-items:center;display:grid}.iconbtn:active{transform:scale(.94)}.iconbtn svg{width:18px;height:18px}.year{right:20px;top:calc(14px + var(--sat));text-align:right;pointer-events:none;line-height:1;position:absolute}.year span{font:900 72px/.95 var(--display);letter-spacing:-.04em;font-variant-numeric:tabular-nums;color:var(--text);text-shadow:0 2px #fff,0 6px 20px #16213a1f}.year span.proj{color:#1d8fd1}.year small{font:800 11px var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-top:4px;display:block}.rail{right:16px;top:calc(118px + var(--sat));scrollbar-width:none;overscroll-behavior:contain;flex-direction:column;gap:10px;width:300px;max-height:calc(100% - 240px);display:flex;position:absolute;overflow:auto}.rail::-webkit-scrollbar{display:none}.stats{padding:14px 16px}.stats .row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:baseline;padding:6px 0;display:flex}.stats .row:last-child{border-bottom:0}.stats .row .label{color:var(--muted);font-size:12.5px}.stats .row .val{font:800 18px var(--display);font-variant-numeric:tabular-nums}.stats .row .val small{font:500 11px var(--font);color:var(--muted);margin-left:5px}.stats .title{font:800 11px var(--display);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);justify-content:space-between;gap:8px;margin-bottom:4px;display:flex}.stats .title b{color:var(--text);letter-spacing:0;text-transform:none;font:700 12.5px var(--font);text-align:right}.hood{padding:14px 16px}.hood label{font:800 11px var(--display);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:8px;display:block}.hood select{appearance:none;border:1px solid var(--border);cursor:pointer;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2316213a' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") right 12px center no-repeat;border-radius:12px;width:100%;padding:11px 36px 11px 12px;font-weight:600}.hood select:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.verdict{background:#eef4ff;border:1px solid #2f7cf62e;border-radius:12px;margin-top:10px;padding:10px 12px;font-size:13px;line-height:1.45}.verdict .muted{color:var(--muted)}.board{flex-direction:column;margin-top:8px;display:flex}.board .r{text-align:left;cursor:pointer;background:0 0;border:0;border-radius:10px;grid-template-columns:22px 1fr auto;align-items:center;gap:8px;padding:7px 8px;font-size:12.5px;transition:background .12s;display:grid}.board .r.me{background:#eef4ff}.board .r .n{color:var(--muted);font-variant-numeric:tabular-nums;font-weight:600}.board .r .name{white-space:nowrap;text-overflow:ellipsis;margin-bottom:4px;font-weight:600;overflow:hidden}.board .r .bar{background:#16213a14;border-radius:3px;height:5px;overflow:hidden}.board .r .bar i{background:var(--accent);transform-origin:0;height:100%;transition:transform .36s var(--ease-out);border-radius:3px;display:block}.board .r:active{background:#e3edff}.layers{padding:8px 10px}.toggle{cursor:pointer;border-radius:10px;align-items:center;gap:10px;padding:8px 6px;font-size:12.5px;display:flex}.toggle input{opacity:0;width:0;height:0;position:absolute}.toggle .sw{background:#16213a29;border-radius:999px;flex-shrink:0;width:34px;height:20px;transition:background .16s;position:relative}.toggle .sw:after{content:"";width:16px;height:16px;transition:transform .18s var(--ease-out);background:#fff;border-radius:999px;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #00000040}.toggle input:checked+.sw{background:var(--accent)}.toggle input:checked+.sw:after{transform:translate(14px)}.toggle input:focus-visible+.sw{outline:2px solid var(--accent);outline-offset:2px}.toggle .dot{border-radius:3px;flex-shrink:0;width:10px;height:10px}.legend{left:16px;bottom:calc(96px + var(--sab));flex-wrap:wrap;gap:6px 8px;max-width:560px;display:flex;position:absolute}.legend span{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:999px;align-items:center;gap:6px;padding:6px 10px;font-size:12px;font-weight:600;display:inline-flex}.legend span i{border-radius:4px;width:12px;height:12px;box-shadow:inset 0 0 0 1px #00000014}.legend .note{color:var(--muted);box-shadow:none;background:0 0;border:0;padding-left:2px;font-weight:500}.timeline{left:16px;right:16px;bottom:calc(16px + var(--sab));align-items:center;gap:14px;padding:10px 14px 10px 10px;display:flex;position:absolute}.play{background:var(--accent);width:48px;height:48px;color:var(--accent-ink);cursor:pointer;transition:transform .12s var(--ease-out), box-shadow .12s;border:0;border-radius:999px;flex-shrink:0;place-items:center;display:grid;box-shadow:0 2px #0000001f,0 6px 16px #2f7cf666}.play:active{transform:scale(.94);box-shadow:0 1px #0000001f,0 2px 6px #2f7cf64d}.play svg{width:22px;height:22px}.track{flex:1;height:44px;position:relative}.track .bar{background:#16213a1a;border-radius:3px;height:6px;position:absolute;top:19px;left:0;right:0;overflow:hidden}.track .bar .future{background:repeating-linear-gradient(90deg,#38b6f059 0 4px,#0000 4px 8px);position:absolute;top:0;bottom:0;right:0}.track .bar .fill{background:linear-gradient(90deg, var(--rising), #ff7a3d);transform-origin:0;position:absolute;top:0;bottom:0;left:0}.track .thumb{border:3px solid var(--text);pointer-events:none;background:#fff;border-radius:999px;width:20px;height:20px;margin-left:-10px;position:absolute;top:12px;box-shadow:0 2px 6px #0003}.track .ticks{height:14px;font:700 10px var(--display);color:var(--muted);font-variant-numeric:tabular-nums;position:absolute;top:30px;left:0;right:0}.track .ticks span{position:absolute;transform:translate(-50%)}.track .ticks .now{color:#1d8fd1}.track .ticks .now:before{content:"";background:#1d8fd1;width:2px;height:10px;position:absolute;top:14px;left:50%}.track input[type=range]{opacity:0;cursor:pointer;touch-action:pan-x;width:100%;height:100%;margin:0;position:absolute;inset:0}.speed{background:#16213a0f;border-radius:999px;gap:2px;padding:3px;display:flex}.speed button{font:800 12px var(--display);color:var(--muted);cursor:pointer;transition:background .12s, color .12s, transform .12s var(--ease-out);background:0 0;border:0;border-radius:999px;padding:6px 10px}.speed button.on{color:var(--text);background:#fff;box-shadow:0 1px 3px #0000001f}.speed button:active{transform:scale(.95)}.reset{border:1px solid var(--border);color:var(--text);cursor:pointer;transition:transform .12s var(--ease-out), background .12s;background:#fff;border-radius:999px;padding:8px 14px;font-weight:600}.reset:active{transform:scale(.96)}.card{opacity:0;width:300px;transition:opacity .14s var(--ease-out), transform .14s var(--ease-out);pointer-events:none;z-index:5;padding:14px 16px;position:absolute;transform:translateY(6px)scale(.98)}.card.show{opacity:1;transform:none}.card.pinned{pointer-events:auto}.card .close{width:30px;height:30px;color:var(--muted);cursor:pointer;background:#16213a0f;border:0;border-radius:999px;place-items:center;font-size:16px;display:grid;position:absolute;top:8px;right:8px}.card .addr{font:800 16px var(--display);letter-spacing:-.01em;margin:0 28px 2px 0}.card .hood-name{color:var(--muted);font-size:12px}.card .kind{background:#16213a0f;border-radius:999px;align-items:center;gap:6px;margin-top:8px;padding:4px 10px;font-size:12px;font-weight:600;display:inline-flex}.card .kind i{border-radius:3px;width:9px;height:9px}.card .grid{grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0;display:grid}.card .grid div{background:#16213a0a;border-radius:10px;padding:8px 10px}.card .grid b{font:800 18px var(--display);font-variant-numeric:tabular-nums;display:block}.card .grid span{color:var(--muted);font-size:11px}.card .steps{grid-template-columns:repeat(3,1fr);margin:6px 0 4px;display:grid;position:relative}.card .steps:before{content:"";background:#16213a1a;height:2px;position:absolute;top:6px;left:16%;right:16%}.card .steps div{text-align:center;color:var(--muted);font-size:11px;position:relative}.card .steps div i{background:#fff;border:3px solid #16213a26;border-radius:999px;width:14px;height:14px;margin:0 auto 4px;display:block;position:relative}.card .steps div.on i{border-color:var(--accent);background:var(--accent)}.card .steps div.proj i{border-style:dashed;border-color:var(--projected)}.card .steps b{color:var(--text);font-variant-numeric:tabular-nums;font-weight:600;display:block}.card .steps .proj b{color:#1d8fd1}.card .desc{color:var(--muted);-webkit-line-clamp:3;-webkit-box-orient:vertical;margin-top:8px;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}.card .permit{color:var(--muted);justify-content:space-between;margin-top:8px;font-size:11px;display:flex}.card .permit a{color:var(--accent);font-weight:600;text-decoration:none}.help-backdrop{opacity:0;transition:opacity .18s var(--ease-out);z-index:20;background:#16213a47;position:absolute;inset:0}.help-backdrop.show{opacity:1}.help{opacity:0;width:min(560px,100% - 32px);transition:opacity .2s var(--ease-out), transform .2s var(--ease-out);z-index:21;background:var(--surface-solid);padding:24px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(.96)}.help.show{opacity:1;transform:translate(-50%,-50%)scale(1)}.help h2{font:900 26px/1.1 var(--display);letter-spacing:-.02em;margin:0 0 6px}.help .lede{color:var(--muted);margin:0 0 18px;font-size:14px}.help .steps3{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.help .step{border:1px solid var(--border);background:#fafbfd;border-radius:14px;padding:14px}.help .step .ico{color:#fff;border-radius:10px;place-items:center;width:36px;height:36px;margin-bottom:10px;display:grid}.help .step .ico svg{width:20px;height:20px}.help .step h3{font:800 14px var(--display);margin:0 0 4px}.help .step p{color:var(--muted);margin:0;font-size:12.5px;line-height:1.45}.help .keys{color:var(--muted);flex-wrap:wrap;gap:6px 14px;margin-top:14px;font-size:12px;display:flex}.help kbd{font:700 11px var(--display);border:1px solid var(--border);color:var(--text);background:#fff;border-bottom-width:2px;border-radius:6px;padding:1px 6px}.help .actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;margin-top:18px;display:flex}.btn{font:800 14px var(--display);cursor:pointer;transition:transform .12s var(--ease-out), background .12s;border:0;border-radius:12px;padding:12px 18px}.btn:active{transform:scale(.97)}.btn.primary{background:var(--accent);color:#fff;box-shadow:0 2px #0000001f,0 6px 16px #2f7cf659}.btn.ghost{color:var(--text);background:#16213a0f}.help .legend-inline{color:var(--muted);flex-wrap:wrap;gap:6px 12px;margin-top:14px;font-size:12px;display:flex}.help .legend-inline i{vertical-align:-1px;border-radius:3px;width:10px;height:10px;margin-right:5px;display:inline-block;box-shadow:inset 0 0 0 1px #00000014}.loading{color:var(--muted);font:800 14px var(--display);letter-spacing:.06em;text-transform:uppercase;place-items:center;display:grid;position:absolute;inset:0}.sheet-toggle,.sheet-summary{display:none}@media (width<=760px){body{font-size:13.5px}.header{left:12px;top:calc(10px + var(--sat));gap:8px}.brand{padding:6px 12px 6px 8px}.brand p{display:none}.year{right:12px;top:calc(8px + var(--sat))}.year span{font-size:44px}.year small{font-size:10px}.legend{display:none}.timeline{left:8px;right:8px;bottom:calc(8px + var(--sab));gap:8px;padding:8px}.track .ticks span:nth-child(2n):not(.now),.speed,.reset{display:none}.rail{width:100%;max-height:72dvh;padding:0 8px calc(88px + var(--sab));transition:transform .32s var(--ease-drawer);will-change:transform;gap:8px;inset:auto 0 0;transform:translateY(100%)}.rail.open{transform:translateY(0)}.rail .panel{border-radius:14px}.sheet-toggle{left:8px;right:8px;bottom:calc(84px + var(--sab));border:1px solid var(--border);cursor:pointer;text-align:left;z-index:6;transition:transform .32s var(--ease-drawer), opacity .2s var(--ease-out);align-items:center;gap:10px;padding:10px 12px;display:flex;position:absolute}.sheet-toggle.hidden{opacity:0;pointer-events:none;transform:translateY(20px)}.sheet-toggle .pill{font:800 11px var(--display);text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.sheet-toggle .sum{white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:600;overflow:hidden}.sheet-toggle .sum small{color:var(--muted);font-weight:500}.sheet-toggle svg{width:18px;height:18px;color:var(--muted);flex-shrink:0}.sheet-summary{justify-content:center;padding:6px 0 2px;display:flex}.sheet-summary i{background:#16213a33;border-radius:2px;width:36px;height:4px}.scrim{opacity:0;pointer-events:none;transition:opacity .24s var(--ease-out);z-index:4;background:#16213a2e;position:absolute;inset:0}.scrim.show{opacity:1;pointer-events:auto}.card{right:8px;bottom:calc(84px + var(--sab));width:auto;transition:opacity .2s var(--ease-out), transform .26s var(--ease-drawer);z-index:7;transform:translateY(16px);top:auto!important;left:8px!important}.card.show{transform:none}.help{width:100%;padding:20px 18px calc(20px + var(--sab));overscroll-behavior:contain;border-radius:20px 20px 0 0;max-height:90dvh;top:auto;bottom:0;left:0;overflow:auto;transform:translateY(24px)}.help.show{transform:none}.help .steps3{grid-template-columns:1fr;gap:8px}.help .step{grid-template-columns:36px 1fr;align-items:start;gap:12px;padding:12px;display:grid}.help .step .ico{margin:0}.help .keys{display:none}.help .actions .btn{flex:1}}@media (hover:hover) and (pointer:fine){.reset:hover,.speed button:not(.on):hover{color:var(--text);background:#16213a14}.board .r:hover{background:#16213a0d}.board .r.me:hover{background:#e3edff}.iconbtn:hover{background:#fff}.card .close:hover{color:var(--text);background:#16213a1f}.btn.ghost:hover{background:#16213a1a}.btn.primary:hover{background:#2569d9}.toggle:hover{background:#16213a0a}}@media (prefers-reduced-motion:reduce){.card,.help,.help-backdrop,.rail,.sheet-toggle,.scrim{transition-duration:1ms}.card,.help{transform:none!important}.board .r .bar i{transition:none}}.labels{pointer-events:none;z-index:2;position:absolute;inset:0;overflow:hidden}.labels .leaders{width:100%;height:100%;position:absolute;inset:0}.labels line{stroke:#16213a;stroke-width:1.25px;opacity:.55}.bl{font:600 12px/18px var(--font);color:var(--text);white-space:nowrap;background:var(--surface);border:1px solid var(--border);will-change:transform;border-radius:8px;padding:2px 8px;display:none;position:absolute;top:0;left:0;box-shadow:0 2px 8px #16213a14}.bl.named{font:800 12px/18px var(--display);letter-spacing:.01em}.navpad{left:calc(16px + env(safe-area-inset-left));bottom:calc(176px + env(safe-area-inset-bottom));z-index:3;pointer-events:auto;align-items:flex-end;gap:8px;display:flex;position:absolute}.nav-grid{grid-template-columns:repeat(3,40px);grid-auto-rows:40px;gap:4px;display:grid}.nav-col{flex-direction:column;gap:4px;display:flex}.nav-btn{border:1px solid var(--border);background:var(--surface);width:40px;height:40px;color:var(--text);font:700 17px/1 var(--display);cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;border-radius:12px;transition:transform .12s cubic-bezier(.2,0,0,1),background-color .12s linear;box-shadow:0 2px 8px #16213a14}.nav-btn:active{background:#e8f1ff;transform:scale(.94)}.nav-btn.on{background:var(--text);color:#fff;border-color:var(--text)}@media (hover:hover) and (pointer:fine){.nav-btn:hover{background:#f4f6fb}}@media (width<=760px){.navpad{left:auto;right:calc(10px + env(safe-area-inset-right));bottom:calc(150px + env(safe-area-inset-bottom))}.nav-grid{grid-template-columns:repeat(3,36px);grid-auto-rows:36px}.nav-btn{width:36px;height:36px}}@media (prefers-reduced-motion:reduce){.nav-btn{transition:none}}.card .photo{aspect-ratio:16/9;background:#e6eef7;border-radius:16px 16px 0 0;margin:-14px -16px 12px;text-decoration:none;display:block;position:relative;overflow:hidden}.card .photo img{object-fit:cover;width:100%;height:100%;display:block}.card .photo .credit{font:600 10.5px/1.2 var(--sans);color:#fff;white-space:nowrap;text-overflow:ellipsis;background:linear-gradient(#0a142800,#0a1428b8);padding:18px 10px 6px;position:absolute;bottom:0;left:0;right:0;overflow:hidden}.card.pinned .close{z-index:1}.card.pinned .photo+.close,.card .photo~.close{color:#fff;background:#0a142859}.splash{z-index:30;transition:opacity .65s var(--ease-out), visibility 0s linear .65s;background:linear-gradient(#eaf3fc 0%,#f7f9fc 55%,#e7edf5 100%);place-items:center;display:grid;position:absolute;inset:0;overflow:hidden}.splash.out{opacity:0;visibility:hidden;pointer-events:none}.splash-sky{justify-content:center;align-items:flex-end;gap:2vw;height:40vh;padding:0 6vw;display:flex;position:absolute;bottom:0;left:0;right:0}.splash-sky i{transform-origin:bottom;max-width:74px;animation:splash-rise 1.4s var(--ease-out) both;background:linear-gradient(#d2dceb,#b8c6d9);border-radius:5px 5px 0 0;flex:1;display:block}.splash-sky i:first-child{height:26%;animation-delay:50ms}.splash-sky i:nth-child(2){height:48%;animation-delay:.25s}.splash-sky i:nth-child(3){height:36%;animation-delay:.12s}.splash-sky i:nth-child(4){background:linear-gradient(#ffb060,#ff7a1a);height:88%;animation-delay:.4s}.splash-sky i:nth-child(5){height:62%;animation-delay:.3s}.splash-sky i:nth-child(6){height:44%;animation-delay:.18s}.splash-sky i:nth-child(7){background:linear-gradient(#8fd0f3,#3fa9e6);height:70%;animation-delay:.5s}.splash-sky i:nth-child(8){height:32%;animation-delay:80ms}.splash-sky i:nth-child(9){height:22%;animation-delay:.2s}@keyframes splash-rise{0%{transform:scaleY(0)}to{transform:scaleY(1)}}.splash-body{text-align:center;width:min(380px,100% - 48px);padding-bottom:12vh;position:relative}.splash-logo{color:#fff;background:linear-gradient(160deg,#ff9a3c,#ff7a1a);border-radius:18px;place-items:center;width:60px;height:60px;margin:0 auto 18px;display:grid;box-shadow:0 12px 32px #ff7a1a52}.splash-logo svg{width:32px;height:32px}.splash h1{font:900 36px/1 var(--display);letter-spacing:-.03em;color:var(--ink,#16213a);margin:0 0 8px}.splash p{color:var(--muted);margin:0 0 22px;font-size:14px}.splash-bar{background:#16213a14;border-radius:999px;height:6px;overflow:hidden}.splash-bar i{transform-origin:0;background:linear-gradient(90deg,#ff7a1a,#ffb060);border-radius:999px;width:100%;height:100%;transition:transform .22s linear;display:block}.splash-step{font:700 11.5px var(--display);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-variant-numeric:tabular-nums;justify-content:space-between;margin-top:10px;display:flex}@media (prefers-reduced-motion:reduce){.splash-sky i{animation:none}.splash{transition:none}}.intro{z-index:20;pointer-events:none;opacity:0;transition:opacity .5s var(--ease-out);position:absolute;inset:0}.intro.show{opacity:1}.intro-cap{max-width:min(560px,100% - 48px);animation:intro-cap-in .7s var(--ease-out) both;text-shadow:0 1px #fffc,0 8px 30px #ffffffe6;gap:6px;display:grid;position:absolute;bottom:120px;left:24px}.intro-cap b{font:900 clamp(30px, 5vw, 56px)/1 var(--display);letter-spacing:-.03em;color:var(--text)}.intro-cap span{font:500 clamp(14px, 1.6vw, 18px)/1.4 var(--font);color:var(--text);opacity:.8}@keyframes intro-cap-in{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.intro-skip{pointer-events:auto;position:absolute;bottom:120px;right:24px}.intro.end{-webkit-backdrop-filter:blur(6px);pointer-events:auto;background:#f0f5fb8c;place-items:center;padding:24px;display:grid}.intro-end{text-align:center;width:min(520px,100%);animation:intro-cap-in .6s var(--ease-out) both;padding:28px 28px 24px}.intro-end .kicker{font:800 12px var(--display);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:0 0 6px}.intro-end h2{font:900 clamp(24px, 3.4vw, 34px)/1.1 var(--display);letter-spacing:-.02em;margin:0 0 10px}.intro-end h2 em{color:var(--rising);font-style:normal}.intro-end .lede{color:var(--muted);margin:0 0 18px;font-size:15px;line-height:1.45}.intro-pick{text-align:left;gap:6px;margin-bottom:16px;display:grid}.intro-pick span{font:800 11.5px var(--display);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.intro-pick select{border:1px solid var(--border);background:var(--surface-solid);width:100%;height:46px;font:700 16px var(--display);color:var(--text);border-radius:12px;padding:0 12px}.intro-end .actions{justify-content:center;gap:10px;display:flex}.ui.intro-on .rail,.ui.intro-on .legend,.ui.intro-on .sheet-toggle,.ui.intro-on .navpad,.ui.intro-on .nav-pad,.ui.intro-on .timeline{opacity:0;pointer-events:none;transition:opacity .3s var(--ease-out)}@media (width<=760px){.intro-cap{bottom:96px;left:16px}.intro-skip{bottom:24px;right:16px}}.vm{pointer-events:none;position:fixed;inset:0}.vm>*{pointer-events:auto}.vm-top{position:absolute;top:16px;left:16px}.vm-exit{top:calc(12px + env(safe-area-inset-top));z-index:6;padding:8px 12px;font-size:13px;position:fixed;right:12px}.vm-top .brand{color:inherit;text-decoration:none}.vm-landing{-webkit-backdrop-filter:blur(3px);background:radial-gradient(at 50% 40%,#ffffffbf,#f0f5fb59);place-items:center;padding:24px;display:grid;position:absolute;inset:0}.vm-hero{text-align:center;width:min(640px,100%);animation:intro-cap-in .6s var(--ease-out) both}.vm-hero .kicker{font:800 12px var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--rising);margin:0 0 8px}.vm-hero h2{font:900 clamp(30px, 5vw, 54px)/1.05 var(--display);letter-spacing:-.03em;margin:0 0 12px}.vm-hero .lede{max-width:520px;color:var(--muted);margin:0 auto 22px;font-size:16px;line-height:1.5}.vm-form{background:var(--surface-solid);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:18px;gap:8px;padding:8px;display:flex}.vm-form input{min-width:0;font:700 18px var(--display);color:var(--text);background:0 0;border:0;outline:none;flex:1;padding:0 12px}.vm-form input::placeholder{color:var(--muted);font-weight:600}.vm-form .btn{white-space:nowrap;height:48px;padding:0 20px}.vm-err{color:#d6451d;margin:12px 0 0;font-size:14px;font-weight:600}.vm-examples{color:var(--muted);margin:14px 0 0;font-size:14px}.linkbtn{font:inherit;color:var(--accent);cursor:pointer;text-underline-offset:3px;background:0 0;border:0;padding:0;font-weight:700;text-decoration:underline}.vm-hud{gap:10px;width:min(380px,100% - 32px);display:grid;position:absolute;top:16px;right:16px}.vm-where{align-items:center;gap:10px;font-size:14px;display:flex}.vm-where b{font:800 16px var(--display)}.vm-where span{color:var(--muted);flex:1}.vm-stats{grid-template-columns:1fr 1fr;gap:10px;display:grid}.vm-stats .stat{gap:4px;padding:14px 16px;display:grid}.vm-stats em{font:900 34px/1 var(--display);letter-spacing:-.02em;color:var(--accent);font-style:normal}.vm-stats em.bad{color:#ff6a1f}.vm-stats span{color:var(--muted);font-size:12.5px;line-height:1.35}.vm .navpad{left:auto;right:calc(16px + env(safe-area-inset-right));bottom:calc(190px + env(safe-area-inset-bottom))}@media (width<=760px){.vm .navpad{bottom:auto;top:calc(60px + env(safe-area-inset-top));right:calc(10px + env(safe-area-inset-right))}}.vm-bottom{left:50%;bottom:max(20px, env(safe-area-inset-bottom));gap:10px;width:min(640px,100% - 32px);padding:12px 16px;display:grid;position:absolute;transform:translate(-50%)}.vm-row{align-items:center;gap:16px;display:flex}.vm-sun{border-top:1px solid var(--border);align-items:center;gap:14px;padding-top:4px;display:flex}.vm-sun em{font:900 44px/1 var(--display);letter-spacing:-.03em;color:var(--accent);font-style:normal}.vm-sun em.bad{color:#ff6a1f}.vm-sun b{font:800 14px var(--display);display:block}.vm-sun span{color:var(--muted);margin-top:2px;font-size:12.5px;line-height:1.35;display:block}.stage-scene .vm-top,.stage-card .vm-top{display:none}.vm-year{min-width:86px;line-height:1;display:grid}.vm-year span{font:900 34px var(--display);letter-spacing:-.03em}.vm-year small{color:var(--muted);font:800 10px var(--display);letter-spacing:.1em;text-transform:uppercase}.vm-row input[type=range]{min-width:0;accent-color:var(--rising);flex:1}.vm-cardwrap{box-sizing:border-box;-webkit-backdrop-filter:blur(6px);background:#f0f5fb99;place-items:center;width:100vw;height:100dvh;padding:24px;display:grid;position:fixed;inset:0;overflow:auto}.vm-card{width:min(720px,100%);animation:intro-cap-in .5s var(--ease-out) both;gap:12px;margin:auto;padding:14px;display:grid}.vm-card img{width:100%;box-shadow:var(--shadow);border-radius:12px;display:block}.vm-caption{color:var(--text);word-break:break-word;margin:0;font-size:14px;line-height:1.45}.vm-card .actions{flex-wrap:wrap;gap:8px;display:flex}.vm-card .actions .btn{text-decoration:none}@media (width<=760px){.vm-row{flex-wrap:wrap}.vm-row .btn{flex:1 0 100%}.vm-year span{font-size:28px}.vm-form{flex-direction:column}.vm-form input{height:44px;font-size:16px}.vm-card .actions .btn{flex:1 0 45%}}.viewlink{align-items:center;height:40px;margin-left:8px;padding:0 14px;font-size:14px;text-decoration:none;display:inline-flex}@media (width<=760px){.viewlink{display:none}}.vm-landing-on .labels{opacity:0}.hifibar{right:16px;top:calc(76px + var(--sat));z-index:5;flex-direction:column;gap:8px;width:min(340px,100vw - 32px);padding:12px 14px;display:flex;position:absolute}.hifibar b{font:800 13px var(--display)}.hifibar .chips{flex-wrap:wrap;gap:6px;max-height:40vh;display:flex;overflow:auto}.hifibar .chip{border:1px solid var(--border);font:700 12px var(--display);cursor:pointer;transition:transform .12s var(--ease-out), background .12s;background:#fff;border-radius:999px;padding:6px 10px}.hifibar .chip:hover{background:#eef4fb}.hifibar .chip:active{transform:scale(.95)}.hifibar small{color:var(--muted);font-size:11px;line-height:1.35}@media (width<=720px){.hifibar{top:auto;bottom:calc(150px + var(--sab));width:calc(100vw - 16px);right:8px}.hifibar .chips{max-height:18vh}}.apple{--font:-apple-system, BlinkMacSystemFont, "SF Pro Text", system-ui, "Inter", sans-serif;--display:-apple-system, BlinkMacSystemFont, "SF Pro Display", system-ui, "Inter", sans-serif;--sky:#e6eef6;--surface:#ffffff9e;--surface-solid:#ffffffeb;--border:#ffffff8c;--text:#1d1d1f;--muted:#3c3c43a3;--accent:#0a84ff;--shadow:0 0 0 .5px #0000000f, 0 10px 30px #0000001a;--radius:20px;--spring:linear(0, .012 1.1%, .049 2.3%, .21 5%, .5 9.2%, .72 13%, .87 17.3%, .95 21.3%, .985 26%, 1 32%, 1);--spring-bounce:linear(0, .06 1.5%, .26 4.3%, .62 9%, .93 14%, 1.06 19%, 1.09 23%, 1.06 28%, 1.01 34%, .99 40%, 1 48%, 1);--ease-out:var(--spring);--ease-in-out:var(--spring);--ease-drawer:var(--spring-bounce);font-optical-sizing:auto}.apple body{letter-spacing:-.006em;font-size:15px;line-height:1.45}.apple .panel,.apple .iconbtn,.apple .legend span,.apple .reset,.apple .sheet-toggle{background:var(--surface);-webkit-backdrop-filter:blur(24px)saturate(180%);backdrop-filter:blur(24px)saturate(180%);border:1px solid var(--border);box-shadow:var(--shadow)}.apple .rail .panel{-webkit-backdrop-filter:blur(40px)saturate(180%);backdrop-filter:blur(40px)saturate(180%);background:#ffffffb8;box-shadow:0 0 0 .5px #0000000f,0 18px 50px #00000024}.apple .legend span{letter-spacing:.01em;font-weight:500;box-shadow:0 0 0 .5px #0000000d}.apple .legend .note{box-shadow:none;background:0 0;border:0}.apple .brand h1{letter-spacing:-.02em;font-weight:700}.apple .brand p,.apple .year small,.apple .help .lede{letter-spacing:.01em}.apple .year span{letter-spacing:-.045em;text-shadow:0 1px #ffffffb3;font-weight:700}.apple .year small{letter-spacing:.12em;font-weight:600}.apple .help h2{letter-spacing:-.025em;font-weight:700}.apple .stats .val{letter-spacing:-.01em;font-variant-numeric:tabular-nums;font-weight:600}.apple button,.apple .btn,.apple .chip,.apple .toggle{transition:transform .12s var(--spring), background-color .16s var(--spring), opacity .16s var(--spring)}.apple button:active,.apple .btn:active,.apple .chip:active{transition-duration:80ms;transform:scale(.96)}.apple .iconbtn:active{transform:scale(.92)}.apple .play{background:var(--accent);box-shadow:0 6px 18px #0a84ff59}.apple .play:active{transform:scale(.94)}.apple .btn.primary{background:var(--accent);letter-spacing:-.01em;border-radius:999px;font-weight:600}.apple .toggle .sw{width:42px;height:26px;transition:background-color .22s var(--spring);background:#78788052}.apple .toggle .sw:after{width:22px;height:22px;transition:transform .32s var(--spring-bounce);box-shadow:0 3px 8px #00000026,0 0 0 .5px #0000000a}.apple .toggle input:checked+.sw{background:#34c759}.apple .toggle input:checked+.sw:after{transform:translate(16px)}.apple .rail{transition:transform .42s var(--spring-bounce), opacity .26s var(--spring)}.apple .scrim{transition:opacity .26s var(--spring);background:#0000002e}.apple .sheet-toggle{transition:transform .32s var(--spring-bounce), opacity .2s var(--spring);border-radius:999px}.apple .card{transition:opacity .18s var(--spring), transform .36s var(--spring-bounce), filter .22s var(--spring);filter:blur(6px)}.apple .card.show{filter:blur()}.apple .help{transition:opacity .22s var(--spring), transform .42s var(--spring-bounce), filter .24s var(--spring);filter:blur(8px)}.apple .help.show{filter:blur()}.apple .help-backdrop{background:#00000038}.apple .timeline{border-radius:999px;padding-left:10px;padding-right:10px}.apple .navpad button{background:var(--surface);-webkit-backdrop-filter:blur(24px)saturate(180%);backdrop-filter:blur(24px)saturate(180%);border:1px solid var(--border);box-shadow:0 0 0 .5px #0000000d,0 4px 12px #00000014}.apple .navpad button:active{background:#ffffffe6;transform:scale(.9)}.apple .chip{background:#7878801f;border:0;border-radius:999px;font-weight:500}.apple .chip:hover{background:#78788033}.apple .board .r{border-radius:12px}.apple .board .r .bar i{transition:transform .52s var(--spring)}.apple input[type=range]::-webkit-slider-thumb{background:#fff;border:.5px solid #0000000f;border-radius:999px;width:26px;height:26px;box-shadow:0 3px 8px #0000002e}@media (prefers-reduced-motion:reduce){.apple *,.apple :before,.apple :after{transition-duration:1ms!important;animation-duration:1ms!important}.apple .rail,.apple .card,.apple .help{filter:none!important;transform:none!important}}
