*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#0f172a;--bg-card:#1e293b;--bg-hover:#26344b;--text:#e2e8f0;--text-dim:#94a3b8;--accent:#4ecdc4;--accent2:#ff6b6b;--brand:#f59e0b;--brand2:#fbbf24;--gold:#fbbf24;--border:#334155;--radius:12px;--safe-bottom:env(safe-area-inset-bottom,0px)}html,body{background:var(--bg);height:100%;color:var(--text);touch-action:manipulation;-webkit-user-select:none;user-select:none;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;overflow:hidden}#app{flex-direction:column;height:100dvh;display:flex}.btn{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-card);color:var(--text);cursor:pointer;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-size:15px;transition:all .15s;display:inline-flex}.btn:hover{background:var(--bg-hover)}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:linear-gradient(135deg, var(--brand), var(--brand2));color:#0f172a;border-color:#0000;font-weight:700}.btn-primary:hover{filter:brightness(1.08);box-shadow:0 8px 24px #f59e0b59}.btn-secondary{color:var(--text);background:0 0;border-color:#475569}.btn-secondary:hover{border-color:var(--brand2)}.btn-large{flex-direction:column;gap:4px;width:100%;padding:18px 24px;font-size:18px}.btn-large .btn-desc{opacity:.6;font-size:12px}.btn-large .btn-icon{font-size:28px}.btn-option{padding:8px 16px;font-size:14px}.btn-option.active{background:var(--accent);color:#000;border-color:var(--accent)}.btn-back{color:var(--text-dim);background:0 0;border:none;padding:8px;font-size:18px}.btn-start{bottom:var(--safe-bottom);letter-spacing:4px;box-shadow:0 0 0 6px var(--bg), 0 -10px 14px 10px var(--bg);margin-top:auto;padding:18px;font-size:22px;position:sticky}.screen{min-height:0;padding:calc(20px + env(safe-area-inset-top,0px)) calc(20px + env(safe-area-inset-right,0px)) calc(20px + var(--safe-bottom)) calc(20px + env(safe-area-inset-left,0px));flex-direction:column;flex:1;width:100%;max-width:480px;margin:0 auto;display:flex;overflow-y:auto}.menu-screen{justify-content:flex-start;gap:40px}.logo-area{text-align:center}.logo-icon{background:linear-gradient(135deg, var(--brand), var(--brand2));color:#000;border-radius:20px;justify-content:center;align-items:center;width:80px;height:80px;margin-bottom:12px;font-size:42px;font-weight:900;display:inline-flex}.logo-title{letter-spacing:2px;font-size:36px;font-weight:800}.logo-sub{color:var(--text-dim);margin-top:4px;font-size:14px}.menu-buttons{flex-direction:column;gap:12px;display:flex}.menu-footer{text-align:center}.hint{color:var(--text-dim);font-size:12px}.setup-screen{padding-bottom:calc(20px + var(--safe-bottom));gap:16px;overflow-y:auto}.setup-header{align-items:center;gap:12px;display:flex}.setup-header h2{flex:1;font-size:20px}.tier-badge{background:var(--accent);color:#000;border-radius:20px;padding:4px 12px;font-size:12px;font-weight:700}.setup-section{margin-bottom:8px}.setup-section h3{color:var(--text-dim);margin-bottom:8px;font-size:15px}.exercise-grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px;display:grid}.exercise-option{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;align-items:center;gap:8px;padding:10px 12px;font-size:13px;transition:all .15s;display:flex}.exercise-option.selected{border-color:var(--accent);background:#1a3a38}.exercise-option input{opacity:0;width:1px;height:1px;position:absolute}.ex-icon{font-size:18px}.ex-name{flex:1}.ex-level{color:var(--text-dim);font-size:12px}.slider{-webkit-appearance:none;background:var(--border);border-radius:3px;outline:none;width:100%;height:6px}.slider::-webkit-slider-thumb{-webkit-appearance:none;background:var(--accent);cursor:pointer;border-radius:50%;width:22px;height:22px}.slider-labels{color:var(--text-dim);justify-content:space-between;margin-top:4px;font-size:11px;display:flex}.duration-buttons,.ref-buttons{flex-wrap:wrap;gap:8px;display:flex}.theme-cards{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;display:grid}.theme-card{text-align:left;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);font:inherit;cursor:pointer;flex-direction:column;gap:6px;padding:8px;transition:all .15s;display:flex}.theme-card:hover{background:var(--bg-hover)}.theme-card:active{transform:scale(.98)}.theme-card.active{border-color:var(--accent);background:#1a3a38}.theme-thumb{background:var(--bg);border:1px solid var(--border);border-radius:8px;display:block;overflow:hidden}.theme-thumb .tp-svg{width:100%;height:auto;display:block}.theme-card-head{justify-content:space-between;align-items:center;gap:6px;display:flex}.theme-name{font-size:14px;font-weight:600}.theme-check{color:var(--accent);opacity:0;font-size:13px}.theme-card.active .theme-check{opacity:1}.theme-card-desc{color:var(--text-dim);word-break:keep-all;font-size:11px;line-height:1.45}.tp-note{animation:none}.tp-fall .tp-note{animation-name:tp-fall}.tp-n1{animation-delay:-.3s}.tp-n2{animation-delay:-1.5s}.tp-n3{animation-delay:-.9s}.tp-n4{animation-delay:-2.1s}@keyframes tp-fall{0%{opacity:0;transform:translateY(-6px)}12%{opacity:1}88%{opacity:1}to{opacity:0;transform:translateY(62px)}}.tp-scroll .tp-note{animation-name:tp-scroll}.tp-s1{animation-delay:-.3s}.tp-s2{animation-delay:-1.5s}.tp-s3{animation-delay:-.9s}.tp-s4{animation-delay:-2.1s}@keyframes tp-scroll{0%{opacity:0;transform:translate(-6px)}12%{opacity:1}88%{opacity:1}to{opacity:0;transform:translate(86px)}}.tp-in-tl{animation-name:tp-in-tl;animation-delay:-.3s}.tp-in-tr{animation-name:tp-in-tr;animation-delay:-1.5s}.tp-in-bl{animation-name:tp-in-bl;animation-delay:-.9s}.tp-in-br{animation-name:tp-in-br;animation-delay:-2.1s}@keyframes tp-in-tl{0%{opacity:0;transform:translate(-30px,-22px)}15%,88%{opacity:1}to{opacity:0;transform:translate(0)}}@keyframes tp-in-tr{0%{opacity:0;transform:translate(30px,-22px)}15%,88%{opacity:1}to{opacity:0;transform:translate(0)}}@keyframes tp-in-bl{0%{opacity:0;transform:translate(-30px,22px)}15%,88%{opacity:1}to{opacity:0;transform:translate(0)}}@keyframes tp-in-br{0%{opacity:0;transform:translate(30px,22px)}15%,88%{opacity:1}to{opacity:0;transform:translate(0)}}@media (prefers-reduced-motion:reduce){.tp-note,.tp-fall .tp-note,.tp-scroll .tp-note,.tp-in-tl,.tp-in-tr,.tp-in-bl,.tp-in-br{animation:none}.tp-fall .tp-note{transform:translateY(34px)}.tp-scroll .tp-note{transform:translate(46px)}.tp-in-tl{transform:translate(-15px,-11px)}.tp-in-tr{transform:translate(15px,-11px)}.tp-in-bl{transform:translate(-15px,11px)}.tp-in-br{transform:translate(15px,11px)}}.game-screen{background:var(--bg);flex-direction:column;width:100%;height:100dvh;display:flex;position:relative}.hud{padding:calc(8px + env(safe-area-inset-top,0px)) calc(60px + env(safe-area-inset-right,0px)) 8px calc(12px + env(safe-area-inset-left,0px));border-bottom:1px solid var(--border);z-index:10;background:#0a0a1ae6;justify-content:space-around;display:flex}.hud-item{text-align:center}.hud-label{color:var(--text-dim);text-transform:uppercase;font-size:12px;display:block}.hud-value{font-variant-numeric:tabular-nums;font-size:18px;font-weight:700;display:block}.hud-combo .hud-value{color:var(--gold)}.hud-grade .hud-value{color:var(--accent)}.game-area{flex:1;position:relative;overflow:hidden}#game-canvas{width:100%;height:100%;position:absolute;top:0;left:0}.judgment-display{text-shadow:0 0 20px;pointer-events:none;z-index:5;font-size:36px;font-weight:900;position:absolute;top:30%;left:50%;transform:translate(-50%)}.countdown-display{color:var(--accent);z-index:20;background:#0a0a1acc;justify-content:center;align-items:center;font-size:100px;font-weight:900;animation:.5s ease-out countPulse;display:flex;position:absolute;inset:0}.countdown-display.go{color:var(--gold)}@keyframes countPulse{0%{opacity:0;transform:scale(1.5)}to{opacity:1;transform:scale(1)}}#expected-input{color:var(--text-dim);letter-spacing:2px;z-index:5;pointer-events:none;font-size:16px;font-weight:700;position:absolute;bottom:10px;left:50%;transform:translate(-50%)}.touch-zones{padding:4px;padding-bottom:calc(4px + var(--safe-bottom));z-index:10;background:#0a0a1af2;flex-direction:column;gap:4px;display:flex}.tz-row{grid-template-columns:1fr .8fr 1fr;gap:4px;display:grid}.touch-zone{border-radius:var(--radius);border:2px solid var(--border);background:var(--bg-card);cursor:pointer;min-height:44px;color:inherit;font-size:20px;font-weight:700;font:inherit;text-align:inherit;flex-direction:column;justify-content:center;align-items:center;padding:10px 6px;transition:all .1s;display:flex}.touch-zone:focus-visible{outline:3px solid var(--gold);outline-offset:2px}.touch-zone:active{border-color:var(--accent);background:#1a3a38;transform:scale(.95)}.touch-zone small{color:var(--text-dim);font-size:12px;font-weight:400}@media (pointer:fine){.touch-zones{gap:3px;width:100%;max-width:520px;margin:0 auto}.tz-row{gap:3px}.touch-zone{padding:4px 6px;font-size:15px}.touch-zone small{font-size:12px}}.tz-left,.tz-left-foot{color:#4ecdc4}.tz-right,.tz-right-foot{color:#ff6b6b}.tz-both,.tz-both-feet{color:#ffd93d;border-color:#ffd93d59}.touch-zone.tz-offblock{opacity:.22;border-color:var(--border);filter:grayscale(.8)}.touch-zone.tz-implied{background:#ffd93d14;border-color:#ffd93d80}.btn-pause{top:calc(8px + env(safe-area-inset-top,0px));right:calc(8px + env(safe-area-inset-right,0px));width:44px;height:44px;color:var(--text);cursor:pointer;z-index:15;background:#ffffff1a;border:none;border-radius:50%;justify-content:center;align-items:center;font-size:16px;display:flex;position:absolute}.pause-overlay{z-index:30;background:#0a0a1ae6;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.pause-content{text-align:center;flex-direction:column;gap:16px;display:flex}.pause-content h2:focus{outline:none}.pause-content h2{letter-spacing:4px;font-size:36px}.pause-audio-error{color:#ffd93d;max-width:320px;margin:0;line-height:1.5}.session-error-screen{text-align:center;justify-content:center;align-items:center}.session-error-card{flex-direction:column;gap:16px;max-width:360px;display:flex}.session-error-card h2:focus{outline:none}.results-screen{padding-bottom:calc(20px + var(--safe-bottom));justify-content:flex-start;gap:20px;overflow-y:auto}.result-grade{text-align:center;animation:.5s ease-out gradeIn}.grade-letter{text-shadow:0 0 40px;font-size:100px;font-weight:900;line-height:1}@keyframes gradeIn{0%{opacity:0;transform:scale(2)}to{opacity:1;transform:scale(1)}}.result-score{text-align:center}.score-label{color:var(--text-dim);font-size:12px;display:block}.score-value{font-variant-numeric:tabular-nums;font-size:32px;font-weight:800}.result-stats-row{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.stat-box{text-align:center;background:var(--bg-card);border-radius:var(--radius);padding:12px 4px}.stat-val{font-size:20px;font-weight:700;display:block}.stat-label{color:var(--text-dim);margin-top:2px;font-size:12px;display:block}.result-bars{flex-direction:column;gap:6px;display:flex}.result-bar{grid-template-columns:90px 1fr 80px;align-items:center;gap:8px;font-size:13px;display:grid}.rb-label{text-align:right;font-weight:700}.rb-track{background:var(--border);border-radius:4px;height:8px;overflow:hidden}.rb-fill{border-radius:4px;height:100%;transition:width .5s ease-out}.rb-value{font-variant-numeric:tabular-nums;color:var(--text-dim);font-size:12px}.result-hint{text-align:center;color:var(--text-dim);font-size:12px;font-style:italic}.result-actions{gap:12px;display:flex}.result-actions .btn{flex:1;padding:14px;font-size:16px}.player-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px}.player-level-row{align-items:center;gap:10px;margin-bottom:8px;display:flex}.level-badge{background:linear-gradient(135deg, var(--brand), var(--brand2));color:#000;border-radius:20px;padding:3px 10px;font-size:14px;font-weight:800}.player-stats{color:var(--text-dim);font-size:12px}.xp-bar-track{background:var(--border);border-radius:4px;height:8px;overflow:hidden}.xp-bar-fill{background:linear-gradient(90deg, var(--brand), var(--brand2));border-radius:4px;height:100%;transition:width .4s ease-out}.xp-label{color:var(--text-dim);text-align:right;margin-top:4px;font-size:11px}.tier-buttons{gap:8px;display:flex}.tier-btn{flex-direction:column;flex:1;gap:2px;padding:10px 8px}.tier-btn-name{font-size:14px;font-weight:700}.tier-btn-sub{opacity:.7;font-size:11px}.btn-option.tier-btn.active .tier-btn-sub{opacity:.8}.mode-desc{color:var(--text-dim);margin-top:6px;font-size:12px;font-style:italic}.level-up-banner{text-align:center;color:#000;border-radius:var(--radius);letter-spacing:2px;background:linear-gradient(135deg,#ffd93d,#ff6b6b);padding:10px;font-size:20px;font-weight:900;animation:.4s ease-out bannerIn}.new-high-banner{text-align:center;background:linear-gradient(135deg, var(--accent), #6bf);color:#000;border-radius:var(--radius);padding:8px;font-size:16px;font-weight:800;animation:.4s ease-out bannerIn}@keyframes bannerIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.xp-earned{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);justify-content:center;align-items:center;gap:12px;padding:10px;display:flex}.xp-earned-label{color:var(--text-dim);font-size:13px}.xp-earned-value{color:var(--gold);font-size:24px;font-weight:800}.new-badges{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:12px}.badge-title{color:var(--gold);margin-bottom:8px;font-size:13px;font-weight:700}.badge-list{flex-wrap:wrap;gap:8px;display:flex}.badge-item{border:1px solid var(--gold);background:#ffd93d1a;border-radius:20px;align-items:center;gap:6px;padding:4px 10px;font-size:13px;display:flex}.badge-item .badge-icon{font-size:16px}.leaderboard-screen{padding-bottom:calc(20px + var(--safe-bottom));gap:20px;overflow-y:auto}.lb-section{flex-direction:column;gap:8px;display:flex}.lb-section-title{color:var(--text-dim);text-transform:uppercase;letter-spacing:1px;font-size:14px;font-weight:700}.lb-list{flex-direction:column;gap:6px;display:flex}.lb-row{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);grid-template-columns:28px 1fr 40px 1fr 72px;align-items:center;gap:8px;padding:10px 12px;font-size:13px;display:grid}.lb-row.lb-top{border-color:var(--gold);background:#ffd93d0f}.lb-rank{color:var(--text-dim);text-align:center;font-weight:700}.lb-row.lb-top .lb-rank{color:var(--gold)}.lb-score{font-variant-numeric:tabular-nums;font-weight:700}.lb-grade{text-align:center;font-weight:700}.lb-meta{color:var(--text-dim);font-size:11px}.lb-date{color:var(--text-dim);text-align:right;font-size:11px}.lb-empty{text-align:center;color:var(--text-dim);padding:24px;font-size:14px}.streak-badge{color:#000;white-space:nowrap;background:linear-gradient(135deg,#ff6b35,#ff9f45);border-radius:20px;padding:3px 8px;font-size:12px;font-weight:700}.player-level-row{flex-wrap:wrap;gap:6px}.phase-bar{padding:3px calc(12px + env(safe-area-inset-right,0px)) 3px calc(12px + env(safe-area-inset-left,0px));border-bottom:1px solid var(--border);letter-spacing:1px;z-index:10;background:#0a0a1acc;justify-content:space-between;align-items:center;font-size:11px;font-weight:700;display:flex}#phase-label{text-transform:uppercase;font-size:12px}.phase-warmup{color:#6bf}.phase-core{color:#4ecdc4}.phase-climax{color:#ff6b6b}#exercise-label{color:var(--text-dim);font-size:11px;font-weight:400}.history-screen{flex-direction:column;gap:0;width:100%;max-width:480px;margin:0 auto;padding:0;display:flex;overflow:hidden}.history-screen .setup-header{flex-shrink:0;padding:16px 20px 8px}.tab-bar{border-bottom:1px solid var(--border);flex-shrink:0;gap:0;padding:0 12px;display:flex}.tab-btn{color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;margin-bottom:-1px;padding:10px 8px;font-size:13px;font-weight:600;transition:all .15s}.tab-btn.active{color:var(--accent);border-bottom-color:var(--accent)}.tab-btn:hover{color:var(--text)}.tab-panel{padding:16px 20px;padding-bottom:calc(16px + var(--safe-bottom));flex:1;display:none;overflow-y:auto}.tab-panel.active{display:block}.chart-container{text-align:center}#history-chart{border-radius:var(--radius);background:var(--bg-card);max-width:100%;display:block}.chart-hint{color:var(--text-dim);margin-top:8px;font-size:11px;font-style:italic}.badges-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;display:grid}.badge-cell{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);text-align:center;flex-direction:column;align-items:center;gap:4px;padding:12px 8px;display:flex}.badge-cell.badge-earned{border-color:var(--gold);background:#ffd93d0f}.badge-cell.badge-locked{opacity:.4;filter:grayscale()}.badge-cell .badge-icon{font-size:28px}.badge-cell .badge-name{font-size:12px;font-weight:700}.badge-cell .badge-desc{color:var(--text-dim);font-size:12px}.orientation-overlay{z-index:9999;background:var(--bg,#0a0a1a);padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px);text-align:center;justify-content:center;align-items:center;display:none;position:fixed;inset:0}.orientation-overlay.visible{display:flex}.orientation-overlay__inner{max-width:320px;padding:24px}.orientation-overlay__icon{font-size:56px;animation:2s ease-in-out infinite orientation-rotate}@keyframes orientation-rotate{0%,60%,to{transform:rotate(0)}30%{transform:rotate(-90deg)}}.orientation-overlay__title{color:var(--text,#fff);margin-top:16px;font-size:18px;font-weight:800}.orientation-overlay__sub{color:var(--text-dim,#9aa);margin-top:8px;font-size:13px}.orientation-overlay__dismiss{border:1px solid var(--border,#333);border-radius:var(--radius,12px);color:var(--text-dim,#9aa);background:0 0;margin-top:20px;padding:10px 20px;font-size:13px}.user-badge{top:calc(env(safe-area-inset-top,0px) + 10px);right:calc(env(safe-area-inset-right,0px) + 12px);z-index:1000;position:fixed}#app:has(.game-screen)~.user-badge{display:none}.user-badge-avatar{border:1px solid var(--accent);background:var(--bg-card);width:36px;height:36px;color:var(--accent);cursor:pointer;-webkit-tap-highlight-color:transparent;border-radius:50%;justify-content:center;align-items:center;font-size:15px;font-weight:700;display:flex}.user-badge-menu{background:var(--bg-card);border:1px solid var(--bg-hover);border-radius:10px;min-width:160px;padding:10px;position:absolute;top:44px;right:0;box-shadow:0 8px 24px #0006}.user-badge-name{color:var(--text);word-break:break-all;border-bottom:1px solid var(--bg-hover);margin-bottom:8px;padding:4px 6px 8px;font-size:13px}.user-badge-logout{background:var(--bg-hover);width:100%;color:var(--text);cursor:pointer;border:none;border-radius:8px;padding:8px;font-size:13px}.user-badge-logout:hover{background:var(--accent2);color:#fff}.user-badge-login{border:1px solid var(--accent);background:var(--bg-card);color:var(--accent);border-radius:999px;padding:7px 14px;font-size:13px;font-weight:600;text-decoration:none;display:inline-block}.daily-goal{background:var(--bg-card);border:1px solid var(--border);color:var(--text-dim);white-space:nowrap;border-radius:20px;padding:3px 8px;font-size:11px;font-weight:700}.daily-goal.done{border-color:var(--accent);color:var(--accent)}.streak-badge.urge{background:linear-gradient(135deg,#f44,#ff9f45);animation:1.6s ease-in-out infinite urgePulse}@keyframes urgePulse{0%,to{transform:scale(1)}50%{transform:scale(1.06)}}.next-unlock{color:var(--text-dim);border-top:1px dashed var(--border);margin-top:8px;padding-top:8px;font-size:12px}.next-unlock.all-done{color:var(--gold)}.tier-btn.locked,.exercise-option.locked{opacity:.45;cursor:not-allowed;filter:grayscale(.6)}.tier-btn.locked:hover{transform:none}.ex-lock{color:var(--text-dim);white-space:nowrap;font-size:12px}.unlock-banner{text-align:center;color:#000;border-radius:var(--radius);letter-spacing:1px;background:linear-gradient(135deg,gold,#ff9f45);padding:10px;font-size:18px;font-weight:900;animation:.4s ease-out bannerIn}.unlock-list{background:var(--bg-card);border-radius:var(--radius);border:1px solid #ffd70055;padding:8px 12px}.unlock-item{color:var(--gold,gold);text-align:center;padding:2px 0;font-size:13px;font-weight:600}.xp-bonus-tag{color:#000;white-space:nowrap;background:linear-gradient(135deg,#ffd93d,#ff9f45);border-radius:12px;padding:2px 8px;font-size:11px;font-weight:700}.comeback-hooks{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px}.hook-line{color:var(--text-dim);margin:4px 0;font-size:13px}.hook-line b{color:var(--text,#fff)}.exercise-next-flash{border:1px solid var(--accent);color:var(--accent);pointer-events:none;z-index:5;background:#000000a6;border-radius:24px;padding:8px 18px;font-size:16px;font-weight:800;animation:1.4s ease-in-out forwards nextFlash;position:absolute;top:18%;left:50%;transform:translate(-50%)}@keyframes nextFlash{0%{opacity:0;transform:translate(-50%)scale(.85)}15%{opacity:1;transform:translate(-50%)scale(1)}80%{opacity:1}to{opacity:0}}.touch-zone{position:relative}.touch-zone.tz-expected{background:#4ecdc438;border-color:#fff;transition:box-shadow 80ms ease-out,background 80ms ease-out,transform 80ms ease-out;transform:translateY(-2px);box-shadow:0 0 0 2px #ffffffbf,0 0 18px #4ecdc4bf,inset 0 0 12px #4ecdc480}.touch-zone.tz-expected span{color:#fff;text-shadow:0 0 10px}.touch-zone.tz-expected small{color:#ffffffd9}.touch-zone.tz-expected:after{content:"▼";color:#fff;font-size:12px;line-height:1;animation:.7s ease-in-out infinite tz-bob;position:absolute;top:-2px;left:50%;transform:translate(-50%)}.touch-zone.tz-both.tz-expected,.touch-zone.tz-both-feet.tz-expected{background:#ffd93d3d;box-shadow:0 0 0 2px #ffffffbf,0 0 18px #ffd93dcc,inset 0 0 12px #ffd93d80}@keyframes tz-bob{0%,to{transform:translate(-50%)translateY(0)}50%{transform:translate(-50%)translateY(2px)}}@media (prefers-reduced-motion:reduce){.touch-zone.tz-expected:after{animation:none}}#confetti-canvas{pointer-events:none;z-index:50;width:100vw;height:100vh;position:fixed;inset:0}.menu-eyebrow{letter-spacing:.08em;color:var(--brand2);background:#f59e0b1a;border-radius:999px;margin-bottom:12px;padding:5px 13px;font-size:12px;font-weight:600;display:inline-block}.logo-beat{vertical-align:middle;align-items:flex-end;gap:5px;height:26px;margin:0 14px;display:inline-flex}.logo-beat i{transform-origin:bottom;background:linear-gradient(180deg, var(--brand2), var(--brand));border-radius:2px;width:5px;height:100%;animation:.9s ease-in-out infinite bbBeat;transform:scaleY(.25);box-shadow:0 0 8px #fbbf2473}.logo-beat i:nth-child(2n){animation-delay:-.45s}.logo-beat i:nth-child(3){animation-delay:-.225s}@keyframes bbBeat{0%,to{transform:scaleY(.25)}50%{transform:scaleY(1)}}.logo-row{justify-content:center;align-items:center;display:flex}.tier-desc{color:var(--text-dim);margin-top:8px;font-size:12px}.tier-desc b{color:var(--brand2);font-weight:600}@media (prefers-reduced-motion:reduce){.logo-beat i{animation:none;transform:scaleY(.5)}}.bb-fx{z-index:0;pointer-events:none;position:fixed;inset:0;overflow:hidden}.screen>:not(.bb-fx){z-index:1;position:relative}.bb-fx__aurora{filter:blur(38px);background:radial-gradient(closest-side at 50% 8%,#f59e0b29,#0000 62%),radial-gradient(closest-side at 18% 42%,#fbbf2412,#0000 58%),radial-gradient(closest-side at 84% 58%,#4ecdc40f,#0000 60%);animation:14s ease-in-out infinite alternate bbAurora;position:absolute;inset:-20%}@keyframes bbAurora{0%{opacity:.75;transform:translate(-2%)scale(1)}to{opacity:1;transform:translate(2%,2%)scale(1.1)}}.bb-fx__eq{opacity:.12;justify-content:center;align-items:flex-end;gap:6px;height:96px;display:flex;position:absolute;bottom:-4px;left:0;right:0;-webkit-mask-image:linear-gradient(#0000,#000 55%);mask-image:linear-gradient(#0000,#000 55%)}.bb-fx__eq i{transform-origin:bottom;background:linear-gradient(180deg, var(--brand2), var(--brand) 70%);border-radius:4px 4px 0 0;flex:0 0 12px;height:100%;animation:1.8s ease-in-out infinite bbEq;transform:scaleY(.2)}.bb-fx__eq i:nth-child(odd){animation-delay:-.9s}.bb-fx__eq i:nth-child(3n){animation-delay:-.45s}.bb-fx__eq i:nth-child(4n){animation-delay:-1.35s}@keyframes bbEq{0%,to{transform:scaleY(.18)}50%{transform:scaleY(.85)}}.bb-fx__sonar{position:absolute;top:17%;left:50%}.bb-fx__sonar i{opacity:0;border:1px solid #fbbf2459;border-radius:50%;width:170px;height:170px;margin:-85px 0 0 -85px;animation:4.6s ease-out infinite bbSonar;position:absolute;top:50%;left:50%}.bb-fx__sonar i:nth-child(2){animation-delay:2.3s}@keyframes bbSonar{0%{opacity:.55;transform:scale(.35)}to{opacity:0;transform:scale(2.6)}}.bb-fx__dots i{opacity:0;background:#fbbf2480;border-radius:50%;width:5px;height:5px;animation:11s ease-in-out infinite bbDot;position:absolute;box-shadow:0 0 10px #fbbf24b3}.bb-fx__dots i:first-child{animation-delay:0s;top:20%;left:10%}.bb-fx__dots i:nth-child(2){width:4px;height:4px;animation-delay:-2.2s;top:64%;left:26%}.bb-fx__dots i:nth-child(3){animation-delay:-5s;top:34%;left:48%}.bb-fx__dots i:nth-child(4){width:4px;height:4px;animation-delay:-7.4s;top:72%;left:66%}.bb-fx__dots i:nth-child(5){animation-delay:-3.6s;top:28%;left:82%}.bb-fx__dots i:nth-child(6){width:4px;height:4px;animation-delay:-8.8s;top:56%;left:90%}@keyframes bbDot{0%,to{opacity:0;transform:translateY(8px)}20%{opacity:.85}50%{opacity:.3;transform:translateY(-24px)}80%{opacity:.7}}.bb-fx--quiet .bb-fx__aurora{opacity:.6}.player-card,.menu-buttons .btn-large,.result-stats-row .stat-box,.xp-earned,.comeback-hooks,.new-badges,.unlock-list,.result-bars{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#1e293b8c;border:1px solid #94a3b824;box-shadow:inset 0 1px #ffffff0d,0 10px 30px #02061773}.menu-buttons .btn-primary.btn-large{background:linear-gradient(135deg, var(--brand), var(--brand2));border-color:#0000;box-shadow:0 10px 30px #f59e0b47}.logo-icon{border-radius:22px;animation:5s ease-in-out infinite bbLogoBreathe;box-shadow:0 0 34px #f59e0b59}@keyframes bbLogoBreathe{0%,to{box-shadow:0 0 22px #f59e0b40}50%{box-shadow:0 0 44px #fbbf2480}}.logo-title{letter-spacing:3px}.btn-primary{position:relative;overflow:hidden}.btn-primary:after{content:"";background:linear-gradient(90deg,#0000,#ffffff57,#0000);width:36%;animation:4.2s ease-in-out infinite bbShine;position:absolute;top:-20%;bottom:-20%;left:-60%;transform:skew(-22deg)}@keyframes bbShine{0%,72%{left:-60%}to{left:130%}}.xp-bar-track,.xp-bar-fill{position:relative;overflow:hidden}.xp-bar-fill:after{content:"";background:linear-gradient(90deg,#0000,#ffffff59,#0000);animation:2.8s ease-in-out infinite bbShimmer;position:absolute;inset:0;transform:translate(-100%)}@keyframes bbShimmer{0%,55%{transform:translate(-100%)}to{transform:translate(100%)}}.menu-screen>:not(.bb-fx){opacity:0;animation:.55s cubic-bezier(.2,.7,.3,1) forwards bbRise}.menu-screen>:nth-child(2){animation-delay:50ms}.menu-screen>:nth-child(3){animation-delay:.14s}.menu-screen>:nth-child(4){animation-delay:.23s}.menu-screen>:nth-child(5){animation-delay:.32s}@keyframes bbRise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.bb-fx__aurora,.bb-fx__eq i,.bb-fx__sonar i,.bb-fx__dots i,.logo-icon,.btn-primary:after,.xp-bar-fill:after,.menu-screen>:not(.bb-fx){animation:none!important}.menu-screen>:not(.bb-fx){opacity:1}.bb-fx__sonar i{opacity:0}.bb-fx__eq i{transform:scaleY(.4)}}.assess-chip{letter-spacing:.02em;color:var(--accent);vertical-align:middle;background:#4ecdc426;border:1px solid #4ecdc466;border-radius:999px;margin-left:8px;padding:2px 8px;font-size:.62rem;font-weight:700;display:inline-block}.assess-chip.due{color:var(--gold);background:#fbbf2426;border-color:#fbbf2473}.assess-intro-screen{padding:20px;padding-bottom:calc(20px + var(--safe-bottom));flex-direction:column;gap:16px;max-width:560px;margin:0 auto;display:flex}.assess-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:14px;padding:18px;display:flex}.assess-desc{color:var(--text);font-size:.9rem;line-height:1.6}.assess-blocks{flex-direction:column;gap:8px;display:flex}.assess-block-row{border:1px solid var(--border);background:#ffffff08;border-radius:10px;align-items:center;gap:12px;padding:10px 12px;display:flex}.assess-block-num{background:var(--accent);color:#062825;border-radius:50%;flex:none;justify-content:center;align-items:center;width:26px;height:26px;font-size:.8rem;font-weight:800;display:flex}.assess-block-info{font-size:.85rem;line-height:1.4}.assess-block-info small{color:var(--text-dim);font-size:.72rem;display:block}.assess-block-rest{text-align:center;color:var(--text-dim);letter-spacing:.06em;font-size:.72rem}.assess-tips{color:var(--text-dim);margin:0;padding-left:18px;font-size:.78rem;line-height:1.7}.assess-last{color:var(--text-dim);border-top:1px dashed var(--border);padding-top:10px;font-size:.8rem}.assess-hud .assess-hud-title{flex:1;min-width:0}.assess-hud .assess-hud-title .hud-label{color:var(--text);font-size:.8rem;font-weight:700}.assess-hud .hud-guide{color:var(--text-dim);white-space:normal;font-size:.62rem;line-height:1.3;display:block}.assess-rest-count{color:var(--accent);font-size:3.4rem;font-weight:800;line-height:1.1}.assess-rest-next{color:var(--text-dim);font-size:.85rem;line-height:1.5}.assess-band-label{letter-spacing:.02em;text-shadow:0 0 28px;font-size:44px;font-weight:900}.assess-block-results .lb-row,#tab-assess .lb-row{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.assess-block-results .lb-meta,#tab-assess .lb-meta{flex:auto;font-size:12px;line-height:1.5}#tab-assess .lb-date{margin-left:auto}.assess-results .score-value small{color:var(--text-dim);margin-left:2px;font-size:1rem}.assess-delta{text-align:center;background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:10px 14px;font-size:.9rem}.assess-delta.better{color:#0f8;border-color:#00ff8859}.assess-delta.worse{color:var(--gold);border-color:#fbbf2459}.assess-block-results{margin-top:4px}.practice-screen,.ready-screen{padding:24px 16px calc(24px + var(--safe-bottom));text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:14px;display:flex}.practice-screen .setup-header{align-self:stretch}.ready-title{margin:0;font-size:1.5rem}.practice-lead,.ready-lead{color:var(--text-dim);max-width:460px;margin:0;line-height:1.6}.practice-lead b,.ready-lead b{color:var(--text)}.key-map-grid{justify-content:center;gap:10px;display:grid}.km-cell.km-both{border-color:#ffd93d59}.km-cell.km-both .km-key{color:#ffd93d}.km-cell{background:var(--bg-card);border:2px solid var(--border);border-radius:var(--radius);cursor:pointer;color:inherit;font:inherit;text-align:center;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;flex-direction:column;align-items:center;gap:2px;padding:14px 10px;transition:border-color .15s,background .15s,transform .1s;display:flex}.km-cell:focus-visible{outline:3px solid var(--gold);outline-offset:2px}.km-key{color:var(--text);font-size:1.75rem;font-weight:800;line-height:1}.km-limb{color:var(--text);font-size:.95rem}.km-finger{color:var(--text-dim);font-size:.72rem}.km-cell.km-active{border-color:var(--accent);background:var(--bg-hover);animation:.9s ease-in-out infinite km-pulse}.km-cell.km-done{border-color:var(--accent);background:#4ecdc424}.km-cell.km-done .km-key{color:var(--accent)}@keyframes km-pulse{0%,to{transform:scale(1);box-shadow:0 0 #4ecdc480}50%{transform:scale(1.04);box-shadow:0 0 0 10px #4ecdc400}}@media (prefers-reduced-motion:reduce){.km-cell.km-active{animation:none}}.practice-prompt,.ready-status{min-height:1.6em;font-size:1.15rem}.practice-key{background:var(--accent);color:#04211f;border-radius:6px;min-width:1.8em;padding:1px 8px;font-weight:800;display:inline-block}.practice-progress,.ready-timer{color:var(--text-dim);min-height:1.2em;font-size:.9rem}.lb-divider{border:1px dashed var(--border);color:var(--text-dim);text-align:center;background:#94a3b812;border-radius:8px;margin:14px 2px 8px;padding:7px 10px;font-size:11px;line-height:1.5}.lb-row--legacy{opacity:.6;border-left:2px solid #94a3b859}.lb-ver{color:var(--text-dim);vertical-align:middle;background:#94a3b82e;border-radius:4px;margin-left:5px;padding:1px 5px;font-size:12px;font-weight:600;display:inline-block}.tier-stage{border-top:1px solid var(--border);margin-top:10px;padding-top:10px}.tier-stage-head{justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:6px;display:flex}.tier-stage-label{color:var(--text-dim);letter-spacing:.04em;font-size:.72rem}.tier-stage-value{color:var(--brand2);font-size:.82rem;font-weight:700}.tier-stage-track{background:#94a3b833;border-radius:999px;height:6px;overflow:hidden}.tier-stage-fill{background:linear-gradient(90deg, var(--accent), var(--brand));border-radius:999px;height:100%;transition:width .6s}.recommend-card{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);text-align:left;background:#1e293bb8;border:1px solid #f59e0b59;border-radius:14px;margin:14px 0 4px;padding:14px 16px}.recommend-card.recovery{border-color:#4ecdc466}.recommend-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;display:flex}.recommend-eyebrow{letter-spacing:.08em;color:var(--brand2);font-size:.7rem;font-weight:700}.recommend-setting{color:var(--text);font-size:.82rem;font-weight:600}.recommend-list{color:var(--text);margin-top:6px;font-size:.9rem;line-height:1.45}.recommend-reason{color:var(--text-dim);margin:6px 0 10px;font-size:.78rem;line-height:1.5}.recommend-go{width:100%}.weak-report{border:1px solid var(--border);background:#0f172a80;border-radius:12px;margin:14px 0;padding:12px}.weak-title{color:var(--text-dim);letter-spacing:.03em;margin-bottom:8px;font-size:.78rem}.weak-row{gap:6px;margin-bottom:6px;display:flex}.weak-cell{text-align:center;background:#94a3b81a;border-radius:8px;flex-direction:column;flex:1;gap:2px;min-width:0;padding:6px 4px;display:flex}.weak-cell.good{background:#00ff8824}.weak-cell.mid{background:#ffaa3324}.weak-cell.low{background:#ff6b6b29}.weak-cell.empty{opacity:.45}.weak-limb{color:var(--text-dim);font-size:.68rem}.weak-val{color:var(--text);font-size:.92rem;font-weight:700}.weak-async{color:var(--text-dim);white-space:nowrap;font-size:.6rem}.weak-deltas{color:var(--brand2);text-align:center;margin-top:8px;font-size:.76rem}.weak-hint{color:var(--text-dim);text-align:center;margin:6px 0 0;font-size:.66rem}.intro-screen{padding:24px 16px calc(24px + var(--safe-bottom));justify-content:center;align-items:center;display:flex}.intro-card{-webkit-backdrop-filter:blur(14px);text-align:center;background:#0f172ab8;border:1px solid #94a3b838;border-radius:20px;width:100%;max-width:460px;padding:28px 22px 22px;position:relative}.intro-count{color:var(--brand2);letter-spacing:.08em;margin-bottom:8px;font-size:.8rem}.intro-title{word-break:keep-all;outline:none;margin:0 0 14px;font-size:1.35rem;line-height:1.35}.intro-body{color:var(--text-dim);word-break:keep-all;min-height:190px;line-height:1.7}.intro-body p{margin:0 0 10px}.intro-body b{color:var(--text)}.intro-note{opacity:.85;font-size:.88rem}.intro-list{text-align:left;gap:10px;margin:0 0 12px;padding:0;list-style:none;display:grid}.intro-list li{background:#94a3b814;border-radius:12px;flex-wrap:wrap;align-items:baseline;gap:4px 10px;padding:10px 12px;display:flex}.intro-dots{justify-content:center;gap:8px;margin:6px 0 16px;display:flex}.intro-dot{background:#94a3b859;border-radius:50%;width:8px;height:8px}.intro-dot.on{background:var(--brand2)}.intro-actions{gap:10px;display:grid}.intro-actions .btn{width:100%}.tempo-drift-note{color:var(--text-dim);text-align:center;margin:4px 0 12px;font-size:.88rem}.screen>:not(.bb-fx){flex-shrink:0}.setup-screen>.btn-start{z-index:2;position:sticky}.btn,.btn-back,.btn-option,.exercise-option{min-height:44px}.btn-back,.btn-pause{min-width:44px}button:focus-visible,a:focus-visible,input:focus-visible,.exercise-option:focus-within{outline:2px solid var(--brand2);outline-offset:3px}[data-practice-finish][hidden]{display:none}.gaze-screen{text-align:center;justify-content:flex-start;gap:16px;padding:72px 20px 28px;overflow-y:auto}.gaze-screen>*{flex-shrink:0}.gaze-screen .setup-header{width:100%}.gaze-screen h2{font-size:clamp(18px,4.5vw,26px)}.gaze-screen p{max-width:720px;line-height:1.6}.gaze-kicker{color:var(--accent)}.gaze-choices{border:0;justify-content:center;gap:12px;padding-top:12px;display:flex}.gaze-choices legend{margin:auto}.gaze-screen .btn-primary:hover{background:linear-gradient(135deg, var(--brand), var(--brand2))}.gaze-choices [aria-pressed=true]:before{content:"✓ "}.gaze-order{font-weight:600}.gaze-field{border:1px solid var(--border);touch-action:manipulation;-webkit-user-select:none;user-select:none;background:#101c31;border-radius:16px;width:100%;max-width:720px;height:230px;margin-inline:auto;position:relative}.gaze-staff{background:repeating-linear-gradient(#0000 0 15px,#69829155 15px 16px);height:64px;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}.gaze-rail{position:absolute;inset:35px 32px}.gaze-checkpoint{width:0;position:absolute;top:0;bottom:0}.gaze-line{background:#70859d88;width:2px;position:absolute;top:0;bottom:0}.gaze-target{color:#fff;cursor:pointer;z-index:2;background:#172b43;border:2px solid #9fb3c8;border-radius:50%;width:52px;height:52px;font-family:inherit;font-size:20px;font-weight:700;position:absolute;top:50%;left:0;transform:translate(-50%,-50%)}.gaze-target:focus-visible{outline-offset:4px;outline:3px solid #fff}.gaze-target:disabled{cursor:default}.gaze-current .gaze-target{border-color:#ffd34f;box-shadow:0 0 0 5px #ffd34f33}.gaze-current .gaze-line{background:#ffd34f}.gaze-hit .gaze-target{background:#125b52;border-color:#63dcc7}.gaze-missed .gaze-target{color:#f4abab;border-style:dashed}.gaze-target-label{white-space:nowrap;font-size:13px;position:absolute;top:calc(50% + 36px);left:0;transform:translate(-50%)}.gaze-origin{color:#a9bacd;font-size:13px;position:absolute;top:-24px;right:0;transform:translate(50%)}.gaze-note{color:#072e29;pointer-events:none;z-index:3;background:#63dcc7;border-radius:50%;place-items:center;width:28px;height:28px;font-weight:700;display:grid;position:absolute;top:50%;left:100%;transform:translate(-50%,-50%);box-shadow:0 0 12px #63dcc799}.gaze-note-ready{box-shadow:none;background:#ddd}.gaze-cue{color:#ffd34f;min-height:30px;font-weight:600}.gaze-feedback{min-height:52px}.gaze-run-header{justify-content:space-between;align-items:center;gap:12px;width:100%;max-width:720px;display:flex}.gaze-pause{z-index:120;background:#101522f5;flex-direction:column;justify-content:center;align-items:center;gap:18px;padding:24px;display:flex;position:fixed;inset:0}.gaze-pause[hidden]{display:none}.gaze-results{text-align:left;background:var(--bg-card);border-radius:14px;width:100%;max-width:480px;padding:16px}.gaze-results p{justify-content:space-between;gap:10px;margin:8px 0;display:flex}@media (width<=400px){.gaze-screen{padding-inline:14px}.gaze-choices{gap:8px}}.gaze-preview{background:var(--bg-card);flex:none;padding:6px 8px}.gaze-preview-title{margin-bottom:4px;font-size:12px}.gaze-preview-items{flex-direction:row-reverse;gap:4px;display:flex}.gaze-preview-item{border:1px solid var(--border);border-radius:6px;flex:1;min-width:0;padding:5px}.gaze-preview-item strong,.gaze-preview-item span{font-size:12px;display:block}.gaze-preview-item.current{border:2px solid var(--gold);padding:4px}.gaze-preview-item.done{opacity:.65}.gaze-mapping{flex-flow:row-reverse wrap;gap:8px;display:flex}.gaze-mapping label{flex:1;min-width:100px}.gaze-mapping select{width:100%;min-height:44px;color:var(--text);background:var(--bg-card);border:1px solid var(--border);border-radius:6px;display:block}
