:root{--bg: #0e0f13;--bg-elev: #171922;--bg-elev2: #1f222e;--line: #2a2e3c;--text: #eef0f6;--muted: #8b90a3;--accent: #6ea8fe;--accent-warm: #ffcf6e;--good: #58d6a0;--danger: #ff6e8a;--radius: 18px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,system-ui,sans-serif}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;height:100%;background:var(--bg);color:var(--text);overscroll-behavior:none}.stage{min-height:100%}.promo-side,.phone-notch{display:none}#app{max-width:480px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column;padding:env(safe-area-inset-top) 0 0}@media(min-width:900px){body{display:grid;place-items:center;min-height:100vh;background:radial-gradient(1200px 600px at 30% 20%,#16182300,#0a0b0e),#0a0b0e}.stage{display:flex;align-items:center;gap:56px;padding:40px;min-height:auto}.promo-side{display:block;max-width:380px;color:var(--text)}.promo-logo{font-size:34px;font-weight:700;letter-spacing:.3px}.promo-logo span{color:var(--accent)}.promo-tag{color:var(--muted);font-size:16px;margin:10px 0 26px;line-height:1.5}.promo-features{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:16px}.promo-features li{display:flex;gap:14px;align-items:flex-start}.pf-ic{width:40px;height:40px;flex:none;border-radius:12px;background:var(--bg-elev);border:1px solid var(--line);display:grid;place-items:center;color:var(--accent);font-size:18px}.promo-features b{display:block;font-size:15px;margin-bottom:2px}.promo-features small{color:var(--muted);font-size:13px;line-height:1.4}.promo-note{margin-top:26px;padding:12px 14px;border-radius:12px;background:#6ea8fe1a;border:1px solid rgba(110,168,254,.25);color:var(--accent);font-size:13px}.promo-foot{margin-top:16px;color:var(--muted);font-size:12px;letter-spacing:.5px}.phone{position:relative;width:390px;height:844px;background:var(--bg);border-radius:46px;border:10px solid #05060a;box-shadow:0 40px 90px #0009,0 0 0 2px #1a1d27;overflow:hidden;flex:none}.phone-notch{display:block;position:absolute;top:12px;left:50%;transform:translate(-50%);width:130px;height:26px;background:#05060a;border-radius:14px;z-index:50}.phone #app{max-width:none;height:100%;min-height:100%;overflow-y:auto;padding-top:44px}}.appbar{padding:18px 20px 10px;display:flex;align-items:baseline;gap:10px}.appbar h1{font-size:19px;margin:0;letter-spacing:.3px;font-weight:650}.appbar .plus{color:var(--accent)}.appbar .sub{color:var(--muted);font-size:12px}.screen{flex:1;padding:6px 20px 20px;display:none}.screen.active{display:block}.bpm-display{text-align:center;padding:22px 0 8px}.bpm-num{font-size:76px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-2px}.bpm-label{color:var(--muted);font-size:13px;letter-spacing:3px;margin-top:4px}.pulse-row{display:flex;justify-content:center;gap:12px;margin:18px 0 22px}.pulse-dot{width:16px;height:16px;border-radius:50%;background:var(--bg-elev2);border:1px solid var(--line);transition:transform .05s ease,background .05s ease,box-shadow .05s ease}.pulse-dot.on{background:var(--accent);box-shadow:0 0 16px var(--accent);transform:scale(1.35)}.pulse-dot.accent.on{background:var(--accent-warm);box-shadow:0 0 20px var(--accent-warm)}.slider-wrap{margin:8px 0 20px}input[type=range]{width:100%;-webkit-appearance:none;height:6px;border-radius:3px;background:var(--bg-elev2);outline:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:26px;height:26px;border-radius:50%;background:var(--accent);border:3px solid var(--bg);cursor:pointer}.row{display:flex;gap:10px}.row.center{justify-content:center;align-items:center}button{font-family:inherit;color:var(--text);background:var(--bg-elev);border:1px solid var(--line);border-radius:12px;padding:12px 16px;font-size:15px;cursor:pointer;transition:background .12s ease,transform .06s ease}button:active{transform:scale(.96)}button.primary{background:var(--accent);color:#06122b;border-color:transparent;font-weight:650}button.wide{flex:1}button.ghost{background:transparent}button.pill{padding:8px 14px;border-radius:20px;font-size:13px}button.pill.sel{background:var(--accent);color:#06122b;border-color:transparent;font-weight:650}.play-btn{width:76px;height:76px;border-radius:50%;font-size:30px;display:grid;place-items:center;padding:0}.stepper{display:flex;align-items:center;gap:14px}.stepper button{width:46px;height:46px;font-size:22px;padding:0;border-radius:12px}.field{margin:16px 0}.field>.k{color:var(--muted);font-size:12px;letter-spacing:1.5px;text-transform:uppercase;margin-bottom:8px}.opts{display:flex;gap:8px;flex-wrap:wrap}.card{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:18px;margin:14px 0}.result-bpm{font-size:62px;font-weight:700;text-align:center;font-variant-numeric:tabular-nums}.result-bpm.dim{color:var(--muted)}.conf-bar{height:6px;border-radius:3px;background:var(--bg-elev2);overflow:hidden;margin-top:10px}.conf-bar>i{display:block;height:100%;background:var(--good);width:0%;transition:width .3s ease}.conf-label{font-size:12px;color:var(--muted);text-align:center;margin-top:6px}.level-meter{height:8px;border-radius:4px;background:var(--bg-elev2);overflow:hidden;margin:6px 0 2px}.level-meter>i{display:block;height:100%;background:linear-gradient(90deg,var(--good),var(--accent-warm),var(--danger));width:0%}.candidates{margin-top:12px}.cand{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-top:1px solid var(--line);font-size:14px}.cand .b{font-variant-numeric:tabular-nums}.cand button{padding:6px 12px;font-size:12px}.tap-btn{width:100%;padding:34px 0;font-size:20px;font-weight:650;background:var(--bg-elev2)}.tap-hint{text-align:center;color:var(--muted);font-size:13px;margin-top:8px}.hint{color:var(--muted);font-size:13px;line-height:1.5}.status{text-align:center;color:var(--muted);font-size:13px;margin:8px 0;min-height:18px}.status.err{color:var(--danger)}.tabbar{display:flex;border-top:1px solid var(--line);background:var(--bg-elev);padding-bottom:env(safe-area-inset-bottom);position:sticky;bottom:0}.tabbar button{flex:1;background:transparent;border:none;border-radius:0;padding:12px 0 14px;color:var(--muted);font-size:12px;display:flex;flex-direction:column;align-items:center;gap:4px}.tabbar button .ic{font-size:20px}.tabbar button.active{color:var(--accent)}.plus-chip{margin-left:auto;padding:5px 10px;font-size:12px;border-radius:20px;background:var(--bg-elev2)}.plus-chip.on{background:linear-gradient(90deg,var(--accent-warm),#ff9f6e);color:#241400;border-color:transparent;font-weight:650}.card-k{color:var(--muted);font-size:12px;letter-spacing:1.5px;margin-bottom:8px;display:flex;align-items:center;gap:8px}.count-pill{background:var(--bg-elev2);color:var(--muted);padding:2px 8px;border-radius:10px;font-size:11px;letter-spacing:0}.banner{background:linear-gradient(90deg,#ffcf6e24,#ff9f6e14);border:1px solid rgba(255,207,110,.3);color:var(--accent-warm);padding:10px 12px;border-radius:12px;font-size:13px;margin-bottom:10px}.banner b{color:#fff}.saved-list,.rank-list{display:flex;flex-direction:column}.empty{color:var(--muted);font-size:13px;padding:6px 0}.saved-item,.rank-item{display:flex;align-items:center;gap:10px;padding:10px 0;border-top:1px solid var(--line);font-size:14px}.saved-item:first-child,.rank-item:first-child{border-top:none}.saved-item .b{font-variant-numeric:tabular-nums;font-weight:600}.saved-item .src{color:var(--muted)}.saved-item button{margin-left:auto;padding:6px 10px;font-size:12px}.saved-item button.del{margin-left:4px;color:var(--danger);padding:6px 9px}.rank-item .rk{width:24px;text-align:center}.rank-item .acc{font-weight:700;font-variant-numeric:tabular-nums;color:var(--good);min-width:42px}.rank-item .meta{color:var(--muted);font-size:12px}.game-card{padding-bottom:22px}.pill.locked{opacity:.6}.pill small{opacity:.7;font-size:11px}.game-panel{margin-top:8px}.game-status{text-align:center;color:var(--muted);font-size:13px;min-height:18px;margin:10px 0}.target-bpm{text-align:center;margin:10px 0 2px}.target-bpm span{font-size:54px;font-weight:700;font-variant-numeric:tabular-nums}.target-bpm small{display:block;color:var(--muted);font-size:12px;letter-spacing:2px}.ring-wrap{position:relative;width:160px;height:160px;margin:6px auto 14px}.ring{width:160px;height:160px;transform:rotate(-90deg)}.ring-bg{fill:none;stroke:var(--bg-elev2);stroke-width:8}.ring-fg{fill:none;stroke:var(--accent);stroke-width:8;stroke-linecap:round;stroke-dasharray:326.7;stroke-dashoffset:0;transition:stroke-dashoffset .1s linear}.ring-mid{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;font-size:44px;font-weight:700;font-variant-numeric:tabular-nums}.tap-big{width:100%;padding:30px 0;font-size:22px;font-weight:700;background:var(--bg-elev2);border-radius:16px;transition:transform .05s ease,background .1s ease,box-shadow .1s ease}.tap-big:disabled{opacity:.4}.tap-big.fb-perfect{background:var(--good);color:#05231a;box-shadow:0 0 24px var(--good)}.tap-big.fb-good{background:var(--accent);color:#06122b}.tap-big.fb-off{background:var(--danger);color:#2b0410}.grade{text-align:center;font-size:30px;font-weight:700;margin:6px 0 16px}.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:6px}.stat{background:var(--bg-elev2);border-radius:12px;padding:14px;text-align:center}.stat b{display:block;font-size:28px;font-variant-numeric:tabular-nums}.stat small{color:var(--muted);font-size:12px}
