:root{--ink:#f5f3ee;--muted:#f5f3eeb3;--glass:#0a10207a;--glass-strong:#0a1020c7;--edge:#ffffff24;--accent:#ff5a3c;--teal:#19c3c3;--gold:#ffc83a;color:var(--ink);background:#0b1020;font-family:ui-rounded,SF Pro Rounded,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}*{box-sizing:border-box}html,body{overscroll-behavior:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;height:100%;margin:0;overflow:hidden}.stage{position:fixed;inset:0}.scene{touch-action:none;width:100%;height:100%;display:block;position:absolute;inset:0}.hud{z-index:5;pointer-events:none;padding:max(12px, env(safe-area-inset-top)) max(12px, env(safe-area-inset-right)) max(12px, env(safe-area-inset-bottom)) max(12px, env(safe-area-inset-left));position:absolute;inset:0}.panel{background:var(--glass);border:1px solid var(--edge);-webkit-backdrop-filter:blur(10px);border-radius:16px;padding:10px 14px;position:absolute;box-shadow:0 8px 30px #00000040}.score{top:max(12px, env(safe-area-inset-top));left:max(12px, env(safe-area-inset-left));min-width:190px}.score-value{letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:34px;font-weight:800}.score-row{color:var(--muted);font-variant-numeric:tabular-nums;gap:12px;font-size:13px;display:flex}.combo{background:linear-gradient(90deg, var(--accent), var(--gold));color:#1a0d00;border-radius:999px;margin-top:6px;padding:2px 10px;font-size:13px;font-weight:800;animation:.25s ease-out pop;display:inline-block}.speedo{top:max(12px, env(safe-area-inset-top));right:max(12px, env(safe-area-inset-right));text-align:right;min-width:170px}.speed-value{font-variant-numeric:tabular-nums;font-size:34px;font-weight:800}.speed-value small{color:var(--muted);margin-left:4px;font-size:13px;font-weight:600}.cadence{color:var(--muted);font-variant-numeric:tabular-nums;justify-content:flex-end;align-items:center;gap:10px;font-size:13px;display:flex}.beat{background:var(--teal);opacity:.35;border-radius:50%;width:10px;height:10px}.beat.pulse{animation:.22s ease-out beat}.beat.pulse[data-strong="1"]{animation:.3s ease-out beat-strong}.sky{margin-top:6px;font-size:13px}.sky-bar{background:linear-gradient(90deg,#ff9a4a 0%,#6b4aa6 12%,#0b1540 30% 72%,#ff9a6a 82%,#8ec5ff 92%,#ff9a4a 100%);border-radius:4px;height:4px;margin-top:4px;position:relative;overflow:hidden}.sky-bar div{background:#ffffff1f;border-right:2px solid #fff;height:100%}.autopilot{top:max(14px, env(safe-area-inset-top));background:var(--glass-strong);border:1px solid var(--edge);white-space:nowrap;border-radius:999px;align-items:center;gap:8px;padding:6px 14px;font-size:13px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.autopilot .dot{background:var(--teal);width:8px;height:8px;box-shadow:0 0 10px var(--teal);border-radius:50%;animation:1.2s infinite blink}.camera-label{color:var(--muted);white-space:nowrap;font-size:13px;animation:2.4s ease-out forwards fade-label;position:absolute;top:58px;left:50%;transform:translate(-50%)}.toolbar{right:max(12px, env(safe-area-inset-right));bottom:max(12px, env(safe-area-inset-bottom));pointer-events:auto;flex-wrap:wrap;justify-content:flex-end;gap:6px;max-width:70vw;display:flex;position:absolute}.toolbar button,.camera-dots button,.modal button{font:inherit;color:var(--ink);background:var(--glass-strong);border:1px solid var(--edge);cursor:pointer;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:12px;padding:7px 11px;font-size:13px}.toolbar button:hover,.modal button:hover{border-color:#fff6}.toolbar button:focus-visible,.camera-dots button:focus-visible,.modal button:focus-visible,.pad:focus-visible{outline:2px solid var(--gold);outline-offset:2px}.camera-dots{gap:2px;display:flex}.camera-dots button{min-width:30px;padding:7px 9px}.camera-dots button.active{background:var(--teal);color:#04201f;font-weight:800}.keys-hint{left:max(12px, env(safe-area-inset-left));bottom:max(14px, env(safe-area-inset-bottom));color:var(--muted);max-width:46vw;font-size:12px;line-height:1.8;position:absolute}kbd{border:1px solid var(--edge);color:var(--ink);background:#ffffff1f;border-radius:5px;padding:0 6px;font-family:inherit;font-size:11px;display:inline-block}.title-card{text-align:center;pointer-events:none;text-shadow:0 4px 30px #0009;width:min(92vw,640px);animation:1.2s ease-out rise;position:absolute;top:13%;left:50%;transform:translate(-50%)}.title-card h1{letter-spacing:-.04em;margin:0;font-size:clamp(42px,8vw,88px);font-weight:900}.title-card h1 span{background:linear-gradient(90deg,#ff6a3d,#ffc83a);color:#0000;-webkit-background-clip:text;background-clip:text}.title-card p{color:var(--muted);margin:6px 0 0;font-size:clamp(14px,2vw,18px)}.title-card .hint{background:var(--glass-strong);border:1px solid var(--edge);color:var(--ink);border-radius:999px;margin-top:16px;padding:8px 16px;animation:2s infinite blink;display:inline-block}.toasts{right:max(12px, env(safe-area-inset-right));pointer-events:none;flex-direction:column;gap:8px;display:flex;position:absolute;top:150px}.toast{background:linear-gradient(120deg,#281a06e6,#140e1ee6);border:1px solid #ffc83a99;border-radius:14px;align-items:center;gap:10px;max-width:300px;padding:10px 14px;animation:.35s ease-out slide-in;display:flex;box-shadow:0 0 30px #ffc83a40}.toast-icon{font-size:28px}.toast small{color:var(--gold);text-transform:uppercase;letter-spacing:.08em;font-size:11px;display:block}.toast strong{display:block}.toast span{color:var(--muted);font-size:12px}.letterbox:before,.letterbox:after{content:"";pointer-events:none;background:#000;height:9vh;animation:.6s ease-out bars;position:absolute;left:0;right:0}.letterbox:before{top:0}.letterbox:after{bottom:0}.letterbox{pointer-events:none;position:absolute;inset:0}.sunglasses{pointer-events:none;background:radial-gradient(75% 70% at 50% 45%,#0000 60%,#0000008c 100%);position:absolute;inset:0}.sunglasses:after{content:"";background:linear-gradient(#46287829,#ff8c3c14);position:absolute;inset:0}.sunglasses:before{content:"";background:#0a0a0ed9;border-radius:0 0 40% 40%;width:3vw;height:4vh;position:absolute;top:0;left:50%;transform:translate(-50%)}.paused{z-index:4;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);color:var(--muted);background:#05081273;flex-direction:column;justify-content:center;align-items:center;gap:8px;font-size:15px;display:flex;position:absolute;inset:0}.paused strong{color:var(--ink);font-size:42px}.fatal{text-align:center;place-content:center;padding:24px;display:grid;position:absolute;inset:0}.modal{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:20;background:#03060e8c;place-items:center;padding:16px;display:grid;position:absolute;inset:0}.modal-body{background:var(--glass-strong);border:1px solid var(--edge);-webkit-user-select:text;user-select:text;border-radius:20px;width:min(760px,100%);max-height:86vh;padding:18px 20px 20px;overflow:auto;box-shadow:0 30px 80px #00000080}.modal-body header{justify-content:space-between;align-items:center;display:flex}.modal-body h2{margin:0;font-size:22px}.modal-body h2 small{color:var(--muted);margin-left:8px;font-size:15px}.modal-note{color:var(--muted);font-size:13px;line-height:1.5}.achievements{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;margin:0;padding:0;list-style:none;display:grid}.achievements li{border:1px solid var(--edge);opacity:.65;filter:grayscale(.7);background:#ffffff0a;border-radius:14px;gap:10px;padding:10px 12px;display:flex}.achievements li.unlocked{opacity:1;filter:none;background:#ffc83a14;border-color:#ffc83a8c}.ach-icon{font-size:26px}.achievements strong{font-size:14px;display:block}.achievements span{color:var(--muted);font-size:12px;display:block}.ach-bar{background:#ffffff1f;border-radius:4px;height:4px;margin-top:6px;overflow:hidden}.ach-bar div{background:linear-gradient(90deg, var(--teal), var(--gold));height:100%}.controls{border-collapse:collapse;width:100%;margin-top:12px;font-size:14px}.controls th{text-align:left;white-space:nowrap;color:var(--gold);padding:6px 16px 6px 0;font-weight:700}.controls td{color:var(--ink);padding:6px 0}.controls tr+tr{border-top:1px solid var(--edge)}.touch{left:0;right:0;bottom:max(64px, calc(env(safe-area-inset-bottom) + 60px));padding:0 max(14px, env(safe-area-inset-left)) 0 max(14px, env(safe-area-inset-right));pointer-events:none;justify-content:space-between;align-items:flex-end;display:flex;position:absolute}.touch-left,.touch-right{pointer-events:auto;align-items:flex-end;gap:12px;display:flex}.touch-col{flex-direction:column;gap:10px;display:flex}.pad{width:74px;height:74px;color:var(--ink);font:inherit;touch-action:none;-webkit-backdrop-filter:blur(6px);background:#0a102073;border:1px solid #ffffff47;border-radius:50%;font-size:26px;font-weight:800;transition:transform 60ms}.pad.small{width:54px;height:54px;font-size:18px}.pad.big{background:#ff5a3c73;width:92px;height:92px;font-size:18px}.pad.held{background:#19c3c38c;transform:scale(.92)}@media (pointer:coarse){.keys-hint,.camera-dots,.fps{display:none}.touch{bottom:max(66px, calc(env(safe-area-inset-bottom) + 60px))}}@media (max-width:440px){.pad{width:60px;height:60px;font-size:22px}.pad.small{width:46px;height:46px;font-size:16px}.pad.big{width:76px;height:76px;font-size:15px}.touch-left,.touch-right{gap:8px}}@media (max-width:640px){.score,.speedo{min-width:0;padding:8px 10px}.score-value,.speed-value{font-size:24px}.score-row{flex-wrap:wrap;gap:8px;font-size:11px}.autopilot{white-space:normal;text-align:center;width:max-content;max-width:90vw;font-size:11px;top:112px}.camera-label{top:146px}.toolbar{max-width:calc(100vw - 24px)}.toolbar button{padding:6px 8px;font-size:12px}.toasts{align-items:center;top:120px;left:12px;right:12px}.title-card{top:22%}}@media (max-height:520px){.title-card{top:26%}.title-card h1{font-size:40px}.title-card p:not(.hint){display:none}.title-card .hint{margin-top:6px;font-size:13px}.score-value,.speed-value{font-size:24px}}@media (prefers-reduced-motion:reduce){*,:before,:after{animation-duration:.01ms!important;animation-iteration-count:1!important}}@keyframes beat{0%{opacity:1;transform:scale(1.6)}to{opacity:.35;transform:scale(1)}}@keyframes beat-strong{0%{opacity:1;background:var(--gold);transform:scale(2.2)}to{opacity:.35;transform:scale(1)}}@keyframes pop{0%{transform:scale(1.35)}to{transform:scale(1)}}@keyframes blink{50%{opacity:.45}}@keyframes fade-label{0%,70%{opacity:1}to{opacity:0}}@keyframes rise{0%{opacity:0;transform:translate(-50%,20px)}to{opacity:1;transform:translate(-50%)}}@keyframes slide-in{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:none}}@keyframes bars{0%{height:0}}
