/* ============ 短剧生成工场 · 设计系统 v3（Ant/Apple 规范：克制、层级清晰、8px 栅格） ============ */
:root{
  --bg0:#07080d; --bg1:#0b0d14;
  --card:rgba(255,255,255,.028); --card2:rgba(255,255,255,.05);
  --line:rgba(255,255,255,.07); --line2:rgba(255,255,255,.13);
  --text:#eef1f9; --dim:#98a0b4; --faint:#5d6478;
  --acc:#6d5cf5; --acc-h:#7e6ef8;
  --grad:linear-gradient(120deg,#6d5cf5,#4f7df5);
  --grad-text:linear-gradient(100deg,#c9bcff,#8fb6ff);
  --glow:0 4px 16px rgba(109,92,245,.32);
  --ok:#31c48d; --warn:#f0a93b; --err:#f26d6d; --info:#3fa9f5;
  --r-lg:14px; --r-md:10px; --r-sm:8px;
  --mono:ui-monospace,"SF Mono",Menlo,monospace;
}
*{box-sizing:border-box}
html{scrollbar-color:#2a2f42 transparent}
body{
  margin:0;color:var(--text);
  font:14px/1.65 -apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--bg0);
  -webkit-font-smoothing:antialiased;
}
body::before{
  content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(1000px 460px at 12% -10%,rgba(109,92,245,.10),transparent 60%),
    radial-gradient(800px 420px at 100% 0%,rgba(63,169,245,.05),transparent 55%);
}
::selection{background:rgba(109,92,245,.38)}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#262b3d;border-radius:8px;border:2px solid var(--bg0)}
::-webkit-scrollbar-thumb:hover{background:#333a52}

/* ---------- 布局：左侧菜单 + 内容区 ---------- */
#layout{display:flex;min-height:100vh}
#sidebar{
  width:212px;flex:none;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;
  border-right:1px solid var(--line);background:rgba(9,10,16,.6);
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);z-index:20;
}
.brand{display:flex;align-items:center;gap:11px;cursor:pointer;user-select:none;padding:18px 16px 14px}
.brand .logo{width:30px;height:30px;border-radius:8px;background:var(--grad);box-shadow:var(--glow);
  display:flex;align-items:center;justify-content:center;color:#fff;flex:none}
.brand .name{font-size:14.5px;font-weight:700;letter-spacing:.02em;line-height:1.2}
.brand .sub{font-size:9px;color:var(--faint);letter-spacing:.24em}
#nav{flex:1;padding:8px 10px;display:flex;flex-direction:column;gap:2px;overflow-y:auto}
.nav-item{
  display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:9px;cursor:pointer;
  color:var(--dim);font-size:13.5px;font-weight:550;transition:all .15s;user-select:none;
}
.nav-item:hover{background:var(--card2);color:var(--text)}
.nav-item.active{background:rgba(109,92,245,.13);color:#cfc8ff;box-shadow:inset 0 0 0 1px rgba(109,92,245,.28)}
.nav-item .icon{color:inherit;opacity:.85}
.nav-item .navbadge{margin-left:auto;background:rgba(240,169,59,.14);color:var(--warn);
  border-radius:99px;font-size:10.5px;padding:1px 7px;font-family:var(--mono)}
.nav-sep{height:1px;background:var(--line);margin:8px 6px}
#sidefoot{padding:10px 10px 14px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:2px;align-items:stretch}
.sidefoot-link{
  display:flex;align-items:center;gap:8px;padding:7px 12px;border-radius:9px;
  color:var(--dim);font-size:13px;font-weight:550;text-decoration:none;
  transition:background .15s,color .15s;user-select:none
}
.sidefoot-link:hover{background:var(--card2);color:var(--text)}
.userbar{display:flex;align-items:center;padding:8px 12px 2px}
.radio-opt{display:inline-flex;align-items:center;gap:7px;cursor:pointer;font-size:14px;white-space:nowrap;flex-shrink:0}
.radio-opt input{accent-color:#6d5cf5;width:15px;height:15px;margin:0;cursor:pointer;flex-shrink:0}
.radio-row{display:flex;gap:22px;align-items:center;flex-wrap:nowrap}

/* 提示词 @ 参考图（资产生图 / 生视频共用） */
.prompt-box{position:relative;border:1px solid var(--line2);border-radius:10px;background:#0c0e16;overflow:visible}
.prompt-ref-rail{display:flex;gap:6px;flex-wrap:wrap;align-items:center;padding:8px 10px 0}
.prompt-ref-rail.empty{display:none}
.prompt-ref-thumb{width:36px;height:36px;border-radius:8px;overflow:hidden;border:1px solid var(--line2);
  background:#12141d;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}
.prompt-ref-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.prompt-ref-thumb{padding:0;cursor:pointer}
.prompt-ref-upload{border-style:dashed;color:#b3a6ff}
.prompt-ref-thumb:focus-visible,.prompt-ref-chip:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
.prompt-media-preview{width:min(480px,92vw);max-height:90vh;padding:16px;border:1px solid var(--line2);
  border-radius:14px;background:#10121b;color:var(--text);box-shadow:0 24px 80px #0008}
.prompt-media-preview::backdrop{background:rgba(0,0,0,.8)}
.prompt-preview-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px;overflow-wrap:anywhere}
.prompt-preview-audio{display:block;width:100%;margin:24px 0}
.prompt-preview-error{padding:40px;text-align:center;color:var(--dim)}
.prompt-editor{min-height:200px;max-height:48vh;overflow:auto;width:100%;padding:8px 12px 12px;
  border:0;border-radius:0;background:transparent;line-height:1.55;
  white-space:pre-wrap;word-break:break-word;outline:none}
.prompt-editor.compact{min-height:160px;max-height:36vh}
.prompt-box:focus-within{border-color:rgba(109,92,245,.55)}
.prompt-ref-chip{display:inline-flex;align-items:center;gap:5px;vertical-align:middle;
  margin:0 2px;padding:2px 8px 2px 3px;border-radius:999px;background:rgba(109,92,245,.18);
  border:1px solid rgba(109,92,245,.35);font-size:12.5px;line-height:1.2;user-select:none;cursor:pointer}
.prompt-ref-chip img{width:18px;height:18px;border-radius:50%;object-fit:cover}
.prompt-ref-chip.voice{padding-left:6px;background:rgba(56,189,248,.14);border-color:rgba(56,189,248,.4)}
.prompt-ref-chip.voice .icon,.prompt-ref-ico .icon,.prompt-ref-thumb.voice .icon{color:#7dd3fc;flex-shrink:0}
.prompt-ref-ico{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;
  border-radius:6px;background:rgba(56,189,248,.12);flex-shrink:0}
.prompt-ref-group-label{display:inline-flex;align-items:center;gap:6px}
.prompt-ref-thumb.voice,.prompt-ref-thumb.video{display:inline-flex;align-items:center;justify-content:center}
.prompt-ref-thumb.video{width:auto;padding:0 6px 0 8px;gap:6px;color:#cfc8ff;font-size:12px;font-family:var(--mono);
  background:rgba(109,92,245,.14);border-color:rgba(109,92,245,.45)}
.prompt-ref-chip.video{padding-left:6px;background:rgba(109,92,245,.18);border-color:rgba(109,92,245,.5)}
.prompt-ref-chip.video .icon,.prompt-ref-thumb.video .icon{color:#b3a6ff;flex-shrink:0}
.prompt-ref-popup{position:absolute;z-index:5;min-width:200px;max-width:280px;max-height:260px;overflow:hidden;
  display:flex;flex-direction:column;padding:4px;border:1px solid var(--line2);border-radius:10px;background:#161822;
  box-shadow:0 12px 40px rgba(0,0,0,.55)}
.prompt-ref-popup.hidden{display:none}
/* 引用菜单可越过编辑器和分镜边界，避免被下方视频区域裁切。 */
.editor:has(.prompt-box){overflow:visible}
.editor:has(.prompt-box) .editor-bar{border-radius:var(--r-md) var(--r-md) 0 0}
.seg:has(.prompt-ref-popup:not(.hidden)){overflow:visible;z-index:6}
.prompt-ref-search{width:100%;box-sizing:border-box;margin:2px 2px 4px;padding:6px 8px;border-radius:8px;
  border:1px solid var(--line2);background:#0c0e16;color:var(--text);font-size:12.5px;outline:none}
.prompt-ref-search:focus{border-color:rgba(109,92,245,.55)}
.prompt-ref-list{overflow:auto;flex:1;min-height:0}
.prompt-ref-pick{display:flex;align-items:center;justify-content:flex-start;gap:8px;width:100%;text-align:left;
  background:transparent;border:0;color:var(--text);padding:6px 8px;border-radius:8px;cursor:pointer;font-size:13px}
.prompt-ref-pick:hover{background:rgba(109,92,245,.12)}
.prompt-ref-pick img{width:28px;height:28px;border-radius:6px;object-fit:cover;flex-shrink:0}
.prompt-ref-group{justify-content:space-between;font-weight:500}
.prompt-ref-count{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums}
.prompt-ref-back{color:var(--faint);font-size:12.5px}
.prompt-ref-empty{font-size:12px;color:var(--faint);padding:8px}
.prompt-ref-hover{position:fixed;z-index:12000;width:168px;height:168px;padding:5px;pointer-events:none;
  border:1px solid var(--line2);border-radius:12px;background:#161822;
  box-shadow:0 14px 44px rgba(0,0,0,.6)}
.prompt-ref-hover.hidden{display:none}
.prompt-ref-hover img{width:100%;height:100%;object-fit:cover;border-radius:8px;display:block;background:#0c0e16}
main#app{flex:1;min-width:0;max-width:1720px;padding:22px 30px 96px;position:relative;z-index:1}
/* 手动收起的侧栏：与窄屏形态一致，只留图标；有待办的菜单用一个小圆点提示 */
#sidebar.collapsed{width:60px}
#sidebar.collapsed .name,#sidebar.collapsed .sub,#sidebar.collapsed .nav-label,
#sidebar.collapsed .sidefoot-label{display:none}
#sidebar.collapsed .brand{justify-content:center;padding:18px 0 14px}
#sidebar.collapsed .nav-item{justify-content:center;padding:10px 0;position:relative}
#sidebar.collapsed .nav-item .navbadge{position:absolute;top:6px;right:12px;min-width:7px;height:7px;
  padding:0;font-size:0;line-height:0;border-radius:50%;background:var(--warn)}
#sidebar.collapsed #sidefoot{padding:8px 4px 12px;align-items:center}
#sidebar.collapsed .sidefoot-link{justify-content:center;padding:8px 0;font-size:15px}
#sidebar.collapsed .userbar{flex-direction:column;gap:4px;padding:6px 0;align-items:center}
#sidebar.collapsed .userbar .small{margin-left:0!important}
/* 收起按钮在品牌行右上角；收起后品牌竖排，按钮落在图标下方居中 */
.side-toggle{margin-left:auto;width:26px;height:26px;padding:0;flex:none;border-radius:8px;
  background:transparent;border:1px solid var(--line);color:var(--faint)}
.side-toggle:hover{border-color:var(--line2);color:var(--text);background:var(--card2)}
#sidebar.collapsed .brand{flex-direction:column;gap:8px}
#sidebar.collapsed .side-toggle{margin:0}
@media (max-width: 860px){ #sidebar{width:60px} #sidebar .name,#sidebar .sub,#sidebar .nav-label{display:none}
  .nav-item{justify-content:center;padding:10px 0} .nav-item .navbadge{display:none}
  #sidefoot{padding:8px 4px 12px;align-items:center}
  .sidefoot-link{justify-content:center;padding:8px 0;font-size:15px}
  .sidefoot-label{display:none}
  .userbar{flex-direction:column;gap:4px;padding:6px 0;align-items:center}
  .userbar .small{margin-left:0!important} }

/* ---------- 进度矩阵（每集五阶段点阵） ---------- */
.matrix{display:flex;flex-direction:column;gap:4px}
.mrow{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:9px;cursor:pointer}
.mrow:hover{background:var(--card2)}
.mrow .mno{font-family:var(--mono);font-size:12px;color:var(--faint);min-width:32px}
.mrow .mtitle{flex:1;min-width:0;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mdots{display:flex;gap:14px;align-items:center}
.mdot{display:flex;flex-direction:column;align-items:center;gap:2px;width:38px}
.mdot i{width:10px;height:10px;border-radius:50%;background:#2a2f42}
.mdot.on i{background:var(--ok);box-shadow:0 0 6px rgba(45,212,167,.5)}
.mdot.part i{background:var(--warn)}
.mdot.err i{background:var(--err,#f66);box-shadow:0 0 6px rgba(255,102,102,.5)}
.mdot span{font-size:9.5px;color:var(--faint);transform:scale(.92)}
.mdot .mnum{font-size:9.5px;color:var(--dim);font-family:var(--mono)}
.hidden{display:none!important}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.grow{flex:1;min-width:0}
.dim{color:var(--dim)} .faint{color:var(--faint)} .small{font-size:12px}
.mono{font-family:var(--mono)}
h2{font-size:18px;margin:0;font-weight:700}
h3{font-size:14.5px;margin:0;font-weight:650}
a{color:#9db4ff}
@keyframes fadeUp{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
#app>*{animation:fadeUp .14s ease-out both}
#app.no-anim>*{animation:none}

/* 切页进度条：旧内容保持可见，顶部细条示意加载中 */
#pagebar{position:fixed;top:0;left:0;right:0;height:2px;z-index:99;pointer-events:none;
  background:var(--grad);transform:scaleX(0);transform-origin:0 50%;opacity:0;
  transition:opacity .2s}
#pagebar.on{opacity:1;animation:pagebar 1.2s cubic-bezier(.2,.6,.3,1) infinite}
@keyframes pagebar{0%{transform:scaleX(0)}60%{transform:scaleX(.7)}100%{transform:scaleX(.98)}}

/* 页头（Ant PageHeader 模式：面包屑 + 标题行 + 右侧操作） */
.crumbs{display:flex;gap:7px;align-items:center;font-size:12px;color:var(--faint);margin:2px 0 10px}
.crumbs a{color:var(--dim);text-decoration:none}
.crumbs a:hover{color:var(--text)}
.page-head{display:flex;gap:12px;align-items:center;margin-bottom:20px;flex-wrap:wrap}
.page-head .title{font-size:21px;font-weight:700;letter-spacing:.01em}
.page-head .page-search{width:220px;height:32px;box-sizing:border-box;padding:0 12px}
.sec-label{display:flex;gap:8px;align-items:center;font-size:12px;color:var(--faint);
  letter-spacing:.16em;margin:26px 0 12px}
.sec-label::after{content:"";flex:1;height:1px;background:var(--line)}

/* ---------- 卡片 ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:20px;margin-bottom:16px;transition:border-color .2s,transform .2s,box-shadow .2s}
.card.hover:hover{border-color:rgba(109,92,245,.4);box-shadow:0 6px 24px rgba(0,0,0,.32);transform:translateY(-2px);cursor:pointer}
.card-head{display:flex;gap:9px;align-items:center;margin-bottom:14px}
.card-head .icon{color:var(--acc)}
.card-head .actions{display:flex;gap:8px;margin-left:auto}
.script-card:not(.open) .card-head{margin-bottom:0}
.script-toggle{padding:0 6px;color:var(--faint)}
.script-toggle .icon{color:var(--faint);transition:transform .22s}
.script-card.open .script-toggle .icon{transform:rotate(180deg)}

/* ---------- 图标 ---------- */
.icon{display:inline-flex;align-items:center;justify-content:center;flex:none}
.icon svg{display:block}

/* ---------- 按钮（Ant 尺寸体系：默认 32px / 小 26px） ---------- */
button{
  display:inline-flex;align-items:center;gap:6px;justify-content:center;
  background:var(--card2);color:var(--text);border:1px solid var(--line2);
  border-radius:var(--r-sm);padding:0 14px;height:32px;cursor:pointer;
  font-size:13px;font-weight:550;font-family:inherit;white-space:nowrap;
  transition:all .16s ease;
}
button:hover{border-color:rgba(109,92,245,.55);color:#cfc8ff}
button:active{transform:scale(.98)}
button.primary{background:var(--grad);border:none;color:#fff;font-weight:640;box-shadow:var(--glow)}
button.primary:hover{filter:brightness(1.1);color:#fff}
button.danger{color:var(--err);border-color:rgba(242,109,109,.3);background:rgba(242,109,109,.05)}
button.danger:hover{border-color:rgba(242,109,109,.6);color:var(--err)}
button.danger.solid{background:#d5544f;border:none;color:#fff}
button.ghost{background:transparent;border-color:transparent;color:var(--dim)}
button.ghost:hover{color:var(--text);background:var(--card2);border-color:transparent}
button.sm{height:26px;padding:0 10px;font-size:12px;border-radius:7px}
button:disabled{opacity:.45;cursor:not-allowed;transform:none}

/* ---------- 表单（Ant 纵向表单） ---------- */
input,select,textarea{
  background:rgba(0,0,0,.3);color:var(--text);border:1px solid var(--line2);
  border-radius:var(--r-sm);padding:7px 12px;font-size:13px;font-family:inherit;
  transition:border-color .16s,box-shadow .16s;
}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--acc);box-shadow:0 0 0 3px rgba(109,92,245,.15)}
input::placeholder,textarea::placeholder{color:var(--faint)}
textarea{width:100%;resize:vertical;line-height:1.7}
textarea.code{font-family:var(--mono);font-size:12.3px;line-height:1.66;background:rgba(0,0,0,.4)}
select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--dim) 50%),linear-gradient(135deg,var(--dim) 50%,transparent 50%);
  background-position:calc(100% - 15px) 55%,calc(100% - 10px) 55%;background-size:5px 5px;background-repeat:no-repeat;padding-right:28px}
.form-item{margin-bottom:16px}
.form-item>label{display:block;font-size:12.5px;color:var(--dim);margin-bottom:6px;font-weight:550}
.form-item>label .req{color:var(--err);margin-left:3px;font-weight:700}
.form-item .hint{font-size:11.5px;color:var(--faint);margin-top:5px}
.form-item input:not([type=radio]):not([type=checkbox]),.form-item select,.form-item textarea{width:100%}
.form-item .selbox{width:100%;display:block}
/* 分镜、编译两个 Skill 选择并排；只出现一个时占满整行 */
.skill-pick-pair{display:flex;gap:12px}
.skill-pick-pair>.form-item{flex:1 1 0;min-width:0}

/* ---------- 徽章 / 状态 ---------- */
.badge{display:inline-flex;align-items:center;gap:6px;background:var(--card2);border:1px solid var(--line);
  border-radius:999px;padding:2px 11px;font-size:12px;color:var(--dim)}
.badge.warn{color:var(--warn);border-color:rgba(240,169,59,.3)}
.chip{display:inline-flex;align-items:center;gap:5px;background:var(--card2);border:1px solid var(--line);
  border-radius:6px;padding:1px 8px;font-size:11.5px;color:var(--dim);margin:1px 2px}
.chip.ok{color:var(--ok);border-color:rgba(49,196,141,.3);background:rgba(49,196,141,.07)}
.chip.warn{color:var(--warn);border-color:rgba(240,169,59,.3);background:rgba(240,169,59,.07)}
.chip.err{color:var(--err);border-color:rgba(242,109,109,.3);background:rgba(242,109,109,.07)}
.chip.accent{color:#b3a6ff;border-color:rgba(109,92,245,.35);background:rgba(109,92,245,.09)}
.chip.info{color:var(--info);border-color:rgba(63,169,245,.3);background:rgba(63,169,245,.07)}
.dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.dot.pulse{animation:pulse 1.4s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.45}}

/* ---------- 进行中横幅（刷新后可恢复的任务状态） ---------- */
.ep-work-banners .opbar{margin:0 0 10px}
.opbar{display:flex;gap:10px;align-items:center;border:1px solid rgba(109,92,245,.3);
  background:rgba(109,92,245,.07);border-radius:var(--r-md);padding:10px 14px;margin:10px 0;font-size:13px}
.opbar .spin{color:#b3a6ff}
.opbar b{color:#cfc8ff;font-weight:640}
.opbar .note{color:var(--dim)}
.opbar .track{height:3px;border-radius:99px;background:rgba(255,255,255,.08);overflow:hidden;flex:1;min-width:90px}
.opbar .track i{display:block;height:100%;width:38%;background:var(--grad);border-radius:99px;animation:indet 1.3s ease-in-out infinite}

/* ---------- 步骤条（Ant Steps） ---------- */
.stepper{display:flex;align-items:flex-start;margin:2px 0 22px}
.step{display:flex;align-items:center;gap:10px;cursor:pointer;padding:6px 10px;border-radius:10px}
.step:hover{background:var(--card2)}
.step .num{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:12.5px;font-weight:700;background:var(--card2);border:1px solid var(--line2);color:var(--faint);flex:none}
.step .t1{font-size:13px;font-weight:620;color:var(--faint);line-height:1.3}
.step .t2{font-size:11px;color:var(--faint)}
.step.done .num{background:rgba(49,196,141,.13);border-color:rgba(49,196,141,.4);color:var(--ok)}
.step.done .t1{color:var(--dim)}
.step.active .num{background:var(--grad);border:none;color:#fff;box-shadow:var(--glow)}
.step.active .t1{color:var(--text)} .step.active .t2{color:var(--dim)}
.step-line{flex:1;height:1px;background:var(--line2);margin:19px 6px 0;min-width:24px;max-width:90px}
.step-line.done{background:rgba(49,196,141,.45)}

/* ---------- Tab（分段控制） ---------- */
.tabbar{display:inline-flex;gap:4px;padding:3px;background:rgba(0,0,0,.28);border:1px solid var(--line);
  border-radius:10px;margin:0 0 18px}
.tabbar .tab{border:none;background:transparent;color:var(--dim);padding:0 18px;height:30px;border-radius:8px;font-weight:600}
.tabbar .tab:hover{color:var(--text);border-color:transparent}
.tabbar .tab.active{background:var(--card2);color:var(--text);box-shadow:0 1px 6px rgba(0,0,0,.3)}
.asset-tabs .tab.active{background:rgba(109,92,245,.16);color:#d8d0ff;
  box-shadow:inset 0 0 0 1px rgba(109,92,245,.30)}

/* ---------- 表格（Ant Table） ---------- */
table{width:100%;border-collapse:collapse;font-size:13px}
th{color:var(--faint);font-weight:600;font-size:11.5px;letter-spacing:.06em;text-align:left;
  padding:9px 12px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.018)}
th:first-child{border-radius:8px 0 0 0} th:last-child{border-radius:0 8px 0 0}
/* 可排序表头：沿用表头字号颜色，按钮只作可点区域 */
th .th-sort{height:auto;padding:0;border:0;background:none;color:inherit;font:inherit;letter-spacing:inherit;gap:4px}
th .th-sort:hover,th .th-sort.on{color:var(--text);background:none;border-color:transparent}
.th-sort-arrow{font-size:11px;opacity:.5}
th .th-sort.on .th-sort-arrow{opacity:1;color:var(--acc)}
td{padding:10px 12px;border-bottom:1px solid rgba(255,255,255,.045);vertical-align:middle}
tr:last-child td{border-bottom:none}
/* 列表类表格：标签、时间、数字、ID 不换行，长文字单行截断（cell-clip）或最多两行（cell-clamp），
   截断的内容用 hoverTip 看全文；放不下时外层 table-scroll 横向滚动，不把列挤扁。 */
.table-scroll{overflow-x:auto}
.data-table .chip,.data-table td.mono,.data-table .nowrap{white-space:nowrap}
.data-table .cell-clip{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.data-table .cell-clamp{overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
/* 固定列宽：列宽不随本页内容变化。表头给除长文字列外的每列定宽，长文字列分剩余宽度；
   表格设 min-width，窄屏时横向滚动而不是把长文字列压没。 */
.data-table.fixed-cols{table-layout:fixed}
.data-table.fixed-cols .cell-clamp{overflow-wrap:anywhere}
.data-table tr.clickable{cursor:pointer}
.data-table tr.clickable:hover td{background:rgba(255,255,255,.028)}
.hover-tip{position:fixed;z-index:12000;max-width:480px;padding:8px 11px;border-radius:9px;border:1px solid var(--line2);
  background:#161824;color:var(--text);font-size:12.5px;line-height:1.6;white-space:pre-wrap;word-break:break-word;
  box-shadow:0 14px 44px rgba(0,0,0,.55);pointer-events:none}
tr.click{cursor:pointer;transition:background .14s}
tr.click:hover td{background:rgba(109,92,245,.05)}
table input,table textarea{background:transparent;border-color:transparent;padding:5px 8px}
table input:hover,table textarea:hover{border-color:var(--line2)}
table input:focus,table textarea:focus{background:rgba(0,0,0,.35);border-color:var(--acc)}
.storyboard-shots td{vertical-align:top;padding:12px 10px}
.storyboard-shots th{padding:9px 10px;white-space:nowrap}
.storyboard-shots input,.storyboard-shots textarea{background:#0c0f18;border:1px solid rgba(255,255,255,.18);
  border-radius:8px;padding:8px 10px;transition:border-color .15s,box-shadow .15s;cursor:text}
.storyboard-shots input{min-height:36px}
.storyboard-shots textarea{display:block;min-height:96px;resize:vertical;line-height:1.6}
.storyboard-shots input::placeholder,.storyboard-shots textarea::placeholder{color:#858da2}
.storyboard-shots input:hover,.storyboard-shots textarea:hover{border-color:rgba(255,255,255,.32)}
.storyboard-shots input:focus,.storyboard-shots textarea:focus{background:#101321;border-color:var(--acc);
  box-shadow:0 0 0 3px rgba(109,92,245,.17);outline:none}
.shot-dialogue{display:flex;align-items:flex-start;gap:8px;min-width:0}
.shot-dialogue-meta{flex:0 0 132px;width:132px;display:flex;flex-direction:column;gap:6px}
.shot-dialogue-meta .selbox{width:100%;min-width:0}
.shot-dialogue textarea{flex:1;min-width:0}
.storyboard-shots .shot-add-dialogue{border:1px dashed var(--line2);padding:8px 12px;min-height:36px}
.storyboard-shots td > .selbox{min-width:80px;width:100%}
.storyboard-shots .sel-btn{min-height:36px;border-color:rgba(255,255,255,.18);background:#0c0f18}
.shot-order{display:flex;align-items:center;gap:6px;min-height:36px}
.shot-drag-handle,.seg-drag-handle{display:inline-flex;align-items:center;justify-content:center;width:24px;height:32px;padding:0;
  border:1px solid transparent;border-radius:6px;background:transparent;color:var(--dim);cursor:grab;font-size:22px;user-select:none}
.shot-drag-handle:hover:not(:disabled),.seg-drag-handle:hover:not(:disabled){border-color:var(--line2);background:rgba(109,92,245,.12);color:#c5bbff}
.shot-drag-handle:active,.seg-drag-handle:active{cursor:grabbing}
.shot-drag-handle:disabled,.seg-drag-handle:disabled{opacity:.25;cursor:default}
.shot-drag-handle:focus-visible,.seg-drag-handle:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
.seg-drag-handle{height:26px;margin-left:-8px}
.shot-dragging,.seg-dragging{opacity:.45}
.shot-drop-before > td{box-shadow:inset 0 2px var(--acc)}
.shot-drop-after > td{box-shadow:inset 0 -2px var(--acc)}
/* 段拖动的落点：卡片外沿一条线，卡片自身 overflow:hidden 不影响外阴影 */
.segment-list [data-move-keys].seg-drop-before{box-shadow:0 -3px 0 var(--acc)}
.segment-list [data-move-keys].seg-drop-after{box-shadow:0 3px 0 var(--acc)}

/* ---------- 网格 ---------- */
.grid{display:grid;gap:14px}
.grid.cols3{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.grid.cols2{grid-template-columns:repeat(auto-fill,minmax(430px,1fr))}

/* ---------- 首页 ---------- */
.hero{padding:18px 4px 14px}
.hero h1{margin:0;font-size:26px;font-weight:800;
  background:var(--grad-text);-webkit-background-clip:text;background-clip:text;color:transparent}
.hero p{margin:6px 0 0;color:var(--dim);font-size:13.5px}
.proj-card{position:relative}
.proj-card .arrow{position:absolute;right:16px;top:18px;color:var(--faint);transition:all .2s}
.proj-card:hover .arrow{color:#b3a6ff;transform:translateX(3px)}
.proj-card .pname{font-size:15px;font-weight:700;margin-right:52px;line-height:1.45}
.proj-meta{display:flex;gap:14px;margin-top:12px;color:var(--faint);font-size:12px;align-items:center}
.proj-meta b{color:var(--dim);font-family:var(--mono);font-weight:600}

/* ---------- 上传区 ---------- */
.uploadzone{border:1.5px dashed rgba(255,255,255,.16);border-radius:var(--r-md);padding:26px;text-align:center;
  color:var(--dim);cursor:pointer;transition:all .2s;background:rgba(0,0,0,.14);
  display:flex;flex-direction:column;align-items:center;gap:8px}
.uploadzone:hover,.uploadzone.drag{border-color:rgba(109,92,245,.55);color:var(--text);background:rgba(109,92,245,.05)}
button.drag,.prompt-box.drag{box-shadow:inset 0 0 0 1.5px rgba(109,92,245,.7)}
.uploadzone .icon{color:var(--acc)}
.filecell{display:flex;gap:12px;align-items:center;background:rgba(0,0,0,.22);border:1px solid var(--line);
  border-radius:var(--r-md);padding:12px 16px}
.filecell .fname{font-weight:640}

/* ---------- 段卡片 ---------- */
.seg{position:relative;border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:10px;
  background:var(--card);overflow:hidden;transition:border-color .2s}
.seg::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--seg-color,#454c63)}
.seg[data-state="ready"]{--seg-color:#4f7df5}
.seg[data-state="active"]{--seg-color:var(--warn)}
.seg[data-state="done"]{--seg-color:var(--ok)}
.seg[data-state="failed"]{--seg-color:var(--err)}
.seg:hover{border-color:var(--line2)}
.seg-head{display:flex;gap:8px;align-items:center;padding:12px 16px 12px 18px;cursor:pointer;flex-wrap:wrap;user-select:none}
.seg-no{min-width:34px;height:23px;padding:0 8px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--mono);font-size:12px;font-weight:700;color:#c9c0ff;
  background:rgba(109,92,245,.12);border:1px solid rgba(109,92,245,.3)}
.seg-head .chev{margin-left:auto;color:var(--faint);transition:transform .22s}
.seg.open .chev{transform:rotate(180deg)}
.seg-body{padding:2px 18px 18px;border-top:1px solid var(--line)}
.seg-prog{position:absolute;left:0;right:0;bottom:0;height:2px;overflow:hidden}
.seg-prog i{display:block;height:100%;width:40%;background:var(--grad);border-radius:2px;animation:indet 1.3s ease-in-out infinite}
@keyframes indet{0%{transform:translateX(-110%)}100%{transform:translateX(320%)}}

/* 提示词编辑器 */
.editor{border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;background:rgba(0,0,0,.36);margin-top:12px}
.editor-bar{display:flex;gap:8px;align-items:center;padding:6px 12px;background:rgba(255,255,255,.028);border-bottom:1px solid var(--line)}
.editor-bar .title{font-size:12px;color:var(--dim);font-weight:600;display:flex;gap:7px;align-items:center}
.editor textarea{border:none;border-radius:0;background:transparent;display:block}
.editor textarea:focus{box-shadow:none}

/* ---------- 资产 ---------- */
.lookimg{width:100px;height:133px;object-fit:cover;border-radius:10px;border:1px solid var(--line);
  background:#0a0b10;cursor:zoom-in;transition:transform .18s,border-color .18s}
.lookimg:hover{transform:scale(1.03);border-color:rgba(109,92,245,.5)}
.lookimg.empty{display:flex;align-items:center;justify-content:center;color:var(--faint);font-size:11px;cursor:default}
.lookimg.empty:hover{transform:none;border-color:var(--line)}
.character-header{display:flex;gap:16px;align-items:stretch}
.character-summary{flex:1;min-width:0;overflow-wrap:anywhere;display:flex;flex-direction:column}
.character-headshot{flex:none;width:112px}
.headshot-img,.headshot-placeholder{width:112px;height:132px;border-radius:10px}
.headshot-img{display:block;object-fit:cover;object-position:center}
.headshot-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:8px;background:rgba(109,92,245,.06);border:1px dashed var(--line2);color:var(--faint);font-size:11px;line-height:1.4}
.headshot-actions{display:flex;justify-content:center;gap:2px;margin-top:5px}
.headshot-actions .sm{padding:3px 7px;font-size:11px;white-space:nowrap}
@media(max-width:480px){.character-header{gap:10px}
  .character-headshot{width:92px}.headshot-img,.headshot-placeholder{width:92px;height:112px}
  .headshot-actions .sm{padding:3px 4px}}
.lookbox{display:flex;flex-direction:column;gap:4px;align-items:center;width:124px}
/* 妆造/时段格子下的操作行：「换图 ▾」加「依据」一行放下 */
.asset-img-actions{display:flex;gap:4px;justify-content:center}
.asset-img-actions .sm{padding:0 7px}
.asset-img-actions .sm,.headshot-actions .sm{gap:3px}
.look-image{position:relative;line-height:0}
.look-image .look-delete{position:absolute;top:5px;right:5px;z-index:1;width:24px;height:24px;
  min-height:0;padding:0;display:flex;align-items:center;justify-content:center;border-radius:50%;
  color:#fff;background:rgba(15,17,24,.82);border:1px solid rgba(255,255,255,.3);box-shadow:0 1px 5px rgba(0,0,0,.3)}
.look-image .look-delete:hover{background:#b83d49;border-color:#eb7b86}
.look-image .look-delete:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* ---------- 视频 ---------- */
.videobox video{width:100%;max-width:300px;border-radius:var(--r-md);border:1px solid var(--line);background:#000;display:block}
.editor.seg-prompt-video{display:flex;flex-direction:column}
.seg-prompt-video-body{display:flex;flex-wrap:wrap;align-items:flex-start;min-width:0}
.seg-prompt-main{flex:1 1 420px;min-width:min(420px,100%);border-right:1px solid var(--line)}
.editor.seg-prompt-video .prompt-box{border:none;border-radius:0}
.editor.seg-prompt-video .prompt-editor{min-height:160px;max-height:380px}
.seg-video-col{flex:0 0 236px;width:236px;max-width:100%;display:flex;flex-direction:column;gap:8px;padding:10px}
.seg-video-frame{position:relative;width:100%}
.seg-video-col video{width:100%;aspect-ratio:9/16;object-fit:contain;border-radius:8px;border:1px solid var(--line);background:#000;display:block}
.seg-video-actions{position:absolute;top:8px;left:50%;transform:translateX(-50%);z-index:2;display:flex;gap:6px;
  opacity:0;pointer-events:none}
.seg-video-actions button{white-space:nowrap;box-shadow:0 4px 14px rgba(0,0,0,.35)}
.seg-video-frame:hover .seg-video-actions,.seg-video-actions:has(.busy){opacity:1;pointer-events:auto}
/* 首帧上的播放遮罩：与回收站卡片相同，悬停时出现，点视频任意位置都打开放大弹层 */
.seg-video-frame video{cursor:pointer}
.seg-video-over{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;border-radius:8px;
  background:rgba(0,0,0,.45);opacity:0;transition:opacity .15s;pointer-events:none}
.seg-video-frame:hover .seg-video-over{opacity:1}
.seg-video-over .fbtn{pointer-events:auto}
@media (hover:none){.seg-video-actions{opacity:1;pointer-events:auto}}
/* 视频编辑弹层：固定尺寸、内部不滚动。左侧只放预览，右侧分「截取片段 / 编辑提示词」两个区块。
   选择器带 .modal 前缀：通用 .modal 规则在本文件更靠后，同优先级会覆盖单类选择器。 */
.modal.video-edit-modal{max-width:min(1280px,94vw);width:min(1280px,94vw);height:min(860px,92vh);max-height:none;
  display:flex;flex-direction:column;overflow:hidden}
.modal.video-edit-modal>h3,.modal.video-edit-modal>.foot{flex:none}
.video-edit-body{flex:1;min-height:0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:24px;margin-top:6px}
.video-edit-left{min-height:0;height:100%;display:flex;justify-content:center}
.video-edit-left video{height:100%;width:auto;max-width:42vw;aspect-ratio:9/16;object-fit:contain;
  border-radius:10px;border:1px solid var(--line);background:#000;display:block}
.video-edit-right{min-width:0;min-height:0;display:flex;flex-direction:column;gap:14px}
.video-edit-section{display:flex;flex-direction:column;gap:10px;padding:14px 16px;border:1px solid var(--line);
  border-radius:var(--r-md);background:var(--card)}
.video-edit-section h4{margin:0;display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600}
.video-edit-step{width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  font-size:12px;font-family:var(--mono);color:#c9c0ff;background:rgba(109,92,245,.16);border:1px solid rgba(109,92,245,.35)}
.video-edit-prompt{flex:1;min-height:0}
.video-edit-prompt .prompt-box{flex:1;min-height:0;display:flex;flex-direction:column}
.video-edit-prompt .prompt-editor{flex:1;min-height:120px;max-height:none;overflow:auto}
.clip-scale{display:flex;justify-content:space-between;margin-top:-6px}
.clip-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.clip-track{position:relative;height:28px}
.clip-track-base{position:absolute;left:0;right:0;top:12px;height:4px;border-radius:2px;background:var(--line2)}
.clip-track-fill{position:absolute;top:12px;height:4px;border-radius:2px;background:#6d5cf5}
.clip-range,.clip-range:focus{position:absolute;left:0;top:0;width:100%;height:28px;margin:0;padding:0;border:none;border-radius:0;
  background:none;box-shadow:none;outline:none;pointer-events:none;-webkit-appearance:none;appearance:none}
.clip-range::-webkit-slider-runnable-track{background:transparent;height:28px}
.clip-range::-webkit-slider-thumb{pointer-events:auto;-webkit-appearance:none;appearance:none;width:14px;height:14px;margin-top:7px;border-radius:50%;
  background:#b3a6ff;border:2px solid #14102a;cursor:ew-resize}
.clip-range::-moz-range-track{background:transparent;height:28px}
.clip-range::-moz-range-thumb{pointer-events:auto;width:14px;height:14px;border-radius:50%;background:#b3a6ff;border:2px solid #14102a;cursor:ew-resize}
.clip-field{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--dim)}
.clip-field input{width:64px}
.seg-ver-tabs{display:flex;flex-wrap:wrap;gap:4px}
.seg-ver-tab{min-width:28px;height:22px;padding:0 7px;border-radius:6px;border:1px solid var(--line);
  background:transparent;color:var(--dim);font-family:var(--mono);font-size:11px;font-weight:650;cursor:pointer}
.seg-ver-tab:hover{border-color:var(--line2);color:var(--text)}
.seg-ver-tab.on{background:rgba(109,92,245,.16);border-color:rgba(109,92,245,.45);color:#cfc8ff}
.seg-adopt-bar{display:flex;align-items:center;gap:6px;min-height:26px;flex-wrap:nowrap}
.seg-adopt-bar .grow{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.seg-video-dl{width:26px;height:26px;padding:0;display:inline-flex;align-items:center;justify-content:center;
  text-decoration:none;flex-shrink:0}
.seg-adopt-bar .chip,.seg-adopt-bar .sm{flex-shrink:0}

/* ---------- 进度条 ---------- */
.pbar{height:6px;border-radius:99px;background:rgba(255,255,255,.07);overflow:hidden;flex:1;min-width:120px}
.pbar i{display:block;height:100%;border-radius:99px;background:var(--grad);transition:width .5s ease}

/* ---------- toast ---------- */
#toasts{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:9px;z-index:80}
.toast{display:flex;gap:10px;align-items:flex-start;background:rgba(17,19,29,.94);border:1px solid var(--line2);
  border-radius:var(--r-md);padding:11px 15px;max-width:400px;font-size:13px;
  backdrop-filter:blur(14px);box-shadow:0 12px 40px rgba(0,0,0,.5);
  animation:toastIn .28s cubic-bezier(.2,.8,.3,1.05) both}
@keyframes toastIn{from{opacity:0;transform:translateX(22px)}to{opacity:1;transform:none}}
.toast .t-ic{margin-top:1px;color:var(--acc)}
.toast.ok .t-ic{color:var(--ok)} .toast.err .t-ic{color:var(--err)}

/* ---------- 弹窗 ---------- */
.busy-overlay{position:fixed;inset:0;z-index:75;display:flex;align-items:center;justify-content:center;
  background:rgba(4,5,9,.55);backdrop-filter:blur(6px);animation:maskIn .18s ease both}
.busy-box{display:flex;flex-direction:column;align-items:center;gap:14px;color:var(--text);
  font-size:14px;font-weight:550}
.busy-box .spin{width:22px;height:22px;border-width:2.5px}
.busy-text{max-width:320px;text-align:center;line-height:1.5}
.modal-mask{position:fixed;inset:0;background:rgba(4,5,9,.62);display:flex;align-items:center;justify-content:center;
  z-index:60;padding:20px;backdrop-filter:blur(6px);animation:maskIn .18s ease both}
@keyframes maskIn{from{opacity:0}to{opacity:1}}
.modal{background:#12141d;border:1px solid var(--line2);border-radius:16px;
  padding:22px 24px;max-width:720px;width:100%;max-height:86vh;overflow:auto;
  box-shadow:0 24px 80px rgba(0,0,0,.55);
  animation:modalIn .22s cubic-bezier(.2,.8,.25,1.08) both}
.asset-archive-modal{max-width:840px;max-height:92vh;display:flex;flex-direction:column;overflow:hidden;
  padding-bottom:0}
.asset-create-modal .form-item{margin-bottom:11px}
.asset-create-modal .form-item>label{margin-bottom:4px}
.asset-archive-modal>h3{flex:none}
.asset-archive-modal .modal-body{flex:1;min-height:0;overflow:auto;padding-right:2px}
.asset-archive-modal .foot{flex:none;margin:0 -24px 0;padding:14px 24px 18px;
  background:#12141d}
.asset-archive-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
@keyframes modalIn{from{opacity:0;transform:scale(.95) translateY(8px)}to{opacity:1;transform:none}}
.modal h3{margin:0 0 16px;font-size:15.5px;display:flex;gap:9px;align-items:center}
.modal h3 .icon{color:var(--acc)}
.modal h3 .modal-title-note{flex:1;min-width:0;margin-left:8px;font-weight:400;line-height:1.5}
.modal .foot{display:flex;gap:8px;justify-content:flex-end;margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}
.new-project-modal{max-height:calc(100dvh - 32px);padding:16px 22px}
.new-project-modal h3{margin-bottom:10px}
.new-project-modal .form-item{margin-bottom:10px}
.new-project-modal .form-item>label{margin-bottom:4px}
.new-project-modal .uploadzone{display:flex;flex-direction:row;align-items:center;justify-content:center;gap:12px;padding:10px!important}
.new-project-modal .foot{margin-top:10px;padding-top:10px}
.resolution-panel{padding:14px;margin:0 0 14px;border:1px solid var(--line2);border-radius:10px;display:flex;flex-direction:column;gap:10px}
.resolution-panel.hidden{display:none}
.resolution-panel .form-item{margin-bottom:0}
.resolution-rule-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.resolution-range{display:inline-flex;align-items:center;gap:6px;font-size:12px}
.resolution-range input{width:82px;min-width:0}
.resolution-rules{display:flex;flex-direction:column;gap:10px}
.resolution-error{font-size:12px;color:#f48c9d;margin-top:4px}
.resolution-error:empty{display:none}
.resolution-range input[aria-invalid="true"]{border-color:#f48c9d}
.resolution-panel>button{align-self:flex-start}
@media(max-width:480px){.resolution-panel{padding:10px}.resolution-range input{width:62px}.resolution-rule-controls{gap:8px}}

/* overflow:hidden 是为了让圆角裁住顶部渐变，所以正文必须自己滚：
   条目多到超过 max-height 时，整块被裁掉会把「我知道了」一起吃掉，而本弹窗不可点遮罩关闭。 */
.modal.update-modal{
  max-width:520px;padding:0;overflow:hidden;display:flex;flex-direction:column;
  background:linear-gradient(180deg,rgba(109,92,245,.16),#12141d 132px)}
.modal.update-modal>h3{
  flex:none;margin:0;padding:20px 24px 0;font-size:11px;letter-spacing:.18em;font-weight:700;
  color:#b7a8ff;text-transform:none}
.modal.update-modal>h3 .icon{color:#b7a8ff}
.modal.update-modal .update-title{
  flex:none;padding:8px 24px 0;font-size:20px;font-weight:720;letter-spacing:-.02em;line-height:1.35}
.modal.update-modal .update-meta{flex:none;padding:8px 24px 0;font-size:12px;color:var(--dim)}
.modal.update-modal .update-body{flex:1;min-height:0;overflow:auto;padding:16px 24px 6px}
.modal.update-modal .foot{flex:none;margin:0;padding:14px 24px 18px;align-items:center;gap:16px}

.update-kicker{font-size:11px;letter-spacing:.18em;font-weight:700;color:#b7a8ff}
.update-title{font-size:18px;font-weight:720;letter-spacing:-.02em;line-height:1.35}
.update-meta{margin-top:6px;font-size:12px;color:var(--dim)}
.update-body{margin-top:4px}
.update-body h4{margin:16px 0 8px;font-size:13.5px;color:#cfc8ff;font-weight:650}
.update-body h4.lv1{font-size:15px;color:var(--text)}
.update-body h4.lv2{font-size:13.5px}
.update-body h4.lv3{font-size:12.5px;color:var(--dim)}
.update-body p{margin:0 0 10px;color:var(--text);line-height:1.7}
.update-body ul{margin:0 0 12px;padding:0;list-style:none}
.update-body li{position:relative;padding:8px 0 8px 20px;border-bottom:1px solid var(--line);line-height:1.6}
.update-body li:last-child{border-bottom:none}
.update-body li::before{content:"";position:absolute;left:0;top:15px;width:7px;height:7px;border-radius:50%;
  background:var(--acc);box-shadow:0 0 0 3px rgba(109,92,245,.16)}
.update-body strong{color:#fff;font-weight:650}
.update-preview{margin-top:4px;padding:18px 18px 12px;border:1px solid var(--line2);border-radius:14px;
  background:linear-gradient(180deg,rgba(109,92,245,.10),rgba(18,20,29,.4) 42%,#12141d)}
.update-preview-label{font-size:12.5px;color:var(--dim);font-weight:550;margin:4px 0 8px}
.update-empty{color:var(--faint);font-size:13px;padding:18px 0}
.notice-composer-foot{display:flex;align-items:center;gap:12px;margin-top:14px}
.update-more{
  display:inline-block;font-size:13px;font-weight:550;
  color:#b7a8ff;text-decoration:none;border-bottom:1px solid rgba(183,168,255,.35)}
.update-more:hover{color:#d8d0ff;border-bottom-color:#d8d0ff}
.update-preview-foot{display:flex;justify-content:flex-end;margin-top:10px}

/* ---------- 其他 ---------- */
.spin{display:inline-block;width:13px;height:13px;border:2px solid currentColor;opacity:.9;
  border-top-color:transparent;border-radius:50%;animation:sp .8s linear infinite;vertical-align:-2px;flex:none}
@keyframes sp{to{transform:rotate(360deg)}}
.warnlist{color:var(--warn);font-size:12px;margin:8px 0;padding-left:18px;line-height:1.8}
.notice{display:flex;gap:9px;align-items:flex-start;background:rgba(63,169,245,.06);border:1px solid rgba(63,169,245,.18);
  border-radius:var(--r-sm);padding:9px 13px;font-size:12.5px;color:var(--dim);margin:10px 0}
.notice .icon{color:var(--info);margin-top:1px}
.notice.warn{background:rgba(240,169,59,.06);border-color:rgba(240,169,59,.2)}
.notice.warn .icon{color:var(--warn)}
.notice.err{background:rgba(242,109,109,.06);border-color:rgba(242,109,109,.2);color:#f3b4b4}
.notice.err .icon{color:var(--err)}
img.zoomed{position:fixed;inset:0;margin:auto;max-width:92vw;max-height:92vh;z-index:90;
  border-radius:14px;box-shadow:0 20px 90px #000;cursor:zoom-out;animation:modalIn .2s ease both}
.empty{display:flex;flex-direction:column;align-items:center;gap:10px;padding:38px 20px;color:var(--faint)}
.empty .icon{color:#3a4157}
.skel{border-radius:10px;background:linear-gradient(100deg,rgba(255,255,255,.04) 30%,rgba(255,255,255,.085) 50%,rgba(255,255,255,.04) 70%);
  background-size:200% 100%;animation:shimmer 1.3s infinite}
@keyframes shimmer{to{background-position:-200% 0}}

/* 迷你流水线 */
.pipeline{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:0 0 16px}
.pl-node{display:inline-flex;gap:7px;align-items:center;padding:4px 12px;border-radius:999px;
  border:1px solid var(--line);background:var(--card);font-size:12px;color:var(--faint);cursor:pointer}
.pl-node:hover{border-color:var(--line2)}
.pl-node.done{color:var(--ok);border-color:rgba(49,196,141,.3);background:rgba(49,196,141,.05)}
.pl-node.active{color:var(--text);border-color:rgba(109,92,245,.45);background:rgba(109,92,245,.09)}
.pl-sep{color:var(--faint);opacity:.5}

/* ---------- 成片方格与播放大窗（08-24） ---------- */
.filmgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(185px,1fr));gap:14px;margin-top:12px}
.filmcell{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--card2)}
.filmcell .fwrap{position:relative;background:#000}
.filmcell video{width:100%;aspect-ratio:9/16;object-fit:cover;display:block}
.filmcell .fover{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:12px;
  background:rgba(0,0,0,.5);opacity:0;transition:opacity .15s}
.filmcell .fwrap:hover .fover{opacity:1}
.fbtn{width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,.4);background:rgba(0,0,0,.55);
  color:#fff;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0}
.fbtn:hover{background:var(--acc);border-color:transparent}
.filmcell .fmeta{padding:8px 10px}
.player-mask{position:fixed;inset:0;background:rgba(0,0,0,.74);z-index:70;display:flex;align-items:center;
  justify-content:center;backdrop-filter:blur(5px)}
.player-box{display:flex;width:min(1240px,95vw);height:min(880px,93vh);background:#0e1017;
  border:1px solid var(--line2);border-radius:16px;overflow:hidden;
  animation:modalIn .22s cubic-bezier(.2,.8,.25,1.08) both}
.player-box .pv{flex:1;background:#000;display:flex;align-items:center;justify-content:center;min-width:0}
.player-box .pv video{max-width:100%;max-height:100%;height:100%}
.player-box .pinfo{width:290px;flex:none;padding:20px;overflow:auto;border-left:1px solid var(--line)}
.player-action{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:38px;padding:0 14px;box-sizing:border-box;
  border:1px solid var(--line);border-radius:10px;
  background:transparent;color:#9db4ff;text-decoration:none;
  font:inherit;font-size:13px;font-weight:550;line-height:1;white-space:nowrap;cursor:pointer;
  transition:border-color .16s,color .16s,background .16s;
}
.player-action:hover{border-color:rgba(109,92,245,.55);color:#cfc8ff;background:var(--card2)}
.player-action:focus{outline:none}
.player-action:active{transform:scale(.98)}
.player-action:disabled{opacity:.45;cursor:not-allowed;transform:none}
.vrow{display:flex;align-items:center;gap:8px;padding:9px 11px;border:1px solid var(--line);
  border-radius:10px;margin-bottom:8px;cursor:pointer}
.vrow:hover{border-color:var(--line2)}
.vrow.active{border-color:var(--acc);background:rgba(109,92,245,.09)}
.player-box{position:relative}
.pclose{position:absolute;top:12px;right:12px;z-index:2;width:34px;height:34px;border-radius:50%;
  border:1px solid var(--line2);background:rgba(0,0,0,.5);color:var(--dim);
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0}
.pclose:hover{color:#fff;border-color:transparent;background:var(--acc)}
/* 段视频放大播放：右栏放提示词，比成片播放器的信息栏宽；提示词随右栏整体滚动 */
.player-box.take-player .pinfo{width:min(520px,45%)}
.take-player-title{font-weight:700;font-size:16px;padding-right:36px}
.take-player-versions{margin-top:10px}
.take-player-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.take-player-tags:empty{display:none}
.take-player-prompts{display:flex;flex-direction:column;gap:16px}
.take-prompt{display:flex;flex-direction:column;gap:8px}
.take-prompt-head{display:flex;align-items:center;gap:8px}
.take-prompt-title{font-size:13px;font-weight:650}
.prompt-editor.take-prompt-text{min-height:0;max-height:none;overflow:visible;padding:10px 12px;
  border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.filmcell.selon{outline:2px solid var(--acc);outline-offset:-2px}
.fcheck{position:absolute;top:8px;left:8px;width:26px;height:26px;border-radius:50%;
  border:2px solid rgba(255,255,255,.75);background:rgba(0,0,0,.45);color:#fff;
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px}
.fcheck.on{background:var(--acc);border-color:var(--acc)}
.epgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:6px;margin-bottom:12px}
.epbtn{height:32px;border-radius:8px;border:1px solid var(--line);background:transparent;
  color:var(--dim);font-weight:650;cursor:pointer;padding:0}
.epbtn:hover{border-color:var(--line2);color:var(--text)}
.epbtn.active{background:var(--acc);border-color:var(--acc);color:#fff}

/* ---------- 通用下拉组件（08-25：全后台统一美化+搜索） ---------- */
.selbox{position:relative;display:inline-block;min-width:110px;vertical-align:middle}
.sel-btn{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;
  background:rgba(0,0,0,.25);border:1px solid var(--line);border-radius:9px;color:var(--text);
  padding:7px 11px;cursor:pointer;font-size:13px;text-align:left}
.sel-btn:hover{border-color:var(--line2)}
.sel-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sel-label.faint{color:var(--faint)}
.sel-arrow{color:var(--faint);font-size:10px;flex:none}
.sel-pop{position:fixed;z-index:120;max-width:330px;background:#161824;border:1px solid var(--line2);
  border-radius:11px;box-shadow:0 14px 44px rgba(0,0,0,.55);padding:6px;max-height:300px;
  display:flex;flex-direction:column;animation:modalIn .14s ease-out both}
.sel-pop.hidden{display:none}
.sel-search{width:100%;margin-bottom:6px;background:rgba(0,0,0,.32);border:1px solid var(--line);
  border-radius:8px;color:var(--text);padding:6px 10px;font-size:12.5px;outline:none}
.sel-search:focus{border-color:var(--acc)}
.sel-list{overflow-y:auto;flex:1}
.sel-opt{padding:7px 11px;border-radius:7px;cursor:pointer;font-size:13px;color:var(--dim);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sel-opt:hover{background:rgba(255,255,255,.06);color:var(--text)}
.sel-opt.on{color:#b3a6ff;background:rgba(109,92,245,.13);font-weight:600}
.sel-empty{padding:12px;color:var(--faint);font-size:12.5px;text-align:center}
.sel-image-preview{position:fixed;z-index:121;width:208px;max-width:calc(100vw - 16px);
  max-height:calc(100vh - 16px);overflow:hidden;pointer-events:none;padding:7px;
  border:1px solid var(--line2);border-radius:12px;background:#161824;box-shadow:0 14px 44px rgba(0,0,0,.55)}
.sel-preview-picture{height:232px;max-height:calc(100vh - 90px);border-radius:7px;background:#0c0e16;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--faint);font-size:12px}
.sel-preview-picture img{display:block;width:100%;height:100%;object-fit:contain;border-radius:7px}
.sel-preview-label{padding:8px 4px 2px;font-size:13px;line-height:1.5;color:var(--text);overflow-wrap:anywhere}

/* ---------- 统一筛选栏 ---------- */
.filter-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 12px;margin-bottom:14px}
.filter-bar .grow{flex:1 1 0;min-width:0}
.filter-bar .page-search{width:220px;height:32px;box-sizing:border-box;padding:0 12px}
.filter-status{flex-wrap:wrap;gap:8px}
.filter-dates{display:inline-flex;align-items:center;gap:6px}
.filter-dates .datebox{width:132px}
@media (max-width:720px){
  .filter-bar .grow{display:none}
  .filter-bar .page-search{width:100%}
}

/* ---------- 成本看板 ---------- */
.cost-filters{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) auto;gap:12px 14px;
  padding:14px 16px;margin-bottom:16px;border-radius:var(--r-lg);
  background:var(--card);border:1px solid var(--line);
}
.cost-filt-item{display:flex;flex-direction:column;gap:6px;min-width:0}
.cost-filt-reset{align-self:end}
.cost-filt-item label{font-size:11px;color:var(--faint);letter-spacing:.04em}
.cost-filt-item .selbox{width:100%;min-width:0;display:block}
.cost-filt-item .sel-btn{width:100%}
.cost-date-range{display:flex;align-items:center;gap:6px;min-width:0}
.cost-date-range .datebox{flex:1;min-width:0}
.cost-date-sep{flex:none;color:var(--faint);font-size:12px}
.datebox{display:block;min-width:0}
.datebox .sel-btn{width:100%}
.date-pop{
  position:fixed;z-index:120;width:288px;box-sizing:border-box;
  background:#161824;border:1px solid var(--line2);
  border-radius:11px;box-shadow:0 14px 44px rgba(0,0,0,.55);padding:12px;
  animation:modalIn .14s ease-out both;
}
.date-pop.hidden{display:none}
.date-pop-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.date-pop-title{font-weight:700;font-size:13.5px}
.date-nav{
  width:28px;height:28px;border:0;border-radius:8px;background:transparent;
  color:var(--text);cursor:pointer;font-size:16px;line-height:1;
  padding:0;flex:none;
}
.date-nav:hover{background:rgba(255,255,255,.06)}
.date-dow{
  display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px;margin-bottom:4px;
  font-size:11px;color:var(--faint);
}
.date-dow span{
  min-width:0;height:22px;display:flex;align-items:center;justify-content:center;
}
.date-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px}
.date-cell{
  width:100%;min-width:0;height:32px;padding:0;border:0;border-radius:8px;
  background:transparent;color:var(--text);cursor:pointer;font-size:12.5px;
  font-variant-numeric:tabular-nums;
  display:flex;align-items:center;justify-content:center;
}
.date-cell:hover{background:rgba(255,255,255,.06)}
.date-cell.dim{color:var(--faint)}
.date-cell.off,.date-cell.off:hover{color:var(--faint);opacity:.35;cursor:not-allowed;background:transparent}
.date-nav.off,.date-nav.off:hover{opacity:.3;cursor:not-allowed;background:transparent}
.date-cell.today{box-shadow:inset 0 0 0 1px rgba(109,92,245,.45)}
.date-cell.on{background:rgba(109,92,245,.28);color:#cfc8ff;font-weight:700}
.date-pop-foot{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  margin-top:10px;padding-top:8px;border-top:1px solid rgba(255,255,255,.06);
}
.date-foot-btn{
  border:0;background:transparent;color:#b3a6ff;cursor:pointer;font-size:12.5px;
  padding:4px 0;width:100%;text-align:center;
}
.date-foot-btn:hover{color:#fff}
@media (max-width:820px){
  .cost-filters{grid-template-columns:repeat(2,minmax(0,1fr))}
}
.cost-hero{
  display:grid;grid-template-columns:minmax(0,1.15fr) minmax(280px,1fr);gap:8px 28px;
  padding:18px 20px 16px;margin-bottom:16px;align-items:center;
}
.cost-hero-title{font-size:13px;color:var(--dim);margin-bottom:8px}
.cost-hero-total{
  font-size:36px;font-weight:750;letter-spacing:.01em;line-height:1.15;margin-bottom:16px;
  background:var(--grad-text);-webkit-background-clip:text;background-clip:text;color:transparent;
}
.cost-substats{
  display:flex;flex-wrap:wrap;gap:0;align-items:stretch;
  border-top:1px solid var(--line);padding-top:12px;
}
.cost-substat{padding:2px 16px 2px 0;margin-right:16px;border-right:1px solid var(--line);min-width:72px}
.cost-substat:last-child{border-right:none;margin-right:0}
.cost-substat .num{font-size:15px;font-weight:700;line-height:1.3}
.cost-substat .lab{font-size:11.5px;color:var(--faint);margin-top:2px}
.cost-hero-right{display:flex;align-items:center;gap:20px;justify-content:flex-end;min-width:0}
.cost-donut{position:relative;width:140px;height:140px;flex:none}
.cost-donut svg{display:block}
.cost-donut-center{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  pointer-events:none;text-align:center;padding:12px;
}
.cost-donut-center .lab{font-size:11px;color:var(--faint)}
.cost-donut-center .val{font-size:14px;font-weight:700;margin-top:2px;font-variant-numeric:tabular-nums}
.cost-dist-legend{flex:1;min-width:0;max-width:260px}
.cost-dist-row{
  display:grid;grid-template-columns:minmax(0,1.2fr) 52px minmax(72px,auto);
  gap:10px;align-items:center;padding:9px 0;border-bottom:1px solid rgba(255,255,255,.05);
  font-size:12.5px;
}
.cost-dist-row:last-child{border-bottom:none}
.cost-dist-row .name{display:inline-flex;align-items:center;gap:7px;color:var(--dim);min-width:0}
.cost-dist-row .pct{color:var(--faint);text-align:right}
.cost-dist-row .amt{font-weight:650;text-align:right}
.cost-dist-row.dimmed{opacity:.45}
@media (max-width:900px){
  .cost-hero{grid-template-columns:1fr}
  .cost-hero-right{justify-content:flex-start}
  .cost-hero-total{font-size:30px}
}
.cost-kpi-row{display:none}
.cost-kpi{display:none}
.cost-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:none}
.cost-panel{margin:0}
.cost-legend{display:flex;flex-wrap:wrap;gap:12px;margin:4px 0 14px;font-size:12px;color:var(--dim)}
.cost-legend span{display:inline-flex;align-items:center;gap:6px}
.cost-trend{position:relative;width:100%;height:200px;margin-top:2px}
.cost-trend svg{display:block;width:100%;height:200px}
.cost-trend-tip{position:absolute;z-index:2;pointer-events:none;max-width:calc(100% - 16px);
  box-sizing:border-box;padding:10px 12px;border:1px solid var(--line2);border-radius:10px;
  background:#171923;color:var(--text);box-shadow:0 6px 24px rgba(0,0,0,.35);font-size:12px;line-height:1.5}
.cost-trend-tip[hidden]{display:none}
.cost-trend-tip-date{color:var(--dim);margin-bottom:6px}
.cost-trend-tip-row{display:flex;align-items:center;justify-content:space-between;gap:22px;margin-top:3px}
.cost-trend-tip-row span{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.cost-trend-tip-row b{white-space:nowrap}
.cost-belong-head,.cost-proj-child{
  display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding:12px 8px;border-bottom:1px solid rgba(255,255,255,.04);border-radius:8px;
}
.cost-belong-head{cursor:pointer}
.cost-belong-head:hover,.cost-proj-child:hover{background:var(--card2)}
.cost-belong-head.open{background:rgba(109,92,245,.08)}
.cost-proj-child{cursor:pointer;padding-left:18px}
.cost-belong-main{display:inline-flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}
.cost-belong-metrics{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.cost-caret{width:14px;color:var(--faint);font-size:12px;flex:none}
.cost-indent{width:22px;display:inline-block;flex:none}
.cost-spend-split{
  display:grid;grid-template-columns:minmax(260px,320px) minmax(0,1fr);
  gap:18px;align-items:start;margin-top:4px;
}
.cost-belong-rail{
  display:flex;flex-direction:column;gap:10px;padding:2px 4px 2px 0;
}
.cost-spend-split .cost-proj-chart{
  border-top:none;padding:0 4px 0 0;
  max-height:min(720px,74vh);overflow:auto;
}
.cost-kpi-card{
  padding:14px 14px 12px;border-radius:12px;cursor:pointer;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.06);
  transition:border-color .15s, background .15s;
}
.cost-kpi-card:hover{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.12)}
.cost-kpi-card.on{
  background:rgba(109,92,245,.1);border-color:rgba(109,92,245,.4);
  box-shadow:inset 0 0 0 1px rgba(109,92,245,.15);
}
.cost-kpi-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.cost-kpi-name{font-weight:700;font-size:15px}
.cost-kpi-sub{font-size:12px;color:var(--dim);margin-top:2px}
.cost-kpi-amt{font-size:26px;font-weight:750;letter-spacing:.01em;margin:10px 0 8px;line-height:1.15}
.cost-kpi-foot{display:flex;gap:14px;font-size:12px;color:var(--dim);margin-bottom:10px}
.cost-kpi-foot em{font-style:normal;font-weight:700;color:var(--text);margin-right:4px;font-variant-numeric:tabular-nums}
.cost-kpi-share{height:4px}
.cost-kpi-ring{position:relative;width:52px;height:52px;flex:none;color:#f0a93b;cursor:help}
.cost-kpi-ring.ok{color:#31c48d}
.cost-kpi-ring.mid{color:#f0a93b}
.cost-kpi-ring.low{color:#f26d6d}
.cost-kpi-ring svg{display:block}
.cost-kpi-ring-val{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:10.5px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--text);
}
.cost-tip-float{
  position:fixed;transform:translateX(-50%);
  padding:7px 10px;border-radius:8px;z-index:200;
  background:#161824;border:1px solid rgba(255,255,255,.14);
  color:var(--text);font-size:12px;font-weight:600;line-height:1.35;
  box-shadow:0 10px 28px rgba(0,0,0,.5);
  opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity .12s ease;
  white-space:nowrap;
}
.cost-tip-float.on{opacity:1;visibility:visible}
.cost-tip-float::after{
  content:"";position:absolute;left:50%;bottom:100%;
  transform:translateX(-50%);
  border:5px solid transparent;border-bottom-color:#161824;
}
.cost-proj-chart{
  padding:12px 4px 2px;border-top:1px solid rgba(255,255,255,.06);
}
.cost-proj-chart-head{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
.cost-proj-bar{padding:8px 4px;border-radius:8px}
.cost-proj-bar.click{cursor:pointer;transition:background .14s}
.cost-proj-bar.click:hover{background:rgba(109,92,245,.05)}
.cost-proj-bar-top{display:flex;justify-content:space-between;gap:12px;align-items:baseline;margin-bottom:6px}
.cost-proj-bar-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;
  color:inherit;text-decoration:none}
.cost-proj-bar.click:hover .cost-proj-bar-name{color:#cfc8ff}
.cost-proj-bar-meta{display:flex;align-items:center;gap:10px;margin-top:5px;font-size:12px;color:var(--dim)}
.cost-proj-bar-meta em{font-style:normal;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}
.cost-proj-bar-meta .rate{font-weight:700;font-variant-numeric:tabular-nums;margin-left:auto;cursor:help}
.cost-proj-bar-meta .rate.ok{color:#7ee0b3}
.cost-proj-bar-meta .rate.mid{color:#f0a93b}
.cost-proj-bar-meta .rate.low{color:#f26d6d}
.cost-bar{
  height:8px;border-radius:99px;background:rgba(255,255,255,.06);overflow:hidden;
}
.cost-bar i{display:block;height:100%;border-radius:99px;background:var(--grad)}
.cost-spend-empty{padding:10px 12px}
.cost-proj-row{
  display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr) auto;gap:14px;align-items:center;
  padding:12px 8px;border-bottom:1px solid rgba(255,255,255,.04);cursor:pointer;border-radius:8px;
}
.cost-proj-row:hover{background:var(--card2)}
.cost-proj-name{font-weight:650;margin-bottom:6px}
.cost-proj-meta{display:flex;flex-wrap:wrap;gap:6px}
.cost-proj-kinds{display:flex;flex-wrap:wrap;gap:8px}
.cost-kind-pill{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--dim)}
.cost-proj-total{font-size:16px;font-weight:700;min-width:72px;text-align:right}
@media (max-width:820px){
  .cost-proj-row{flex-direction:column;align-items:flex-start}
  .cost-proj-total{text-align:left}
  .cost-kpi-amt{font-size:22px}
  .cost-spend-split{grid-template-columns:1fr}
  .cost-spend-split .cost-proj-chart{max-height:min(480px,60vh)}
}

.segment-list-box{position:relative}
/* 导航宽 54px，右沿要让开段标题栏最左的拖动手柄 */
.seg-jump{position:absolute;left:-50px;top:0;bottom:0;z-index:7;pointer-events:none}
.seg-jump-inner{position:sticky;top:16px;display:flex;flex-direction:column;align-items:center;gap:2px;
  width:54px;max-height:calc(100vh - 32px);overflow:hidden;padding:6px 3px;border-radius:10px;
  background:rgba(12,14,22,.92);border:1px solid var(--line);box-shadow:0 8px 24px rgba(0,0,0,.35);
  opacity:0;transform:translateX(-8px);transition:opacity .16s ease,transform .16s ease;pointer-events:none;
  scrollbar-width:thin}
.storyboard-editor:hover .seg-jump-inner,.storyboard-editor:focus-within .seg-jump-inner{
  opacity:1;transform:none;pointer-events:auto}
.seg-jump-item{width:24px;min-height:22px;padding:0;border:0;border-radius:6px;background:transparent;
  color:var(--dim);font-family:var(--mono);font-size:11px;font-weight:650;cursor:pointer;flex-shrink:0}
.seg-jump-item:hover{background:rgba(109,92,245,.18);color:#cfc8ff}
.seg-jump-items{display:flex;flex-direction:column;align-items:center;gap:2px;min-height:0;overflow:auto;scrollbar-width:thin}
.seg-jump-episode{width:44px;min-height:26px;white-space:nowrap;font-family:inherit}
.seg-jump-episode:disabled{opacity:.3;cursor:default;background:transparent;color:var(--dim)}
@media (hover:none){.seg-jump-inner{opacity:1;transform:none;pointer-events:auto}}
.segment-list > .seg{margin-bottom:0}
.segment-insert{height:22px;position:relative;display:flex;align-items:center;justify-content:center}
.segment-insert::before{content:'';position:absolute;left:0;right:0;height:1px;background:var(--acc);opacity:0;transition:opacity .12s}
.segment-insert-button{position:relative;display:flex;align-items:center;justify-content:center;gap:5px;
  height:22px;min-width:22px;padding:0 5px;border:1px solid var(--acc);border-radius:12px;
  background:#161824;color:#c5bbff;opacity:0;transition:opacity .12s;cursor:pointer;font-size:11px}
.segment-insert-label{display:none}
.segment-insert:hover::before,.segment-insert:focus-within::before,
.segment-insert:hover .segment-insert-button,.segment-insert:focus-within .segment-insert-button{opacity:1}
.segment-insert:hover .segment-insert-label,.segment-insert:focus-within .segment-insert-label{display:inline}
.segment-insert-button:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
@media (hover:none){.segment-insert-button{opacity:1}}
.segment-fields { display:flex; flex-wrap:wrap; gap:12px; margin-top:12px; align-items:center; }
.segment-fields > label { display:flex; flex-direction:column; gap:5px; font-size:12px; }
.segment-fields > label.row { flex-direction:row; }
.storyboard-editor[data-dirty="1"] { border-color:var(--accent, #8b7aff); }

.segment-fields .selbox, .segment-cast .selbox { min-width:140px; max-width:100%; }
.segment-cast { display:flex; flex-direction:column; align-items:flex-start; gap:8px; margin-top:6px; }
.segment-cast-row { flex-wrap:wrap; }

.sel-btn:focus-visible { outline:2px solid var(--acc); outline-offset:2px; }
.sel-btn[aria-expanded="true"] { border-color:var(--acc); }
.sel-btn[aria-expanded="true"] .sel-arrow { transform:rotate(180deg); }
.sel-list { min-height:0; overscroll-behavior:contain; }
.sel-opt { display:flex; align-items:center; gap:12px; }
.sel-option-label { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; }
.sel-check { flex:none; color:#b3a6ff; }
.sel-opt.focused { background:rgba(109,92,245,.18); color:var(--text); }
.searchable-select .sel-opt { white-space:normal; overflow-wrap:anywhere; line-height:1.5; }
.searchable-select .sel-search { flex:none; padding:9px 11px; }
.segment-fields .selbox { min-width:180px; }
.segment-cast .selbox { min-width:150px; }

.zoom-viewer{position:fixed;inset:0;z-index:90;display:flex;align-items:center;justify-content:center;
  padding:24px;background:rgba(4,5,9,.72);backdrop-filter:blur(8px);animation:maskIn .18s ease both}
.zoom-box{position:relative;display:flex;flex-direction:column;gap:12px;padding:18px 44px 14px 16px;
  border-radius:16px;background:#12141d;border:1px solid var(--line2);box-shadow:0 24px 80px rgba(0,0,0,.55);
  max-width:min(1100px,94vw);max-height:92vh}
.zoom-close{position:absolute;top:10px;right:10px;z-index:2;width:28px;height:28px;min-height:0;padding:0;
  display:flex;align-items:center;justify-content:center;border-radius:50%;color:#fff;
  background:rgba(15,17,24,.82);border:1px solid rgba(255,255,255,.3)}
.zoom-close:hover{background:#b83d49;border-color:#eb7b86}
.zoom-bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding-top:2px}
.zoom-frame{display:flex;justify-content:center;min-width:0;overflow:auto}
.zoom-img{display:block;max-width:min(88vw,1040px);max-height:min(76vh,820px);border-radius:10px;
  background:#0a0b10}
.mosaic-tool.on{border-color:var(--acc);color:#d8d0ff;background:rgba(109,92,245,.16)}
.mosaic-slider{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--dim)}
.mosaic-slider input{width:88px;accent-color:#6d5cf5}
.mosaic-wrap{position:relative;margin:0 auto;background:#0a0b10;border-radius:10px;overflow:hidden;touch-action:none}
.mosaic-view{display:block;cursor:crosshair;width:100%;height:100%}
.mosaic-cursor.hidden{display:none}
.mosaic-cursor{position:absolute;border:1.5px solid rgba(255,255,255,.85);border-radius:50%;
  transform:translate(-50%,-50%);pointer-events:none;box-shadow:0 0 0 1px rgba(0,0,0,.35)}
/* 项目成员管理与只读项目 */
.project-member-row{display:flex;align-items:center;gap:12px;padding:14px 0;border-bottom:1px solid var(--border);flex-wrap:wrap}
.project-member-add{margin:18px 0;padding:14px 16px;border:1px solid var(--border);border-radius:12px}
.project-member-list{margin-top:20px;border-top:1px solid var(--border)}
.project-member-add-button{padding:0 10px;gap:4px}
.card-head .project-member-add-button .icon{color:inherit}
.project-member-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:8px 0 12px}
.project-member-controls>.selbox{max-width:100%;flex:0 1 420px}

/* 回收站 */
.trash-card{padding-top:12px}
.trash-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 10px}
.trash-toolbar .page-search{width:min(220px,100%);height:32px;box-sizing:border-box;padding:0 12px}
.trash-kinds{display:inline-flex;gap:6px;flex-wrap:wrap}
.trash-list{margin:0}
.trash-pager{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:14px;flex-wrap:wrap}
.trash-day + .trash-day{margin-top:14px}
.trash-day-label{margin:0 0 8px}
.trash-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:14px}
.trash-cell{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--card2)}
.trash-wrap{position:relative;background:#0a0b10}
.trash-media{display:block;width:100%;aspect-ratio:3/4;overflow:hidden}
.trash-media img,.trash-media video,.trash-thumb{width:100%;height:100%;object-fit:cover;display:block;
  border:none;border-radius:0;cursor:pointer;transform:none}
.trash-media img:hover,.trash-thumb:hover{transform:none;border-color:transparent}
.trash-over{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:12px;
  background:rgba(0,0,0,.45);opacity:0;transition:opacity .15s;pointer-events:none}
.trash-wrap:hover .trash-over{opacity:1}
.trash-over .fbtn{pointer-events:auto}
.trash-meta{padding:8px 10px 10px}
.trash-title{font-size:12.5px;font-weight:600;color:var(--text);line-height:1.35;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* 超管提示词调试：只在剧详情出现，普通用户页面没有这套节点 */
/* 提示词调试页：左侧工作流目录 + 右侧当前模板详情 */
.pd-intro{margin:-8px 0 16px;line-height:1.75;max-width:1100px}
.pd-layout{display:grid;grid-template-columns:268px minmax(0,1fr);gap:16px;align-items:start}
.pd-nav{position:sticky;top:12px;max-height:calc(100vh - 36px);overflow:auto;padding:10px;display:grid;gap:2px}
.pd-nav-stage{display:flex;align-items:center;gap:8px;padding:12px 8px 6px;font-size:13px}
.pd-nav-stage:first-child{padding-top:4px}
.pd-nav-item{display:flex;align-items:center;gap:8px;width:100%;height:auto;min-height:34px;padding:5px 8px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--dim);text-align:left;font-weight:500}
.pd-nav-item:hover{background:var(--card2);color:var(--text);border-color:transparent}
.pd-nav-item.active{background:rgba(109,92,245,.16);color:#d8d0ff;border-color:rgba(109,92,245,.35)}
.pd-nav-item .chip{font-size:11px;padding:0 6px}
.pd-nav-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pd-stage-no,.pd-index{display:inline-flex;align-items:center;justify-content:center;flex:none;min-width:20px;height:20px;padding:0 5px;border-radius:10px;font-size:11.5px;font-family:var(--mono)}
.pd-stage-no{background:var(--acc);color:#fff}
.pd-index{background:var(--card2);border:1px solid var(--line);color:var(--dim)}
.pd-detail{padding:18px 20px;min-height:420px}
.pd-detail-head{align-items:center;gap:10px;flex-wrap:wrap}
.pd-detail-title{font-size:17px}
.pd-where{margin:10px 0 16px;line-height:1.8;color:var(--dim)}
.pd-tabs{margin-bottom:14px}
.pd-tabs .tab{display:inline-flex;align-items:center;gap:8px}
.pd-text{width:100%;box-sizing:border-box;resize:vertical}
.pd-editor-foot{align-items:center;gap:10px;margin-top:6px}
.pd-group{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:22px 0 10px}
.pd-group:first-child{margin-top:0}
.pd-var{padding:12px 14px;margin-bottom:10px;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.015)}
.pd-var-head{align-items:baseline;gap:10px;flex-wrap:wrap}
.pd-var-name{font-family:var(--mono);font-size:12.5px;color:#b3a6ff;white-space:nowrap}
.pd-var-meaning{line-height:1.7}
.pd-cands{display:grid;gap:6px;margin-top:10px}
.pd-frag{border:1px solid var(--line);border-radius:8px;padding:6px 10px;background:rgba(0,0,0,.2)}
.pd-frag>summary{display:flex;align-items:center;gap:10px;flex-wrap:wrap;cursor:pointer;list-style:none;padding:2px 0}
.pd-frag>summary::-webkit-details-marker{display:none}
.pd-frag[open]>summary{margin-bottom:8px}
.pd-frag .pd-frag{margin-top:8px}
.pd-frag-empty{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.pd-caret{font-size:12px;color:var(--acc-h)}
.pd-frag[open]>summary .pd-caret{visibility:hidden}
.pd-when{flex:none;font-size:12px;color:var(--dim);padding:1px 8px;border-radius:9px;background:var(--card2);border:1px solid var(--line);white-space:nowrap}
.pd-note{margin-top:6px;line-height:1.6}
.pd-table td{vertical-align:top;line-height:1.7}
.pd-table td:first-child{white-space:nowrap}
.pd-kind{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.pd-why{position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;width:16px;height:16px;border-radius:50%;border:1px solid var(--line2);color:var(--dim);font-size:11px;cursor:help;outline:none}
.pd-why:hover::after,.pd-why:focus::after{content:attr(data-tip);position:absolute;left:22px;top:-6px;z-index:20;width:320px;padding:10px 12px;border-radius:8px;border:1px solid var(--line2);background:#12141d;color:var(--text);font-size:12px;line-height:1.7;white-space:normal;box-shadow:0 8px 24px rgba(0,0,0,.45)}
@media (max-width:1100px){.pd-layout{grid-template-columns:1fr}.pd-nav{position:static;max-height:none}}
.project-readonly input[readonly],.project-readonly textarea[readonly]{cursor:text}
.project-readonly [data-project-write]{pointer-events:none;opacity:.5}

/* 新模式的组合：成员段嵌在同一个框里，末尾是共用的提示词和视频；表头折叠整框。 */
.unit-group{position:relative;border:1px solid rgba(109,92,245,.38);border-radius:var(--r-md);
  background:rgba(109,92,245,.05);overflow:hidden;transition:border-color .2s}
.unit-group::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--seg-color,#6d5cf5)}
.unit-group[data-state="active"]{--seg-color:var(--warn)}
.unit-group[data-state="done"]{--seg-color:var(--ok)}
.unit-group[data-state="failed"]{--seg-color:var(--err)}
.unit-group:hover{border-color:rgba(109,92,245,.6)}
.unit-head{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:11px 16px 11px 18px;cursor:pointer;user-select:none}
.unit-head .chev{margin-left:auto;color:var(--faint);transition:transform .22s}
.unit-group.open .chev{transform:rotate(180deg)}
.unit-members{padding:4px 12px 0 14px;border-top:1px solid rgba(109,92,245,.22)}
.unit-members > .seg{margin-bottom:0}
.unit-generation{padding:0 14px 14px;border-top:1px solid rgba(109,92,245,.22)}
.unit-generation-title{padding-top:10px}
.unit-generation .editor{margin-top:8px}

/* ---------- 素材创作 ---------- */
.supplement-page{display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,440px);column-gap:24px;align-items:stretch}
.supplement-page.readonly{grid-template-columns:minmax(0,1fr)}
.supplement-create{min-width:0}
.supplement-side{min-width:0;display:flex;flex-direction:column;padding-left:24px;border-left:1px solid var(--line)}
.supplement-page.readonly .supplement-side{padding-left:0;border-left:none}
.supplement-intro{margin:-4px 0 14px}
.supplement-modes{display:inline-flex;padding:3px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.supplement-mode{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 14px;border:none;border-radius:7px;
  background:transparent;color:var(--dim);font-size:13px}
.supplement-mode:hover{background:transparent;color:var(--text)}
.supplement-mode.active{background:var(--card);color:var(--text);font-weight:600;box-shadow:0 0 0 1px var(--line)}
.supplement-mode.active .icon{color:var(--acc)}
.supplement-form .prompt-editor{min-height:200px;max-height:46vh}
.supplement-options{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin:0 0 16px}
.tuning-field input[type=range]{width:120px;margin:0;accent-color:#b3a6ff}
.tuning-value{min-width:64px;color:var(--text);font-variant-numeric:tabular-nums}
.tuning-reset.is-neutral{visibility:hidden}
.supplement-submit{display:flex;justify-content:flex-end}
/* 列表高度跟随左侧创作区，超出部分在列表内滚动 */
.supplement-list{display:flex;flex-direction:column;gap:12px;overflow-y:auto;flex:1 1 0;min-height:320px;padding-right:2px}
.supplement-search-row{display:flex;align-items:center;gap:8px;margin:0 0 12px}
.supplement-search{flex:1 1 auto;min-width:0;height:32px;box-sizing:border-box;padding:0 12px}
.supplement-list[hidden]{display:none}
.supplement-modes[hidden],.trash-kinds[hidden]{display:none}
.supplement-side .trash-pager{margin-top:12px}
.supplement-item{display:flex;gap:12px;padding:10px;border:1px solid var(--line);border-radius:12px;background:var(--card2)}
.supplement-item-body{display:flex;flex-direction:column;gap:6px;min-width:0;flex:1}
.supplement-item-head{display:flex;align-items:center;gap:8px;min-width:0}
.supplement-thumb{position:relative;flex:none;width:72px;height:96px;padding:0;border:1px solid var(--line);border-radius:9px;
  overflow:hidden;background:#0a0b10;color:var(--faint);display:flex;align-items:center;justify-content:center}
.supplement-thumb.audio{height:72px}
button.supplement-thumb{cursor:pointer}
button.supplement-thumb:hover{border-color:var(--acc);background:#0a0b10}
.supplement-thumb img,.supplement-thumb canvas{width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}
.player-box .pv.supplement-audio-stage{flex-direction:column;gap:28px;color:var(--faint);padding:0 40px}
.supplement-audio-stage audio{width:min(560px,100%)}
.supplement-player-text{line-height:1.6;white-space:pre-wrap;word-break:break-word}
/* 已完成素材的缩略图中间常驻一个圆形播放标记，和静态图片区分开 */
.supplement-thumb-play{position:absolute;left:50%;top:50%;width:30px;height:30px;margin:-15px 0 0 -15px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;color:#fff;background:rgba(0,0,0,.55);
  border:1px solid rgba(255,255,255,.55);pointer-events:none;transition:background .15s,transform .15s}
.supplement-thumb-play .icon{margin-left:2px}
.supplement-thumb-kind{position:absolute;left:6px;top:6px;display:flex;color:var(--dim)}
button.supplement-thumb:hover .supplement-thumb-play,button.supplement-thumb:focus-visible .supplement-thumb-play{
  background:var(--acc);border-color:transparent;transform:scale(1.08)}
.supplement-item-name{font-size:13.5px;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.supplement-item-head .chip{flex-shrink:0}
.supplement-error{color:var(--err);line-height:1.5;word-break:break-word}
.supplement-item-text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.5}
.supplement-item-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.supplement-link{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 10px;border-radius:7px;
  font-size:12px;color:var(--dim);text-decoration:none}
.supplement-link:hover{color:var(--text);background:var(--card)}
.trash-audio{display:flex;align-items:center;justify-content:center;color:var(--faint)}
@media (max-width:1100px){
  .supplement-page{grid-template-columns:minmax(0,1fr);row-gap:20px}
  .supplement-side{padding-left:0;padding-top:20px;border-left:none;border-top:1px solid var(--line)}
  .supplement-list{flex:none;min-height:0;max-height:70vh}
}

/* ---------- 提示词查找替换 ---------- */
.modal.prompt-replace-modal{max-width:min(780px,94vw);width:min(780px,94vw)}
.prompt-replace-grid{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);column-gap:10px;row-gap:12px}
.prompt-replace-field{display:flex;flex-direction:column;gap:7px;min-width:0}
.prompt-replace-label{font-size:12.5px;font-weight:550;color:var(--dim)}
.prompt-replace-field .prompt-box{flex:1}
.prompt-replace-field .prompt-ref-rail{display:none}
.prompt-replace-field .prompt-editor{min-height:68px;max-height:168px;padding:10px 12px;font-size:13.5px}
/* 占位文字只在内容为空且未聚焦时显示；绝对定位，不占文本流，光标始终在起始位置 */
.prompt-replace-field .prompt-editor{position:relative}
.prompt-replace-field .prompt-editor.is-empty:not(:focus)::before{content:attr(data-placeholder);position:absolute;
  left:12px;top:10px;right:12px;color:var(--faint);pointer-events:none}
/* 箭头与输入框垂直居中：上方留出标签行的高度 */
.prompt-replace-arrow{display:flex;align-items:center;padding-top:25px}
.prompt-replace-arrow span{display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;
  border:1px solid var(--line);background:var(--card2);color:var(--dim)}
.prompt-replace-foot{display:flex;align-items:center;gap:12px;margin-top:12px;min-height:24px}
.prompt-replace-foot .radio-opt{font-size:13px;color:var(--dim)}
@media (max-width:760px){
  .prompt-replace-grid{grid-template-columns:minmax(0,1fr)}
  .prompt-replace-arrow{display:none}
}
.shot-continuation{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-height:34px}

.modal.lingyi-art-modal{max-width:none;width:calc(100vw - 32px);max-height:calc(100dvh - 24px);
  height:calc(100dvh - 24px);overflow:hidden;display:flex;flex-direction:column}
.modal.lingyi-art-modal>h3,.modal.lingyi-art-modal .lingyi-art-filters,
.modal.lingyi-art-modal .lingyi-art-subs,.modal.lingyi-art-modal .lingyi-art-pager,
.modal.lingyi-art-modal .foot{flex:none}
.lingyi-art-filters{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}
.lingyi-art-chiprow{display:flex;align-items:center;gap:10px}
.lingyi-art-chiplab{flex:none;width:36px;color:var(--dim);font-size:12px}
.lingyi-art-chips{display:flex;flex-wrap:wrap;gap:6px}
.lingyi-art-chip{border:1px solid var(--line2);background:rgba(255,255,255,.03);color:var(--dim);
  border-radius:99px;padding:4px 10px;font-size:12px;cursor:pointer}
.lingyi-art-chip.on{border-color:rgba(109,92,245,.55);background:rgba(109,92,245,.16);color:#d8d0ff}
.lingyi-art-search{flex:1;min-width:0}
.lingyi-art-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));
  grid-auto-rows:max-content;align-items:start;align-content:start;gap:12px;
  flex:1;min-height:0;overflow:auto;padding:2px}
.lingyi-art-empty{grid-column:1/-1;padding:28px 8px;text-align:center}
.lingyi-art-card{position:relative;display:block;height:auto;min-height:max-content;
  padding:0;border:1px solid var(--line);border-radius:12px;background:#0c0e16;
  overflow:hidden;cursor:pointer;text-align:left;color:inherit}
.lingyi-art-card img{display:block;width:100%;aspect-ratio:3/4;height:auto;object-fit:cover;
  object-position:center top;background:#0a0b10}
.lingyi-art-card.on{border-color:rgba(109,92,245,.7);box-shadow:0 0 0 1px rgba(109,92,245,.35)}
.lingyi-art-card.open{border-color:var(--line2)}
.lingyi-art-name{display:block;padding:8px 10px 10px;font-size:13px;color:var(--dim);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lingyi-art-badge{position:absolute;top:8px;right:8px;padding:2px 7px;border-radius:99px;
  background:rgba(0,0,0,.62);color:#fff;font-size:11px}
.lingyi-art-subs{margin-top:10px}
.lingyi-art-subgrid{display:flex;gap:10px;overflow:auto;flex:1;min-width:0}
.lingyi-art-sub{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;
  flex:none;width:120px;height:auto;padding:0;border:1px solid var(--line);border-radius:10px;
  white-space:normal;background:#0c0e16;overflow:hidden;cursor:pointer;color:inherit}
.lingyi-art-sub img{display:block;width:100%;height:160px;object-fit:cover}
.lingyi-art-sub span{display:block;padding:6px 8px;font-size:12px;color:var(--dim);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lingyi-art-sub.on{border-color:rgba(109,92,245,.7)}
.lingyi-art-pager{display:flex;align-items:center;gap:8px;margin-top:10px}
.asset-download-progress{display:flex;flex-direction:column;align-items:flex-start;gap:5px}
.asset-download-progress progress{width:100%;height:8px;accent-color:var(--accent)}
.asset-download-skipped{max-height:360px;overflow:auto;overflow-wrap:anywhere}

/* 提示词记录：左边段列表（跨剧分页），右边版本表与内容区；两栏等高，各自在框内滚动 */
.pr-layout{display:grid;grid-template-columns:300px 1fr;gap:12px;align-items:stretch;min-height:360px}
.pr-segs{padding:8px;height:100%;overflow:hidden;display:flex;flex-direction:column;gap:4px}
.pr-seg-list{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:4px}
.pr-seg-pager{flex:0 0 auto;flex-wrap:wrap;padding-top:8px;border-top:1px solid var(--line)}
.pr-layout.collapsed{grid-template-columns:46px 1fr}
.pr-layout.collapsed .pr-segs{align-items:center;padding:8px 6px;overflow:hidden}
.pr-segs-head{display:flex;align-items:center;gap:6px;padding:0 2px 4px;flex:0 0 auto}
.pr-collapse{padding:0 8px;height:26px;flex:0 0 auto}
/* 段按钮是两行卡片：撤掉全局 button 的定高与不换行，否则第二行会压到下一条上 */
.pr-seg{display:block;width:100%;height:auto;text-align:left;white-space:normal;padding:8px 10px;
  border-radius:var(--r-sm);border:1px solid transparent;background:none;color:var(--text);
  cursor:pointer;flex:0 0 auto}
.pr-seg:hover{border-color:var(--line2)}
.pr-seg.on{background:rgba(109,92,245,.16);border-color:rgba(109,92,245,.45);color:#cfc8ff}
.pr-seg-drama{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pr-seg-sub{margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pr-seg-manual{color:var(--warn)}
.pr-main{padding:12px 14px;height:100%;overflow:auto}
.pr-versions tr.on td{background:rgba(109,92,245,.12)}
.pr-orphans{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px;padding:8px 10px;
  border:1px dashed var(--line2);border-radius:var(--r-md);background:rgba(255,255,255,.02)}
.pr-ver{display:inline-flex;align-items:center;height:21px;padding:0 8px;border-radius:6px;
  font:650 12px/1 var(--mono);color:#cfc8ff;background:rgba(109,92,245,.18);
  border:1px solid rgba(109,92,245,.4);letter-spacing:.04em}
.pr-who{gap:8px;align-items:center;margin-bottom:10px;min-width:0;flex-wrap:wrap}
.pr-versions .chip.ok{margin-left:4px}
.pr-pick{display:flex;justify-content:center;cursor:pointer}
.pr-pick input{width:15px;height:15px;accent-color:var(--acc);cursor:pointer}
.pr-fields{display:flex;flex-wrap:wrap;gap:6px 18px;margin:2px 0 10px}
.pr-field{display:flex;gap:6px;font-size:12.5px;max-width:100%}
.pr-field-label{color:var(--faint);flex:0 0 auto}
.pr-cell{white-space:pre-wrap;word-break:break-word}
.pr-cell-old{background:rgba(242,109,109,.14);color:#f7cccc;border-radius:4px;padding:1px 5px;
  text-decoration:line-through}
.pr-cell-new{background:rgba(49,196,141,.14);color:#bdf0dc;border-radius:4px;padding:1px 5px;margin-top:3px}
.storyboard-shots.pr-shots td{padding:8px 10px;font-size:12.5px;line-height:1.7}
.pr-shots tr.pr-row-add td{background:rgba(49,196,141,.07)}
.pr-shots tr.pr-row-del td{background:rgba(242,109,109,.07)}
/* 视频并排小窗：固定在视口角落，可拖动，滚动页面不影响 */
.pr-dock{position:fixed;right:18px;bottom:18px;z-index:9000;width:376px;padding:10px 12px 12px;
  background:#0f1220;border:1px solid var(--line2);border-radius:var(--r-lg);
  box-shadow:0 18px 50px rgba(0,0,0,.6);display:flex;flex-direction:column;gap:8px}
.pr-dock-head{display:flex;align-items:center;gap:8px;cursor:move;user-select:none}
.pr-dock-sound .ghost.on,.pr-dock-take.sm{border-color:rgba(109,92,245,.55);color:#cfc8ff}
.pr-dock-body{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.pr-dock-side{display:flex;flex-direction:column;gap:6px;min-width:0}
.pr-dock video{width:100%;aspect-ratio:9/16;background:#000;border:1px solid var(--line);border-radius:8px}
.pr-diff-head{display:grid;grid-template-columns:1fr 1fr;gap:0 12px;margin:2px 0 8px}
.pr-diff{display:grid;grid-template-columns:1fr 1fr;gap:1px 12px;font:12.5px/1.75 var(--mono)}
.pr-diff .cell{padding:0 6px;border-radius:4px;white-space:pre-wrap;word-break:break-word;color:var(--dim)}
.pr-diff .cell.del{background:rgba(242,109,109,.16);color:#f7cccc}
.pr-diff .cell.add{background:rgba(49,196,141,.16);color:#bdf0dc}
.pr-diff .cell.empty{background:rgba(255,255,255,.03)}

/* Skill 管理：卡片列表 + Markdown 编辑与渲染 */
.skill-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:12px}
.skill-card{display:flex;flex-direction:column;gap:8px;min-height:148px;padding:14px;cursor:pointer;
  transition:border-color .15s,transform .15s}
.skill-card:hover{border-color:rgba(109,92,245,.45);transform:translateY(-1px)}
.skill-card-title{font-size:15px;font-weight:650;line-height:1.4;overflow:hidden;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.skill-card-desc{overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.skill-card-icon{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;
  border-radius:8px;background:rgba(109,92,245,.16);border:1px solid rgba(109,92,245,.32);color:#cfc8ff}
.modal.skill-modal{max-width:min(1040px,95vw);width:min(1040px,95vw)}
/* 编辑窗左右分栏：左边元数据、右边正文，两边各自定高，弹层不出现整体滚动 */
.skill-form{display:grid;grid-template-columns:288px 1fr;gap:16px;align-items:stretch}
.skill-form-side{display:flex;flex-direction:column;gap:10px;min-width:0}
.skill-form-side textarea{resize:none}
.skill-form-main{display:flex;flex-direction:column;min-width:0}
.skill-form .md-editor{flex:1;display:flex;flex-direction:column;min-height:0}
.skill-form .md-input{flex:1;min-height:0;max-height:none}
.skill-form,.skill-form-side,.skill-form-main{height:min(56vh,620px)}
.skill-icons{display:grid;grid-template-columns:repeat(8,1fr);gap:4px}
/* 任务提交处的 Skill 选择器：编辑器工具条上的行内版，没有可选 Skill 时整块不渲染 */
.skill-pick-inline{display:inline-flex;align-items:center;gap:6px}
.skill-pick-inline .sel-btn{height:26px;font-size:12px}
.skill-icon{height:30px;padding:0;background:transparent;border:1px solid var(--line);color:var(--dim)}
.skill-icon:hover{border-color:var(--line2);color:var(--text)}
.skill-icon.on{background:rgba(109,92,245,.18);border-color:rgba(109,92,245,.5);color:#cfc8ff}
.md-editor{border:1px solid var(--line2);border-radius:var(--r-md);overflow:hidden;background:#0c0f18;
  display:flex;flex-direction:column;min-height:0}
.md-host{flex:1;min-height:0;display:flex;flex-direction:column}
/* Vditor 自带深色主题，这里只把它压进我们的容器并对齐字号 */
.md-host .vditor{border:none;height:100%!important;background:transparent}
.md-host .vditor-toolbar{background:rgba(255,255,255,.03);border-bottom:1px solid var(--line);padding:4px 6px}
.md-host .vditor-content{background:transparent;min-height:0}
.md-host .vditor-ir pre.vditor-reset{font-size:13.5px;line-height:1.85;padding:12px 14px}
.md-host .vditor-reset{color:var(--text)}
.md-input{width:100%;min-height:320px;max-height:52vh;padding:12px 14px;border:none;background:transparent;
  color:var(--text);font:13px/1.8 var(--mono);resize:vertical;outline:none}
.skill-read{max-height:56vh;overflow:auto;padding:2px 2px 6px}
.md-body{font-size:13.5px;line-height:1.85;color:var(--text)}
.md-body h1,.md-body h2,.md-body h3,.md-body h4,.md-body h5,.md-body h6{margin:14px 0 6px;line-height:1.45}
.md-body h1{font-size:19px} .md-body h2{font-size:17px} .md-body h3{font-size:15px}
.md-body h4,.md-body h5,.md-body h6{font-size:14px;color:var(--dim)}
.md-body p{margin:6px 0;white-space:pre-wrap}
.md-body ul,.md-body ol{margin:6px 0;padding-left:22px}
.md-body li{margin:3px 0}
.md-body li.md-todo{list-style:none;margin-left:-18px;display:flex;gap:7px;align-items:flex-start}
.md-body li.md-todo input{margin-top:5px;accent-color:var(--acc)}
.md-body blockquote{margin:8px 0;padding:6px 12px;border-left:3px solid rgba(109,92,245,.5);
  background:rgba(109,92,245,.07);color:var(--dim);white-space:pre-wrap}
.md-body code{font:12.5px/1.6 var(--mono);background:rgba(255,255,255,.07);padding:1px 5px;border-radius:5px}
.md-body pre{margin:8px 0;padding:10px 12px;background:#0c0f18;border:1px solid var(--line);
  border-radius:8px;overflow:auto}
.md-body pre code{background:none;padding:0}
.md-body hr{border:none;border-top:1px solid var(--line2);margin:12px 0}
.md-body a{color:#9db8ff}
.md-table{width:100%;border-collapse:collapse;margin:8px 0}
.md-table th,.md-table td{border:1px solid var(--line);padding:6px 10px;text-align:left;font-size:13px}
.md-table th{background:rgba(255,255,255,.04);color:var(--dim)}
