:root{font-size:clamp(16px,4.3vw,21px);-webkit-text-size-adjust:100%;text-size-adjust:100%}
button,input,select{font-family:inherit;font-size:inherit}
:root{font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif;color:#f8f8fb;background:#0b0c13;color-scheme:dark}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 50% -10%,#34285d 0,#15131f 34%,#0b0c13 65%);min-height:100vh}.app{max-width:540px;margin:auto;padding:18px 18px 42px}header{display:flex;align-items:center;justify-content:space-between}.brand{display:flex;gap:10px;align-items:center}.brand strong,.brand small{display:block}.brand small{color:#9b9baa;font-size:0.781rem}.mark{width:38px;height:38px;border-radius:12px;background:linear-gradient(135deg,#a87cff,#ff6ba8);display:grid;place-items:center;font-weight:900;font-size:1.312rem}.icon,.transport button,.mode,#reset,#clearPerformance,#pitchFollow{border:0;background:#22232e;color:#eee;border-radius:13px;padding:10px 14px}.hero{padding:44px 4px 26px}.eyebrow{font-size:0.781rem;letter-spacing:.2em;color:#b99aff;font-weight:800}.hero h1{font-size:min(2.625rem,10.2vw);line-height:1.02;margin:10px 0 12px;letter-spacing:-.04em}.hero h1 em{font-style:normal;color:#d7b7ff}.hero p{color:#aaaabb;line-height:1.5;margin:0}.card{background:rgba(30,30,42,.84);border:1px solid #30303d;border-radius:22px;padding:16px;box-shadow:0 20px 50px #0005}.timeline{display:grid;grid-template-columns:2.6rem 1fr 2.6rem;gap:8px;align-items:center;margin:17px 0 8px;font-size:0.781rem;color:#9b9baa}.timeline input{width:100%}.performance-track{height:12px;background:#101018;border-radius:999px;position:relative;overflow:hidden;margin-bottom:14px}.event-mark{position:absolute;top:2px;height:8px;border-radius:999px;min-width:5px}.event-mark.bum{background:#c29bff}.event-mark.hmm{background:#7dd3fc}.event-mark.doo{background:#f9a8d4}.transport{display:flex;align-items:center;justify-content:center;gap:22px}.transport .play{width:58px;height:58px;border-radius:50%;font-size:1.25rem;background:#fff;color:#111}.perform{padding-top:24px}.mode-row{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.mode{font-weight:800;padding:12px 6px}.mode.active{background:#d9c3ff;color:#17131e}.bum-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;margin:20px auto 10px;width:min(74vw,340px);aspect-ratio:1;border:8px solid #2d243d;border-radius:50%;background:radial-gradient(circle at 40% 30%,#c29bff,#8656d8 58%,#5d369d);color:white;box-shadow:0 0 0 10px #16131d,0 25px 80px #9d65ff38;touch-action:none;user-select:none;transition:transform .08s,filter .08s}.bum-btn:active,.bum-btn.pressed{transform:scale(.96);filter:brightness(1.14)}.bum-btn span{font-size:3.438rem;font-weight:950;letter-spacing:-.05em}.bum-btn small{font-size:0.906rem;opacity:.75}.hint{text-align:center;color:#9898a9;font-size:0.906rem}.controls{margin-top:20px;display:grid;gap:14px}.controls label{display:grid;grid-template-columns:6.2rem 4rem 1fr;align-items:center;gap:8px;color:#c5c5d0;font-size:0.906rem}.controls label:nth-child(n+2){grid-template-columns:6.2rem 1fr}.controls input{width:100%}.pitch-card,.session{display:flex;align-items:center;justify-content:space-between;margin-top:16px}.pitch-card strong,.pitch-card small,.session strong,.session small{display:block}.pitch-card small,.session small{color:#8f8f9f;font-size:0.781rem}.session strong{font-size:1.625rem}.session-actions{display:flex;gap:8px}.events{margin-top:16px}.events-head strong,.events-head small{display:block}.events-head small{color:#8f8f9f;font-size:0.781rem;margin-top:2px}.event-list{display:grid;gap:8px;margin-top:12px}.empty-events{color:#77778b;font-size:0.906rem;padding:12px 0}.event-row{display:grid;grid-template-columns:10px 3.6rem 1fr 28px;align-items:center;gap:8px;background:#11111a;border-radius:12px;padding:10px}.event-row small{color:#9b9baa;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event-dot{width:8px;height:8px;border-radius:50%}.event-dot.bum{background:#c29bff}.event-dot.hmm{background:#7dd3fc}.event-dot.doo{background:#f9a8d4}.event-delete{border:0;background:#252531;color:#aaa;border-radius:8px;width:28px;height:28px}footer{text-align:center;color:#6f6f7d;font-size:0.781rem;padding:30px 0}dialog{max-width:420px;border:1px solid #444455;border-radius:22px;background:#191922;color:white;padding:24px}dialog::backdrop{background:#000a}dialog button{width:100%;border:0;border-radius:12px;background:#d9c3ff;color:#18131f;font-weight:800;padding:13px}@media(max-width:390px){.bum-btn span{font-size:3rem}.controls label,.controls label:nth-child(n+2){grid-template-columns:5.4rem 1fr}.controls label:first-child span{display:none}}
.sources h2{margin:0 0 14px;font-size:1rem}.source-grid{display:grid;gap:10px}.source{width:100%;display:flex;align-items:center;gap:14px;text-align:left;padding:14px;border-radius:16px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.055);color:inherit;cursor:pointer}.source input{display:none}.source b{display:grid;place-items:center;width:42px;height:42px;border-radius:13px;background:rgba(255,255,255,.1);font-size:1.35rem}.source span{display:flex;flex-direction:column;gap:3px}.source small,.provider-status,.track small{opacity:.68}.source.active{outline:2px solid currentColor}.provider-status{margin-top:12px;font-size:.85rem}.track{display:flex;align-items:center;gap:12px;margin-bottom:12px}.track>div:last-child{display:flex;flex-direction:column;min-width:0}.track strong,.track small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art{width:44px;height:44px;flex:0 0 44px;display:grid;place-items:center;border-radius:12px;background:rgba(255,255,255,.08);font-size:1.3rem}@media(min-width:650px){.source-grid{grid-template-columns:repeat(3,1fr)}.source{align-items:flex-start;flex-direction:column}.source b{width:48px;height:48px}}
.apple-panel{margin-top:16px;padding-top:16px;border-top:1px solid #343442}.apple-search{display:flex;gap:8px}.apple-search input{min-width:0;flex:1;border:1px solid #454558;background:#101018;color:#fff;border-radius:12px;padding:12px}.apple-search button{border:0;border-radius:12px;padding:0 14px;font-weight:800}.apple-results{display:grid;gap:8px;margin-top:12px;max-height:330px;overflow:auto}.song{display:grid;grid-template-columns:48px 1fr 24px;gap:10px;align-items:center;width:100%;border:0;border-radius:13px;background:#11111a;color:#fff;padding:8px;text-align:left}.song img,.miniart{width:48px;height:48px;border-radius:9px;object-fit:cover}.miniart{display:grid;place-items:center;background:#292938}.song span:nth-child(2){min-width:0;display:flex;flex-direction:column}.song strong,.song small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.song small{opacity:.65;margin-top:3px}.searching{padding:16px;color:#a7a7b8;font-size:0.906rem}code{font-size:.85em;color:#d7b7ff}
.event-mark.bmm,.event-dot.bmm{background:#a78bfa}.event-mark.mmm,.event-dot.mmm{background:#818cf8}.event-mark.da,.event-dot.da{background:#fca5a5}.event-mark.la,.event-dot.la{background:#fcd34d}.event-mark.na,.event-dot.na{background:#86efac}
.playhead{position:absolute;top:0;width:2px;height:12px;margin-left:-1px;border-radius:2px;background:#fff;opacity:.85;pointer-events:none}.event-mark.firing{top:0;height:12px;box-shadow:0 0 12px currentColor;filter:brightness(1.35)}
.take{display:grid;grid-template-columns:1fr 1fr 48px 48px;gap:8px;margin-top:18px}.take button{border:0;border-radius:13px;padding:12px 10px;background:#22232e;color:#eee;font-weight:800;min-height:46px}.take button:disabled{opacity:.4}
.rec-btn{display:flex;align-items:center;justify-content:center;gap:8px}.rec-btn i{width:12px;height:12px;border-radius:50%;background:#ff4d6d;flex-shrink:0}.is-recording .rec-btn{background:#ff4d6d;color:#fff}.is-recording .rec-btn i{background:#fff;border-radius:2px}
.is-replaying .replay-btn{background:#d9c3ff;color:#17131e}.take-status{margin-top:10px;font-size:0.844rem;color:#a7a7b8;min-height:16px;text-align:center}
.state-pill{position:fixed;top:max(10px,env(safe-area-inset-top));left:50%;transform:translateX(-50%);z-index:20;display:flex;align-items:center;gap:7px;border:0;border-radius:999px;padding:9px 16px;font-weight:800;font-size:0.906rem;color:#fff;background:#7c4ddb;box-shadow:0 10px 30px #0008;white-space:nowrap}.state-pill[hidden]{display:none}.state-pill i{width:9px;height:9px;border-radius:50%;background:#fff;animation:recpulse 1s infinite}.is-recording .state-pill{background:#e11d48}
.is-recording .bum-btn{border-color:#e11d48;box-shadow:0 0 0 10px #16131d,0 0 0 14px #e11d4855,0 25px 80px #e11d4838}.bum-btn.replay-hit{transform:scale(.97);filter:brightness(1.2);border-color:#d9c3ff}
.event-row.firing{outline:2px solid #d9c3ff;background:#1d1a2a}
@keyframes recpulse{50%{opacity:.25}}@media(prefers-reduced-motion:reduce){.state-pill i{animation:none}}
.hum{margin-bottom:16px}.hum-head{display:flex;align-items:center;gap:14px}.hum-copy{min-width:0;flex:1}.hum-copy strong,.hum-copy small{display:block}.hum-copy strong{font-size:1.05rem}.hum-copy small{color:#a7a7b8;font-size:0.844rem;line-height:1.4;margin-top:3px}.hum-copy b{color:#d7b7ff}
.hum-btn{flex-shrink:0;width:68px;height:68px;border-radius:50%;border:0;display:grid;place-items:center;background:linear-gradient(135deg,#a87cff,#ff6ba8);box-shadow:0 10px 30px #a87cff40;touch-action:manipulation}.is-humming .hum-btn{background:#e11d48;box-shadow:0 0 0 6px #e11d4840;animation:humring 1.2s infinite}
.mic-icon{width:16px;height:24px;border:3px solid #fff;border-radius:10px;position:relative;margin-top:-8px}.mic-icon:after{content:'';position:absolute;left:50%;top:22px;width:24px;height:12px;margin-left:-12px;border:3px solid #fff;border-top:0;border-radius:0 0 14px 14px}.mic-icon:before{content:'';position:absolute;left:50%;top:34px;width:3px;height:6px;margin-left:-1.5px;background:#fff}
.is-humming .mic-icon{width:20px;height:20px;border:0;border-radius:4px;background:#fff;margin:0}.is-humming .mic-icon:after,.is-humming .mic-icon:before{display:none}
.mic-readout{display:grid;grid-template-columns:auto auto 1fr;align-items:center;gap:10px;margin-top:14px;background:#101018;border-radius:14px;padding:10px 12px}.mic-readout b{font-size:1.375rem;min-width:2.8rem}.mic-readout span{color:#9b9baa;font-size:0.844rem;white-space:nowrap}.meter{height:6px;border-radius:999px;background:#22232e;overflow:hidden}.meter i{display:block;height:100%;width:0;background:linear-gradient(90deg,#7dd3fc,#c29bff);transition:width .06s}
.mic-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.chip{border:1px solid #3a3a4a;background:transparent;color:#c5c5d0;border-radius:999px;padding:9px 14px;font-weight:700;font-size:0.906rem}.chip[aria-pressed=true]{background:#d9c3ff;border-color:#d9c3ff;color:#17131e}.chip[aria-pressed=true]:before{content:'✓ '}
.mic-status{margin:10px 2px 0;font-size:0.844rem;color:#8f8f9f;line-height:1.4}.hero{padding:30px 4px 20px}
@keyframes humring{50%{box-shadow:0 0 0 12px #e11d4818}}@media(prefers-reduced-motion:reduce){.is-humming .hum-btn{animation:none}}
.karaoke{margin-bottom:18px;padding:14px}.karaoke[hidden]{display:none}.karaoke-head strong,.karaoke-head small{display:block}.karaoke-head small{color:#8f8f9f;font-size:0.781rem;margin-top:2px}
.lyric{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:12px 0 10px;min-height:34px;font-weight:900;font-size:1.375rem;letter-spacing:-.02em;line-height:1.2}.lyric .w{color:#6f6f80;transition:color .1s,transform .1s}.lyric .w.done{color:#a7a7b8}.lyric .w.now{color:#fff;transform:scale(1.08);text-shadow:0 0 18px #c29bff}.lyric .sep{color:#4a4a5a;font-size:1rem}
.lane{display:block;width:100%;height:4.2rem;background:#101018;border-radius:14px}
.karaoke-actions{display:flex;align-items:center;gap:8px;margin-top:12px}.practice-btn{border:0;border-radius:13px;padding:10px 14px;background:#d9c3ff;color:#17131e;font-weight:800}.practice-btn:disabled{opacity:.4}
.judge{margin-left:auto;font-weight:900;font-size:0.938rem;white-space:nowrap}.judge.perfect{color:#86efac}.judge.good{color:#fcd34d}.judge.ok{color:#fdba74}.judge.miss{color:#fb7185}.judge.score{color:#fff}.judge.pop{animation:pop .25s}
@keyframes pop{from{transform:scale(1.35)}}@media(prefers-reduced-motion:reduce){.judge.pop{animation:none}.lyric .w.now{transform:none}}
