@font-face{font-family:Fredoka;src:url(/fonts/candidates/Fredoka-Bold.ttf) format("truetype");font-weight:700;font-display:swap}@font-face{font-family:Roboto;src:url(/fonts/Roboto-Regular.ttf) format("truetype");font-weight:400;font-display:swap}@font-face{font-family:Roboto;src:url(/fonts/Roboto-Bold.ttf) format("truetype");font-weight:700;font-display:swap}:root{font-family:Roboto,sans-serif;color:#1c1d1f;background:#d5e2df;font-synthesis:none;--paper: #f7f6f2;--scarlet: #b10202;--shadow: 0 10px 32px #20383926}*{box-sizing:border-box}body{margin:0;overflow:hidden}button,input{font:inherit}button{min-height:48px;border:0;border-radius:18px;padding:12px 20px;background:var(--paper);color:#1c1d1f;font-weight:700;cursor:pointer;transition:background .16s,transform .16s}button:hover{background:#e6e3d9}button:active,button.pressed{transform:translateY(2px);background:#d8d3c6}button:disabled{opacity:.5;cursor:default;transform:none}button.primary{background:var(--scarlet);color:#fff}button.primary:hover{background:#8d0202}button:focus-visible,input:focus-visible,a:focus-visible{outline:3px solid #2465a0;outline-offset:4px}input{width:100%;min-height:48px;padding:12px 14px;border:1px solid #92958e;border-radius:14px;background:#fff;color:#1c1d1f;caret-color:var(--scarlet)}input::placeholder{color:#626561}::selection{background:#b10202;color:#fff}[hidden]{display:none!important}h1,h2,.wordmark,#place{font-family:Fredoka,sans-serif;font-weight:700}h1{font-size:42px;line-height:1.06;letter-spacing:-.025em;margin:0 0 20px;text-wrap:balance}h2{font-size:32px;line-height:1.12;margin:0 0 24px}p{line-height:1.5;margin:0 0 24px}label{display:block;font-size:14px;font-weight:700;margin-bottom:8px}.small{font-size:13px;color:#505257;line-height:1.5;margin:20px 0 0}#scene{position:fixed;inset:0}#scene canvas{display:block;width:100%;height:100%}header{position:fixed;inset:max(20px,env(safe-area-inset-top)) 24px auto;display:flex;justify-content:space-between;align-items:flex-start;gap:16px;z-index:4;pointer-events:none}.wordmark{font-size:29px;color:var(--scarlet);line-height:1;text-decoration:none;background:var(--paper);padding:14px 20px;border-radius:20px;box-shadow:var(--shadow);pointer-events:auto}.wordmark span{display:block;font-family:Roboto;font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:#505257;margin-top:7px}.utilities{display:flex;align-items:center;gap:8px;pointer-events:auto}.utilities button{font-size:13px;padding:10px 14px}.utilities #connection{background:var(--paper);border-radius:24px;padding:10px 14px;font-size:12px}.sheet{position:absolute;left:7vw;top:50%;transform:translateY(-45%);width:380px;max-height:calc(100dvh - 130px);overflow:auto;scrollbar-color:#b10202 #f7f6f2;background:var(--paper);border-radius:30px;padding:32px;box-shadow:var(--shadow)}.sheet>button{width:100%;margin-top:12px;border:1px solid #cecec4}.sheet>button.primary{border:0}.sheet input{margin-bottom:4px}#join-form{margin-top:24px}.join-row{display:flex;gap:8px}.join-row input{text-transform:uppercase;width:100%;min-width:0}.join-row button{background:#deded4}.roster{list-style:none;margin:24px 0;padding:0}.roster li{display:flex;align-items:center;gap:10px;padding:14px 0;border-bottom:1px solid #d7d7cd}.roster li:last-child{border-bottom:0}.driver-number{display:inline-grid;place-items:center;width:32px;height:32px;color:#fff;border-radius:11px;font-weight:700;flex-shrink:0}.driver-name{flex:1;overflow:hidden;text-overflow:ellipsis}.driver-state{font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}.results{left:50%;transform:translate(-50%,-45%);width:430px}#race-hud{pointer-events:none}.race-top{position:fixed;left:24px;top:122px}.timing{display:flex;align-items:center;gap:18px;padding:12px 20px;background:var(--paper);border-radius:22px;box-shadow:var(--shadow);font-weight:700;font-variant-numeric:tabular-nums}#place{font-size:42px;color:var(--scarlet)}#standings{padding:10px 14px;margin:12px 0 0;list-style:none;background:var(--paper);border-radius:16px;width:200px;font-size:13px;line-height:1.8}#standings li{display:flex;gap:8px;justify-content:space-between}#minimap{position:fixed;top:112px;right:24px;width:180px;height:115px;background:#f7f6f2ef;border-radius:20px}.telemetry{position:fixed;bottom:30px;left:28px;background:var(--paper);border-radius:22px;padding:12px 20px;width:170px;box-shadow:var(--shadow)}#speed{font-size:36px;font-weight:700;font-variant-numeric:tabular-nums}.telemetry>span{font-size:12px;margin-left:6px}.telemetry label{margin:4px 0 6px;font-size:12px}#drift-label{font-weight:400}progress{display:block;width:100%;height:8px;border:0;border-radius:10px;overflow:hidden;background:#d9d8cf}progress::-webkit-progress-bar{background:#d9d8cf}progress::-webkit-progress-value{background:#a66500}progress::-moz-progress-bar{background:#a66500}.item{position:fixed;right:24px;bottom:30px;width:240px;text-align:left;box-shadow:var(--shadow);pointer-events:auto;border:2px solid transparent}.item:not(:disabled){border-color:var(--scarlet)}.item span{display:block;font-family:Fredoka;font-size:22px}.item small{display:block;font-weight:400;margin-top:5px;font-size:12px}.item:disabled{opacity:1;color:#505257}.reset{position:fixed;bottom:30px;left:50%;transform:translate(-50%);font-size:12px;pointer-events:auto}kbd{font:inherit;border:1px solid #adada5;border-radius:4px;padding:1px 4px;margin-left:4px}#callout{position:fixed;left:50%;top:31%;transform:translate(-50%);max-width:90%;text-align:center;font-family:Fredoka;font-size:clamp(25px,4vw,48px);color:#1c1d1f;background:var(--paper);border-radius:22px;padding:12px 24px;pointer-events:none;box-shadow:var(--shadow)}#callout:empty{display:none}#callout.countdown{font-size:80px;padding:12px 30px;color:var(--scarlet)}#error{position:fixed;left:50%;bottom:20px;transform:translate(-50%);z-index:10;background:#fff3ee;color:#8d0202;border-radius:16px;padding:16px 22px;max-width:90%;box-shadow:var(--shadow)}#loading{position:fixed;inset:0;display:grid;place-items:center;background:var(--paper);font-family:Fredoka;font-size:28px;z-index:20}dialog{background:var(--paper);color:#1c1d1f;border:0;border-radius:28px;max-width:500px;width:calc(100% - 32px);max-height:85dvh;padding:32px;box-shadow:var(--shadow);scrollbar-color:#b10202 #f7f6f2}dialog::backdrop{background:#16242275}dialog dl{margin:0 0 24px}dialog dt{font-weight:700;margin-top:14px}dialog dd{margin:4px 0 0;color:#505257;line-height:1.4}dialog p{font-size:14px}dialog button{width:100%}#touch{position:fixed;inset:auto 20px max(16px,env(safe-area-inset-bottom));display:flex;justify-content:space-between;align-items:end;pointer-events:none;z-index:5}#touch button{pointer-events:auto;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;min-width:64px;height:60px;border-radius:20px;box-shadow:0 4px 12px #20383924;padding:12px;font-size:14px}.steering{display:flex;gap:8px}.pedals{display:grid;grid-template-columns:64px 64px;gap:8px}#touch .gas{background:var(--scarlet);color:#fff}#touch button.pressed{background:#b10202;color:#fff}svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.racing .wordmark{font-size:24px;padding:12px 18px}.racing .wordmark span{display:none}@media(pointer:coarse){.racing .telemetry{bottom:163px;left:20px}.racing .item{bottom:164px;right:20px;width:190px}.racing .reset{bottom:95px}}@media(max-width:650px){header{inset:max(12px,env(safe-area-inset-top)) 12px auto;align-items:flex-start}.wordmark{font-size:24px;padding:12px 16px}.utilities{gap:5px;flex-wrap:wrap;justify-content:flex-end;max-width:185px}.utilities button{padding:10px;min-height:44px;font-size:12px}.utilities #connection{width:100%;text-align:right;background:none;padding:0 5px 4px;text-shadow:0 1px 2px white}.sheet{inset:auto 16px 24px;width:auto;max-height:calc(100dvh - 120px);transform:none;padding:26px;border-radius:28px}h1{font-size:36px;margin-bottom:14px}.sheet p{margin-bottom:18px}.sheet .small{margin:18px 0 0;font-size:12px}.results{left:16px;transform:none}#join-form{margin-top:18px}.race-top{left:12px;top:106px}.timing{padding:8px 12px;gap:12px;font-size:13px}#place{font-size:32px}#standings{width:166px;font-size:11px;margin-top:8px;padding:8px 12px}#minimap{right:12px;top:164px;width:112px;height:72px;border-radius:14px}.telemetry{width:136px;left:12px!important;bottom:166px!important;padding:10px 14px;border-radius:18px}#speed{font-size:28px}.telemetry label{font-size:10px}.item{right:12px!important;bottom:166px!important;width:185px!important;padding:10px 12px;border-radius:18px}.item span{font-size:19px}.item small{font-size:11px}.reset{bottom:93px!important;left:calc(50% - 3px);padding:8px;font-size:10px;min-height:44px}.reset kbd{display:none}#touch{left:12px;right:12px}#touch button{min-width:58px;height:60px}.pedals{grid-template-columns:58px 58px}#callout{top:37%;font-size:27px;padding:12px 18px;width:max-content;max-width:90%}.racing .wordmark{font-size:20px;padding:12px}.racing #help{display:grid;place-items:center;min-width:44px}.racing #help span{display:none}.racing #help svg{display:block;width:20px;height:20px}}@media(max-height:500px)and (orientation:landscape){header{top:8px}.wordmark{font-size:20px;padding:10px}.wordmark span{display:none}.sheet{top:65px;bottom:12px;left:24px;width:360px;transform:none;max-height:none;padding:20px}.sheet h1{font-size:30px}.race-top{top:64px;left:12px}.timing{padding:6px 12px}#place{font-size:28px}#standings{display:none}#minimap{top:69px;right:12px;width:120px;height:76px}.racing .telemetry{bottom:90px!important;left:12px!important;width:132px;padding:6px 12px}#speed{font-size:24px}.racing .item{bottom:90px!important;width:190px!important;padding:8px 12px}#touch{bottom:12px}.pedals{display:flex}.racing .reset{bottom:12px!important}#callout{top:42%;font-size:25px}#callout.countdown{font-size:55px}.results{left:50%;transform:translate(-50%)}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}#help svg{display:none}@media(max-width:650px){.racing #help svg{display:block}}.preview-banner{position:fixed;z-index:25;top:0;left:50%;transform:translate(-50%);padding:6px 14px;border-radius:0 0 12px 12px;background:#f7f6f2;color:#1c1d1f;font:700 12px Roboto;text-align:center;max-width:80vw}.draft-preview #join-form,.draft-preview #create,.racing .wordmark,.racing #connection,.racing #sound,.racing #leave,.racing #standings,.racing #minimap,.racing #clock,.racing #reset{display:none}.racing header{inset:max(12px,env(safe-area-inset-top)) 16px auto auto}.racing .utilities{flex-wrap:nowrap;max-width:none;gap:6px}.racing .utilities button{min-height:44px;padding:10px 12px}.racing #help{display:grid;place-items:center;width:44px;padding:10px}.racing #help span{display:none}.racing #help svg{display:block;width:21px;height:21px}.racing .race-top{left:16px;top:max(12px,env(safe-area-inset-top))}.racing .timing{padding:6px 14px;gap:12px;border-radius:16px;box-shadow:none;font-size:13px}.racing #place{font-size:32px}.racing .telemetry{bottom:20px!important;left:16px!important;width:142px;padding:8px 14px;border-radius:16px;box-shadow:none}.racing #speed{font-size:25px}.racing .telemetry label{font-size:11px}.racing .item{bottom:20px!important;right:16px!important;width:188px!important;padding:10px 14px;border-radius:16px;box-shadow:none}.racing .item span{font-size:19px}.racing .item small{font-size:11px}#callout{top:82px;font-size:21px;padding:8px 16px;border-radius:14px;max-width:60%;box-shadow:none}#callout.countdown{top:28%;font-size:76px}#air-status{position:fixed;top:125px;left:50%;transform:translate(-50%);color:#fff;background:#263638;border-radius:8px;padding:6px 10px;font-size:12px;font-weight:700;pointer-events:none}#air-status:empty{display:none}.racing.race-details #standings,.racing.race-details #minimap,.racing.race-details #clock,.racing.race-details #reset,.racing.race-details #sound,.racing.race-details #leave{display:block}.racing.race-details #minimap{top:76px;right:16px;width:144px;height:92px}.racing.race-details #reset{bottom:auto!important;top:182px;right:16px;left:auto;transform:none}.racing.race-details #standings{margin-top:8px}.audio-settings{padding-top:8px;border-top:1px solid #d7d7cd;margin-bottom:20px}.audio-settings input[type=range]{padding:0;accent-color:var(--scarlet)}.motion-setting{display:flex;align-items:center;gap:10px}.motion-setting input{width:20px;min-height:24px;accent-color:var(--scarlet)}#touch .pedals{grid-template-columns:repeat(3,58px)}#touch [data-control=jump]{background:#263638;color:#fff}#touch [data-control=brake]{grid-column:2}#touch button{opacity:.91}@media(pointer:coarse){.racing .telemetry,.racing .item{bottom:154px!important}}@media(max-width:650px){.racing header{right:12px}.racing .race-top{left:12px}.racing .timing{gap:9px;padding:7px 10px;font-size:12px}.racing #place{font-size:28px}.racing .telemetry{bottom:154px!important;left:12px!important;width:125px;padding:7px 10px}.racing .item{bottom:154px!important;right:12px!important;width:172px!important;padding:9px 11px}.racing .item span{font-size:17px}.racing .item small{display:none}#callout{top:72px;width:max-content;max-width:86%;font-size:18px;padding:7px 12px}#air-status{top:111px;font-size:11px}.racing.race-details header{max-width:200px}.racing.race-details .utilities{flex-wrap:wrap}.racing.race-details #minimap{top:116px}.racing.race-details #reset{top:218px}}@media(max-height:500px)and (orientation:landscape){#touch .pedals{display:flex}.racing .telemetry{bottom:90px!important;width:132px;padding:6px 12px}.racing .item{bottom:90px!important;width:174px!important}#callout{top:65px;font-size:18px}#air-status{top:106px}#callout.countdown{top:24%;font-size:52px}}@media(prefers-reduced-motion:reduce){button{transition:none}}#car-choice{width:100%;min-height:48px;border:1px solid #92958e;border-radius:14px;padding:10px 12px;font:inherit;color:#1c1d1f;background:#fff;margin-bottom:0}#car-choice:focus-visible{outline:3px solid #2465a0;outline-offset:3px}label[for=car-choice]{margin-top:14px}.sheet .garage-note{font-size:12px;color:#505257;margin:6px 0 0}.garage-view{position:relative;height:170px;background:#e7ece7;border-radius:20px;margin:12px 0 8px;overflow:hidden}#garage-preview{width:100%;height:100%;touch-action:none}#garage-preview canvas{display:block;width:100%;height:100%}#garage-loading{position:absolute;inset:0;display:grid;place-content:center;color:#505257;font-size:14px;pointer-events:none}#garage-loading[hidden]{display:none}.garage-picker{display:flex;gap:8px;align-items:center}.garage-picker button{min-width:44px;padding:6px;font-size:26px}.garage-picker #car-choice{min-width:0;width:100%;margin:0}.sheet .garage-note{margin:7px 0;font-size:13px;line-height:1.4}.sheet .garage-instruction{color:#505257;font-size:12px;margin-bottom:14px}.solo-modes{display:flex;gap:8px}.solo-modes button{flex:1}.solo-modes .primary{background:var(--scarlet, #b10202);color:#fff}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:600px){.garage-view{height:140px}#entry h1{font-size:28px}#entry>p:first-of-type{margin:8px 0}}.item-guide{margin:18px 0}.item-guide summary{cursor:pointer;font-weight:700;padding:10px 0}.item-guide dl{display:grid;grid-template-columns:1fr 1.4fr;gap:10px 16px;font-size:14px;line-height:1.4}.item-guide dt{font-weight:700}.item-guide dd{margin:0}#course-choice{width:100%;margin:6px 0}#entry #course-note{margin:6px 0;line-height:1.45}.survey-link{display:inline-block;padding:8px 0 14px;color:#2465a0;font-size:13px;text-underline-offset:3px}.map-course{position:absolute;right:24px;top:100px;color:#1c1d1f;background:#f7f6f2;border-radius:8px;padding:4px 8px;font-size:12px}@media(max-width:600px){.map-course{display:none}.race-details .map-course{display:block;right:14px;top:120px}}.map-credit{position:absolute;bottom:3px;left:50%;transform:translate(-50%);color:#1c1d1f;background:#f7f6f2;padding:2px 6px;border-radius:4px;font-size:10px;white-space:nowrap;z-index:1}@media(max-width:600px){.map-credit{font-size:8px;bottom:1px;max-width:96vw;white-space:normal;text-align:center}}#course-choice{appearance:auto;min-height:44px;padding:10px 12px;border:1px solid #aaa9a2;border-radius:14px;background:#fff;color:#1c1d1f;font:inherit;font-size:14px}#tour-navigation{position:fixed;top:78px;left:16px;padding:9px 12px;border-radius:12px;background:#f7f6f2;color:#1c1d1f;font-size:13px;max-width:220px;pointer-events:none}#tour-navigation strong,#tour-navigation span{display:block}#tour-navigation span{font-size:12px;margin-top:3px}body.tour.racing #minimap{display:block;top:77px;right:16px;width:160px;height:103px}body.tour.racing .map-course{display:none}@media(max-width:600px){#tour-navigation{top:69px;left:12px;max-width:185px;padding:7px 9px;font-size:12px}#tour-navigation span{font-size:11px}body.tour.racing #minimap{top:69px;right:12px;width:105px;height:80px}}
