*{margin:0;padding:0;box-sizing:border-box}:root{--bg: #1a1a2e;--panel: #16213e;--panel-light: #1f2b4d;--accent: #e94560;--accent2: #f5c518;--text: #e8e8e8;--muted: #8a93a8}html,body,#app{width:100%;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:Courier New,Courier,monospace;-webkit-user-select:none;user-select:none}canvas{display:block}.screen{position:absolute;inset:0}.menu-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;background:linear-gradient(180deg,#0f173080,#1a1a2e8c 55%,#141026d9),url(../menu-bg.jpg) center / cover no-repeat,linear-gradient(180deg,#0f1730,#1a1a2e 60%,#2d1b3d)}.menu-panel,.menu-screen button{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background-color:#16213ee0}.menu-screen button.primary{background-color:var(--accent)}.menu-title{font-size:64px;font-weight:700;letter-spacing:6px;color:var(--accent2);text-shadow:4px 4px 0 var(--accent),8px 8px 0 #00000088;line-height:1.08}.menu-subtitle{color:var(--muted);margin-top:4px;letter-spacing:3px}.menu-panel{background:var(--panel);border:2px solid var(--accent);padding:20px;min-width:480px;max-height:50vh;overflow-y:auto}.menu-panel h2{color:var(--accent2);font-size:16px;margin-bottom:12px;letter-spacing:2px}.track-row{display:flex;align-items:center;gap:8px;padding:8px;border-bottom:1px solid #ffffff15}.track-row:hover{background:var(--panel-light)}.track-row .track-name{flex:1;font-size:15px}.track-row .track-best{color:var(--muted);font-size:12px;margin-right:8px}.track-row .track-best.beat{color:#5dff8f}.track-row .track-target{color:var(--muted);font-size:11px;letter-spacing:.5px}.track-row .track-target.beat{color:#5dff8f}button{font-family:inherit;background:var(--panel-light);color:var(--text);border:2px solid var(--accent);padding:8px 16px;font-size:14px;cursor:pointer;letter-spacing:1px}button:hover{background:var(--accent);color:#fff}button.small{padding:4px 10px;font-size:12px}button.primary{background:var(--accent)}button.primary:hover{background:#ff5f7a}.menu-actions{display:flex;gap:12px}.menu-screen>.vg-studio-links.race-studio-footer{margin-top:-12px}.editor-ui{position:absolute;inset:0;pointer-events:none}.editor-panel{position:absolute;top:0;left:0;bottom:0;width:230px;background:var(--panel);border-right:2px solid var(--accent);padding:12px;overflow-y:auto;pointer-events:auto;display:flex;flex-direction:column;gap:10px}.editor-panel h3{color:var(--accent2);font-size:13px;letter-spacing:2px;border-bottom:1px solid #ffffff22;padding-bottom:4px}.palette{display:flex;flex-direction:column;gap:4px}.palette button{text-align:left;font-size:12px;padding:6px 8px;border-width:1px;border-color:#fff3}.palette button.selected{border-color:var(--accent2);background:var(--accent);color:#fff}.editor-topbar{position:absolute;top:0;left:230px;right:0;display:flex;align-items:center;gap:10px;padding:8px 12px;background:#16213ecc;pointer-events:auto}.editor-topbar .track-title{color:var(--accent2);font-size:15px;letter-spacing:1px;flex:1}.editor-status{position:absolute;bottom:0;left:230px;right:0;padding:8px 12px;background:#16213ecc;font-size:12px;color:var(--muted);pointer-events:none}.editor-status .ok{color:#6fe06f}.editor-status .warn{color:var(--accent2)}.carselect-ui{position:absolute;inset:0;pointer-events:none}.carselect-title{position:absolute;top:36px;width:100%;text-align:center;font-size:34px;font-weight:700;letter-spacing:6px;color:var(--accent2);text-shadow:3px 3px 0 var(--accent)}.carselect-arrow{position:absolute;top:45%;font-size:34px;padding:14px 20px;pointer-events:auto}.carselect-arrow.left{left:6%}.carselect-arrow.right{right:6%}.carselect-info{position:absolute;bottom:28px;width:100%;display:flex;flex-direction:column;align-items:center;gap:8px}.car-name{font-size:30px;font-weight:700;letter-spacing:4px;color:#fff;text-shadow:2px 2px 0 #000}.car-tag{color:var(--muted);font-size:14px}.car-stats{margin-top:6px;font-size:15px}.stat-row{display:flex;gap:12px}.stat-label{width:70px;color:var(--accent2);text-align:right}.stat-bar{letter-spacing:3px;color:var(--accent)}.carselect-actions{margin-top:10px;display:flex;gap:14px;pointer-events:auto}.hud{position:absolute;inset:0;pointer-events:none;overflow:hidden}.hud-timing{position:absolute;top:12px;left:14px;font-size:16px;line-height:1.5;color:#fff;text-shadow:2px 2px 0 #000}.hud-timing .label{color:var(--accent2)}.hud-timing .lap-beat{color:#5dff8f}.hud-speed{position:absolute;bottom:18px;right:22px;font-size:44px;font-weight:700;color:#fff;text-shadow:3px 3px 0 #000}.hud-speed .unit{font-size:16px;color:var(--accent2)}.hud-stunts{position:absolute;top:14%;right:22px;display:flex;flex-direction:column;align-items:flex-end;gap:6px;pointer-events:none}.stunt-pop{display:flex;align-items:baseline;gap:9px;padding:4px 10px;background:#12060bcc;border-right:4px solid var(--accent);text-shadow:2px 2px 0 #000;white-space:nowrap}.stunt-pop .stunt-name{font-size:17px;font-weight:700;letter-spacing:2px;color:#fff}.stunt-pop .stunt-detail{font-size:12px;color:var(--muted)}.stunt-pop .stunt-pts{font-size:19px;font-weight:700;color:var(--accent2);font-variant-numeric:tabular-nums}.hud-timing .stunt-score{color:var(--accent2);font-variant-numeric:tabular-nums}.hud-timing .stunt-sub{font-size:12px;color:var(--muted)}body.touch-controls .hud-stunts{top:24%}.hud-message{position:absolute;top:34%;width:100%;text-align:center;font-size:42px;font-weight:700;color:var(--accent2);text-shadow:3px 3px 0 #000;letter-spacing:4px}.hud-help{position:absolute;bottom:8px;left:14px;font-size:11px;color:#fff9;text-shadow:1px 1px 0 #000}.replay-banner{position:absolute;top:12px;width:100%;text-align:center;font-size:26px;letter-spacing:8px;color:var(--accent);text-shadow:2px 2px 0 #000;animation:blink 1.2s steps(2) infinite}@keyframes blink{50%{opacity:.25}}.fade-overlay{position:absolute;inset:0;background:#000;opacity:0;transition:opacity .4s;pointer-events:none}.countdown{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;pointer-events:none}.lights{display:flex;gap:22px;margin-top:9%;padding:14px 20px;background:#0a0a0fcc;border:2px solid #000;border-radius:14px;box-shadow:0 6px 18px #0008}.lamp{width:48px;height:48px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#5a1414,#240808);border:3px solid #1a1a1a;box-shadow:inset 0 0 10px #000;transition:background .1s,box-shadow .1s}.lamp.on{background:radial-gradient(circle at 35% 30%,#ff8a8a,#f22 60%,#b00);box-shadow:0 0 26px 7px #ff2b2bcc,inset 0 0 8px #ffd5d5}.countdown.go .lamp{background:radial-gradient(circle at 35% 30%,#c9ffd9,#22ff6a 55%,#0a9c3c);box-shadow:0 0 30px 9px #22ff6ad0,inset 0 0 8px #d6ffe2;animation:lamp-pulse .5s ease-out 2}@keyframes lamp-pulse{50%{box-shadow:0 0 44px 14px #22ff6a,inset 0 0 8px #fff}}.countdown-num{margin-top:4%;font-size:132px;font-weight:900;line-height:1;color:#ffd23f;text-shadow:5px 5px 0 #000,0 0 28px #000;letter-spacing:2px}.start-flash{position:absolute;inset:0;background:radial-gradient(circle at 50% 40%,#d9ffe6 0%,#6dffa0 35%,transparent 70%);opacity:0;pointer-events:none}.menu-help,.carselect-hint{color:var(--muted);font-size:12px;letter-spacing:2px;text-align:center}.carselect-hint{margin-top:6px}.gp-focus{outline:none;border-color:var(--accent2)!important;background:var(--accent)!important;color:#fff!important;box-shadow:0 0 0 2px var(--accent2),0 0 14px 2px #f5c51888}.pause-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#0a0c18b8;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);pointer-events:auto}.pause-box{display:flex;flex-direction:column;align-items:stretch;gap:12px;min-width:300px;padding:28px 32px;background:var(--panel);border:2px solid var(--accent);box-shadow:0 10px 40px #0009}.pause-title{font-size:34px;font-weight:700;letter-spacing:6px;text-align:center;color:var(--accent2);text-shadow:3px 3px 0 var(--accent)}.pause-reason{text-align:center;color:var(--accent);font-size:13px;letter-spacing:2px;min-height:14px}.pause-box button{font-size:16px;padding:10px 16px}.pause-hint{margin-top:4px;text-align:center;color:var(--muted);font-size:11px;letter-spacing:1px}.gp-toast{position:fixed;bottom:26px;left:50%;transform:translate(-50%,24px);padding:10px 22px;background:var(--panel);border:2px solid var(--accent2);color:var(--text);font-family:Courier New,Courier,monospace;font-size:13px;letter-spacing:2px;border-radius:6px;box-shadow:0 6px 22px #0008;opacity:0;pointer-events:none;z-index:9999;transition:opacity .25s ease,transform .25s ease}.gp-toast.show{opacity:1;transform:translate(-50%)}.gp-toast.good{border-color:#22ff6a}.gp-toast.bad{border-color:var(--accent)}.attract-screen .attract-stack{display:flex;flex-direction:column;align-items:center;gap:18px}.attract-start{font-size:22px;letter-spacing:6px;padding:14px 40px;animation:attract-pulse 1.6s ease-in-out infinite}@keyframes attract-pulse{0%,to{opacity:1}50%{opacity:.55}}.attract-hint{letter-spacing:2px}.menu-title.small{font-size:34px}.opt-row{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:8px 2px;border-bottom:1px solid #ffffff14}.opt-row:last-child{border-bottom:none}.opt-label{letter-spacing:3px;color:var(--text);font-size:14px}.opt-row button{min-width:150px;font-size:13px;padding:7px 14px}.cup-cta{display:flex;align-items:center;gap:12px;padding:6px 2px;flex-wrap:wrap}.cup-blurb{flex:1;min-width:220px;color:var(--muted);font-size:13px;letter-spacing:1px}.cup-row{display:flex;align-items:center;gap:14px;padding:7px 2px;border-bottom:1px solid #ffffff12;font-size:14px;letter-spacing:1px}.cup-row .cup-n{width:22px;color:var(--muted);text-align:right}.cup-row .cup-name{flex:1}.cup-row .cup-target{color:var(--muted);font-size:11px;letter-spacing:.5px}.cup-row .cup-time{color:var(--accent2);font-variant-numeric:tabular-nums;width:104px;text-align:right}.cup-row .cup-time.beat{color:#5dff8f}.cup-row .cup-stunt{width:62px;text-align:right;color:#ffd23f;font-variant-numeric:tabular-nums}.cup-row.head{font-size:11px;color:var(--muted);letter-spacing:2px;border-bottom:1px solid #ffffff30}.cup-row.head .cup-stunt,.cup-row.head .cup-time{color:var(--muted)}.cup-row.todo{opacity:.45}.cup-row.next .cup-name,.cup-row.next .cup-time{color:var(--accent)}.cup-row.total,.cup-row.best{border-bottom:none;border-top:2px solid var(--accent);margin-top:6px;font-size:16px}.cup-row.best{border-top:none;margin-top:0;font-size:13px;opacity:.8}.cs-root{--cs-accent: #f5c518;--cs-bar: 11vh}.vg-touch .vg-btn{width:76px;height:76px;border-color:#f5c51899;color:#fff;font-family:Courier New,Courier,monospace}.vg-touch .vg-btn:hover{background:#ffffff1f}.vg-touch .vg-btn.is-down,.vg-touch .vg-btn.is-down:hover{background:#ffffff4d}.vg-touch .vg-btn[data-action=left],.vg-touch .vg-btn[data-action=right]{font-size:30px}.vg-touch .vg-btn[data-action=left]{left:calc(env(safe-area-inset-left,0px) + 16px);bottom:calc(env(safe-area-inset-bottom,0px) + 16px)}.vg-touch .vg-btn[data-action=right]{left:calc(env(safe-area-inset-left,0px) + 104px);bottom:calc(env(safe-area-inset-bottom,0px) + 16px)}.vg-touch .vg-btn[data-action=throttle]{right:calc(env(safe-area-inset-right,0px) + 16px);bottom:calc(env(safe-area-inset-bottom,0px) + 16px);border-color:#5dff8fcc}.vg-touch .vg-btn[data-action=brake]{right:calc(env(safe-area-inset-right,0px) + 104px);bottom:calc(env(safe-area-inset-bottom,0px) + 16px);border-color:#e94560cc}.vg-touch .vg-btn[data-action=pause]{width:48px;height:48px;font-size:16px;right:calc(env(safe-area-inset-right,0px) + 14px);bottom:auto;top:calc(env(safe-area-inset-top,0px) + 12px)}body.touch-controls .hud-speed{bottom:106px;right:20px;font-size:30px}body.touch-controls .hud-speed .unit{font-size:12px}body.touch-controls .hud-help{left:50%;right:auto;bottom:14px;transform:translate(-50%);text-align:center;line-height:1.35;max-width:calc(100vw - 420px)}@media(max-height:480px){.menu-screen{justify-content:flex-start;gap:12px;padding:14px 12px calc(env(safe-area-inset-bottom,0px) + 14px);overflow-y:auto}.menu-screen>*{flex-shrink:0}.menu-title{font-size:34px;letter-spacing:3px;text-shadow:2px 2px 0 var(--accent),4px 4px 0 #00000088}.menu-title.small{font-size:26px}.menu-subtitle{font-size:11px;letter-spacing:1px}.menu-panel{max-height:none;min-width:0;width:min(560px,94vw);padding:12px 14px}.attract-screen{justify-content:center;overflow:hidden}}.crash-flash{position:fixed;inset:0;background:#fff;opacity:0;pointer-events:none;z-index:60}.crash-flash.on{animation:crash-flash-pop .42s ease-out forwards}@keyframes crash-flash-pop{0%{opacity:.95}to{opacity:0}}.cs-root{position:fixed;inset:0;z-index:2147483000;pointer-events:none;font-family:Georgia,Times New Roman,serif;color:#f3e7c6;overflow:hidden;opacity:0;transition:opacity .25s ease;--cs-accent: #ffd66b;--cs-bar: 16vh}.cs-root.cs-on{opacity:1}.cs-bar{position:absolute;left:0;right:0;height:0;background:#000;transition:height .5s ease;z-index:3}.cs-bar-top{top:0}.cs-bar-bottom{bottom:0}.cs-root.cs-letterbox .cs-bar{height:var(--cs-bar)}.cs-fade{position:absolute;inset:0;background:#000;opacity:0;transition:opacity .6s ease;z-index:6}.cs-vo{position:absolute;left:50%;bottom:15vh;transform:translate(-50%);width:min(760px,88vw);text-align:center;font-style:italic;font-size:clamp(17px,2.5vw,25px);line-height:1.45;letter-spacing:.02em;text-shadow:0 2px 10px #000,0 0 26px rgba(0,0,0,.8);opacity:0;transition:opacity .55s ease;z-index:8}.cs-vo.cs-show{opacity:1}.cs-say{position:absolute;left:50%;bottom:12vh;transform:translate(-50%) translateY(10px);width:min(760px,88vw);padding:14px 20px;box-sizing:border-box;background:#0c0a08d1;border-left:4px solid var(--cs-accent);border-radius:4px;box-shadow:0 8px 40px #0009;opacity:0;transition:opacity .25s ease,transform .25s ease;z-index:8}.cs-say.cs-show{opacity:1;transform:translate(-50%) translateY(0)}.cs-say-name{font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--cs-accent);font-size:clamp(15px,2vw,20px);margin-bottom:4px}.cs-say-text{font-size:clamp(16px,2.3vw,22px);line-height:1.4}.cs-title{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:10px;opacity:0;transition:opacity .6s ease;z-index:7}.cs-title.cs-show{opacity:1}.cs-title-main{font-weight:700;text-transform:uppercase;letter-spacing:.08em;font-size:clamp(34px,7vw,72px);text-shadow:0 4px 24px #000}.cs-title-sub{font-style:italic;color:#e9dcc0;font-size:clamp(16px,2.6vw,26px);text-shadow:0 2px 12px #000}.cs-card{position:absolute;left:8vw;bottom:19vh;text-align:left;padding-left:16px;border-left:4px solid var(--cs-accent);opacity:0;transform:translate(-14px);transition:opacity .2s ease,transform .2s ease;z-index:8}.cs-card.cs-show{opacity:1;transform:translate(0)}.cs-card-name{font-weight:700;text-transform:uppercase;color:var(--cs-accent);font-size:clamp(26px,4.4vw,44px);letter-spacing:.06em;text-shadow:0 2px 10px #000,0 0 26px rgba(0,0,0,.7)}.cs-card-tag{margin-top:4px;font-style:italic;color:#e9dcc0;font-size:clamp(14px,2.1vw,21px);text-shadow:0 2px 8px #000}.cs-flash{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:0 6vw;white-space:pre-line;font-weight:700;text-transform:uppercase;letter-spacing:.05em;font-size:clamp(28px,6vw,64px);text-shadow:0 4px 30px #000,0 0 40px rgba(0,0,0,.9);opacity:0;transform:scale(.94);transition:opacity .3s ease,transform .3s ease;z-index:9}.cs-flash.cs-show{opacity:1;transform:scale(1)}.cs-skip{position:absolute;top:max(14px,env(safe-area-inset-top));right:max(14px,env(safe-area-inset-right));z-index:10;padding:8px 16px;border-radius:999px;border:1px solid rgba(255,255,255,.35);background:#0006;color:#ffffffd9;font-family:system-ui,sans-serif;font-size:13px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;pointer-events:none;opacity:0;transition:opacity .2s ease}.cs-root.cs-on .cs-skip{pointer-events:auto;opacity:1}
