:root{--bg:#f6f3ee;--surface:#fff;--ink:#1f1d1a;--muted:#7a746b;--line:#e4ded4;--accent:#3d5afe;--accent-ink:#fff;--ok:#1e8e4e;--bad:#d23b2f;--key-white:#fff;--key-black:#1f1d1a;--key-border:#bdb5a8;--key-pressed:#c9d3ff;--key-target:#ffd54a;--key-hint:#ffecb0;--key-correct:#7fd6a0;--key-wrong:#f3a49c;--radius:16px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#161513;--surface:#211f1c;--ink:#f1ede6;--muted:#a39c91;--line:#353129;--accent:#8c9eff;--accent-ink:#10131f;--ok:#5fd38d;--bad:#ff7a6e;--key-white:#f3f0ea;--key-black:#0c0b0a;--key-border:#57514a;--key-pressed:#9fb0ff;--key-target:#ffd54a;--key-hint:#a08a3c;--key-correct:#5fd38d;--key-wrong:#ff8d82;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--ink);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;margin:0;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,Roboto,sans-serif;font-size:17px;line-height:1.45}h1{letter-spacing:-.01em;margin:0 0 .3rem;font-size:1.8rem}h2{margin:0 0 .6rem;font-size:1.05rem}p{margin:.4rem 0}.muted{color:var(--muted)}.small{font-size:.88rem}.ok{color:var(--ok)}.bad{color:var(--bad)}.app{min-height:100vh;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}main{max-width:1100px;margin:0 auto;padding:20px 16px 40px}.app.training main{max-width:none;padding:12px 16px 16px}.topbar{border-bottom:1px solid var(--line);background:var(--surface);flex-wrap:wrap;align-items:center;gap:16px;padding:12px 20px;display:flex}.brand{align-items:center;gap:8px;font-size:1.1rem;font-weight:700;display:flex}.logo{background:var(--accent);width:30px;height:30px;color:var(--accent-ink);border-radius:9px;place-items:center;display:inline-grid}.topbar nav{flex:1;gap:4px;display:flex}.topbar nav button{color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:10px;padding:8px 12px}.topbar nav button.on{color:var(--ink);background:var(--bg);font-weight:600}.midi-status{border:1px solid var(--line);color:var(--muted);font:inherit;cursor:pointer;background:0 0;border-radius:999px;align-items:center;gap:8px;padding:6px 12px;font-size:.9rem;display:flex}.midi-status .dot{background:var(--muted);border-radius:50%;width:9px;height:9px}.midi-status.on{color:var(--ink)}.midi-status.on .dot{background:var(--ok)}.btn{font:inherit;border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;border-radius:12px;min-height:44px;padding:10px 18px;font-weight:600}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn.big{padding:14px 26px;font-size:1.1rem}.btn.small{min-height:36px;padding:6px 14px;font-size:.92rem}.btn.ghost{color:var(--muted);background:0 0;border-color:#0000}.btn.danger{color:var(--bad);border-color:var(--bad);background:0 0}.row{flex-wrap:wrap;gap:12px;display:flex}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:16px;padding:18px 20px}.grid2{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;display:grid}.grid2 .card{margin-bottom:0}.pill{background:var(--surface);border:1px solid var(--line);white-space:nowrap;border-radius:999px;padding:4px 10px;font-size:.85rem}.hero{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:20px;display:flex}.plan{margin:0 0 8px;padding:0;list-style:none}.plan li{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;padding:10px 0;display:flex}.plan li:last-child{border-bottom:0}.plan li.done strong{color:var(--ok)}.meter{background:var(--bg);border-radius:999px;height:10px;margin:6px 0 10px;position:relative;overflow:hidden}.meter-unlocked{background:var(--line);position:absolute;inset:0 auto 0 0}.meter-fill{background:var(--ok);z-index:1;position:absolute;inset:0 auto 0 0}.trainer{min-height:calc(100vh - 28px - env(safe-area-inset-top) - env(safe-area-inset-bottom));flex-direction:column;gap:12px;display:flex}.trainer-top{align-items:center;gap:12px;display:flex}.trainer-progress{flex:1;align-items:center;gap:10px;display:flex}.bar{background:var(--line);border-radius:999px;flex:1;height:8px;overflow:hidden}.bar-fill{background:var(--accent);height:100%;transition:width .3s}.trainer-main{flex:1;grid-template-columns:minmax(260px,440px) minmax(260px,1fr);align-items:center;gap:24px;width:100%;max-width:1100px;margin:0 auto;display:grid}@media (width<=760px){.trainer-main{grid-template-columns:1fr}}.staff-card{background:var(--surface);border:2px solid var(--line);border-radius:22px;align-items:center;min-height:180px;padding:18px 24px;transition:border-color .2s;display:flex;position:relative}.staff-card.phase-right{border-color:var(--ok)}.staff-card.phase-wrong{border-color:var(--bad)}.staff-card.phase-intro{border-color:var(--accent)}.badge{background:var(--accent);color:var(--accent-ink);border-radius:999px;padding:3px 10px;font-size:.85rem;font-weight:700;position:absolute;top:-12px;left:18px}.staff{color:var(--ink);width:100%}.staff svg{display:block}.feedback{min-height:160px}.prompt{margin:0 0 8px;font-size:1.35rem;font-weight:600}.hints{gap:8px;margin:10px 0 0;padding:0;list-style:none;display:grid}.hints li{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:10px 12px}.hint-label{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-right:6px;font-size:.75rem;font-weight:700;display:inline-block}.trainer-foot{flex-wrap:wrap;justify-content:space-between;gap:12px;width:100%;max-width:1100px;margin:0 auto;font-size:.88rem;display:flex}.keyboard-scroll{-webkit-overflow-scrolling:touch;border-radius:10px;overflow-x:auto}.keyboard{touch-action:none;width:100%;display:block}.key{cursor:pointer}.key-label{fill:var(--muted);pointer-events:none;font-size:10px;font-weight:600}.key-label-strong{fill:#1f1d1a;font-size:11px}.note-grid{grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:10px;display:grid}.note-tile{border:1px solid var(--line);text-align:center;border-top-width:4px;border-radius:12px;flex-direction:column;padding:6px 8px 8px;display:flex}.note-tile .staff{flex:1;align-items:center;margin-bottom:4px;display:flex}.note-tile-name{font-weight:700}.note-tile-status{font-size:.8rem}.note-tile.locked{opacity:.45}.note-tile.st-new{border-top-color:var(--line)}.note-tile.st-learning{border-top-color:var(--key-target)}.note-tile.st-solid{border-top-color:var(--key-correct)}.note-tile.st-mastered{border-top-color:var(--ok)}.stats{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin:16px 0;display:grid}.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px}.stat-value{font-variant-numeric:tabular-nums;font-size:2rem;font-weight:700}.segmented{border:1px solid var(--line);border-radius:12px;flex-wrap:wrap;display:inline-flex;overflow:hidden}.segmented button{font:inherit;color:var(--ink);cursor:pointer;background:0 0;border:0;padding:10px 14px}.segmented button.on{background:var(--accent);color:var(--accent-ink);font-weight:600}.check{align-items:center;gap:10px;display:flex}.check input{width:20px;height:20px}.loading{min-height:100vh;color:var(--muted);place-items:center;display:grid}.grid3{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px;display:grid}.grid3 .card{margin-bottom:0}.text-input{font:inherit;border:1px solid var(--line);background:var(--bg);width:100%;min-height:44px;color:var(--ink);-webkit-user-select:text;user-select:text;border-radius:12px;margin:10px 0 4px;padding:8px 12px}.row .text-input{flex:1;min-width:200px;margin:0}.link{font:inherit;color:var(--accent);cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.busy{color:var(--accent);font-weight:600}code{background:var(--bg);border-radius:6px;padding:1px 5px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.9em}.btn:disabled{opacity:.5;cursor:default}.chord-card{text-align:center;flex-direction:column;justify-content:center;gap:6px}.chord-big{letter-spacing:-.03em;font-size:4.5rem;font-weight:800;line-height:1.1}.song-list{margin:8px 0 0;padding:0;list-style:none}.song-item{text-align:left;width:100%;font:inherit;color:var(--ink);border:0;border-top:1px solid var(--line);cursor:pointer;background:0 0;justify-content:space-between;align-items:center;gap:12px;padding:12px 4px;display:flex}.song-list li:first-child .song-item{border-top:0}.song-meta{white-space:nowrap}textarea.chordpro{border:1px solid var(--line);background:var(--bg);width:100%;min-height:300px;color:var(--ink);-webkit-user-select:text;user-select:text;border-radius:12px;padding:12px;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.95rem;line-height:1.5}details summary{cursor:pointer;margin-top:8px}.player{height:calc(100vh - 28px - env(safe-area-inset-top) - env(safe-area-inset-bottom));flex-direction:column;gap:12px;max-width:1100px;min-height:560px;margin:0 auto;display:flex}.player-title{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.setup{margin-bottom:0}.setup-row{flex-wrap:wrap;align-items:center;gap:12px;margin:10px 0;display:flex}.setup-label{min-width:80px;font-weight:600}.stepper{align-items:center;gap:10px;display:flex}.bpm{text-align:center;font-variant-numeric:tabular-nums;min-width:84px}.check.small{font-size:.9rem}.now-bar{background:var(--surface);border:1px solid var(--line);border-radius:18px;grid-template-columns:auto auto 1fr auto;align-items:center;gap:24px;padding:12px 20px;display:grid}@media (width<=640px){.now-bar{grid-template-columns:1fr 1fr;gap:12px}}.now,.next{flex-direction:column;display:flex}.chord-now{letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:3rem;font-weight:800;line-height:1.05}.chord-next{color:var(--muted);font-size:1.8rem;font-weight:700}.beats{justify-content:center;gap:10px;display:flex}.beat-dot{background:var(--line);border-radius:50%;width:16px;height:16px;transition:transform 50ms}.beat-dot.one{outline:2px solid var(--line);outline-offset:2px}.beat-dot.on{background:var(--accent);transform:scale(1.25)}.score{text-align:right;min-width:110px;position:relative}.score strong{font-variant-numeric:tabular-nums;font-size:1.8rem}.flash{font-weight:700;animation:.9s ease-out forwards flash}@keyframes flash{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-6px)}}.g-perfect{color:var(--ok)}.g-good{color:#2f7fd1}.g-ok{color:#b7791f}.g-miss{color:var(--bad)}.result h2{font-size:1.5rem}.player>:not(.sheet){flex:none}.sheet{background:var(--surface);border:1px solid var(--line);border-radius:18px;flex:auto;min-height:110px;padding:14px 20px;overflow-y:auto}.sheet-line{flex-wrap:wrap;margin:2px 0 10px;display:flex}.sheet-comment{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:12px 0 4px;font-size:.85rem;font-weight:700}.sheet-gap{height:10px}.seg{white-space:pre;border-radius:6px;flex-direction:column;display:inline-flex}.seg-chord{color:var(--accent);min-height:1.4em;padding-right:8px;font-weight:800}.seg-text{font-size:1.1rem}.seg.current .seg-chord{background:var(--key-target);color:#1f1d1a;border-radius:6px;padding:0 6px}.seg.g-perfect .seg-chord,.seg.g-good .seg-chord,.seg.g-ok .seg-chord,.seg.g-miss .seg-chord{color:inherit}.sheet-line.chords-only .seg-text{display:none}.sheet-line.chords-only{margin-bottom:6px}.spectrum{width:100%;max-width:1100px;margin:0 auto}.spectrum-row{gap:3px;padding:3px 1px;display:flex;overflow-x:auto}.sp-note{text-align:center;border:2px solid var(--ink);background:var(--surface);border-radius:6px;flex:1 0 auto;min-width:34px;padding:4px 2px;font-size:.72rem;font-weight:700}.sp-note.ledger{border-style:dashed;border-width:1px}.sp-note.locked{opacity:.35}.sp-note.st-new{background:var(--surface)}.sp-note.st-learning{background:var(--key-hint);color:#1f1d1a}.sp-note.st-solid{background:var(--key-correct);color:#1f1d1a}.sp-note.st-mastered{background:var(--ok);color:#fff}.sp-note.st-miss{background:var(--key-wrong);color:#1f1d1a}.sp-note.current{outline:3px solid var(--accent);outline-offset:1px}.spectrum-legend{justify-content:space-between;gap:8px;margin-top:2px;display:flex}.card-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.timeline{background:var(--surface);border:1px solid var(--line);--ppb:48px;border-radius:18px;height:128px;position:relative;overflow:hidden}.tl-track{will-change:transform;position:absolute;inset:0}.tl-tick{border-left:1px solid var(--line);position:absolute;top:0;bottom:0}.tl-tick span{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.72rem;position:absolute;bottom:4px;left:4px}.tl-tick.barline{border-left:2px solid var(--key-border)}.tl-tick.barline span{color:var(--ink);font-weight:800}.tl-tick.countin span{color:var(--accent);font-weight:800}.tl-countin{height:64px;color:var(--muted);border:1px dashed var(--line);border-radius:10px;place-items:center;font-size:.8rem;display:grid;position:absolute;top:12px}.tl-block{background:color-mix(in srgb, var(--accent) 14%, var(--surface));border:2px solid var(--accent);border-radius:10px;height:84px;margin-left:2px;padding:4px 8px;position:absolute;top:12px;overflow:hidden}.tl-block.rest{border-style:dashed;border-color:var(--line);background:0 0}.tl-fill{background:color-mix(in srgb, var(--accent) 22%, transparent);pointer-events:none;width:0;position:absolute;inset:0 auto 0 0}.tl-fill.holding{background:color-mix(in srgb, var(--ok) 35%, transparent)}.tl-fill.released{background:repeating-linear-gradient(45deg,#e0a02059 0 8px,#0000 8px 16px)}.tl-chord{white-space:nowrap;font-size:1.35rem;font-weight:800;line-height:1.15;position:relative}.tl-lyric{white-space:nowrap;text-overflow:ellipsis;color:var(--ink);font-size:.82rem;position:relative;overflow:hidden}.tl-beats{display:flex;position:absolute;bottom:6px;left:0;right:0}.tl-beats span{flex:1;justify-content:center;display:flex}.tl-beats span:before{content:"";background:var(--accent);opacity:.6;border-radius:50%;width:7px;height:7px}.tl-block.g-perfect,.tl-block.g-good,.tl-block.g-ok{border-color:var(--ok)}.tl-block.g-miss{border-color:var(--bad);background:color-mix(in srgb, var(--bad) 10%, var(--surface))}.tl-playhead{background:var(--bad);width:3px;box-shadow:0 0 0 3px color-mix(in srgb, var(--bad) 20%, transparent);margin-left:-1px;position:absolute;top:0;bottom:0}.instruction{flex-direction:column;align-items:center;gap:6px;display:flex}.beat-dot{width:26px;height:26px;color:var(--muted);place-items:center;font-size:.8rem;font-weight:800;display:inline-grid}.beat-dot.on{color:var(--accent-ink)}.instr-text{text-align:center;min-height:1.4em;font-weight:700}.instr-text.waiting{color:var(--bad)}.instr-text.holding{color:var(--ok)}.chord-now.waiting{color:var(--bad);animation:.9s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.55}}.sheet{max-height:30vh}
