.publish-page,.publish-preview{max-width:760px;color:var(--text)}.publish-title{font-size:var(--fs-h1);margin:0 0 6px;line-height:1.15}.publish-h2{font-size:var(--fs-h2);margin:22px 0 8px}.publish-muted{color:var(--muted);font-size:var(--fs-label);margin:0}.publish-form{gap:var(--gap-card);margin-top:var(--gap-card);display:grid}.publish-field{font-size:var(--fs-label);color:var(--muted);gap:6px;display:grid}.publish-input{border:1px solid var(--control-border);border-radius:var(--radius-sm);background:var(--control-bg);color:var(--text);font:inherit;padding:9px 11px}.publish-input:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.publish-gate{margin-top:var(--gap-card);padding:var(--pad-card);border:1px solid var(--warn-border);border-radius:var(--radius);background:var(--warn-bg);color:var(--warn-fg)}.publish-gate-list{font-size:var(--fs-label);margin:0;padding-left:18px}.publish-actions{margin-top:var(--gap-card);flex-wrap:wrap;align-items:center;gap:12px;display:flex}.publish-button{border:1px solid var(--btn-border);border-radius:var(--radius-sm);background:var(--btn-bg);color:var(--btn-fg);font:inherit;cursor:pointer;padding:9px 16px}.publish-button:hover:not(:disabled){background:var(--btn-bg-hover)}.publish-button:disabled{opacity:.45;cursor:not-allowed}.publish-button-primary{border-color:var(--accent);background:var(--accent);color:var(--accent-fg);font-weight:650}.publish-button:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.publish-status{font-size:var(--fs-status);margin:0}.publish-alert{color:var(--warn-fg);font-size:var(--fs-status);margin:0}.publish-history{margin-top:28px}.publish-version-list{gap:var(--gap-row);margin:0;padding:0;list-style:none;display:grid}.publish-version{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);font-size:var(--fs-label);flex-wrap:wrap;align-items:center;gap:10px;padding:10px 12px;display:flex}.publish-version[data-status=withdrawn]{color:var(--muted);border-style:dashed}.publish-version-state{border:1px solid var(--border-strong);color:var(--muted);font-size:var(--fs-status);border-radius:999px;padding:2px 8px}.publish-version-active{background:var(--accent);color:var(--accent-fg);font-size:var(--fs-status);border-radius:999px;padding:2px 8px;font-weight:650}.publish-facts{margin:var(--gap-card) 0;font-size:var(--fs-label);grid-template-columns:max-content minmax(0,1fr);gap:6px 18px;display:grid}.publish-facts dt{color:var(--muted)}.publish-facts dd{margin:0}.publish-preview-lines{margin:0 0 var(--gap-card);color:var(--muted);font-size:var(--fs-label);padding-left:18px}@media (width<=900px){.publish-title{font-size:26px}.publish-facts{grid-template-columns:minmax(0,1fr)}}@media (prefers-reduced-motion:reduce){.publish-button{transition:none}}.shell{background:var(--canvas);min-height:100vh;color:var(--text);grid-template:"header header""nav main"minmax(0,1fr)"status status"/188px minmax(0,1fr);display:grid}.shell-header{padding:18px var(--pad-shell) 12px;border-bottom:1px solid var(--border);grid-area:header;align-items:baseline;gap:12px;display:flex}.shell-title{font-size:var(--fs-h2);letter-spacing:.01em;margin:0;font-weight:650}.shell-subtitle{color:var(--muted);font-size:var(--fs-label);margin:0}.shell-nav{border-right:1px solid var(--border);background:var(--surface);flex-direction:column;grid-area:nav;gap:4px;padding:16px 12px;display:flex}.shell-nav-link{border-radius:var(--radius-sm);color:var(--muted);font-size:var(--fs-label);border:1px solid #0000;padding:9px 12px;text-decoration:none;display:block}.shell-nav-link:hover{background:var(--surface-2);color:var(--text)}.shell-nav-link[aria-current=page]{background:var(--surface-2);border-color:var(--border-strong);color:var(--text);font-weight:650}.shell-nav-link:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.shell-main{min-width:0;padding:var(--pad-shell);grid-area:main}.shell-placeholder{max-width:560px;padding:var(--pad-card);border:1px dashed var(--border-strong);border-radius:var(--radius);background:var(--surface)}.shell-placeholder-title{font-size:var(--fs-h2);margin:0 0 6px}.shell-placeholder p{color:var(--muted);font-size:var(--fs-label);margin:0}.shell-status{padding:10px var(--pad-shell);border-top:1px solid var(--border);color:var(--muted);font-size:var(--fs-status);grid-area:status;gap:8px;display:flex}@media (width<=900px){.shell{grid-template-columns:minmax(0,1fr);grid-template-areas:"header""nav""main""status"}.shell-nav{border-right:0;border-bottom:1px solid var(--border);flex-flow:wrap}}@media (prefers-reduced-motion:reduce){.shell-nav-link{transition:none}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--canvas:#0f0f13;--surface:#1a1a22;--surface-2:#22222c;--text:#f3f0f8;--muted:#a49dae;--border:#2d2c38;--border-strong:#3d3b4b;--accent:#ffb545;--accent-fg:#241a04;--focus:#ffd479;--btn-bg:#23232e;--btn-bg-hover:#2e2e3c;--btn-fg:#ede9f5;--btn-border:#35343f;--selected-bg:#ffb545;--selected-fg:#1d1503;--warn-bg:#ffb5451f;--warn-fg:#ffcf87;--warn-border:#ffb54557;--control-bg:#15151c;--control-border:#33323f;--radius:14px;--radius-sm:8px;--pad-shell:28px;--pad-card:18px;--gap-card:16px;--gap-row:6px;--nav-max:58vh;--fs:15px;--fs-h1:clamp(26px, 3.2vw, 38px);--fs-h2:16px;--fs-label:13px;--fs-row:13.5px;--fs-status:13px;--font-body:"Inter", ui-sans-serif, system-ui, "PingFang SC", "Microsoft YaHei", sans-serif;--font-display:"Inter", ui-sans-serif, system-ui, "PingFang SC", sans-serif;--track-h1:-.01em;--weight-h1:650;--btn-pad:8px 14px;--row-pad:9px 11px;--control-pad:8px 10px;--shadow:0 18px 44px #0000006b;--tl-bg:#0b0b10;--tl-border:#262634;--tl-grid:#34333f;--tl-target:#ffce6a;--tl-unconfirmed:#ff9ec7;--tl-range:#ffb54524;--tl-cursor:#fff;color:var(--text);font-family:var(--font-body);font-size:var(--fs);-webkit-font-smoothing:antialiased;background:#0f0f13;line-height:1.5}*{box-sizing:border-box}body{background:var(--canvas);min-height:100vh;color:var(--text);margin:0}button,input,select{font:inherit}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--focus);outline-offset:2px}button{color:var(--btn-fg);background:var(--btn-bg);border:1px solid var(--btn-border);border-radius:var(--radius-sm);padding:var(--btn-pad);cursor:pointer;transition:background-color .16s,border-color .16s,color .16s}button:hover:not(:disabled){background:var(--btn-bg-hover);border-color:var(--border-strong)}button:active:not(:disabled){transform:translateY(1px)}button:disabled{opacity:.55;cursor:not-allowed}input:not([type=file]),select{width:100%;color:var(--text);background:var(--control-bg);border:1px solid var(--control-border);border-radius:var(--radius-sm);padding:var(--control-pad);font-variant-numeric:tabular-nums}input:not([type=file]):hover:not(:disabled),select:hover:not(:disabled){border-color:var(--border-strong)}input:disabled,select:disabled{opacity:.55;cursor:not-allowed}input[type=file]{width:100%;color:var(--muted);background:var(--control-bg);border:1px dashed var(--control-border);border-radius:var(--radius-sm);padding:7px 9px}input[type=file]::file-selector-button{border:1px solid var(--btn-border);border-radius:calc(var(--radius-sm) - 2px);background:var(--btn-bg);color:var(--btn-fg);font:inherit;cursor:pointer;margin-right:10px;padding:5px 10px}.teacher-workbench{max-width:1560px;min-height:100vh;padding:var(--pad-shell);margin:auto}.teacher-header{justify-content:space-between;align-items:start;gap:16px;display:flex}.teacher-header h1{font-family:var(--font-display);font-size:var(--fs-h1);font-weight:var(--weight-h1);letter-spacing:var(--track-h1);margin:0;line-height:1.12}.teacher-header p{color:var(--muted);font-size:var(--fs-label);margin:6px 0 0}.teacher-insecure{color:#7a4a00;font-size:var(--fs-status);background:#fff8e6;border:1px solid #f0b429;border-left-width:4px;border-radius:6px;margin:8px 0;padding:10px 12px}.teacher-insecure p{margin:0}.teacher-insecure p+p{margin-top:4px}.teacher-warning{border:1px solid var(--warn-border);background:var(--warn-bg);white-space:nowrap;border-radius:999px;margin:0;padding:6px 12px;color:var(--warn-fg)!important;font-size:var(--fs-status)!important}.teacher-files{align-items:end;gap:var(--gap-card);margin:var(--gap-card) 0;padding:var(--pad-card);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);flex-wrap:wrap;display:flex}.teacher-files label{max-width:320px;color:var(--muted);font-size:var(--fs-label);flex:200px;gap:6px;display:grid}.teacher-files p{color:var(--muted);font-size:var(--fs-status);flex-basis:100%;margin:0}.teacher-columns{align-items:stretch;gap:var(--gap-card);grid-template-columns:minmax(180px,.8fr) minmax(360px,2fr) minmax(260px,1fr);display:grid}.teacher-columns>*{min-width:0;padding:var(--pad-card);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.teacher-columns h2{border-bottom:1px solid var(--border);color:var(--text);font-family:var(--font-display);font-size:var(--fs-h2);letter-spacing:.01em;margin:0 0 12px;padding-bottom:10px;font-weight:620}.teacher-columns p{color:var(--muted);font-size:var(--fs-status)}.teacher-columns nav{align-content:start;gap:var(--gap-row);max-height:var(--nav-max);padding-right:4px;display:grid;overflow:auto}.teacher-columns nav button{width:100%;padding:var(--row-pad);color:inherit;font-size:var(--fs-row);text-align:left;overflow-wrap:anywhere;background:0 0;border-color:#0000;line-height:1.35}.teacher-columns nav .selected{color:var(--selected-fg);background:var(--selected-bg);border-color:var(--selected-bg)}.teacher-transport,.teacher-actions{gap:var(--gap-row);flex-wrap:wrap;margin-bottom:12px;display:flex}.teacher-loop{align-items:end;gap:var(--gap-row);flex-wrap:wrap;margin-bottom:12px;display:flex}.teacher-loop label{max-width:130px;color:var(--muted);font-size:var(--fs-label);gap:4px;display:grid}.teacher-columns fieldset{gap:var(--gap-row);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);min-width:0;margin:14px 0;padding:12px;display:grid}.teacher-columns .teacher-edit-controls{background:0 0;border:0;margin:0;padding:0;display:block}.teacher-columns label{color:var(--muted);font-size:var(--fs-label);gap:4px;display:grid}.calibration-timeline{background:var(--tl-bg);border:1px solid var(--tl-border);border-radius:var(--radius-sm);width:100%;min-height:240px;display:block}.timeline-grid{stroke:var(--tl-grid);stroke-width:1px}.timeline-target{stroke:var(--tl-target);stroke-width:6px}.timeline-unconfirmed{stroke:var(--tl-unconfirmed);stroke-width:5px}.timeline-current-range{fill:var(--tl-range)}.timeline-cursor{stroke:var(--tl-cursor);stroke-width:3px}.teacher-footer{margin-top:var(--gap-card);padding:12px var(--pad-card);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);justify-content:space-between;align-items:center;gap:12px;display:flex}.teacher-files [role=status]{color:var(--text);font-size:var(--fs-status);flex-basis:100%;margin:0}.teacher-files .teacher-hint{color:var(--muted);flex-basis:100%;margin:0;font-size:13px}@media (width<=1100px){.teacher-columns{grid-template-columns:minmax(160px,.7fr) minmax(360px,2fr)}.teacher-columns nav{max-height:40vh}}@media (width<=900px){.teacher-workbench{padding:16px}.teacher-columns{grid-template-columns:1fr}.teacher-header{display:grid}.teacher-files label{max-width:none}.teacher-footer{flex-direction:column;align-items:start}.teacher-warning{white-space:normal}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.teacher-hint,.teacher-timeline-note{color:var(--muted);margin:6px 0 0;font-size:13px}.ktv-preview{--ktv-transport-h:41px;--ktv-stage-bg:#fff;--ktv-panel-bg:#fff;--ktv-panel-text:#111827;--ktv-stage-border:#d1d5db;--ktv-row-dim:#6b7280;--ktv-lyric-guide:#9ca3af;--ktv-lyric-active:#000;--ktv-lyric-active-bg:#fef3c7;--ktv-lyric-done:#6b7280;--ktv-lyric-size:22px;--ktv-lyric-line-gap:12px;--ktv-lyric-pad:10px 14px;--ktv-grid:#e5e7eb;--ktv-grid-strong:#d1d5db;--ktv-target-band:#111;--ktv-target-band-active:#000;--ktv-target-band-active-outline:#111;--ktv-target-band-heuristic:#6b7280;--ktv-bar-label:#fff;--ktv-heuristic-outline:#374151;--ktv-bar-pending:#9ca3af;--ktv-bar-pending-label:#6b7280;--ktv-cursor:#111827;--ktv-playhead:#6b7280;--ktv-cursor-ring:#fff;--ktv-cursor-guide:#11182740;--ktv-hint-color:#4b5563;--ktv-btn-border:#d1d5db;--ktv-btn-bg:#fff;--ktv-btn-bg-hover:#f3f4f6;--ktv-btn-fg:#111827;--ktv-falsetto-band:#8f9cff42;--ktv-chest-band:#ff9ec742;--ktv-breath-mark:#7ee0c0;z-index:40;background:var(--ktv-stage-bg);color:var(--ktv-panel-text);flex-direction:column;gap:12px;padding:18px 22px;display:flex;position:fixed;inset:0;overflow:hidden}.ktv-header{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.ktv-header h2{color:var(--ktv-panel-text);font-size:var(--fs-h2);margin:0}.ktv-hint{color:var(--ktv-hint-color);margin:0;font-size:12.5px}.ktv-fit{flex-direction:column;flex:1;gap:10px;min-height:0;display:flex;position:relative;overflow-y:auto}.ktv-analysis{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.ktv-analysis-pick{color:var(--ktv-panel-text);cursor:pointer;align-items:center;gap:8px;font-size:13px;display:inline-flex}.ktv-analysis-pick input[type=file]{max-width:220px;color:var(--ktv-hint-color);font-size:12.5px}.ktv-analysis-status{color:var(--ktv-hint-color)}.ktv-analysis-error{color:#b91c1c;margin:0;font-size:12.5px}.ktv-analysis-stale{color:#b45309;margin:0;font-size:12.5px}.ktv-deviations{color:var(--ktv-row-dim);margin:0;font-size:12.5px}.ktv-deviations summary{cursor:pointer;color:var(--ktv-panel-text);font-size:12.5px}.ktv-deviations p{margin:4px 0 0}.ktv-edits-io{flex-wrap:wrap;align-items:center;gap:10px;display:inline-flex}.ktv-edits-import{color:var(--ktv-panel-text);cursor:pointer;align-items:center;gap:6px;font-size:13px;display:inline-flex}.ktv-edits-error{color:#b91c1c;margin:0;font-size:12.5px}.ktv-close-confirm{border:1px solid var(--ktv-stage-border);border-radius:var(--radius-sm);background:var(--ktv-lyric-active-bg);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 10px;display:flex}.ktv-close-confirm p{color:var(--ktv-panel-text);margin:0;font-size:13px}.ktv-legend{z-index:1;pointer-events:none;border:1px solid var(--ktv-stage-border);border-radius:var(--radius-sm);max-height:44px;color:var(--ktv-panel-text);background:#ffffffe6;flex-wrap:wrap;align-items:center;gap:4px 10px;padding:4px 8px;font-size:12px;display:flex;position:absolute;top:4px;left:58px;right:8px;overflow-y:auto}.ktv-legend-item{pointer-events:none;align-items:center;gap:4px;display:inline-flex}.ktv-swatch{pointer-events:auto;cursor:pointer;border:1px solid #0003;border-radius:4px;width:16px;height:16px;padding:0}.ktv-legend-item.selected .ktv-swatch{outline:2px solid var(--ktv-lyric-active);outline-offset:1px}.ktv-legend-label{pointer-events:auto;white-space:nowrap;text-overflow:ellipsis;cursor:text;border:1px solid #0000;border-radius:4px;min-width:0;max-width:62px;padding:2px;overflow:hidden}.ktv-legend-label:hover{border-color:var(--ktv-stage-border)}.ktv-legend-input{pointer-events:auto;color:inherit;font:inherit;background:0 0;border:1px solid #0000;border-radius:4px;padding:2px 4px;font-size:12px}.ktv-legend-item .ktv-legend-input{width:62px}.ktv-legend-input:focus{border-color:var(--ktv-stage-border);background:#fff;outline:none}.ktv-breath-toggle{pointer-events:auto;border:1px solid var(--ktv-stage-border);color:inherit;font:inherit;cursor:pointer;background:#fff;border-radius:6px;margin-left:auto;padding:2px 8px;font-size:12px}.ktv-breath-toggle[aria-pressed=true]{border-color:var(--ktv-lyric-active);background:var(--ktv-lyric-active-bg)}@media (width<=900px){.ktv-legend-label,.ktv-legend-input{display:none}}.ktv-ladder{flex:none;align-items:stretch;gap:6px;display:flex;position:relative}.ktv-note-ruler{border:1px solid var(--ktv-stage-border);border-radius:var(--radius-sm);background:var(--ktv-panel-bg);flex:none;width:52px;position:relative;overflow:hidden}.ktv-note-row{color:var(--ktv-row-dim);white-space:nowrap;border-bottom:1px solid #eef0f3;justify-content:flex-end;align-items:center;padding-right:6px;font-size:11px;line-height:1;display:flex;position:absolute;left:0;right:0;overflow:hidden}.ktv-note-row.is-c{color:var(--ktv-row-dim);background:#f3f4f6;font-weight:700}.ktv-timescale{top:var(--ktv-transport-h);z-index:7;background:var(--ktv-stage-bg);border-bottom:1px solid var(--ktv-stage-border);cursor:ew-resize;-webkit-user-select:none;user-select:none;touch-action:none;flex:none;height:20px;margin-left:58px;position:sticky}.ktv-timescale-tick{color:var(--ktv-row-dim);white-space:nowrap;font-size:10px;position:absolute;top:2px;transform:translate(-50%)}.ktv-timescale-tick:before{content:"";background:var(--ktv-stage-border);width:1px;height:6px;position:absolute;top:13px;left:50%}.ktv-stage{border:1px solid var(--ktv-stage-border);border-radius:var(--radius);background:var(--ktv-panel-bg);flex:none;min-width:0;min-height:0;position:relative;overflow:hidden}.ktv-stage canvas{width:100%;height:100%;display:block}.ktv-live-overlay,.ktv-game-overlay{pointer-events:none;position:absolute;inset:0}.ktv-cursor{background-image:radial-gradient(circle, var(--ktv-playhead) 1px, transparent 1.3px);pointer-events:none;will-change:transform;background-repeat:repeat-y;background-size:2px 6px;width:2px;position:absolute;top:0;bottom:0;left:0}.ktv-progress{pointer-events:none;align-items:center;gap:2px;height:8px;margin-top:6px;display:flex;overflow:hidden}.ktv-progress-cell{background:#e5e7eb;border-radius:1px;flex:none;width:8px;height:8px}.ktv-progress-cell.is-played{background:#111827}.ktv-lyrics{gap:var(--ktv-lyric-line-gap);flex-direction:column;flex:none;max-height:82px;padding:6px 2px;display:flex;overflow-y:auto}.ktv-lyric-line{padding:var(--ktv-lyric-pad);border-radius:var(--radius-sm);color:var(--ktv-row-dim);font-size:var(--ktv-lyric-size);border:1px solid #0000;margin:0;line-height:1.35}.ktv-lyric-line[data-current=true]{background:0 0;border-color:#0000}.ktv-unit[data-state=guide]{color:var(--ktv-lyric-guide)}.ktv-unit[data-state=active]{background:var(--ktv-lyric-active-bg);color:var(--ktv-lyric-active);border-radius:3px;font-weight:700}.ktv-unit[data-state=done]{color:var(--ktv-lyric-done)}.ktv-lyric-line[data-line-kind=metadata]{opacity:.55;font-size:.82em;font-style:italic}.ktv-line-metadata{color:#6b7280;white-space:nowrap;margin-left:8px;font-size:11px;font-style:normal}.ktv-line-untrusted{color:#b45309;white-space:nowrap;margin-left:8px;font-size:12px;font-weight:400}.ktv-transport{z-index:8;height:var(--ktv-transport-h);min-height:var(--ktv-transport-h);background:var(--ktv-stage-bg);flex-wrap:nowrap;align-items:center;gap:10px;display:flex;position:sticky;top:0;overflow-x:auto}.ktv-preview button{padding:var(--btn-pad);border:1px solid var(--ktv-btn-border);border-radius:var(--radius-sm);background:var(--ktv-btn-bg);color:var(--ktv-btn-fg);cursor:pointer;font:inherit}.ktv-preview button:hover:not(:disabled){background:var(--ktv-btn-bg-hover)}.ktv-preview button:disabled{opacity:.5}.ktv-notes{color:var(--ktv-hint-color);margin:0;font-size:12.5px}@media (width<=900px){.ktv-preview{padding:12px}.ktv-lyric-line{font-size:18px}}
