: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}.map-controls button,#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){.map-controls button:hover,#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}#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}.map-controls button[hidden]{display:none}.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}#replay-banner{inset:auto auto 10px 10px}.landmarks text{font-size:9.5px}.borough-labels text{font-size:10.5px}.street-labels text{font-size:8.5px}}
