:root{--sidebar:336px;--bg:#070a0f;--panel:#101620;--line:#283243;--text:#f4f7fb;--muted:#9aa9bc;--accent:#7ee787;--warning:#f2cc60}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-width:860px;background:var(--bg);color:var(--text);font:14px/1.45 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}button,input,select{font:inherit}button{border:1px solid var(--line);border-radius:8px;background:#222b39;color:var(--text);min-height:34px;padding:6px 10px;cursor:pointer}button:hover:not(:disabled){border-color:#5c6d84;background:#2a3546}button:disabled{opacity:.42;cursor:not-allowed}button.primary{background:#1f6f36;border-color:#338b4c}.start-button{background:#8a5a00!important;border-color:#c18412!important;font-weight:900;letter-spacing:.02em}input,select{width:100%;min-height:34px;border:1px solid var(--line);border-radius:7px;padding:6px 8px;background:#0a0f16;color:var(--text)}label{display:block;color:var(--muted);font-size:12px;margin:7px 0 4px}.wide{width:100%}.subtle{color:var(--muted);margin:5px 0 0}.compact{font-size:12px}.race-sidebar{position:fixed;z-index:50;inset:0 auto 0 0;width:var(--sidebar);display:flex;flex-direction:column;overflow:hidden;background:#0c1118;border-right:1px solid var(--line);box-shadow:14px 0 40px #0005}.sidebar-head,.sidebar-section,.players-section{padding:12px 14px;border-bottom:1px solid #202938}.back-link{color:#a9c7ff;text-decoration:none;font-size:12px}.title-row,.section-title,.room-meta{display:flex;align-items:center;justify-content:space-between;gap:8px}.title-row h1{font-size:22px;line-height:1;margin:9px 0 4px}.capacity-badge,.status-pill{display:inline-flex;align-items:center;min-height:23px;border:1px solid var(--line);border-radius:999px;padding:2px 7px;color:var(--muted);background:#151c26;font-size:11px;white-space:nowrap}.status-pill.ready{color:#a5f3b0;border-color:#285f36}.status-pill.running{color:#ffe59b;border-color:#725a1a}.share-row,.account-row{display:flex;gap:7px}.share-row input,.account-row select{flex:1;min-width:0}.account-row{margin:7px 0}.room-meta{color:var(--muted);margin:7px 0;font-size:12px}.room-meta strong{color:var(--text);letter-spacing:.12em}.countdown{min-height:30px;display:grid;place-items:center;color:var(--warning);font-size:17px;font-weight:900}.players-section{flex:1 1 auto;min-height:130px;overflow:hidden;display:flex;flex-direction:column}.player-list{margin-top:8px;overflow:auto;overscroll-behavior:contain;padding-right:2px}.player-card{display:grid;grid-template-columns:28px 1fr auto;align-items:center;gap:8px;width:100%;border:1px solid #252f3e;border-radius:8px;padding:7px 8px;margin-bottom:5px;background:#111823;text-align:left}.player-card:hover,.player-card.focused{border-color:#6a7d98;background:#192434}.player-rank{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;font-weight:950;background:var(--player-color,#677);color:#07090d}.player-info{min-width:0}.player-name{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:800}.player-meta{display:block;color:var(--muted);font-size:11px}.player-flags{font-size:10px}.mini-ready{color:var(--accent)}.mini-wait{color:var(--warning)}.sidebar-foot{flex:0 0 auto;padding:9px 14px 11px;color:var(--muted);font-size:11px;background:#090d13;border-top:1px solid #202733}
.race-main{margin-left:var(--sidebar);min-height:100vh;padding:24px 24px 80px}.race-hero{display:flex;align-items:end;justify-content:space-between;gap:24px;max-width:1800px;margin:0 auto 16px}.eyebrow{color:var(--accent);text-transform:uppercase;letter-spacing:.14em;font-size:11px;font-weight:850;margin:0 0 5px}.race-hero h2{margin:0;font-size:clamp(28px,4vw,48px);line-height:1}.race-hero p:not(.eyebrow){max-width:850px;color:var(--muted)}.legend{display:flex;gap:12px;color:var(--muted);font-size:11px;white-space:nowrap}.legend-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:4px}.racer-dot{background:#7ee787}.enemy-dot{background:#8b5a2b}.live-dot{background:#ffb454;box-shadow:0 0 9px #ffb454}.focus-panel{position:sticky;z-index:20;top:10px;max-width:1800px;margin:0 auto 14px;padding:10px 12px;border:1px solid #334057;border-radius:12px;background:#0c121bd9;backdrop-filter:blur(10px);box-shadow:0 10px 30px #0004}.focus-copy{display:flex;justify-content:space-between;gap:14px;color:var(--muted);font-size:12px}.focus-copy strong{color:var(--text)}.focus-track{height:4px;margin-top:8px;background:#202b3a;border-radius:999px;overflow:hidden}.focus-progress{height:100%;width:0;background:#7ee787;transition:width 120ms linear}.stage-atlas{display:grid;gap:14px;max-width:1800px;margin:auto}.stage-row{position:relative;border:1px solid #273245;border-radius:12px;overflow:hidden;background:#0b1119;box-shadow:0 10px 28px #0003;transition:border-color .25s,box-shadow .25s,opacity .25s}.stage-row.focus-stage{border-color:#88a8d7;box-shadow:0 0 0 2px #80b3ff33,0 16px 36px #0006}.stage-row.past-stage{opacity:.72}.stage-label{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 10px;background:#0d141e;color:var(--muted);font-size:11px;border-bottom:1px solid #263144}.stage-label strong{color:#fff;font-size:14px;letter-spacing:.06em}.stage-panorama{position:relative;height:clamp(112px,10vw,178px);overflow:hidden;background:#6574c9}.stage-canvas{display:block;width:100%;height:100%;image-rendering:pixelated;image-rendering:crisp-edges}.stage-overlay{position:absolute;inset:0;pointer-events:none}.stage-placeholder{position:absolute;inset:0;display:grid;place-items:center;color:#dce6f6;background:linear-gradient(90deg,#213047,#172235);font-size:12px;letter-spacing:.03em}.stage-row.rendered .stage-placeholder{display:none}.enemy-marker{position:absolute;z-index:3;width:9px;height:9px;transform:translate(-50%,-75%);border:1px solid #2b1405;background:#9b4f20;box-shadow:inset 0 -2px #54230c,0 1px 2px #0009;clip-path:polygon(22% 0,78% 0,100% 35%,88% 75%,66% 75%,62% 100%,38% 100%,34% 75%,12% 75%,0 35%);opacity:.9}.enemy-marker.hard-only{opacity:.45}.enemy-marker.live{z-index:7;background:#ffb454;filter:drop-shadow(0 0 4px #ffb454);opacity:1}.enemy-marker.defeated{opacity:.2;transform:translate(-50%,-40%) rotate(180deg)}.racer-marker{position:absolute;z-index:10;width:11px;height:16px;border:2px solid #fff;border-radius:5px 5px 3px 3px;background:var(--player-color,#7ee787);transform:translate(-50%,-88%);box-shadow:0 2px 4px #000c,0 0 0 2px #0008;transition:left 50ms linear,top 50ms linear}.racer-marker::after{content:attr(data-short);position:absolute;left:50%;bottom:18px;transform:translateX(-50%);padding:1px 4px;border-radius:4px;background:#090d13e8;color:#fff;font:700 9px/1.3 system-ui;white-space:nowrap;opacity:.78}.racer-marker.focused{z-index:14;box-shadow:0 0 0 2px #fff,0 0 18px var(--player-color,#7ee787)}.racer-marker.focused::after{opacity:1}.rom-helper{position:fixed!important;width:1px!important;height:1px!important;left:-10000px!important;top:-10000px!important;border:0!important;opacity:0!important;pointer-events:none!important}
@media(max-width:1050px){:root{--sidebar:310px}.race-main{padding-left:16px;padding-right:16px}.race-hero{display:block}.legend{margin-top:10px}.stage-panorama{height:120px}}

/* Race map v42: stage-pixel-scaled actors and spectator-owned enemy world. */
.stage-atlas{gap:20px;max-width:2200px}
.race-hero,.focus-panel{max-width:2200px}
.stage-panorama{height:clamp(190px,18vw,300px);overflow-x:hidden;overflow-y:hidden;scroll-behavior:auto;background:#6574c9}
.stage-row.focus-stage .stage-panorama{height:clamp(240px,25vw,390px);box-shadow:inset 0 0 0 1px #ffffff18}
.stage-world{position:absolute;left:0;bottom:0;width:100%;height:100%;min-width:0;overflow:visible;transition:width .24s ease,height .24s ease}
.stage-canvas{position:absolute;inset:0;display:block;width:100%;height:100%;image-rendering:pixelated;image-rendering:crisp-edges}
.stage-overlay,.stage-placeholder{position:absolute;inset:0}
.stage-row.focus-stage .stage-label::after{content:'AUTO ZOOM · FOLLOWING SELECTED RACER';margin-left:auto;color:#9bc6ff;font-size:10px;font-weight:800;letter-spacing:.08em}
.stage-row.focus-stage .stage-label [data-stage-meta]{margin-left:10px}

/* The marker itself is the native SMB object anchor. JS sizes/offsets the
   sprite canvas with the exact X/Y pixel scale of the stage canvas. */
.racer-marker{position:absolute;z-index:10;width:0;height:0;border:0;border-radius:0;background:transparent;transform:none;box-shadow:none;transition:left 45ms linear,top 45ms linear;pointer-events:none}
.racer-marker::after{display:none}
.racer-sprite-canvas{position:absolute;left:0;top:0;width:0;height:0;max-width:none;image-rendering:pixelated;image-rendering:crisp-edges;transform:none;transform-origin:0 0;filter:drop-shadow(0 2px 1px #000b)}
.racer-marker:not(.has-sprite)::before{content:'';position:absolute;width:12px;height:18px;left:-6px;top:-16px;border:2px solid #fff;border-radius:5px 5px 3px 3px;background:var(--player-color,#7ee787);box-shadow:0 2px 4px #000c,0 0 0 2px #0008}
.racer-label{position:absolute;left:0;bottom:22px;transform:translateX(-50%);padding:2px 5px;border-radius:5px;background:#090d13ee;color:#fff;font:800 10px/1.25 system-ui;white-space:nowrap;opacity:.82;box-shadow:0 1px 3px #0009}
.racer-marker.focused{z-index:15}
.racer-marker.focused .racer-sprite-canvas{filter:drop-shadow(0 0 5px var(--player-color,#7ee787)) drop-shadow(0 2px 1px #000)}
.racer-marker.focused .racer-label{opacity:1;background:#05080df5;outline:2px solid var(--player-color,#7ee787)}
.racer-marker.in-subworld{opacity:.58}
.racer-marker.in-subworld .racer-label::after{content:' · SUB';color:#ffd36a}

.enemy-marker{width:8px;height:8px;transform:translate(-50%,-55%);overflow:visible}
.enemy-marker.defeated{opacity:.20;transform:translate(-50%,-55%)}
.enemy-marker .enemy-sprite-canvas{display:none;position:absolute;left:0;top:0;width:0;height:0;max-width:none;image-rendering:pixelated;image-rendering:crisp-edges;transform:none;transform-origin:0 0;filter:drop-shadow(0 1px 1px #000c)}
.enemy-marker.has-sprite{width:0;height:0;border:0;background:transparent;box-shadow:none;clip-path:none;transform:none}
.enemy-marker.has-sprite .enemy-sprite-canvas{display:block}
.enemy-marker.has-sprite.live .enemy-sprite-canvas{filter:drop-shadow(0 0 3px #ffb454) drop-shadow(0 1px 1px #000)}
.enemy-marker.has-sprite.defeated{transform:none;opacity:.20}
.enemy-marker.has-sprite.defeated .enemy-sprite-canvas{transform:none}

.stage-subworld{border-top:1px solid #35445c;background:#090e15;padding:10px;display:grid;gap:8px}
.stage-subworld[hidden]{display:none}
.subworld-lane{border:1px solid #334158;border-radius:10px;overflow:hidden;background:#0d141e}
.subworld-lane-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 9px;color:#aebed2;font-size:11px;border-bottom:1px solid #29364a}
.subworld-lane-head strong{color:#fff}
.subworld-viewport{position:relative;height:190px;overflow:hidden;background-color:#162131;background-image:linear-gradient(#ffffff0b 1px,transparent 1px),linear-gradient(90deg,#ffffff0b 1px,transparent 1px);background-size:16px 16px}
.subworld-viewport::before{content:'LIVE SUB-WORLD VIEWPORT · MAIN COURSE POSITION IS FROZEN';position:absolute;z-index:1;left:8px;bottom:6px;color:#ffffff70;font-size:9px;font-weight:800;letter-spacing:.08em}
.subworld-actor{position:absolute;z-index:5;width:0;height:0;pointer-events:none;transition:left 45ms linear,top 45ms linear}
.subworld-actor.player{z-index:8}
.subworld-sprite{position:absolute;left:0;top:0;width:0;height:0;max-width:none;image-rendering:pixelated;image-rendering:crisp-edges;transform:none;transform-origin:0 0;filter:drop-shadow(0 2px 1px #000c)}
.subworld-actor.player .subworld-sprite{filter:drop-shadow(0 0 5px var(--player-color,#7ee787)) drop-shadow(0 2px 1px #000)}

@media(max-width:1050px){.stage-panorama{height:190px}.stage-row.focus-stage .stage-panorama{height:260px}.subworld-viewport{height:170px}}

/* Race map v43: no static enemy markers; only live ROM/telemetry sprite actors. */
.enemy-marker{display:none!important}
.enemy-actor{position:absolute;z-index:7;width:0;height:0;overflow:visible;pointer-events:none;transition:left 45ms linear,top 45ms linear}
.enemy-actor[hidden]{display:none!important}
.enemy-actor .enemy-sprite-canvas{display:block;position:absolute;left:0;top:0;width:0;height:0;max-width:none;image-rendering:pixelated;image-rendering:crisp-edges;transform:none;transform-origin:0 0;filter:drop-shadow(0 1px 1px #000c)}
.enemy-actor.dynamic-object{z-index:8}
.used-block{position:absolute;z-index:5;display:block;pointer-events:none;overflow:hidden}
.used-block-canvas{display:block;width:100%;height:100%;image-rendering:pixelated;image-rendering:crisp-edges}
.subworld-section{max-width:2200px;margin:32px auto 0;padding-top:20px;border-top:1px solid #2b374a}
.subworld-heading{margin:0 2px 14px;max-width:1000px}
.subworld-heading h3{margin:0 0 6px;font-size:26px}
.subworld-heading p:not(.eyebrow){margin:0;color:var(--muted)}
.subworld-section.empty .subworld-heading::after{content:'No alternate areas were discovered in this ROM.';display:block;margin-top:10px;color:var(--muted);font-size:12px}
.subworld-course-row .stage-label{background:#111826}
.subworld-course-row .stage-label strong{color:#c7dcff}
.subworld-racer{z-index:16}

/* Race map v45: streamed PPU viewport layers. Each racer supplies the real rolling nametable + OAM state. Every Mario uses
   its own player plane; the race leader alone supplies the non-Mario sprite
   plane so overlapping cameras cannot duplicate enemies. */
.streamed-world-viewport,.streamed-player-viewport{position:absolute;top:0;height:100%;pointer-events:none;overflow:hidden}
.streamed-world-viewport[hidden],.streamed-player-viewport[hidden]{display:none!important}
.streamed-bg-layer,.streamed-env-layer,.streamed-player-layer{position:absolute;inset:0;display:block;width:100%;height:100%;image-rendering:pixelated;image-rendering:crisp-edges}
.streamed-bg-layer{display:none!important}
.streamed-env-layer{z-index:1}
.streamed-player-viewport{z-index:60;overflow:visible}
.streamed-player-layer{z-index:0;filter:drop-shadow(0 1px 1px #000b)}
.racer-marker.streamed-player::before{display:none!important}
.racer-marker.streamed-player .racer-label{z-index:2}
/* v45 no longer creates inferred enemy actors or used-block overlays. */
.enemy-actor{display:none!important}

.racer-marker.streamed-player{z-index:120}
.racer-marker.streamed-player.focused{z-index:140}
/* v45 live background-state tiles. These are sampled from the streamed
   nametable at the exact ROM-decoded block coordinate; no proximity guess. */
.live-block{position:absolute;z-index:7;display:block;pointer-events:none;overflow:hidden}
.live-block[hidden]{display:none!important}
.live-block-canvas{display:block;width:100%;height:100%;image-rendering:pixelated;image-rendering:crisp-edges}

/* Race map v46: alternate courses live in the same horizontal strip as the
   main stage instead of a second atlas at the bottom of the page. */
.stage-course-strip{display:flex;width:100%;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x proximity;scrollbar-width:thin;scrollbar-color:#45546b #0a1018}
.stage-course-cell{position:relative;flex:0 0 100%;min-width:0;scroll-snap-align:start;background:#0b1119}
.stage-course-cell.rendered .stage-placeholder{display:none}
.subworld-course-cell{border-left:2px solid #41516a;background:#0a1018}
.inline-course-label{height:28px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:4px 9px;background:#111826;color:#9fb2ca;border-bottom:1px solid #29364a;font-size:10px;letter-spacing:.03em}
.inline-course-label strong{color:#c7dcff;font-size:12px;letter-spacing:.08em}
.subworld-course-cell.focus-course{box-shadow:inset 0 0 0 2px #8db9ff88}
.stage-row.has-subworlds>.stage-label::before{content:'SUB-WORLDS →';order:2;margin-left:auto;color:#c7dcff;font-size:9px;font-weight:900;letter-spacing:.08em}
.stage-row.focus-stage>.stage-label::before{margin-left:8px}

/* Race map v48: the static decoded course is authoritative. live-cell is now
   used only for verified blank mutations (for example a collected coin or a
   broken brick) after neighbouring cells confirm the nametable/world mapping. */
.live-cell{position:absolute;z-index:3;display:block;pointer-events:none;overflow:hidden}
.live-cell[hidden]{display:none!important}
.live-cell-canvas{display:block;width:100%;height:100%;image-rendering:pixelated;image-rendering:crisp-edges}

/* Race map v49: static course geometry can never be overwritten by streamed
   nametable pages. Only locally decoded background coins get a deterministic
   background-color cover after a racer hitbox actually intersects that coin. */
.collected-coin{position:absolute;z-index:4;display:block;pointer-events:none;overflow:hidden}
.collected-coin-canvas{display:block;width:100%;height:100%;image-rendering:pixelated;image-rendering:crisp-edges}
.live-cell,.live-block{display:none!important}

/* Race map v51: sub-world Mario composite is spectator-positioned and must stay above every streamed environment viewport. */
.subworld-racer{z-index:180}

/* Race map v52: explicit route boundaries, per-stage anchors and focused-racer world ownership. */
.race-boundary{max-width:2200px;min-height:72px;border:1px solid #344158;border-radius:14px;background:linear-gradient(180deg,#121a27,#0b1119);display:grid;grid-template-columns:42px 1fr auto;align-items:center;gap:14px;padding:12px 16px;box-shadow:0 8px 24px #0004}
.race-boundary .boundary-icon{width:34px;height:34px;border-radius:50%;border:3px solid #70839d;position:relative;background:#0a1018}
.race-boundary-start .boundary-icon::after{content:'▶';position:absolute;inset:0;display:grid;place-items:center;color:#9ce6ad;font-size:15px;padding-left:2px}
.race-boundary-finish .boundary-icon{border-radius:7px;background:repeating-conic-gradient(#fff 0 25%,#161d27 0 50%) 50%/12px 12px;border-color:#b9c3d1}
.race-boundary .boundary-copy{display:grid;gap:3px;min-width:0}
.race-boundary .boundary-copy strong{font-size:15px;letter-spacing:.09em;color:#fff}
.race-boundary .boundary-copy span{font-size:11px;color:#9eafc5;white-space:normal}
.race-boundary .boundary-state{font-size:11px;font-weight:900;letter-spacing:.08em;color:#8899b0;padding:5px 8px;border:1px solid #344158;border-radius:999px}
.race-boundary.active{border-color:#73a5d8;box-shadow:0 0 0 1px #73a5d833,0 8px 24px #0004}
.race-boundary.active .boundary-state{color:#d8ebff;border-color:#648eb9;background:#18304a}
.race-boundary-start.active .boundary-icon{border-color:#6dd58a;box-shadow:0 0 12px #6dd58a55}
.race-boundary-finish.active{border-color:#e5c56a}
.route-anchor{position:absolute;z-index:2;top:4px;padding:2px 5px;border-radius:5px;background:#070b10d9;color:#dbe8f7;font:900 8px/1.2 system-ui;letter-spacing:.08em;pointer-events:none;box-shadow:0 1px 3px #0009}
.route-anchor::after{content:'';position:absolute;top:100%;width:1px;height:max(8px,calc(var(--course-display-height,240px) - 24px));background:#ffffff24}
.route-anchor-start{left:2px}.route-anchor-start::after{left:4px}
.route-anchor-end{right:2px}.route-anchor-end::after{right:4px}
.subworld-course-cell .route-anchor{color:#c9ddff;background:#101a27e8}
.subworld-course-cell::before{content:'ROUTE →';position:absolute;z-index:8;left:8px;top:34px;color:#a5bdd9;font:900 8px/1 system-ui;letter-spacing:.1em;opacity:.72}
.stage-row.focus-stage .route-anchor{font-size:9px}
@media(max-width:700px){.race-boundary{grid-template-columns:34px 1fr;padding:10px}.race-boundary .boundary-state{grid-column:2;justify-self:start}.race-boundary .boundary-icon{width:28px;height:28px}}
.transition-course-cell{border-left-color:#8f7d4b;background:#15130d}
.transition-course-cell .inline-course-label{background:#211d12;border-bottom-color:#5a4e2f}
.transition-course-cell .inline-course-label strong{color:#f0d88b}
.transition-course-cell::before{content:'TRANSITION →';color:#e4ca7b}


/* Race map v53: decoded course pixels always keep a 1:1 X/Y display scale.
   Overview mode contains the complete course inside its viewport; focused mode
   uses the full NES vertical field and pans only when the authentic course is
   wider than the viewport. Short transition/bonus areas therefore stay short
   instead of being stretched to the width of a 13-page main stage. */
.stage-panorama{position:relative}
.stage-world[data-layout-scale]{transform:none;transform-origin:left bottom}
.stage-course-cell .stage-panorama{background:#111824}
.stage-course-cell .stage-world{background:#6574c9}
.subworld-course-cell.focus-course .inline-course-label{box-shadow:inset 0 -2px #8db9ff88}
.subworld-course-cell.focus-course .stage-panorama{box-shadow:inset 0 0 0 1px #8db9ff55}
.transition-course-cell .stage-panorama{background:#17140d}

/* Race map v54: preview/borrowed-main route correctness. Stage exits that
   borrow pages from another logical level are explicit route cells rather than
   disappearing because the destination pointer is also a main-course pointer. */
.stage-exit-course-cell{border-left-color:#5f8f66;background:#0d1710}
.stage-exit-course-cell .inline-course-label{background:#132118;border-bottom-color:#34583b}
.stage-exit-course-cell .inline-course-label strong{color:#9fe4aa}
.stage-exit-course-cell::before{content:'STAGE EXIT →';color:#9fe4aa}
.stage-exit-course-cell .route-anchor{color:#c7ffd0;background:#102416e8}

/* Host spectator build v57: immutable stylesheet path. */

/* Race map v58: sub-world player attachment is visually fail-safe. */
.stage-overlay{z-index:20;overflow:visible}
.subworld-racer{z-index:220;min-width:1px;min-height:1px}
/* Keep a tiny colored locator behind the actual sprite. When CHR/OAM recovery
   succeeds it reads as a subtle focus halo; when it fails the larger fallback
   body below remains, so an alternate course can never be completely playerless. */
.subworld-racer::after{content:'';display:block!important;position:absolute;left:-4px;top:-4px;width:8px;height:8px;border-radius:50%;background:var(--player-color,#7ee787);box-shadow:0 0 0 1px #fff,0 0 7px var(--player-color,#7ee787);opacity:.55;z-index:-1}
.subworld-racer:not(.has-sprite)::before{display:block!important;content:'';position:absolute;width:12px;height:18px;left:-6px;top:-16px;border:2px solid #fff;border-radius:5px 5px 3px 3px;background:var(--player-color,#7ee787);box-shadow:0 2px 4px #000c,0 0 0 2px #0008;z-index:1}
.subworld-racer .racer-sprite-canvas{z-index:2}
.subworld-racer .racer-label{z-index:3}
/* Host spectator build v58: immutable stylesheet path. */
