@font-face{font-family:Audiowide;src:url('./assets/audiowide.ttf') format('truetype');font-weight:400;font-display:swap}
:root{font-family:Arial,Helvetica,sans-serif;color:#f5f7fb;background:#090d14;--orange:#ff951b;--purple:#b265ff;--muted:#a9b4c4;--line:#ffffff20;--panel:#0c121deb;--kart:#ff951b;color-scheme:dark;font-size:16px}
*{box-sizing:border-box}body{margin:0;overflow:hidden}button,select{font:inherit}button{cursor:pointer;color:inherit;touch-action:manipulation}button:focus-visible,select:focus-visible{outline:3px solid #fff;outline-offset:4px}button:disabled{opacity:.55;cursor:wait}[hidden]{display:none!important}#app,#world{position:absolute;inset:0;width:100%;height:100%;height:100dvh}#world{display:block;touch-action:none}.vignette{position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,#060b1377,transparent 55%),linear-gradient(0deg,#070b1399,transparent 25%,transparent 75%,#070b1380)}.topbar{position:absolute;left:0;right:0;top:0;display:flex;align-items:center;justify-content:space-between;padding:22px 30px;gap:16px;pointer-events:none}.brand{font-family:Audiowide,sans-serif;font-size:20px;letter-spacing:.015em}.brand-accent{color:var(--orange)}.brand small{display:block;color:#b4c0d2;letter-spacing:.55em;font:12px Arial,sans-serif;margin-top:6px}.top-actions{display:flex;gap:8px;pointer-events:auto}.icon-button{border:1px solid var(--line);background:#101824b8;min-height:40px;border-radius:6px;padding:8px 12px;font-size:13px}.icon-button:hover{background:#273140}.icon-button.active{color:var(--orange)}.play-only{display:none}body.playing .play-only{display:block}.menu-panel{position:absolute;top:102px;left:30px;width:370px;max-height:calc(100dvh - 126px);overflow:auto;background:linear-gradient(130deg,#101925ed,#090e17ef);border:1px solid #5e708030;border-top:2px solid var(--orange);padding:24px;box-shadow:0 20px 90px #0005;border-radius:4px;scrollbar-width:thin}.eyebrow{font-size:12px;font-weight:700;letter-spacing:.13em;color:var(--orange);line-height:1.5}h1,h2{font-family:Audiowide,sans-serif;font-weight:400;margin:14px 0 24px}h1{font-size:56px;line-height:1.02;letter-spacing:-.02em}h1 span{color:var(--orange)}.session-label{font-size:12px;letter-spacing:.08em;color:#f2f6ff;margin-bottom:13px}.session-label span{display:block;color:var(--muted);letter-spacing:0;margin-top:5px;font-size:13px}.mode-list{display:grid;gap:8px}.mode-card{display:flex;gap:13px;align-items:center;border:1px solid #a4b9d322;background:#dce9ff06;padding:14px 12px;text-align:left;border-radius:5px;transition:background .15s,border .15s;width:100%}.mode-card:hover{border-color:#a4b9d355;background:#dce9ff0d}.mode-card.selected{border-color:#ff951b9c;background:linear-gradient(90deg,#ff951b1f,#ff951b07)}.mode-index{font-family:Audiowide,sans-serif;color:#76869d;font-size:14px}.selected .mode-index{color:var(--orange)}.mode-card strong{font-size:16px;display:block}.mode-card small{display:block;color:var(--muted);font-size:13px;margin-top:4px}.mode-check{margin-left:auto;font-size:20px;color:#7c8a9e}.selected .mode-check{color:var(--orange)}.mode-description{font-size:14px;color:#c0ccdb;line-height:1.5;min-height:64px;margin:14px 0 18px}.setup-row{display:flex;gap:14px;align-items:start;justify-content:space-between}.kart-select{border:0;margin:0;padding:0;min-width:0}.kart-select legend,.duration-label{font-size:13px;color:var(--muted);margin-bottom:9px}.kart-select legend{padding:0}#colours{display:flex;gap:6px}.colour-option{width:24px;height:28px;padding:0;border:1px solid transparent;background:transparent;border-radius:4px;position:relative}.colour-option span{display:block;background:var(--colour);height:16px;width:16px;border-radius:50%;margin:auto}.colour-option.selected{border-color:#fff;background:#ffffff13}.duration-label{display:flex;flex-direction:column;gap:8px;margin:0}.duration-label select{font-size:13px;padding:5px 4px;border:1px solid #495566;border-radius:4px;background:#141e2c;color:white;max-width:105px}.team-note{font-size:12px;color:#92a1b5;line-height:1.45;margin:12px 0 16px}.primary{width:100%;background:var(--orange);color:#15100a;font-weight:800;border:0;border-radius:4px;min-height:50px;padding:13px 18px;font-size:16px;box-shadow:0 5px 25px #ff951b20}.primary:hover{background:#ffad4e}.menu-hint{font-size:12px;color:#8292a9;text-align:center;line-height:1.65;margin:13px 0 0}.map-note{position:absolute;right:38px;bottom:36px;display:flex;flex-direction:column;gap:8px;text-align:right;pointer-events:none}.map-line{height:2px;width:65px;background:var(--orange);align-self:end;margin-bottom:4px}.map-note strong{font-family:Audiowide,sans-serif;font-weight:400;font-size:18px}.map-note span:not(.map-line){font-size:14px;color:#c1cbd9}.map-note small{font-size:12px;color:#a1afc4}.scoreboard{position:absolute;top:25px;left:50%;transform:translateX(-50%);display:flex;align-items:stretch;filter:drop-shadow(0 10px 20px #0007)}.team-score{min-width:112px;padding:11px 22px;background:#121b29dd;display:flex;flex-direction:column;align-items:center;border-bottom:3px solid}.team-score.orange{color:var(--orange);border-color:var(--orange);border-radius:5px 0 0 5px}.team-score.purple{color:var(--purple);border-color:var(--purple);border-radius:0 5px 5px 0}.team-score span{font-size:12px;font-weight:bold;letter-spacing:.12em}.team-score strong{font-family:Audiowide;font-size:34px;font-weight:400;line-height:1.4}.clock{background:#090f1beb;text-align:center;padding:9px 21px;min-width:156px;border-top:1px solid #ffffff18}.clock span{display:block;font-size:12px;letter-spacing:.05em;color:#cad7e7}.clock strong{font-family:Audiowide;font-weight:400;font-size:28px;display:block;margin-top:4px;font-variant-numeric:tabular-nums}.clock small{font-size:12px;color:#8294ae}.clock.urgent strong{color:#ff6658}.player-badge{position:absolute;left:30px;top:112px;display:flex;align-items:center;gap:12px}.player-badge>span{width:6px;height:35px;background:var(--kart);box-shadow:0 0 12px color-mix(in srgb,var(--kart) 40%,transparent)}.player-badge strong{font-size:14px;letter-spacing:.08em}.player-badge small{display:block;color:#adbacb;font-size:12px;margin-top:6px}.minimap-panel{position:absolute;right:28px;bottom:80px;width:230px;background:#0a1220db;border:1px solid #8eadd42b;border-radius:5px;overflow:hidden}.minimap-label{display:flex;justify-content:space-between;padding:10px 12px;font-size:12px;color:#c7d2e2}.minimap-label span+span{color:#8293a9;font-size:12px}#minimap{display:block;width:100%;height:auto;opacity:.9}.speed-panel{position:absolute;left:30px;bottom:72px;width:150px}.speed-label{font-size:12px;letter-spacing:.14em;color:#c0cddd}.speed-panel>div:not(.speed-track){display:flex;align-items:baseline;gap:9px;margin:5px 0}.speed-panel strong{font-family:Audiowide;font-size:54px;font-weight:400;line-height:1.2}.speed-panel div>span{font-size:12px;color:#9fafc5}.speed-track{height:4px;background:#ffffff26;overflow:hidden}.speed-track i{display:block;background:var(--kart);width:0;height:100%;transition:width .1s}.objective-panel{position:absolute;bottom:74px;left:50%;transform:translateX(-50%);text-align:center;width:min(420px,40vw);padding:15px 20px;border:1px solid #91a7c129;border-radius:5px;background:linear-gradient(0deg,#0b1421e8,#0b1421bd)}.objective-panel .eyebrow{color:var(--kart);font-size:12px}.objective-panel strong{display:block;font-family:Audiowide;font-size:19px;font-weight:400;line-height:1.35;margin:6px 0}.objective-panel>span{display:block;color:#b4c5d9;font-size:14px;line-height:1.45}.objective-progress{height:4px;background:#ffffff20;border-radius:3px;overflow:hidden;margin-top:10px}.objective-progress i{display:block;height:100%;width:100%;background:var(--kart)}.key-hints{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);display:flex;gap:22px;color:#acbbcf;font-size:12px;white-space:nowrap}kbd{font-family:inherit;display:inline-block;border:1px solid #a1b6d33d;border-radius:3px;padding:3px 5px;background:#111b2880;font-size:12px;color:#e7edf5}.icon-button kbd{margin-left:4px;padding:1px 4px}.countdown{position:absolute;left:50%;top:42%;transform:translate(-50%,-50%);font-family:Audiowide;font-size:110px;color:white;text-shadow:0 5px 30px #0008;pointer-events:none}.toast{position:absolute;top:145px;left:50%;transform:translateX(-50%) translateY(-10px);padding:11px 20px;border-left:3px solid var(--kart);background:#0a1222e0;color:#fff;font-size:16px;opacity:0;transition:opacity .15s,transform .15s;text-align:center;pointer-events:none;max-width:70vw}.toast.visible{opacity:1;transform:translateX(-50%) translateY(0)}.overlay-panel{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:min(400px,calc(100vw - 36px));padding:32px;background:#0c1423f5;border:1px solid #8293ab44;border-top:3px solid var(--orange);border-radius:6px;box-shadow:0 0 0 100vmax #02050b99;text-align:center;max-height:90dvh;overflow:auto;z-index:10}.overlay-panel h2{font-size:32px;line-height:1.3;margin-bottom:24px}.overlay-panel p{font-size:14px;line-height:1.6;color:#b6c5d8}.secondary{width:100%;margin-top:10px;border:1px solid #788ba436;background:#23304466;padding:13px;border-radius:4px;font-size:14px}.secondary:hover{background:#344158}.results-panel{width:450px}.result-karts{margin:20px 0}.result-row{display:flex;align-items:center;gap:10px;padding:9px 5px;border-bottom:1px solid #ffffff12;font-size:14px}.result-row i{width:10px;height:10px;border-radius:50%}.result-row strong{margin-left:auto}.result-row em{color:#aabacf;font-size:12px;font-style:normal}.result-row.you{background:#ffffff08}.result-score{font-family:Audiowide}#touch-controls{display:none;position:absolute;left:18px;right:18px;bottom:23px;justify-content:space-between;pointer-events:none}.touch-steer,.touch-pedals{display:flex;gap:8px;pointer-events:auto}#touch-controls button{border:1px solid #cad8ed55;border-radius:10px;background:#162334c9;min-width:55px;min-height:55px;font-size:13px;font-weight:700;user-select:none;touch-action:none}#touch-controls button[data-control=forward]{background:#ff951be0;color:#15100a;min-width:75px}#touch-controls button.pressed{background:#aebad9;color:#0a101a}body.playing .brand{font-size:16px}body.playing .brand small{font-size:12px;letter-spacing:.35em}body.playing .top-actions{gap:5px}
@media(max-height:850px) and (min-width:700px){.menu-panel{top:90px;padding:20px;width:350px;max-height:calc(100dvh - 110px)}h1{font-size:42px;margin:10px 0 18px}.mode-card{padding:10px 12px}.mode-description{min-height:0;margin:12px 0}.menu-hint{margin-top:10px}.map-note{bottom:26px}}
@media(max-width:1100px){body.playing .brand{max-width:160px;font-size:14px}body.playing .top-actions .icon-button{font-size:12px;padding:7px}.scoreboard{top:20px}.team-score{min-width:85px;padding:9px 14px}.clock{min-width:140px;padding:9px 12px}.minimap-panel{width:195px;right:20px}.objective-panel{width:350px;max-width:40vw}.objective-panel strong{font-size:16px}.key-hints{gap:10px}.topbar{padding:20px}.menu-panel{left:20px}.speed-panel{left:22px;width:125px}.speed-panel strong{font-size:46px}}
@media(pointer:coarse){#touch-controls{display:flex}.key-hints{display:none}.speed-panel,.objective-panel{bottom:102px}.minimap-panel{bottom:108px}.top-actions #camera kbd,.top-actions #pause kbd{display:none}}
@media(max-width:700px){.topbar{padding:16px;align-items:start}.brand{font-size:16px}.brand small{font-size:12px}.top-actions{gap:5px}.icon-button{font-size:12px;padding:6px 9px;min-height:35px}.menu-panel{left:16px;top:86px;width:min(350px,calc(100vw - 32px));max-height:calc(100dvh - 105px);padding:20px;background:#0c1420ed}h1{font-size:38px;margin:10px 0 18px}.mode-card{padding:11px}.map-note{display:none}.mode-description{min-height:0;font-size:14px}.menu-hint{font-size:12px}body.playing .brand{display:none}body.playing .topbar{justify-content:flex-end}.scoreboard{top:62px}.team-score{min-width:72px;padding:8px 12px}.team-score strong{font-size:28px}.clock{min-width:140px}.clock strong{font-size:25px}.player-badge{left:17px;top:162px}.player-badge strong{font-size:12px}.player-badge small{font-size:12px}.minimap-panel{width:140px;top:161px;right:15px;bottom:auto}.minimap-label{padding:6px;font-size:12px}.minimap-label span+span{display:none}.objective-panel{width:calc(100vw - 32px);max-width:none;bottom:105px;padding:10px 14px}.objective-panel strong{font-size:16px}.objective-panel>span{font-size:13px}.speed-panel{left:18px;bottom:213px;width:98px}.speed-panel strong{font-size:36px}.speed-label{font-size:12px}.speed-panel>div:not(.speed-track){margin:0}.toast{top:295px;max-width:90vw;width:max-content;font-size:14px}.key-hints{bottom:32px;gap:6px;font-size:12px}.key-hints span:nth-child(3){display:none}.key-hints kbd{font-size:12px}.countdown{font-size:80px}.overlay-panel{padding:25px}.overlay-panel h2{font-size:28px}}
@media(max-height:550px) and (orientation:landscape){.menu-panel{top:72px;max-height:calc(100dvh - 86px);width:330px}.topbar{padding:12px 20px}.brand{font-size:16px}.menu-panel h1{font-size:30px}.map-note{bottom:18px}.scoreboard{top:10px}.team-score strong{font-size:25px}.clock strong{font-size:23px}.player-badge{top:90px}.minimap-panel{width:150px;bottom:98px;top:auto}.objective-panel{bottom:85px;padding:9px 12px;width:320px;max-width:40vw}.objective-panel strong{font-size:14px}.speed-panel{bottom:95px;width:100px}.speed-panel strong{font-size:35px}.toast{top:108px;font-size:14px}.key-hints{bottom:15px}.top-actions kbd{display:none}.top-actions .icon-button{min-height:32px}.countdown{top:45%;font-size:68px}.objective-panel>span{font-size:13px}.player-badge{left:20px}.map-note strong{font-size:15px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
.menu-panel h1{font-size:28px;line-height:1.25;white-space:nowrap;margin:0 0 20px}.session-label span{display:inline;margin-left:8px}.team-note{margin:8px 0 12px}.menu-panel .primary{position:sticky;bottom:0;z-index:2}.menu-hint{font-size:12px}.mode-description{min-height:0}
@media(min-width:701px) and (max-width:1100px){body.playing .top-actions .icon-button{font-size:0;width:36px;padding:4px}body.playing .top-actions kbd{display:none}body.playing #sound::before{content:'♪';font-size:18px}body.playing #camera::before{content:'C';font-size:14px}body.playing #pause::before{content:'Ⅱ';font-size:16px}body.playing #fullscreen::before{content:'⛶';font-size:20px}}

/* Holding game controls must never open mobile text-selection callouts. */
#world,#hud,#hud *,body.playing .topbar,body.playing .topbar *{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
#touch-controls,#touch-controls *{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
#touch-controls button{-webkit-user-drag:none}
