:root{--paper:#e6e1d4;--land:#fdfcf8;--land-stroke:#b5ad9b;--label:#a49c8c;--park:#dfead3;--navy:#1f2c5f;--orange:#ff6b1a;--green:#1d9a5b;--red:#d43c2f;--ink:#1d2230;--muted:#6c7180;--line:#e4e1da;color:var(--ink);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}html,body{background:var(--paper);height:100%;margin:0}#app{grid-template-columns:minmax(0,1fr) 400px;height:100dvh;display:grid}#map-wrap{min-height:0;position:relative}#map{position:absolute;inset:0}svg.map{font-family:inherit;display:block}.boroughs path{fill:var(--land);stroke:var(--land-stroke);stroke-width:1px;stroke-linejoin:round}.parks path{fill:var(--park);stroke:#bcd0ad;stroke-width:.8px}.borough-labels text{fill:var(--label);letter-spacing:.22em;font-size:13px;font-weight:700}.street-labels text{fill:#b3ab9b;font-size:10px;font-style:italic}.street-labels .park-label{fill:#7d9a6c;font-size:9.5px;font-style:normal;font-weight:600}.course-casing{fill:none;stroke:var(--navy);stroke-opacity:.14;stroke-width:13px;stroke-linecap:round;stroke-linejoin:round}.course{fill:none;stroke:var(--navy);stroke-width:5px;stroke-linecap:round;stroke-linejoin:round}.progress{fill:none;stroke:var(--orange);stroke-width:6px;stroke-linecap:round;stroke-linejoin:round}.ghost{fill:none;stroke:var(--orange);stroke-width:6px;stroke-dasharray:2 6;stroke-linecap:round;stroke-opacity:.8}.miles circle{fill:#fff;stroke:var(--navy);stroke-width:1.5px}.miles text{fill:var(--navy);font-size:8.5px;font-weight:700}.landmarks rect{fill:var(--ink)}.landmarks text{fill:var(--ink);paint-order:stroke;stroke:var(--paper);stroke-width:3px;stroke-linejoin:round;font-size:11px;font-weight:600}.landmarks .icon-mark{fill:#fff;stroke:#8a8374;stroke-width:1.5px}.landmarks text.icon-label{fill:#8a8374;font-size:10.5px;font-style:italic;font-weight:500}.callouts text{fill:#d2541a;letter-spacing:.02em;paint-order:stroke;stroke:var(--paper);stroke-width:3px;stroke-linejoin:round;font-size:11px;font-style:italic;font-weight:800}.neighborhood-labels text{fill:#a39b8a;letter-spacing:.14em;text-transform:uppercase;font-size:10px;font-weight:600}.dot-confirmed{fill:var(--navy);stroke:#fff;stroke-width:2px}.dot-est .core{fill:var(--orange);stroke:#fff;stroke-width:3px;filter:drop-shadow(0 1px 3px #00000059)}.dot-est .pulse{fill:var(--orange);opacity:.5;transform-origin:0 0;animation:1.8s ease-out infinite pulse}.dot-est[data-status=estimated] .core,.dot-est[data-status=overdue] .core{fill-opacity:.75;stroke-dasharray:3 2}.dot-est[data-status=overdue] .core,.dot-est[data-status=overdue] .pulse{fill:var(--red)}.dot-est[data-status=finished] .core{fill:var(--green)}.dot-est[data-status=finished] .pulse,.dot-est[data-status=waiting] .pulse{display:none}.dot-est[data-status=waiting] .core{fill:#9aa0ad}.dot-est.avatar .avatar-img{filter:drop-shadow(0 1px 2px #00000073);overflow:visible}@keyframes pulse{0%{opacity:.55;transform:scale(1)}to{opacity:0;transform:scale(3)}}.map-controls{gap:8px;display:flex;position:absolute;top:12px;left:12px}.mode-switch{border:1px solid var(--navy);background:#fff;border-radius:999px;padding:2px;display:flex;box-shadow:0 1px 3px #00000014}.mode-switch[hidden]{display:none}.mode-switch button{font:inherit;color:var(--navy);cursor:pointer;white-space:nowrap;background:0 0;border:0;border-radius:999px;padding:5px 12px;font-size:13px;font-weight:600}.mode-switch button[aria-pressed=true]{background:var(--navy);color:#fff}.mode-switch button[data-mode=final][aria-pressed=true]{background:var(--orange)}#bib-form button{font:inherit;border:1px solid var(--navy);color:var(--navy);cursor:pointer;background:#fff;border-radius:999px;padding:6px 14px;font-size:13px;font-weight:600}@media (hover:hover){.mode-switch button[aria-pressed=false]:hover{background:#eef0f6}#bib-form button:hover{background:var(--navy);color:#fff}}#replay-banner{background:var(--navy);color:#fff;border-radius:8px;padding:6px 12px;font-size:12px;position:absolute;top:12px;right:12px}.elevation{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border:1px solid var(--line);background:#ffffffe6;border-radius:10px;flex-direction:column;width:360px;height:112px;padding:8px 10px 4px;display:flex;position:absolute;bottom:12px;right:12px;box-shadow:0 1px 4px #00000014}.elevation[hidden]{display:none}.elev-head{white-space:nowrap;justify-content:space-between;align-items:baseline;gap:8px;display:flex}.elev-where{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);text-overflow:ellipsis;font-size:11px;font-weight:700;overflow:hidden}.elev-now{font-variant-numeric:tabular-nums;font-size:13px;font-weight:700}.elev-now span{margin-left:6px;font-size:12px}.elev-now .up{color:#c2410c}.elev-now .down{color:var(--green)}.elev-chart{flex:1;width:100%;min-height:0;display:block;overflow:visible}.elev-area{fill:var(--navy);fill-opacity:.1}.elev-line{fill:none;stroke:var(--navy);stroke-opacity:.55;stroke-width:1.5px;stroke-linejoin:round}.elev-area.done{fill:var(--orange);fill-opacity:.28}.elev-line.done{stroke:var(--orange);stroke-opacity:1;stroke-width:2px}.elev-base{stroke:#cfcabd;stroke-width:1px}.elev-ticks line{stroke:#ece9e2;stroke-width:1px}.elev-ticks text{fill:#9a9384;font-variant-numeric:tabular-nums;font-size:9px}.elev-labels text{fill:#7d7666;paint-order:stroke;stroke:#fff;stroke-width:2.5px;stroke-linejoin:round;font-size:9px;font-style:italic;font-weight:600}.elev-marker-line{stroke:var(--ink);stroke-opacity:.35;stroke-width:1px;stroke-dasharray:2 2}.elev-marker{fill:var(--orange);stroke:#fff;stroke-width:2px;filter:drop-shadow(0 1px 2px #00000059)}.elev-marker[data-status=overdue]{fill:var(--red)}.elev-marker[data-status=finished]{fill:var(--green)}.elev-marker[data-status=waiting]{fill:#9aa0ad}.final-hud{color:#fff;font-variant-numeric:tabular-nums;background:#1f2c5ff0;border-radius:14px;flex-direction:column;gap:8px;width:290px;padding:14px 16px 16px;display:flex;position:absolute;top:60px;left:12px;box-shadow:0 6px 24px #00000040}.final-hud[hidden]{display:none}.hud-kicker{letter-spacing:.14em;text-transform:uppercase;color:#ffb98f;align-items:center;gap:8px;font-size:12px;font-weight:800;display:flex}.live-dot{background:var(--orange);border-radius:50%;width:9px;height:9px;animation:1.6s ease-out infinite live;box-shadow:0 0 #ff6b1ab3}@keyframes live{to{box-shadow:0 0 0 10px #ff6b1a00}}.hud-big{align-items:baseline;gap:8px;line-height:1;display:flex}.hud-big .num{letter-spacing:-.02em;font-size:56px;font-weight:800}.hud-big .unit{opacity:.8;font-size:18px;font-weight:600}.hud-row{grid-template-columns:repeat(3,auto);justify-content:space-between;gap:8px;display:grid}.hud-row .k{letter-spacing:.08em;text-transform:uppercase;opacity:.65;font-size:10px;font-weight:700}.hud-row .v{font-size:18px;font-weight:700}.hud-next,.hud-sub{opacity:.92;font-size:13px;line-height:1.35}.hud-next b{color:#ffb98f}.hud-note{opacity:.6;font-size:11px}.hud-bar{background:#ffffff2e;border-radius:4px;height:8px;margin:6px 0 12px;position:relative}.hud-bar .fill{background:var(--orange);border-radius:4px;height:100%;transition:width 1s linear}.hud-bar .tick{background:#ffffff8c;width:2px;height:12px;margin-left:-1px;position:absolute;top:-2px}.hud-bar .tick i{opacity:.7;font-size:9px;font-style:normal;position:absolute;top:13px;left:50%;transform:translate(-50%)}.hud-bar .flag{background:repeating-conic-gradient(#fff 0 25%, #1d2230 0 50%) 0 0 / 6px 6px;border-radius:2px;width:12px;height:16px;margin-left:-6px;position:absolute;top:-4px;box-shadow:0 0 0 1px #fff9}.final-hud[data-phase=close]{background:#1f2c5ff7}.final-hud[data-phase=last]{background:linear-gradient(160deg,#ff6b1a,#d2361a);animation:1.4s ease-in-out infinite alternate hud-glow}.final-hud[data-phase=last] .hud-kicker,.final-hud[data-phase=last] .hud-next b{color:#fff}.final-hud[data-phase=last] .live-dot,.final-hud[data-phase=last] .hud-bar .fill{background:#fff}@keyframes hud-glow{0%{box-shadow:0 6px 24px #d2361a59}to{box-shadow:0 6px 34px #ff6b1ad9}}.final-hud[data-phase=finished]{background:linear-gradient(160deg,#1d9a5b,#12744a)}.final-hud[data-phase=finished] .hud-kicker{color:#fff}.final-hud[data-phase=finished] .hud-bar .fill{background:#fff}.final-hud[data-phase=approach] .hud-big .num{font-size:40px}@media (width>=821px){body[data-view=final] .elevation{width:290px;height:120px;left:12px;right:auto}}.water path{fill:#c4dcea;stroke:#9fc2d8;stroke-width:.8px}.cp-areas text{font-size:9.5px;font-style:italic}.cp-areas .water-label{fill:#4f85ab;font-weight:600}.cp-areas .lawn-label{fill:#6f9160;letter-spacing:.04em;font-weight:600}.cp-features .cp-mark{fill:#fff;stroke:#7d7666;stroke-width:1.4px}.cp-features text{fill:#6b6457;paint-order:stroke;stroke:var(--land);stroke-width:3px;stroke-linejoin:round;font-size:10px;font-style:italic;font-weight:500}.cp-features .hill-mark{fill:#9a7b4f}.cp-features text.hill-label{fill:#7a5f38;font-weight:700}.final-milestones text{font-size:12px}.togo-tick{stroke:var(--ink);stroke-width:2.5px;stroke-linecap:round}.final-milestones text.togo-label{fill:#d2541a;font-size:10.5px;font-weight:800}.final-streets text{font-size:11px}.finish-line .light{fill:#fff}.finish-line .dark{fill:var(--ink)}.finish-line{filter:drop-shadow(0 1px 2px #0006)}.finish-label{fill:var(--ink);letter-spacing:.16em;paint-order:stroke;stroke:var(--paper);stroke-width:3.5px;stroke-linejoin:round;font-size:13px;font-weight:900}.confetti{pointer-events:none;position:absolute;inset:0;overflow:hidden}.confetti i{opacity:.95;border-radius:2px;width:8px;height:12px;animation:linear forwards confetti-fall;position:absolute;top:-12px}@keyframes confetti-fall{to{transform:translate(var(--drift), 105vh) rotate(var(--spin));opacity:.9}}#panel{border-left:1px solid var(--line);background:#fff;flex-direction:column;gap:16px;padding:16px 20px 24px;display:flex;overflow-y:auto}#bib-form{align-items:center;gap:8px;display:flex}#bib-form label{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-size:12px;font-weight:700}#bib-form input{font:inherit;border:1px solid var(--line);border-radius:6px;width:90px;padding:5px 10px}footer{color:var(--muted);flex-direction:column;gap:6px;margin-top:auto;font-size:11px;display:flex}footer a{color:var(--navy);font-size:13px;font-weight:600;text-decoration:none}footer a:hover{text-decoration:underline}code{background:#f1efea;border-radius:4px;padding:1px 4px;font-size:12px}.muted{color:var(--muted)}.runner h1{margin:0;font-size:24px;line-height:1.15}.runner .meta{color:var(--muted);margin-top:4px;font-size:13px}.status{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);background:#f1f2f5;border-radius:999px;align-items:center;gap:6px;margin-top:10px;padding:4px 10px;font-size:12px;font-weight:700;display:inline-flex}.status:before{content:"";background:currentColor;border-radius:50%;width:8px;height:8px}.status.live{color:var(--orange);background:#fff0e7}.status.estimated{color:#c76a2a;background:#fff6ee}.status.overdue{color:var(--red);background:#fdecea}.status.finished{color:var(--green);background:#e6f6ee}.hero .big{font-variant-numeric:tabular-nums;font-size:44px;font-weight:800;line-height:1}.hero .big small{color:var(--muted);font-size:18px;font-weight:600}.hero .where{margin-top:6px;font-size:14px}.bar{background:#eceae4;border-radius:4px;height:8px;margin-top:10px;overflow:hidden}.bar>div{background:var(--orange);height:100%}.grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.stat{background:#f8f7f3;border-radius:10px;padding:10px 12px}.stat .k{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-size:11px;font-weight:700}.stat .v{font-variant-numeric:tabular-nums;margin-top:2px;font-size:20px;font-weight:700}.stat .s{color:var(--muted);font-size:12px}.stat.wide{grid-column:1/-1}table.splits{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:13px}table.splits th{text-align:left;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);border-bottom:1px solid var(--line);padding:4px 6px;font-size:11px}table.splits td{border-bottom:1px solid #f1efea;padding:5px 6px}table.splits tr:first-child td{font-weight:700}h2{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0 0 6px;font-size:13px}.error{color:var(--red);font-size:13px}@media (width<=820px){#app{grid-template-rows:62dvh auto;grid-template-columns:1fr;height:auto}#panel{border-left:0;border-top:1px solid var(--line);overflow:visible}#app:has(.elevation:not([hidden])){grid-template-rows:calc(62dvh + 96px) auto}#map-wrap:has(.elevation:not([hidden])) #map{bottom:96px}.elevation{width:auto;height:96px;box-shadow:none;background:#fff;border-width:1px 0 0;border-radius:0;bottom:0;left:0;right:0}#replay-banner{inset:auto auto 10px 10px}#map-wrap:has(.elevation:not([hidden])) #replay-banner{bottom:106px}.mode-switch button{padding:5px 10px}body[data-view=final] #app:has(.elevation:not([hidden])){grid-template-rows:calc(82dvh + 96px) auto}.final-hud{gap:4px;width:auto;padding:9px 12px 8px;top:52px;left:8px;right:8px}.hud-kicker{font-size:10.5px}.hud-big .num{font-size:36px}.final-hud[data-phase=approach] .hud-big .num{font-size:30px}.hud-big .unit{font-size:14px}.hud-row .k{font-size:9px}.hud-row .v{white-space:nowrap;font-size:15px}.hud-next,.hud-sub{font-size:12px}.hud-note{display:none}.hud-bar{height:6px;margin:3px 0 11px}.landmarks text{font-size:9.5px}.borough-labels text{font-size:10.5px}.street-labels text{font-size:8.5px}}
