:root{--bg:#080a0d;--bg-2:#0b0e12;--surface:#10141a;--surface-2:#161b22;--line:#252e38;--line2:#3a4552;--text:#dde4eb;--muted:#8a95a3;--dim:#56616e;--orange:#ff9a1f;--cyan:#4fd2ff;--accent:var(--orange);--ok:#3ddc84;--bad:#ff5a5f;--warn:var(--cyan);--font:"Bahnschrift", "DIN Alternate", "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;--mono:"Cascadia Mono", Consolas, "SF Mono", ui-monospace, monospace;--cut:10px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-family:var(--font)}*{box-sizing:border-box}html,body,#root{background:var(--bg);height:100%;color:var(--text);margin:0}body{overscroll-behavior:none;-webkit-tap-highlight-color:transparent}.app{height:100dvh;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);flex-direction:column;display:flex}.controls{background:var(--surface);flex-wrap:wrap;align-items:center;gap:6px;padding:6px 8px;display:flex}.song-select{max-width:11rem}.spacer{flex:1}.btn,select,input[type=number]{border:1px solid var(--line2);background:var(--surface-2);min-width:40px;min-height:40px;color:var(--text);font:inherit;cursor:pointer;touch-action:manipulation;border-radius:2px;padding:0 12px;font-size:15px}input[type=number]{width:4.5rem;padding:0 6px}.btn:focus-visible,select:focus-visible,input:focus-visible{outline:2px solid var(--warn);outline-offset:2px}.btn.primary{background:var(--accent);border-color:var(--accent);font-weight:600}.btn.small{min-width:32px;min-height:32px;padding:0 8px}.btn.toggle.on{border-color:var(--ok);background:#1f6f45}.inline-control{font-variant-numeric:tabular-nums;align-items:center;gap:6px;display:inline-flex}.speed span{text-align:right;min-width:3.2rem}.speed input{width:110px}.transpose span{text-align:center;min-width:1.8rem}input[type=range]{accent-color:var(--accent);min-height:32px}input[type=checkbox]{width:24px;height:24px;accent-color:var(--accent)}.status{background:var(--bg-2);flex-wrap:wrap;gap:4px 14px;padding:4px 10px;font-size:13px;display:flex}.status-item{flex-direction:column;display:flex}.status .label,.mic-readout .label{color:var(--muted);font-size:11px;display:block}.status .value{font-variant-numeric:tabular-nums;font-weight:600}.status .expected{color:var(--warn)}.status .wrong,.bad{color:var(--bad)}.ok{color:var(--ok)}.state-waiting{color:var(--warn)}.state-finished,.mic-note{color:var(--ok)}.mic-uncertain{color:var(--warn)}.stage{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.notes-canvas{flex:1;width:100%;min-height:0;display:block}.wait-badge{color:var(--warn);pointer-events:none;background:#ffd16626;border-radius:999px;padding:4px 12px;font-size:13px;position:absolute;top:8px;left:50%;transform:translate(-50%)}.keyboard{height:clamp(64px, calc(var(--kb,1) * 17vh), calc(var(--kb,1) * 150px));touch-action:none;-webkit-user-select:none;user-select:none;background:#000;flex:none;position:relative}.key{border-radius:0 0 6px 6px;position:absolute;top:0}.key.white{z-index:1;background:linear-gradient(#fafafa,#dfe2ea);border:1px solid #555;height:100%}.key.black{z-index:2;background:linear-gradient(#333,#111);border:1px solid #000;height:62%}.key.pressed.correct{background:var(--ok)!important}.key.pressed.wrong{background:var(--bad)!important}.key-label{text-align:center;color:#556;pointer-events:none;width:100%;font-size:10px;position:absolute;bottom:4px}.panel-backdrop{z-index:10;background:#00000073;justify-content:flex-end;display:flex;position:fixed;inset:0}.panel{background:var(--surface);width:min(440px,100%);height:100%;padding:calc(env(safe-area-inset-top) + 8px) 14px calc(env(safe-area-inset-bottom) + 20px);overflow-y:auto}.panel-head{justify-content:space-between;align-items:center;display:flex}.panel h2{margin:0;font-size:20px}.panel h3{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:18px 0 8px;font-size:15px}.row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;min-height:44px;display:flex}.row input[type=range]{flex:140px;max-width:220px}.muted{color:var(--muted)}.small{font-size:13px}.notice{background:var(--surface-2);border-radius:2px;padding:10px 12px}.notice.warn{border-left:4px solid var(--warn)}.chip{background:var(--surface-2);border-radius:6px;margin:2px;padding:1px 7px;display:inline-block}.mic-test{background:var(--bg-2);border-radius:2px;margin:10px 0;padding:10px}.meter{background:var(--line);border-radius:5px;height:10px;position:relative;overflow:hidden}.meter-fill{background:linear-gradient(90deg, var(--ok), var(--warn));height:100%;transition:width 60ms linear}.meter-gate{background:var(--bad);width:2px;position:absolute;top:0;bottom:0}.mic-readout{font-variant-numeric:tabular-nums;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:8px;display:grid}.mic-readout strong{font-size:22px}.toast{bottom:calc(env(safe-area-inset-bottom) + 12px);background:var(--surface-2);z-index:20;border-radius:2px;padding:10px 14px;font-size:14px;position:fixed;left:50%;transform:translate(-50%);box-shadow:0 6px 20px #0006}@media (width<=560px){.controls{gap:4px;padding:4px}.btn,select{min-height:38px;padding:0 8px;font-size:14px}.song-select{max-width:8.5rem}.speed input{width:80px}.status{gap:2px 10px;font-size:12px}}@media (height<=500px){.status{display:none}.keyboard{height:calc(var(--kb,1) * 22vh)}.controls{scrollbar-width:none;flex-wrap:nowrap;overflow-x:auto}.controls>*{flex:none}.controls .spacer{display:none}.controls .song-select{max-width:8rem}.controls .instrument-select{max-width:6.5rem}.controls .speed input{width:70px}.controls .btn,.controls select{min-height:36px}}.instrument-select{max-width:9.5rem}.env-badge{color:#fff;letter-spacing:.05em;background:#7a2e2e;border-radius:6px;padding:2px 8px;font-size:12px;font-weight:700}.keyboard.compact{height:clamp(38px,7vh,60px)}.keyboard.compact .key.black{height:58%}.keyboard.compact .key-label{font-size:9px;bottom:1px}.fretboard-wrap{touch-action:pan-x;background:#1d140c;flex:none;overflow-x:auto}.fretboard{width:100%;min-width:max-content;font-size:12px;display:grid}.fb-corner,.fb-fretnum{color:#c9b9a0;text-align:center;padding:2px 0;font-size:11px}.fb-open{color:#e9dcc5;justify-content:center;align-items:center;font-size:11px;font-weight:600;display:flex}.fb-cell{cursor:pointer;touch-action:manipulation;background:linear-gradient(#0000 calc(50% - 1px),#d8c39a calc(50% - 1px) calc(50% + 1px),#0000 calc(50% + 1px));border:0;border-right:2px solid #9a9a9a;height:clamp(22px,4.2vh,32px);padding:0;position:relative}.fb-cell.nut{background-color:#2a1d10;border-right:5px solid #eee}.fb-cell.capo{border-right:6px solid #444}.fb-cell.muted{opacity:.35;cursor:default}.fb-dot{color:#111;pointer-events:none;border-radius:999px;place-items:center;font-size:11px;font-weight:700;display:grid;position:absolute;inset:3px 18%}.fb-cell.expected .fb-dot{background:var(--warn)}.fb-cell.pressed.correct .fb-dot{background:var(--ok)}.fb-cell.pressed.wrong .fb-dot{background:var(--bad);color:#fff}.fb-cell.pressed.neutral .fb-dot{background:var(--accent);color:#fff}.instrument-panel{background:var(--surface);flex-wrap:wrap;flex:none;align-items:center;gap:16px;padding:8px 12px;display:flex}.big-note{min-width:3.5ch;color:var(--warn);font-variant-numeric:tabular-nums;font-size:34px;font-weight:700}.holes{align-items:flex-end;gap:6px;display:flex}.hole-wrap{color:var(--muted);flex-direction:column;align-items:center;gap:2px;font-size:10px;display:flex}.hole-wrap.gap{margin-left:10px}.hole{border:2px solid #ccd;border-radius:50%;width:22px;height:22px}.hole.thumb{border-style:dashed}.hole.closed{background:#ccd}.hole.half{background:linear-gradient(90deg,#ccd 50%,#0000 50%)}.tune-line{flex:200px;align-items:center;gap:10px;min-width:180px;display:flex}.needle{background:var(--bg-2);border-radius:2px;flex:1;height:28px;position:relative;overflow:hidden}.needle-zone{background:#2ecc7126;position:absolute;top:0;bottom:0}.needle-center{opacity:.6;background:#fff;width:2px;position:absolute;top:0;bottom:0;left:50%}.needle-mark{border-radius:3px;width:6px;margin-left:-3px;transition:left 60ms linear;position:absolute;top:3px;bottom:3px}.needle-mark.in-tune{background:var(--ok)}.needle-mark.ok{background:var(--warn)}.needle-mark.off{background:var(--bad)}.needle-label{color:var(--muted);font-size:13px;position:absolute;top:4px}.needle-label.left{left:6px}.needle-label.right{right:6px}.tuner{text-align:center}.tuner .needle{height:40px;margin:8px 0}.tuner-note{margin-top:12px;font-size:72px;font-weight:700}.tuner-freq,.tuner-cents{color:var(--muted);font-variant-numeric:tabular-nums;min-height:1.3em}@media (width<=560px){.instrument-select{max-width:7rem}.big-note{font-size:26px}}.btn.danger{border-color:var(--bad);background:#8e2a2a}.btn:disabled{opacity:.6;cursor:default}.confirm{gap:6px;display:inline-flex}.search{border:1px solid var(--line2);background:var(--surface-2);min-height:40px;color:var(--text);font:inherit;border-radius:2px;flex:1;padding:0 12px}.song-list{flex-direction:column;gap:6px;margin:8px 0;padding:0;list-style:none;display:flex}.song-row{background:var(--surface-2);border-radius:2px;align-items:center;gap:6px;padding:4px;display:flex}.song-row.active{outline:2px solid var(--accent)}.song-main{color:var(--text);text-align:left;font:inherit;cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;align-items:flex-start;gap:2px;padding:6px 4px;display:flex}.song-title{font-weight:600}.star{color:var(--muted);cursor:pointer;background:0 0;border:0;min-width:40px;min-height:40px;font-size:22px}.star.on{color:var(--warn)}.result{z-index:15;background:var(--surface);text-align:center;border-radius:2px;width:min(360px,100% - 32px);padding:18px;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 10px 40px #00000080}.result h2{margin:0 0 4px}.result-pct{color:var(--ok);font-size:48px;font-weight:800}.row.center{justify-content:center}.songbook,.sheet-view,.sheet-editor{flex-direction:column;height:100%;min-height:0;display:flex}.sb-toolbar{background:var(--surface);flex-wrap:wrap;align-items:center;gap:6px;padding:6px 8px;display:flex}.sb-heading{font-size:18px}.sb-body{flex:1;padding:10px 12px;overflow-y:auto}.sheet-scroll{-webkit-overflow-scrolling:touch;flex:1;padding:12px 16px 40vh;line-height:1.25;overflow-y:auto}.sheet-title{margin:0 0 2px;font-size:1.4em}.sheet-meta{margin:0 0 12px;font-size:.7em}.sheet-section{margin:0 0 1em}.sheet-section.chorus{border-left:3px solid var(--accent);padding-left:10px}.sec-label{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:2px;font-size:.65em}.sheet-line{flex-wrap:wrap;align-items:flex-end;margin-bottom:.25em;display:flex}.seg{white-space:pre;flex-direction:column;display:inline-flex}.seg .chord{color:var(--warn);min-height:1.2em;padding-right:.35em;font-size:.85em;font-weight:700}.sheet-line:not(:has(.has-chord)) .chord{display:none}.sheet-comment{color:var(--muted);margin:0 0 .8em;font-size:.8em;font-style:italic}.sheet-license{margin-top:2em}.diagrams{flex-wrap:wrap;gap:8px;margin:0 0 14px;display:flex}.chord-diagram{text-align:center;margin:0;font-size:14px}.chord-diagram figcaption{color:var(--warn);font-weight:700}.cd-fret,.cd-string{stroke:#8a95a3;stroke-width:1px}.cd-nut{stroke:#dde4eb;stroke-width:4px}.cd-open{fill:none;stroke:#dde4eb;stroke-width:1.5px}.cd-mark{fill:#8a95a3;text-anchor:middle;font-size:12px}.cd-base{fill:#8a95a3;font-size:11px}.cd-none{width:70px;padding:10px 0}.sheet-textarea{border:1px solid var(--line2);background:var(--bg-2);color:var(--text);resize:none;border-radius:2px;flex:1;margin:8px;padding:10px;font:15px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace}.editor-help{margin:0;padding:0 12px 12px}.editor-help p{margin:0 0 6px}@media print{.sb-toolbar,.diagrams{display:none}.sheet-scroll{color:#000;padding:0;overflow:visible}body,html,#root{background:#fff}}.score{background:#f7f5ef;flex:45%;min-height:0;position:relative;overflow-y:auto}.notes-canvas.hidden{display:none}.stage:has(.notes-canvas.hidden) .score{flex:1}.score-paper svg{display:block}.score-status{color:#555;position:absolute;top:8px;left:12px}.score-note-info{color:#6b6b6b;margin:0;padding:0 12px 8px}.score-measure{fill:#0000}.score-measure.current{fill:#ff9a1f24}.score-note.expected path,.score-note.expected{fill:#d98e04;stroke:#d98e04}.score-note.hit path,.score-note.hit{fill:#1f9d55;stroke:#1f9d55}.score-note.missed path,.score-note.missed{fill:#c0392b;stroke:#c0392b}.pdf-viewer{z-index:30;background:#2b2b2b;flex-direction:column;display:flex;position:fixed;inset:0}.pdf-name{text-overflow:ellipsis;white-space:nowrap;max-width:40vw;overflow:hidden}.pdf-page{text-align:center;font-variant-numeric:tabular-nums;min-width:4.5em}.pdf-area{flex:1;justify-content:center;align-items:flex-start;min-height:0;padding:4px;display:flex;overflow:auto}.pdf-area.fit-page{align-items:center;overflow:hidden}.pdf-canvas{background:#fff;box-shadow:0 2px 12px #00000080}.pdf-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.pdf-icon{text-align:center;min-width:40px;font-size:22px}body{font-family:var(--font);background-color:var(--bg);background-image:radial-gradient(at 50% 30%,#4fd2ff0f,#0000 60%),radial-gradient(at 10% 100%,#ff9a1f0d,#0000 45%),linear-gradient(#ffffff05 1px,#0000 1px),linear-gradient(90deg,#ffffff05 1px,#0000 1px);background-size:auto,auto,44px 44px,44px 44px}html,#root{background:0 0}:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}.hud-label,.status .label,.mic-readout .label,.panel h3,.sec-label{font-family:var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--dim);font-size:10.5px}.hud-label em{color:var(--orange);font-style:normal}.controls,.sb-toolbar{background:linear-gradient(90deg, #ff9a1f1a, transparent 30%, transparent 70%, #4fd2ff12), var(--surface);border-bottom:1px solid var(--line);position:relative}.controls:after,.sb-toolbar:after{content:"";background:linear-gradient(90deg, transparent, var(--orange), transparent);pointer-events:none;width:30%;height:1px;animation:7s ease-in-out infinite hud-runner;position:absolute;bottom:-1px;left:0}@keyframes hud-runner{0%{transform:translate(-100%)}to{transform:translate(430%)}}.status{background:var(--bg-2);border-bottom:1px solid var(--line);font-family:var(--font)}.status .value{font-family:var(--mono);color:var(--text)}.sb-heading{letter-spacing:.14em;text-transform:uppercase;font-weight:600}.btn,select,input[type=number],.search{border:1px solid var(--line2);background:var(--surface-2);color:var(--text);border-radius:0;transition:border-color .15s,background .15s,color .15s,box-shadow .15s}.btn{clip-path:polygon(0 0,calc(100% - 7px) 0,100% 7px,100% 100%,7px 100%,0 calc(100% - 7px))}.btn:hover:not(:disabled),select:hover{border-color:var(--orange)}.btn:active:not(:disabled){background:#1d242d}.btn.primary{border-color:var(--orange);color:var(--orange);font-family:var(--mono);letter-spacing:.08em;background:0 0;box-shadow:inset 0 0 12px #ff9a1f26}.btn.primary:hover:not(:disabled){background:var(--orange);color:var(--bg);box-shadow:0 0 18px #ff9a1f8c}.btn.toggle.on{border-color:var(--cyan);color:var(--cyan);background:#4fd2ff1f;box-shadow:inset 0 0 10px #4fd2ff33}.btn.danger{border-color:var(--bad);color:#ffb3b5;background:#ff5a5f1f}input[type=range],input[type=checkbox]{accent-color:var(--orange)}.search::placeholder{color:var(--dim)}.env-badge{border:1px solid var(--orange);color:var(--orange);font-family:var(--mono);letter-spacing:.2em;background:0 0;border-radius:0;animation:2.4s infinite hud-blink}@keyframes hud-blink{50%{opacity:.45}}.hud-panel,.panel,.result,.song-row,.notice,.list-menu{border:1px solid var(--line);background:linear-gradient(180deg, var(--surface-2), var(--surface));border-radius:0;position:relative}.hud-panel,.result,.list-card{clip-path:polygon(0 0,calc(100% - 18px) 0,100% 18px,100% 100%,18px 100%,0 calc(100% - 18px))}.hud-panel:before,.result:before,.panel:before{content:"";background:var(--orange);width:64px;height:3px;box-shadow:0 0 12px var(--orange);transition:width .35s;position:absolute;top:0;left:0}.panel{border-width:0 0 0 1px;border-color:var(--line2);background:var(--surface)}.panel-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#04060899}.panel h2,.result h2{letter-spacing:.12em;text-transform:uppercase;font-weight:600}.notice{border-left:3px solid var(--cyan)}.notice.warn{border-left-color:var(--orange)}.result{box-shadow:0 0 0 1px var(--line2), 0 20px 60px #0009}.result-pct{font-family:var(--mono);color:var(--cyan);text-shadow:0 0 22px #4fd2ff73}.toast{border:1px solid var(--line2);border-left:3px solid var(--orange);border-radius:0}.song-row{background:var(--surface-2);transition:border-color .15s}.song-row:hover{border-color:var(--line2)}.song-row.active{border-color:var(--orange);box-shadow:inset 3px 0 0 var(--orange);outline:0}.song-title{letter-spacing:.02em}.star.on{color:var(--orange);text-shadow:0 0 10px #ff9a1f99}.level{font-family:var(--mono);letter-spacing:1px;color:var(--cyan)}.level-off{color:var(--line2)}.chips{flex-wrap:wrap;gap:6px;margin:8px 0 4px;display:flex}.chip-btn{border:1px solid var(--line2);min-height:34px;color:var(--muted);font:inherit;cursor:pointer;background:0 0;padding:0 10px;font-size:13px;transform:skew(-12deg)}.chip-btn.on{border-color:var(--cyan);color:var(--cyan);background:#4fd2ff1a}.chip-count{font-family:var(--mono);color:var(--dim);font-size:11px}.chip-btn.on .chip-count{color:var(--cyan)}.sheet-section.chorus{border-left-color:var(--orange)}.seg .chord,.chord-diagram figcaption{color:var(--cyan)}.cd-dot{fill:var(--cyan)}.sheet-title{letter-spacing:.06em}.sheet-textarea{font-family:var(--mono);border-radius:0}.keyboard{background:var(--bg);border-top:2px solid var(--orange);box-shadow:0 -6px 18px #ff9a1f1f}.key{border-radius:0 0 3px 3px}.key.white{background:linear-gradient(#f1f4f7,#d3d9e0);border-color:#3a4552}.key.black{background:linear-gradient(#262d36,#0b0e12)}.key.expected.white{background:linear-gradient(#e6f9ff,#4fd2ff)}.key.expected.black{background:linear-gradient(#1a6f8a,#2aa6d1)}.key.pressed.neutral{background:var(--orange)!important}.wait-badge{border:1px solid var(--cyan);font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;background:#4fd2ff1f;border-radius:0}.add-to-list{position:relative}.list-btn{font-family:var(--mono);min-width:40px}.list-btn.on{color:var(--cyan);border-color:var(--cyan)}.list-menu{z-index:25;width:min(300px,86vw);max-height:60vh;padding:10px;position:absolute;top:calc(100% + 6px);right:0;overflow-y:auto;box-shadow:0 16px 40px #0009}.list-menu .row{flex-wrap:nowrap;margin-top:6px}.list-menu-item{border:0;border-bottom:1px solid var(--line);width:100%;min-height:40px;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;align-items:center;gap:8px;padding:0 6px;display:flex}.list-menu-item .check{color:var(--dim)}.list-menu-item.on .check{color:var(--cyan)}.grow{flex:1}.list-grid{grid-template-columns:repeat(auto-fill,minmax(15rem,1fr));gap:12px;margin:12px 0;display:grid}.list-card{border:1px solid var(--line);background:linear-gradient(180deg, var(--surface-2), var(--surface));color:var(--text);font:inherit;text-align:left;cursor:pointer;flex-direction:column;align-items:flex-start;gap:4px;padding:18px 16px;transition:border-color .25s,transform .25s;display:flex;position:relative}.list-card:hover,.list-card:focus-visible{border-color:var(--orange);transform:translateY(-2px)}.list-card:hover:before{width:55%}.list-card-title{letter-spacing:.06em;font-size:1.1rem;font-weight:600}.hud-frame{pointer-events:none;position:absolute;inset:8px}.hud-frame:before,.hud-frame:after{content:"";border:solid var(--orange);opacity:.5;width:14px;height:14px;position:absolute}.hud-frame:before{border-width:0 0 1px 1px;bottom:0;left:18px}.hud-frame:after{border-width:1px 1px 0 0;top:0;right:18px}.empty-state{text-align:center;padding:28px 18px}.list-name-input{border:1px solid #0000;border-bottom-color:var(--line2);min-width:0;min-height:40px;color:var(--text);font:inherit;letter-spacing:.08em;background:0 0;flex:10rem;padding:0 10px;font-size:18px;font-weight:600}.list-name-input:focus{border-color:var(--orange);outline:none}.playlist-items{counter-reset:none}.pl-index{font-family:var(--mono);color:var(--dim);min-width:2ch;padding-left:4px}.kind-tag{font-family:var(--mono);letter-spacing:.15em;border:1px solid;padding:2px 5px;font-size:10px}.kind-tag.song{color:var(--orange)}.kind-tag.sheet{color:var(--cyan)}.row-actions{gap:4px;display:inline-flex}.song-row.missing{opacity:.5}.picker{margin:8px 0 14px;padding:12px}.picker-list{max-height:45vh;overflow-y:auto}.seg-control{border:1px solid var(--line2);display:inline-flex}.seg-control button{min-height:38px;color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;padding:0 12px}.seg-control button.on{color:var(--orange);background:#ff9a1f24}.queue-bar{background:linear-gradient(90deg, #4fd2ff1a, transparent 60%), var(--bg-2);border-bottom:1px solid var(--line);align-items:center;gap:6px;padding:4px 8px;display:flex}.queue-name{min-width:0;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:baseline;gap:10px;display:flex}.queue-title{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}@media (width<=560px){.row-actions .btn.small{min-width:30px;padding:0 4px}.kind-tag{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.list-open{color:var(--orange);font-size:20px}html,body{overflow-x:hidden}.controls,.sb-toolbar,.queue-bar{overflow-x:clip}.stage-scroll{overscroll-behavior-x:contain;scrollbar-width:thin;scrollbar-color:var(--orange) var(--bg);flex:1;min-height:0;display:flex;position:relative;overflow:auto hidden}.stage-scroll.score-only{flex:none}.stage-inner{flex-direction:column;flex:none;min-height:0;display:flex}.stage-scroll.scrollable .notes-canvas{touch-action:pan-x}body:before{content:"";pointer-events:none;z-index:50;background:repeating-linear-gradient(0deg,#ffffff05 0 1px,#0000 1px 3px);position:fixed;inset:0}body:after{content:"";pointer-events:none;z-index:49;background:linear-gradient(#0000,#4fd2ff0a 85%,#4fd2ff1a);height:120px;animation:9s linear infinite hud-sweep;position:fixed;top:0;left:0;right:0}@keyframes hud-sweep{0%{transform:translateY(-120px)}to{transform:translateY(100vh)}}@keyframes hud-boot{0%{opacity:0;filter:blur(6px)brightness(2);transform:translateY(14px)scale(.985)}60%{opacity:1;filter:blur()brightness(1.3)}to{opacity:1;filter:none;transform:none}}@keyframes hud-fadein{0%{opacity:0}to{opacity:1}}@keyframes hud-type{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}@keyframes hud-flicker{0%{opacity:0}10%{opacity:.8}15%{opacity:.1}25%{opacity:1}30%{opacity:.4}40%,to{opacity:1}}.controls,.sb-toolbar,.status,.queue-bar{animation:.8s ease-out both hud-fadein}.panel{animation:.6s cubic-bezier(.2,.8,.2,1) both hud-boot}.result,.list-card,.empty-state,.picker{animation:.7s cubic-bezier(.2,.8,.2,1) both hud-boot}.result{animation-name:hud-boot-center}@keyframes hud-boot-center{0%{opacity:0;filter:blur(6px)brightness(2);transform:translate(-50%,-46%)scale(.96)}60%{opacity:1;filter:blur()brightness(1.3)}to{opacity:1;filter:none;transform:translate(-50%,-50%)}}.list-card:nth-child(2){animation-delay:80ms}.list-card:nth-child(3){animation-delay:.16s}.list-card:nth-child(n+4){animation-delay:.24s}.hud-label{animation:.9s steps(24,end) .2s both hud-type;display:inline-block}.panel h2,.result h2,.sb-heading,.sheet-title,.list-card-title{text-shadow:0 0 18px #ff9a1f47;animation:1.1s linear .2s both hud-flicker}.hud-scan{pointer-events:none;opacity:.6;background:linear-gradient(#0000,#ff9a1f12);height:40%;animation:7s ease-in-out infinite hud-pscan;position:absolute;top:0;left:0;right:0}@keyframes hud-pscan{0%{transform:translateY(-100%)}60%,to{transform:translateY(260%)}}.panel,.result,.hud-panel{overflow:hidden}.panel{overflow-y:auto}.panel .hud-scan{width:min(440px,100%);position:fixed;left:auto;right:0}.panel .hud-frame{width:calc(min(440px,100%) - 20px);position:fixed;inset:10px 10px 10px auto}.list-card:hover .hud-frame:before,.list-card:hover .hud-frame:after,.list-card:focus-visible .hud-frame:before,.list-card:focus-visible .hud-frame:after{opacity:1;width:28px;height:28px}.hud-frame:before,.hud-frame:after{transition:all .35s}.list-card:hover .hud-scan{opacity:1;animation-duration:2.2s}.reactor{--zc:var(--orange);place-items:center;width:8rem;height:8rem;margin:14px auto;display:grid;position:relative}.reactor.sm{width:5rem;height:5rem}.reactor.lg{width:11rem;height:11rem;margin:22px auto}.reactor.tone-cyan{--zc:var(--cyan)}.reactor.tone-ok{--zc:var(--ok)}.reactor.tone-bad{--zc:var(--bad)}.reactor:before,.reactor:after{content:"";border-radius:50%;position:absolute}.reactor:before{border:2px solid #ffffff12;border-top-color:var(--zc);border-right-color:var(--zc);filter:drop-shadow(0 0 6px var(--zc));animation:14s linear infinite hud-spin;inset:0}.reactor:after{border:1px dashed var(--line2);animation:26s linear infinite reverse hud-spin;inset:14%}.reactor .ring-ticks{opacity:.55;background:repeating-conic-gradient(var(--zc) 0 1.4deg, transparent 1.4deg 10deg);border-radius:50%;animation:60s linear infinite reverse hud-spin;position:absolute;inset:-12px;-webkit-mask:radial-gradient(circle,#0000 63%,#000 64% 67%,#0000 68%);mask:radial-gradient(circle,#0000 63%,#000 64% 67%,#0000 68%)}.reactor .arc{border:2px solid #0000;border-left-color:var(--zc);opacity:.7;border-radius:50%;animation:5s cubic-bezier(.6,.1,.4,.9) infinite hud-spin;position:absolute;inset:24%}.reactor .core{background:radial-gradient(circle, color-mix(in srgb, var(--zc) 30%, transparent), transparent 70%);border-radius:50%;width:62%;height:62%;animation:3.2s ease-in-out infinite hud-pulse;position:absolute}.reactor.fast:before{animation-duration:3s}.reactor.fast .arc{animation-duration:1.6s}.reactor-content{color:var(--zc);text-shadow:0 0 14px var(--zc);transition:color .3s;position:relative}.reactor .result-pct,.reactor .tuner-note{color:inherit;text-shadow:inherit;margin:0}.reactor .result-pct{font-size:40px}.reactor .tuner-note{font-size:56px;font-family:var(--mono)}.reactor-icon{font-size:34px}@keyframes hud-spin{to{transform:rotate(360deg)}}@keyframes hud-pulse{0%,to{opacity:.6;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}.live{align-self:center;align-items:center;gap:8px;padding-right:4px;display:inline-flex}.live .dot{background:var(--orange);width:8px;height:8px;box-shadow:0 0 10px var(--orange);border-radius:50%;animation:2.4s infinite hud-blink}.live .ticks{align-items:flex-end;gap:2px;height:14px;display:inline-flex}.live .ticks i{background:var(--line2);transform-origin:bottom;width:3px;height:14px;transform:scaleY(.3)}.live.on .dot{background:var(--cyan);box-shadow:0 0 12px var(--cyan);animation-duration:.9s}.live.on .ticks i{background:var(--orange);animation:1.4s ease-in-out infinite hud-eq;box-shadow:0 0 6px #ff9a1f99}.live.on .ticks i:nth-child(2){animation-delay:-.2s}.live.on .ticks i:nth-child(3){animation-delay:-.5s}.live.on .ticks i:nth-child(4){background:var(--cyan);animation-delay:-.8s}.live.on .ticks i:nth-child(5){animation-delay:-.3s}@keyframes hud-eq{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}.btn:hover:not(:disabled){box-shadow:0 0 14px #ff9a1f59}.btn.primary{text-shadow:0 0 10px #ff9a1f99;box-shadow:inset 0 0 12px #ff9a1f2e,0 0 12px #ff9a1f40}.btn.toggle.on{text-shadow:0 0 10px #4fd2ffb3;box-shadow:inset 0 0 12px #4fd2ff38,0 0 14px #4fd2ff4d}.controls:after,.sb-toolbar:after{height:2px;box-shadow:0 0 12px var(--orange)}.status .expected{color:var(--cyan);text-shadow:0 0 10px #4fd2ffb3}.state-waiting{text-shadow:0 0 10px #4fd2ffb3}.song-row:hover{box-shadow:inset 3px 0 0 var(--orange), 0 0 18px #ff9a1f1f;border-color:#ff9a1f99}.song-row.active{box-shadow:inset 3px 0 0 var(--orange), 0 0 20px #ff9a1f40}.chip-btn.on{text-shadow:0 0 8px #4fd2ffb3;box-shadow:0 0 12px #4fd2ff59}.seg .chord,.chord-diagram figcaption{text-shadow:0 0 10px #4fd2ff8c}.cd-dot{filter:drop-shadow(0 0 3px #4fd2ff)}.result-pct{text-shadow:0 0 22px}.keyboard{border-top:2px solid var(--orange);box-shadow:0 -2px 14px #ff9a1f8c,0 -18px 40px #ff9a1f1f}.key{transition:background .12s,box-shadow .12s}.key.expected{z-index:3;box-shadow:0 0 16px #4fd2ffd9,inset 0 -10px 18px #ffffff80}.key.black.expected{z-index:4}.key.pressed.correct{box-shadow:0 0 22px var(--ok), inset 0 -12px 20px #ffffff80;z-index:4}.key.pressed.wrong{box-shadow:0 0 22px var(--bad);z-index:4}.key.pressed.neutral{box-shadow:0 0 22px var(--orange);z-index:4}.songbook,.sheet-view{background:radial-gradient(at 80% 0,#4fd2ff12,#0000 50%),radial-gradient(at 0 100%,#ff9a1f12,#0000 50%)}.list-menu.hud-panel{overflow-y:auto}.key.white.expected,.key.white.pressed{z-index:1}.key.black.expected,.key.black.pressed{z-index:4}.wait-badge.hold{border-color:var(--orange);color:var(--orange);background:#ff9a1f24;box-shadow:0 0 18px #ff9a1f59}.license-line{color:var(--dim);font-size:11px}:root[data-theme=hud] *,:root[data-theme=hud] :before,:root[data-theme=hud] :after,:root[data-theme=classic] *,:root[data-theme=classic] :before,:root[data-theme=classic] :after{text-shadow:none!important;animation:none!important}:root[data-theme=hud] body:before,:root[data-theme=hud] body:after,:root[data-theme=hud] .hud-scan,:root[data-theme=hud] .controls:after,:root[data-theme=hud] .sb-toolbar:after,:root[data-theme=classic] body:before,:root[data-theme=classic] body:after,:root[data-theme=classic] .hud-scan,:root[data-theme=classic] .hud-frame,:root[data-theme=classic] .hud-label,:root[data-theme=classic] .live,:root[data-theme=classic] .controls:after,:root[data-theme=classic] .sb-toolbar:after,:root[data-theme=classic] .hud-panel:before,:root[data-theme=classic] .result:before,:root[data-theme=classic] .panel:before{display:none}:root[data-theme=hud] .key,:root[data-theme=hud] .btn,:root[data-theme=hud] .song-row,:root[data-theme=hud] .chip-btn,:root[data-theme=hud] .keyboard,:root[data-theme=classic] .key,:root[data-theme=classic] .btn,:root[data-theme=classic] .song-row,:root[data-theme=classic] .chip-btn,:root[data-theme=classic] .keyboard{box-shadow:none!important}:root[data-theme=classic]{--bg:#0f1220;--bg-2:#12152a;--surface:#1a1e36;--surface-2:#252a48;--line:#343b66;--line2:#343b66;--text:#eef0fa;--muted:#9aa3c7;--dim:#9aa3c7;--orange:#4c8dff;--cyan:#ffd166;--accent:#4c8dff;--warn:#ffd166;--ok:#2ecc71;--bad:#e74c3c;--font:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}:root[data-theme=classic] body{background-image:none}:root[data-theme=classic] .controls,:root[data-theme=classic] .sb-toolbar{background:var(--surface);border-bottom:0}:root[data-theme=classic] .btn,:root[data-theme=classic] .hud-panel,:root[data-theme=classic] .result,:root[data-theme=classic] .list-card{clip-path:none}:root[data-theme=classic] .btn,:root[data-theme=classic] select,:root[data-theme=classic] .search,:root[data-theme=classic] input[type=number],:root[data-theme=classic] .song-row,:root[data-theme=classic] .notice,:root[data-theme=classic] .list-card,:root[data-theme=classic] .hud-panel,:root[data-theme=classic] .list-menu,:root[data-theme=classic] .seg-control,:root[data-theme=classic] .song-picker-menu{border-radius:10px}:root[data-theme=classic] .result{border-radius:16px}:root[data-theme=classic] .btn.primary{background:var(--accent);color:#fff;font-family:var(--font);letter-spacing:0}:root[data-theme=classic] .btn.toggle.on{border-color:var(--ok);color:var(--text);background:#1f6f45}:root[data-theme=classic] .chip-btn{border-radius:999px;transform:none}:root[data-theme=classic] .panel h3,:root[data-theme=classic] .status .label,:root[data-theme=classic] .sec-label{font-family:var(--font);letter-spacing:.04em}:root[data-theme=classic] .keyboard{background:#000;border-top:0}:root[data-theme=classic] .key.white{background:linear-gradient(#fafafa,#dfe2ea);border-color:#555}:root[data-theme=classic] .key.black{background:linear-gradient(#333,#111)}:root[data-theme=classic] .key.expected.white{background:linear-gradient(#fff6d8,#ffd166)}:root[data-theme=classic] .key.expected.black{background:linear-gradient(#8a6d1f,#c99a2e)}:root[data-theme=classic] .reactor:before,:root[data-theme=classic] .reactor:after,:root[data-theme=classic] .reactor .ring-ticks,:root[data-theme=classic] .reactor .arc,:root[data-theme=classic] .reactor .core{display:none}:root[data-theme=classic] .reactor{width:auto;height:auto;margin:8px auto}:root[data-theme=classic] .reactor-content{color:var(--ok)}:root[data-theme=classic] .songbook,:root[data-theme=classic] .sheet-view{background:0 0}:root[data-theme=classic] .env-badge{color:#fff;background:#7a2e2e;border:0;border-radius:6px}.song-picker{position:relative}.song-picker-btn{align-items:center;gap:8px;max-width:15rem;display:inline-flex}.picker-current{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.song-picker-menu{z-index:26;flex-direction:column;gap:8px;width:min(380px,92vw);max-height:72vh;padding:10px;display:flex;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 18px 50px #000000a6}.song-picker-menu.hud-panel{overflow:hidden}.song-picker-menu .search{flex:none}.picker-groups,.song-picker-menu>.picker-list{min-height:0;overflow-y:auto}.picker-group-head{border:0;border-bottom:1px solid var(--line);width:100%;min-height:40px;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;align-items:center;gap:8px;padding:0 6px;font-weight:600;display:flex}.picker-group-head:hover{color:var(--orange)}.picker-group-head .caret{color:var(--orange);width:1ch}.picker-list{margin:0;padding:0;list-style:none}.picker-song{width:100%;min-height:40px;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-left:2px solid #0000;flex-direction:column;align-items:flex-start;padding:6px 8px 6px 24px;display:flex}.picker-song:hover{border-left-color:var(--orange);background:#ff9a1f14}.picker-song.on{border-left-color:var(--cyan);color:var(--cyan)}.picker-sub{color:var(--muted);font-size:12px}.view-switch button{min-width:40px;min-height:40px;font-family:var(--mono);padding:0 8px}.view-switch button.on{color:var(--cyan);background:#4fd2ff24}@media (width<=560px){.song-picker-btn{max-width:9rem}}.controls,.sb-toolbar{z-index:20}.panel-backdrop{z-index:30}.result{z-index:35}.pdf-viewer{z-index:40}.toast{z-index:45}.panel-backdrop.center{justify-content:center;align-items:center;padding:12px}.game-setup{width:min(560px,100%);max-height:100%;padding:20px 18px;animation:.6s cubic-bezier(.2,.8,.2,1) both hud-boot;overflow-y:auto}.game-setup.hud-panel{overflow-y:auto}.game-setup h2{letter-spacing:.14em;text-transform:uppercase;margin:4px 0 6px;font-weight:600}.game-row{border-bottom:1px solid var(--line);align-items:center;gap:10px;min-height:48px;display:flex}.game-step{border:1px solid var(--orange);width:26px;height:26px;color:var(--orange);font-family:var(--mono);place-items:center;font-size:13px;display:grid}.game-song-info{margin:4px 0 0 36px}.difficulty-grid{grid-template-columns:repeat(3,1fr);gap:8px;margin:10px 0 16px;display:grid}.difficulty{--dc:var(--ok);border:1px solid var(--line2);background:var(--surface-2);color:var(--text);font:inherit;text-align:left;cursor:pointer;clip-path:polygon(0 0,calc(100% - 10px) 0,100% 10px,100% 100%,10px 100%,0 calc(100% - 10px));flex-direction:column;gap:4px;padding:10px 8px;transition:border-color .15s,background .15s,box-shadow .15s;display:flex}.difficulty.lvl-1{--dc:#a6e05a}.difficulty.lvl-2{--dc:var(--cyan)}.difficulty.lvl-3{--dc:var(--orange)}.difficulty.lvl-4{--dc:#ff6a3d}.difficulty.lvl-5{--dc:var(--bad)}.difficulty-name{color:var(--dc);font-weight:600}.difficulty-meta{font-family:var(--mono);color:var(--muted);font-size:11px}.difficulty:hover{border-color:var(--dc)}.difficulty.on{border-color:var(--dc);background:color-mix(in srgb, var(--dc) 14%, var(--surface-2));box-shadow:inset 0 0 14px color-mix(in srgb, var(--dc) 30%, transparent)}.game-start{min-width:9rem}@media (width<=480px){.difficulty-grid{grid-template-columns:repeat(2,1fr)}}.game-hud{flex-wrap:wrap;gap:12px}.game-title{flex-direction:column;min-width:0;max-width:14rem;display:flex}.lives{flex-wrap:wrap;gap:2px;max-width:13rem;font-size:15px;display:flex}.life{color:var(--line2);transition:color .3s,text-shadow .3s}.life.on{color:var(--bad);text-shadow:0 0 8px #ff5a5fcc}.no-lives{font-family:var(--mono);letter-spacing:.15em;text-transform:uppercase;color:var(--bad);font-size:12px}.game-score,.game-combo{font-variant-numeric:tabular-nums;flex-direction:column;display:flex}.game-score strong,.game-combo strong{font-family:var(--mono);color:var(--cyan);text-shadow:0 0 10px #4fd2ff80;font-size:18px}.game-combo.hot strong{color:var(--orange);text-shadow:0 0 14px #ff9a1fe6;animation:1s ease-in-out infinite hud-pulse}.game-result .game-big{letter-spacing:.16em;font-size:30px}.game-result.over .game-big{color:var(--bad);text-shadow:0 0 22px #ff5a5fb3}.game-result.won .game-big{color:var(--ok);text-shadow:0 0 22px #3ddc84b3}.game-result.over:before{background:var(--bad);box-shadow:0 0 12px var(--bad)}.game-result .row.center{flex-wrap:wrap}.game-result{width:min(440px,100% - 24px)}.result{position:fixed}.toast{top:calc(env(safe-area-inset-top) + 64px);bottom:auto}.toast.passive{pointer-events:none}.toast{top:32vh}.parts-editor{border:1px solid var(--line,#7f7f7f4d);border-radius:8px;margin:8px 0;padding:10px 12px}.parts-list{margin:0 0 8px;padding:0;list-style:none}.parts-list li{flex-wrap:wrap;justify-content:space-between;gap:6px;padding:4px 0}.parts-list .part-name{flex:12rem;min-width:0}.profile-picker{background:var(--surface);border:1px solid var(--line2);max-width:28rem;color:var(--text);margin:10vh auto 0;padding:20px 16px}.profile-picker h2{margin:0 0 8px;font-size:22px}@media (width<=480px){.profile-picker{margin:16px}}.profile-buttons{flex-wrap:wrap;gap:10px;margin:16px 0;display:flex}.profile-btn{padding:12px 20px;font-size:1.1rem}.sync-state{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.sync-offline,.sync-login,.sync-error{color:var(--warn)}
