:root{--accent:#ffb289;--text-shadow:0 1px 14px #101c34a6, 0 0 3px #101c348c;font-family:PingFang SC,Hiragino Sans GB,Microsoft YaHei,system-ui,sans-serif}*{box-sizing:border-box;margin:0;padding:0}html,body{overscroll-behavior:none;background:#dfe2ec;height:100%;overflow:hidden}#app canvas{touch-action:none}#app,#app canvas{width:100%;height:100%;display:block;position:fixed;inset:0}#vignette{pointer-events:none;background:radial-gradient(130% 110% at 50% 42%,#0000 62%,#18264247 100%);position:fixed;inset:0}#moment-veil{pointer-events:none;opacity:0;z-index:6;background:radial-gradient(90% 70% at 50% 35%,#6ef0a847,#0000 70%);position:fixed;inset:0}#moment-veil.flash-night{animation:1.4s ease-out moment-night}#moment-veil.flash-day{background:radial-gradient(90% 70% at 50% 40%,#ffb28952,#0000 68%);animation:1.2s ease-out moment-day}@keyframes moment-night{0%{opacity:0}18%{opacity:1}to{opacity:0}}@keyframes moment-day{0%{opacity:0}20%{opacity:1}to{opacity:0}}#coach{left:50%;bottom:max(28px, env(safe-area-inset-bottom));color:#ffffffeb;letter-spacing:.22em;text-indent:.22em;text-shadow:var(--text-shadow);pointer-events:none;opacity:0;z-index:4;white-space:nowrap;font-size:14px;font-weight:300;transition:opacity .5s,transform .5s;position:fixed;transform:translate(-50%)translateY(8px)}#coach.show{opacity:1;transform:translate(-50%)translateY(0)}body.touch-device #coach{bottom:max(118px, calc(env(safe-area-inset-bottom) + 100px));letter-spacing:.16em;font-size:13px}#hud{pointer-events:none;color:#fff;opacity:0;padding:28px 36px;transition:opacity .8s .3s;position:fixed;inset:0}#hud.visible{opacity:1}.speed-block{text-shadow:var(--text-shadow);flex-direction:column;align-items:flex-start;gap:0;display:flex;position:absolute;bottom:30px;left:36px}.speed-row{align-items:baseline;gap:10px;display:flex}#speed{letter-spacing:.02em;font-variant-numeric:tabular-nums;font-size:64px;font-weight:200;line-height:1}.speed-block .unit{letter-spacing:.18em;opacity:.85;font-size:15px;font-weight:400}.dist-block{text-align:right;text-shadow:var(--text-shadow);position:absolute;bottom:34px;right:36px}.dist-block .label{letter-spacing:.32em;opacity:.75;margin-bottom:4px;font-size:12px;display:block}#distance{font-variant-numeric:tabular-nums;letter-spacing:.04em;font-size:26px;font-weight:300}.alt-block{text-align:right;text-shadow:var(--text-shadow);position:absolute;top:30px;right:36px}.alt-block .label{letter-spacing:.32em;opacity:.75;margin-bottom:4px;font-size:12px;display:block}#altitude{font-variant-numeric:tabular-nums;letter-spacing:.04em;font-size:22px;font-weight:300}.timer-block{text-shadow:var(--text-shadow);position:absolute;top:28px;left:50%;transform:translate(-50%)}#timer{font-variant-numeric:tabular-nums;letter-spacing:.08em;font-size:30px;font-weight:200}#finish{text-align:center;color:#fff;pointer-events:none;opacity:0;transition:opacity .6s,transform .6s;position:fixed;top:34%;left:50%;transform:translate(-50%)translateY(10px)}#finish.show{opacity:1;transform:translate(-50%)translateY(0)}#finish .finish-label{letter-spacing:.42em;text-indent:.42em;opacity:.9;text-shadow:var(--text-shadow);margin-bottom:14px;font-size:15px}#finish-time{font-variant-numeric:tabular-nums;letter-spacing:.04em;text-shadow:0 2px 24px #14233c8c;margin-bottom:14px;font-size:74px;font-weight:200;line-height:1}#finish-gates{letter-spacing:.2em;opacity:.85;text-shadow:var(--text-shadow);min-height:1.2em;margin:-8px 0 10px;font-size:13px;font-weight:300}#finish-best{letter-spacing:.24em;text-indent:.24em;color:var(--accent);text-shadow:var(--text-shadow);min-height:1.2em;margin-bottom:10px;font-size:15px;font-weight:300}#finish-note{letter-spacing:.2em;text-indent:.2em;opacity:.88;text-shadow:var(--text-shadow);min-height:1.2em;margin:0 0 12px;font-size:14px;font-weight:300}#finish .finish-lake{letter-spacing:.18em;color:#9cc8ec;text-shadow:var(--text-shadow);margin-bottom:22px;font-size:13px;font-weight:300}#finish .finish-hint{letter-spacing:.14em;opacity:.9;text-shadow:var(--text-shadow);font-size:13px;font-weight:300}#finish .finish-hint kbd{font:inherit;text-align:center;background:#ffffff1f;border:1px solid #ffffff8c;border-radius:5px;min-width:22px;margin-right:6px;padding:2px 7px;font-size:11.5px;display:inline-block}#perf{color:#fff;text-shadow:var(--text-shadow);pointer-events:none;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12px;display:none;position:fixed;top:12px;left:14px}#perf.show{display:block}#toast{color:#fff;letter-spacing:.22em;text-shadow:var(--text-shadow);opacity:0;pointer-events:none;font-size:22px;font-weight:300;transition:opacity .35s,transform .35s;position:fixed;top:26%;left:50%;transform:translate(-50%)translateY(8px)}#toast.show{opacity:1;transform:translate(-50%)translateY(0)}#title-screen{background:linear-gradient(#0000 32%,#101a326b 60%,#101a32d1 100%);justify-content:center;align-items:flex-end;padding-bottom:9vh;transition:opacity .9s;display:flex;position:fixed;inset:0}#title-screen.hidden{opacity:0;visibility:hidden;pointer-events:none}#title-screen.hidden,#title-screen.hidden *{pointer-events:none!important}@media (height<=560px){#title-screen{align-items:flex-start;padding:12px 0 20px;overflow-y:auto}.title-inner h1{margin:2px 0;font-size:34px}.eyebrow{margin-bottom:4px}.title-inner .sub{margin-bottom:10px}#start-btn{padding:10px 36px;font-size:15px}.keys,.credit,.dedication,.dedication-sub,.online-cue,.online-more{display:none}.title-actions{margin-top:4px}}.title-inner{text-align:center;color:#fff}.eyebrow{letter-spacing:.5em;text-indent:.5em;opacity:.85;text-shadow:var(--text-shadow);margin-bottom:14px;font-size:13px}.title-inner h1{letter-spacing:.24em;text-indent:.24em;text-shadow:0 2px 24px #14233c80;margin-bottom:10px;font-size:clamp(44px,7vw,84px);font-weight:200}.title-inner .sub{letter-spacing:.38em;text-indent:.38em;color:var(--accent);text-shadow:0 1px 10px #101c34e6,0 0 3px #101c34cc;margin-bottom:16px;font-size:13px;font-weight:400}.dedication{letter-spacing:.28em;text-indent:.28em;color:#ffffffc7;text-shadow:var(--text-shadow);margin-bottom:10px;font-size:14px;font-weight:300}.dedication-sub{letter-spacing:.22em;text-indent:.22em;color:#ffdcbeb8;text-shadow:var(--text-shadow);margin-bottom:32px;font-size:12px;font-weight:300}.title-actions{flex-wrap:wrap;justify-content:center;align-items:center;gap:12px;display:flex}#night-btn{pointer-events:auto;cursor:pointer;font:inherit;letter-spacing:.24em;text-indent:.24em;color:#ffffffd9;background:#101c344d;border:1px solid #fff6;border-radius:999px;margin-left:0;padding:9px 26px;font-size:13px;font-weight:300;transition:border-color .2s,color .2s,background .2s}#night-btn:hover{border-color:#fffc}#night-btn.on{color:#6ef0a8;background:#081e1873;border-color:#6ef0a8a6}#touch-ui{pointer-events:none;z-index:5;position:fixed;inset:0}#touch-ui.hidden{display:none}.t-zone{bottom:max(18px, env(safe-area-inset-bottom));gap:14px;display:flex;position:absolute}.t-right{width:250px;height:250px;display:block;bottom:0;right:0}.t-right .t-btn{position:absolute}.t-right #t-jump{right:calc(22px + env(safe-area-inset-right));bottom:calc(22px + env(safe-area-inset-bottom))}.t-right #t-sprint{right:calc(142px + env(safe-area-inset-right));bottom:calc(84px + env(safe-area-inset-bottom))}.t-right #t-tuck{right:calc(158px + env(safe-area-inset-right));bottom:calc(158px + env(safe-area-inset-bottom))}.t-right #t-brake{right:calc(78px + env(safe-area-inset-right));bottom:calc(148px + env(safe-area-inset-bottom))}#steer-pad{pointer-events:auto;touch-action:none;width:46%;height:72%;position:absolute;bottom:0;left:0}#steer-base{pointer-events:none;background:#101c3438;border:1.5px solid #fff6;border-radius:50%;width:108px;height:108px;margin:-54px 0 0 -54px;display:none;position:fixed}#steer-base.active{display:block}#steer-thumb{background:#ffffff8c;border-radius:50%;width:46px;height:46px;margin:-23px 0 0 -23px;position:absolute;top:50%;left:50%}#steer-hint{white-space:nowrap;letter-spacing:.14em;color:#ffffff8c;text-shadow:var(--text-shadow);font-size:12px;transition:opacity .6s;position:absolute;bottom:42px;left:50%;transform:translate(-50%)}#steer-hint.fade{opacity:0}.t-btn{pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;color:#ffffffe6;width:86px;height:86px;font:inherit;background:#101c3447;border:1.5px solid #ffffff73;border-radius:50%;font-size:24px;font-weight:300}.t-btn.pressed{background:#ffffff59;border-color:#ffffffe6}.t-small{width:68px;height:68px;font-size:18px}.t-primary{width:92px;height:92px;font-size:22px}.t-sprint{color:#f0b24a;border-color:#f0b24a99}.t-reset{top:max(14px, env(safe-area-inset-top));opacity:.7;width:44px;height:44px;font-size:19px;position:absolute;right:50%;transform:translate(50%)translate(120px)}.t-ride{left:50%;bottom:max(28px, env(safe-area-inset-bottom));letter-spacing:.18em;color:#ffe0c8;border-color:#ffb289bf;width:auto;min-width:96px;height:46px;padding:0 18px;font-size:14px;position:absolute;transform:translate(-50%)}.t-ride.hidden{display:none}#rotate-hint{z-index:40;letter-spacing:.28em;text-indent:.28em;color:#fff;text-shadow:var(--text-shadow);background:#0a1222eb;justify-content:center;align-items:center;font-size:20px;font-weight:300;display:none;position:fixed;inset:0}body.touch-device #rotate-hint{display:none}body.touch-device .speed-block{bottom:122px}body.touch-device .dist-block{top:84px;bottom:auto}body.touch-device #gates-info,body.touch-device #score-info{letter-spacing:.12em;opacity:.8;font-size:11px}body.touch-device #timer{font-size:26px}@media (orientation:portrait){body.touch-device #rotate-hint{display:flex}}#start-btn{pointer-events:auto;cursor:pointer;font:inherit;letter-spacing:.42em;text-indent:.42em;color:#1c2740;background:#fffffff0;border:none;border-radius:999px;padding:15px 52px;font-size:17px;font-weight:400;transition:transform .2s,box-shadow .2s,background .2s;box-shadow:0 6px 28px #14233c59}#start-btn:hover{background:#fff;transform:translateY(-2px);box-shadow:0 10px 34px #14233c73}#start-btn:active{transform:translateY(0)}#start-btn:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.keys{letter-spacing:.1em;opacity:.92;text-shadow:var(--text-shadow);flex-wrap:wrap;justify-content:center;gap:26px;margin-top:36px;font-size:13px;font-weight:300;display:flex}.keys kbd{font:inherit;text-align:center;background:#ffffff1f;border:1px solid #ffffff8c;border-radius:5px;min-width:22px;margin-right:6px;padding:2px 7px;font-size:11.5px;display:inline-block}.keys kbd+kbd{margin-left:-2px}#gpu-warn{color:#ffd9a8;max-width:520px;text-shadow:var(--text-shadow);background:#3c1e086b;border:1px solid #ffad608c;border-radius:8px;margin:14px auto 0;padding:10px 14px;font-size:13px;font-weight:400;line-height:1.7}#gpu-warn.hidden{display:none}.credit{letter-spacing:.12em;opacity:.55;text-shadow:var(--text-shadow);margin-top:26px;font-size:11px;font-weight:300}#start-btn:disabled{cursor:wait;opacity:.6;transform:none}#online{pointer-events:auto;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;margin-top:22px;display:flex}.online-cue{letter-spacing:.2em;text-indent:.2em;color:#ffffffb8;width:100%;text-shadow:var(--text-shadow);margin-bottom:2px;font-size:12.5px;font-weight:300}.online-more{text-align:center;width:100%;margin-top:4px}.online-more summary{cursor:pointer;letter-spacing:.18em;color:#ffffff80;text-shadow:var(--text-shadow);font-size:12px;font-weight:300;list-style:none}.online-more summary::-webkit-details-marker{display:none}.online-more[open] summary{color:#ffffffb3;margin-bottom:8px}.online-more #server-input{width:min(280px,86vw)}#online input{font:inherit;letter-spacing:.08em;color:#fff;width:118px;text-shadow:var(--text-shadow);background:#101c3452;border:1px solid #ffffff73;border-radius:999px;outline:none;padding:8px 16px;font-size:13px}#online input#server-input{width:210px}#online input::placeholder{color:#ffffff8c}#online input:focus{border-color:var(--accent)}#online button{cursor:pointer;font:inherit;letter-spacing:.22em;text-indent:.22em;color:#fff;background:#101c3452;border:1px solid #fff9;border-radius:999px;padding:8px 20px;font-size:13px;transition:background .2s,border-color .2s}#online button:hover{background:#101c348c;border-color:#fff}#online button#race-btn{border-color:var(--accent);color:var(--accent)}#online button.hidden{display:none}#online-status{letter-spacing:.14em;color:#ffffffd9;width:100%;text-shadow:var(--text-shadow);min-height:18px;font-size:12.5px;font-weight:300}#room-info{letter-spacing:.18em;opacity:.75;margin-top:2px;font-size:12px;font-weight:300;display:block}#stamina{background:#ffffff2e;border-radius:2px;width:108px;height:3px;margin-top:7px;overflow:hidden}#stamina-fill{background:#ffffffbf;border-radius:2px;width:100%;height:100%;transition:width .12s linear,background-color .2s}#stamina-fill.sprinting{background:#f0b24a}#stamina-fill.low{background:#e0524a;animation:.7s ease-in-out infinite stamina-pulse}@keyframes stamina-pulse{50%{opacity:.45}}#gates-info,#score-info{letter-spacing:.16em;opacity:.85;font-variant-numeric:tabular-nums;margin-top:2px;font-size:12.5px;font-weight:300;display:block}#score-info{color:#f0c46a}#trick-pop{color:#f0c46a;letter-spacing:.18em;text-shadow:0 2px 14px #141e37d9;opacity:0;pointer-events:none;white-space:nowrap;font-size:30px;font-weight:400;position:fixed;top:22%;left:50%;transform:translate(-50%)scale(.6)}#trick-pop.show{animation:1.5s ease-out trick-pop-in}#trick-pop.bad{color:#ff8f80;font-size:22px}@keyframes trick-pop-in{0%{opacity:0;transform:translate(-50%)scale(.55)}12%{opacity:1;transform:translate(-50%)scale(1.12)}22%{transform:translate(-50%)scale(1)}78%{opacity:1}to{opacity:0;transform:translate(-50%)scale(1)translateY(-14px)}}#speed-vignette{pointer-events:none;opacity:0;background:radial-gradient(105% 92% at 50% 46%,#0000 55%,#0a11229e 100%);transition:opacity .35s linear;position:fixed;inset:0}#tag-info{letter-spacing:.1em;color:#ffd0cd;text-shadow:var(--text-shadow);font-variant-numeric:tabular-nums;pointer-events:none;background:#340c0c6b;border:1px solid #e0494980;border-radius:999px;padding:6px 18px;font-size:15px;font-weight:400;display:none;position:fixed;top:96px;left:50%;transform:translate(-50%)}#tag-info.show{display:block}#countdown{color:#fff;text-shadow:0 2px 30px #101c34cc;opacity:0;pointer-events:none;font-size:120px;font-weight:200;transition:opacity .15s;position:fixed;top:34%;left:50%;transform:translate(-50%,-50%)}#countdown.show{opacity:1}
