:root{--bg:#0b0d17;--panel:#151827;--panel-2:#1d2135;--line:#2a2f48;--text:#e9ebf5;--muted:#9097b5;--accent:#38d6ff;--accent-2:#ff4fb3;--good:#3ee08f;--warn:#ffc857;--bad:#ff5d6c;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:var(--bg);color:var(--text);-webkit-tap-highlight-color:transparent;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{background:var(--bg);min-height:100dvh;margin:0}a{color:var(--accent)}.page{max-width:760px;padding:env(safe-area-inset-top) 16px calc(24px + env(safe-area-inset-bottom));margin:0 auto}.topbar{background:var(--bg);z-index:2;align-items:center;gap:12px;padding:14px 0;display:flex;position:sticky;top:0}.topbar h1{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;margin:0;font-size:1.25rem;overflow:hidden}.topbar .actions{gap:8px;display:flex}.logo{width:32px;height:32px}.back{color:var(--text);padding:0 6px;font-size:1.5rem;text-decoration:none}main{flex-direction:column;gap:16px;display:flex}.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px}.stack{flex-direction:column;gap:10px;display:flex}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}h2{margin:0 0 8px;font-size:1.05rem}.button,button{font:inherit;border:1px solid var(--line);background:var(--panel-2);color:var(--text);cursor:pointer;border-radius:10px;justify-content:center;align-items:center;gap:6px;min-height:44px;padding:10px 16px;text-decoration:none;display:inline-flex}button:disabled{opacity:.5;cursor:default}.button.primary{background:linear-gradient(135deg,#2bb5ff,#8f5bff);border:none;font-weight:600}.button.danger{background:var(--bad);border:none}.button.ghost{background:0 0;min-height:36px;padding:8px 10px;font-size:.9rem}.button.wide{width:100%}.button.small{min-height:32px;padding:4px 10px;font-size:.9rem}input,textarea,select{font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:10px;width:100%;padding:10px 12px}input[type=range]{accent-color:var(--accent);padding:0}input[type=checkbox]{width:auto;accent-color:var(--accent)}label{color:var(--muted);font-size:.9rem}.muted{color:var(--muted)}.small{font-size:.85rem}.center{text-align:center}.error{border:1px solid var(--bad);color:#ffd0d5;background:#ff5d6c1f;border-radius:10px;padding:10px 12px}.warning{border:1px solid var(--warn);color:#ffe9bd;background:#ffc8571a;border-radius:10px;padding:10px 12px;font-size:.9rem}.offline-banner{background:var(--warn);color:#222;text-align:center;padding:6px;font-size:.9rem}.song-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.song-card{background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:12px;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;text-decoration:none;display:flex}.song-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.badge{background:var(--panel-2);color:var(--muted);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;max-width:50%;padding:3px 10px;font-size:.8rem;overflow:hidden}.badge.done{color:var(--good)}.badge.failed{color:var(--bad)}.badge.running{color:var(--accent)}.tabs{background:var(--panel);border-radius:12px;gap:6px;padding:4px;display:flex}.tabs button{background:0 0;border:none;flex:1}.tabs button.active{background:var(--panel-2);color:var(--accent)}.steps{color:var(--muted);margin:12px 0;padding-left:22px}.steps li{padding:3px 0}.steps li.done{color:var(--good)}.steps li.current{color:var(--accent);font-weight:600}.status-line{align-items:center;gap:10px;margin:0;display:flex}.spinner{border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;width:16px;height:16px;animation:.8s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}pre.detail{white-space:pre-wrap;max-height:240px;color:var(--muted);font-size:.75rem;overflow:auto}.stats{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;display:grid}.stat{background:var(--panel-2);border-radius:10px;padding:10px 12px}.stat .label{color:var(--muted);font-size:.8rem}.stat .value{margin-top:2px;font-size:1.2rem;font-weight:600}audio{width:100%}.range-big{color:var(--accent);margin:4px 0;font-size:1.8rem;font-weight:700}.live-note{color:var(--accent-2);text-shadow:0 0 24px #ff4fb380;font-size:3.5rem;font-weight:800}.history{margin:0;padding:0;list-style:none}.history a{border-bottom:1px solid var(--line);color:var(--text);justify-content:space-between;align-items:center;gap:12px;padding:10px 4px;text-decoration:none;display:flex}.progress-chart{width:100%;height:auto}select{width:auto}.sing{background:var(--bg);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}.sing-top{align-items:center;gap:12px;padding:8px 12px;display:flex}.sing-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:600;overflow:hidden}.hud{gap:16px;display:flex}.hud>div{flex-direction:column;align-items:flex-end;display:flex}.hud-label{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-size:.7rem}.hud-value{font-variant-numeric:tabular-nums;font-size:1.3rem;font-weight:700}.hud-value.streak{color:var(--warn)}.stage{flex:1;min-height:200px;position:relative}.highway{width:100%;height:100%;display:block;position:absolute;inset:0}.countin{color:var(--accent);text-shadow:0 0 40px #38d6ff99;pointer-events:none;justify-content:center;align-items:center;font-size:7rem;font-weight:800;display:flex;position:absolute;inset:0}.overlay{background:#0b0d17b3;justify-content:center;align-items:center;padding:24px;display:flex;position:absolute;inset:0}.lyric-line{text-align:center;color:#fff;min-height:1.6em;padding:10px 16px 2px;font-size:1.4rem;font-weight:600}.lyric-next{text-align:center;color:#5d6488;min-height:1.5em;padding:0 16px 8px;font-size:1.05rem}.controls{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;padding:8px 12px 14px;display:flex}.speed{flex-direction:column;min-width:150px;font-size:.8rem;display:flex}@media (width<=520px){.hud{gap:10px}.hud-value{font-size:1.05rem}.sing-title{display:none}}.score-hero{text-align:center;padding:8px 0}.score-big{background:linear-gradient(135deg,#38d6ff,#ff4fb3);color:#0000;-webkit-background-clip:text;background-clip:text;font-size:4rem;font-weight:800}.tips{flex-direction:column;gap:8px;margin:0;padding-left:20px;display:flex}.review-scroll{border:1px solid var(--line);border-radius:10px;overflow-x:auto}.review-scroll canvas{cursor:pointer;display:block}.grow{flex:1;min-width:140px}.phrases{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.phrases li{grid-template-columns:minmax(0,1fr) 30% auto;align-items:center;gap:10px;display:grid}.phrase-label{text-overflow:ellipsis;white-space:nowrap;font-size:.9rem;overflow:hidden}.bar{background:var(--panel-2);border-radius:4px;height:8px;display:block;overflow:hidden}.bar span{height:100%;display:block}.preview-lyrics{text-align:center;min-height:3.2em}.preview-word{color:var(--accent);font-size:1.4rem;font-weight:700}.preview-word .spoken{color:var(--muted);font-weight:400}.song-row{align-items:stretch;gap:6px;display:flex}.song-row .song-card{flex:1;min-width:0}.song-row .button.ghost{border:1px solid var(--line);font-size:1.2rem}.golden-chart{width:100%;height:auto}.fill-sing{animation:2.6s linear forwards fill-bar}@keyframes fill-bar{0%{width:0}to{width:100%}}.notes-table{border-collapse:collapse;width:100%;font-size:.9rem}.notes-table th,.notes-table td{text-align:left;border-bottom:1px solid var(--line);padding:6px 8px}.notes-table th{color:var(--muted);font-weight:500}.golden-row td{color:#ffe9bd;background:#ffc8571a}.comfort .row{margin-top:4px}.match{margin:0;font-size:1.1rem;font-weight:600}.match.on{color:var(--good)}.match.off{color:var(--warn)}.auth-form{max-width:420px;margin:24px auto 0}.note{background:var(--panel-2);border-left:3px solid var(--accent);border-radius:10px;margin:0;padding:10px 12px}.plain-list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.invite-code{color:var(--accent);-webkit-user-select:all;user-select:all;font-size:1.1rem}.song-owner{color:var(--muted);font-size:.8rem}.song-text{min-width:0;display:grid}.badge.shared{color:var(--accent-2)}.switch-row{align-items:center;gap:10px;display:flex}.switch-row input{width:20px;height:20px}.match-list li{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:10px;padding:8px 0;display:flex}
