:root{--ink:#101828;--muted:#667085;--faint:#98a2b3;--line:#e4e7ec;--line-strong:#d0d5dd;--bg:#f7f8fa;--panel:#fff;--panel-2:#fafbfc;--accent:#2f6fed;--accent-weak:#2f6fed17;--side-bg:#131a26;--side-ink:#e6eaf0;--side-muted:#8b98a9;--side-line:#232c3b;--side-hover:#1c2534;--side-active:#223154;--radius:8px;--shadow-sm:0 1px 2px #1018280d;--shadow:0 1px 3px #1018280f, 0 8px 24px #1018280d}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);margin:0;font:14px/1.6 system-ui,Segoe UI,Microsoft YaHei,sans-serif}button{font:inherit}.card{border:1px solid var(--line);background:#fff;border-radius:8px;padding:16px}.field{margin-bottom:12px;display:block}.field span{color:var(--muted);margin-bottom:4px;display:block}.field input{border:1px solid var(--line);width:100%;font:inherit;border-radius:6px;padding:8px 10px}.primary{background:var(--accent);color:#fff;cursor:pointer;border:0;border-radius:6px;width:100%;padding:9px 12px}.primary:disabled{opacity:.6;cursor:default}.error{color:#b42318;background:#fdecec;border-radius:6px;margin:0 0 12px;padding:8px 10px}.badge{color:#3538cd;background:#eef2ff;border-radius:999px;padding:1px 8px;font-size:12px}.nav{flex-wrap:wrap;gap:8px;display:flex}.nav button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:6px;padding:6px 12px}.nav button:disabled{color:#a5a9b1;cursor:not-allowed;background:#f1f2f4;border-style:dashed}.app{grid-template-columns:248px minmax(0,1fr);min-height:100vh;display:grid}.workspace-col{flex-direction:column;min-width:0;min-height:100vh;display:flex}.sidebar{background:var(--side-bg);color:var(--side-ink);flex-direction:column;height:100vh;display:flex;position:sticky;top:0;overflow-y:auto}.side-brand{border-bottom:1px solid var(--side-line);padding:18px 20px 16px}.side-brand b{letter-spacing:.01em;font-size:15px;font-weight:650;display:block}.side-brand span{color:var(--side-muted);margin-top:2px;font-size:11.5px;display:block}.side-context{border-bottom:1px solid var(--side-line);padding:12px 20px}.side-context .k{letter-spacing:.09em;text-transform:uppercase;color:var(--side-muted);font-size:10.5px}.side-context .v{margin-top:3px;font-size:13.5px;font-weight:600;display:block}.side-context .c{color:var(--side-muted);font-size:11.5px}.side-nav{flex-direction:column;gap:2px;padding:12px 10px;display:flex}.side-group{letter-spacing:.09em;text-transform:uppercase;color:var(--side-muted);margin:10px 10px 6px;font-size:10.5px}.side-nav a,.side-nav button{width:100%;color:var(--side-ink);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:center;gap:9px;padding:8px 10px;font-size:13.5px;text-decoration:none;display:flex}.side-nav a:hover{background:var(--side-hover)}.side-nav a.current{background:var(--side-active);font-weight:600}.side-nav button:disabled{color:#5d6a7d;cursor:not-allowed}.side-nav .step{height:20px;color:var(--side-muted);background:#ffffff12;border-radius:5px;flex:0 0 20px;justify-content:center;align-items:center;font-size:11px;display:flex}.side-nav a.current .step{background:var(--accent);color:#fff}.side-foot{border-top:1px solid var(--side-line);margin-top:auto;padding:14px 20px;font-size:12.5px}.side-foot b{font-weight:600;display:block}.side-foot span{color:var(--side-muted);font-size:11.5px}.topbar{background:var(--panel);border-bottom:1px solid var(--line);z-index:5;justify-content:space-between;align-items:center;gap:16px;height:56px;padding:0 28px;display:flex;position:sticky;top:0}.topbar h1{margin:0;font-size:16px;font-weight:620}h2 .sub{color:var(--muted);font-size:13px;font-weight:500}.topbar .sub{color:var(--faint);margin-left:10px;font-size:12.5px}.shell{align-content:start;gap:14px;max-width:1120px;margin:0 auto;padding:24px 28px 64px;display:grid}.workspace{flex-direction:column;flex:1;min-width:0;max-width:none;margin:0;padding:0;display:flex}.storyboard-layout{flex:1;grid-template-columns:220px minmax(0,1fr);min-height:calc(100vh - 56px);display:grid}.storyboard-body{align-content:start;gap:14px;min-width:0;max-width:1120px;padding:24px 28px 64px;display:grid}.storyboard-body.prod-body{gap:16px;max-width:1280px}.chapter-rail{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;align-self:start;height:calc(100vh - 56px);display:flex;position:sticky;top:56px;overflow:hidden}.chapter-rail-head{border-bottom:1px solid var(--line);flex:none;padding:16px 14px 10px}.chapter-rail-head h2{margin:0 0 8px;font-size:13px;font-weight:650}.chapter-rail-filter{border:1px solid var(--line);background:var(--panel-2);width:100%;color:var(--ink);border-radius:6px;padding:6px 8px}.chapter-rail-list{flex-direction:column;flex:1;gap:2px;min-height:0;padding:8px;display:flex;overflow-y:auto}.chapter-rail-list a{color:var(--ink);border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:7px 8px;font-size:13px;text-decoration:none;display:flex}.chapter-rail-list a:hover{background:var(--panel-2)}.chapter-rail-list a.current{background:var(--accent-weak);color:var(--accent);font-weight:600}.chapter-rail-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.chapter-rail-count{color:var(--muted);font-variant-numeric:tabular-nums;flex:none;font-size:11.5px}.chapter-rail-list a.current .chapter-rail-count{color:inherit}.chapter-rail-hint{color:var(--muted);margin:8px 14px 12px;font-size:12px}.shell.bare{max-width:420px;padding-top:12vh}.page-head{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.page-head h1{margin:0;font-size:18px}.login-brand{text-align:center;margin-bottom:4px}.login-brand b{letter-spacing:-.01em;font-size:24px;font-weight:680;display:block}.login-brand span{color:var(--muted);margin-top:4px;font-size:13px;display:block}.project-list{gap:10px;margin:0;padding:0;list-style:none;display:grid}.project-row{color:inherit;box-shadow:var(--shadow-sm);justify-content:space-between;align-items:center;gap:12px;text-decoration:none;display:flex}a.project-row:hover{border-color:var(--accent);box-shadow:var(--shadow)}.project-row .pl-main{align-items:baseline;gap:10px;min-width:0;display:flex}.project-row.is-disabled{opacity:.6;cursor:not-allowed}@media (max-width:900px){.app{grid-template-columns:1fr}.sidebar{height:auto;position:static}.side-nav{flex-flow:wrap}.side-nav a,.side-nav button{width:auto}.side-group{width:100%}.workspace,.storyboard-layout{grid-template-columns:1fr}.chapter-rail{border-right:0;border-bottom:1px solid var(--line);height:auto;max-height:240px;position:static}}.muted{color:var(--muted)}.nowrap{white-space:nowrap}.wrap{white-space:pre-wrap;word-break:break-word}h2{margin:0 0 8px;font-size:15px}h3{margin:0 0 8px;font-size:14px}.row-between{justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;display:flex}.upload-box{border:1px dashed var(--line);background:#fafbfc;border-radius:8px;margin:16px 0;padding:12px 14px}.upload-box h3{margin:0 0 6px;font-size:15px}.nav-link,.btn{border:1px solid var(--line);color:inherit;background:#fff;border-radius:6px;padding:6px 12px;text-decoration:none;display:inline-block}.nav-link.current{border-color:var(--accent);color:var(--accent);font-weight:600}.tab{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:6px;padding:5px 10px}.tab.current{border-color:var(--accent);color:var(--accent);font-weight:600}button,select,textarea,input{font:inherit}button:not(.primary):not(:disabled){border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:6px;padding:5px 10px}.primary.inline{width:auto;display:inline-block}.inline-field{color:var(--muted);align-items:center;gap:6px;display:inline-flex}.inline-field input,.inline-field select{border:1px solid var(--line);color:#1f2328;border-radius:6px;padding:4px 6px}.grid{border-collapse:collapse;width:100%}.grid th,.grid td{border-top:1px solid var(--line);text-align:left;vertical-align:top;padding:6px 8px}.grid th{color:var(--muted);font-weight:500}.grid .num{text-align:right}.grid tr.editing{background:#f8fafc}.inventory-split{grid-template-columns:1fr 1fr;gap:16px;display:grid}.inventory-scroll{border:1px solid var(--line);border-radius:8px;max-height:420px;overflow:auto}.inventory-scroll.short{max-height:260px}.inventory-scroll tbody tr{cursor:pointer}.inventory-scroll tbody tr.selected,.inventory-scroll tbody tr:hover{background:#f4f7fb}.inventory-detail{border:1px solid var(--line);background:#fafbfc;border-radius:8px;margin-top:12px;padding:10px 12px}.inventory-chips{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.inventory-chips li{border:1px solid var(--line);border-radius:999px;padding:3px 8px;font-size:13px}.inventory-chips li.shared{background:#eef4ff;border-color:#c7d7f5}@media (max-width:900px){.inventory-split{grid-template-columns:1fr}}.grid textarea,.grid input{border:1px solid var(--line);border-radius:6px;width:100%;padding:4px 6px}.choice-editor{flex-direction:column;gap:6px;margin-top:8px;display:flex}.choice-row{grid-template-columns:1fr 1fr auto;align-items:center;gap:6px;display:grid}.prompt-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:6px;display:grid}.asset{border-top:1px solid var(--line);padding:10px 0}.prod-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.prod-stages{gap:6px;display:flex}.prod-hint{margin:10px 0 0}.prod-actions{grid-template-columns:1fr 1fr;gap:10px;margin-top:14px;display:grid}.prod-action{border:1px solid var(--line);background:var(--panel-2);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;display:flex}.prod-action b{font-size:14px;display:block}.prod-action p{color:var(--muted);margin:2px 0 0;font-size:13px}.prod-action-btns{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.prod-chips{max-height:168px;padding:2px;overflow:auto}.prod-filters{flex-wrap:wrap;gap:6px;display:flex}.prod-group{overflow-x:auto}.prod-group+.prod-group{margin-top:18px}.prod-group h3{color:var(--muted);margin:0 0 8px;font-size:13px;font-weight:650}.prod-table{border-collapse:collapse;background:#fff;width:100%}.prod-table th,.prod-table td{border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;padding:9px 10px}.prod-table th{color:var(--muted);background:#fafbfc;font-size:12px;font-weight:600}.prod-table tbody tr:hover{background:#f8fafc}.prod-table .name{font-weight:650}.prod-thumb{object-fit:contain;border:1px solid var(--line);background:#f2f4f7;border-radius:6px;width:48px;height:48px;margin-top:6px;display:block}.prod-table .key{color:var(--faint);margin-top:2px;font-size:12px;font-weight:400;display:block}.prod-table .num{text-align:right;white-space:nowrap;color:var(--muted)}.prod-detail td{background:#f8fafc}.status-pill{border-radius:999px;padding:1px 8px;font-size:12px;font-weight:600;line-height:1.6;display:inline-block}.status-pill.wait{color:#475467;background:#f2f4f7}.status-pill.run{color:#175cd3;background:#eff8ff}.status-pill.ready{color:#5925dc;background:#f4f3ff}.status-pill.ok{color:#067647;background:#ecfdf3}.status-pill.bad{color:#b42318;background:#fef3f2}.status-pill.mute{color:#667085;background:#f2f4f7}.prod-advanced{border:1px solid var(--line);background:#fff;border-radius:10px;padding:4px 14px 12px}.prod-advanced>summary{cursor:pointer;padding:10px 0;font-weight:650;list-style:none}.prod-advanced>summary::-webkit-details-marker{display:none}.prod-advanced>summary:after{content:"展开";float:right;color:var(--muted);font-size:13px;font-weight:500}.prod-advanced[open]>summary:after{content:"收起"}@media (max-width:900px){.prod-actions{grid-template-columns:1fr}}.cand-grid{flex-wrap:wrap;gap:8px;margin:8px 0;display:flex}.cand{border:1px solid var(--line);text-align:center;border-radius:6px;padding:6px}.cand.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.cand img{object-fit:contain;background:#f1f2f4;width:168px;height:300px;display:block}.cand.frame-wide img{width:240px;height:135px}.cand.frame-portrait img{width:168px;height:300px}.cand-foot{margin-top:4px;font-size:12px}.ok{color:#1a7f42;background:#e8f5ec;border-radius:6px;margin:8px 0;padding:8px 10px}.warn{color:#92600a;background:#fff6e5;border-radius:6px;margin:8px 0;padding:8px 10px}.warn-badge{color:#92600a;background:#fff6e5}.cost{color:#3538cd;background:#eef2ff;border-radius:6px;margin:8px 0;padding:8px 10px}.stub{color:#b42318;background:#fdecec;border:1px dashed #b42318;border-radius:6px;padding:2px 8px;display:inline-block}code{font-family:ui-monospace,Consolas,monospace;font-size:12px}.stats{grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px;display:grid}.stat{border:1px solid var(--line);background:#fff;border-radius:8px;padding:10px 12px}.stat b{font-size:20px;font-weight:600;line-height:1.3;display:block}.stat span{color:var(--muted);font-size:12px}.tag{border-radius:999px;margin-right:4px;padding:1px 8px;font-size:12px;display:inline-block}.tag.red{color:#b42318;background:#fdecec}.tag.amber{color:#92600a;background:#fff6e5}.compliance{color:#b42318;background:#fdecec;border:1px solid #b42318;border-left-width:5px;border-radius:6px;margin:0 0 12px;padding:10px 12px}.compliance-extra{margin-top:4px;font-size:13px;display:block}.board{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;display:grid}.board-col{border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 10px}.board-col h3{justify-content:space-between;margin:0;display:flex}.board-item{border-top:1px solid var(--line);padding:6px 0;font-size:13px}.trend{border-bottom:1px solid var(--line);align-items:flex-end;gap:2px;height:44px;display:flex}.trend i{background:var(--accent);opacity:.75;flex:1;min-height:1px}.filters{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:8px;display:flex}.sidebar-light{color:var(--ink);border-right:1px solid var(--line);background:#fff}.sidebar-light .side-brand,.sidebar-light .side-context{border-bottom-color:var(--line)}.sidebar-light .side-brand span,.sidebar-light .side-context .k,.sidebar-light .side-context .c,.sidebar-light .side-group{color:var(--muted)}.sidebar-light .side-nav a,.sidebar-light .side-nav button{color:var(--ink)}.sidebar-light .side-nav a:hover{background:var(--accent-weak)}.sidebar-light .side-nav a.current{background:var(--accent-weak);color:var(--accent)}.sidebar-light .side-nav button:disabled{color:var(--faint)}.sidebar-light .side-nav .step{color:var(--muted);background:#f2f4f7}.step-chip{font-weight:500}.preview-stage{grid-template-columns:240px minmax(0,1fr);align-items:start;gap:16px;display:grid}.preview-scenes h2,.preview-play h2{margin:0 0 8px}.preview-scenes ol{max-height:70vh;margin:0;padding:0;list-style:none;overflow:auto}.preview-scenes li button{text-align:left;cursor:pointer;width:100%;font:inherit;background:0 0;border:0;border-radius:6px;flex-direction:column;padding:8px 10px;display:flex}.preview-scenes li button.current{background:var(--accent-weak)}.preview-frame{color:#f8fafc;background:#111827;border-radius:12px;min-height:280px;margin:12px 0;padding:24px}.preview-speaker{letter-spacing:.08em;text-transform:uppercase;color:#94a3b8;margin:0 0 8px;font-size:12px}.preview-line{margin:0;font-size:18px;line-height:1.7}.preview-sprite{object-fit:contain;filter:drop-shadow(0 8px 18px #00000073);max-height:240px;margin:0 auto 12px;display:block}.preview-choices{flex-direction:column;gap:8px;margin-top:18px;display:flex}.preview-choices button:not(.primary):not(:disabled){color:#f8fafc;cursor:pointer;font:inherit;text-align:left;background:#1e293b;border:1px solid #475569;border-radius:8px;padding:8px 12px}.preview-choices button:hover{border-color:var(--accent)}@media (max-width:840px){.preview-stage{grid-template-columns:1fr}}

/* vn-stage-hotfix-20260915g */
/* vn-stage-hotfix-20260915：半身立绘放大靠下角，分镜 CG 不叠人 */
.shell {
  width: 100%;
}
.preview-stage {
  width: 100% !important;
  min-width: 0 !important;
}
.preview-play.card {
  min-width: 0;
}
.preview-play .preview-frame,
.preview-play .preview-frame.vn-stage {
  position: relative !important;
  display: block !important;
  box-sizing: border-box !important;
  width: 100% !important;
  max-width: 100% !important;
  aspect-ratio: 16 / 9 !important;
  height: auto !important;
  min-height: 0 !important;
  max-height: min(72vh, 720px) !important;
  margin: 12px 0 !important;
  padding: 0 !important;
  overflow: hidden !important;
  border-radius: 4px;
  background-color: #0b0d12 !important;
  background-size: cover !important;
  background-position: center !important;
  color: #f8fafc;
  cursor: pointer;
}

.preview-play .vn-bg,
.preview-play .preview-frame > img.vn-bg {
  position: absolute !important;
  inset: 0 !important;
  z-index: 1 !important;
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  max-width: none !important;
  max-height: none !important;
  margin: 0 !important;
  object-fit: cover !important;
  object-position: center !important;
  pointer-events: none;
}

.preview-play .vn-bg-empty {
  background: radial-gradient(ellipse at 50% 30%, #1a2233 0%, #0b0d12 70%);
}

.preview-play .preview-sprite,
.preview-play .vn-sprite,
.preview-play .preview-frame > img.preview-sprite {
  position: absolute !important;
  left: 0 !important;
  right: auto !important;
  bottom: 0 !important;
  z-index: 2 !important;
  display: block !important;
  width: 46% !important;
  height: 58% !important;
  max-width: none !important;
  max-height: none !important;
  margin: 0 !important;
  transform: scale(1.26) !important;
  transform-origin: left bottom !important;
  object-fit: cover !important;
  object-position: 28% 4% !important;
  filter: drop-shadow(0 12px 28px rgba(0, 0, 0, 0.55));
  pointer-events: none;
}

.preview-play .preview-sprite.is-right,
.preview-play .vn-sprite.is-right,
.preview-play .preview-frame > img.preview-sprite.is-right {
  left: auto !important;
  right: 0 !important;
  transform-origin: right bottom !important;
  object-position: 72% 4% !important;
}

.preview-play .preview-sprite:not(.is-speaking),
.preview-play .vn-sprite:not(.is-speaking) {
  filter: drop-shadow(0 12px 28px rgba(0, 0, 0, 0.55)) brightness(0.78);
}

.preview-play .preview-frame.is-cg .preview-sprite,
.preview-play .preview-frame.is-cg .vn-sprite {
  display: none !important;
}

.preview-play .vn-dialogue {
  position: absolute !important;
  left: 0 !important;
  right: 0 !important;
  bottom: 0 !important;
  z-index: 3 !important;
  margin: 0 !important;
  padding: 16px 22px 18px !important;
  background: linear-gradient(180deg, transparent, rgba(8, 10, 16, 0.55) 18%, rgba(8, 10, 16, 0.88));
}

.preview-play .preview-frame > .preview-speaker,
.preview-play .preview-frame > .preview-line,
.preview-play .preview-frame > .preview-choices,
.preview-play .preview-frame > .error {
  position: relative;
  z-index: 3;
}

.preview-play .preview-speaker {
  margin: 0 0 4px;
  font-size: 13px;
  font-weight: 650;
  letter-spacing: 0.04em;
  text-transform: none;
  color: #fff;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.55);
}

.preview-play .preview-line {
  margin: 0;
  font-size: 17px;
  line-height: 1.7;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
}

.preview-play .preview-choices {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 12px;
}
