

  /* ═══【N302】全局禁止"文字选择" ═══
     用户反馈：长按拖动、或按住左键划过面板时，会拉出一片蓝色文字选区（浏览器原生选择行为）。
     处理：全局 user-select:none；**只保留真正需要复制/编辑的文本区**可选（输入框 / 文本域 / 可编辑区 /
     剧本正文 / 分镜对话 / 方案卡文案 / 提示词框 / 任何 <pre> 与 .lc-selectable）。 */
  html,body{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
  input,textarea,select,[contenteditable="true"],[contenteditable=""]{user-select:text!important;-webkit-user-select:text!important}
  pre,#scriptOutput,#scriptText,#materialBrief,#sbMessages,.sb-msg,.sb-chat,.idea-card p,.idea-card h3,.vprompt,.command-input,.lc-selectable,.script-text,.pure-script{user-select:text!important;-webkit-user-select:text!important}
:root{
  --bg:#060a12;
  --ink:#f3f9ff;--ink-dim:#b8cbe8;--ink-faint:#7c8fb4;
  --jade:#5be8b9;--jade-deep:#0fb98a;--gold:#f0cf94;
  --neon-1:#9b86d6;--neon-2:#6fd0e8;--neon-3:#e79ad2;
  --panel:rgba(120,160,255,.07);--panel-2:rgba(80,140,255,.05);
  --line:rgba(255,255,255,0);--line-strong:rgba(255,255,255,0);
  --glow-jade:rgba(91,232,185,.24);
  --r-lg:30px;--r-md:22px;--r-sm:16px;
  --speed:.6s;
}
*{box-sizing:border-box}
html,body{width:100%;height:100%;margin:0;overflow:hidden;background:radial-gradient(120% 100% at 50% 0%,rgba(59,130,246,.10),transparent 55%),radial-gradient(90% 80% at 100% 100%,rgba(155,92,255,.07),transparent 55%),radial-gradient(80% 80% at 0% 100%,rgba(3,234,255,.06),transparent 55%),var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;-webkit-font-smoothing:antialiased}
button,textarea,input{font:inherit}
button{cursor:pointer}
.screen{position:absolute;inset:0;display:none}
.screen.active{display:flex}

/* ===== 封面 ===== */
.cover{flex-direction:column;align-items:center;justify-content:center;overflow:hidden;text-align:center}
.cover-video{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;z-index:0;filter:none}
.cover-shade{position:absolute;inset:0;z-index:1;background:radial-gradient(130% 110% at 50% 38%,transparent 60%,rgba(6,9,13,.22) 88%,rgba(6,9,13,.5)),linear-gradient(180deg,rgba(10,13,18,.10),transparent 45%,rgba(10,13,18,.35))}
.cover-ui{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;margin-top:26vh;margin-bottom:0}
/* ===== 更多工程：卡片形态（与工程卡一致），作为第 5 张放入 project-grid ===== */
.more-projects-mask{position:fixed;inset:0;z-index:12000;display:flex;align-items:center;justify-content:center;background:rgba(3,7,14,.66);backdrop-filter:blur(6px)}
/* 关键修复：.more-projects-mask 的 display:flex 会覆盖 HTML hidden 属性 → 弹层一进页面就显示、盖住首页。必须显式兜底 */
.more-projects-mask[hidden],.more-projects[hidden],.mp-empty[hidden]{display:none!important}
.more-projects-panel{width:min(680px,92vw);max-height:76vh;display:flex;flex-direction:column;border-radius:14px;border:.5px solid rgba(169,220,188,.42);background:rgba(6,20,13,.62);backdrop-filter:blur(30px) saturate(150%);-webkit-backdrop-filter:blur(30px) saturate(150%);box-shadow:0 30px 90px rgba(0,0,0,.5),inset 0 1px rgba(255,255,255,.10);overflow:hidden}
.mp-head{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:.5px solid rgba(169,220,188,.22)}
.mp-head b{font-size:16px;letter-spacing:.08em;color:#ffffff;font-weight:400;text-shadow:none}
.mp-head span{font-size:11px;color:rgba(190,230,205,.72);margin-left:10px;letter-spacing:.05em}
.mp-close{width:34px;height:34px;border:.5px solid rgba(169,220,188,.4);border-radius:50%;background:transparent;color:rgba(238,255,244,.85);font-size:18px;cursor:pointer;transition:.25s;font-weight:300}
.mp-close:hover{color:#fff;border-color:rgba(169,220,188,.8);background:rgba(169,220,188,.08)}
.mp-list{flex:1;min-height:0;overflow:auto;padding:10px 14px;display:flex;flex-direction:column;gap:8px}
.mp-row{display:flex;align-items:center;gap:14px;padding:13px 16px;border:.5px solid rgba(169,220,188,.18);border-radius:10px;background:rgba(30,68,45,.14);cursor:pointer;transition:.25s}
.mp-row:hover{border-color:rgba(169,220,188,.55);background:rgba(52,110,72,.26);transform:translateX(2px)}
.mp-row .mp-idx{flex:0 0 auto;width:27px;height:27px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#06150d;background:linear-gradient(150deg,#b9f0c4,#57b982);text-shadow:none}
.mp-row .mp-main{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:3px}
.mp-row .mp-title{font-size:14px;font-weight:400;color:#ffffff;letter-spacing:.04em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-shadow:none}
/* 修：阶段文字放大 + 与绿格垂直居中 */
.mp-row .mp-stage{display:flex;align-items:center;gap:8px;font-size:13px;color:rgba(205,235,215,.9);letter-spacing:.05em;text-shadow:none}
.mp-row .mp-time{flex:0 0 auto;font-size:10.5px;color:rgba(190,220,205,.6);font-variant-numeric:tabular-nums;white-space:nowrap}
/* 重点标注：透明五星 → 点击金黄 */
.mp-star{flex:0 0 auto;width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:.5px solid rgba(169,220,188,.28);border-radius:8px;background:transparent;color:rgba(220,245,230,.6);font-size:17px;line-height:1;cursor:pointer;transition:.25s;padding:0;text-shadow:none}
.mp-star:hover{border-color:rgba(255,214,130,.6);color:#ffd682;transform:scale(1.1)}
.mp-del:hover{border-color:rgba(255,120,120,.65);color:#ff8a8a;transform:scale(1.1)}
.mp-star.on{background:linear-gradient(145deg,rgba(255,214,130,.18),rgba(255,214,130,.06));border-color:rgba(255,214,130,.75);color:#ffd000;box-shadow:0 0 14px rgba(255,214,0,.35);text-shadow:0 0 8px rgba(255,214,0,.5)}
.mp-empty{padding:34px 20px;text-align:center;color:rgba(190,230,205,.7);font-size:13px;letter-spacing:.05em}
/* ===== 制作体量：绿色小方格（一步一格，完成=亮绿，未完成=空框） ===== */
.step-dots{display:inline-flex;align-items:center;gap:5px}
.step-dot{width:11px;height:11px;border-radius:3px;border:1px solid rgba(83,224,174,.35);background:transparent;box-sizing:border-box}
.step-dot.on{background:#53e0ae;border-color:#53e0ae;box-shadow:0 0 8px rgba(83,224,174,.55)}
.step-dot.half{background:rgba(83,224,174,.35);border-color:rgba(83,224,174,.6)}
.mp-row .mp-dots{flex:0 0 auto;margin-left:2px}
.mp-stage{margin-top:4px;font-size:11.5px;color:#8fd8ff;letter-spacing:.04em;display:flex;align-items:center;gap:8px}
.history-card-steps{display:flex;align-items:center;gap:5px;margin-top:8px;padding-top:6px;border-top:1px dashed rgba(255,255,255,.08)}
/* 首页无标题，主角为「内容创作」按钮与历史工程框 */
.history-home{width:min(720px,88vw);margin-top:6px;text-align:left}
.history-home h3{margin:0 0 12px;color:var(--ink-dim);font-size:12px;letter-spacing:.2em;text-transform:uppercase}
.history-list{display:flex;gap:14px;overflow:auto;padding:6px}
.history-entry{min-width:216px;max-width:260px;padding:16px 18px;border:0;border-radius:26px;background:linear-gradient(160deg,rgba(140,170,255,.14),rgba(90,150,255,.06));backdrop-filter:blur(16px) saturate(170%);color:var(--ink);box-shadow:inset 0 1px rgba(255,255,255,.16),0 0 0 1px rgba(255,255,255,.04),0 22px 46px rgba(0,0,0,.5),0 0 34px rgba(79,255,196,.14);transition:.8s cubic-bezier(.22,.68,.18,1)}
.history-entry:hover{transform:translateY(-2px) scale(1.01);box-shadow:0 8px 24px rgba(0,0,0,.4)}
.history-entry b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-weight:600;color:#f0f6f0}
.history-entry small{display:block;margin-top:8px;color:var(--ink-dim);font-size:11px;line-height:1.5}.history-entry .history-label{margin:0 0 7px;color:var(--jade);font-size:9px;letter-spacing:.24em;font-weight:600;text-transform:uppercase}.history-entry .history-label+ b{font-size:15px;color:#f5fbff}
.history-empty{color:var(--ink-faint);font-size:12px}
.content-create{margin-top:0;padding:15px 52px;border:0;border-radius:999px;background:linear-gradient(180deg,rgba(255,255,255,.14),rgba(255,255,255,.03));color:#f3f9ff;font-size:15px;letter-spacing:.22em;cursor:pointer;box-shadow:0 16px 40px rgba(0,0,0,.5),inset 0 1px rgba(255,255,255,.18),0 0 44px rgba(79,255,196,.3),0 0 24px rgba(63,224,255,.2);backdrop-filter:blur(26px) saturate(170%);transition:.8s cubic-bezier(.22,.68,.18,1)}
.content-create:hover{transform:translateY(-2px) scale(1.03);box-shadow:0 22px 48px rgba(0,0,0,.62),0 0 70px rgba(79,255,196,.5),0 0 34px rgba(63,224,255,.3),inset 0 1px rgba(255,255,255,.24)}
.project-grid{display:grid;grid-template-columns:repeat(5,minmax(104px,138px));gap:14px;margin-top:24px;justify-content:center;opacity:0;transition:opacity .4s ease}/* 【修231】外壳先画、JS 后画，中间那 1 秒的「空卡片+彩色圆点」会被看见，看着像旧版本。让卡片组先透明，数据到位再加 .lcReady 一次性淡入；2.6 秒硬兜底，绝不会一直藏着。 */.project-grid.lcReady{opacity:1}
/* “更多工程”卡：与工程卡同形态（复用 has-history 视觉），作为第 5 张 */
.project-card.more-card{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;text-align:left;padding:14px 16px 12px;height:auto;min-height:112px;animation:none!important;color:#eef4f0;overflow:hidden!important;border:1px solid rgba(110,208,255,.3)!important;background:linear-gradient(160deg,rgba(82,126,219,.2),rgba(43,25,92,.25))!important;box-shadow:inset 0 1px rgba(255,255,255,.12),0 0 0 1px rgba(255,255,255,.03),0 16px 40px rgba(0,0,0,.46),0 0 26px rgba(110,208,255,.14)!important}
.project-card.more-card:hover{transform:translateY(-4px) scale(1.055)!important;border-color:rgba(110,208,255,.75)!important;box-shadow:0 0 0 1px rgba(110,208,255,.5),0 0 36px rgba(110,208,255,.45),0 24px 50px rgba(0,0,0,.42)!important;background:linear-gradient(160deg,rgba(96,140,235,.30),rgba(56,34,120,.32))!important}
.project-card.more-card .history-card-label{color:rgba(158,216,188,.82)}
.project-card.more-card .history-card-title{color:#cfe6ff;font-size:15px;font-weight:600}
.project-card.more-card .history-card-stage{color:rgba(255,214,140,.9)}
/* 更多工程：高端醒目标题（渐变玻璃金属字） */
.project-card.more-card .more-title{margin:2px 0 0;font-size:21px!important;font-weight:800;letter-spacing:.14em;background:linear-gradient(120deg,#fff 0%,#a9e2b8 38%,#6fd6b4 62%,#fff 100%);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:none;filter:drop-shadow(0 2px 10px rgba(120,235,205,.35));line-height:1.25;white-space:nowrap;overflow:hidden;font-family:Georgia,"Songti SC",serif!important}
.project-card.more-card .more-title:after{content:'▸';margin-left:6px;font-size:15px;vertical-align:1px;color:#a9e2b8;-webkit-text-fill-color:#a9e2b8}
.project-card.more-card .history-card-steps{filter:brightness(1.1)}
.project-card{height:112px;border:0;border-radius:24px;background:linear-gradient(160deg,rgba(140,170,255,.12),rgba(90,150,255,.05));box-shadow:inset 0 1px rgba(255,255,255,.12),0 0 0 1px rgba(255,255,255,.03),0 16px 40px rgba(0,0,0,.46),0 0 26px rgba(79,255,196,.1);cursor:pointer;backdrop-filter:blur(30px) saturate(170%);transition:.8s cubic-bezier(.22,.68,.18,1)}
.project-card:hover{transform:translateY(-3px) scale(1.05);box-shadow:0 24px 52px rgba(0,0,0,.6),0 0 54px rgba(79,255,196,.4),0 0 28px rgba(63,224,255,.24)}
.project-card:nth-child(1):after{content:'';display:block;height:6px;margin:14px;border-radius:6px;background:linear-gradient(90deg,var(--jade),transparent)}
.project-card:nth-child(2):after{content:'';display:block;height:6px;margin:14px;border-radius:6px;background:linear-gradient(90deg,var(--gold),transparent)}
.project-card:nth-child(3):after{content:'';display:block;height:6px;margin:14px;border-radius:6px;background:linear-gradient(90deg,#7ac8ff,transparent)}
.project-card:nth-child(4):after{content:'';display:block;height:6px;margin:14px;border-radius:6px;background:linear-gradient(90deg,#c78aff,transparent)}
.cover-foot{position:absolute;bottom:24px;z-index:2;color:var(--ink-faint);font-size:11px;letter-spacing:.3em}

/* ===== 工作区 ===== */
.workspace{flex-direction:column}
.topbar{position:relative;z-index:5;height:60px;display:flex;align-items:center;padding:0 26px;border-bottom:0;background:rgba(120,160,255,.06);backdrop-filter:blur(30px) saturate(170%)}
.step-back{position:absolute;top:16px;right:28px;z-index:30;border:0;background:rgba(10,20,32,.22);border-radius:999px;color:var(--ink-dim);font-size:12px;cursor:pointer;padding:8px 14px;transition:.8s cubic-bezier(.22,.68,.18,1);margin:0;letter-spacing:.04em;box-shadow:inset 0 1px rgba(255,255,255,.12)}
.step-back:hover{color:#fff;transform:translateY(-2px);background:rgba(79,255,196,.12);box-shadow:0 0 22px rgba(79,255,196,.2)}
 .topbar .step-back{position:relative;top:auto;right:auto;order:-1;margin-right:18px;background:transparent;box-shadow:none;padding:8px 0}
.top-brand{font-size:14px;letter-spacing:.12em;color:#f0f6f0}
.top-brand span{color:var(--jade)}
.top-title{margin-left:18px;color:var(--ink-faint);font-size:12px;letter-spacing:.06em}
.gear{margin-left:auto;border:0;background:none;color:var(--ink-dim);cursor:pointer;font-size:19px;transition:.3s}
.gear:hover{color:var(--jade);transform:rotate(60deg)}
.back{margin-left:10px;background:none;border:0;color:var(--ink-faint);font-size:12px;cursor:pointer}
.back:hover{color:#fff}
.workbody{position:relative;z-index:1;flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px}
.glow-prompt{font-size:32px;font-weight:700;letter-spacing:.22em;color:#f0f6f0;text-shadow:0 0 10px var(--glow-jade),0 0 34px var(--glow-jade);margin-bottom:20px}
.input-row{display:flex;flex-direction:column;align-items:center;width:min(560px,92vw)}
/* 【N245】题材轮盘：输入卡底边状态条 · 31 题材池（REAL_POOL 27 + NON_REAL_POOL 4；【修369·bug7】原写 21） · 3D 骰子（跳动+摇骰音效） */
.input-row .idea{border-radius:24px 24px 10px 10px}
.lc-reel{display:flex;align-items:center;gap:3px;flex-wrap:nowrap;width:100%;box-sizing:border-box;margin-top:-2px;padding:8px 7px 10px;
  border-radius:0 0 24px 24px;background:rgba(120,160,255,.045);backdrop-filter:blur(36px) saturate(150%);
  box-shadow:inset 0 1px rgba(255,255,255,.06),0 16px 40px rgba(0,0,0,.4);overflow:hidden}
.lc-reel-label{flex:0 0 auto;font-size:9.5px;color:#5c7186;letter-spacing:.18em;white-space:nowrap}
/* 【v10.13n】题材选择面板 + 芯片"专属"角标 */
.lc-dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-left:5px;vertical-align:middle;flex:0 0 auto;
  background:radial-gradient(circle at 35% 32%,#ffb0a8,#e04a42 65%,#b52f2a);box-shadow:0 0 6px rgba(255,90,80,.55),inset 0 0.5px rgba(255,255,255,.5)}
/* 【修359·烧心风格·用户要求】「烧心」chip 的圆点用**紫色**：沿用同一个 .lc-dot 类，只加这个颜色修饰类，
   尺寸 / 边距 / 垂直对齐 / 弹性收缩全部继承 .lc-dot ⇒ 与红点的大小与位置逐像素一致（缩至左侧与窄屏同样不跑位）。
   紫色取本 app 既有色板里的**图片紫 #c6a8ff**（既有用法：.sc-mtag / .sc-dot.d-img / .sc-achip.c-img / .sc-vref-card.c-img），
   不是新造颜色。 */
.lc-dot.lc-dot-sx{background:radial-gradient(circle at 35% 32%,#e2d2ff,#c6a8ff 65%,#8f6ad6);box-shadow:0 0 6px rgba(198,168,255,.62),inset 0 0.5px rgba(255,255,255,.5)}
.lc-slot{position:relative;display:flex;align-items:center;justify-content:center;gap:2px;flex:1 1 0;min-width:0;text-align:center;padding:4px 3px 4px 5px;border-radius:999px;border:1px solid rgba(120,180,220,.16);
  background:rgba(14,26,40,.85);font-size:11px;color:#a9c2d6;cursor:pointer;user-select:none;
  transition:border-color .2s,box-shadow .2s,color .2s;overflow:hidden;white-space:nowrap}
.lc-body{display:flex;align-items:center;justify-content:center;flex:1 1 auto;min-width:0;overflow:hidden}
.lc-txt{display:inline-block;flex:0 0 auto}
/* 【N292】芯片上的"时代"小标（大档：古代/民国/80年代/当代/未来/架空） */
.lc-era{display:inline-block;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;margin-left:3px;padding:0 3px;border-radius:6px;background:rgba(154,255,209,.10);border:1px solid rgba(154,255,209,.22);font-size:8.5px;color:#9fffe0;vertical-align:1px;white-space:nowrap}
/* 【N346】独奏锁：芯片右侧的小锁。未锁＝暗色描边；独奏中＝实心绿；跟随格＝虚线小锁（点它＝改为锁定本格） */
.lc-lock{flex:0 0 auto;width:12px;height:12px;padding:0;border:1px solid rgba(120,180,220,.22);border-radius:4px;background:rgba(255,255,255,.03);
  color:#7d97ad;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;opacity:.5;transition:.18s;line-height:0;box-sizing:border-box}
.lc-lock svg{display:block;width:8px;height:8px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.lc-lock:hover{opacity:1;color:#9fffe0;border-color:rgba(91,232,185,.5);background:rgba(91,232,185,.10)}
.lc-lock:focus-visible{outline:1px solid rgba(91,232,185,.75);outline-offset:1px}
.lc-lock.on{opacity:1;color:#0c2b20;background:linear-gradient(135deg,#a6ffdd,#46d3a4);border-color:rgba(154,255,209,.95);box-shadow:0 0 8px rgba(91,232,185,.6)}
.lc-slot.lc-solo{border-color:rgba(91,232,185,.8);color:#c9ffe9;box-shadow:0 0 12px rgba(91,232,185,.3),inset 0 0 9px rgba(91,232,185,.1)}
.lc-slot.lc-spin .lc-txt{animation:lcRollUp .13s linear}
@keyframes lcRollUp{0%{transform:translateY(70%);opacity:.15}100%{transform:translateY(0);opacity:1}}
.lc-slot:hover{border-color:rgba(120,180,220,.42)}
/* 【N293】原「方案N」前缀样式已删除（芯片只显示：题材 + 时代） */
.lc-slot.lc-spin{color:transparent}
.lc-slot.lc-spin::after{content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,transparent,rgba(91,232,185,.45),transparent);
  animation:lcSweep .16s linear infinite}
.lc-slot.lc-land{border-color:rgba(91,232,185,.55);color:#9fffe0;box-shadow:0 0 10px rgba(91,232,185,.2)}
@keyframes lcSweep{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}
.lc-dice{margin-left:auto;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;
  border:0;background:transparent;cursor:pointer;padding:0;opacity:.85;transition:.22s;perspective:120px}
.lc-dice:hover{opacity:1;filter:drop-shadow(0 0 9px rgba(91,232,185,.5))}
.lc-dice:active{transform:scale(.9)}
/* 【N493·用户要求】「骰子太大了，缩小至锦囊大小」：立方体 17px → 14px（透视放大后视觉≈锦囊 24px 图标）；
   按钮盒仍是 30×30，与锦囊同盒，两个图标并排看着一样大。 */
/* 【N494·用户要求】「骰子没有居中，必须纵向居中！与锦囊一致！」
   量出来的真相：骰子投影后只有 16px、锦囊是 24px（各自都在盒内居中，但光学尺寸差一半），
   再加上 lcHop 一直在上下跳（translateY -4px），看上去就像没对齐、偏下。
   修法：① 立方体 14px → 21px（透视投影后 ≈24px，与锦囊图标同高）；
         ② lcHop 去掉上下位移，改成只做缩放呼吸 → 任何时刻都严格纵向居中。 */
/* 【N496·用户要求】「骰子傻大傻大，要精致」：21px → **15px**（投影≈17px），
   圆角 5→3.5px、骰点 3.4→2.4px、面渐变提亮一档 → 小而精致；仍然严格纵向居中。 */
/* ══【N498·用户要求】「固定骰子死活不能与右侧的锦囊纵向居中，骰子总要低一些，解决一下！」══
   这一轮不猜，先量（探针 `探针/lc_n498_align.js`：真 Chrome + CDP 量 DOM 矩形，
   再把背景视频/画布隐掉、底色涂黑，4× 截「骰子+锦囊」那一小块交 PIL 找亮像素＝**墨迹真身**）：
     · 两个按钮盒：都是 30×30、`align-items:center` → 盒子中心**完全同高**（520..550，cy=535，差 0）；
     · 真相在盒内的"墨迹"（量的是像素，不是我以为的）：
         骰子墨迹（立方体投影）y 527.00..549.00 → 高 22.25px，中心 538.00  ← **比盒中心低 3.00px**
         锦囊墨迹（SVG 实际笔画）y 526.25..544.50 → 高 18.50px，中心 535.38  ← 只低 0.38px
       → 两个原因叠加，所以怎么调盒子的 align-items 都没用：
         ① 立方体绕 X/Y 转 -26°/-38° 后投影是**六边形**，再叠上 `perspective:120px`，
            这个投影天然不关于盒中心对称（上边少、下边多），墨迹中心被"撑"到中心线以下；
         ② 15px 边长的立方体投影出来有 **22.25px** 高，比锦囊的 18.5px 大两成，
            一大一小并排，眼睛会额外读成"没对齐"（前几轮 N493/N494/N496 反复改大小就是卡在这）。
   修法（只在自己身上补差，**不动布局、不动 30×30 盒、不动 lcHop 呼吸/掷骰跳跃**）：
     · `--lc-cube-k`：立方体整体等比缩放（15px → 视觉 12px），投影墨迹 22.25 → 18.5px，与锦囊**等高**；
     · `--lc-dice-dy`：整块立方体上移，把透视撑下去的那几像素补回来 → 两个墨迹中心落在同一条水平线上。
   两个值都留成变量：以后嫌大嫌小、或还差零点几像素，**只改这两个数**，改完跑一遍探针复核即可。
   实测（探针 ② 像素层，4× 采样 → 1/4 px 精度）：
     修前 骰子 527.00..549.00（高 22.25，中心 538.00）  vs 锦囊 526.25..544.50（高 18.50，中心 535.38）
          → 中心差 **+2.62px**（骰子偏下）、高度差 +3.75px
     修后 骰子 526.25..544.50（高 18.50，中心 535.38）  vs 锦囊 526.25..544.50（高 18.50，中心 535.38）
          → 中心差 **0.00px**、高度差 **0.00px**（上下边完全重合） */
.lc-dice{--lc-cube-k:.8;--lc-dice-dy:-2px}
.lc-cube{position:relative;width:15px;height:15px;transform-style:preserve-3d;
  transform:translateY(var(--lc-dice-dy,-2px)) rotateX(-26deg) rotateY(-38deg) scale(var(--lc-cube-k,.8));
  transition:transform .55s cubic-bezier(.3,1.4,.4,1)}
/* 【N498】悬停：两个图标是**一组控件**，位移必须同进退。
   锦囊原本自己悬停上浮 1px；如果骰子不动，鼠标一放上去两者立刻错开 1px（前置状态再准也白搭）。
   所以这里补两条：
     · 骰子被悬停时，锦囊也跟着上浮 1px（`~` 后继兄弟选择器，向后选没问题）；
     · 锦囊被悬停时，骰子跟着上浮 1px —— CSS 选不到"前面的兄弟"，用 `.lc-reel:has(...)`。
       `:has()` 在 Chrome 105+ / Safari 15.4+ 可用；万一某浏览器不认，**整条规则被丢弃**
       （只丢这一条，不会连累后面的样式），那一态最多差 0.6px，肉眼无感。
   注意：骰子这边的位移只能加在 `.lc-cube` 身上，不能加在 `.lc-dice` 上 ——
   那个按钮身上挂着 lcHop / lcJumpRoll 两条 animation，动画的 transform 会直接盖掉 hover 的 transform。 */
.lc-dice:hover ~ .lc-pouch{transform:translateY(-1px)}
.lc-reel:has(.lc-pouch:hover) .lc-cube{transform:translateY(calc(var(--lc-dice-dy,-2px) - 1px)) rotateX(-26deg) rotateY(-38deg) scale(var(--lc-cube-k,.8))}
.lc-dice:hover .lc-cube{transform:translateY(calc(var(--lc-dice-dy,-2px) - 1px)) rotateX(-26deg) rotateY(-38deg) scale(var(--lc-cube-k,.8)) translateZ(2px)}
.lc-dice.lc-rolling .lc-cube{transform:translateY(var(--lc-dice-dy,-2px)) rotateX(-26deg) rotateY(-38deg) scale(var(--lc-cube-k,.8)) translateZ(4px)}
.lc-face{position:absolute;width:15px;height:15px;border-radius:3.5px;box-shadow:inset 0 0 3px rgba(0,40,25,.35)}
.lc-ftop{background:linear-gradient(135deg,#c8ffe9,#7df0c8);transform:rotateX(90deg) translateZ(7.5px)}
.lc-ffront{background:linear-gradient(135deg,#6ee8bd,#37b98f);transform:translateZ(7.5px)}
.lc-fright{background:linear-gradient(135deg,#2e9e7d,#1c7a5e);transform:rotateY(90deg) translateZ(7.5px)}
.lc-pip{position:absolute;width:2.4px;height:2.4px;border-radius:50%;background:#0a2b1d;box-shadow:0 1px 0 rgba(255,255,255,.25)}
.lc-pc{left:6.3px;top:6.3px}.lc-ptl{left:2.2px;top:2.2px}.lc-ptr{left:10.4px;top:2.2px}
.lc-pbl{left:2.2px;top:10.4px}.lc-pbr{left:10.4px;top:10.4px}
@keyframes lcHop{0%,55%,100%{transform:scale(1)}
  60%{transform:scale(1.07)}70%{transform:scale(1)}
  78%{transform:scale(1.04)}86%{transform:scale(1)}}
.lc-dice:not(.lc-rolling){animation:lcHop 2.6s ease-in-out infinite}
.lc-dice:not(.lc-rolling):hover{animation-play-state:paused}
.lc-dice.lc-rolling{animation:lcJumpRoll .68s cubic-bezier(.3,1.5,.4,1)}
@keyframes lcJumpRoll{
  0%{transform:translateY(0) rotate(0)}
  16%{transform:translateY(-9px) rotate(-4deg)}
  30%{transform:translateY(0) rotate(3deg)}
  44%{transform:translateY(-5px) rotate(-2deg)}
  58%{transform:translateY(0) rotate(1.5deg)}
  70%{transform:translateY(-2.5px) rotate(0)}
  82%,100%{transform:translateY(0) rotate(0)}}
.lc-detect{position:absolute;right:12px;top:-16px;font-size:10px;color:var(--gold,#f0cf94);display:none;white-space:nowrap;pointer-events:none}
.lc-detect.on{display:inline}
/* 锦囊按钮：**纯图标、与骰子同一 30×30 盒**、在骰子右侧（用户要求：不要文字、放骰子右侧）。
   【N492】图标＝用户给的绿色钱袋，两态（闭合/打开）画在**同一个 SVG** 里，靠 CSS 补间过渡。 */
.lc-pouch{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;padding:0;margin-left:3px;border:0;background:transparent;cursor:pointer;
  transition:transform .22s,filter .22s;line-height:0;opacity:.92}
.lc-pouch svg{display:block;width:24px;height:24px;overflow:visible;
  filter:drop-shadow(0 1px 1.5px rgba(0,0,0,.45))}
.lc-pouch:hover{opacity:1;filter:drop-shadow(0 0 9px rgba(150,232,110,.6));transform:translateY(-1px)}
.lc-pouch:active{transform:scale(.9)}
.lc-pouch:focus-visible{outline:1px solid rgba(170,240,140,.9);outline-offset:2px;border-radius:8px}
.lc-pouch[aria-expanded="true"]{opacity:1;filter:drop-shadow(0 0 11px rgba(150,232,110,.8))}
/* ══【N492·用户要求】点击后"流体转变、丝滑过渡" ══
   不是两张图硬切：同一个 SVG 里
     · 三片袋口花瓣绕各自根部**向外旋转张开**（中间那片压扁下沉）；
     · 袋口内衬深绿**淡入**；
     · 袋里的金币**上浮 + 微微放大**；
     · 四枚金币从袋口**带弹性地飞出来**（位移 + 缩放 + 淡入，逐个错开）。
   全部用 transform / opacity 走合成层，缓动用带回弹的 cubic-bezier → 所以是"流体"而不是"跳变"。
   SVG 里的 transform-origin 用用户坐标（transform-box:view-box），行星齿轮式的旋转才不会跑偏。 */
.lc-pouch .pc-petal{transform-box:view-box;transition:transform .5s cubic-bezier(.22,.86,.18,1)}
.lc-pouch .pc-petal-l{transform-origin:28.4px 25.6px}
.lc-pouch .pc-petal-m{transform-origin:32px 24.7px}
.lc-pouch .pc-petal-r{transform-origin:35.6px 25.6px}
.lc-pouch .pc-coin-in{transform-box:view-box;transform-origin:32px 18px;
  transition:transform .5s cubic-bezier(.22,.86,.18,1)}
.lc-pouch .pc-inner{opacity:.45;transition:opacity .42s ease}
.lc-pouch .pc-coin-out{transform-box:fill-box;transform-origin:50% 50%;opacity:0;
  transform:translateY(5.5px) scale(.5);
  transition:opacity .24s ease,transform .56s cubic-bezier(.2,1.42,.36,1)}
.lc-pouch[aria-expanded="true"] .pc-petal-l{transform:rotate(-31deg) translate(-2.6px,1.2px)}
.lc-pouch[aria-expanded="true"] .pc-petal-r{transform:rotate(31deg) translate(2.6px,1.2px)}
.lc-pouch[aria-expanded="true"] .pc-petal-m{transform:translateY(3.8px) scaleY(.46)}
.lc-pouch[aria-expanded="true"] .pc-inner{opacity:1}
.lc-pouch[aria-expanded="true"] .pc-coin-in{transform:translateY(-2.8px) scale(1.07)}
.lc-pouch[aria-expanded="true"] .pc-coin-out{opacity:1;transform:none}
.lc-pouch[aria-expanded="true"] .pc-co1{transition-delay:.02s}
.lc-pouch[aria-expanded="true"] .pc-co3{transition-delay:.07s}
.lc-pouch[aria-expanded="true"] .pc-co2{transition-delay:.12s}
.lc-pouch[aria-expanded="true"] .pc-co4{transition-delay:.17s}
@media (prefers-reduced-motion:reduce){
  .lc-pouch .pc-petal,.lc-pouch .pc-coin-in,.lc-pouch .pc-coin-out{transition-duration:.01ms}
  .lc-pouch .pc-coin-in{transition-delay:0s!important}
}
/* ══【N490·回归修复】手动选风格后芯片上的第三维「创意方向」══
   （【N492 再次补回】这一块在上一轮替换按钮样式时又被整段吃掉了 —— 同一个坑踩了两次。
     教训升级为硬规则：**任何整块替换前先 grep 出范围内所有选择器名，替换后必须逐条复查**。） */
.lc-slot.lc-hasang{padding-top:3px;padding-bottom:3px}
.lc-slot.lc-hasang .lc-body{flex-direction:column;justify-content:center;gap:2px}
.lc-l1{display:flex;align-items:center;justify-content:center;gap:0;min-width:0;max-width:100%;overflow:hidden}
.lc-ang{display:block;flex:0 1 auto;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;
  padding:0 4px;border-radius:6px;background:rgba(255,140,160,.12);border:1px solid rgba(255,140,160,.28);
  font-size:8px;line-height:1.4;color:#ffc2cb;white-space:nowrap}
/* 【N489】骰子恢复"自动顶到右端"，锦囊跟在它右边成组 */
.lc-reel .lc-dice{margin-left:auto}
/* ── 锦囊云：全屏浮层（透明底，只用来接"点外面收拢"） ── */
.lc-cloud{position:fixed;inset:0;z-index:2147482999;display:none;background:rgba(4,10,18,.32);
  backdrop-filter:blur(2px);opacity:0;transition:opacity .22s ease}
.lc-cloud.on{display:block;opacity:1}
/* ══【N493·用户要求】风格块＝**稍微倒角的矩形**（不再是不规则云朵/椭圆），
   周围**闪烁荧光**，并保留轻微漂浮；云层里再加一层**荧光颗粒**。
   闪烁不用 box-shadow 动画（30 块每帧重绘太贵）：改成每块挂一个 `::before` 柔光晕，
   只动 `opacity/transform`（合成层），成本几乎为零。 */
.lc-pill{position:absolute;left:0;top:0;display:inline-flex;align-items:center;justify-content:center;
  margin:0;padding:0 20px;height:40px;border:0;border-radius:13px;
  background:linear-gradient(180deg, rgba(32,76,66,.97), rgba(13,36,32,.97));
  color:#dcfff3;font-family:inherit;font-size:12.5px;letter-spacing:.02em;white-space:nowrap;cursor:pointer;
  transform-origin:50% 50%;will-change:transform;opacity:0;
  box-shadow:
    inset 0 0 0 1px rgba(154,255,209,.38),
    inset 0 2px 10px rgba(255,255,255,.12),
    0 0 14px rgba(91,232,185,.45),
    0 0 30px rgba(91,232,185,.22),
    0 10px 24px rgba(0,0,0,.42);
  -webkit-tap-highlight-color:transparent}
.lc-pill::before{content:'';position:absolute;inset:-11px;border-radius:inherit;pointer-events:none;
  background:radial-gradient(closest-side, rgba(120,255,205,.40), rgba(91,232,185,.15) 58%, rgba(91,232,185,0) 78%);
  opacity:.35;animation:lcPillShimmer 3.4s ease-in-out infinite;
  animation-delay:calc(var(--sd, 0) * -1s)}
@keyframes lcPillShimmer{0%,100%{opacity:.26;transform:scale(1)}50%{opacity:.82;transform:scale(1.06)}}
.lc-pill:hover{border-radius:13px;color:#f2fffb;
  box-shadow:
    inset 0 0 0 1px rgba(180,255,224,.78),
    inset 0 2px 12px rgba(255,255,255,.2),
    0 0 20px rgba(120,255,205,.7),
    0 0 44px rgba(91,232,185,.38),
    0 12px 28px rgba(0,0,0,.5)}
.lc-pill:focus-visible{outline:1px solid rgba(154,255,209,.9);outline-offset:3px;border-radius:13px}
.lc-pill.on{color:#f4fffc;background:linear-gradient(180deg, rgba(46,108,88,.98), rgba(18,54,44,.98));
  box-shadow:
    inset 0 0 0 1px rgba(190,255,232,.85),
    inset 0 2px 12px rgba(255,255,255,.18),
    0 0 22px rgba(120,255,205,.78),
    0 0 50px rgba(91,232,185,.42),
    0 10px 24px rgba(0,0,0,.42)}
.lc-pill[data-drag]{cursor:grabbing;border-radius:13px;
  box-shadow:
    inset 0 0 0 1px rgba(210,255,240,.95),
    0 0 26px rgba(140,255,215,.85),
    0 0 58px rgba(91,232,185,.46),
    0 16px 32px rgba(0,0,0,.55)}
/* 荧光颗粒：一层柔光小点，各自慢速上浮 + 明暗呼吸（纯 transform/opacity，零 rAF 成本）。
   位置与延迟都由索引算出来 → **每次打开完全一样**（用户要求"排序不变"）。 */
.lc-dust{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.lc-dust i{position:absolute;width:3px;height:3px;border-radius:50%;opacity:.4;
  background:radial-gradient(circle, rgba(200,255,232,.95), rgba(91,232,185,.5) 45%, rgba(91,232,185,0) 72%);
  box-shadow:0 0 8px rgba(120,255,205,.75);
  animation:lcDustFloat 9s ease-in-out infinite;animation-delay:calc(var(--dd,0) * -1s)}
@keyframes lcDustFloat{
  0%,100%{transform:translate3d(0,0,0) scale(var(--ds,.8));opacity:.22}
  50%{transform:translate3d(6px,-15px,0) scale(calc(var(--ds,.8) * 1.3));opacity:.8}}
@media (prefers-reduced-motion:reduce){
  .lc-pill::before{animation:none}
  .lc-dust i{animation:none}
}
/* ── 锦囊云：全屏浮层（透明底，只用来接"点外面收拢"） ── */
.lc-cloud{position:fixed;inset:0;z-index:2147482999;display:none;background:rgba(4,10,18,.32);
  backdrop-filter:blur(2px);opacity:0;transition:opacity .22s ease}
.lc-cloud.on{display:block;opacity:1}
/* ══【N489·用户要求】弹出的风格块不要"胶囊状"，要**云朵/海绵**感，且**周围有荧光** ══
   胶囊＝固定圆角（border-radius:999px 或 half-height）；这里改成**百分比椭圆角**，
   四个角的横竖半径各不相同 → 边缘不规则、像一块被揉开的海绵/云团；
   再叠 3 档 data-b 变体，30 块形状各异。
   荧光：靠多层绿色 box-shadow（配合径向高光）做出"周围发光"的晕，不用 filter（避免每帧重栅格化）。 */
.lc-pill{position:absolute;left:0;top:0;display:inline-flex;align-items:center;justify-content:center;
  margin:0;padding:0 22px;height:42px;border:0;
  border-radius:46% 54% 44% 56% / 62% 66% 34% 38%;
  background:
    radial-gradient(120% 140% at 30% 18%, rgba(255,255,255,.22), rgba(255,255,255,0) 58%),
    radial-gradient(120% 150% at 78% 108%, rgba(91,232,185,.16), rgba(91,232,185,0) 62%),
    linear-gradient(180deg, rgba(30,74,64,.97), rgba(13,36,32,.97));
  color:#dcfff3;font-family:inherit;font-size:12.5px;letter-spacing:.02em;white-space:nowrap;cursor:pointer;
  transform-origin:50% 50%;will-change:transform;opacity:0;
  box-shadow:
    inset 0 0 0 1px rgba(154,255,209,.36),
    inset 0 2px 10px rgba(255,255,255,.14),
    0 0 14px rgba(91,232,185,.55),
    0 0 34px rgba(91,232,185,.30),
    0 0 62px rgba(60,200,160,.16),
    0 10px 26px rgba(0,0,0,.42);
  -webkit-tap-highlight-color:transparent}
.lc-pill[data-b="1"]{border-radius:54% 46% 56% 44% / 58% 62% 38% 42%;padding:0 25px 0 19px}
.lc-pill[data-b="2"]{border-radius:44% 56% 48% 52% / 66% 54% 46% 34%;padding:0 19px 0 25px}
.lc-pill:hover{border-radius:50% 50% 48% 52% / 60% 60% 40% 40%;color:#f2fffb;
  box-shadow:
    inset 0 0 0 1px rgba(180,255,224,.72),
    inset 0 2px 12px rgba(255,255,255,.22),
    0 0 20px rgba(120,255,205,.75),
    0 0 46px rgba(91,232,185,.42),
    0 0 80px rgba(60,200,160,.22),
    0 12px 30px rgba(0,0,0,.5)}
.lc-pill:focus-visible{outline:1px solid rgba(154,255,209,.9);outline-offset:3px}
.lc-pill.on{color:#f4fffc;
  background:
    radial-gradient(120% 140% at 30% 18%, rgba(255,255,255,.28), rgba(255,255,255,0) 58%),
    linear-gradient(180deg, rgba(46,108,88,.98), rgba(18,54,44,.98));
  box-shadow:
    inset 0 0 0 1px rgba(190,255,232,.85),
    inset 0 2px 12px rgba(255,255,255,.2),
    0 0 22px rgba(120,255,205,.8),
    0 0 52px rgba(91,232,185,.45),
    0 0 88px rgba(60,200,160,.22),
    0 10px 26px rgba(0,0,0,.42)}
.lc-pill[data-drag]{cursor:grabbing;
  box-shadow:
    inset 0 0 0 1px rgba(210,255,240,.95),
    inset 0 2px 12px rgba(255,255,255,.26),
    0 0 26px rgba(140,255,215,.9),
    0 0 60px rgba(91,232,185,.5),
    0 16px 34px rgba(0,0,0,.55)}
@media (prefers-reduced-motion:reduce){.lc-cloud{transition-duration:.01ms}}
/* 【N290】物料页「重新分类」按钮（不调 AI / 不扣分，按最新规则重算现有清单） */
.lc-reclassify{flex:0 0 auto;margin-left:8px;background:rgba(154,255,209,.08);border:1px solid rgba(154,255,209,.30);color:#bfe8cc;border-radius:999px;padding:3px 10px;font-size:10.5px;letter-spacing:.04em;cursor:pointer;font-family:inherit}
.lc-reclassify:hover{background:rgba(154,255,209,.16);border-color:rgba(154,255,209,.55);color:#eafff5}
.idea{width:100%;min-height:150px;padding:16px;border:0;border-radius:24px;background:rgba(120,160,255,.05);color:var(--ink);resize:vertical;backdrop-filter:blur(36px) saturate(150%);box-shadow:inset 0 1px rgba(255,255,255,.10),0 0 0 1px rgba(255,255,255,.02),0 16px 40px rgba(0,0,0,.4),0 0 20px rgba(91,232,185,.05);transition:.8s cubic-bezier(.22,.68,.18,1)}
.idea:focus{outline:none;box-shadow:inset 0 1px rgba(255,255,255,.16),0 16px 40px rgba(0,0,0,.4),0 0 36px rgba(91,232,185,.16),0 0 20px rgba(111,208,232,.10)}
.idea::placeholder{color:var(--ink-faint)}
.send{margin-top:14px;padding:12px 40px;border:0;border-radius:999px;background:linear-gradient(90deg,var(--jade),var(--neon-2));color:#04231a;font-weight:700;cursor:pointer;letter-spacing:.14em;box-shadow:0 16px 40px rgba(15,214,166,.4),0 0 34px rgba(79,255,196,.4),inset 0 1px rgba(255,255,255,.4);transition:.8s cubic-bezier(.22,.68,.18,1)}
.send:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 22px 50px rgba(15,214,166,.55),0 0 60px rgba(79,255,196,.6),0 0 30px rgba(63,224,255,.3)}
.signal{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);color:var(--ink-faint);font-size:11px;letter-spacing:.18em}

/* ===== 设置面板 ===== */
.settings{display:none;position:absolute;right:22px;top:54px;width:min(330px,calc(100% - 32px));padding:20px;border:0;border-radius:24px;background:rgba(90,140,255,.14);box-shadow:0 0 0 1px rgba(255,255,255,.05),0 28px 66px rgba(0,0,0,.66),0 0 54px rgba(79,255,196,.26);backdrop-filter:blur(32px) saturate(170%);z-index:30}
.settings h3{margin:0 0 6px;font-size:14px;color:var(--jade);letter-spacing:.08em}
.settings p{margin:0 0 14px;color:var(--ink-dim);font-size:11px;line-height:1.7}
.settings label{display:block;font-size:12px;color:var(--ink-dim);margin-bottom:6px}
.settings input{width:100%;padding:11px;border:0;border-radius:16px;background:rgba(90,140,255,.08);color:var(--ink);margin-bottom:12px;transition:.3s;box-shadow:inset 0 1px rgba(255,255,255,.08),0 0 0 1px rgba(255,255,255,.02)}
.settings input:focus{outline:none;border-color:var(--jade);box-shadow:0 0 20px var(--glow-jade)}
.settings-divider{border:none;border-top:1px solid rgba(255,255,255,.1);margin:18px 0 14px}
.settings-sub{margin:0 0 6px;font-size:13px;color:#cff5dd;letter-spacing:.08em}
.settings-hint{margin:0 0 14px;color:var(--ink-dim);font-size:11px;line-height:1.7}
.test-setting{width:100%;padding:11px;margin-bottom:10px;border:0;border-radius:16px;background:rgba(255,255,255,.06);color:var(--ink);cursor:pointer;letter-spacing:.1em;transition:.3s;box-shadow:inset 0 1px rgba(255,255,255,.1)}
.test-setting:hover{background:rgba(79,255,196,.16);box-shadow:0 0 30px rgba(79,255,196,.24)}
.test-setting:disabled{opacity:.5;cursor:wait}
.api-result{display:none;font-size:11px;margin:0 0 10px;padding:9px 11px;border-radius:10px;color:var(--ink-dim)}
.api-result.ok{display:block;background:rgba(79,227,176,.1);color:var(--jade)}
.api-result.bad{display:block;background:rgba(255,110,110,.14);color:#ff9d9d}
.api-result.pending{display:block;background:rgba(79,227,176,.08);color:#bfead9}
.save-setting{width:100%;padding:12px;border:0;border-radius:12px;background:linear-gradient(180deg,var(--jade),var(--jade-deep));color:#06251a;font-weight:700;cursor:pointer;letter-spacing:.12em;box-shadow:0 14px 30px rgba(18,168,120,.3);transition:.3s}
.save-setting:hover{transform:translateY(-2px);box-shadow:0 20px 40px rgba(18,168,120,.42)}

/* ===== 灵感页 ===== */
.idea-page{flex-direction:column;overflow:auto;background:radial-gradient(120% 100% at 50% 0%,rgba(18,168,120,.10),transparent 55%),radial-gradient(80% 70% at 100% 100%,rgba(232,196,122,.08),transparent 55%),var(--bg)}
.idea-head{display:flex;align-items:center;justify-content:space-between;padding:22px 30px;border-bottom:0;background:rgba(120,160,255,.06);backdrop-filter:blur(30px) saturate(170%)}
.idea-head h2{margin:0;font-size:20px;color:#f0f6f0;font-weight:600;letter-spacing:.04em}
.idea-head p{margin:8px 0 0;color:var(--ink-dim);font-size:12px}
.eyebrow{color:var(--jade);font-size:10px;letter-spacing:.22em;margin-bottom:8px;text-transform:uppercase}
.idea-grid{display:grid;grid-template-columns:repeat(2,minmax(300px,1fr));gap:20px;padding:24px 30px}
.idea-card{position:relative;display:flex;flex-direction:column;overflow:hidden;border:0;border-radius:34px;background:linear-gradient(160deg,rgba(140,170,255,.16),rgba(90,150,255,.06));box-shadow:inset 0 1px rgba(255,255,255,.16),0 0 0 1px rgba(255,255,255,.04),0 24px 54px rgba(0,0,0,.56),0 0 40px rgba(79,255,196,.12);backdrop-filter:blur(34px) saturate(170%);padding:22px 24px 0;transition:.9s cubic-bezier(.22,.68,.18,1);animation:riseIn .9s cubic-bezier(.22,.68,.18,1) both}
.idea-card:nth-child(2){animation-delay:.06s}.idea-card:nth-child(3){animation-delay:.12s}.idea-card:nth-child(4){animation-delay:.18s}
@keyframes riseIn{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}
.idea-card:hover{transform:translateY(-8px) scale(1.025);box-shadow:inset 0 1px rgba(255,255,255,.22),0 34px 70px rgba(0,0,0,.66),0 0 66px rgba(79,255,196,.34),0 0 28px rgba(63,224,255,.18)}
.idea-card.chosen{box-shadow:inset 0 1px rgba(255,255,255,.24),0 30px 64px rgba(0,0,0,.62),0 0 0 2px rgba(79,255,196,.4),0 0 80px rgba(79,255,196,.5),0 0 30px rgba(155,92,255,.24)}
/* 已生成过剧本的创意：整体金黄色（持久） */
.idea-card.idea-generated{background:linear-gradient(160deg,rgba(244,194,70,.30),rgba(232,178,54,.16));box-shadow:inset 0 1px rgba(255,255,255,.18),0 0 0 2px rgba(244,194,70,.55),0 24px 54px rgba(0,0,0,.5),0 0 40px rgba(244,194,70,.3)}
.idea-card.idea-generated .num{color:#ffd76a}
.idea-card.idea-generated .idea-select{background:linear-gradient(180deg,rgba(244,194,70,.4),rgba(232,178,54,.16));color:#3d2a00;font-weight:700}
.idea-card:before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(180deg,var(--jade),transparent);opacity:.0;transition:opacity .8s}
.idea-card:hover:before{opacity:.9}
/* 【v10.12x】灵感卡片：一句话故事 + 可拍性体检 + 朗读按钮 */
.lc-idea-log{margin:10px 0 6px;padding:7px 10px;border-radius:9px;background:rgba(8,22,17,.42);border-left:3px solid rgba(154,255,209,.5);
  border-top:1px solid rgba(255,255,255,.06);border-right:1px solid rgba(255,255,255,.06);border-bottom:1px solid rgba(255,255,255,.06);
  color:#cfe9de;font-size:11.5px;line-height:1.65;word-break:break-word;white-space:normal}
.lc-idea-log b{display:block;margin-bottom:2px;color:#9affd1;font-weight:600;font-size:11px;letter-spacing:.3px}
.lc-idea-audit{display:inline-block;margin:0 0 10px;padding:2px 9px;border-radius:999px;font-size:11px;line-height:1.7;cursor:pointer;
  color:#ffd68f;background:rgba(255,214,143,.10);border:1px solid rgba(255,214,143,.35)}
.lc-idea-audit:hover{background:rgba(255,214,143,.18)}
.lc-idea-audit.ok{color:#9affd1;background:rgba(154,255,209,.10);border-color:rgba(154,255,209,.38)}
.lc-idea-tts svg,.lc-idea-voice svg{display:block}
.lc-idea-tts{color:#9affd1}
.lc-idea-tts:hover,.lc-idea-voice:hover{box-shadow:0 0 0 1px rgba(154,255,209,.35),0 0 16px rgba(79,255,196,.35)}
/* 【v10.13r·用户要求】朗读中＝**金黄色**（与站内金色徽标同色系）+ 轻微呼吸光；停止后恢复无色默认态 */
.lc-idea-tts.on{background:linear-gradient(180deg,rgba(243,212,137,.95),rgba(217,168,62,.95))!important;
  border-color:rgba(255,232,166,.95)!important;color:#3a2a06!important;
  box-shadow:0 0 18px rgba(243,212,137,.6),0 0 6px rgba(255,220,140,.5),inset 0 1px rgba(255,255,255,.5)!important;
  animation:lcTtsPulse 1.35s ease-in-out infinite}
@keyframes lcTtsPulse{0%,100%{box-shadow:0 0 14px rgba(243,212,137,.45),0 0 4px rgba(255,220,140,.4),inset 0 1px rgba(255,255,255,.45)}50%{box-shadow:0 0 24px rgba(243,212,137,.8),0 0 10px rgba(255,225,150,.65),inset 0 1px rgba(255,255,255,.55)}}
.lc-script-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.lc-scope-badge{font-size:11px;color:#9affd1;background:rgba(154,255,209,.10);border:1px solid rgba(154,255,209,.32);border-radius:999px;padding:2px 9px}
#scriptText.lc-read-flash{animation:lcReadFlash 1.5s ease-out}
@keyframes lcReadFlash{0%{background:rgba(154,255,209,.22)}100%{background:transparent}}
.lc-idea-voice{position:absolute;right:58px;top:14px;z-index:6;pointer-events:auto;width:34px;height:34px;border-radius:11px;display:grid;place-items:center;cursor:pointer;
  border:1px solid rgba(255,255,255,.22);background:rgba(6,16,12,.55);color:#cfe9de;font-size:14px;line-height:1;backdrop-filter:blur(8px);transition:.18s}
.lc-idea-voice:hover{border-color:rgba(154,255,209,.6);color:#eafff5}
#lcTtsPanel{width:320px;max-width:92vw;padding:12px 13px;border-radius:14px;border:1px solid rgba(154,255,209,.28);background:rgba(7,14,11,.97);
  box-shadow:0 18px 50px rgba(0,0,0,.6);color:#dff7ec;font-size:12px;line-height:1.6}
.lc-tts-p-h{font-weight:600;color:#9affd1;margin:2px 0 6px}
.lc-tts-p-h span{font-weight:400;color:#8fb3a3;font-size:11px}
.lc-tts-p-list{max-height:210px;overflow:auto;display:flex;flex-direction:column;gap:5px;margin-bottom:10px}
.lc-tts-p-item{text-align:left;padding:6px 9px;border-radius:8px;cursor:pointer;font-size:11.5px;
  border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:#dff7ec}
.lc-tts-p-item:hover{background:rgba(154,255,209,.12)}
.lc-tts-p-item.on{border-color:rgba(154,255,209,.7);background:rgba(71,145,106,.28)}
.lc-tts-p-empty{color:#ffd68f;font-size:11.5px;line-height:1.7}
.lc-tts-p-rate{display:flex;gap:6px;flex-wrap:wrap}
.lc-tts-p-r{padding:5px 10px;border-radius:8px;cursor:pointer;font-size:11.5px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.04);color:#dff7ec}
.lc-tts-p-r.on{border-color:rgba(154,255,209,.7);background:rgba(71,145,106,.28)}
.lc-idea-tts{position:absolute;right:16px;top:14px;z-index:6;pointer-events:auto;width:34px;height:34px;border-radius:11px;display:grid;place-items:center;cursor:pointer;
  border:1px solid rgba(154,255,209,.35);background:rgba(6,16,12,.62);color:#bff5da;font-size:15px;line-height:1;backdrop-filter:blur(8px);transition:.18s}
.lc-idea-tts:hover{border-color:rgba(154,255,209,.7);color:#eafff5}
.lc-idea-tts.on{background:rgba(71,145,106,.34);border-color:rgba(142,232,189,.85);color:#eafff5}
.idea-card .num{font-size:10px;letter-spacing:.18em;color:var(--jade);margin:0 0 12px;font-weight:600}
.idea-card h3{font-size:19px;color:#f0f6f0;margin:0 0 14px;font-weight:600;line-height:1.4}
.idea-controls{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;padding:13px 15px;border-radius:20px;background:rgba(255,255,255,.06);border:0;margin-bottom:16px;box-shadow:inset 0 1px rgba(255,255,255,.12),0 0 0 1px rgba(255,255,255,.03)}
.range-control{display:flex;flex-direction:column;gap:5px}
.range-control label{font-size:9px;color:var(--ink-dim);letter-spacing:.06em}
.range-control span{font-size:11px;color:var(--jade);font-weight:700}
.range-control input{width:100%;height:4px;accent-color:var(--jade);cursor:pointer}
.idea-card h4{font-size:12px;color:var(--jade);margin:12px 0 6px;font-weight:600;letter-spacing:.06em}
.idea-card p{font-size:12px;line-height:1.75;color:var(--ink-dim);margin:0}
.idea-select{margin:16px -24px 0;padding:14px;border:0;border-top:0;background:linear-gradient(180deg,rgba(79,255,196,.18),rgba(79,255,196,.05));color:#dcfff4;cursor:pointer;font-size:13px;letter-spacing:.2em;border-radius:0 0 34px 34px;transition:.8s cubic-bezier(.22,.68,.18,1);font-weight:700;box-shadow:inset 0 1px rgba(255,255,255,.12),0 0 30px rgba(79,255,196,.1)}
.idea-select:hover{background:linear-gradient(180deg,rgba(79,255,196,.4),rgba(79,255,196,.16));color:#eafff6;box-shadow:inset 0 1px rgba(255,255,255,.2),0 0 40px rgba(79,255,196,.34)}
.idea-actions{display:flex;justify-content:center;padding:0 30px 28px}
.primary{padding:12px 40px;border:0;border-radius:999px;background:linear-gradient(90deg,var(--jade),var(--neon-2));color:#04231a;font-weight:700;cursor:pointer;letter-spacing:.14em;box-shadow:0 16px 40px rgba(15,214,166,.4),0 0 34px rgba(79,255,196,.4),inset 0 1px rgba(255,255,255,.4);transition:.8s cubic-bezier(.22,.68,.18,1)}
.primary:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 22px 50px rgba(15,214,166,.55),0 0 60px rgba(79,255,196,.6),0 0 30px rgba(63,224,255,.3)}

/* ===== 剧本页 ===== */
.script-page{flex-direction:column;background:linear-gradient(135deg,#667b5d 0%,#526b52 45%,#405744 100%);color:#f6f7ef}.script-page .step-head,.script-page .script-shell{opacity:0;transition:opacity 1.15s ease}.script-page.content-ready .step-head,.script-page.content-ready .script-shell{opacity:1}
.step-head{position:relative;display:flex;align-items:center;justify-content:space-between;padding:14px 26px 14px 30px;border-bottom:0;background:rgba(42,61,42,.62);backdrop-filter:blur(28px) saturate(105%);box-shadow:0 12px 34px rgba(16,30,18,.3);gap:16px}
.step-head h2{margin:0;font-size:20px;color:#fffef5;font-weight:500}.step-head p{margin:6px 0 0;color:rgba(244,249,235,.78);font-size:12px}
.step-head-title{flex:1;min-width:0}
.step-head-right{display:flex;align-items:center;gap:14px;flex:0 0 auto}
#scriptState{color:#efffd0;font-size:12px;font-weight:600;white-space:nowrap}
.script-shell{flex:1;width:100%;overflow:auto;padding:24px clamp(20px,5vw,70px)}
.delivery-grid{display:block;max-width:980px;margin:0 auto}
.pure-script{padding:32px 36px;border:0;border-radius:34px;background:linear-gradient(145deg,rgba(74,101,70,.76),rgba(43,64,47,.72));box-shadow:inset 0 1px rgba(255,255,255,.24),0 20px 44px rgba(15,29,17,.42);backdrop-filter:blur(30px) saturate(108%)}
.pure-script .script-kicker{color:#e9f8cc;font-size:10px;letter-spacing:.22em;margin-bottom:14px;text-transform:uppercase}
.pure-script h3{margin:0 0 24px;color:#fffef5;font-size:22px;font-weight:600}
.pure-script pre{margin:0;white-space:pre-wrap;font:18px/1.78 inherit;color:#fbfdf4;letter-spacing:.02em;text-shadow:0 1px 2px rgba(10,22,12,.22)}   /* 【N197】大字紧行距：年长者易读，版面依旧精致 */
/* ===== 物料提取按钮（剧本页顶部栏右侧，与返回/状态同排） ===== */
.script-page .extract-btn{position:relative;z-index:51;display:flex;align-items:center;height:38px;padding:0 18px;border:1px solid rgba(154,255,209,.35);border-radius:999px;background:rgba(8,26,16,.85);color:#c9ffe4;font-size:12px;font-weight:400;letter-spacing:.08em;cursor:pointer;box-shadow:0 8px 26px rgba(0,0,0,.3),inset 0 1px rgba(255,255,255,.08);backdrop-filter:blur(10px);transition:.35s}
.script-page .extract-btn:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 0 0 1px rgba(141,255,199,.5),0 0 20px rgba(94,255,202,.3),0 12px 30px rgba(0,0,0,.3)}
/* 视频阶段（努力成长）隐藏物料提取；完成剧本撰写后才显示 */
.script-page .extract-btn{opacity:0;visibility:hidden;pointer-events:none;transition:opacity .5s ease,visibility .5s ease}
.script-page.script-complete .extract-btn{opacity:1;visibility:visible;pointer-events:auto}
/* ===== 提取中页面：互斥全屏层 ===== */
.extract-page{position:absolute;inset:0;flex-direction:column;background:#050806;color:#f6f7ef;overflow:hidden}
/* 加载层（视频+文字）默认隐藏，由 JS 控制显示 */
.extract-loading{display:none;position:absolute;inset:0;z-index:6;background:#050806;overflow:hidden}
.extract-loading .extract-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0;opacity:1;filter:none;transition:opacity .9s ease}
.extract-loading-label{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;align-items:center;gap:10px;padding:11px 20px;border:1px solid rgba(159,255,214,.32);border-radius:999px;background:rgba(5,22,16,.58);box-shadow:0 0 0 1px rgba(88,224,166,.06),0 10px 34px rgba(0,0,0,.24),inset 0 1px rgba(255,255,255,.12);backdrop-filter:blur(12px);color:#eafcf1;font-size:clamp(14px,1.8vw,20px);font-weight:300;letter-spacing:.12em;white-space:nowrap;text-shadow:0 0 14px rgba(186,255,220,.72),0 0 30px rgba(79,255,196,.3)}
/* 【N182】等待动效：种子→抽茎→展叶→柔和隐没（纯 CSS 双背景层，零额外元素、零图片、零 JS） */
.loading-spinner{position:relative;width:18px;height:18px;flex:0 0 18px;border:0;border-radius:0;box-shadow:none;background-image:linear-gradient(to top,rgba(126,255,197,.2),#7effc5),radial-gradient(ellipse at 0% 100%,#e6fff2 0,#6ff7c0 52%,rgba(111,247,192,0) 74%);background-repeat:no-repeat,no-repeat;background-position:8px 100%,10px 4px;background-size:2px 0,0 0;filter:drop-shadow(0 0 6px rgba(79,255,196,.55));animation:lcSprout 2.6s ease-in-out infinite}
@keyframes lcSprout{0%{background-size:2px 0,0 0;opacity:.3}16%{opacity:1}46%{background-size:2px 10px,0 0}70%{background-size:2px 10px,8px 6px}86%{background-size:2px 10px,8px 6px;opacity:1}100%{background-size:2px 10px,8px 6px;opacity:0}}
/* 返回按钮：加载层内也可见，置顶不遮挡画面主体 */
.extract-back{position:absolute!important;top:12px!important;left:20px!important;right:auto!important;margin:0!important;z-index:20!important;display:inline-flex!important;align-items:center;gap:6px;height:38px;padding:0 18px;border-radius:999px;background:rgba(8,26,16,.82)!important;border:1px solid rgba(154,255,209,.3)!important;color:#c8ffe1!important;font-size:13px!important;font-weight:600;letter-spacing:.1em;box-shadow:0 8px 26px rgba(0,0,0,.35),inset 0 1px rgba(255,255,255,.08);backdrop-filter:blur(10px)}
.extract-back:hover{background:rgba(20,44,29,.9)!important;border-color:rgba(154,255,209,.55)!important}
.extract-gear{position:absolute;top:10px;right:12px;z-index:20;display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:50%;background:rgba(8,26,16,.82);border:1px solid rgba(154,255,209,.3);color:#c8ffe1;font-size:17px;cursor:pointer;box-shadow:0 8px 26px rgba(0,0,0,.35),inset 0 1px rgba(255,255,255,.08);backdrop-filter:blur(10px);transition:.3s}
.extract-gear:hover{transform:rotate(45deg);border-color:rgba(154,255,209,.55);background:rgba(20,44,29,.9)}
/* 齿轮悬浮在右上角，不遮挡右侧栏标题 */
.extract-page .prompt-rail{padding-top:54px}
.extract-page .extract-gear{right:14px;top:12px}
/* 【修08】页级关闭键已删除：齿轮/进入分镜制作 恢复原位 */
/* 统一：齿轮/进入分镜制作/物料提取 右上角同一水平线，高度一致 */
/* 剧本页返回按钮：恢复为 header 流内最左（避免被 absolute 定位到右侧、被物料提取按钮覆盖） */
.script-page .step-head .step-back{position:relative;top:auto;right:auto;z-index:52;margin-right:14px;background:rgba(10,20,32,.5);color:#dbe9de;display:inline-flex;align-items:center;height:38px;box-sizing:border-box;white-space:nowrap}
.extract-page .enter-storyboard{top:12px;height:38px;display:flex;align-items:center;padding:0 18px}
.script-page>.script-actions{top:12px!important}
.script-page>.script-actions .extract-btn{height:38px;display:flex;align-items:center;padding:0 18px}
.enter-storyboard{position:absolute;top:12px;right:60px;z-index:20;padding:0 18px;height:38px;display:flex;align-items:center;border-radius:999px;border:1px solid rgba(154,255,209,.35);background:rgba(8,26,16,.85);color:#c9ffe4;font-size:12px;font-weight:400;letter-spacing:.08em;cursor:pointer;box-shadow:0 8px 26px rgba(0,0,0,.3),inset 0 1px rgba(255,255,255,.08);backdrop-filter:blur(10px);transition:.35s}
.enter-storyboard:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 0 0 1px rgba(141,255,199,.5),0 0 20px rgba(94,255,202,.3),0 12px 30px rgba(0,0,0,.3)}
/* 物料面板层默认隐藏，由 JS 在淡出完成后显示 */
.extract-material{display:none;position:absolute;inset:0;z-index:1;grid-template-columns:230px minmax(0,1fr) 340px;gap:0;background:#080b0a;min-height:0;overflow:hidden}
.mat-item{padding:7px 12px;border:1px solid rgba(154,255,209,.08);border-radius:14px;background:rgba(255,255,255,.035);color:#c4d8cc;font-size:12px}
.vprompt{flex:1;width:100%;min-height:90px;resize:none;border:0;border-radius:16px;padding:13px 15px;background:rgba(8,18,12,.4);color:#f2f8ec;font:13px/1.8 inherit;outline:none;box-shadow:inset 0 1px rgba(255,255,255,.08)}
.vpreview{flex:1;display:flex;align-items:center;justify-content:center;border-radius:18px;background:rgba(8,18,12,.34);border:1px dashed rgba(255,255,255,.14);min-height:150px;color:rgba(232,242,225,.5);font-size:12px;letter-spacing:.1em;overflow:hidden}
.vpreview img{max-width:100%;max-height:100%;border-radius:14px;object-fit:contain}
.vpreview .preview-empty{text-align:center}
.vactions{display:flex;gap:10px;margin-top:12px}
.vactions button{flex:1;padding:11px;border:0;border-radius:14px;background:linear-gradient(180deg,rgba(79,255,196,.9),rgba(39,178,140,.9));color:#07231a;font-weight:600;letter-spacing:.08em;cursor:pointer;transition:.4s}
.vactions button:hover{transform:translateY(-2px);box-shadow:0 12px 26px rgba(79,255,196,.34)}
.vactions button.ghost{background:rgba(255,255,255,.09);color:#eaf6e8}
@media(max-width:720px){.extract-material{flex-direction:column}.extract-mright{border-left:0;border-top:1px solid rgba(255,255,255,.06)}}

/* busy */
#busy{position:fixed;inset:0;z-index:100;display:none;align-items:center;justify-content:center;overflow:hidden;background:rgba(4,7,10,.55);backdrop-filter:blur(2px)}
 .seed-video,.script-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0;opacity:.86;filter:saturate(1.04) brightness(.86) contrast(1.05)}
 .script-video{display:block;opacity:.86;filter:none;transition:opacity 2.4s ease;pointer-events:none}.script-page .script-video{position:absolute;inset:58px 0 0;width:100%;height:calc(100% - 58px);object-fit:cover;z-index:0}.script-page>*:not(.script-video):not(.script-glow):not(#lcOrb){position:relative;z-index:2}
/* ══【N399m】「努力成长」（剧本页）背景＝Specter Orb 幽灵球（reactbits pro · 用户已调参）══
   用户定稿参数见下方引擎 CFG（底色 #010e0a）。
   画布铺满整页、z-index:0（页面里其它内容仍由上面那条规则抬到 z-index:2）；
   原背景视频已整块删除，这一层就是这一屏唯一的背景。 */
#lcOrb{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0;background:#010e0a;pointer-events:none;
  opacity:0;transition:opacity .55s ease}   /* 【N399h】默认不可见：它不是"整页背景" */
.script-page.growth-active #lcOrb,.script-page.regen-active #lcOrb{opacity:1}   /* 只在「努力成长」胶囊阶段出现 */
 .script-video.script-tail{opacity:.14}.script-video.script-fade{opacity:0}.script-glow.script-fade{opacity:0}
 .growth-title{position:absolute;left:50%;top:50%;z-index:3;transform:translate(-50%,-50%);color:rgba(246,250,236,.97);font-size:clamp(24px,3.6vw,42px);font-weight:600;letter-spacing:.2em;white-space:nowrap;text-shadow:0 0 24px rgba(190,246,208,.5),0 0 60px rgba(120,200,150,.25),0 2px 14px rgba(10,27,14,.55);opacity:0;pointer-events:none;transition:opacity 1s ease}
 .growth-wrap{position:absolute;left:50%;top:50%;z-index:5;display:inline-flex;width:max-content;max-width:calc(100vw - 40px);align-items:center;gap:9px;padding:10px 15px;border:1px solid rgba(159,255,214,.25);border-radius:999px;background:rgba(5,18,16,.48);box-shadow:inset 0 1px rgba(255,255,255,.14),0 0 26px rgba(94,255,202,.16);backdrop-filter:blur(20px);transform:translate(-50%,-50%);opacity:0;pointer-events:none;transition:opacity 1s ease}
 .growth-wrap .growth-text{color:#eafcf1;font-size:15px;font-weight:400;letter-spacing:.12em;white-space:nowrap;text-shadow:0 0 14px rgba(186,255,220,.7),0 0 30px rgba(79,255,196,.32)}
  /* 【N182】同一套生长动效（22px 位，水平居中对齐文字） */
  .growth-wrap:before{content:'';position:relative;width:22px;height:22px;flex:0 0 22px;border:0;border-radius:0;box-shadow:none;background-image:linear-gradient(to top,rgba(126,255,197,.2),#7effc5),radial-gradient(ellipse at 0% 100%,#e6fff2 0,#6ff7c0 52%,rgba(111,247,192,0) 74%);background-repeat:no-repeat,no-repeat;background-position:10px 100%,12px 4px;background-size:2px 0,0 0;filter:drop-shadow(0 0 7px rgba(79,255,196,.6));animation:lcSprout22 2.6s ease-in-out infinite}
  @keyframes lcSprout22{0%{background-size:2px 0,0 0;opacity:.3}16%{opacity:1}46%{background-size:2px 13px,0 0}70%{background-size:2px 13px,10px 7px}86%{background-size:2px 13px,10px 7px;opacity:1}100%{background-size:2px 13px,10px 7px;opacity:0}}
 .growth-wrap .growth-sparks{position:absolute;inset:-40%-40%;width:180%;height:180%;pointer-events:none;background:radial-gradient(circle at 18% 30%,rgba(255,246,222,.8) 0,rgba(255,246,222,0) 1.4%),radial-gradient(circle at 82% 22%,rgba(200,236,255,.75) 0,rgba(200,236,255,0) 1.2%),radial-gradient(circle at 70% 76%,rgba(255,236,208,.7) 0,rgba(255,236,208,0) 1.5%),radial-gradient(circle at 26% 82%,rgba(246,222,178,.65) 0,rgba(246,222,178,0) 1.3%),radial-gradient(circle at 55% 12%,rgba(224,244,225,.6) 0,rgba(224,244,225,0) 1.1%);filter:blur(.4px);animation:growthSparks 6s ease-in-out infinite alternate}
 @keyframes growthSparks{0%,100%{transform:scale(.96) translate(0,0);opacity:.7}50%{transform:scale(1.05) translate(0,-6px);opacity:1}}
 .script-page.growth-active .growth-wrap{opacity:1}
/* 【N347】重新生成剧本：旧剧本灰显（不清空、不播成长视频），芽苗提示条复用为"正在重新生成" */
.script-page.regen-active .growth-wrap{opacity:1}
.script-page.regen-active .growth-text{color:#dff6e8}
.script-page.regen-active #deliveryGrid,
.script-page.regen-active #lcDlgAudit{opacity:.26;filter:grayscale(.55);pointer-events:none;transition:opacity .3s ease,filter .3s ease}
.script-page.regen-active #scriptAiPanel{opacity:.45;pointer-events:none}
/* “努力成长”已等待秒数：让用户知道生成仍在进行（无取消按钮，依靠看门狗兜底） */
.growth-elapsed{flex:0 0 auto;font-size:11px;color:#9fb8a8;font-variant-numeric:tabular-nums;white-space:nowrap}
 .cover.fade-away{opacity:0;transition:opacity .9s ease}
 .script-glow{position:absolute;inset:-18%;z-index:1;display:block;pointer-events:none;background:radial-gradient(circle at 18% 28%,rgba(72,169,255,.5),transparent 19%),radial-gradient(circle at 82% 22%,rgba(54,134,255,.38),transparent 17%),radial-gradient(circle at 72% 78%,rgba(96,190,255,.32),transparent 21%),radial-gradient(circle at 24% 84%,rgba(29,108,232,.28),transparent 20%);filter:blur(34px);opacity:0;transform:scale(.9);transition:opacity 2.4s ease,transform 4s ease;animation:blueDrift 9s ease-in-out infinite alternate}
 .script-glow.show{display:block;opacity:.52;transform:scale(1)}
 @keyframes blueDrift{0%{background-position:0 0,100% 0,100% 100%,0 100%}50%{background-position:22% 12%,78% 16%,82% 84%,18% 76%}100%{background-position:8% 24%,92% 8%,70% 90%,28% 68%}}
 #busy:after{content:'';position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(3,9,10,.16),rgba(3,9,10,.42)),radial-gradient(circle at 50% 48%,transparent 0%,rgba(4,10,9,.3) 100%);pointer-events:none}
#busy.show{display:flex}
/* ══【N372】加载层背景＝SideRays 侧光射线（原背景视频已删除）══
   画布铺满整层、压在转圈框**下面**；背景底色改深，让侧光成为唯一视觉主体。 */
#lcRays{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0;background:radial-gradient(120% 90% at 78% 12%,#0d1a12 0%,#060c09 55%,#030605 100%)}
#busy.show #lcRays{opacity:1}
/* ══【N373】「正在提取素材」背景＝LaserFlow 激光流 ══
   画布铺满整层、黑底（这个效果靠 screen 混合，底色不黑会发灰）；原背景视频永久隐藏；
   加载文案与转圈保持在最上层。 */
#lcLaser{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0;background:#000}
.extract-page .extract-video{display:none!important}
.extract-page .extract-loading-label{z-index:3}   /* 【N373】只提层级：定位仍用原规则（absolute + translate 居中），绝不能改成 relative */
/* ══【N375】兜底背景：WebGL 被拒 / 着色器编译失败时，用纯 CSS 画一道同色系激光 —— 保证那一屏永远有画面 */
.extract-page.lc-fallback .extract-loading{background:
  radial-gradient(38% 62% at 50% 108%, rgba(84,124,24,.55) 0%, rgba(84,124,24,.18) 42%, rgba(0,0,0,0) 72%),
  linear-gradient(180deg, rgba(84,124,24,.32) 0%, rgba(84,124,24,.09) 46%, rgba(84,124,24,.32) 100%), #04070a}
.extract-page.lc-fallback .extract-loading::before{content:'';position:absolute;left:50%;top:0;width:2px;height:62%;transform:translateX(-50%);
  background:linear-gradient(180deg, rgba(132,204,22,0) 0%, rgba(132,204,22,.55) 38%, rgba(190,255,120,.85) 100%);
  filter:blur(1.2px) drop-shadow(0 0 18px rgba(132,204,22,.65));pointer-events:none}
.extract-page.lc-fallback .extract-loading::after{content:'';position:absolute;left:50%;top:60%;width:min(78%,900px);height:120px;transform:translate(-50%,-50%);
  background:radial-gradient(50% 50% at 50% 50%, rgba(160,220,90,.42) 0%, rgba(84,124,24,.16) 45%, rgba(0,0,0,0) 78%);
  filter:blur(6px);pointer-events:none}
#busy .busy-box{z-index:2}
.busy-box{position:relative;z-index:2;display:flex;align-items:center;gap:12px;padding:16px 22px;border:0;border-radius:20px;background:rgba(17,37,26,.48);color:#f4f9e9;font-size:14px;letter-spacing:.08em;box-shadow:inset 0 1px rgba(255,255,255,.22),0 24px 54px rgba(0,0,0,.5),0 0 44px rgba(145,220,130,.2);backdrop-filter:blur(20px)}
.spinner{width:18px;height:18px;border:2px solid rgba(79,255,196,.2);border-top-color:var(--jade);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

@media(max-width:600px){
  .glow-prompt{font-size:26px;letter-spacing:.16em}
  .project-grid{grid-template-columns:repeat(2,108px);gap:10px}
  .project-card{height:92px;border-radius:15px}
  .idea-grid{grid-template-columns:1fr}
  .history-entry{min-width:200px}
}

/* ===== 微交互：点按 / 滑动 / 经过均有动态（放慢·丝滑） ===== */
/* 平滑全局动效基底 — 缓慢柔和的丝滑曲线 */
button,.content-create,.send,.primary,.idea-card,.history-entry,.project-card,.idea-select,.slider,.field{will-change:transform;transition:transform .75s cubic-bezier(.22,.68,.18,1),box-shadow .75s cubic-bezier(.22,.68,.18,1),background .7s,color .7s,opacity .7s,letter-spacing .7s}
/* hover：上浮 + 光晕增强（缓慢拉起） */
button:hover{transform:translateY(-3px)}
.step-back:hover,.back:hover,.gear:hover{transform:translateY(-2px)}

/* ===== 统一导航（返回上一步/返回封面/下一步）：一处样式，位置自适，不遮挡 =====
   重要：仅对「独立步骤页」顶部的返回按钮做固定顶部居中；
   【N175】原"必须留在 flex 流内"警告作废：top-title 与 返回封面 已隐藏，中央无冲突，#workspaceBack 改为固定顶部居中胶囊。 */
.lcnav,#ideaBack,#scriptBack,#extractBack,#sbBack{position:fixed!important;top:14px!important;left:50%!important;transform:translateX(-50%)!important;right:auto!important;margin:0!important;z-index:60!important;display:inline-flex!important;align-items:center;gap:6px;height:38px;padding:0 18px;border-radius:999px;background:rgba(8,24,16,.85)!important;border:1px solid rgba(154,255,209,.32)!important;color:#c9ffe4!important;font-size:13px!important;font-weight:600;letter-spacing:.08em;box-shadow:0 8px 26px rgba(0,0,0,.32),inset 0 1px rgba(255,255,255,.08);backdrop-filter:blur(10px);transition:.3s}
#extractBack:hover,.lcnav:hover{transform:translateX(-50%) translateY(-2px)!important;background:rgba(20,44,29,.92)!important;border-color:rgba(154,255,209,.55)!important}
/* 【N175】顶栏返回按钮：固定顶部居中 · 胶囊风格（与 lcnav 同款）；齿轮靠右 */
.topbar #workspaceBack{position:fixed!important;top:14px!important;left:50%!important;transform:translateX(-50%)!important;right:auto!important;margin:0!important;z-index:60!important;display:inline-flex!important;align-items:center;gap:6px;height:38px;padding:0 18px;border-radius:999px!important;background:rgba(8,24,16,.85)!important;border:1px solid rgba(154,255,209,.32)!important;color:#c9ffe4!important;font-size:13px!important;font-weight:600;letter-spacing:.08em;box-shadow:0 8px 26px rgba(0,0,0,.32),inset 0 1px rgba(255,255,255,.08);backdrop-filter:blur(10px);transition:.3s}
.topbar #workspaceBack:hover{transform:translateX(-50%) translateY(-2px)!important;background:rgba(20,44,29,.92)!important;border-color:rgba(154,255,209,.55)!important;color:#fff!important}
.topbar .gear{margin-left:auto!important}
.topbar .back{position:relative!important;top:auto!important;left:auto!important;right:auto!important;transform:none!important;margin-left:16px!important;background:none!important;box-shadow:none!important;z-index:auto!important;display:inline-flex!important;height:auto!important;padding:0!important;border:0!important;color:var(--ink-faint)!important;font-size:12px!important;border-radius:0!important}
.topbar .back:hover{transform:translateY(-2px)!important;background:none!important;color:#fff!important}
/* 非顶栏场景若用到 .step-back/.back（无 .lcnav 标记），保底仍按内容流排布，不强制固定 */
.step-back,.back{position:relative;top:auto;left:auto;right:auto;transform:none}

/* active / 点按：缓慢回缩 */
button:active,.content-create:active,.send:active,.primary:active,.idea-select:active{transform:translateY(1px) scale(.98);transition-duration:.28s}
.idea-card:active{transform:scale(.997);transition-duration:.28s}
/* 按钮光扫过效果（放慢掠过） */
.content-create:before,.send:before,.primary:before{content:'';position:absolute;top:0;left:-130%;width:60%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.35),transparent);opacity:0;transition:left 1.1s cubic-bezier(.22,.68,.18,1)}
.content-create:before,.send:before,.primary:before{pointer-events:none}
.content-create:hover:before,.send:hover:before,.primary:hover:before{left:135%;opacity:1}
.content-create,.send,.primary{position:relative;overflow:hidden}
/* 拉杆拖动时的轨道反馈（缓慢伸缩） */
.range-control input{cursor:pointer}
.range-control input::-webkit-slider-thumb{width:14px;height:14px;border-radius:50%;background:var(--jade);box-shadow:0 0 10px var(--glow-jade);transition:transform .2s cubic-bezier(.22,.68,.18,1),box-shadow .5s cubic-bezier(.22,.68,.18,1);-webkit-appearance:none;appearance:none}
.range-control input::-webkit-slider-thumb:hover{transform:scale(1.22);box-shadow:0 0 16px var(--glow-jade)}
.range-control input:active::-webkit-slider-thumb{transform:scale(1.32)}
/* 卡片经过上浮 + 放大（缓慢丝滑） */
.idea-card:hover{transform:translateY(-10px) scale(1.03);transition-duration:.8s}
/* 历史框滑动 */
.history-list{scroll-behavior:smooth}
/* 文本区获得焦点动画（柔和放大） */
.idea:focus{transform:scale(1.004);transition:transform .7s cubic-bezier(.22,.68,.18,1)}
/* ===== 修复层：对比、层级、柔和动态 ===== */
:root{--bg:#050817;--ink:#f5fbff;--ink-dim:#c0cee8;--ink-faint:#8190b5;--panel:rgba(23,39,86,.34);--panel-2:rgba(37,64,134,.28);--glow-jade:rgba(91,232,185,.18)}
/* 【修339】Windows 原生下拉白底白字修复（macOS 正常，故只在 Win 上暴露）
   成因：<option> 没给背景色 → Win 原生弹出层用系统白底，却继承 app 的浅色字；划过那条走系统高亮=黑字。
   修法：声明 color-scheme:dark + 给 option 显式不透明深底/浅字；颜色一律取 app 自己的 :root 变量。 */
select{color-scheme:dark}
select option{background-color:var(--bg,#050817);color:var(--ink,#f5fbff)}
select option:checked{background-color:#1b3a5c;color:#ffffff}

html,body{background:radial-gradient(110% 90% at 18% 0%,rgba(34,93,190,.28),transparent 52%),radial-gradient(90% 80% at 100% 100%,rgba(111,58,170,.23),transparent 58%),#050817}
.topbar{z-index:20;background:rgba(5,8,23,.82);box-shadow:0 14px 36px rgba(0,0,0,.38)}
.topbar>*{position:relative;z-index:25}.top-brand{display:flex;align-items:center;gap:10px;color:#f7fbff;text-shadow:0 0 18px rgba(111,208,232,.28)}.top-brand:before{content:'虫';display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;font-family:"Songti SC",serif;font-size:14px;color:#071b22;background:linear-gradient(135deg,#b9fff0,#53d8dd);box-shadow:0 0 16px rgba(83,216,221,.45),inset 0 1px rgba(255,255,255,.7);transition:transform .8s cubic-bezier(.22,.68,.18,1),box-shadow .8s}.top-brand:hover:before{transform:rotate(12deg) scale(1.12);box-shadow:0 0 25px rgba(83,216,221,.68),inset 0 1px rgba(255,255,255,.9)}.top-brand span{color:#7ee8d0}
.workspace:after{content:'';position:absolute;inset:60px 0 0;z-index:0;pointer-events:none;background:radial-gradient(50% 70% at 50% 45%,rgba(24,61,132,.22),transparent 70%)}.workbody{z-index:2}
/* 卡片允许内容自然溢出，悬停时文字不再被裁切 */
.idea-card{overflow:visible;isolation:isolate;background:linear-gradient(145deg,rgba(41,77,153,.48),rgba(31,24,77,.38));box-shadow:inset 0 1px rgba(255,255,255,.18),0 0 0 1px rgba(110,194,255,.10),0 24px 54px rgba(0,0,0,.58),0 0 28px rgba(91,232,185,.10)}
.idea-card:hover{z-index:8;transform:translateY(-8px) scale(1.025);box-shadow:inset 0 1px rgba(255,255,255,.26),0 34px 72px rgba(0,0,0,.72),0 0 44px rgba(91,232,185,.24),0 0 28px rgba(142,104,255,.20)}
.idea-card h3,.idea-card p,.idea-card h4,.idea-card .num{position:relative;z-index:2}.history-entry,.project-card{background:linear-gradient(145deg,rgba(34,74,151,.42),rgba(43,25,92,.32))}.history-entry:hover,.project-card:hover{z-index:8}
/* 输入框与底色形成明确色差 */
.idea{background:rgba(7,14,38,.18);box-shadow:inset 0 1px rgba(255,255,255,.12),0 18px 44px rgba(0,0,0,.46),0 0 20px rgba(111,208,232,.08)}.idea:focus{background:rgba(12,28,65,.22)}.idea-controls{background:rgba(8,18,52,.32)}
/* 所有可点元素的缓慢按压与焦点反馈 */
button:focus-visible{outline:0;box-shadow:0 0 0 5px rgba(91,232,185,.16),0 0 28px rgba(91,232,185,.18)}button:active{transition-duration:.32s!important}
/* ===== 封面预览：荧光漂浮与历史工程框 ===== */
.project-card{position:relative;overflow:visible!important;display:flex;align-items:flex-start;justify-content:flex-start;padding:18px 14px 0;text-align:left;color:rgba(245,251,255,.9);font-size:12px;font-weight:300;letter-spacing:.1em;line-height:1.5;border:0!important;background:rgba(82,126,219,.12);box-shadow:0 0 0 1px rgba(255,255,255,.015),0 18px 40px rgba(0,0,0,.42),0 0 25px rgba(79,255,196,.06);animation:cardBreath 7.5s ease-in-out infinite;transform:scale(1);transform-origin:center}
.project-card:before{content:'历史工程';position:absolute;left:14px;top:10px;color:rgba(192,206,232,.58);font-size:9px;letter-spacing:.18em;white-space:nowrap}
.project-card:after{content:'';position:absolute;left:50%;top:58%;width:7px;height:7px;border-radius:50%;background:#b8fff0;box-shadow:0 0 7px 3px rgba(110,255,225,.78),0 0 22px 8px rgba(61,224,255,.34);animation:floatSpark 4.8s ease-in-out infinite;pointer-events:none}
.project-card:nth-child(2):after{animation-delay:-1.2s;background:#d9c5ff;box-shadow:0 0 7px 3px rgba(191,147,255,.75),0 0 22px 8px rgba(155,92,255,.28)}
.project-card:nth-child(3):after{animation-delay:-2.4s;background:#ffe7a8;box-shadow:0 0 7px 3px rgba(255,217,138,.74),0 0 22px 8px rgba(255,172,90,.24)}
.project-card:nth-child(4):after{animation-delay:-3.6s;background:#9fe8ff;box-shadow:0 0 7px 3px rgba(111,208,232,.76),0 0 22px 8px rgba(63,224,255,.28)}
.project-card:nth-child(2){animation-delay:-1.9s}.project-card:nth-child(3){animation-delay:-3.8s}.project-card:nth-child(4){animation-delay:-5.7s}
.project-card.is-empty{color:rgba(192,206,232,.48);font-size:11px;padding-top:34px}.project-card.has-history{padding-top:28px;color:#f5fbff;font-size:13px;font-weight:500;letter-spacing:.06em;z-index:2}.project-card.has-history:before{display:none}.project-card.has-history:after{z-index:1}.history-card-label,.history-card-title,.history-card-stage{position:relative;z-index:3;display:block}.history-card-label{margin-bottom:7px;color:rgba(192,255,220,.78);font-size:9px;letter-spacing:.22em}.history-card-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#f5fbff;font-size:13px}.history-card-stage{margin-top:6px;color:rgba(255,214,140,.9);font-size:10px;letter-spacing:.06em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@keyframes floatSpark{0%,100%{transform:translate(-50%,-50%) scale(.72);opacity:.45}50%{transform:translate(-50%,-68%) scale(1.2);opacity:1}}
@keyframes cardBreath{0%,100%{opacity:.82;box-shadow:0 0 0 1px rgba(255,255,255,.015),0 18px 40px rgba(0,0,0,.42),0 0 20px rgba(79,255,196,.04)}50%{opacity:1;box-shadow:0 0 0 1px rgba(255,255,255,.028),0 22px 46px rgba(0,0,0,.48),0 0 34px rgba(79,255,196,.13)}}
.project-card:hover{animation-play-state:paused;transform:translateY(-5px) scale(1.055);box-shadow:0 28px 60px rgba(0,0,0,.62),0 0 40px rgba(79,255,196,.24);z-index:8}
.project-card:active{animation-play-state:paused;transform:translateY(-1px) scale(.985)}
@media(max-width:600px){.project-card{padding-left:11px}.project-card:before{left:11px}}
/* ===== 首页历史工程：片名与工程名统一字体系统 ===== */
.history-entry .history-label,.project-card .history-card-label{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;font-size:9px;font-weight:500;line-height:1.4;letter-spacing:.22em}
.history-entry b,.project-card .history-card-title{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;font-size:13px;font-weight:500;line-height:1.5;letter-spacing:.06em}
.history-entry .history-label{color:rgba(192,255,220,.9);text-shadow:0 0 10px rgba(79,255,196,.38)}
.history-entry b{color:#f5fbff;text-shadow:0 0 12px rgba(79,255,196,.2)}
.project-card .history-card-label{color:rgba(192,255,220,.9);text-shadow:0 0 10px rgba(79,255,196,.38)}
.project-card .history-card-title{color:#f5fbff;text-shadow:0 0 12px rgba(79,255,196,.22)}
/* ===== 所有对话框：划过缓慢放大 ===== */
.history-entry,.project-card,.idea-card,.settings,.idea,.idea-controls,.pure-script{transition:transform 1.05s cubic-bezier(.22,.68,.18,1),box-shadow 1.05s cubic-bezier(.22,.68,.18,1),background .9s ease;transform-origin:center;}
.history-entry:hover,.project-card:hover,.idea-card:hover,.settings:hover,.idea:hover,.idea-controls:hover,.pure-script:hover{transform:translateY(-2px) scale(1.01);z-index:20;}
.idea-card:hover{transform:translateY(-8px) scale(1.035)}
.project-card:hover{animation-play-state:paused;transform:translateY(-5px) scale(1.055)}
.history-entry:hover{transform:translateY(-2px) scale(1.01)}
/* 首页四个历史工程框：划过时原地快速放大 + 荧光点亮 */
.cover .project-card{will-change:transform,box-shadow;transform-origin:center;transition:transform .85s cubic-bezier(.2,.7,.18,1),box-shadow .85s cubic-bezier(.2,.7,.18,1),background .85s ease}
.cover .project-card:hover{z-index:30;transform:scale(1.06);box-shadow:0 0 0 2px rgba(79,255,196,.45),0 30px 62px rgba(0,0,0,.6),0 0 52px rgba(79,255,196,.5),0 0 30px rgba(111,208,232,.3);filter:brightness(1.06)}
.cover .project-card:active{transform:scale(1.02);transition-duration:.3s}
.idea:focus{transform:scale(1.012)}
@media(prefers-reduced-motion:reduce){.project-card{animation:none!important}.history-entry,.project-card,.idea-card,.settings,.idea,.idea-controls,.pure-script{transition:none!important}}
/* ===== 创意预览展陈系统：材质、错位、排版、动态 ===== */
.idea-page{background:radial-gradient(80% 70% at 8% 0%,rgba(45,113,221,.32),transparent 62%),radial-gradient(70% 80% at 96% 18%,rgba(183,72,187,.22),transparent 62%),radial-gradient(60% 70% at 50% 100%,rgba(25,184,157,.15),transparent 66%),#040711}
.idea-head{padding:30px clamp(24px,5vw,68px) 24px;background:rgba(4,8,24,.58);backdrop-filter:blur(30px);box-shadow:0 20px 46px rgba(0,0,0,.25)}
.idea-head h2{font-family:"Songti SC","STSong",serif;font-size:clamp(24px,3vw,35px);font-weight:500;letter-spacing:.08em;line-height:1.3}.idea-head p{line-height:1.9;color:#b9c8e1}.idea-head:after{color:rgba(200,220,255,.4)}
.idea-grid{grid-template-columns:repeat(12,minmax(0,1fr));gap:24px;padding:36px clamp(24px,5vw,68px) 42px;align-items:start}
.idea-card{grid-column:span 6;min-width:0;overflow:visible;isolation:isolate;padding:28px 28px 0;border:0;border-radius:32px;background:linear-gradient(145deg,rgba(54,94,185,.48),rgba(24,28,74,.38));box-shadow:inset 0 1px rgba(255,255,255,.18),0 24px 58px rgba(0,0,0,.56),0 0 30px rgba(70,178,255,.1);backdrop-filter:blur(34px) saturate(170%);transition:transform 1s cubic-bezier(.22,.68,.18,1),box-shadow 1s,background 1s;animation:galleryIn .9s cubic-bezier(.22,.68,.18,1) both}
.idea-card:nth-child(1){grid-column:1/span 7;grid-row:1/span 2;min-height:420px}.idea-card:nth-child(2){grid-column:8/span 5;grid-row:1/span 2;margin-top:48px;min-height:370px;background:linear-gradient(145deg,rgba(91,65,172,.5),rgba(30,24,73,.38));box-shadow:inset 0 1px rgba(255,255,255,.16),0 25px 58px rgba(0,0,0,.56),0 0 36px rgba(172,111,255,.16)}.idea-card:nth-child(3){grid-column:2/span 5;grid-row:3/span 2;margin-top:-6px;min-height:380px;background:linear-gradient(145deg,rgba(26,116,134,.5),rgba(15,38,68,.4));box-shadow:inset 0 1px rgba(255,255,255,.16),0 25px 58px rgba(0,0,0,.56),0 0 36px rgba(70,255,207,.13)}.idea-card:nth-child(4){grid-column:7/span 6;grid-row:3/span 2;margin-top:40px;min-height:350px;background:linear-gradient(145deg,rgba(139,86,61,.46),rgba(48,28,72,.4));box-shadow:inset 0 1px rgba(255,255,255,.16),0 25px 58px rgba(0,0,0,.56),0 0 36px rgba(255,199,116,.13)}
.idea-card:after{content:'';position:absolute;inset:-20px;border-radius:42px;z-index:-1;opacity:.3;filter:blur(30px);background:radial-gradient(circle at 12% 0%,#5eeaff,transparent 43%);transition:opacity 1s,transform 1s}.idea-card:nth-child(2):after{background:radial-gradient(circle at 90% 10%,#bd8cff,transparent 45%)}.idea-card:nth-child(3):after{background:radial-gradient(circle at 15% 90%,#5dffcf,transparent 45%)}.idea-card:nth-child(4):after{background:radial-gradient(circle at 90% 90%,#ffd18a,transparent 45%)}
.idea-card:hover{z-index:30;transform:translateY(-9px) scale(1.025);box-shadow:inset 0 1px rgba(255,255,255,.28),0 36px 78px rgba(0,0,0,.72),0 0 58px rgba(91,232,185,.2)}.idea-card:hover:after{opacity:.72;transform:scale(1.08)}
.idea-card .num{display:flex;align-items:center;gap:10px;margin-bottom:20px;color:#91f5d8;letter-spacing:.22em}.idea-card .num:after{content:'';height:1px;flex:1;background:linear-gradient(90deg,rgba(255,255,255,.3),transparent);filter:blur(.5px)}.idea-card:nth-child(2) .num{color:#d5b9ff}.idea-card:nth-child(3) .num{color:#84efda}.idea-card:nth-child(4) .num{color:#ffd99a}
.idea-card h3{max-width:92%;margin:0 0 20px;font-family:"Songti SC","STSong",serif;font-size:clamp(21px,2.6vw,30px);font-weight:500;letter-spacing:.05em;line-height:1.4;color:#f5fbff}.idea-card:nth-child(n+2) h3{font-size:22px}.idea-card h4{display:flex;align-items:center;gap:9px;margin:18px 0 7px;color:#91f5d8;letter-spacing:.14em;font-weight:600}.idea-card h4:before{content:'';width:5px;height:5px;border-radius:50%;background:currentColor;box-shadow:0 0 14px currentColor}.idea-card:nth-child(2) h4{color:#d5b9ff}.idea-card:nth-child(4) h4{color:#ffd99a}.idea-card p{font-size:12px;line-height:1.9;color:#c5d0e2}.idea-controls{margin:0 -8px 18px;padding:13px 14px;border-radius:20px;background:rgba(4,13,40,.34);box-shadow:inset 0 1px rgba(255,255,255,.14),0 10px 26px rgba(0,0,0,.18)}.idea-select{margin:20px -28px 0;padding:16px;border-radius:0 0 32px 32px;background:linear-gradient(180deg,rgba(91,232,185,.2),rgba(91,232,185,.06));box-shadow:inset 0 1px rgba(255,255,255,.14),0 0 24px rgba(91,232,185,.08)}
@keyframes galleryIn{from{opacity:0;transform:translateY(30px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(max-width:780px){.idea-grid{grid-template-columns:1fr;gap:18px;padding:24px 20px}.idea-card,.idea-card:nth-child(n){grid-column:1;grid-row:auto;margin-top:0;min-height:0}.idea-card{padding:22px 20px 0}.idea-select{margin-left:-20px;margin-right:-20px;border-radius:0 0 28px 28px}}
/* ===== 参考图式创意面板：统一栅格 · 柔玻璃 · 低对比信息层级 ===== */
.idea-page{overflow:auto;background:linear-gradient(135deg,#9aae83 0%,#879d74 42%,#718a68 100%);color:#f6f7ef}
.idea-page:before{content:'';position:fixed;inset:0;pointer-events:none;background:radial-gradient(80% 65% at 18% 12%,rgba(235,242,219,.24),transparent 65%),radial-gradient(70% 80% at 94% 82%,rgba(35,76,51,.24),transparent 68%);filter:blur(18px)}
.idea-head{position:relative;z-index:1;padding:26px clamp(20px,5vw,64px) 20px;padding-right:180px;background:rgba(206,218,187,.22);backdrop-filter:blur(28px) saturate(105%);box-shadow:0 12px 34px rgba(34,52,30,.12)}
.idea-head:after{display:none}.idea-head h2{margin:0;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;font-size:22px;font-weight:500;letter-spacing:.02em;color:rgba(255,255,250,.94);text-shadow:0 1px 6px rgba(32,50,30,.18)}.idea-head p{margin:8px 0 0;color:rgba(244,249,235,.7);font-size:12px;line-height:1.7}.eyebrow{margin-bottom:9px;color:rgba(247,252,231,.62);font-size:10px;letter-spacing:.18em}
.idea-grid{position:relative;z-index:1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;padding:18px clamp(14px,3.5vw,28px) 22px;align-items:stretch}
.idea-card,.idea-card:nth-child(1),.idea-card:nth-child(2),.idea-card:nth-child(3),.idea-card:nth-child(4){grid-column:auto;grid-row:auto;min-height:0;margin:0;position:relative;display:flex;flex-direction:column;overflow:hidden;isolation:isolate;padding:20px 19px 0;border:0;border-radius:28px;background:linear-gradient(148deg,rgba(220,231,197,.36),rgba(139,164,117,.24));backdrop-filter:blur(30px) saturate(108%);box-shadow:inset 0 1px rgba(255,255,255,.28),0 14px 28px rgba(39,64,36,.2);transition:transform .9s cubic-bezier(.22,.68,.18,1),box-shadow .9s ease,background .9s ease;animation:softPanelIn .75s ease both}
.idea-card:nth-child(2){animation-delay:.08s;background:linear-gradient(148deg,rgba(226,230,202,.34),rgba(133,157,113,.23))}.idea-card:nth-child(3){animation-delay:.16s;background:linear-gradient(148deg,rgba(216,230,198,.33),rgba(118,153,112,.24))}.idea-card:nth-child(4){animation-delay:.24s;background:linear-gradient(148deg,rgba(228,226,194,.34),rgba(149,153,104,.23))}
.idea-card:before{content:'';position:absolute;inset:0;z-index:-1;border-radius:inherit;background:radial-gradient(85% 55% at 20% 0%,rgba(255,255,255,.2),transparent 68%);opacity:.8;filter:blur(12px);transition:opacity .9s ease}.idea-card:after{content:'';position:absolute;left:14%;right:14%;top:-16%;height:48%;z-index:-1;border-radius:50%;background:rgba(232,247,199,.14);filter:blur(24px);opacity:.65;transition:opacity .9s ease}
.idea-card:hover{z-index:10;transform:translateY(-5px) scale(1.018);box-shadow:inset 0 1px rgba(255,255,255,.34),0 22px 42px rgba(34,56,33,.3),0 0 24px rgba(211,239,174,.16)}.idea-card:hover:before,.idea-card:hover:after{opacity:1}
.idea-card .num{display:flex;align-items:center;gap:8px;margin:0 0 17px;color:rgba(246,253,231,.68);font-size:9px;font-weight:500;letter-spacing:.18em;text-transform:uppercase}.idea-card .num:after{content:'';height:1px;flex:1;background:linear-gradient(90deg,rgba(255,255,255,.24),transparent);filter:blur(.5px)}
.idea-card h3,.idea-card:nth-child(n) h3{max-width:100%;margin:0 0 15px;color:rgba(255,255,249,.95);font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;font-size:18px;font-weight:500;line-height:1.42;letter-spacing:.01em;text-shadow:0 1px 5px rgba(32,50,30,.18)}
.idea-controls{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin:0 0 15px;padding:13px 10px;border-radius:18px;background:rgba(210,223,185,.22);box-shadow:inset 0 1px rgba(255,255,255,.18),0 5px 15px rgba(45,69,39,.08)}
.range-control{min-width:0}.range-control label{display:block;margin-bottom:4px;color:rgba(249,253,239,.65);font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.range-control span{display:block;color:rgba(255,255,250,.88);font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.range-control input{width:100%;height:3px;margin-top:8px;accent-color:#e6f4c9;opacity:.72;filter:none}.range-control input::-webkit-slider-thumb{width:10px;height:10px;background:#effbd1;box-shadow:0 0 8px rgba(225,255,184,.44);-webkit-appearance:none;appearance:none}
.idea-card h4{display:flex;align-items:center;gap:7px;margin:12px 0 5px;color:rgba(250,254,237,.74);font-size:10px;font-weight:500;letter-spacing:.13em}.idea-card h4:before{content:'';width:4px;height:4px;border-radius:50%;background:rgba(239,250,211,.82);box-shadow:0 0 8px rgba(226,255,185,.45)}.idea-card p{margin:0;color:rgba(249,253,240,.72);font-size:11px;line-height:1.75;letter-spacing:.01em}
.idea-select{margin:17px -19px 0;padding:14px;border:0;border-radius:0 0 28px 28px;background:rgba(202,220,174,.2);color:rgba(255,255,246,.88);font-size:11px;font-weight:500;letter-spacing:.18em;box-shadow:inset 0 1px rgba(255,255,255,.16);transition:background .8s ease,transform .8s cubic-bezier(.22,.68,.18,1),letter-spacing .8s ease}.idea-select:hover{background:rgba(221,238,191,.34);letter-spacing:.25em;box-shadow:inset 0 1px rgba(255,255,255,.24),0 0 20px rgba(224,250,190,.16)}
.idea-actions{position:relative;z-index:1;padding:0 20px 28px}.idea-actions .primary{background:rgba(210,229,180,.26);color:rgba(255,255,247,.9);box-shadow:0 10px 24px rgba(37,59,35,.16),inset 0 1px rgba(255,255,255,.2)}
@keyframes softPanelIn{from{opacity:0;transform:translateY(16px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(max-width:760px){.idea-grid{grid-template-columns:1fr;gap:13px;padding:16px 14px 20px}.idea-card,.idea-card:nth-child(n){grid-column:auto;grid-row:auto;margin:0}.idea-card h3,.idea-card:nth-child(n) h3{font-size:18px}}
/* ===== 可读性最终修正：中等字号 · 统一面板 · 无多余底边 ===== */
.idea-grid{align-items:stretch}
.idea-page .idea-card,.idea-page .idea-card:nth-child(1),.idea-page .idea-card:nth-child(2),.idea-page .idea-card:nth-child(3),.idea-page .idea-card:nth-child(4){min-height:390px;background:linear-gradient(145deg,rgba(82,108,72,.58),rgba(54,76,55,.48));box-shadow:inset 0 1px rgba(255,255,255,.22),0 16px 34px rgba(26,45,28,.28);border:0;border-radius:28px;overflow:hidden}
.idea-page .idea-card:after{display:none}.idea-page .idea-card:before{opacity:.35}
.idea-page .idea-card:hover{transform:translateY(-4px) scale(1.018);box-shadow:inset 0 1px rgba(255,255,255,.3),0 23px 46px rgba(24,43,27,.38),0 0 22px rgba(215,241,183,.16)}
.idea-page .idea-card .num{margin-bottom:18px;color:rgba(250,255,240,.78);font-size:11px;letter-spacing:.18em}.idea-page .idea-card .num:after{background:linear-gradient(90deg,rgba(255,255,255,.38),transparent)}
.idea-page .idea-card h3,.idea-page .idea-card:nth-child(n) h3{margin-bottom:18px;color:#fbfff5;font-size:clamp(20px,2.2vw,25px);font-weight:600;line-height:1.4;text-shadow:0 1px 5px rgba(22,39,25,.3)}
.idea-page .idea-card h4{margin:16px 0 7px;color:#f0fbdc;font-size:12px;letter-spacing:.12em;font-weight:600;text-shadow:0 1px 4px rgba(22,39,25,.25)}
.idea-page .idea-card p{color:rgba(249,255,241,.9);font-size:14px;line-height:1.9;letter-spacing:.01em;text-shadow:0 1px 4px rgba(22,39,25,.22)}
.idea-page .idea-controls{margin:0 0 16px;padding:14px 12px;background:rgba(33,55,34,.38);box-shadow:inset 0 1px rgba(255,255,255,.18),0 7px 18px rgba(22,40,25,.14)}
.idea-page .range-control label{color:rgba(249,255,241,.78);font-size:11px}.idea-page .range-control span{color:#f3ffdc;font-size:12px}.idea-page .range-control input{opacity:.9}
.idea-page .idea-select{margin-top:auto;padding:15px;border-radius:0 0 28px 28px;background:rgba(207,230,177,.24);color:#fbfff5;font-size:13px;letter-spacing:.18em;box-shadow:inset 0 1px rgba(255,255,255,.2);flex-shrink:0}
@media(max-width:760px){.idea-page .idea-card,.idea-page .idea-card:nth-child(n){min-height:0}.idea-page .idea-card p{font-size:13px}}
/* ===== API设置：全屏控制面板，避免窄屏遮挡与内容溢出 ===== */
.settings{position:fixed!important;inset:0!important;width:auto!important;height:100vh!important;max-height:none!important;overflow:auto!important;padding:clamp(24px,5vh,58px) clamp(18px,5vw,72px)!important;background:rgba(5,14,18,.96)!important;backdrop-filter:blur(22px) saturate(130%)!important;z-index:2147483000!important;isolation:isolate!important;pointer-events:auto!important}.settings[style*="display: none"]{pointer-events:none!important}.settings-close{position:relative!important;z-index:3!important}
.settings::before{content:'';position:absolute;inset:0;background:radial-gradient(circle at 78% 10%,rgba(84,234,178,.16),transparent 34%),radial-gradient(circle at 14% 80%,rgba(75,140,255,.13),transparent 38%);pointer-events:none}
.settings>*{position:relative;z-index:1;max-width:660px;margin-left:auto;margin-right:auto;box-sizing:border-box}.settings h3{margin-top:0;padding-top:2px;color:#effff4;font-size:clamp(22px,3vw,32px);letter-spacing:.08em}.settings h3::after{content:'SAGER'   /* 【修390】原为 'LOCAL CONTROL DECK / API ROUTING'（该面板已删除，此处仅清理字样） */;display:block;margin-top:8px;color:rgba(180,235,207,.58);font-size:10px;letter-spacing:.22em;font-weight:400}.settings p{color:rgba(222,242,231,.68);font-size:12px;line-height:1.8}.settings label{color:rgba(220,246,230,.78);font-size:11px;letter-spacing:.1em}.settings input{width:100%;padding:14px 16px;border:1px solid rgba(174,235,203,.18);border-radius:14px;background:rgba(11,31,38,.88);color:#effff5;font-size:14px;box-shadow:inset 0 1px rgba(255,255,255,.07),0 10px 24px rgba(0,0,0,.22)}.settings input:focus{outline:none;border-color:rgba(103,239,182,.78);box-shadow:0 0 0 3px rgba(103,239,182,.11),0 0 30px rgba(79,255,196,.18)}.settings-divider{border-color:rgba(197,244,215,.14)}.settings-sub{padding-left:13px;border-left:3px solid #67e9b2;color:#dffff0;font-size:15px;letter-spacing:.1em}.settings .save-setting,.settings .test-setting{border-radius:14px;padding:13px 18px;background:linear-gradient(135deg,#8dffd1,#43c99a);color:#08251a;font-weight:700;box-shadow:0 12px 28px rgba(37,191,137,.24);cursor:pointer}.settings .test-setting{background:rgba(143,255,211,.1);color:#dffff0;border:1px solid rgba(143,255,211,.22);box-shadow:none}@media(max-width:600px){.settings{padding:24px 16px!important}.settings .save-setting,.settings .test-setting{width:100%;margin-top:4px}}
.local-settings-head{display:flex!important;justify-content:space-between;align-items:flex-start;max-width:900px!important}.settings-kicker{color:#e7b33f;font-size:10px;letter-spacing:.24em}.settings-close{border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.05);color:#fff;font-size:24px;border-radius:50%;width:40px;height:40px}
.settings-head-btns{display:flex;align-items:center;gap:10px}
.settings-relate{padding:9px 18px;border:1px solid rgba(154,255,209,.35);border-radius:999px;background:rgba(88,224,166,.08);color:#bfffe0;font-size:12px;letter-spacing:.1em;cursor:pointer;transition:.35s}
.settings-relate:hover{background:rgba(88,224,166,.18);box-shadow:0 0 0 1px rgba(141,255,199,.5),0 0 18px rgba(94,255,202,.3)}.model-tabs{display:flex;gap:10px;max-width:900px!important;margin:24px auto!important}.model-tab{flex:1;text-align:left;padding:15px 18px;border:1px solid rgba(236,184,67,.2);border-radius:14px;background:rgba(255,255,255,.04);color:#d8d0c0}.model-tab.active{background:rgba(213,157,43,.16);border-color:#c99027;color:#fff}.model-tab span{display:block;margin-top:5px;font-size:11px;opacity:.6}.model-config{display:none!important;max-width:900px!important}.model-config.active{display:block!important}.config-heading{display:flex!important;justify-content:space-between;align-items:center}.config-heading h4{color:#fff;font-size:20px;margin:0}.config-heading p{color:#aaa;font-size:12px}.settings-two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px}.settings-actions{display:flex;gap:12px}.settings-actions>*{flex:1}.local-settings-note{max-width:900px!important;color:#aaa!important;border-top:1px solid rgba(255,255,255,.1);padding-top:18px}.enable-toggle{white-space:nowrap}@media(max-width:650px){.settings-two-col{grid-template-columns:1fr}.model-tabs{flex-direction:column}}
.settings{background:transparent!important}.settings::before{background:transparent!important}.settings>*{display:none!important}.settings .settings-frame{display:block!important;position:absolute!important;inset:0!important;width:100%!important;height:100%!important;border:0!important;background:transparent!important}.settings .settings-frame *{display:revert}.settings .settings-frame{z-index:1!important}.settings iframe{display:block!important;position:absolute!important;inset:0!important;width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;border:0!important;z-index:2147483647!important;pointer-events:auto!important;background:#06130d!important}
.settings-preview-frame{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;border:0!important;z-index:999999!important;background:#06130d!important}
.settings-float-close{position:fixed!important;top:18px!important;right:22px!important;z-index:2147483647!important;width:44px!important;height:44px!important;border-radius:50%!important;border:1px solid rgba(183,239,193,.4)!important;background:rgba(8,26,16,.9)!important;color:#d7f6e2!important;font-size:24px!important;line-height:1!important;cursor:pointer!important;box-shadow:0 8px 26px rgba(0,0,0,.4),inset 0 1px rgba(255,255,255,.12)!important;backdrop-filter:blur(10px)!important;display:block!important}
.settings-float-close:hover{background:rgba(88,224,166,.25)!important;transform:rotate(90deg);transition:transform .25s ease}
    .asset-rail,.prompt-rail,.material-stage{min-width:0;background:rgba(10,20,14,.92);border-color:rgba(154,255,209,.10)}
    .asset-rail{display:flex;flex-direction:column;padding:70px 14px 22px;border-right:1px solid rgba(154,255,209,.10);overflow:auto}
    .rail-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:20px}
    .rail-head h4,.stage-head h3{margin:6px 0 0;color:#f2fff7;font-weight:600}
    .rail-kicker{font-size:9px;letter-spacing:.18em;color:#58e0a6}
    .asset-count,.stage-step,.optional,.block-title span:last-child{font-size:10px;color:#8db4a0}
    .asset-row{margin-bottom:16px}
    .asset-row-title{display:flex;align-items:center;gap:8px;margin:0 0 8px;color:#a9c9b8;font-size:12px;letter-spacing:.05em}
    .asset-row-title b{margin-left:auto;font-size:10px;font-weight:500;color:#58e0a6}
    .asset-mark{width:8px;height:8px;flex:0 0 8px;border-radius:2px;background:#3aa573}
    .asset-mark.scene-mark{background:#2f9ec4}.asset-mark.prop-mark{background:#b8b23c}.asset-mark.animal-mark{background:#c4873f}
    .mat-tags{display:flex;flex-wrap:wrap;gap:6px}
    .mat-item{position:relative;overflow:hidden;padding:7px 12px;border-radius:14px;background:rgba(255,255,255,.035);border:1px solid rgba(154,255,209,.08);color:#c4d8cc;font-size:12px;cursor:pointer;transition:background .4s ease,border-color .4s ease,color .4s ease;display:flex;align-items:center;gap:9px}
    .mat-item .mat-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .mat-item:hover,.mat-item.selected{background:rgba(88,224,166,.14);border-color:rgba(88,224,166,.5);color:#b8ffdd}
    /* 生成进度条：深绿色透明，从左向右流动 */
    .mat-item .mat-progress{position:absolute;left:0;top:0;bottom:0;width:0%;background:linear-gradient(90deg,rgba(24,110,70,0),rgba(24,150,88,.45),rgba(24,110,70,0));pointer-events:none;transition:opacity .3s ease}
    .mat-item.generating .mat-progress{animation:matProgressSlide 1.4s linear infinite}
    @keyframes matProgressSlide{0%{transform:translateX(-100%)}100%{transform:translateX(300%)}}
    .mat-item.generating{color:#c9f5dc}
    /* 生成完毕：彻底深绿色 */
    .mat-item.generated{background:rgba(26,128,82,.55);border-color:rgba(70,210,130,.65);color:#e4fff0}
    /* 定稿：阳光金黄色 */
    .mat-item.finalized{background:rgba(232,178,54,.85);border-color:rgba(255,214,102,.95);color:#3d2a00;font-weight:700;box-shadow:0 0 14px rgba(244,194,70,.45)}
    .rail-foot{margin-top:auto;padding-top:18px;color:#7ba38f;font-size:10px;line-height:1.6}
    /* 多选生成开关 */
    .multi-toggle{display:block;width:100%;margin:0 0 14px;padding:10px 12px;border:1px solid rgba(154,255,209,.22);border-radius:9px;background:rgba(88,224,166,.06);color:#bfffe0;font-size:12px;letter-spacing:.05em;cursor:pointer;transition:.35s}
    /* 【N300】「长按拖动」提示**并进多选那一行**（同一胶囊内、多选右端），不再单独占一个胶囊 */
    .rail-tools{display:flex;align-items:center;gap:10px;margin:0 0 14px;padding:0 12px 0 0;border:1px solid rgba(154,255,209,.22);border-radius:999px;background:rgba(88,224,166,.06)}
    .rail-tools .multi-toggle{flex:1 1 auto;width:auto;margin:0;border:0;background:transparent;border-radius:999px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:11.5px;letter-spacing:.03em}
    .rail-tools .multi-toggle:hover{background:rgba(88,224,166,.10);box-shadow:none}
    /* 【N301】多选按下态：文字**提亮** + 琥珀底（主题里有 `background-color:…!important` 的玻璃底，故此处也用 !important 并用更高优先级胜出） */
    .rail-tools .multi-toggle.on{background-color:rgba(232,178,54,.26)!important;color:#fff6e2!important;font-weight:700;text-shadow:0 0 10px rgba(255,205,110,.55),0 0 2px rgba(255,255,255,.35);box-shadow:inset 0 0 0 1px rgba(244,194,70,.6)}
    /* 未开启多选时的悬停（避免与按下态打架） */
    .rail-tools .multi-toggle:not(.on):hover{background-color:rgba(88,224,166,.12)!important;box-shadow:none}
    .drag-hint{flex:0 0 auto;font-size:9.5px;font-weight:400;letter-spacing:.02em;color:#7c9c8b;opacity:.92;white-space:nowrap;cursor:default;border-left:1px solid rgba(154,255,209,.12);padding-left:9px}
    /* 【N306g】用户要求：① 素材卡的小红叉要**显眼**（原来深色半透明贴在深色卡上根本看不见）；
       ② 素材框改为**超细边框 + 长方形 + 高透**（原来 9px 圆角偏圆润）。
       作用域仅物料页四栏，画布/其它页面不受影响。 */
    #matChars .mat-item,#matAnimals .mat-item,#matEnvs .mat-item,#matProps .mat-item{
      border:0.5px solid rgba(190,225,205,.30);border-radius:3px;background:rgba(255,255,255,.02);
      padding:6px 16px 6px 10px;cursor:default;overflow:visible;transition:border-color .16s,background .16s,transform .16s,box-shadow .16s;
    }
    #matChars .mat-item:hover,#matAnimals .mat-item:hover,#matEnvs .mat-item:hover,#matProps .mat-item:hover{border-color:rgba(190,235,215,.55);background:rgba(255,255,255,.035)}
    /* 小红叉：默认就**红色实心 + 白色叉**（一眼可见），悬停更亮更大；热区 20×20 便于点中 */
    /* 【N306l】用户要求：删除叉**极细、更小、融入现有体系**（上一版大红块"傻大傻大、太显眼"）。
       做法：文字 × 隐藏（font-size:0），改用**细描边 SVG 叉**（描边 1/10 单位 ≈ 发丝），
       外圈 0.5px 发丝环 + 半透明深底 —— 与素材卡「0.5px 细边框 + 高透」同一套语言。
       默认低调可辨（不再隐形、也不再抢眼），悬停才转为淡红提示"可删"。 */
    .mat-del{position:absolute;top:-6px;right:-6px;z-index:9;width:14px;height:14px;padding:0;line-height:0;font-size:0;color:transparent;
      border:0.5px solid rgba(190,225,205,.40);border-radius:50%;background-color:rgba(8,14,12,.72);
      background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'><path d='M2.9 2.9l4.2 4.2M7.1 2.9l-4.2 4.2' fill='none' stroke='%23a4c4b4' stroke-width='1' stroke-linecap='round'/></svg>");
      background-repeat:no-repeat;background-position:center;background-size:8px 8px;
      opacity:.9;cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.35);
      transition:opacity .15s,border-color .15s,background-color .15s,transform .15s}
    .mat-del:hover{opacity:1;border-color:rgba(255,150,150,.72);background-color:rgba(96,24,24,.88);transform:scale(1.08);
      background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'><path d='M2.9 2.9l4.2 4.2M7.1 2.9l-4.2 4.2' fill='none' stroke='%23ffd7d7' stroke-width='1' stroke-linecap='round'/></svg>")}
    /* 长按进入可拖状态：先摇晃提示，随后"抬起"（半透明 + 悬浮跟随） */
    @keyframes lcHoldShake{0%,100%{transform:translateX(0)}25%{transform:translateX(-1.5px)}75%{transform:translateX(1.5px)}}

    /* ═══【v5.10】素材条可读性：生成中 / 已定稿 / 选中 / 拖拽 等所有状态下文字必须看清 ═══
       原问题：.finalized 用深棕字(#3d2a00)压在琥珀底(85%)上，叠加深色面板 → 呈橄榄色糊掉；
       生成中还可能整体降透明度。此处统一：文字提亮 + 内部 span 不透明 + 取消降透明度。 */
    .mat-item,.mat-item.selected,.mat-item.generating,.mat-item.generated,.mat-item.finalized,
    .mat-item.lc-hold,.mat-item.lc-lift,.mat-item *{opacity:1 !important;filter:none !important}
    .mat-item{color:#e9fff5 !important}
    .mat-item .mat-name{color:#e9fff5 !important;font-weight:600 !important;text-shadow:0 1px 3px rgba(0,0,0,.75) !important}
    .mat-item .mat-ico,.mat-item .mat-state{color:#bff3d8 !important;text-shadow:0 1px 2px rgba(0,0,0,.7) !important}
    .mat-item.selected{background:rgba(88,224,166,.22) !important;border-color:rgba(120,255,200,.65) !important}
    .mat-item.selected .mat-name{color:#ffffff !important}
    .mat-item.generating{background:rgba(24,150,88,.35) !important;border-color:rgba(90,230,150,.6) !important}
    .mat-item.generating .mat-name{color:#f2fff8 !important}
    .mat-item.generated{background:rgba(26,128,82,.6) !important;border-color:rgba(90,225,145,.7) !important}
    .mat-item.generated .mat-name{color:#ffffff !important}
    /* 已定稿：琥珀底加深、文字改纯白（原深棕字在白底上才成立，在深色面板上会糊） */
    .mat-item.finalized{background:#7d5600 !important;background-image:none !important;border-color:#ffd666 !important}   /* 加深到白字 5.6:1 */
    .mat-item.finalized .mat-name,.mat-item.finalized .mat-ico,.mat-item.finalized .mat-state{color:#ffffff !important;text-shadow:0 1px 3px rgba(0,0,0,.6) !important}
    /* 拖拽抬起时不要半透明到看不见（原来 .lc-lift{opacity:.3}） */
    .mat-item.lc-lift{opacity:.75 !important}
    #matChars .mat-item.lc-hold,#matAnimals .mat-item.lc-hold,#matEnvs .mat-item.lc-hold,#matProps .mat-item.lc-hold{animation:lcHoldShake .22s linear infinite;border-color:rgba(154,255,209,.75);box-shadow:0 0 0 1px rgba(154,255,209,.35)}
    #matChars .mat-item.lc-lift,#matAnimals .mat-item.lc-lift,#matEnvs .mat-item.lc-lift,#matProps .mat-item.lc-lift{opacity:.3}
    /* 拖动中的"悬浮卡"：跟随指针，看得见在移动（不再是瞬移） */
    .lc-ghost{position:fixed;z-index:2147483000;margin:0!important;pointer-events:none;opacity:.97;border:0.5px solid rgba(154,255,209,.75)!important;border-radius:3px!important;background:rgba(18,30,24,.96)!important;box-shadow:0 14px 30px rgba(0,0,0,.55),0 0 0 1px rgba(154,255,209,.25)!important;transform:scale(1.04);display:flex;align-items:center;justify-content:center}
    @media (prefers-reduced-motion:reduce){
      #matChars .mat-item.lc-hold,#matAnimals .mat-item.lc-hold,#matEnvs .mat-item.lc-hold,#matProps .mat-item.lc-hold{animation:none;box-shadow:0 0 0 2px rgba(154,255,209,.65)}
    }
    .mat-tags.mat-dropover{outline:1px dashed rgba(154,255,209,.55);outline-offset:3px;border-radius:3px;background:rgba(154,255,209,.05)}
    .multi-toggle:hover{background:rgba(88,224,166,.14);box-shadow:0 0 0 1px rgba(141,255,199,.4)}
    .multi-toggle.on{background:rgba(232,178,54,.22);border-color:rgba(244,194,70,.6);color:#3d2a00;font-weight:700;box-shadow:0 0 14px rgba(244,194,70,.4)}
    /* 多选素材高亮 */
    .mat-item.multi-picked{background:rgba(232,178,54,.28)!important;border-color:rgba(255,214,102,.75)!important;color:#3d2a00!important;font-weight:700;box-shadow:0 0 12px rgba(244,194,70,.4)}
    /* 多选栏：素材列表下方固定，不受滚动影响 */
    .multi-bar{position:sticky;bottom:0;margin-top:14px;padding:12px 10px;border:1px solid rgba(244,194,70,.35);border-radius:12px;background:rgba(26,14,6,.92);backdrop-filter:blur(10px);display:flex;flex-direction:column;gap:10px;box-shadow:0 -8px 24px rgba(0,0,0,.3)}
    .multi-bar[hidden]{display:none}
    .multi-info{color:#ffd76a;font-size:11px;letter-spacing:.05em}
    /* 深红色多选生成图片按钮：滑过红色荧光闪烁+较大放大 */
    .multi-generate{padding:13px 14px;border:0;border-radius:10px;background:linear-gradient(135deg,#d43a3a,#8f1d1d);color:#ffecec;font-size:13px;font-weight:700;letter-spacing:.1em;cursor:pointer;box-shadow:0 8px 24px rgba(140,25,25,.45);transition:transform .35s cubic-bezier(.22,.68,.18,1),box-shadow .35s ease,filter .35s ease}
    .multi-generate:hover{transform:translateY(-3px) scale(1.07);filter:brightness(1.15);box-shadow:0 0 0 2px rgba(255,120,120,.6),0 0 30px rgba(255,80,80,.65),0 0 60px rgba(255,60,60,.4),0 16px 36px rgba(120,15,15,.5);animation:redBreath 1.1s ease-in-out infinite}
    @keyframes redBreath{0%,100%{box-shadow:0 0 0 2px rgba(255,120,120,.5),0 0 18px rgba(255,80,80,.45),0 16px 36px rgba(120,15,15,.5)}50%{box-shadow:0 0 0 3px rgba(255,150,150,.9),0 0 42px rgba(255,90,90,.85),0 0 70px rgba(255,60,60,.5),0 16px 36px rgba(120,15,15,.5)}}
    .multi-generate:disabled{opacity:.5;cursor:not-allowed;animation:none}
    .multi-actions{display:flex;flex-direction:column;gap:8px}
    .multi-save{padding:12px 14px;border:1px solid rgba(244,194,70,.4);border-radius:10px;background:rgba(244,194,70,.1);color:#ffd76a;font-size:12px;font-weight:700;letter-spacing:.08em;cursor:pointer;transition:transform .3s cubic-bezier(.22,.68,.18,1),box-shadow .3s ease,background .3s ease}
    .multi-save:hover{transform:translateY(-2px) scale(1.04);background:rgba(244,194,70,.22);box-shadow:0 0 0 1px rgba(255,214,102,.6),0 0 22px rgba(244,194,70,.45)}
    .multi-save:disabled{opacity:.5;cursor:not-allowed;transform:none}
    .multi-retry{padding:12px 14px;border:1px solid rgba(255,170,120,.5);border-radius:10px;background:rgba(200,90,40,.18);color:#ffc7a8;font-size:12px;font-weight:700;letter-spacing:.08em;cursor:pointer;transition:transform .3s cubic-bezier(.22,.68,.18,1),box-shadow .3s ease,background .3s ease}
    .multi-retry:hover{transform:translateY(-2px) scale(1.04);background:rgba(220,110,50,.3);box-shadow:0 0 0 1px rgba(255,180,120,.6),0 0 20px rgba(255,150,90,.4)}
    .multi-retry[hidden]{display:none}
    .multi-retry:disabled{opacity:.5;cursor:not-allowed;transform:none}
    /* ===== 多选批次进度条 ===== */
    .multi-stage{display:flex;flex-direction:column;gap:6px;padding:10px 12px;border:1px solid rgba(255,200,120,.25);border-radius:10px;background:rgba(30,16,4,.6)}
    .multi-stage[hidden]{display:none}
    .ms-batch{font-size:11px;font-weight:700;letter-spacing:.06em;color:#ffe6ad}
    .ms-track{height:6px;border-radius:4px;background:rgba(255,255,255,.12);overflow:hidden}
    .ms-fill{height:100%;width:0%;border-radius:4px;background:linear-gradient(90deg,#ffc966,#ff8b3d);transition:width .3s ease}
    .ms-stage-txt .ms-fill{background:linear-gradient(90deg,#ffd98a,#f5b52e)}
    .ms-stage-img .ms-fill{background:linear-gradient(90deg,#ff6a5f,#d2261e)}
    .ms-cur{font-size:10.5px;color:#c9d4cc;letter-spacing:.03em}
    /* 素材级状态：文字阶段=浅黄，图片阶段=大红，完成=极深绿，失败=灰红 */
    /* ===== 【修17】素材状态体系（取代 修15 四徽章常驻）=====
       原则：未开始=无任何标记（列表干净）；有状态才出「一枚」徽章（右对齐）；
       颜色区分阶段：文=青蓝 / 音=橘 / 图=翡翠 / 定稿=金 / 失败=红；进行中=描边呼吸，成功=实色+✓
       左侧 3px 色条同步状态，扫一眼即知进度 */
    .mat-item .mat-status{margin-left:auto;flex:0 0 auto;font-size:9.5px;line-height:1;padding:4.5px 8px;border-radius:999px;font-weight:700;letter-spacing:.06em;white-space:nowrap}
    .mat-item[data-state]{border-left-width:3px}
    .mat-item[data-state="txt"]{border-left-color:rgba(111,208,232,.85)}
    .mat-item[data-state="voice"]{border-left-color:rgba(255,168,102,.9)}
    .mat-item[data-state="img"]{border-left-color:rgba(91,232,185,.9)}
    .mat-item[data-state="final"]{border-left-color:#f4c24e;background:rgba(244,194,70,.07)}
    .mat-item[data-state="err"]{border-left-color:rgba(255,110,110,.9)}
    .ms-doing{animation:msPulse 1.5s ease-in-out infinite}
    .ms-txt{color:#a8dcf0;border:1px solid rgba(111,208,232,.55);background:rgba(111,208,232,.10)}
    .ms-txt-ok{color:#05242f;background:rgba(126,206,228,.88)}
    .ms-voice{color:#ffcda4;border:1px solid rgba(255,168,102,.6);background:rgba(255,168,102,.12)}
    .ms-voice-ok{color:#3a1e00;background:rgba(255,178,102,.92)}
    .ms-img{color:#aef7de;border:1px solid rgba(91,232,185,.6);background:rgba(91,232,185,.12)}
    .ms-img-ok{color:#052b1c;background:rgba(88,224,166,.93)}
    .ms-err{color:#ffb9b9;border:1px solid rgba(255,110,110,.65);background:rgba(160,40,40,.32)}
    .ms-final{color:#3d2a00;background:linear-gradient(135deg,#f4c24e,#e8a92e);animation:msGlow 2.6s ease-in-out infinite}
    @keyframes msPulse{0%,100%{opacity:.55}50%{opacity:1}}
    @keyframes msGlow{0%,100%{box-shadow:0 0 8px rgba(244,194,70,.35)}50%{box-shadow:0 0 18px rgba(244,194,70,.6)}}
    .mat-ico{display:none;width:9px;height:9px;flex:0 0 9px;border-radius:50%;background:currentColor;box-shadow:0 0 6px currentColor}
    .mat-state{display:none;font-size:9.5px;font-weight:700;margin-left:2px;letter-spacing:.02em}
    /* 修106：文=灰进度条+"文"；音=橘进度条+"音"；图=天蓝进度条+"图"；完成=大红无文字 */
    .mat-item.mat-txt{background:rgba(160,160,160,.5)!important;border-color:rgba(200,200,200,.85)!important;color:#3c3c3c!important;cursor:wait}
    .mat-item.mat-txt .mat-state{display:inline-flex!important;background:rgba(220,220,220,.92);color:#4a4a4a;border-radius:6px;padding:1px 5px;font-size:10px}
    .mat-item.mat-voice{background:rgba(255,140,50,.55)!important;border-color:rgba(255,175,90,.95)!important;color:#5c2a00!important;cursor:wait}
    .mat-item.mat-voice .mat-state{display:inline-flex!important;background:rgba(255,205,150,.92);color:#8a4000;border-radius:6px;padding:1px 5px;font-size:10px}
    .mat-item.mat-img{background:rgba(90,170,255,.55)!important;border-color:rgba(140,200,255,.9)!important;color:#0c2e55!important;cursor:wait}
    .mat-item.mat-img .mat-state{display:inline-flex!important;background:rgba(200,230,255,.92);color:#0d4e86;border-radius:6px;padding:1px 5px;font-size:10px}
    .mat-item.mat-ok{background:rgba(226,10,10,.72)!important;border-color:rgba(255,80,80,.95)!important;color:#fff!important;font-weight:700}
    /* 进度条：素材标题下的细条 */
    .mat-item .mat-bar{display:none;height:3px;margin:3px 4px 0;border-radius:99px;overflow:hidden;background:rgba(255,255,255,.22)}
    .mat-item.mat-txt .mat-bar,.mat-item.mat-voice .mat-bar,.mat-item.mat-img .mat-bar{display:block}
    .mat-item .mat-bar i{display:block;height:100%;width:20%;background:linear-gradient(90deg,rgba(255,255,255,.85),rgba(255,255,255,.4));animation:msBarSlide 1.1s linear infinite}
    /* 修109：完成态=同色静态条（进度满格，不再流动） */
    .mat-item.mat-txt.done .mat-bar i,.mat-item.mat-voice.done .mat-bar i,.mat-item.mat-img.done .mat-bar i{width:100%;animation:none;opacity:.75}
    @keyframes msBarSlide{0%{transform:translateX(-120%)}100%{transform:translateX(520%)}}
    .mat-item.mat-txt .mat-bar i{background:#d8d8d8}
    .mat-item.mat-voice .mat-bar i{background:#ffb36b}
    .mat-item.mat-img .mat-bar i{background:#8ecbff}
    .mat-item.mat-imgok{background:rgba(255,110,110,.60)!important;border-color:rgba(255,150,150,.95)!important;color:#5c0f0f!important;font-weight:700}
    .mat-item.mat-err{background:rgba(110,44,44,.72)!important;border-color:rgba(210,120,120,.8)!important;color:#ffdcdc!important}
    .mat-item.mat-err .mat-state{display:inline-block;background:rgba(60,12,12,.9);color:#ffb4b4;border-radius:6px;padding:1px 5px}
    .mat-item.mat-lock{cursor:wait}
    .multi-bar.multi-locked{border-color:rgba(255,190,120,.6);box-shadow:0 -8px 24px rgba(0,0,0,.3),0 0 20px rgba(255,170,90,.25)}
    @keyframes msSpin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
    /* 文字阶段完成显示 ✓，图片阶段完成显示 ✓，失败显示 × 由 JS 写文字 */
    @media(min-width:520px){.multi-actions{flex-direction:row}.multi-actions>*{flex:1}}
    .status-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#58e0a6;box-shadow:0 0 8px rgba(88,224,166,.7)}
    .material-stage{display:flex;flex-direction:column;padding:24px 26px;overflow:hidden}
    .stage-head{display:flex;justify-content:space-between;align-items:flex-start}
    /* 修136：物料页左上角 Logo */
    /* 修140：Logo 置于左侧栏「物料提取与选择」正上方（红框位置） */
    /* 修156：英文 SAGER 文字 Logo（靠上、左右规整） */
    .side-logo-wrap{display:flex;align-items:baseline;gap:8px;width:100%;margin:0 0 12px;padding:4px 2px 10px;border-bottom:1px solid rgba(154,255,209,.14)}
    .logo-text{display:block;font-family:Georgia,'Times New Roman',serif;font-size:27px;font-weight:700;letter-spacing:.34em;color:#f3f9ff;line-height:1;text-shadow:0 2px 10px rgba(79,255,196,.25);text-align:left}
    .logo-sub{display:inline;font-size:10px;letter-spacing:.18em;color:#8db4a0;text-align:left}
    .stage-head p{margin:8px 0 0;color:#8db4a0;font-size:11px;line-height:1.7}
    .brief-box{margin:10px 0 10px;padding:6px 12px;border:1px solid rgba(154,255,209,.12);border-radius:10px;background:rgba(12,26,18,.55);color:#d6e9de;font-size:11px;line-height:1.3;overflow:visible}
    .brief-empty{color:#7ba38f}
    .brief-box .brief-name{font-weight:700;color:#a5ffd4}
    .brief-context{color:#9fbfad;font-size:11px}
    .material-canvas-wrap{position:relative;flex:1;min-height:200px;display:flex;flex-direction:column}
    .material-canvas{position:relative;flex:1;min-height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;border:1px solid rgba(154,255,209,.12);border-radius:12px;background:radial-gradient(circle at 50% 42%,rgba(88,224,166,.07),transparent 36%),#0f1c14;color:#9fc4b0;overflow:hidden}
    .material-canvas-wrap .finalize-btn{position:relative;top:auto;right:auto}   /* 【N27⑧】随工具行排列，不再悬浮图上 */
    .canvas-hint{position:relative;max-width:90%;color:#7ba38f;font-size:11px;line-height:1.8;letter-spacing:.03em;text-align:center;overflow-wrap:anywhere}
    .material-canvas img{position:relative;max-width:100%;max-height:100%;border-radius:10px;object-fit:contain;z-index:2;transition:transform .18s ease;will-change:transform;cursor:zoom-in}
    .material-canvas{z-index:1}
    .material-canvas:hover{cursor:zoom-in}
    .material-canvas img.empty{display:none}
    .finalize-btn{position:absolute;top:12px;right:12px;z-index:4;padding:7px 14px;border:1px solid rgba(154,255,209,.35);border-radius:999px;background:rgba(8,26,16,.85);color:#c9ffe4;font-size:11px;font-weight:400;letter-spacing:.08em;cursor:pointer;box-shadow:0 6px 20px rgba(0,0,0,.3);backdrop-filter:blur(8px);transition:.35s}
    /* 修34：角色声音——按钮+播放器 */
    /* 修34：角色声音——按钮与裁切/下载同排同风格；播放器独立一行（画布下方），不遮挡任何区域 */
    /* 修44：声波动画（ASSET BRIEF 内嵌播放） */

    /* 修56：绿色系磨砂玻璃——声波+按钮+预览 错落不上下粘，半透明磨砂 */
    .voice-row{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:4px 0 6px}
    /* 修61：压扁精致——声波/按钮 30 高 */
    .voice-wave{width:118px;height:30px;border-radius:9px;overflow:hidden;border:1px solid rgba(127,200,162,.4);background:rgba(20,48,34,.38);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;box-shadow:inset 0 1px rgba(255,255,255,.08),0 3px 14px rgba(0,0,0,.22)}
    .voice-wave video{width:100%;height:100%;object-fit:cover;display:block;opacity:.55;border-radius:8px}
    .voice-btn-rail{flex:0 1 auto;min-width:136px;max-width:172px;height:30px;padding:0 10px;border:1px solid rgba(127,200,162,.42);border-radius:9px;background:rgba(20,48,34,.38);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:#b8ecd0;font-size:11px;font-weight:600;letter-spacing:.03em;cursor:pointer;transition:.3s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-flex;align-items:center;justify-content:center;box-shadow:inset 0 1px rgba(255,255,255,.08),0 3px 14px rgba(0,0,0,.22);position:static}
    .voice-btn-rail:hover{background:rgba(127,200,162,.26);color:#fff;box-shadow:0 0 14px rgba(127,200,162,.35),inset 0 1px rgba(255,255,255,.1)}
    .voice-btn-rail:disabled{opacity:.55;cursor:wait}
    /* 修55/56：未生成=灰绿弱；已生成=绿色亮（区分+磨砂） */
    .voice-btn-rail{opacity:.8}
    .voice-btn-rail.done{opacity:1;background:linear-gradient(180deg,rgba(127,200,162,.32),rgba(94,224,166,.22));color:#eafff3;border-color:rgba(141,255,199,.7);box-shadow:0 0 14px rgba(94,255,202,.35),inset 0 1px rgba(255,255,255,.12);animation:sbOkPulse 1.8s ease-in-out infinite}
    .voice-btn-rail.done:hover{background:rgba(127,200,162,.4);box-shadow:0 0 20px rgba(94,255,202,.5)}
    /* 修74：重新生成按钮红色透明荧光 */
    .voice-btn-rail.regen{flex:0 0 auto;max-width:96px;height:30px;padding:0 8px;border:1px solid rgba(255,110,110,.6);background:rgba(120,20,20,.3);backdrop-filter:blur(10px);color:#ff9d9d;box-shadow:0 0 10px rgba(255,110,110,.25),inset 0 1px rgba(255,255,255,.06);font-size:10.5px}
    .voice-btn-rail.regen:hover{background:rgba(216,52,52,.38);color:#fff;box-shadow:0 0 16px rgba(255,110,110,.5)}
    .voice-btn-rail.regen:disabled{opacity:.5;cursor:wait}
    /* 修56：预览条绿色磨砂（与上面错开 margin-top） */
    .voice-preview{display:flex;align-items:center;gap:9px;margin-top:5px;padding:5px 10px;border:1px solid rgba(127,200,162,.35);border-radius:9px;background:rgba(20,48,34,.34);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);min-height:26px;box-shadow:inset 0 1px rgba(255,255,255,.06),0 3px 14px rgba(0,0,0,.18)}
    .voice-preview .vp-play{width:26px;height:26px;border-radius:50%;border:1px solid rgba(141,255,199,.65);background:linear-gradient(180deg,rgba(127,200,162,.3),rgba(94,224,166,.18));color:#d4ffe8;font-size:11px;font-weight:700;cursor:pointer;transition:.25s;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}
    .voice-preview .vp-play:hover{background:rgba(127,200,162,.42);color:#fff;box-shadow:0 0 12px rgba(94,255,202,.4)}
    .voice-preview .vp-tip{flex:1;min-width:0;color:#cdeedd;font-size:11px;line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .voice-preview .vp-close{background:none;border:0;color:#9fc4b0;font-size:13px;cursor:pointer;flex:0 0 auto}
    .voice-preview .vp-close:hover{color:#ff8a8a}
    .voice-row .voice-player{display:flex;align-items:center;gap:10px;margin-left:4px}
    .voice-row .voice-player .vp-play{width:34px;height:34px;border-radius:50%;border:1px solid rgba(244,194,70,.7);background:linear-gradient(180deg,rgba(244,194,70,.25),rgba(224,167,50,.16));color:#ffd76e;font-size:14px;font-weight:700;cursor:pointer;transition:.25s;display:inline-flex;align-items:center;justify-content:center}
    .voice-row .voice-player .vp-play:hover{background:rgba(244,194,70,.38);color:#fff;box-shadow:0 0 12px rgba(244,194,70,.4)}
    .voice-row .voice-player .vp-close{background:none;border:0;color:#9fc4b0;font-size:15px;cursor:pointer}
    .voice-row .voice-player .vp-close:hover{color:#ff8a8a}
    .voice-btn-rail{flex:1;padding:10px 14px;border:1px solid rgba(244,194,70,.5);border-radius:10px;background:linear-gradient(180deg,rgba(244,194,70,.16),rgba(224,167,50,.09));color:#ffd76e;font-size:12.5px;font-weight:600;letter-spacing:.06em;cursor:pointer;transition:.3s}
    .voice-btn-rail:hover{background:rgba(244,194,70,.28);color:#fff;box-shadow:0 0 16px rgba(244,194,70,.35)}
    .voice-btn-rail:disabled{opacity:.55;cursor:wait}
        .voice-btn{margin-left:4px;padding:7px 13px;border:1px solid rgba(244,194,70,.42);border-radius:999px;background:linear-gradient(180deg,rgba(244,194,70,.16),rgba(224,167,50,.1));color:#ffd76e;font-size:11px;font-weight:400;letter-spacing:.06em;cursor:pointer;transition:.35s;backdrop-filter:blur(8px);box-shadow:0 6px 20px rgba(0,0,0,.3)}
    .voice-btn:hover{background:rgba(244,194,70,.26);color:#fff;box-shadow:0 0 0 1px rgba(255,214,102,.5),0 0 18px rgba(244,194,70,.3)}
    .voice-btn:disabled{opacity:.55;cursor:wait}
    .canvas-tools-row{flex-wrap:wrap}
    .voice-player{flex:0 0 100%;display:flex;align-items:center;justify-content:flex-start;gap:10px;margin-top:8px;padding:7px 14px;border:1px solid rgba(154,255,209,.28);border-radius:12px;background:rgba(8,26,16,.85);color:#c9ffe4;font-size:11px;letter-spacing:.04em;backdrop-filter:blur(8px)}
    .voice-player{justify-content:flex-start;gap:10px;padding:8px 12px}
    .voice-player .vp-play{width:38px;height:38px;border-radius:50%;border:1px solid rgba(244,194,70,.7);background:linear-gradient(180deg,rgba(244,194,70,.25),rgba(224,167,50,.16));color:#ffd76e;font-size:15px;font-weight:700;cursor:pointer;transition:.25s;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}
    .voice-player .vp-play:hover{background:rgba(244,194,70,.38);color:#fff;box-shadow:0 0 14px rgba(244,194,70,.45)}
    .voice-player .vp-close{background:none;border:0;color:#9fc4b0;font-size:16px;cursor:pointer;padding:0 6px;flex:0 0 auto}
    .voice-player .vp-close:hover{color:#ff8a8a}
    .voice-player .vp-tag{white-space:nowrap}
    .voice-player .vp-line{flex:1;min-width:0;color:#ffe9b0;font-size:11.5px;line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:420px;font-style:italic}
    .finalize-btn:hover{background:rgba(88,224,166,.2);box-shadow:0 0 0 1px rgba(141,255,199,.5),0 0 18px rgba(94,255,202,.3)}
    .preview-gallery{display:flex;align-items:center;gap:12px;padding:12px 4px 2px;min-height:64px}
    .gallery-label{flex:0 0 auto;color:#7ba38f;font-size:10px;letter-spacing:.1em}
    .gallery-thumbs{display:flex;gap:8px;overflow-x:auto;flex:1;padding-bottom:4px}
    .gallery-thumbs:empty::after{content:"尚无历次生成";color:#5f7d6e;font-size:10px}
    .gallery-thumb-wrap{position:relative;flex:0 0 60px;width:60px;height:60px}
    .gallery-thumb{position:relative;width:60px;height:60px;flex:0 0 60px;border-radius:8px;border:1px solid rgba(154,255,209,.15);background:#0f1c14;object-fit:cover;cursor:pointer;transition:.3s;padding:0}
    .thumb-close{position:absolute;top:-5px;right:-5px;z-index:3;width:18px;height:18px;border-radius:50%;border:1px solid rgba(255,150,150,.5);background:rgba(120,20,20,.92);color:#ffd3d3;font-size:11px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.25s}
    .thumb-close:hover{background:rgba(220,60,60,.95);transform:scale(1.15);box-shadow:0 0 10px rgba(255,100,100,.4)}
    .gallery-thumb:hover,.gallery-thumb.active{transform:translateY(-2px) scale(1.06);box-shadow:0 0 0 1px rgba(141,255,199,.5),0 0 14px rgba(94,255,202,.3)}
    .gallery-thumb img{width:100%;height:100%;object-fit:cover;border-radius:7px}
    .thumb-fixed{position:absolute;left:2px;bottom:2px;z-index:2;padding:1px 5px;border-radius:5px;background:rgba(47,201,138,.92);color:#06281a;font-size:8px;font-weight:700;letter-spacing:.03em;line-height:1.4}
    .finalize-btn.fixed{background:rgba(47,201,138,.92);color:#06281a;border-color:rgba(47,201,138,.6)}
    /* 【N27⑧】工具钮从「叠在预览图上」改为「图上方独立横向工具行」：不挡画面、从左到右=操作顺序 */
    .canvas-tools{position:static;order:-1;z-index:5;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 8px}
    .canvas-tools .finalize-btn{position:relative;top:auto;right:auto}
    .canvas-tools-row{display:flex;gap:8px}
    .crop-btn,.download-btn{position:relative;padding:7px 13px;border:1px solid rgba(154,255,209,.35);border-radius:999px;background:rgba(8,26,16,.85);color:#c9ffe4;font-size:11px;font-weight:400;letter-spacing:.06em;cursor:pointer;box-shadow:0 6px 20px rgba(0,0,0,.3);backdrop-filter:blur(8px);transition:.35s}
    .crop-btn:hover,.download-btn:hover{background:rgba(88,224,166,.2);box-shadow:0 0 0 1px rgba(141,255,199,.5),0 0 18px rgba(94,255,202,.3)}
    /* 定稿：金色荧光呼吸闪烁（置于裁切/下载下方，独占一行） */
    .finalize-btn{animation:finalizeBreath 2.6s ease-in-out infinite}
    @keyframes finalizeBreath{0%,100%{box-shadow:0 0 0 1px rgba(244,194,70,.35),0 0 14px rgba(244,194,70,.28),0 6px 20px rgba(0,0,0,.25);border-color:rgba(244,194,70,.55)}50%{box-shadow:0 0 0 1px rgba(244,194,70,.7),0 0 30px rgba(244,194,70,.55),0 6px 20px rgba(0,0,0,.25);border-color:rgba(255,214,102,.95)}}
    .finalize-btn:hover{animation:none;background:rgba(88,224,166,.2);box-shadow:0 0 0 1px rgba(244,194,70,.8),0 0 26px rgba(244,194,70,.6)}
    .crop-grid{position:absolute;inset:0;z-index:3;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:6px;padding:6px;background:rgba(5,10,8,.92);border-radius:12px}
    .crop-grid[hidden]{display:none}
    .crop-tool-btn.on{border-color:#58e0a6;background:rgba(88,224,166,.18);color:#eafff5}
    .crop-cell{position:relative;border:1px solid rgba(154,255,209,.2);border-radius:8px;overflow:hidden;cursor:pointer;background:#0f1c14;transition:.3s}
    .crop-cell:hover{box-shadow:0 0 0 1px rgba(141,255,199,.5)}
    .crop-cell img{width:100%;height:100%;object-fit:cover}
    .crop-cell .cell-tag{position:absolute;left:6px;top:6px;padding:2px 7px;border-radius:6px;background:rgba(8,26,16,.9);color:#bfffe0;font-size:10px;font-weight:700}
    .crop-cell .cell-fixed{position:absolute;right:6px;bottom:6px;padding:1px 6px;border-radius:5px;background:rgba(47,201,138,.92);color:#06281a;font-size:8px;font-weight:700}
    .crop-cell .cell-down{position:absolute;right:6px;top:6px;padding:2px 7px;border-radius:6px;background:rgba(8,26,16,.9);color:#c9ffe4;font-size:10px;cursor:pointer;border:1px solid rgba(154,255,209,.3)}
    .crop-cell .cell-down:hover{background:rgba(88,224,166,.25)}
    .crop-tools{position:absolute;left:12px;bottom:12px;z-index:5;display:flex;gap:8px}
    .crop-tools[hidden]{display:none}
    .crop-tool-btn{padding:8px 14px;border:1px solid rgba(154,255,209,.35);border-radius:999px;background:rgba(47,201,138,.9);color:#06281a;font-size:11px;font-weight:700;letter-spacing:.04em;cursor:pointer;box-shadow:0 6px 20px rgba(0,0,0,.3);transition:.3s}
    .crop-tool-btn.ghost{background:rgba(8,26,16,.85);color:#c9ffe4}
    .crop-tool-btn:hover{transform:translateY(-2px)}
    .ref-limit{display:block;font-size:9px;font-weight:400;opacity:.75;letter-spacing:.05em;margin-top:2px;text-align:center}
    .stage-actions{display:flex;justify-content:flex-start;align-items:center;gap:12px;padding-top:10px;color:#8db4a0;font-size:11px}
    .prompt-rail{display:flex;flex-direction:column;overflow:auto;border-left:1px solid rgba(154,255,209,.10)}
    .model-select-block{padding:14px 16px 4px;border-bottom:1px solid rgba(154,255,209,.10)}
    .model-select{display:flex;justify-content:space-between;align-items:center;width:100%;margin-top:8px;padding:11px 14px;border:1px solid rgba(154,255,209,.16);border-radius:9px;background:rgba(88,224,166,.06);color:#d6ffe8;font-size:11px;cursor:pointer;transition:.3s}
    .model-select:hover{background:rgba(88,224,166,.14);box-shadow:0 0 0 1px rgba(141,255,199,.4)}
    .ms-arrow{font-style:normal;color:#8db4a0;font-size:12px;transition:.25s}
    .model-select-menu{display:flex;flex-direction:column;gap:4px;margin-top:6px;padding:6px;border:1px solid rgba(154,255,209,.16);border-radius:9px;background:rgba(10,28,18,.96)}
    .model-select-menu[hidden]{display:none}
    .model-opt{padding:9px 12px;border:0;border-radius:7px;background:transparent;color:#cfe9da;font-size:11px;text-align:left;cursor:pointer;transition:.2s}
    .model-opt:hover{background:rgba(88,224,166,.14);color:#eafff2}
    .model-opt.active{background:rgba(88,224,166,.18);color:#bfffe0;box-shadow:inset 0 0 0 1px rgba(141,255,199,.35)}
     .model-select-native{display:block;width:100%;margin-top:8px;padding:11px 14px;border:1px solid rgba(154,255,209,.16);border-radius:9px;background:rgba(88,224,166,.06);color:#d6ffe8;font-size:11px;cursor:pointer;transition:.3s;appearance:none;-webkit-appearance:none;font-family:inherit}
     .model-select-native:hover{background:rgba(88,224,166,.14);box-shadow:0 0 0 1px rgba(141,255,199,.4)}
     .model-select-native option{background:#0b1f14;color:#d6ffe8;font-size:12px}
     /* 修04：217版「使用本地物料」按钮（右下角）+ 用途对话框 */
     .local-material{display:block;width:calc(100% - 32px);margin:14px 16px;padding:12px;border:1px solid rgba(154,255,209,.3);border-radius:9px;background:rgba(88,224,166,.08);color:#bfffe0;font-size:12px;font-weight:600;letter-spacing:.05em;cursor:pointer;transition:.3s}
     .local-material:hover{background:rgba(88,224,166,.16)}
     .local-dialog{position:fixed;inset:0;z-index:300;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;background:rgba(3,12,8,.72);backdrop-filter:blur(6px)}
     .local-dialog[hidden]{display:none!important}
     .local-dialog-title{color:#d8efe1;font-size:15px;font-weight:600;letter-spacing:.08em}
     /* 【修09】× 收进弹窗框内：位于「使用本地物料」标题右侧；仅弹窗打开时存在；点击=关闭弹窗回「物料提取与选择」 */
     .local-dialog-title{display:inline-flex;align-items:center;gap:14px}
     .local-dialog-close{width:34px;height:34px;border-radius:50%;border:1px solid rgba(255,157,157,.45);background:rgba(20,10,10,.55);color:#ffd7d7;font-size:17px;line-height:1;cursor:pointer;padding:0;transition:.25s}
     .local-dialog-close:hover{transform:scale(1.1);border-color:rgba(255,157,157,.85);background:rgba(64,22,22,.6)}
     .local-dialog-actions{display:flex;gap:14px}
     .local-dialog-btn{padding:14px 26px;border:0;border-radius:10px;background:linear-gradient(135deg,#8dffc7,#2fc98a);color:#06281a;font-size:13px;font-weight:700;cursor:pointer;box-shadow:0 10px 26px rgba(47,201,138,.3);transition:.3s}
     .local-dialog-btn.ref{background:#1b3327;color:#b9ecd1;border:1px solid rgba(154,255,209,.25)}
     .local-dialog-btn:hover{transform:translateY(-2px)}
     /* 修06·平衡：行高舒适字距1.7，边距回收 → 1K/2K/4K 档位回到画面 */
     .prompt-rail .prompt-block{margin-bottom:0}
     .prompt-rail .vprompt{line-height:1.7;min-height:88px;max-height:132px}
     .prompt-rail .command-input{line-height:1.65;min-height:34px;max-height:46px}
     .prompt-rail .prompt-main,.prompt-rail .prompt-secondary,.prompt-rail .stage-generate{margin-top:10px!important;padding:10px 13px!important;letter-spacing:.03em}
     .prompt-rail .model-price-note{line-height:1.65;padding:7px 10px}
     .prompt-rail .ratio-group{margin-top:6px;gap:5px}
     .prompt-rail .ratio-btn{padding:5px 9px}
     .prompt-rail .model-select-block{padding:10px 16px 5px}
     .local-material{padding:12px;margin:12px 16px 10px;font-size:12px}
     /* 修03·微调：行距/间距更舒服（仅视觉，不改结构） */
     .prompt-rail .block-title{margin-bottom:6px}
     .prompt-rail .model-select-block{padding:12px 16px 6px}
     .prompt-rail .model-select,.prompt-rail .model-select-native{padding:10px 14px;margin-top:8px}
     .prompt-rail .model-price-note{margin-top:7px;padding:7px 10px;line-height:1.7}
     .prompt-rail .vprompt{min-height:96px;max-height:150px;line-height:1.7;padding:10px 12px}
     .prompt-rail .command-input{margin-top:8px;padding:9px 12px;line-height:1.65}
     .prompt-rail .prompt-main,.prompt-rail .prompt-secondary,.prompt-rail .stage-generate{padding:10px 14px;margin-top:10px}
     .prompt-rail .ratio-group{margin-top:7px;gap:6px}
     .prompt-rail .ratio-btn{padding:6px 10px}
     .prompt-rail .lc-hint{line-height:1.6}
     .model-price-note{margin-top:8px;padding:8px 11px;border:1px dashed rgba(154,255,209,.18);border-radius:8px;background:rgba(88,224,166,.05);color:#b8e6cd;font-size:10.5px;line-height:1.7}
     .model-price-note b{color:#eafff2;font-weight:700}
    /* 修78：分辨率切换chip
       【N143】按用户要求重做：① 选中**不改变尺寸**（此前加大加粗是理解偏差）② 全部改为"加亮·透明"风格
       —— 透明底 + 明亮描边 + 外发光，而不是金色实心块。 */
    /* 【N145】① 分数必须完整可见：字号缩小到 10.5px、内边距收紧、**禁止收缩/省略号**（此前 flex:0 1 + ellipsis 把"· 15分"截掉了）
       ② 比例行选中态与分辨率 chip 完全统一为"透明金 + 金角标" */
    .model-price-note{display:flex;flex-wrap:nowrap;align-items:center;gap:5px;overflow:hidden}
    .model-price-note>span{flex:0 0 auto;white-space:nowrap}
    .res-chip{display:inline-block;flex:0 0 auto;margin:0;padding:4px 8px;border:1px solid rgba(154,255,209,.3);border-radius:999px;background:rgba(154,255,209,.06);color:#d8efe4;font-size:10.5px;letter-spacing:0;cursor:pointer;transition:.25s;white-space:nowrap;position:relative}
    .res-chip:hover{background:rgba(154,255,209,.16);color:#fff}
    .res-chip.sel{background:rgba(255,205,90,.14);border-color:rgba(255,222,140,.9);color:#fff3cd;font-weight:700;box-shadow:inset 0 0 0 1px rgba(255,215,110,.62),0 0 16px rgba(255,206,84,.38);text-shadow:0 0 9px rgba(255,214,120,.5)}
    /* 【N144】选中标记＝角标圆点（字符 ✓ 会撑宽 chip → 已弃用）；【N145】尺寸与比例行统一 6px 金点 */
    .res-chip.sel::after{content:'';position:absolute;top:-2px;right:-2px;width:6px;height:6px;border-radius:50%;background:#ffd76e;box-shadow:0 0 7px rgba(255,206,84,.95)}
    .prompt-block{padding:18px 16px;border-bottom:1px solid rgba(154,255,209,.10)}
    .prompt-block h4{font-size:12px}
    .vprompt,.command-input{width:100%;min-height:108px;padding:12px;border:1px solid rgba(154,255,209,.12);border-radius:9px;background:#12241a;color:#e2f6ea;resize:vertical;font-size:11px;line-height:1.8}
    .vprompt:focus,.command-input:focus{outline:none;border-color:rgba(88,224,166,.55);box-shadow:0 0 0 3px rgba(88,224,166,.08)}
    .prompt-main,.prompt-secondary{width:100%;margin-top:10px;padding:11px;border:0;border-radius:8px;background:linear-gradient(135deg,#8dffc7,#2fc98a);color:#06281a;font-size:11px;font-weight:700;letter-spacing:.06em;cursor:pointer;transition:.3s}
    .prompt-main:hover{filter:brightness(1.08)}
    /* 定稿后禁用「生成提示词」：置灰+禁止点击，取消定稿恢复 */
    .prompt-main:disabled{cursor:not-allowed;opacity:.45;filter:grayscale(.6);box-shadow:none;transform:none}
    .prompt-main:disabled:hover{filter:grayscale(.6);transform:none;box-shadow:none}
    .prompt-secondary{background:#1b3327;color:#b9ecd1}
    .prompt-secondary:hover{background:#234531}
    .block-title{display:flex;justify-content:space-between;color:#d8efe1;font-size:12px;margin-bottom:10px}
    .stage-generate{display:block;width:calc(100% - 32px);margin:14px 16px 0;padding:12px;border:0;border-radius:9px;background:linear-gradient(135deg,#8dffc7,#2fc98a);color:#06281a;font-size:12px;font-weight:700;letter-spacing:.05em;cursor:pointer;box-shadow:0 10px 24px rgba(47,201,138,.3);transition:.4s}
    .stage-generate:hover{transform:translateY(-2px);box-shadow:0 14px 30px rgba(47,201,138,.42)}
    .stage-generate:disabled{opacity:.5;cursor:not-allowed}
    /* 【N223】二次对标提取中：下游按钮锁定态 */
    .lc-gen-locked,.voice-btn-rail:disabled,.prompt-main:disabled,.prompt-secondary:disabled{opacity:.45;cursor:not-allowed;filter:grayscale(.35)}
    .ratio-block{padding:16px 16px 4px}
    .ratio-group{display:flex;flex-wrap:wrap;gap:6px}
    /* 【N91】比例行：等宽、不换行、薄荷激活态（画幅模式已按需求删除） */
    .ratio-group .ratio-btn{min-width:46px;text-align:center;padding:8px 6px}

    /* 【N143】比例/分辨率按钮：加亮·透明（不做实心填充、不改变尺寸）
       —— 用户要求：选中只是"更亮更透"，不许变大；未选中也要比原来更容易看清 */
    .ratio-btn{padding:8px 11px;border:1px solid rgba(154,255,209,.28);border-radius:7px;background:rgba(154,255,209,.06);color:#cfe9dc;font-size:11.5px;cursor:pointer;transition:.25s}
    .ratio-btn.active,.ratio-btn:hover{border-color:#6ff0b8;background:rgba(88,224,166,.16);color:#eafff5}
    /* 【N91】比例行激活态 +【N143】透明发光 +【N144】明确标记 +【N145】与分辨率 chip **完全一致**（透明金 + 金角标）
       注意用 inset 内描边而非加粗 border，避免改变按钮宽度导致换行 */
    #ratioGroup .ratio-btn.active,#resGroup .ratio-btn.active{border-color:rgba(255,222,140,.9);background:rgba(255,205,90,.14);color:#fff3cd;font-weight:700;position:relative;box-shadow:inset 0 0 0 1px rgba(255,215,110,.62),0 0 16px rgba(255,206,84,.38);text-shadow:0 0 9px rgba(255,214,120,.5)}
    #ratioGroup .ratio-btn.active::after,#resGroup .ratio-btn.active::after{content:'';position:absolute;top:3px;right:3px;width:5px;height:5px;border-radius:50%;background:#ffd76e;box-shadow:0 0 7px rgba(255,206,84,.95)}
    .local-material{display:block;width:calc(100% - 32px);margin:14px 16px;padding:12px;border:1px solid rgba(154,255,209,.3);border-radius:9px;background:rgba(88,224,166,.08);color:#bfffe0;font-size:12px;font-weight:600;letter-spacing:.05em;cursor:pointer;transition:.3s}
    .local-material:hover{background:rgba(88,224,166,.16)}
    .local-dialog{position:fixed;inset:0;z-index:300;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;background:rgba(3,12,8,.72);backdrop-filter:blur(6px)}
    .local-dialog[hidden]{display:none!important}
    .local-dialog-title{color:#d8efe1;font-size:15px;font-weight:600;letter-spacing:.08em}
    .local-dialog-actions{display:flex;gap:14px}
    .local-dialog-btn{padding:14px 26px;border:0;border-radius:10px;background:linear-gradient(135deg,#8dffc7,#2fc98a);color:#06281a;font-size:13px;font-weight:700;cursor:pointer;box-shadow:0 10px 26px rgba(47,201,138,.3);transition:.3s}
    .local-dialog-btn.ref{background:#1b3327;color:#b9ecd1;border:1px solid rgba(154,255,209,.25)}
    .local-dialog-btn:hover{transform:translateY(-2px)}
    @media(max-width:980px){.extract-material{grid-template-columns:190px minmax(0,1fr) 300px}}
    @media(max-width:720px){.extract-material{display:grid!important;grid-template-columns:1fr;overflow:auto}.asset-rail{border-right:0;border-bottom:1px solid rgba(154,255,209,.1)}.material-stage{min-height:430px}.prompt-rail{min-height:520px}
}
/* ===== 整体质感升级：更细字体 · 静止 · 玻璃透明 · 荧光悬停 ===== */
.extract-material,.sb-shell{font-weight:300}
.extract-material textarea,.extract-material input,.extract-material button{font-weight:300;transition:transform .2s cubic-bezier(.22,.68,.18,1),box-shadow .5s ease,border-color .5s ease,background .5s ease}
.mat-item,.prompt-main,.prompt-secondary,.ratio-btn,.stage-generate,.local-material,.asset-row-title,.prompt-block,.brief-box,.material-canvas,.ratio-block,.extract-back,.extract-gear{transition:transform .25s cubic-bezier(.22,.68,.18,1),box-shadow .25s ease,border-color .25s ease,background .25s ease,opacity .25s ease}
.mat-item:hover,.prompt-main:hover,.prompt-secondary:hover,.ratio-btn:hover,.stage-generate:hover,.local-material:hover,.extract-back:hover,.extract-gear:hover{transform:translateY(-2px) scale(1.025);box-shadow:0 0 0 1px rgba(141,255,199,.45),0 0 22px rgba(94,255,202,.28),0 14px 34px rgba(0,0,0,.3)}
.asset-row-title:hover{color:#c9ffe4;text-shadow:0 0 14px rgba(120,255,200,.5)}
.prompt-block:hover,.ratio-block:hover{background:rgba(88,224,166,.045);box-shadow:inset 0 0 0 1px rgba(141,255,199,.14)}
.brief-box{line-height:1.35;padding:8px 13px}
/* ===== 分镜大师：装载层 ===== */
.sb-loading-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0;opacity:1;transition:opacity 1.4s ease}
.sb-loading-label{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:3;display:flex;align-items:center;gap:10px;padding:12px 22px;border:1px solid rgba(159,255,214,.32);border-radius:999px;background:rgba(5,22,16,.58);box-shadow:0 0 0 1px rgba(88,224,166,.06),0 10px 34px rgba(0,0,0,.24),inset 0 1px rgba(255,255,255,.12);backdrop-filter:blur(12px);color:#eafcf1;font-size:clamp(14px,1.8vw,20px);font-weight:300;letter-spacing:.12em;white-space:nowrap;text-shadow:0 0 14px rgba(186,255,220,.72),0 0 30px rgba(79,255,196,.3);opacity:0;transition:opacity 1s ease}
.sb-loading-label.show{opacity:1}
/* ===== 分镜提示词页面 ===== */
/* ===== 分镜提示词 ·「影调片场」工作台 ===== */
:root{
  --sb-bg0:#0a1410;      /* 最底 */
  --sb-bg1:#0e1b13;      /* 面板 */
  --sb-bg2:#13271a;      /* 高亮面板 */
  --sb-line:rgba(140,200,164,.14);
  --sb-line2:rgba(140,200,164,.26);
  --sb-jade:#7fc8a2;     /* 主强调 */
  --sb-jade-bright:#a8e6c6;
  --sb-gold:#d9b45a;     /* 辅强调 */
  --sb-ink:#e6f0e8;
  --sb-mut:#a9c3b2;
  --sb-dim:#6d8a77;
  /* 立体感阴影：底影 + 顶部内高光 + 环境光 */
  --sb-sh:0 1px 0 rgba(255,255,255,.06) inset,0 14px 30px rgba(0,0,0,.42),0 2px 10px rgba(0,0,0,.34);
  --sb-sh2:0 1px 0 rgba(255,255,255,.08) inset,0 20px 46px rgba(0,0,0,.5),0 4px 14px rgba(0,0,0,.38);
}
.sb-shell{position:absolute;inset:0;display:grid;grid-template-columns:300px minmax(0,1fr);gap:0;background:radial-gradient(120% 90% at 20% 0%,rgba(38,80,56,.28),transparent 52%),radial-gradient(90% 80% at 100% 100%,rgba(30,60,44,.16),transparent 55%),var(--sb-bg0);color:var(--sb-ink)}
/* 左侧控制台：深色浮层面板 */
.sb-side{display:flex;flex-direction:column;padding:0 0 20px;border-right:1px solid var(--sb-line);background:linear-gradient(180deg,rgba(15,28,20,.98),rgba(9,18,12,.99));box-shadow:inset -1px 0 rgba(255,255,255,.03),12px 0 40px rgba(0,0,0,.28)}
.sb-brand{padding:22px 24px 18px;border-bottom:1px solid var(--sb-line);background:linear-gradient(180deg,rgba(30,54,40,.5),transparent)}
.sb-brand h2{margin:0;font-family:"Songti SC","STSong",serif;font-size:23px;font-weight:600;color:#f1f7f2;letter-spacing:.09em;text-shadow:0 2px 8px rgba(0,0,0,.5)}
.sb-brand p{margin:9px 0 0;color:var(--sb-mut);font-size:11px;line-height:1.55;letter-spacing:.03em}
/* 参数分组：卡片式，立体感 */
.sb-param{margin:20px 20px 0;padding:18px 0 6px;border-top:1px solid var(--sb-line)}
.sb-param-group{margin-bottom:22px;padding:14px 16px;border:1px solid var(--sb-line);border-radius:10px;background:linear-gradient(180deg,rgba(26,48,34,.62),rgba(15,28,20,.55));box-shadow:var(--sb-sh)}
.sb-param-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}
.sb-param-title .t{font-size:12px;color:#cfe0d3;letter-spacing:.12em;font-weight:600;text-transform:uppercase}
.sb-param-title .v{font-size:19px;color:var(--sb-jade-bright);font-weight:600;font-variant-numeric:tabular-nums;text-shadow:0 0 16px rgba(127,200,162,.35)}
.sb-slider{width:100%;-webkit-appearance:none;appearance:none;height:4px;border-radius:3px;background:linear-gradient(90deg,rgba(127,200,162,.6),rgba(127,200,162,.16));outline:none;cursor:pointer}
.sb-slider::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#d8f3e2,#7fc8a2);box-shadow:0 0 0 3px rgba(127,200,162,.16),0 2px 8px rgba(0,0,0,.5);cursor:pointer;transition:.2s}
.sb-slider::-webkit-slider-thumb:hover{box-shadow:0 0 0 5px rgba(127,200,162,.26),0 2px 10px rgba(0,0,0,.5)}
.sb-slider::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:#7fc8a2;border:0;box-shadow:0 0 0 3px rgba(127,200,162,.16),0 2px 8px rgba(0,0,0,.5)}
.sb-slider-hints{display:flex;justify-content:space-between;margin-top:10px;color:var(--sb-dim);font-size:9px;letter-spacing:.02em}
.sb-param-note{margin:2px 0 0;color:var(--sb-dim);font-size:10px;line-height:1.5}
/* ══【修392】「分镜数量」拉杆的颜色 = 状态（用户原话：「超出这个对标镜数，拉杆变为红色，对标是绿色」）══
   绿 #5fd39a = 对标（当前镜数足以在 15 秒/镜内念完剧本台词，且不至于空得慌）
   红 #ff6b6b = 超出对标镜数（**两个方向都算**：太少 ⇒ 每镜塞超 75 字 ⇒ 语速过快、情节被压；
                                太多 ⇒ 每镜内容不够 ⇒ 注水、脱节）
   红 **不是禁止** —— 尊重 【N486】客户选择为主，红只是警示 + 说明后果，仍然允许拖过去。 */
#sbShotSlider.sb392-ok{background:linear-gradient(90deg,rgba(95,211,154,.85),rgba(95,211,154,.25))}
#sbShotSlider.sb392-ok::-webkit-slider-thumb{background:radial-gradient(circle at 35% 30%,#e6fff2,#5fd39a);box-shadow:0 0 0 3px rgba(95,211,154,.18),0 2px 8px rgba(0,0,0,.5)}
#sbShotSlider.sb392-ok::-moz-range-thumb{background:#5fd39a}
#sbShotSlider.sb392-bad{background:linear-gradient(90deg,rgba(255,107,107,.9),rgba(255,107,107,.28))}
#sbShotSlider.sb392-bad::-webkit-slider-thumb{background:radial-gradient(circle at 35% 30%,#ffe3e3,#ff6b6b);box-shadow:0 0 0 4px rgba(255,107,107,.22),0 2px 8px rgba(0,0,0,.5)}
#sbShotSlider.sb392-bad::-moz-range-thumb{background:#ff6b6b}
#sbShotGroup.sb392-g-bad{border-color:rgba(255,107,107,.55);box-shadow:0 0 0 1px rgba(255,107,107,.18),var(--sb-sh)}
#sbShotGroup.sb392-g-ok{border-color:rgba(95,211,154,.42)}
#sbShotGroup.sb392-g-bad .sb-param-title .v{color:#ff8f8f;text-shadow:0 0 16px rgba(255,107,107,.35)}
#sbShotGroup.sb392-g-ok .sb-param-title .v{color:#5fd39a;text-shadow:0 0 16px rgba(95,211,154,.35)}
/* ══【修404】「简单提示」—— 一句话，绿/红同拉杆。用户原话：「一个拉杆即可！显示红色、绿色，
   与简单提示即可！」原 .sb392-state 两层大卡片（标题 + 推算长文 + 两条路）已整块删除。══ */
.sb392-hint{margin:4px 0 2px;font-size:12px;line-height:1.5;font-weight:600;letter-spacing:.01em;color:#cfe0d3;transition:color .2s}
.sb392-hint[data-lc392state="ok"]{color:#5fd39a;text-shadow:0 0 14px rgba(95,211,154,.3)}
.sb392-hint[data-lc392state="bad"]{color:#ff8f8f;text-shadow:0 0 14px rgba(255,107,107,.3)}
.sb392-hint[data-lc392state="unknown"]{color:var(--sb-dim);font-weight:500}
/* 操作按钮组：统一「步骤卡片」设计语言 —— 等高等宽、玻璃质感、一致字阶 */
.sb-actions{display:flex;flex-direction:column;gap:12px;margin:10px 20px 0}
.sb-start,.sb-summary,.sb-side-canvas{position:relative;display:flex;align-items:center;gap:14px;width:100%;min-height:64px;padding:10px 16px;border-radius:16px;cursor:pointer;text-align:left;border:1px solid rgba(255,255,255,.09);background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.015)),linear-gradient(180deg,rgba(26,44,32,.92),rgba(15,26,19,.95));box-shadow:0 10px 24px rgba(0,0,0,.28),inset 0 1px rgba(255,255,255,.06);transition:transform .25s,box-shadow .3s,border-color .3s}
.sb-start:hover,.sb-summary:hover,.sb-side-canvas:hover{transform:translateY(-2px)}
/* 步骤序号徽章：同尺寸圆点，仅色调按步骤区分 */
.sb-stepnum{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;font-size:14px;font-weight:700;letter-spacing:0;color:#0d1f15;background:linear-gradient(180deg,#a9e6c4,#63c08c);border:0;box-shadow:0 4px 12px rgba(127,200,162,.35),inset 0 1px rgba(255,255,255,.4)}
.sb-summary .sb-stepnum{color:#2a1f05;background:linear-gradient(180deg,#f3d489,#d9a83e);box-shadow:0 4px 12px rgba(217,180,90,.35),inset 0 1px rgba(255,255,255,.45)}
.sb-side-canvas .sb-stepnum{color:#fff;background:linear-gradient(180deg,#ff9a86,#e0574a);box-shadow:0 4px 12px rgba(255,110,100,.4),inset 0 1px rgba(255,255,255,.35)}
/* 按钮文案：主标题 + 副说明，统一字阶 */
.sb-txt{flex:1 1 auto;display:flex;flex-direction:column;gap:3px;min-width:0}
.sb-t1{font-size:15px;font-weight:600;letter-spacing:.06em;color:#eaf3ec;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-t2{font-size:10.5px;font-weight:400;letter-spacing:.05em;color:var(--sb-dim);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 右箭头：整组统一淡色 */
.sb-go{flex:0 0 auto;font-size:15px;color:rgba(255,255,255,.34);transition:color .25s,transform .25s}
.sb-start:hover .sb-go,.sb-summary:hover .sb-go,.sb-side-canvas:hover .sb-go{transform:translateX(2px);color:rgba(255,255,255,.8)}
/* hover 强调：按步骤用对应主题光 */
.sb-start:hover{border-color:rgba(154,255,209,.55);box-shadow:0 0 0 1px rgba(127,200,162,.35),0 0 24px rgba(94,255,202,.2),0 14px 30px rgba(0,0,0,.3)}
.sb-summary:hover{border-color:rgba(230,200,120,.6);box-shadow:0 0 0 1px rgba(217,180,90,.4),0 0 24px rgba(217,180,90,.24),0 14px 30px rgba(0,0,0,.3)}
.sb-side-canvas:hover{border-color:rgba(255,150,150,.7);box-shadow:0 0 0 1px rgba(255,120,110,.45),0 0 26px rgba(255,110,100,.28),0 14px 30px rgba(0,0,0,.32)}
/* 主操作（步骤1）稍作提亮以示引导 */
.sb-start{background:linear-gradient(180deg,rgba(255,255,255,.07),rgba(255,255,255,.02)),linear-gradient(180deg,rgba(30,56,40,.94),rgba(16,30,22,.96))}
/* 黑金按钮：居中、压扁精致，绿色荧光 + hover 放大闪光 */
/* 【修384】原注释里曾提到一张历史按钮贴图，经全形态复核（HTML属性 / CSS url() / 内联 style /
   background-image / JS 字符串拼接 / new Image() / img.src 赋值 / 仅注释）确认：该贴图与
   logo、logo-2 三张图**全站活引用均为 0**，运行期实测请求数亦为 0 ⇒ 已按用户批准删除。
   本规则的实际样式由下方 linear-gradient 完成，与任何图片文件无关，故删除后视觉零变化。 */
.sb-gold-btn{display:flex;align-items:center;justify-content:center;width:100%;margin:2px 0;padding:0;border:0;background:transparent;cursor:pointer;outline:none;-webkit-tap-highlight-color:transparent;filter:drop-shadow(0 0 6px rgba(127,255,205,.35)) drop-shadow(0 0 16px rgba(94,255,202,.16)) drop-shadow(0 4px 12px rgba(0,0,0,.45));transition:transform .32s cubic-bezier(.22,.68,.18,1),filter .32s ease}
.sb-gold-btn img{display:block;width:100%;max-height:56px;height:auto;object-fit:contain;user-select:none;-webkit-user-drag:none}
.sb-gold-btn:hover{transform:scale(1.05);filter:drop-shadow(0 0 10px rgba(141,255,214,.85)) drop-shadow(0 0 24px rgba(94,255,202,.55)) drop-shadow(0 0 44px rgba(79,255,196,.3)) drop-shadow(0 8px 18px rgba(0,0,0,.5)) brightness(1.12)}
.sb-gold-btn:active{transform:scale(1.015);filter:drop-shadow(0 0 8px rgba(141,255,214,.7)) brightness(1.04)}
.sb-side-foot{margin-top:auto;padding:16px 20px 4px;border-top:1px solid var(--sb-line);color:var(--sb-dim);font-size:10px;letter-spacing:.04em}
/* 右侧对话工作台 */
.sb-chat{display:flex;flex-direction:column;padding:0;overflow:hidden;min-height:0;height:100%}
.sb-chat-head{position:relative;display:flex;justify-content:space-between;align-items:center;padding:20px 28px;border-bottom:1px solid var(--sb-line);background:linear-gradient(180deg,rgba(17,32,23,.96),rgba(11,21,15,.9));box-shadow:0 6px 24px rgba(0,0,0,.24)}
.sb-chat-head h3{margin:3px 0 0;font-size:17px;font-weight:500;color:#eef4ef;letter-spacing:.05em}
.sb-chat-kicker{font-size:10px;color:var(--sb-dim);letter-spacing:.14em;text-transform:uppercase}
.sb-chat-status{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:0 18px;font-size:14px;color:var(--sb-mut);border:1px solid var(--sb-line2);border-radius:8px;letter-spacing:.05em;background:rgba(17,32,23,.8);box-sizing:border-box}
/* 右上角控制组：状态 + 进入画布（与齿轮纵向对齐） */
.sb-head-right{position:absolute;top:14px;right:60px;display:flex;flex-direction:column;align-items:flex-end;gap:10px;z-index:22}
.sb-head-status-wrap{display:flex;align-items:center;gap:10px}
.sb-canvas-btn{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 16px;border-radius:999px;border:1px solid rgba(154,255,209,.4);background:linear-gradient(180deg,rgba(34,72,52,.9),rgba(20,44,29,.92));color:#d7ffe9;font-size:12.5px;font-weight:600;letter-spacing:.08em;cursor:pointer;box-shadow:0 6px 20px rgba(0,0,0,.3),inset 0 1px rgba(255,255,255,.08);backdrop-filter:blur(10px);transition:.28s}
.sb-canvas-btn:hover{transform:translateY(-1px) scale(1.02);border-color:rgba(154,255,209,.6);box-shadow:0 0 0 1px rgba(141,255,199,.5),0 0 20px rgba(94,255,202,.3),0 10px 26px rgba(0,0,0,.32);color:#fff}
/* 消息流：立体文本框 + 色差 */
.sb-messages{flex:1;min-height:0;overflow:auto;padding:14px 18px;display:flex;flex-direction:column;gap:7px;   /* 【v10.13y】消息间距 16→7、外层内边距收紧 */background:radial-gradient(80% 60% at 50% 0%,rgba(30,60,44,.2),transparent 60%)}
/* 微信式对话气泡：圆润饱满 + 小尾巴 */
.sb-msg{max-width:80%;padding:8px 13px;border-radius:14px;font-size:13px;font-weight:400;line-height:1.3;letter-spacing:.01em;white-space:pre-wrap;position:relative;   /* 【v10.13y·用户要求】行距收紧到最小（原 1.62/16-20px 内边距过大） */box-shadow:0 6px 18px rgba(0,0,0,.3)}
.sb-msg p{margin:0;line-height:1.3}
.sb-msg p+p{margin-top:2px}
.sb-msg.system{align-self:flex-start;background:linear-gradient(180deg,rgba(32,56,42,.96),rgba(19,36,27,.98));border:1px solid rgba(140,200,164,.22);color:#d3e4d7;box-shadow:0 6px 18px rgba(0,0,0,.32)}
.sb-msg.system::before{content:'';position:absolute;left:-8px;top:20px;width:0;height:0;border:8px solid transparent;border-left-color:transparent;border-right:8px solid rgba(32,56,42,.96);border-top-color:rgba(32,56,42,.96)}
.sb-msg.user{align-self:flex-end;background:linear-gradient(180deg,rgba(127,200,162,.34),rgba(127,200,162,.2));border:1px solid rgba(127,200,162,.34);color:#e4f3e9;box-shadow:0 6px 18px rgba(0,0,0,.28)}
.sb-msg.user::before{content:'';position:absolute;right:-8px;top:20px;width:0;height:0;border:8px solid transparent;border-right-color:transparent;border-left:8px solid rgba(127,200,162,.34);border-top-color:rgba(127,200,162,.34)}
.sb-msg.assistant{align-self:flex-start;background:linear-gradient(180deg,rgba(30,52,38,.97),rgba(18,34,25,.99));border:1px solid rgba(140,200,164,.2);color:#e6efe8;box-shadow:0 6px 18px rgba(0,0,0,.32)}
.sb-msg.assistant::before{content:'';position:absolute;left:-8px;top:20px;width:0;height:0;border:8px solid transparent;border-left-color:transparent;border-right:8px solid rgba(30,52,38,.97);border-top-color:rgba(30,52,38,.97)}
/* 修改版消息框：浅阳光金黄色 */
.sb-msg.assistant.modified{align-self:flex-start;background:linear-gradient(180deg,rgba(217,180,90,.34),rgba(217,180,90,.2));border:1px solid rgba(217,180,90,.46);color:#fbf0d6;box-shadow:0 6px 18px rgba(0,0,0,.32)}
.sb-msg.assistant.modified::before{content:'';position:absolute;left:-8px;top:20px;width:0;height:0;border:8px solid transparent;border-left-color:transparent;border-right:8px solid rgba(217,180,90,.34);border-top-color:rgba(217,180,90,.34)}
/* 7项润色预选块（每镜初版恒定展示；修201：紧凑排版，行间无隔行空隙） */
.sb-preset{max-width:80%;align-self:flex-start;padding:10px 14px;border-radius:18px;font-size:12px;font-weight:400;line-height:1.5;letter-spacing:.01em;white-space:pre-wrap;background:linear-gradient(180deg,rgba(32,56,42,.92),rgba(19,36,27,.96));border:1px solid rgba(160,205,214,.24);color:#e0eaeb;box-shadow:0 6px 18px rgba(0,0,0,.3);position:relative}
.sb-preset::before{content:'';position:absolute;left:-8px;top:16px;width:0;height:0;border:8px solid transparent;border-left-color:transparent;border-right:8px solid rgba(32,56,42,.92);border-top-color:rgba(32,56,42,.92)}
.sb-preset .sb-preset-head{display:block;font-weight:600;color:#bfe6ea;margin-bottom:4px}
.sb-preset .sb-preset-item{display:block;padding:1px 0;line-height:1.5;color:#d3e0e2}
/* 修25：默认——序号方框极细白色描边、无色底、白字（统一素净）；圈选/悬停才填充金黄透明 */
.sb-preset-item{display:block;padding:3px 6px;margin:2px 0;border-radius:9px;cursor:pointer;transition:background-color .18s ease;position:relative}
.sb-preset-item .sb-preset-num{--pc:#ffd76e;display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:22px;padding:0 5px;margin-right:8px;border-radius:6px;font-size:12.5px;font-weight:700;letter-spacing:0;color:rgba(255,255,255,.92);background:transparent;border:0.5px solid rgba(255,255,255,.55);transition:background-color .18s ease,color .18s ease,border-color .18s ease;vertical-align:middle}
.sb-preset-item .sb-preset-txt{transition:color .18s ease;vertical-align:middle}
/* 修23：悬停——仅底色改变（无放大/无发光/无描边/无阴影/无位移） */
.sb-preset-item:hover{background:rgba(255,215,110,.14)}
.sb-preset-item:hover .sb-preset-num{color:#ffd76e;background:rgba(255,215,110,.22);border-color:rgba(255,215,110,.6)}
.sb-preset-item:hover .sb-preset-txt{color:#ffe9b0}
/* 修25：已圈选态——序号方框统一金黄透明填充 + 行底色高亮 + "✓ 已选"标记 */
.sb-preset-item.picked{background:rgba(255,215,110,.2)}
.sb-preset-item.picked .sb-preset-num{color:#06281a;background:rgba(255,215,110,.85);border-color:rgba(255,231,157,.9)}
.sb-preset-item.picked .sb-preset-txt{color:#fff}
.sb-preset-item.picked::after{content:'✓ 已选';position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:10px;font-weight:700;color:#ffd76e;letter-spacing:.05em}
.sb-preset-tip{color:#9fb8c8;cursor:default!important}
.sb-preset-tip:hover{transform:none!important;background:none!important;border:1px solid transparent!important;box-shadow:none!important}
/* 修19：确定按钮 + 模态命令对话框 */
.sb-preset-ok{display:inline-block;margin-top:6px;padding:6px 16px;border-radius:999px;font-size:12px;font-weight:700;letter-spacing:.05em;color:#3d2a00;background:linear-gradient(180deg,#f4c246,#e0a732);border:1px solid rgba(255,231,157,.7);cursor:pointer;transition:.25s;box-shadow:0 4px 14px rgba(244,194,70,.35)}
.sb-preset-ok:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(244,194,70,.55),0 0 12px rgba(255,215,110,.35)}
.sb-preset-ok.has{animation:sbOkPulse 1.2s ease-in-out infinite}
@keyframes sbOkPulse{0%,100%{box-shadow:0 0 6px rgba(244,194,70,.35)}50%{box-shadow:0 0 18px rgba(244,194,70,.75)}}
.sb-dlg-mask{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;background:rgba(3,8,5,.72);backdrop-filter:blur(4px)}
.sb-dlg{width:min(560px,92vw);padding:20px 22px;border-radius:16px;border:1px solid rgba(217,180,90,.5);background:linear-gradient(180deg,rgba(24,38,28,.98),rgba(13,24,17,.99));box-shadow:0 20px 60px rgba(0,0,0,.55),0 0 30px rgba(244,194,70,.14);color:#e6efe8}
.sb-dlg-title{font-size:15px;font-weight:700;color:#ffd76e;letter-spacing:.06em;margin-bottom:12px;text-shadow:0 0 10px rgba(255,215,110,.35)}
.sb-dlg-ta{width:100%;min-height:110px;max-height:220px;resize:vertical;padding:10px 12px;border:1px solid rgba(160,205,214,.32);border-radius:10px;background:rgba(5,12,8,.95);color:#e6efe8;font-size:13px;line-height:1.6;outline:none;font-family:inherit;box-sizing:border-box}
.sb-dlg-ta:focus{border-color:rgba(244,194,70,.65);box-shadow:0 0 0 2px rgba(244,194,70,.16)}
.sb-dlg-acts{display:flex;justify-content:flex-end;gap:10px;margin-top:14px}
.sb-dlg-btn{padding:8px 22px;border-radius:999px;font-size:12.5px;font-weight:600;letter-spacing:.05em;cursor:pointer;border:1px solid rgba(160,205,214,.35);background:rgba(127,200,162,.12);color:#d9eadf;transition:.2s}
.sb-dlg-btn:hover{background:rgba(127,200,162,.26)}
.sb-dlg-btn.main{color:#3d2a00;background:linear-gradient(180deg,#f4c246,#e0a732);border-color:rgba(255,231,157,.7);box-shadow:0 4px 14px rgba(244,194,70,.35)}
.sb-dlg-btn.main:hover{box-shadow:0 6px 18px rgba(244,194,70,.6)}
/* 操作回复条：浮起工具栏 */
.sb-replies{flex:0 0 auto;display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:9px 18px;max-height:34vh;overflow-y:auto;overscroll-behavior:contain;border-top:1px solid var(--sb-line);background:linear-gradient(180deg,rgba(15,29,20,.94),rgba(11,21,15,.96));box-shadow:0 -8px 24px rgba(0,0,0,.2)}   /* 【N339】行距收紧（行距/内边距 16px 28px + 8px → 9px 18px + 6px）并加 max-height+滚动：
      Windows 字体（微软雅黑）行高更大，8 个选项会折成 3 行，旧样式把最后一行顶出可视区 → 「继续下一镜」看不到 ✅ */
.sb-reply{display:none;padding:6px 13px;min-width:44px;text-align:center;line-height:1.2;border:1px solid var(--sb-line2);border-radius:8px;background:linear-gradient(180deg,rgba(127,200,162,.12),rgba(127,200,162,.06));color:#d3e5d8;font-size:12.5px;font-weight:400;letter-spacing:.02em;cursor:pointer;transition:.25s;box-shadow:inset 0 1px rgba(255,255,255,.05),0 2px 8px rgba(0,0,0,.24)}
.sb-reply.show{display:inline-block}
.sb-reply:hover{background:linear-gradient(180deg,rgba(127,200,162,.2),rgba(127,200,162,.12));transform:translateY(-1px);box-shadow:inset 0 1px rgba(255,255,255,.08),0 0 0 1px rgba(140,200,164,.3),0 6px 16px rgba(0,0,0,.3)}
/* ═══【N339】跨系统安全：矮屏 / 小窗下把选项栏再收紧一档，并允许滚动 —— 保证任何系统都能看到全部选项 ═══ */
@media (max-height:900px){.sb-replies{padding:7px 14px;gap:5px}.sb-reply{padding:5px 11px;font-size:12px;min-width:40px}}
@media (max-height:760px){.sb-replies{padding:6px 12px;gap:5px;max-height:32vh}.sb-reply{padding:4px 10px;font-size:11.5px;min-width:36px;letter-spacing:0}
  .sb-messages{padding:10px 14px;gap:6px}.sb-chat-head{padding:12px 18px}.sb-stepnav{padding:6px 12px}}
@media (max-height:640px){.sb-replies{padding:5px 10px;gap:4px;max-height:40vh}.sb-reply{padding:3px 9px;font-size:11px;min-width:32px}
  .sb-messages{padding:8px 12px}.sb-chat-head{padding:10px 14px}}
/* ═══【N339②】兜底：极端矮窗（Win 高 DPI 缩放 125%~150% 后可视高度可能只剩 400px 上下）
   → 不再靠 overflow:hidden 硬裁，而是让聊天列可整列滚动、消息区限高，**保证选项栏永远可达** ═══ */
@media (max-height:620px){
  .sb-chat{overflow-y:auto!important;overflow-x:hidden!important}
  .sb-messages{max-height:42vh;flex:0 0 auto}
  .sb-replies{position:sticky;bottom:0;z-index:20;max-height:none}
}
@media (max-height:480px){
  .sb-side{display:none}                      /* 极矮时先让出侧栏，换取主区高度 */
  .sb-shell{grid-template-columns:minmax(0,1fr)}
  .sb-chat-head{padding:8px 12px}
  .sb-chat-head h3{font-size:15px}
  .sb-messages{max-height:34vh}
  .sb-replies{padding:5px 9px;gap:4px}
  .sb-reply{padding:3px 8px;font-size:11px;min-width:30px}
  .sb-stepnav{padding:4px 10px;gap:6px;flex-wrap:wrap}
}
/* 横向兜底：极窄窗（Win 分屏/缩放）时导航条可换行，右侧「下一镜 →」绝不会被裁掉 */
@media (max-width:1100px){.sb-stepnav{flex-wrap:wrap;row-gap:6px}.sbn-steps{max-width:100%;overflow-x:auto}}
/* 窄窗口（Win 常见 1366×768 / 分屏）时按钮更紧凑，避免折行过多 */
@media (max-width:1280px){.sb-reply{padding:5px 11px;font-size:12px}}
@media (max-width:1024px){.sb-reply{padding:4px 9px;font-size:11.5px;min-width:34px}}
/* ===== 修217：分镜步骤导航条（上一镜/下一镜 + 镜序号芯片；已生成可自由跳，未生成下一镜无效）===== */
.sb-stepnav{flex:0 0 auto;position:relative;z-index:80;display:flex;align-items:center;gap:8px;justify-content:center;padding:8px 16px;border-bottom:1px solid var(--sb-line);background:linear-gradient(180deg,rgba(15,29,20,.92),rgba(11,21,15,.88))}
.sb-stepnav .sbn-go{flex:0 0 auto;height:30px;padding:0 14px;border-radius:999px;border:1px solid rgba(140,200,164,.4);background:linear-gradient(180deg,rgba(127,200,162,.16),rgba(127,200,162,.07));color:#dff0e4;font-size:12px;font-weight:600;letter-spacing:.06em;cursor:pointer;transition:.25s}
.sb-stepnav .sbn-go:hover{background:rgba(127,200,162,.28);color:#fff;border-color:rgba(141,255,199,.6)}
.sb-stepnav .sbn-go:disabled{opacity:.35;cursor:not-allowed;filter:grayscale(.6)}
.sb-stepnav .sbn-steps{display:flex;align-items:center;gap:4px;overflow-x:auto;max-width:560px;padding:2px 2px}
.sb-stepnav .sbn-chip{flex:0 0 auto;min-width:30px;height:30px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;font-size:11.5px;font-weight:600;letter-spacing:.02em;color:#9fb8a8;border:1px solid rgba(160,205,214,.22);background:rgba(127,200,162,.07);cursor:default;transition:.25s}
.sb-stepnav .sbn-chip.done{color:#eaf6ec;border-color:rgba(127,200,162,.55);background:linear-gradient(180deg,rgba(127,200,162,.34),rgba(127,200,162,.18));cursor:pointer}
.sb-stepnav .sbn-chip.done:hover{transform:translateY(-1px);background:rgba(127,200,162,.42);border-color:rgba(141,255,199,.7);box-shadow:0 0 12px rgba(94,255,202,.35)}
.sb-stepnav .sbn-chip.cur{color:#3d2a00;border-color:rgba(244,194,70,.7);background:linear-gradient(180deg,#f4c246,#e0a732);box-shadow:0 0 12px rgba(244,194,70,.5);cursor:pointer}
.sb-stepnav .sbn-chip.cur:hover{transform:translateY(-1px)}
.sb-stepnav .sbn-chip.busy{color:#ffe6c9;border-color:rgba(244,194,70,.55);background:rgba(244,194,70,.16);cursor:default;animation:sbnPulse 1.1s ease-in-out infinite}
@keyframes sbnPulse{0%,100%{box-shadow:0 0 0 1px rgba(244,194,70,.2)}50%{box-shadow:0 0 14px rgba(244,194,70,.6)}}
.sb-stepnav .sbn-cur-label{font-size:10.5px;color:#bcd;letter-spacing:.06em;white-space:nowrap;padding:0 2px}
/* ===== 修201：镜气泡操作条（编辑/删除）+ 通用弹窗 ===== */
.sb-msg .sb-msg-acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;padding-top:8px;border-top:1px dashed rgba(160,205,214,.22)}
.sb-msg .sb-msg-act{flex:0 0 auto;padding:4px 12px;border:1px solid rgba(160,205,214,.3);border-radius:999px;background:linear-gradient(180deg,rgba(127,200,162,.14),rgba(127,200,162,.06));color:#cfe6d8;font-size:11.5px;line-height:1.4;cursor:pointer;transition:.2s}
.sb-msg .sb-msg-act:hover{background:rgba(127,200,162,.26);color:#fff}
.sb-msg .sb-msg-act.danger{color:#ffd9cf;border-color:rgba(255,140,110,.5);background:linear-gradient(180deg,rgba(255,120,90,.14),rgba(255,120,90,.05))}
.sb-msg .sb-msg-act.danger.confirm{background:rgba(255,100,80,.42);color:#fff;border-color:rgba(255,120,90,.8)}
.sb-modal-mask{position:fixed;inset:0;z-index:300;display:none;align-items:center;justify-content:center;background:rgba(3,9,6,.62);backdrop-filter:blur(6px)}
.sb-modal-mask.show{display:flex}
.sb-modal{width:min(760px,92vw);max-height:84vh;display:flex;flex-direction:column;border-radius:18px;border:1px solid rgba(160,205,214,.3);background:linear-gradient(180deg,rgba(26,46,33,.99),rgba(13,26,18,.99));box-shadow:0 24px 70px rgba(0,0,0,.55);overflow:hidden}
.sb-modal-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--sb-line)}
.sb-modal-head h4{margin:0;font-size:14px;font-weight:600;color:#e7f2ea;letter-spacing:.03em;line-height:1.5}
.sb-modal-close{border:0;background:none;color:var(--sb-dim);font-size:20px;line-height:1;cursor:pointer;padding:2px 6px}
.sb-modal-close:hover{color:#fff}
.sb-modal textarea{width:100%;min-height:230px;padding:14px;border:0;border-radius:0;background:rgba(7,15,10,.92);color:#e6efe8;font-size:12.5px;line-height:1.6;white-space:pre-wrap;outline:none;resize:vertical;font-family:inherit;box-sizing:border-box}
.sb-modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:12px 16px;border-top:1px solid var(--sb-line)}
.sb-modal-btn{padding:9px 24px;border:1px solid rgba(160,205,214,.35);border-radius:10px;background:linear-gradient(180deg,rgba(127,200,162,.16),rgba(127,200,162,.07));color:#d9eadf;font-size:13px;cursor:pointer;transition:.2s}
.sb-modal-btn:hover{background:rgba(127,200,162,.24)}
.sb-modal-btn.primary{background:linear-gradient(180deg,#8fd8ae,#5cb787);color:#0c1f13;font-weight:600;border:0}
.sb-modal-btn.primary:hover{filter:brightness(1.08)}
.sb-msg .sb-msg-body{white-space:pre-wrap;word-break:break-word}
/* ===== 修203：预制8 悬浮底栏输入框（固定在对话区底部、回复键上方；滚动重看原文不受影响）===== */
.sb-req-dock{flex:0 0 auto;display:flex;flex-direction:column;gap:7px;padding:10px 28px 0;border-top:1px solid var(--sb-line);background:linear-gradient(180deg,rgba(18,34,23,.97),rgba(12,24,16,.98))}
.sb-req-dock-tip{font-size:11px;color:#bfe6ea;line-height:1.5}
.sb-req-dock-row{display:flex;gap:10px;align-items:flex-end}
.sb-req-dock-ta{flex:1;min-width:0;min-height:46px;max-height:140px;resize:vertical;padding:7px 10px;border:1px solid rgba(160,205,214,.32);border-radius:9px;background:rgba(5,12,8,.95);color:#e6efe8;font-size:12.5px;line-height:1.55;outline:none;font-family:inherit;box-sizing:border-box}
.sb-req-dock-ta:focus{border-color:rgba(154,255,209,.6)}
.sb-req-dock-acts{display:flex;flex-direction:column;gap:6px;flex:0 0 auto}
.sb-req-dock-acts button{padding:7px 16px;border-radius:999px;font-size:12px;cursor:pointer;border:1px solid rgba(160,205,214,.35);background:linear-gradient(180deg,rgba(127,200,162,.16),rgba(127,200,162,.07));color:#d9eadf;transition:.2s}
.sb-req-dock-acts button:hover{background:rgba(127,200,162,.28)}
.sb-req-dock-acts .sb-req-ok{background:linear-gradient(180deg,#8fd8ae,#5cb787);color:#0c1f13;font-weight:600;border:0}
.sb-req-dock-acts .sb-req-ok:hover{filter:brightness(1.08)}
/* 消息框镜号徽标 */
.sb-msg-badge{display:inline-block;margin:0 0 8px;padding:4px 12px;border-radius:20px;font-size:11.5px;font-weight:600;letter-spacing:.06em;color:#eaf5ef;background:linear-gradient(180deg,rgba(127,200,162,.32),rgba(127,200,162,.16));border:1px solid rgba(127,200,162,.4);box-shadow:inset 0 1px rgba(255,255,255,.08);text-shadow:0 1px 2px rgba(0,0,0,.4)}
.sb-msg.assistant.modified .sb-msg-badge{background:linear-gradient(180deg,rgba(217,180,90,.36),rgba(217,180,90,.18));border-color:rgba(217,180,90,.5);color:#fff4d6}
/* 返回/齿轮 */
.sb-back{top:14px!important;left:18px!important;height:38px!important;border-radius:8px!important}
.sb-gear{top:14px!important;right:16px!important}
.sb-side{padding-top:0}
.sb-chat-head{padding-right:56px}
@media(max-width:900px){.sb-shell{grid-template-columns:1fr}.sb-side{border-right:0;border-bottom:1px solid var(--sb-line)}}
@media(max-width:600px){.sb-chat-head{padding-right:50px}}
/* 汇总弹窗 · 立体文档 */
.sb-preview-modal{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;background:rgba(3,7,5,.82);backdrop-filter:blur(6px)}
.sb-preview-modal[hidden]{display:none}
.sb-preview-content{width:760px;max-width:92vw;height:84vh;display:flex;flex-direction:column;border:1px solid rgba(140,200,164,.26);border-radius:12px;background:#0c1712;box-shadow:0 0 0 1px rgba(0,0,0,.4),0 44px 110px rgba(0,0,0,.72),inset 0 1px rgba(255,255,255,.05);animation:sbPopup .25s ease}
@keyframes sbPopup{from{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}
.sb-preview-head{display:flex;justify-content:space-between;align-items:center;padding:16px 22px;border-bottom:1px solid rgba(140,200,164,.14);background:linear-gradient(180deg,rgba(18,35,26,.96),rgba(12,24,17,.94));color:#e2efe6;font-size:14px;letter-spacing:.06em;font-weight:500}
.sb-summary-close{width:28px;height:28px;border-radius:50%;border:1px solid rgba(200,120,120,.4);background:rgba(90,20,20,.5);color:#ffd0d0;cursor:pointer;font-size:15px;line-height:1}
.sb-summary-close:hover{background:rgba(140,40,40,.7)}
.sb-preview-scroll{flex:1;overflow:auto;padding:26px 30px}
.sb-preview-scroll pre{margin:0;white-space:pre-wrap;font-family:"PingFang SC","Microsoft YaHei",sans-serif;font-size:13px;font-weight:400;line-height:1.7;letter-spacing:.02em;color:#dbe7dd}
.sb-save-word{padding:13px;border:1px solid rgba(140,220,180,.4);border-radius:9px;background:linear-gradient(180deg,#a9d4b6,#6f9c82);color:#08231a;font-size:14px;font-weight:600;letter-spacing:.1em;cursor:pointer;box-shadow:var(--sb-sh),0 0 22px rgba(127,200,162,.2);transition:.3s}
.sb-save-word:hover{transform:translateY(-1px);filter:brightness(1.08);box-shadow:var(--sb-sh2),0 0 30px rgba(127,200,162,.32)}
 .sb-preview-foot{display:flex;flex-wrap:wrap;gap:10px;padding:16px 22px 22px}
 .sb-preview-foot .sb-save-word{margin:0;flex:1 1 45%;min-width:160px}
 .sb-preview-foot .sb-pack-btn{margin:0;flex:1 1 45%;min-width:160px;padding:13px;border:1px solid rgba(150,195,255,.42);border-radius:9px;background:linear-gradient(180deg,#a9c3e4,#6f8dab);color:#0a1a28;font-size:14px;font-weight:600;letter-spacing:.1em;cursor:pointer;box-shadow:var(--sb-sh),0 0 22px rgba(150,190,255,.2);transition:.3s}
 .sb-preview-foot .sb-pack-btn:hover{transform:translateY(-1px);filter:brightness(1.08);box-shadow:var(--sb-sh2),0 0 30px rgba(150,190,255,.32)}
 .sb-preview-foot .sb-pack-btn:disabled{opacity:.62;cursor:wait}
 .sb-push-libtv{flex:1 1 45%;padding:14px 18px;border:1px solid rgba(255,120,120,.55);border-radius:10px;background:linear-gradient(180deg,rgba(160,48,48,.92),rgba(104,28,28,.95));color:#ffdcdc;font-size:14px;font-weight:600;letter-spacing:.1em;cursor:pointer;box-shadow:var(--sb-sh),inset 0 1px rgba(255,255,255,.08);transition:.3s}
 .sb-push-libtv:hover{transform:translateY(-1px);border-color:rgba(255,160,160,.75);box-shadow:var(--sb-sh2),0 0 24px rgba(255,110,110,.32);color:#fff}
 .sb-push-libtv:disabled{opacity:.6;cursor:wait;transform:none}
 .sb-push-log{max-height:140px;overflow:auto;margin:0 22px;padding:10px 14px;border:1px dashed rgba(140,200,164,.28);border-radius:9px;background:rgba(8,18,12,.6);color:#cfe6d6;font-size:12px;line-height:1.7;white-space:pre-wrap;font-family:"PingFang SC","Microsoft YaHei",sans-serif}
 .sb-push-log.err{border-color:rgba(255,140,140,.4);color:#ffd3d3}
 /* 交给LibTV：全屏引导层 */
 .sb-handoff{position:fixed;inset:0;z-index:100000;background:radial-gradient(120% 90% at 50% 0%,rgba(83,224,174,.10),transparent 55%),radial-gradient(90% 80% at 50% 100%,rgba(59,130,246,.08),transparent 60%),#04120c}
 .sb-handoff-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0;opacity:1;transition:opacity 1.4s ease}
 .sb-handoff-label{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:3;display:flex;align-items:center;gap:10px;padding:12px 22px;border:1px solid rgba(159,255,214,.32);border-radius:999px;background:rgba(5,22,16,.58);box-shadow:0 0 0 1px rgba(88,224,166,.06),0 10px 34px rgba(0,0,0,.24),inset 0 1px rgba(255,255,255,.12);backdrop-filter:blur(12px);color:#eafcf1;font-size:clamp(15px,2vw,22px);font-weight:300;letter-spacing:.12em;white-space:nowrap;text-shadow:0 0 14px rgba(186,255,220,.72),0 0 30px rgba(79,255,196,.3);opacity:1;transition:opacity 1s ease}
 /* ===== 全局「跳过」胶囊：仅视频播放中且内容未生成完毕时显示 ===== */
 #skipTag{position:fixed;left:18px;top:18px;z-index:2147483000;display:none;align-items:center;gap:7px;padding:7px 16px;border:1px solid rgba(200,235,255,.28);border-radius:999px;background:rgba(8,18,26,.42);color:#dff2ff;font-size:12.5px;font-weight:400;letter-spacing:.12em;cursor:pointer;box-shadow:0 6px 18px rgba(0,0,0,.22),inset 0 1px rgba(255,255,255,.1);backdrop-filter:blur(10px);opacity:.78;transition:opacity .5s ease,transform .25s}
 #skipTag.show{display:inline-flex}
 #skipTag.fade{opacity:0}
 #skipTag:hover{opacity:1;transform:scale(1.04);box-shadow:0 0 0 1px rgba(141,220,255,.4),0 0 20px rgba(94,200,255,.22)}
 /* ===== 首页历史工程：规整 · 清晰 · 严谨 · 高端 · 整齐（终覆盖）===== */
 .project-card.has-history{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;text-align:left;padding:14px 16px 12px;height:auto;min-height:112px;animation:none!important;color:#eef4f0;overflow:hidden!important}
 .project-card.has-history:after{display:none!important}   /* 去掉中央浮动光点，避免干扰文字 */
 .project-card.has-history:hover{transform:translateY(-3px)}
 .project-card.has-history .history-card-label{order:0;margin:0 0 10px;font-size:9px;font-weight:600;letter-spacing:.24em;line-height:1;color:rgba(158,216,188,.82);text-transform:uppercase;text-shadow:none}
 .project-card.has-history .history-card-title{order:1;margin:0;font-size:15px;font-weight:600;line-height:1.45;letter-spacing:.02em;color:#ffffff;text-shadow:0 1px 2px rgba(0,0,0,.25);white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
 .project-card.has-history .history-card-stage{order:2;margin:auto 0 0;padding-top:12px;font-size:11px;font-weight:400;letter-spacing:.04em;line-height:1.3;color:rgba(222,229,224,.72);text-shadow:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-top:1px solid rgba(255,255,255,.07)}
 .project-card.is-empty{animation:none!important;color:rgba(196,210,202,.55);letter-spacing:.02em}
 .project-card.is-empty:after{display:none!important}
 /* 首页底部横向历史列表同规格化 */
 .history-entry{display:flex;flex-direction:column;align-items:stretch;text-align:left;padding:18px 20px;min-height:120px}
 .history-entry .history-label{margin:0 0 10px;font-size:9px;font-weight:600;letter-spacing:.24em;line-height:1;color:rgba(158,216,188,.82);text-transform:uppercase;text-shadow:none}
 .history-entry b{margin:0;font-size:15px;font-weight:600;line-height:1.45;letter-spacing:.02em;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.25);white-space:normal}
 .history-entry small{display:flex;align-items:flex-end;margin:auto 0 0;padding-top:12px;font-size:11px;letter-spacing:.04em;line-height:1.3;color:rgba(222,229,224,.72)}

/* 修30：全屏图片灯箱（点击预览图最大化）——滚轮缩放/左键拖动/右上角关闭/点外部退出 */
.mat-zoom-mask{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;background:rgba(2,6,4,.92);backdrop-filter:blur(10px);cursor:zoom-out;user-select:none;-webkit-user-select:none}
.mat-zoom-mask[hidden]{display:none}
.mat-zoom-stage{position:relative;overflow:hidden;cursor:grab;touch-action:none}
.mat-zoom-stage.dragging{cursor:grabbing}
.mat-zoom-stage img{display:block;max-width:none;max-height:none;border-radius:6px;box-shadow:0 30px 90px rgba(0,0,0,.7);will-change:transform;transform-origin:0 0;background:#0a0f0c;pointer-events:none;-webkit-user-drag:none;user-select:none;-webkit-user-select:none;touch-action:none}
.mat-zoom-close{position:fixed;top:18px;right:22px;z-index:100001;width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,.28);background:rgba(10,16,12,.72);color:#fff;font-size:22px;line-height:1;cursor:pointer;transition:.25s;backdrop-filter:blur(6px)}
.mat-zoom-close:hover{background:rgba(216,52,52,.85);border-color:#ff8a8a;transform:rotate(90deg)}
.mat-zoom-hint{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);z-index:100001;padding:7px 16px;border-radius:999px;background:rgba(10,16,12,.7);border:1px solid rgba(255,255,255,.16);color:rgba(255,255,255,.75);font-size:11px;letter-spacing:.08em;pointer-events:none;backdrop-filter:blur(6px)}

/* ===== 【N122】流畅度优化（方案1，精选）：关掉"压在视频上"的毛玻璃 + 视频逐帧滤镜 =====
   实测：全站 37 处 backdrop-filter:blur()，其中下列元素正好覆盖在正在播放的视频之上，
   每帧都要做一次模糊合成（低端设备/核显上是主要卡顿来源）。
   这里用末尾覆盖规则统一关闭，不改任何原有定义 → 这些元素本身就有半透明底色+描边，视觉几乎无感。 */
/* ① 视频本身的逐帧滤镜（background 视频被 saturate/brightness/contrast 处理过）*/
.seed-video,.script-video,.extract-video,.sb-loading-video{filter:none !important}
/* ② 覆盖在视频上的加载层与提示胶囊 */
#busy,#busy:after,.busy-box,.seed-video,.script-glow,.growth-wrap,
.sb-loading-label,.extract-loading-label,.loading-pill,#skipTag{backdrop-filter:none !important;-webkit-backdrop-filter:none !important}
/* ③ 全屏遮罩（打开时视频仍在背景播放）*/
.more-projects-mask,.sb-dlg-mask,.sb-preview-modal,.mat-zoom-mask,.mat-zoom-close,.mat-zoom-hint{backdrop-filter:none !important;-webkit-backdrop-filter:none !important}
/* ④ 页面级顶栏（固定悬浮在视频上方）*/
.lcnav,#ideaBack,#scriptBack,#extractBack,#sbBack,.step-head,.topbar,.sb-side,.asset-rail,.idea-head{backdrop-filter:none !important;-webkit-backdrop-filter:none !important}
/* ⑤ 剧本页正文容器（大块浮在视频上）*/
.script-shell,.delivery-grid,.pure-script,.script-text{backdrop-filter:none !important;-webkit-backdrop-filter:none !important}
#cover{background:linear-gradient(180deg,#05080c 0%,#070c12 45%,#04070a 100%) !important}
/* ⑥ 给背景视频提升为独立合成层，减少重绘 */
.seed-video,.script-video,.extract-video,.sb-loading-video,.cover-video{transform:translateZ(0);will-change:transform}

/* ═══【N288】参考素材区：标题与卡片严格上下两行，禁止 flex 换行挤压/重叠 ═══ */
#storyCanvasMask .sc-vrefs{display:grid!important;grid-template-columns:minmax(0,1fr)!important;grid-template-rows:auto auto!important;align-items:stretch!important;gap:7px!important;overflow:hidden!important}
#storyCanvasMask .sc-vrefs-head{display:flex!important;grid-row:1!important;grid-column:1!important;width:100%!important;min-width:0!important;flex-wrap:nowrap!important;margin:0!important;padding:0 0 6px!important;align-items:center!important;border-bottom:1px solid rgba(190,210,235,.16)!important}
#storyCanvasMask .sc-vrefs-head b,#storyCanvasMask .sc-vrefs-head span,#storyCanvasMask .sc-vrefs-head em{white-space:nowrap!important;overflow:hidden;text-overflow:ellipsis}
#storyCanvasMask .sc-vrefs-head em{margin-left:auto!important;flex:0 0 auto!important}
/* 【N305g】用户要求：参考素材**规规矩矩上下两排**、等宽对齐、绝不溢出边框。
   做法：grid（2 行 × 自动列，列宽 1fr）→ 卡片自左向右按**列**填充：4 张＝2×2、6 张＝3×2…宽度自动均分。 */
#storyCanvasMask .sc-vrefs-row{grid-row:2!important;grid-column:1!important;width:100%!important;min-width:0!important;display:grid!important;grid-template-rows:repeat(2,minmax(0,1fr))!important;grid-auto-flow:column!important;grid-auto-columns:minmax(0,1fr)!important;gap:8px!important;align-items:stretch!important;overflow-x:auto!important;overflow-y:hidden!important;padding:1px 1px 3px!important}

/* ═══【N352·用户要求】参考素材条"极致瘦身"：模型/分辨率/时长/比例/积分与正文一屏可见，不再上下拉动 ═══
   改前：缩略图 1:1 撑满列宽（2 行），整条最高 168px + 标题行，把下面的控制台挤出可视区。
   改后：缩略图固定 34×34、卡片 40px 高、**两排**照旧（等宽对齐不变），整条 ≈110px；右侧横向滚动看更多。 */
#storyCanvasMask .sc-vrefs{max-height:none!important;overflow:visible!important;gap:4px!important}
#storyCanvasMask .sc-vrefs-head{padding:0 0 3px!important;margin:0!important;font-size:10.5px!important;line-height:1.5!important}
#storyCanvasMask .sc-vrefs-row{
  grid-template-rows:repeat(2,40px)!important;grid-auto-flow:column!important;grid-auto-columns:108px!important;
  gap:5px!important;padding:0 1px 2px!important;overflow-x:auto!important;overflow-y:hidden!important;align-items:stretch!important}
#storyCanvasMask .sc-vref-card{
  display:flex!important;align-items:center!important;gap:5px!important;height:40px!important;
  padding:3px 14px 3px 3px!important;border-radius:8px!important;overflow:hidden!important;position:relative!important}
#storyCanvasMask .sc-vref-thumb{width:34px!important;height:34px!important;flex:0 0 34px!important;border-radius:6px!important;overflow:hidden!important;margin:0!important}
#storyCanvasMask .sc-vref-thumb img,#storyCanvasMask .sc-vref-thumb video{
  width:34px!important;height:34px!important;aspect-ratio:auto!important;object-fit:cover!important;border-radius:6px!important}
#storyCanvasMask .sc-vref-card b{font-size:10.5px!important;line-height:1.25!important;max-width:52px!important;
  overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}
#storyCanvasMask .sc-vref-card small{display:none!important}     /* "图片N / 未 @" 小字隐藏，靠 @ 与角标表达 */
#storyCanvasMask .sc-vref-x{top:2px!important;right:2px!important;width:12px!important;height:12px!important;font-size:10px!important;line-height:12px!important}
#storyCanvasMask .sc-vref-audio{height:40px!important;padding:3px 14px 3px 6px!important;display:flex!important;align-items:center!important;font-size:10.5px!important;border-radius:8px!important;position:relative!important}
/* 节点里的视频预览窗略降高度（原 96–250px → 84–190px），把空间让给控制台 */
.sc-sp-r .sc-vjframe{height:clamp(76px,10.5vh,168px) !important}   /* 【N353】再让约 20px 给控制台 */
.sc-node .sc-vj,.sc-vjbox,.sc-vjbody,.sc-vjwrap{max-height:calc(100vh - 210px) !important}   /* N-242→-210 更宽松 */

/* ═══【N352b·用户要求】① 生成/下载按钮放在"积分行"里（不再单独占一行）② 继续压行距，整块一屏可见 ═══ */
#storyCanvasMask .sc-vc-sum{display:flex!important;flex-wrap:wrap!important;align-items:center!important;gap:8px!important}
/* 【关键】积分文字必须用 flex-basis:0（flex:1 1 0）：
   用 auto 时它的"假设宽度"=整句最大宽度 → 先把第一行占满，按钮被挤到第二行（实测 goTop 比 costTop 低 38px）；
   改成 0 后两者先排在同一行，积分文字再按剩余宽度换行显示 —— 这才是"按钮和积分同一行"。 */
#storyCanvasMask .sc-vc-sum .sc-vc-cost{flex:1 1 0!important;min-width:0!important;margin:0!important}
#storyCanvasMask .sc-vc-sum .sc-vc-go{flex:0 0 auto!important;margin-left:auto!important;display:inline-flex!important;align-items:center!important}
#storyCanvasMask .sc-vc-sum .sc-vc-note{flex:1 1 100%!important;order:9!important;margin-top:1px!important}
/* 积分行内的按钮：取消 sticky/最小高度/上边框（原为独立底栏样式），压到 26px 高。
   ⚠ 必须带 #storyCanvasMask 前缀：文件后面还有 `.sc-node [data-vgow]{min-height:48px;border-top:…}`，
     同优先级时"后写的赢"，会把按钮又撑回 48px 并加上分隔线。 */
#storyCanvasMask .sc-vc-sum [data-vgow]{
  position:static!important;bottom:auto!important;top:auto!important;min-height:0!important;height:auto!important;
  border-top:0!important;margin:0!important;padding:0!important;display:inline-flex!important;align-items:center!important;gap:6px!important;z-index:auto!important}
#storyCanvasMask .sc-vc-sum [data-vgow] .sc-sbtn,
#storyCanvasMask .sc-vc-sum [data-vgow] .sc-sbtn.sc-go{
  position:static!important;bottom:auto!important;flex:0 0 auto!important;min-width:0!important;
  min-height:26px!important;height:26px!important;padding:0 12px!important;font-size:11.5px!important;border-radius:8px!important}
/* 行距继续收紧（用户："继续缩减行距"）：行间距 8→5、行块下边距 2→0、说明文字行高 1.55→1.35 */
#storyCanvasMask .sc-vc-row,#storyCanvasMask .sc-vc-row2{row-gap:5px!important;column-gap:8px!important;margin-bottom:0!important}
#storyCanvasMask .sc-vc-g{margin-bottom:2px!important}
#storyCanvasMask .sc-vc-sum,#storyCanvasMask .sc-vc-cost,#storyCanvasMask .sc-vc-note,#storyCanvasMask .sc-vc-warn{line-height:1.35!important}
#storyCanvasMask .sc-vc-row.sc-prbase{gap:5px!important;margin-bottom:1px!important}
#storyCanvasMask .sc-vc-row.sc-prbase .sc-vre{height:24px!important;padding:0 9px!important;font-size:11px!important;border-radius:7px!important}
#storyCanvasMask .sc-vc-row .sc-vre{height:26px!important;padding:0 10px!important}
#storyCanvasMask .sc-vchip{height:24px!important;padding:0 9px!important;font-size:11px!important}
#storyCanvasMask .sc-vc-chips{gap:4px!important}
#storyCanvasMask .sc-shot-ft{min-height:30px!important;padding:0 12px 6px!important;align-items:center!important;border-top:0!important}
#storyCanvasMask .sc-shot-ft .sc-sbtn{height:26px!important;min-width:62px!important}

/* ═══【N353】控制台重设计：3 行紧凑布局 + 新锁语义（面板不再整体失活） ═══ */
#storyCanvasMask .sc-vc-row{display:flex!important;align-items:center!important;gap:6px!important;margin:0 0 3px!important;row-gap:3px!important}
#storyCanvasMask .sc-vc-l{flex:0 0 auto!important;font-size:11px!important;color:#8098b0!important;letter-spacing:.02em}
#storyCanvasMask .sc-vc-r2{gap:5px!important}
#storyCanvasMask .sc-vc-r2 .sc-vc-l{margin-left:2px!important}
#storyCanvasMask .sc-vmini{flex:0 0 auto!important;height:26px!important;padding:0 6px!important;border-radius:8px!important;font-size:11.5px!important;
  background:rgba(8,14,12,.72)!important;border:1px solid rgba(154,255,209,.22)!important;color:#dff6ea!important;cursor:pointer}
#storyCanvasMask .sc-vmini:hover{border-color:rgba(154,255,209,.55)!important}
#storyCanvasMask .sc-vmini:focus{outline:none!important;border-color:rgba(154,255,209,.75)!important}
#storyCanvasMask .sc-vc-r1{flex-wrap:nowrap!important}   /* 模型行绝不换行（换行＝面板变两倍高） */
#storyCanvasMask .sc-vc-r1 .sc-vsel{flex:1 1 0!important;min-width:52px!important;height:28px!important;font-size:12px!important;text-overflow:ellipsis}
#storyCanvasMask .sc-vc-r1 .sc-vre,#storyCanvasMask .sc-vc-r1 .sc-h3opt{flex:0 0 auto!important;height:26px!important;padding:0 9px!important;font-size:11.5px!important;white-space:nowrap}
#storyCanvasMask .sc-vc-sum{display:flex!important;flex-wrap:wrap!important;align-items:center!important;gap:6px!important}
#storyCanvasMask .sc-vc-sum .sc-vc-cost{flex:1 1 0!important;min-width:0!important;font-size:12px!important;line-height:1.35!important}
#storyCanvasMask .sc-vc-sum .sc-vrestore{flex:0 0 auto!important;height:26px!important;padding:0 10px!important;font-size:11.5px!important}
#storyCanvasMask .sc-vc-sum .sc-vc-note{flex:1 1 100%!important;order:9!important;font-size:10.5px!important;color:#7d94ad!important;line-height:1.3!important;margin-top:1px!important}
/* 锁语义：面板只变灰，**不阻断点击**（配置类控件必须一直可用） */
#storyCanvasMask .sc-shot.is-busy,#storyCanvasMask [data-vbusy].is-busy{pointer-events:auto!important}
#storyCanvasMask [data-vbusy].is-busy *{pointer-events:auto!important}
#storyCanvasMask .sc-vc.is-busy{opacity:.66!important;filter:grayscale(.2)!important}

/* ═══【N357】"坚决不能上下拉动"：把工作台面板的高度放开 + 让各块更矮，一屏装下全部参数与功能 ═══
   根因：`#scDetail{max-height:52%}` —— 面板最高只有视口的 52%（900px 屏 ≈ 468px），
   而"视频框 + 参考素材 + 控制台 + AI 修改"需要 550~620px → 必然出现内部滚动条。 */
#scDetail{max-height:min(92%,980px)!important}
/* 【N358·用户要求】右栏按比例分配：**参考素材+视频预览** 与 **AI 修改** 两块都拿到更多面积，
   其余（已完成行/历史版本/控制台）固定高 —— 合计刚好一页装下，仍然不需要上下拉动。
     占比：视频+参考 46% ｜ AI 修改 30% ｜ 控制台/历史/状态行 24%（固定） */
#scDetailBody .sc-sp-r{display:flex!important;flex-direction:column!important;gap:7px!important;overflow:hidden!important;height:100%!important}
#scDetailBody .sc-sp-r>*{flex:0 0 auto!important;min-height:0!important}
/* ══【N360·用户要求】"这两块刚好最大化、都不用上下拉杆" ══
   上一版给两块加了 max-height(46%/38%)：面板一高它们就**长不满** → 中间留一大片黑（用户截图）。
   现在：**取消所有 max-height**，只有这两块可伸缩（flex-grow:1），其余块固定高 →
   剩余空间被两块**均分吃掉**，永远刚好填满：面板矮则两块一起缩（地板 150/140），面板高则一起长。 */
#scDetailBody .sc-sp-r>.sc-sp-box{flex:0 0 auto!important}                                   /* 其余块：内容高、不伸缩 */
#scDetailBody .sc-sp-r>.sc-sp-box.b-go{flex:1 1 34%!important;min-height:150px!important;overflow:hidden!important}
#scDetailBody .sc-sp-r>.sc-sp-box.sc-aibox{flex:1 1 28%!important;min-height:140px!important;overflow:auto!important}
/* 视频框：跟着所在块一起变高（不再写死高度、也不再被 max-height 卡住） */
.sc-sp-r .sc-vjframe{height:100%!important;min-height:126px!important;max-height:none!important;aspect-ratio:auto!important}
#scDetailBody .sc-sp-r>.sc-sp-box.b-go .sc-vj{flex:1 1 auto!important;min-height:124px!important}
/* 参考素材：两排缩略图跟着块高走（不再被 92px 卡死） */
#storyCanvasMask .sc-vrefs{max-height:none!important;overflow:hidden!important;flex:1 1 auto!important}
#storyCanvasMask .sc-vrefs-row{grid-template-rows:repeat(2,minmax(38px,1fr))!important}
#storyCanvasMask .sc-vjhist-row{max-height:52px!important;overflow:hidden!important}
#storyCanvasMask .sc-vjhist-th{width:92px!important;height:52px!important}
#scDetailBody .sc-sp-r>.sc-sp-box:not(.b-go){min-height:84px!important}
.sc-sp-r .sc-vjframe{height:clamp(64px,8.5vh,132px) !important}
#storyCanvasMask .sc-vc{padding:6px 10px 4px!important}
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-aisel{min-height:34px!important} … */
#storyCanvasMask .sc-sapta,[class*=sapta]{min-height:52px!important}

/* ═══【N359·用户要求】视频右上「最大化」+ 右下「下载」：**精致、极细、灵巧、瞩目**（原来 30px 方块太笨重）═══ */
.sc-vjframe .sc-vjmax,.sc-vjframe .sc-vjdl{width:22px!important;height:22px!important;border-radius:7px!important;padding:0!important;
  background:rgba(6,16,12,.42)!important;backdrop-filter:blur(8px);box-shadow:none!important;opacity:.72!important;
  transition:opacity .16s,background .16s,border-color .16s,color .16s,box-shadow .16s,transform .16s}
.sc-vjframe .sc-vjmax{top:6px!important;right:6px!important;border:1px solid rgba(200,235,220,.28)!important;color:#cfe8dc!important}
.sc-vjframe .sc-vjdl{bottom:6px!important;right:6px!important;border:1px solid rgba(154,255,209,.42)!important;color:#bdf3d8!important}
.sc-vjframe .sc-vjmax svg,.sc-vjframe .sc-vjdl svg{width:12px!important;height:12px!important;stroke-width:1.6!important}
.sc-vjframe:hover .sc-vjmax,.sc-vjframe:hover .sc-vjdl{opacity:.96!important}
.sc-vjframe .sc-vjmax:hover{color:#eafff5!important;border-color:rgba(200,235,220,.75)!important;background:rgba(20,40,32,.7)!important}
.sc-vjframe .sc-vjdl:hover{color:#04241b!important;background:linear-gradient(135deg,#a6ffdd,#46d3a4)!important;border-color:rgba(154,255,209,.95)!important;
  box-shadow:0 0 12px rgba(91,232,185,.55)!important;transform:translateY(-1px)}
.sc-vjframe .sc-vjmax:active,.sc-vjframe .sc-vjdl:active{transform:scale(.95)}
/* 历史版本缩略图：没加载出首帧时不再一片死黑；失效(URL 过期)的标灰写明 */
.sc-vjhist-th{background:#0d1a15!important}
.sc-vjhist-th:after{content:'';position:absolute;inset:0;background:linear-gradient(135deg,rgba(154,255,209,.07),rgba(154,255,209,.02));pointer-events:none;transition:opacity .25s}
.sc-vjhist-th.is-ready:after{opacity:0}
.sc-vjhist-th.is-dead{opacity:.55!important;border-style:dashed!important}
.sc-vjhist-th.is-dead:before{content:'已过期';position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);text-align:center;font-size:9.5px;color:#ffb4b4;z-index:3;text-shadow:0 1px 4px #000}
.sc-vjhist-th.is-dead .sc-vjhist-p{display:none!important}
.sc-vjhist-v{position:relative;z-index:1}

/* ═══【N355】① 视频画面右下角「下载」图标（与右上角「最大化」上下对应）② 取消左右拉杆 ③ 不再横向滚动 ═══ */
.sc-vjframe .sc-vjdl{position:absolute;bottom:8px;right:8px;z-index:7;width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;padding:0;
  border:1px solid rgba(154,255,209,.55);border-radius:9px;background:rgba(14,40,30,.78);color:#c8ffe6;cursor:pointer;opacity:.92;
  backdrop-filter:blur(6px);box-shadow:0 4px 14px rgba(0,0,0,.45);transition:opacity .15s,background .15s,border-color .15s,color .15s,transform .15s}
.sc-vjframe .sc-vjdl svg{width:17px;height:17px;display:block}
.sc-vjframe:hover .sc-vjdl{opacity:1}
.sc-vjframe .sc-vjdl:hover{color:#04170f;background:linear-gradient(135deg,#a6ffdd,#46d3a4);border-color:rgba(154,255,209,.95);transform:translateY(-1px)}
.sc-vjframe .sc-vjdl:active{transform:translateY(0) scale(.96)}
/* 左右拉杆已移除：这里兜底隐藏（老 DOM/缓存里可能还留着） */
#scDetail .sc-rz-w,#scDetail .sc-rz-e{display:none!important}
/* 参考素材条：宁可缩小也不出现"左右拉杆"（横向滚动条）——缩略图已固定 34px，6 张＝3 列、9 张＝5 列，都放得下 */
#storyCanvasMask .sc-vrefs-row{overflow-x:hidden!important;grid-auto-columns:minmax(96px,1fr)!important;max-width:100%!important}
/* 控制台各行的横向溢出也不许出现滚动条 */
#storyCanvasMask .sc-vc-row,#storyCanvasMask .sc-vc-sum{overflow-x:hidden!important;max-width:100%!important}
#storyCanvasMask .sc-vc-row.sc-vc-r2{flex-wrap:nowrap!important}

/* 【v6.4】@素材悬停预览卡 */
.sc-atname{cursor:help;border-bottom:1px dotted rgba(154,255,209,.5)}
.sc-atname:hover{color:#eafff5}
.sc-athover{position:fixed;z-index:99999;display:none;width:210px;padding:6px;border-radius:12px;
  border:1px solid rgba(154,255,209,.35);background:rgba(8,16,13,.96);box-shadow:0 12px 34px rgba(0,0,0,.6);
  pointer-events:none}
.sc-athover img{display:block;width:100%;height:186px;object-fit:cover;border-radius:8px;background:#0a1712}
.sc-athover-cap{margin-top:5px;font-size:11px;color:#bff3d8;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 【v9.0】本机数据清理（内嵌在备份与恢复面板里，随面板一起显示） */
/* 【v9.1】「备份与恢复」面板自适应：里面有 #lcBkFoot（与本机数据清理行）的那个容器，
   改成"高度自适应 + 超出可滚动 + 底部留白"，保证最后一行不再被裁 ✓（用 :has() 精准命中，不依赖 JS 走父级） */
div:has(> #lcBkFoot),div:has(#lcBkFoot),section:has(#lcBkFoot){max-height:82vh !important;height:auto !important;
  overflow-y:auto !important;overflow-x:hidden !important;box-sizing:border-box !important;padding-bottom:34px !important;
  z-index:9999 !important}
/* ═══【v9.5】分镜工作台·视频控制台被遮挡修复（用户反馈：参数/选项被裁、提示行挤在一起）═══
   做法：① 工作台内容可滚动（限高=视口内）② 控制台区块给足内边距与行距 ③ 提示行允许换行不重叠 */
.sc-sp,.sc-sp-l,.sc-sp-r,.sc-sp-box,.sc-sp-box.b-go{overflow-y:auto !important;overflow-x:hidden !important}
.sc-sp,.sc-sp-l{max-height:calc(100vh - 96px) !important}
.sc-sp-box.b-go{padding-bottom:16px !important}
.sc-vc,[data-vc]{min-height:auto !important;line-height:1.55 !important;padding-bottom:8px !important}
.sc-vc-row,.sc-vc-row2{row-gap:8px !important;margin-bottom:2px !important;align-items:flex-start !important}
.sc-vc-g{margin-bottom:4px !important}
.sc-vc-sum,.sc-vc-cost,.sc-vc-note,.sc-vc-warn{line-height:1.55 !important;white-space:normal !important;
  word-break:break-word !important;display:block !important;margin-top:4px !important}
.sc-vc-note b{display:inline !important}
/* ═══【v10.12d】分镜画布·生成视频面板一屏完整可见（用户反馈：红框区按钮/时长看不全，要上下拉动）═══
   手段：① 右栏不再整体滚动（AI 修改卡片自己内部滚）②「生成视频」盒改为可收缩 flex 列——
   预览框与参考图块改用视口相关高度（vh），空间不够自动变小；
   ③ 模型/分辨率/时长/比例/积分/停止按钮 flex:0 0 auto 永不被挤走 —— 全部常驻可视。 */
.sc-sp-r{overflow:hidden !important;gap:8px !important}
.sc-sp-r .sc-sp-box{flex:0 0 auto !important;padding:8px 12px !important}
.sc-sp-r .sc-sp-box.b-go{display:flex !important;flex-direction:column !important;min-height:0 !important;flex:0 1 auto !important}
.sc-sp-r .sc-vj{flex:0 1 auto !important;min-height:0 !important;row-gap:6px !important}
.sc-sp-r .sc-vjframe{height:clamp(96px,16vh,250px) !important}
.sc-sp-r .sc-vrefs{max-height:15vh !important}
.sc-sp-r .sc-vrefs-row{max-height:none !important}
.sc-sp-r .sc-vc{flex:0 0 auto !important;padding-bottom:2px !important}
.sc-sp-r .sc-gow{flex:0 0 auto !important;margin-top:2px !important}
.sc-sp-r .sc-sp-box:not(.b-go){flex:1 1 auto !important;min-height:110px !important;overflow:auto !important}
/* ═══【v10.12f】视频历史版本条 ═══ */
.sc-vjhist{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:8px 0 2px}
.sc-vjhist-l{font-size:10.5px;color:#7ba88f;opacity:.85}
.sc-vjhist-b{appearance:none;border:1px solid rgba(96,165,132,.35);background:rgba(23,42,32,.6);color:#9fd4b4;font-size:10.5px;padding:3px 8px;border-radius:999px;cursor:pointer;line-height:1.4}
.sc-vjhist-b:hover{background:rgba(46,88,66,.7);color:#c9ecd8;border-color:rgba(129,199,163,.6)}
/* ═══【N356】历史版本＝小预览图 + 极小播放按钮（原文字胶囊晦涩易忽略） ═══ */
.sc-vjhist{display:flex;flex-direction:column;gap:4px;margin:7px 0 2px}
.sc-vjhist-l{font-size:10.5px;color:#8fc0a6;opacity:.95;display:flex;align-items:center;gap:5px}
.sc-vjhist-l i{font-style:normal;opacity:.7;font-size:10px}
.sc-vjhist-row{display:flex;gap:6px;flex-wrap:wrap;align-items:flex-start}
.sc-vjhist-th{position:relative;flex:0 0 auto;width:84px;height:47px;padding:0;border:1px solid rgba(96,165,132,.4);border-radius:7px;
  background:#07120e;cursor:pointer;overflow:hidden;transition:border-color .16s,transform .16s,box-shadow .16s}
.sc-vjhist-th:hover{border-color:rgba(154,255,209,.9);transform:translateY(-1px);box-shadow:0 6px 16px -6px rgba(0,0,0,.9)}
.sc-vjhist-v{width:100%;height:100%;object-fit:cover;display:block;background:#000;pointer-events:none}
.sc-vjhist-p{position:absolute;right:3px;bottom:3px;width:13px;height:13px;border-radius:50%;background:rgba(6,20,14,.8);
  border:1px solid rgba(154,255,209,.75);color:#c8ffe6;font-size:7.5px;line-height:12px;text-align:center;font-style:normal;pointer-events:none}
.sc-vjhist-th:hover .sc-vjhist-p{background:linear-gradient(135deg,#a6ffdd,#46d3a4);color:#04241b;border-color:rgba(154,255,209,.95)}
.sc-vjhist-n{position:absolute;left:3px;top:2px;padding:0 4px;border-radius:5px;background:rgba(6,20,14,.72);border:1px solid rgba(154,255,209,.35);
  color:#bfe8cc;font-size:9px;line-height:13px;font-weight:400;pointer-events:none}

/* 【v10.12j】资产面板·视频历史库 */
.sc-vjhis-row{display:flex;flex-wrap:wrap;gap:5px;margin:-2px 0 6px 10px}
.sc-vjhis-b{appearance:none;border:1px solid rgba(96,165,132,.35);background:rgba(23,42,32,.6);color:#9fd4b4;font-size:10.5px;padding:2px 8px;border-radius:999px;cursor:pointer;line-height:1.5}
.sc-vjhis-b:hover{background:rgba(46,88,66,.7);color:#c9ecd8;border-color:rgba(129,199,163,.6)}
.sc-vjhis-b.cur{border-color:rgba(129,199,163,.6);color:#d8ffe9;background:rgba(30,60,45,.7)}
/* 主按钮行吸底常驻，任何滚动位置都能点到 */
.sc-vc-btns,.sc-vc-go,[data-vgow]{position:sticky !important;bottom:8px !important;z-index:6 !important;
  background:rgba(10,20,14,.85) !important;padding:6px 0 !important;border-radius:8px !important}
/* ═══【v9.8】本机数据列表：① 面板不贴底、不压页面 ② 明确"可以下拉" ═══ */
div:has(> #lcBkFoot),div:has(#lcBkFoot),section:has(#lcBkFoot){bottom:30px !important;margin-bottom:0 !important;
  box-shadow:0 22px 60px rgba(0,0,0,.65) !important}
.lc-sb{max-height:52vh !important;overflow-y:auto !important;overscroll-behavior:contain !important;
  padding-bottom:10px !important;scrollbar-width:thin !important;
  scrollbar-color:rgba(154,255,209,.55) rgba(255,255,255,.06) !important;
  border-radius:0 0 14px 14px !important}
.lc-sb::-webkit-scrollbar{width:9px !important}
.lc-sb::-webkit-scrollbar-track{background:rgba(255,255,255,.05) !important;border-radius:8px !important}
.lc-sb::-webkit-scrollbar-thumb{background:rgba(154,255,209,.5) !important;border-radius:8px !important}
.lc-sb::-webkit-scrollbar-thumb:hover{background:rgba(154,255,209,.75) !important}
.lc-sb .tip{position:sticky !important;top:0 !important;background:rgba(8,18,13,.98) !important;z-index:2 !important}
.lc-sb .tip:after{content:" · 列表可上下滚动查看全部";color:#7fa393}
.lc-sb .row:last-child{margin-bottom:8px !important}
/* ═══【v10.0】修"上下滚动不灵敏"：原来有两层嵌套滚动区（面板 + 列表各一个），
   且列表上加了 overscroll-behavior:contain 把滚轮事件吞掉 → 手感发滞 ✗
   现在：只保留【面板一层】滚动，列表改为自然高度、不拦截滚轮 ✓ */
.lc-sb{max-height:none !important;overflow:visible !important;overscroll-behavior:auto !important;padding-bottom:12px !important}
div:has(> #lcBkFoot),div:has(#lcBkFoot),section:has(#lcBkFoot){
  overflow-y:auto !important;overscroll-behavior:auto !important;scroll-behavior:smooth !important;
  -webkit-overflow-scrolling:touch !important;max-height:78vh !important}
/* 列表里的提示行不再吸顶（吸顶+滚动会加重滞涩感） */
.lc-sb .tip{position:static !important}
/* 【v9.3】新增的两行要在最上层且可点：用户反馈「下面被遮挡、点了没反应」 */
.lc-sb{position:relative !important;z-index:10000 !important;pointer-events:auto !important}
.lc-sb .r,.lc-sb .row{position:relative !important;z-index:10000 !important}

.lc-sb{margin-top:2px}
.lc-sb .r{display:flex;align-items:center;gap:9px;padding:11px 14px;border-top:1px solid rgba(154,255,209,.12);cursor:pointer;color:#dff7ec;font-size:12.5px}
.lc-sb .r:hover{background:rgba(154,255,209,.08)}
.lc-sb .r .i{width:16px;text-align:center}
.lc-sb .r .t{margin-left:auto;color:#6d8577;font-size:11.5px}
.lc-sb .tip{padding:8px 14px 2px;color:#7fa393;font-size:11px;line-height:1.5}
.lc-sb .row{display:flex;align-items:center;gap:8px;padding:8px 14px;border-top:1px dashed rgba(154,255,209,.10);font-size:12px;color:#dff7ec}
.lc-sb .row .nm{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lc-sb .row .sz{color:#8fb4a4;font-family:ui-monospace,Menlo,monospace}
.lc-sb .row .dl{padding:5px 10px;border-radius:8px;border:1px solid rgba(154,255,209,.35);background:rgba(20,42,32,.8);color:#dff7ec;font:11.5px/1 inherit;cursor:pointer;margin-right:6px}
.lc-sb .row .dl:hover{background:rgba(40,80,60,.95)}
.lc-sb .row .del{padding:5px 10px;border-radius:8px;border:1px solid rgba(255,140,140,.45);background:rgba(60,20,20,.6);color:#ffd0d0;font:11.5px/1 inherit;cursor:pointer}
.lc-sb .row .del:hover{background:rgba(90,30,30,.8)}

/* ═══【v10.12l】v7 视觉基线：高透、沉稳、极细框线、绿色只作状态点缀。保留原版编辑器与 AI 修改逻辑。═══ */
:root{--lc-v7-bg:#0b0d0c;--lc-v7-line:rgba(235,243,238,.16);--lc-v7-soft:rgba(235,243,238,.08);--lc-v7-green:#8ee8bd;--lc-v7-muted:rgba(220,231,224,.58)}
#scDetail{background:rgba(13,16,14,.78)!important;border:1px solid rgba(235,243,238,.22)!important;box-shadow:0 22px 70px rgba(0,0,0,.46)!important;backdrop-filter:blur(22px)!important;-webkit-backdrop-filter:blur(22px)!important}
#scDetailGrip{background:rgba(20,24,21,.56)!important;border-bottom:1px solid var(--lc-v7-line)!important}
#scDetailBody{background:transparent!important}
#scDetailBody .sc-sp{display:grid!important;grid-template-columns:minmax(0,1.18fr) minmax(360px,.82fr)!important;gap:12px!important;height:100%!important;min-height:0!important;padding:10px!important;background:transparent!important}
#scDetailBody .sc-sp-l,#scDetailBody .sc-sp-r{min-width:0!important;min-height:0!important;background:transparent!important}
#scDetailBody .sc-sp-l{display:flex!important;flex-direction:column!important;gap:7px!important}
#scDetailBody .sc-sp-l .sc-sp-ed{flex:1 1 auto!important;min-height:0!important;background:rgba(4,6,5,.62)!important;border:1px solid var(--lc-v7-line)!important;border-radius:10px!important;line-height:1.5!important}
#scDetailBody .sc-sp-r{display:grid!important;grid-template-rows:minmax(0,1fr) auto!important;gap:8px!important;overflow:hidden!important;padding:0!important}
#scDetailBody .sc-sp-r>.sc-sp-box{background:rgba(23,28,24,.52)!important;border:1px solid var(--lc-v7-line)!important;border-radius:10px!important;box-shadow:none!important}
#scDetailBody .sc-sp-r>.sc-sp-box.b-go{min-height:0!important;overflow:hidden!important;display:flex!important;flex-direction:column!important}
#scDetailBody .sc-sp-r>.sc-sp-box.b-go .sc-vj{min-height:0!important;flex:1 1 auto!important}
#scDetailBody .sc-sp-r>.sc-sp-box:not(.b-go){flex:0 0 auto!important}
#scDetailBody .sc-sp-hd{color:rgba(244,248,245,.88)!important;border-color:var(--lc-v7-line)!important}
#scDetailBody .sc-sp-st,#scDetailBody .sc-vhint,#scDetailBody .sc-vjcap{color:var(--lc-v7-muted)!important}
#scDetailBody .sc-sp-in{background:rgba(8,12,10,.58)!important;border:1px solid var(--lc-v7-line)!important;color:rgba(244,248,245,.9)!important;border-radius:8px!important}
#scDetailBody .sc-aisel,#scDetailBody .sc-sp-tip,#scDetailBody .sc-sp-msg{color:var(--lc-v7-muted)!important}
#scDetailBody .sc-btn,#scDetailBody .sc-sbtn{background:rgba(30,35,31,.5)!important;border:1px solid var(--lc-v7-line)!important;color:rgba(244,248,245,.86)!important;border-radius:8px!important;box-shadow:none!important}
#scDetailBody .sc-btn.sc-go,#scDetailBody .sc-sbtn.sc-go{background:rgba(71,145,106,.16)!important;border-color:rgba(142,232,189,.62)!important;color:var(--lc-v7-green)!important}
#scDetailBody .sc-vc,#scDetailBody .sc-vjframe,#scDetailBody .sc-vrefs{background:rgba(19,24,21,.44)!important;border-color:var(--lc-v7-line)!important}
#scDetailBody .sc-vsel,#scDetailBody select{background:rgba(8,12,10,.64)!important;border:1px solid var(--lc-v7-line)!important;color:rgba(244,248,245,.88)!important}
#scDetailBody .sc-vchip{background:rgba(30,35,31,.44)!important;border:1px solid var(--lc-v7-line)!important;color:rgba(232,240,234,.72)!important}
#scDetailBody .sc-vchip.on{background:rgba(71,145,106,.2)!important;border-color:rgba(142,232,189,.72)!important;color:var(--lc-v7-green)!important}
#scDetailBody .sc-vcost,#scDetailBody .sc-vjm.ok{color:var(--lc-v7-green)!important}
#scDetailBody .sc-vref-card,#scDetailBody .sc-vref-audio{background:rgba(30,35,31,.4)!important;border-color:var(--lc-v7-line)!important}
#scDetailBody .sc-vjhist-b{background:rgba(30,35,31,.42)!important;border:1px solid var(--lc-v7-line)!important;color:rgba(232,240,234,.78)!important}
@media(max-width:980px){#scDetailBody .sc-sp{grid-template-columns:1fr!important;overflow:auto!important}#scDetailBody .sc-sp-r{overflow:visible!important}}

#cropBtn,#downloadBtn,#finalizeBtn{display:none!important}   /* 【N61】原「定稿/已定稿」按钮也隐藏：与工具行「✓ 定稿」重复 */   /* 【N59】原按钮行隐藏（保留元素：工具行仍以编程方式点击它们） */
.material-canvas-wrap .canvas-tools-row:first-child{display:none!important}
.mat-toolbar{display:flex;gap:8px;flex-wrap:nowrap;align-items:center;margin:0 0 8px}
.mat-toolbar button{flex:1 1 0;min-width:0;height:32px;padding:0 10px;border-radius:9px;border:1px solid rgba(154,255,209,.28);background:rgba(10,20,16,.65);color:#dff7ec;font-size:12.5px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mat-toolbar button:hover{border-color:rgba(154,255,209,.6);background:rgba(20,40,32,.75)}
.mat-toolbar button.on{border-color:rgba(255,214,138,.8);background:rgba(74,54,12,.6);color:#ffe6ae}   /* 【N141】参考图已挂载的显式状态 */

#storyCanvasMask{font-family:inherit}
#storyCanvasMask .sc-bar{display:flex;align-items:center;gap:10px;padding:11px 18px;border-bottom:1px solid rgba(154,255,209,.15);background:rgba(6,12,10,.9)}
#storyCanvasMask .sc-bar b{color:#eafff3;font-size:15px;letter-spacing:.05em}
#scTitle{color:#8db4a0;font-size:12px}
.sc-btn{background:rgba(154,255,209,.08);border:1px solid rgba(154,255,209,.28);color:#bff5da;border-radius:8px;padding:6px 12px;font-size:12px;cursor:pointer;transition:.15s}
.sc-btn:hover{background:rgba(154,255,209,.18);border-color:rgba(154,255,209,.5)}
.sc-btn.on{background:#9affd1;color:#05231a;border-color:#9affd1;font-weight:700}
#scViewport{flex:1;position:relative;overflow:hidden;cursor:default;background:radial-gradient(circle at 30% 20%,#0d1a14,#05080d 70%)}
#scViewport.dragging{cursor:grabbing}
#scViewport.spacing{cursor:grab}
#scWorld{position:absolute;left:0;top:0;width:0;height:0;transform-origin:0 0}
#scWorld.sc-anim{transition:transform .3s cubic-bezier(.22,.61,.36,1)}
#scWires{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
#scWires .sc-wire,#scWires .sc-hit{pointer-events:stroke;cursor:pointer}
#scWires .sc-wdel{pointer-events:all;cursor:pointer}
#scWiresTop{position:absolute;left:0;top:0;overflow:visible;pointer-events:none;z-index:9}
#scWiresTop .sc-wdel{pointer-events:all;cursor:pointer}
#scWiresTop .sc-wdel:hover circle{fill:#3a1024}
.sc-legend{position:absolute;left:14px;bottom:12px;display:flex;gap:13px;padding:7px 12px;border:1px solid rgba(154,255,209,.18);border-radius:10px;background:rgba(5,10,8,.78);font-size:11px;color:#8db4a0}

/* 【N332】底部缩放控件（缩小 / 读数 / 放大 / 回到100%） */
.sc-zoomctl{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);display:flex;align-items:center;gap:6px;padding:5px 7px;border-radius:12px;background:rgba(6,12,10,.82);border:1px solid rgba(154,255,209,.22);backdrop-filter:blur(6px);z-index:12}
.sc-zoomctl .sc-zbtn{min-width:30px;height:26px;padding:0 8px;border-radius:8px;border:1px solid rgba(154,255,209,.28);background:rgba(10,18,14,.9);color:#dff7ea;font-size:13px;font-weight:700;cursor:pointer;line-height:1}
.sc-zoomctl .sc-zbtn:hover{border-color:rgba(154,255,209,.65);color:#eafff3;background:rgba(16,28,22,.95)}
.sc-zoomctl .sc-zbtn-t{font-size:11px;min-width:46px;font-weight:600}
.sc-zoomctl .sc-zpct{min-width:52px;text-align:center;color:#9affd1;font-size:12px;font-weight:700;letter-spacing:.3px}
.sc-legend i{display:inline-block;width:16px;height:3px;border-radius:2px;margin-right:5px;vertical-align:middle}
.sc-foot{padding:8px 18px;color:#6d8577;font-size:11px;border-top:1px solid rgba(154,255,209,.1)}

.sc-node{position:absolute;box-sizing:border-box;border-radius:12px;border:1px solid rgba(154,255,209,.22);background:linear-gradient(180deg,rgba(16,28,24,.97),rgba(9,16,14,.97));color:#dff7ec;overflow:hidden;cursor:grab;user-select:none;box-shadow:0 6px 20px rgba(0,0,0,.38);transition:left .16s cubic-bezier(.22,.61,.36,1),top .16s cubic-bezier(.22,.61,.36,1),border-color .15s,box-shadow .15s,opacity .18s;will-change:left,top}
.sc-node:hover{border-color:rgba(154,255,209,.55)}
.sc-node.sc-sel{border-color:#9affd1;box-shadow:0 0 0 2px rgba(154,255,209,.25),0 8px 26px rgba(0,0,0,.55)}
.sc-node.sc-dim{opacity:.16}
.sc-node.sc-tgt{border-color:#9affd1;box-shadow:0 0 0 3px rgba(154,255,209,.35)}
#scWorld.sc-dragging .sc-node{transition:none}
#scWorld.sc-linking .sc-node{cursor:crosshair}
.sc-capwrap{position:absolute;pointer-events:none;user-select:none}
.sc-cap{font-size:11px;letter-spacing:.09em;color:#7e9a8c;padding:2px 3px}
.sc-cap.k-char{color:#7fe0a8}.sc-cap.k-env{color:#7fb6ff}.sc-cap.k-prop{color:#ffd68a}.sc-cap.k-voice{color:#ff9ecb}.sc-cap.k-shot{color:#9affd1}

.sc-plus{position:absolute;right:-14px;top:58%;margin-top:-13px;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:17px;font-weight:800;line-height:1;color:#05231a;background:#9affd1;border:2px solid #08120f;cursor:crosshair;opacity:0;transition:opacity .15s,transform .12s;z-index:4}
.sc-node:hover .sc-plus{opacity:.95}
.sc-plus:hover{transform:scale(1.2)}

.sc-asset .sc-thumb{width:100%;height:104px;object-fit:cover;display:block;background:#0a1310}
.sc-asset .sc-ph{width:100%;height:104px;display:flex;align-items:center;justify-content:center;font-size:11px;color:#5f7a6d;background:repeating-linear-gradient(45deg,#0b1512,#0b1512 8px,#0e1a16 8px,#0e1a16 16px)}
.sc-asset .sc-ph.sc-up{cursor:pointer;color:#9affd1}
.sc-asset .sc-ph.sc-up:hover{background:rgba(154,255,209,.1)}
.sc-asset .sc-lab{padding:7px 10px 4px;font-size:12px;font-weight:700;color:#eafff3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sc-asset .sc-sub{padding:0 10px 8px;font-size:10px;color:#7e9a8c;display:flex;align-items:center;gap:6px}
.sc-vtag{display:inline-block;padding:1px 6px;border-radius:6px;font-size:10px;background:rgba(255,158,203,.15);color:#ff9ecb;border:1px solid rgba(255,158,203,.35)}
.sc-mtag{display:inline-block;padding:1px 6px;border-radius:6px;font-size:10px;background:rgba(198,168,255,.15);color:#c6a8ff;border:1px solid rgba(198,168,255,.35)}
.sc-voice .sc-mini{display:flex;align-items:center;gap:8px;padding:10px 10px 4px}
.sc-voice .sc-mini b{font-size:12px;color:#eafff3}
.sc-voice .sc-out{padding:0 10px 10px;font-size:10px;color:#8db4a0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.sc-shot .sc-shot-hd{display:flex;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid rgba(154,255,209,.14);background:rgba(154,255,209,.05)}
.sc-wk{font-size:13px;font-weight:800;color:#9affd1;letter-spacing:.04em}
.sc-badge{margin-left:auto;font-size:10px;padding:2px 8px;border-radius:7px;background:rgba(127,224,168,.14);color:#7fe0a8;border:1px solid rgba(127,224,168,.3)}
.sc-badge.warn{background:rgba(255,176,90,.14);color:#ffb05a;border-color:rgba(255,176,90,.35)}
.sc-shot-ports{padding:6px 12px 2px}
.sc-port-row{display:flex;align-items:center;gap:7px;height:22px;line-height:22px;box-sizing:border-box;font-size:11px}
.sc-dot{width:9px;height:9px;border-radius:50%;background:#7fe0a8;box-shadow:0 0 0 3px rgba(127,224,168,.15);flex:none;margin-left:-17px}
.sc-dot.d-env{background:#7fb6ff;box-shadow:0 0 0 3px rgba(127,182,255,.15)}
.sc-dot.d-prop{background:#ffd68a;box-shadow:0 0 0 3px rgba(255,214,138,.15)}
.sc-dot.d-voice{background:#ff9ecb;box-shadow:0 0 0 3px rgba(255,158,203,.15)}
.sc-dot.d-img{background:#c6a8ff;box-shadow:0 0 0 3px rgba(198,168,255,.15)}
.sc-dot.off{background:#3a4a43;box-shadow:none}
.sc-pk{color:#7e9a8c;flex:none;width:34px}
.sc-pv{color:#dff7ec;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sc-pv.empty{color:#55665e}
.sc-inputs{margin:2px 12px 0;font-size:10.5px;color:#9affd1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sc-shot-pr{margin:6px 12px 8px;padding:9px 10px;border-radius:9px;background:rgba(4,10,8,.75);border:1px solid rgba(154,255,209,.12);font-size:11.5px;line-height:1.75;color:#cfe9de;max-height:132px;overflow:auto;white-space:pre-wrap;word-break:break-word}
.sc-shot-pr::-webkit-scrollbar{width:6px}.sc-shot-pr::-webkit-scrollbar-thumb{background:rgba(154,255,209,.2);border-radius:3px}
.sc-edit{outline:none;min-height:66px;cursor:text;user-select:text}
.sc-edit:focus{border-color:rgba(154,255,209,.45)}
.sc-edit:empty:before{content:attr(data-ph);color:#55665e}
.sc-vb{margin-top:7px;padding-top:7px;border-top:1px dashed rgba(255,158,203,.28);color:#f0b9d6}
.sc-chip{display:inline-block;padding:0 6px;margin:0 1px;border-radius:6px;font-weight:700;cursor:pointer;border:1px solid transparent}
.sc-chip.c-char{background:rgba(127,224,168,.14);color:#7fe0a8;border-color:rgba(127,224,168,.35)}
.sc-chip.c-env{background:rgba(127,182,255,.14);color:#7fb6ff;border-color:rgba(127,182,255,.35)}
.sc-chip.c-prop{background:rgba(255,214,138,.14);color:#ffd68a;border-color:rgba(255,214,138,.35)}
.sc-chip.c-voice{background:rgba(255,158,203,.14);color:#ff9ecb;border-color:rgba(255,158,203,.35)}
.sc-chip:hover{filter:brightness(1.35)}
.sc-shot-ft{display:flex;flex-wrap:wrap;gap:6px;padding:0 12px 10px;align-items:center}
/* 【N264】分镜卡片视频区：固定框（未生成=黑屏占位）+ contain 全貌显示，不再裁切 */
/* ═══【v6.2】分镜节点视频面板：素材区限高 + 面板可滚动，正文与选项永远可见 ═══
   根因：连入参考素材后，素材网格（3 列方形缩略图）会把"脚本正文 + 模型/分辨率/时长/比例/积分 + 按钮"挤出可视区。 */
.sc-vrefs,.sc-vrefs-row{max-height:168px !important;overflow-y:auto !important;overflow-x:hidden !important}
.sc-vrefs img,.sc-vrefs-row img,.sc-vrefs video,.sc-vrefs-row video{
  aspect-ratio:1 / 1 !important;object-fit:cover !important;width:100% !important;height:auto !important;border-radius:8px !important}
/* 节点里的视频面板整体可滚动（正文/选项在下也能滚到） */
.sc-node .sc-vj,.sc-vjbox,.sc-vjbody,.sc-vjwrap,.sc-node .sc-vjframe+.sc-vrefs~*{
  overflow-y:auto !important;overflow-x:hidden !important}
.sc-node .sc-vj,.sc-vjbox,.sc-vjbody,.sc-vjwrap{max-height:calc(100vh - 260px) !important}
/* 正文区不低于预览窗高度（用户要求：文章面积至少与视频预览窗一致） */
.sc-vjtxt,.sc-vjtxt2,.sc-text,.sc-node .sc-sp-txt,.sc-node textarea{min-height:186px !important}
.sc-node textarea{min-height:186px !important;max-height:none !important}
/* 生成/停止按钮吸底常驻（任何状态可点） */
.sc-node .sc-sbtn.sc-go,.sc-sp-box.b-go .sc-sbtn.sc-go{position:sticky !important;bottom:8px !important;z-index:7 !important;
  box-shadow:0 -8px 20px rgba(4,12,9,.6) !important}
/* ═══【v6.9】生成中/完成后，控制台（模型·分辨率·时长·比例·积分）与主按钮必须一直可见 ═══
   用户实测：生成中只剩「模型」一行，分辨率/时长/比例/积分/按钮全消失 ✗
   这里强制这些区块在所有状态下保持显示（不隐藏、不塌陷、不透明为0）。 */
.sc-vc,.sc-vc2,.sc-gow,.sc-shot-ft,.sc-sp-row,.sc-sp-box>div[data-vc],
[data-vc],[data-vgow]{display:block !important;visibility:visible !important;opacity:1 !important;
  max-height:none !important;overflow:visible !important;position:relative !important;z-index:2 !important}
[data-vgow]{display:flex !important;align-items:center !important;gap:8px !important}
/* 生成中：选项置灰但仍可读（点不动，但看得见） */
.sc-node.is-run [data-vc] input,.sc-node.is-run [data-vc] select{opacity:.85 !important}
/* 主按钮吸底常驻 */
.sc-node [data-vgow] .sc-sbtn.sc-go{position:sticky !important;bottom:8px !important;z-index:7 !important}
/* ═══【v7.7】分镜卡片放宽：三种状态（生成前/生成中/生成后）都能看到完整按钮 ═══
   手段：① 卡片高度自适应（不裁切）② 控制台与按钮行给足最小高度 ③ 底部留白 */
.sc-node{height:auto !important;max-height:none !important;overflow:visible !important}
.sc-node .sc-vj,.sc-node .sc-vjbox,.sc-node .sc-vjbody{height:auto !important;max-height:none !important;overflow:visible !important}
.sc-node [data-vc],.sc-node .sc-vc{min-height:124px !important;padding-bottom:4px !important}
.sc-node [data-vgow],.sc-node .sc-gow,.sc-node .sc-shot-ft{min-height:48px !important;display:flex !important;
  align-items:center !important;gap:10px !important;padding:4px 0 10px !important;overflow:visible !important}
.sc-node .sc-sbtn{min-height:32px !important;height:32px !important;padding:0 16px !important;white-space:nowrap !important}
.sc-node .sc-shot-ft,.sc-node [data-vgow]{border-top:1px solid rgba(154,255,209,.10) !important;margin-top:2px !important}
/* 节点底部再留一点空间，避免按钮贴边被裁 */
.sc-node{padding-bottom:8px !important}
.sc-vjframe{position:relative;margin:8px 12px 6px;height:186px;border-radius:10px;background:#000;border:1px solid rgba(154,255,209,.14);overflow:hidden;display:flex;align-items:center;justify-content:center}
.sc-vjframe .sc-vjv{width:100%;height:100%;object-fit:contain;background:#000;display:block;margin:0;border-radius:0;box-shadow:none;max-height:none}
.sc-vjframe.is-done{border-color:rgba(154,255,209,.34)}
.sc-vjframe .sc-vjph{color:#5d7a6c;font-size:11.5px;line-height:1.7;text-align:center;padding:0 16px}
/* 【N314】空预览区里的「找回成片」按钮（底部居中，细描边玻璃底，与 sc-vre 同风格） */
.sc-vjframe .sc-vjfind{position:absolute;left:50%;bottom:10px;transform:translateX(-50%);z-index:7;padding:3px 10px;font-size:10.5px;border:1px solid rgba(154,255,209,.3);border-radius:999px;background:rgba(6,16,12,.66);color:#cfe9de;cursor:pointer}
.sc-vjframe .sc-vjfind:hover{border-color:rgba(154,255,209,.6);color:#eafff3}
/* 【N320】「结束并退款」按钮：与"刷新状态"同排、靠右，暖色以区分"会退钱"这个动作用意 */
.sc-vjframe .sc-vjstop{left:auto;right:10px;border-color:rgba(255,180,140,.34);color:#ffd9c2}
.sc-vjframe .sc-vjstop:hover{border-color:rgba(255,180,140,.7);color:#fff2e8}
/* 【N345】优化基准条 */
.sc-vc-row.sc-prbase{gap:6px;align-items:center;flex-wrap:wrap}
.sc-vc-row.sc-prbase .sc-vre.on{border-color:rgba(154,255,209,.75);color:#eafff3;background:rgba(127,200,162,.18)}
.sc-vc-row.sc-prbase .sc-vc-note{color:#8fa8b5;font-size:11px}
/* 【N331】H3 优化进行中：本视频框整体灰化并禁止任何点击（优化完成后由 JS 移除该类） */
[data-vbusy].is-busy,.sc-shot.is-busy{opacity:.45;filter:grayscale(.72);pointer-events:none;cursor:not-allowed;transition:opacity .15s ease}
[data-vbusy].is-busy *,.sc-shot.is-busy *{pointer-events:none!important}
[data-vbusy].is-busy::after{content:'H3 优化中… 请稍候';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  padding:8px 16px;border-radius:10px;background:rgba(10,12,16,.86);border:1px solid rgba(154,255,209,.45);color:#eafff3;
  font-size:13px;font-weight:700;letter-spacing:.4px;z-index:9;white-space:nowrap}
[data-vbusy]{position:relative}
/* 【N305h】视频预览右上角「最大化播放」按钮（与「刷新」等同风格：细描边、玻璃底、悬停提亮） */
.sc-vjframe .sc-vjmax{position:absolute;top:8px;right:8px;z-index:7;width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid rgba(154,255,209,.28);border-radius:8px;background:rgba(6,16,12,.62);color:#c9e8d8;cursor:pointer;opacity:.7;backdrop-filter:blur(6px);transition:opacity .15s,background .15s,border-color .15s,color .15s}
.sc-vjframe:hover .sc-vjmax,.sc-vjframe .sc-vjmax:focus{opacity:1}
.sc-vjframe .sc-vjmax:hover{color:#eafff5;border-color:rgba(154,255,209,.68);background:rgba(126,255,197,.18)}
.sc-vjframe .sc-vjmax svg{width:13px;height:13px;display:block}
/* 全屏播放遮罩（点击遮罩/×/Esc 退出） */
.vj-max-mask{position:fixed;inset:0;z-index:2147483000;display:flex;align-items:center;justify-content:center;background:rgba(2,6,4,.94);cursor:zoom-out}
.vj-max-mask[hidden]{display:none}
.vj-max-mask video{max-width:92vw;max-height:86vh;border-radius:12px;background:#000;box-shadow:0 30px 90px rgba(0,0,0,.72)}
.vj-max-close{position:absolute;top:16px;right:20px;width:34px;height:34px;line-height:32px;text-align:center;border:1px solid rgba(154,255,209,.3);border-radius:10px;background:rgba(6,16,12,.72);color:#dff2e8;font-size:18px;cursor:pointer}
.vj-max-close:hover{color:#fff;border-color:rgba(154,255,209,.7);background:rgba(126,255,197,.2)}
.sc-vj-lg .sc-vjframe{height:250px}
.sc-vjovl{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;transition:opacity .18s;background:rgba(0,0,0,.16)}
.sc-vjovl span{width:52px;height:52px;border-radius:50%;background:rgba(10,24,20,.74);border:1px solid rgba(154,255,209,.5);color:#9affd1;display:flex;align-items:center;justify-content:center;font-size:19px;padding-left:4px;box-shadow:0 6px 20px rgba(0,0,0,.5)}
.sc-vjbar2{position:absolute;left:0;right:0;bottom:0;height:4px;background:rgba(255,255,255,.14)}
.sc-vjbar2 i{display:block;height:100%;width:0;background:linear-gradient(90deg,#5be8b9,#9affd1);transition:width .15s linear}
.sc-vjcap{font-size:11px;color:#8db4a0;margin:6px 2px 0;line-height:1.6}
.sc-shot-ft .sc-sbtn{flex:0 1 auto;min-width:70px;height:28px;display:inline-flex;align-items:center;justify-content:center;padding:0 10px;font-size:11.5px}
.sc-vcost{font-size:10.5px;color:#ffd68f;white-space:nowrap;padding:0 2px}
.sc-sbtn{flex:1;padding:6px 0;font-size:11px;border-radius:8px;cursor:pointer;background:rgba(154,255,209,.08);border:1px solid rgba(154,255,209,.25);color:#bff5da}
.sc-sbtn:hover{background:rgba(154,255,209,.18)}
.sc-sbtn.danger{background:rgba(255,120,120,.1);border-color:rgba(255,120,120,.3);color:#ffb3b3}
.sc-hint{padding:16px 18px;font-size:12.5px;line-height:1.9;color:#8db4a0}

#scBand{display:none;position:absolute;z-index:5;border:1px solid #9affd1;background:rgba(154,255,209,.1);border-radius:4px;pointer-events:none}
#scMenu{display:none;position:absolute;z-index:8;min-width:186px;padding:6px;border-radius:12px;border:1px solid rgba(154,255,209,.3);background:rgba(8,16,13,.98);box-shadow:0 14px 40px rgba(0,0,0,.55)}
#scMenu .sc-mt{padding:5px 10px 6px;font-size:10.5px;color:#6d8577;letter-spacing:.06em}
#scMenu .sc-mi{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:8px;font-size:12.5px;color:#dff7ec;cursor:pointer}
#scMenu .sc-mi:hover{background:rgba(154,255,209,.14)}
#scToast{display:none;position:absolute;left:50%;bottom:22px;transform:translateX(-50%);z-index:9;align-items:center;gap:10px;padding:9px 14px;border-radius:10px;background:rgba(8,18,14,.96);border:1px solid rgba(154,255,209,.3);color:#dff7ec;font-size:12px;box-shadow:0 10px 30px rgba(0,0,0,.5)}
.sc-undo{background:none;border:1px solid rgba(154,255,209,.4);color:#9affd1;border-radius:7px;padding:3px 9px;font-size:11px;cursor:pointer}

#scAssets{display:none;position:absolute;right:0;top:0;bottom:0;width:344px;z-index:7;background:rgba(6,13,10,.985);border-left:1px solid rgba(154,255,209,.25);overflow:auto;padding:12px 14px 24px;box-shadow:-14px 0 40px rgba(0,0,0,.45)}
#scAssets h3{margin:0 0 2px;font-size:13.5px;color:#eafff3;display:flex;align-items:center;gap:8px}
#scAssetsClose{margin-left:auto;background:none;border:1px solid rgba(154,255,209,.25);color:#bff5da;border-radius:7px;padding:3px 9px;font-size:11px;cursor:pointer}
.sc-agrp{margin:13px 0 3px;font-size:11px;letter-spacing:.08em;color:#9affd1}
.sc-aempty{font-size:11px;color:#5f7a6d;padding:3px 7px}
.sc-arow{display:flex;gap:9px;align-items:center;padding:7px;border-radius:9px;cursor:pointer;border:1px solid transparent}
.sc-arow:hover{background:rgba(154,255,209,.08);border-color:rgba(154,255,209,.2)}
.sc-arow img{width:58px;height:40px;object-fit:cover;border-radius:6px;flex:none;background:#0a1310}
.sc-aph{width:58px;height:40px;border-radius:6px;flex:none;display:flex;align-items:center;justify-content:center;font-size:10px;color:#5f7a6d;background:repeating-linear-gradient(45deg,#0b1512,#0b1512 6px,#0e1a16 6px,#0e1a16 12px)}
.sc-ainfo{min-width:0}
.sc-ainfo b{display:block;font-size:12.5px;color:#eafff3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sc-ainfo span{display:block;font-size:10.5px;color:#7e9a8c}
.sc-ainfo i{display:block;font-size:10.5px;color:#f0b9d6;font-style:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

#scDetail{display:none;position:absolute;left:0;right:0;bottom:0;max-height:52%;overflow:auto;padding:14px 20px 18px;border-top:1px solid rgba(154,255,209,.3);background:rgba(6,13,10,.98);color:#dff7ec;font-size:12.5px;line-height:1.8}
#scDetail h4{margin:0 0 8px;font-size:14px;color:#9affd1}
#scDetail img{max-width:260px;border-radius:10px;border:1px solid rgba(154,255,209,.2);display:block;margin:8px 0}
#scDetail audio{width:320px;margin:8px 0;display:block}
#scDetail pre{white-space:pre-wrap;word-break:break-word;margin:6px 0 0;font-family:inherit;color:#cfe9de}
/* 【N457】工作台关闭键：**只留图形「✕」本身**（原带文字胶囊 + N447 另注入的第二个 ✕ 并存 → 用户："右上角有两个关闭"）。
   这里把原按钮（#scDetailClose，HTML 里唯一那个、closeDetail 就绑在它身上）直接改成图形叉，
   位置＝手柄栏右端（按钮已挪进 #scDetailGrip，故 50% 就是手柄栏中线），不再另加按钮。 */
#scDetailClose{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:32px;height:26px;display:inline-flex;align-items:center;justify-content:center;padding:0;border-radius:8px;cursor:pointer;font-size:13px;line-height:1;font-weight:700;letter-spacing:0;color:#9affd1;background:rgba(10,26,20,.72);border:1px solid rgba(154,255,209,.45);box-shadow:none;transition:background 160ms ease-out,border-color 160ms ease-out,color 160ms ease-out}
#scDetailClose:hover{background:rgba(141,255,199,.18);border-color:rgba(141,255,199,.85);color:#eafff5}
#scDetailClose:focus-visible{outline:2px solid rgba(154,255,209,.75);outline-offset:2px}
#scDetailDock{position:absolute;right:46px;top:50%;transform:translateY(-50%);height:26px;display:inline-flex;align-items:center;padding:0 10px;border-radius:8px;cursor:pointer;font-size:11px;letter-spacing:.04em;color:#cfe8dc;background:rgba(154,255,209,.10);border:1px solid rgba(154,255,209,.35);transition:.3s;z-index:76}
#scDetailDock:hover{background:rgba(141,255,199,.18);border-color:rgba(141,255,199,.85);color:#eafff5}

/* ===== 修22：倒角 + 选中滤色荧光 + 分镜三区 + 资产折叠 ===== */
#storyCanvasMask .sc-node{border-radius:18px}
#storyCanvasMask .sc-btn{border-radius:12px}
#storyCanvasMask .sc-chip{border-radius:9px}
#storyCanvasMask .sc-cap{border-radius:10px}
#storyCanvasMask .sc-thumb{border-radius:14px}
#storyCanvasMask .sc-ph{border-radius:14px}
#storyCanvasMask .sc-arow{border-radius:14px}
#storyCanvasMask .sc-mtag,#storyCanvasMask .sc-vtag,#storyCanvasMask .sc-badge{border-radius:8px}
#storyCanvasMask .sc-shot-pr{border-radius:14px}
#storyCanvasMask .sc-sbtn{border-radius:11px}
#storyCanvasMask .sc-out,#storyCanvasMask .sc-edit{border-radius:12px}
#scMenu,#scAssets,#scToast,#scDetail{border-radius:18px}
#scAssets{border-top-left-radius:18px;border-bottom-left-radius:18px}
#scMenu .sc-mi{border-radius:11px}
#scBand{border-radius:12px}
#storyCanvasMask .sc-node{transition:left .16s cubic-bezier(.22,.61,.36,1),top .16s cubic-bezier(.22,.61,.36,1),border-color .18s,box-shadow .22s,filter .18s,opacity .18s}
#storyCanvasMask .sc-node.sc-sel{filter:saturate(1.2) brightness(1.08);border-color:#9affd1;
  box-shadow:0 0 0 2px rgba(154,255,209,.45),0 0 22px rgba(154,255,209,.35),0 12px 34px rgba(0,0,0,.55)}
#storyCanvasMask .sc-node.sc-tgt{filter:saturate(1.25) brightness(1.12);box-shadow:0 0 0 2px rgba(255,214,138,.5),0 0 20px rgba(255,214,138,.4)}
#storyCanvasMask .sc-node:hover{box-shadow:0 0 0 1px rgba(154,255,209,.3),0 10px 28px rgba(0,0,0,.5)}
.sc-abox{overflow:hidden;transition:opacity .18s}
.sc-abox.collapsed{display:none}
.sc-agrp{cursor:pointer;border-radius:10px;padding:4px 6px;transition:background .15s}
.sc-agrp:hover{background:rgba(154,255,209,.08)}
.sc-caret{display:inline-block;width:14px;color:#7fe0a8}
.sc-ck{margin:2px 0 4px;padding:7px 9px;border-radius:12px;background:rgba(154,255,209,.09);border:1px solid rgba(154,255,209,.28);color:#cfeede;font-size:11.5px}
.sc-ck2{margin:3px 0;padding:6px 9px;border-radius:11px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);color:#8db4a0;font-size:11px;line-height:1.6}
.sc-ck2.bad{background:rgba(255,158,203,.08);border-color:rgba(255,158,203,.3);color:#ffc6de}
#scDetail.sc-max{top:52px;left:12px;right:12px;bottom:12px;max-height:none;border:1px solid rgba(154,255,209,.3);border-radius:20px;padding:0;overflow:hidden}
#scDetail.sc-max #scDetailClose{display:inline-flex}   /* 【N268】最大化时也常显（位置＝红框处），不再依赖浮动胶囊 */
.sc-sp{position:relative;display:flex;gap:14px;height:100%;box-sizing:border-box;padding:16px 18px}
.sc-spx{position:absolute;right:10px;top:8px;z-index:4;width:30px;height:30px;border-radius:50%;background:rgba(255,158,203,.12);border:1px solid rgba(255,158,203,.42);color:#ff9ecb;font-size:14px;cursor:pointer;transition:.16s}
.sc-spx:hover{background:#ff9ecb;color:#220a14;box-shadow:0 0 16px rgba(255,158,203,.5)}
.sc-sp-l{flex:1.55;min-width:0;display:flex;flex-direction:column;gap:8px}
.sc-sp-r{flex:1;min-width:280px;display:flex;flex-direction:column;gap:12px;overflow:auto;padding-right:26px}
.sc-sp-box{border:1px solid rgba(154,255,209,.2);border-radius:16px;background:rgba(255,255,255,.025);padding:11px 13px}
.sc-sp-hd{font-size:12px;color:#9affd1;letter-spacing:.05em;margin-bottom:7px;display:flex;align-items:center;gap:8px}
.sc-sp-st{font-size:10.5px;color:#7e9a8c}
.sc-sp-ed{flex:1;overflow:auto;white-space:pre-wrap;word-break:break-word;border:1px solid rgba(154,255,209,.22);border-radius:16px;background:rgba(6,14,11,.75);padding:13px 15px;color:#e6fbf1;font-size:13px;line-height:1.9;outline:none;transition:border-color .18s,box-shadow .18s}
.sc-sp-ed:focus{border-color:#9affd1;box-shadow:0 0 0 2px rgba(154,255,209,.2),0 0 18px rgba(154,255,209,.22)}
.sc-sp-tip{font-size:11px;color:#7e9a8c;line-height:1.7;margin-bottom:7px}
.sc-sp-in{width:100%;box-sizing:border-box;min-height:78px;resize:vertical;border:1px solid rgba(154,255,209,.22);border-radius:14px;background:rgba(6,14,11,.8);color:#e6fbf1;font-family:inherit;font-size:12.5px;line-height:1.7;padding:9px 11px;outline:none}
.sc-sp-in:focus{border-color:#9affd1;box-shadow:0 0 0 2px rgba(154,255,209,.18)}
.sc-sp-row{display:flex;gap:8px;margin-top:9px}
.sc-sp-msg{margin-top:8px;font-size:11px;color:#ffd68a;min-height:14px;line-height:1.6}
.sc-vm{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.sc-vmi{border:1px solid rgba(154,255,209,.2);border-radius:14px;padding:8px 10px;cursor:pointer;background:rgba(255,255,255,.02);transition:.16s}
.sc-vmi:hover{border-color:rgba(154,255,209,.45);background:rgba(154,255,209,.07)}
.sc-vmi b{display:block;font-size:12px;color:#eafff3}
.sc-vmi span{display:block;font-size:10.5px;color:#7e9a8c;margin-top:2px}
.sc-vmi.on{border-color:#9affd1;background:rgba(154,255,209,.14);filter:saturate(1.2) brightness(1.08);box-shadow:0 0 0 1px rgba(154,255,209,.4),0 0 16px rgba(154,255,209,.28)}
.sc-sbtn.on{background:#9affd1;color:#05231a}
/* 修23：@ 素材区 / 视频模型预留区 / 柔化提示 */
.sc-atbox{border:1px solid rgba(154,255,209,.2);border-radius:16px;background:rgba(255,255,255,.025);padding:10px 12px}
.sc-atrow{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:8px}
.sc-achip{display:inline-flex;align-items:center;gap:6px;padding:4px 8px 4px 4px;border-radius:13px;border:1px solid rgba(154,255,209,.3);background:rgba(154,255,209,.08);font-size:11.5px;color:#eafff3;cursor:pointer;transition:.16s}
.sc-achip:hover{filter:saturate(1.2) brightness(1.08);box-shadow:0 0 0 1px rgba(154,255,209,.42),0 0 14px rgba(154,255,209,.26)}
.sc-achip img{width:28px;height:28px;border-radius:10px;object-fit:cover;display:block}
.sc-achip .sc-anoimg{display:block;width:28px;height:28px;border-radius:10px;background:repeating-linear-gradient(45deg,#0b1512,#0b1512 6px,#0e1a16 6px,#0e1a16 12px)}
.sc-achip em{font-style:normal;font-size:10px;color:#ff9ecb}
.sc-achip u{text-decoration:none;width:18px;height:18px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:10px;color:#ff9ecb;background:rgba(255,158,203,.14);border:1px solid rgba(255,158,203,.34)}
.sc-achip u:hover{background:#ff9ecb;color:#220a14}
.sc-achip.c-env{border-color:rgba(127,182,255,.34);background:rgba(127,182,255,.09)}
.sc-achip.c-prop{border-color:rgba(255,214,138,.34);background:rgba(255,214,138,.09)}
.sc-apick{display:flex;flex-wrap:wrap;gap:6px;align-items:center;border-top:1px dashed rgba(154,255,209,.16);padding-top:8px}
.sc-picklab{font-size:10.5px;color:#7e9a8c}
.sc-pchip{padding:3px 9px;border-radius:12px;border:1px dashed rgba(154,255,209,.32);background:rgba(255,255,255,.02);font-size:11px;color:#cfeede;cursor:pointer;transition:.16s}
.sc-pchip:hover{border-style:solid;background:rgba(154,255,209,.12);filter:brightness(1.08);box-shadow:0 0 10px rgba(154,255,209,.2)}
.sc-aempty2{font-size:10.5px;color:#5f7a6d}
.sc-vres{border:1px dashed rgba(154,255,209,.34);border-radius:16px;background:rgba(255,255,255,.02);padding:18px 14px;text-align:center;font-size:12px;color:#9affd1;line-height:1.8}
.sc-vres span{display:block;font-size:10.5px;color:#7e9a8c;margin-top:5px}
.sc-ck2.note{background:rgba(154,255,209,.06);border-color:rgba(154,255,209,.26);color:#cfeede}
.sc-ckbtn{margin-top:7px;padding:4px 11px;border-radius:11px;border:1px solid rgba(154,255,209,.42);background:rgba(154,255,209,.12);color:#9affd1;font-size:11px;cursor:pointer}
.sc-ckbtn:hover{background:#9affd1;color:#05231a}

/* ===== 修24：质感提升（阴影/立体感/倒角/微交互）—— 只动外观，不改结构 ===== */
:root{--u24-ease:cubic-bezier(.22,.68,.18,1);--u24-line:rgba(154,255,209,.16);--u24-glow:rgba(94,255,202,.35)}
*{scrollbar-width:thin;scrollbar-color:rgba(120,220,180,.35) transparent}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:linear-gradient(180deg,rgba(120,220,180,.45),rgba(70,160,125,.32));border-radius:99px;border:2px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,rgba(150,255,210,.75),rgba(90,200,155,.5));background-clip:padding-box}
::-webkit-scrollbar-track{background:transparent}
button,select,input,textarea{font-family:inherit}
button:focus-visible,select:focus-visible,textarea:focus-visible,input:focus-visible{outline:none;box-shadow:0 0 0 2px rgba(141,255,199,.55),0 0 18px rgba(94,255,202,.35)}

/* ---- 素材框：立体卡片 + 悬浮抬升 + 选中滤色荧光 ---- */
.mat-item{border-radius:14px;background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.018));border-color:var(--u24-line);box-shadow:0 2px 8px rgba(0,0,0,.26),inset 0 1px rgba(255,255,255,.06);transition:transform .28s var(--u24-ease),box-shadow .28s ease,background .3s ease,border-color .3s ease,filter .2s ease}
.mat-item:hover{transform:translateY(-2px);box-shadow:0 10px 22px rgba(0,0,0,.42),0 0 0 1px rgba(141,255,199,.35),inset 0 1px rgba(255,255,255,.09)}
.mat-item.selected{transform:translateY(-1px);filter:saturate(1.14) brightness(1.06);box-shadow:0 10px 24px rgba(0,0,0,.45),0 0 0 1px rgba(141,255,199,.6),0 0 18px var(--u24-glow)}
.mat-item:active{transform:translateY(0) scale(.985)}
.mat-item.finalized{box-shadow:0 8px 22px rgba(0,0,0,.35),0 0 18px rgba(244,194,70,.5),inset 0 1px rgba(255,255,255,.25)}

/* ---- 四色徽章簇：文=青蓝 / 音=橘 / 图=翡翠 / 定稿=金 ---- */
.mat-badges{margin-left:auto;flex:0 0 auto;display:inline-flex;align-items:center;gap:4px}
.mat-badges .mb{position:relative;overflow:hidden;font-style:normal;font-size:9px;font-weight:700;line-height:1;letter-spacing:.04em;padding:4px 6.5px;border-radius:999px;white-space:nowrap;box-shadow:inset 0 1px rgba(255,255,255,.16)}
.mb-txt{color:#a8dcf0;border:1px solid rgba(111,208,232,.55);background:rgba(111,208,232,.12)}
.mb-txt.mb-ok{color:#04222d;border-color:transparent;background:linear-gradient(180deg,#b6ecfa,#6fd0e8);box-shadow:0 2px 8px rgba(111,208,232,.4),inset 0 1px rgba(255,255,255,.5)}
.mb-voice{color:#ffcda4;border:1px solid rgba(255,168,102,.6);background:rgba(255,168,102,.14)}
.mb-voice.mb-ok{color:#3a1e00;border-color:transparent;background:linear-gradient(180deg,#ffd8ae,#ffa866);box-shadow:0 2px 8px rgba(255,168,102,.42),inset 0 1px rgba(255,255,255,.5)}
.mb-img{color:#aef7de;border:1px solid rgba(91,232,185,.6);background:rgba(91,232,185,.14)}
.mb-img.mb-ok{color:#052b1c;border-color:transparent;background:linear-gradient(180deg,#aef6d9,#58e0a6);box-shadow:0 2px 8px rgba(88,224,166,.42),inset 0 1px rgba(255,255,255,.5)}
.mb-err{color:#ffc0c0;border:1px solid rgba(255,110,110,.65);background:rgba(160,40,40,.35)}
.mb-final{color:#3d2a00;border:0;background:linear-gradient(180deg,#ffe39b,#f0b431);box-shadow:0 2px 10px rgba(244,194,70,.45),inset 0 1px rgba(255,255,255,.55);animation:u24Glow 2.4s ease-in-out infinite}
.mb-doing{animation:u24Pulse 1.5s ease-in-out infinite}
.mb-doing::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 18%,rgba(255,255,255,.5) 50%,transparent 82%);transform:translateX(-130%);animation:u24Sheen 1.5s linear infinite}
@keyframes u24Pulse{0%,100%{opacity:.72}50%{opacity:1}}
@keyframes u24Sheen{to{transform:translateX(130%)}}
@keyframes u24Glow{0%,100%{box-shadow:0 2px 10px rgba(244,194,70,.35),inset 0 1px rgba(255,255,255,.5)}50%{box-shadow:0 2px 18px rgba(244,194,70,.75),inset 0 1px rgba(255,255,255,.6)}}
.mat-item[data-mstate="doing-txt"]{border-left-color:#6fd0e8}
.mat-item[data-mstate="doing-voice"]{border-left-color:#ffa866}
.mat-item[data-mstate="doing-img"]{border-left-color:#5be8b9}
.mat-item[data-state="voice"]{border-left-color:rgba(255,168,102,.95)}
.mat-item[data-state="final"]{background:linear-gradient(180deg,rgba(244,194,70,.16),rgba(244,194,70,.05))}

/* ---- 分组标题 / 小细节 ---- */
.asset-row-title{letter-spacing:.08em}
.asset-mark{box-shadow:0 0 8px currentColor}
.brief-box{border-radius:13px;background:linear-gradient(180deg,rgba(18,36,26,.72),rgba(11,24,17,.55));border-left:3px solid rgba(88,224,166,.55);box-shadow:inset 0 1px rgba(255,255,255,.05),0 8px 20px rgba(0,0,0,.28)}

/* ---- 画布工具区按钮：玻璃药丸，本地物料与定稿同风格同尺寸 ---- */
.canvas-tools .local-material.oncv{display:inline-flex;align-items:center;justify-content:center;width:auto;margin:0;padding:7px 14px;border:1px solid rgba(154,255,209,.35);border-radius:999px;background:rgba(8,26,16,.85);color:#c9ffe4;font-size:11px;font-weight:400;letter-spacing:.06em;line-height:1.25;cursor:pointer;backdrop-filter:blur(8px);box-shadow:0 6px 20px rgba(0,0,0,.3)}
.canvas-tools .local-material.oncv:hover{background:rgba(88,224,166,.2);box-shadow:0 0 0 1px rgba(141,255,199,.5),0 0 18px rgba(94,255,202,.32);transform:translateY(-2px)}
.crop-btn,.download-btn,.finalize-btn,.canvas-tools .local-material.oncv{position:relative;overflow:hidden;transition:transform .3s var(--u24-ease),box-shadow .3s ease,background .3s ease,filter .3s ease}
.crop-btn:hover,.download-btn:hover,.finalize-btn:hover{transform:translateY(-2px)}
.crop-btn:active,.download-btn:active,.finalize-btn:active,.canvas-tools .local-material.oncv:active{transform:translateY(0) scale(.97)}
.canvas-tools-row{align-items:center}

/* ---- 【N168】定稿态：金黄色（与左侧素材定稿同色系） ---- */
#mtFix.fixed,.finalize-btn.fixed{background:rgba(232,178,54,.24)!important;border-color:rgba(255,214,102,.8)!important;color:#ffe08f!important;font-weight:700;box-shadow:0 0 14px rgba(244,194,70,.42),inset 0 0 10px rgba(244,194,70,.10)!important}
#mtFix.fixed:hover{box-shadow:0 0 20px rgba(244,194,70,.6),inset 0 0 10px rgba(244,194,70,.14)!important}

/* ---- 舞台：内阴影 + 顶部高光 ---- */
.material-canvas{border-radius:16px;box-shadow:inset 0 1px rgba(255,255,255,.05),0 18px 40px rgba(0,0,0,.32)}
.material-canvas::before{content:"";position:absolute;inset:0;pointer-events:none;z-index:0;border-radius:inherit;background:linear-gradient(180deg,rgba(255,255,255,.05),transparent 24%),radial-gradient(120% 80% at 50% 0%,rgba(94,255,202,.06),transparent 62%)}

/* ---- 右栏按钮与输入：倒角 + 抬升 + 内高光 ---- */
.prompt-main,.prompt-secondary,.stage-generate,.multi-toggle,.multi-save,.multi-retry,.local-material{border-radius:12px;transition:transform .3s var(--u24-ease),box-shadow .3s ease,background .3s ease,filter .3s ease}
.prompt-main:hover:not(:disabled),.stage-generate:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 14px 30px rgba(47,201,138,.35),0 0 0 1px rgba(141,255,199,.4)}
.prompt-secondary:hover:not(:disabled),.multi-toggle:hover{transform:translateY(-1px)}
.prompt-main:active:not(:disabled),.stage-generate:active:not(:disabled),.prompt-secondary:active:not(:disabled){transform:translateY(0) scale(.985)}
.vprompt,.command-input,textarea.vprompt{border-radius:12px;box-shadow:inset 0 1px rgba(255,255,255,.05),0 6px 16px rgba(0,0,0,.22)}
.ratio-btn,.res-chip,.plat-chip{border-radius:10px;transition:transform .25s var(--u24-ease),box-shadow .25s ease,background .25s ease}
.ratio-btn:hover,.res-chip:hover,.plat-chip:hover{transform:translateY(-1px);box-shadow:0 6px 14px rgba(0,0,0,.3)}
.gallery-thumb{border-radius:10px;box-shadow:0 4px 12px rgba(0,0,0,.35)}
.voice-btn-rail,.voice-player{border-radius:13px}

/* ---- 画布（分镜画布）立体感 ---- */
#storyCanvasMask .sc-node{border-radius:18px;background:linear-gradient(180deg,rgba(20,34,28,.97),rgba(10,18,15,.98));box-shadow:0 10px 26px rgba(0,0,0,.45),inset 0 1px rgba(255,255,255,.06)}
#storyCanvasMask .sc-node:hover{box-shadow:0 16px 34px rgba(0,0,0,.55),0 0 0 1px rgba(154,255,209,.32),inset 0 1px rgba(255,255,255,.08)}
#storyCanvasMask .sc-node.sc-sel{box-shadow:0 0 0 2px rgba(154,255,209,.55),0 0 26px rgba(94,255,202,.32),0 16px 34px rgba(0,0,0,.5)}
#storyCanvasMask .sc-cap{border-radius:999px;box-shadow:inset 0 1px rgba(255,255,255,.08),0 6px 16px rgba(0,0,0,.32)}
#storyCanvasMask .sc-btn,#storyCanvasMask .sc-sbtn{border-radius:11px;transition:transform .25s var(--u24-ease),box-shadow .25s ease,background .25s ease}
#storyCanvasMask .sc-btn:hover,#storyCanvasMask .sc-sbtn:hover{transform:translateY(-1px);box-shadow:0 8px 18px rgba(0,0,0,.4),0 0 0 1px rgba(141,255,199,.4)}
#storyCanvasMask .sc-btn:active,#storyCanvasMask .sc-sbtn:active{transform:translateY(0) scale(.97)}
#storyCanvasMask .sc-plus{transition:transform .22s var(--u24-ease),opacity .22s ease,box-shadow .22s ease}
#storyCanvasMask .sc-plus:hover{transform:scale(1.2);box-shadow:0 0 14px rgba(154,255,209,.6)}
#storyCanvasMask .sc-sp-box,#storyCanvasMask #scDetail,#storyCanvasMask #scAssets{border-radius:16px;box-shadow:0 18px 44px rgba(0,0,0,.5),inset 0 1px rgba(255,255,255,.05)}
#storyCanvasMask .sc-achip,#storyCanvasMask .sc-pchip{border-radius:999px;transition:transform .2s var(--u24-ease),box-shadow .2s ease}
#storyCanvasMask .sc-achip:hover,#storyCanvasMask .sc-pchip:hover{transform:translateY(-1px);box-shadow:0 6px 14px rgba(0,0,0,.35)}

/* ---- 视频模型下拉 ---- */
.sc-vsel-row{display:flex;flex-direction:column;gap:7px}
.sc-vsel{width:100%;padding:11px 34px 11px 13px;border-radius:13px;border:1px solid rgba(154,255,209,.3);background:linear-gradient(180deg,rgba(24,44,34,.95),rgba(14,26,20,.95));color:#d8ffe9;font-size:12px;cursor:pointer;appearance:none;-webkit-appearance:none;box-shadow:inset 0 1px rgba(255,255,255,.07),0 6px 16px rgba(0,0,0,.3);transition:transform .25s var(--u24-ease),box-shadow .25s ease,border-color .25s ease}
.sc-vsel:hover{transform:translateY(-1px);border-color:rgba(154,255,209,.6);box-shadow:0 0 0 1px rgba(141,255,199,.35),0 10px 22px rgba(0,0,0,.4)}
.sc-vsel:disabled{opacity:.72;cursor:not-allowed;transform:none}
.sc-vsel option{background:#0d2018;color:#d8ffe9}
.sc-vhint{font-size:10px;color:#7e9a8c;line-height:1.6}

/* ===================== 修25：视觉与手感统一提升（全部限定在画布内，不影响主程序） ===================== */
#storyCanvasMask{
  --u-ink:#eafff4;--u-dim:#8fb3a4;--u-mint:#9affd1;--u-mint2:#42c795;
  --u-line:rgba(154,255,209,.14);--u-line2:rgba(154,255,209,.30);
  --u-glass:linear-gradient(180deg,rgba(30,62,50,.92),rgba(13,32,24,.96));
  --u-glass2:linear-gradient(180deg,rgba(38,78,63,.96),rgba(17,41,31,.98));
  --u-in:inset 0 1px 0 rgba(255,255,255,.07),inset 0 -1px 0 rgba(0,0,0,.38);
  --u-sh2:0 10px 24px -12px rgba(0,0,0,.78),0 2px 6px -2px rgba(0,0,0,.5);
  --u-sh3:0 26px 56px -22px rgba(0,0,0,.88),0 6px 16px -6px rgba(0,0,0,.6);
  --u-ez:cubic-bezier(.22,.61,.36,1);--u-ez2:cubic-bezier(.34,1.4,.64,1);
}
#storyCanvasMask,#storyCanvasMask *{-webkit-tap-highlight-color:transparent}

/* ---------- 按钮：立体 + 下压 + 涟漪 ---------- */
#storyCanvasMask .sc-btn,#storyCanvasMask .sc-sbtn,#storyCanvasMask .sc-ckbtn{
  position:relative;overflow:hidden;border-radius:12px;
  background:var(--u-glass);border:1px solid var(--u-line2);color:var(--u-ink);
  box-shadow:var(--u-in),var(--u-sh2);
  transition:transform .13s var(--u-ez),box-shadow .18s var(--u-ez),filter .18s var(--u-ez),border-color .18s var(--u-ez);
  will-change:transform;
}
#storyCanvasMask .sc-sbtn,#storyCanvasMask .sc-ckbtn{border-radius:10px}
#storyCanvasMask .sc-btn::after,#storyCanvasMask .sc-sbtn::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(circle at center,rgba(154,255,209,.5),rgba(154,255,209,0) 62%);
  opacity:0;transform:scale(.35);
}
#storyCanvasMask .sc-btn:hover,#storyCanvasMask .sc-sbtn:hover,#storyCanvasMask .sc-ckbtn:hover{
  transform:translateY(-1.5px);filter:brightness(1.12);border-color:rgba(154,255,209,.52);
  box-shadow:var(--u-in),0 16px 30px -14px rgba(0,0,0,.85),0 0 0 1px rgba(154,255,209,.14);
}
#storyCanvasMask .sc-btn:active,#storyCanvasMask .sc-sbtn:active,#storyCanvasMask .sc-ckbtn:active{
  transform:translateY(1.5px) scale(.978);filter:brightness(.94);
  box-shadow:inset 0 2px 8px rgba(0,0,0,.55),0 1px 2px rgba(0,0,0,.6),0 0 0 1px rgba(154,255,209,.26);
  transition-duration:.055s;
}
#storyCanvasMask .sc-btn:active::after,#storyCanvasMask .sc-sbtn:active::after{animation:u25Ripple .52s var(--u-ez)}
@keyframes u25Ripple{0%{opacity:.6;transform:scale(.3)}100%{opacity:0;transform:scale(1.6)}}
#storyCanvasMask .sc-btn:focus-visible,#storyCanvasMask .sc-sbtn:focus-visible{outline:none;box-shadow:var(--u-in),0 0 0 2px var(--u-mint),0 0 22px rgba(154,255,209,.35)}
#storyCanvasMask .sc-btn.sc-go,#storyCanvasMask .sc-sbtn.sc-go{
  background:linear-gradient(180deg,#8df3c8,#2fb586);color:#05231a;font-weight:700;
  border-color:rgba(255,255,255,.34);text-shadow:0 1px 0 rgba(255,255,255,.3);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.45),inset 0 -2px 0 rgba(0,0,0,.18),0 12px 26px -12px rgba(47,181,134,.75);
}
#storyCanvasMask .sc-btn.sc-go:hover,#storyCanvasMask .sc-sbtn.sc-go:hover{filter:brightness(1.06) saturate(1.08)}
#storyCanvasMask .sc-btn.danger,#storyCanvasMask .sc-sbtn.danger{border-color:rgba(255,138,138,.42);color:#ffd9d9}
#storyCanvasMask .sc-btn.danger:hover,#storyCanvasMask .sc-sbtn.danger:hover{background:linear-gradient(180deg,rgba(92,32,32,.95),rgba(46,16,16,.96));border-color:rgba(255,138,138,.7)}
#storyCanvasMask .sc-btn.on,#storyCanvasMask .sc-btn[class*="on"]:not(.sc-go){border-color:var(--u-mint);box-shadow:var(--u-in),0 0 0 1px rgba(154,255,209,.45),0 0 24px rgba(154,255,209,.28)}

/* ---------- 节点：分类描边配色 + 立体阴影 + 选中荧光 ---------- */
#storyCanvasMask .sc-k-char{--k:#9affd1}
#storyCanvasMask .sc-k-env{--k:#8fd0ff}
#storyCanvasMask .sc-k-prop{--k:#ffd68f}
#storyCanvasMask .sc-k-voice{--k:#ff9ad8}
#storyCanvasMask .sc-k-shot{--k:#c6a6ff}
#storyCanvasMask .sc-k-img{--k:#7ff0c0}
#storyCanvasMask .sc-k-cvid{--k:#a3b9ff}
#storyCanvasMask .sc-node{
  --k:var(--u-mint);border-radius:18px;background:var(--u-glass);
  border:1px solid rgba(255,255,255,.10);
  box-shadow:inset 3px 0 0 var(--k),var(--u-in),var(--u-sh2);
  transition:box-shadow .2s var(--u-ez),border-color .2s var(--u-ez),filter .2s var(--u-ez),transform .16s var(--u-ez);
  backdrop-filter:blur(2px);
}
#storyCanvasMask .sc-node:hover{
  border-color:rgba(255,255,255,.18);transform:translateY(-2px);
  box-shadow:inset 3px 0 0 var(--k),var(--u-in),0 20px 38px -16px rgba(0,0,0,.85),0 0 0 1px rgba(255,255,255,.06);
}
#storyCanvasMask .sc-node:active{cursor:grabbing;transform:translateY(0) scale(.995);transition-duration:.06s}
#storyCanvasMask .sc-node.sc-sel{
  filter:saturate(1.16) brightness(1.06);border-color:var(--k);
  box-shadow:inset 3px 0 0 var(--k),0 0 0 2px var(--k),0 0 30px rgba(154,255,209,.3),var(--u-sh3);
}
#storyCanvasMask .sc-node.sc-tgt{box-shadow:inset 3px 0 0 var(--k),0 0 0 2px #ffd68f,0 0 32px rgba(255,214,143,.4),var(--u-sh3)}
#storyCanvasMask .sc-node.sc-dim{filter:saturate(.5) brightness(.82);opacity:.72}
#storyCanvasMask .sc-capwrap{transition:transform .18s var(--u-ez),filter .18s var(--u-ez)}
#storyCanvasMask .sc-cap{border-radius:14px;background:linear-gradient(180deg,rgba(36,74,60,.85),rgba(15,36,27,.9));border:1px solid var(--u-line);box-shadow:var(--u-in),0 8px 18px -12px rgba(0,0,0,.8);letter-spacing:.3px}
#storyCanvasMask .sc-capu{display:inline-flex;align-items:center;gap:6px}
#storyCanvasMask .sc-plus{
  border-radius:50%;background:linear-gradient(180deg,#8df3c8,#2fb586);color:#05231a;font-weight:800;
  box-shadow:0 6px 14px -6px rgba(47,181,134,.9),inset 0 1px 0 rgba(255,255,255,.5);
  transition:transform .16s var(--u-ez2),box-shadow .16s var(--u-ez),filter .16s var(--u-ez);
}
#storyCanvasMask .sc-node:hover .sc-plus{transform:scale(1.14)}
#storyCanvasMask .sc-plus:active{transform:scale(.9);filter:brightness(.94)}

/* ---------- 分类图标（取代文字标籾） ---------- */
#storyCanvasMask .sc-ic{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;flex:0 0 15px;vertical-align:-3px;margin-right:5px;opacity:.96}
#storyCanvasMask .sc-ic svg{width:100%;height:100%;display:block}
#storyCanvasMask .sc-ic-char{color:#9affd1}
#storyCanvasMask .sc-ic-env{color:#8fd0ff}
#storyCanvasMask .sc-ic-prop{color:#ffd68f}
#storyCanvasMask .sc-ic-voice{color:#ff9ad8}
#storyCanvasMask .sc-ic-shot{color:#c6a6ff}
#storyCanvasMask .sc-ic-img{color:#7ff0c0}
#storyCanvasMask .sc-ic-cvid{color:#a3b9ff}
#storyCanvasMask .sc-thumb,#storyCanvasMask .sc-ph{border-radius:12px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.08),0 6px 14px -10px rgba(0,0,0,.9)}
#storyCanvasMask .sc-sub{display:flex;align-items:center;gap:6px;color:var(--u-dim)}
#storyCanvasMask .sc-mtag{padding:1px 7px;border-radius:999px;border:1px solid var(--u-line2);background:rgba(154,255,209,.08);font-size:10px;color:#bfffe2}

/* ---------- 图标描边（CAT_SVG 为线稿，必须描边渲染） ---------- */
#storyCanvasMask .sc-ic svg{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}

/* ---------- 自建图片节点：文字表述 + 生成 ---------- */
#storyCanvasMask .sc-cimg{display:flex;flex-direction:column;gap:6px}
/* 【N27⑥】自建图片：图完整显示（contain 不裁切）+ 固定限高，节点高度按内容（376 起） */
#storyCanvasMask .sc-cimg .sc-thumb{width:100%;height:176px;object-fit:contain;background:rgba(6,20,15,.55)}
#storyCanvasMask .sc-cimg .sc-ph{width:100%;height:176px;display:flex;align-items:center;justify-content:center;text-align:center;padding:0 14px}
#storyCanvasMask .sc-itxt,#storyCanvasMask .sc-edit,#storyCanvasMask .sc-shot-pr{
  border-radius:12px;background:rgba(6,20,15,.62);border:1px solid rgba(255,255,255,.08);
  box-shadow:inset 0 2px 8px rgba(0,0,0,.45);color:#dcffee;
  transition:border-color .18s var(--u-ez),box-shadow .18s var(--u-ez),background .18s var(--u-ez);
}
#storyCanvasMask .sc-itxt{min-height:34px;max-height:54px;overflow:auto;padding:6px 8px;font-size:11px;line-height:1.55}
#storyCanvasMask .sc-itxt:focus,#storyCanvasMask .sc-edit:focus,#storyCanvasMask .sc-shot-pr:focus{
  outline:none;border-color:var(--u-mint);background:rgba(8,26,19,.8);
  box-shadow:inset 0 2px 10px rgba(0,0,0,.5),0 0 0 2px rgba(154,255,209,.28),0 0 22px rgba(154,255,209,.18);
}
#storyCanvasMask [data-ph]:empty:before{content:attr(data-ph);color:#6d8a7c;pointer-events:none}
#storyCanvasMask .sc-irow{display:flex;gap:6px;align-items:center}
#storyCanvasMask .sc-igb{margin-left:auto;display:inline-flex;align-items:center}
#storyCanvasMask .sc-igs{padding:1px 8px;border-radius:999px;font-size:10px;border:1px solid var(--u-line2);background:rgba(154,255,209,.08);color:#bfffe2}
#storyCanvasMask .sc-igs.doing{border-color:rgba(255,214,143,.5);background:rgba(255,214,143,.12);color:#ffe6b8;animation:u25Pulse 1.1s ease-in-out infinite}
#storyCanvasMask .sc-igs.ok{border-color:rgba(143,240,192,.6);background:rgba(143,240,192,.16);color:#d9ffe9}
#storyCanvasMask .sc-igs.err{border-color:rgba(255,138,138,.55);background:rgba(255,138,138,.14);color:#ffdada}
@keyframes u25Pulse{0%,100%{opacity:.62}50%{opacity:1}}
#storyCanvasMask .sc-igpv{width:100%;border-radius:14px;border:1px solid rgba(255,255,255,.1);box-shadow:0 14px 30px -16px rgba(0,0,0,.9);display:block}

/* ---------- 逐镜模型选择 ---------- */
#storyCanvasMask .sc-vsel-row{display:flex;align-items:center;gap:6px;margin:6px 0}
#storyCanvasMask .sc-vsel,#storyCanvasMask .sc-msel{
  flex:1;min-width:0;border-radius:11px;padding:7px 10px;font-size:11px;
  background:linear-gradient(180deg,rgba(24,52,42,.95),rgba(11,28,21,.98));
  border:1px solid var(--u-line2);color:#dcffee;box-shadow:var(--u-in);
  transition:border-color .16s var(--u-ez),box-shadow .16s var(--u-ez),filter .16s var(--u-ez);
}
#storyCanvasMask .sc-vsel:hover,#storyCanvasMask .sc-msel:hover{border-color:rgba(154,255,209,.55);filter:brightness(1.08)}
#storyCanvasMask .sc-vsel:focus,#storyCanvasMask .sc-msel:focus{outline:none;box-shadow:var(--u-in),0 0 0 2px rgba(154,255,209,.3)}
#storyCanvasMask .sc-vsel:disabled{opacity:.62;cursor:not-allowed}
#storyCanvasMask .sc-vsel option,#storyCanvasMask .sc-msel option{background:#0b1c15;color:#dcffee}
#storyCanvasMask .sc-vre{flex:0 0 auto;padding:6px 9px;border-radius:10px;font-size:11px;line-height:1}
#storyCanvasMask .sc-vpill{display:flex;align-items:center;gap:5px;padding:3px 6px;border-radius:999px;border:1px dashed rgba(255,255,255,.16);background:rgba(6,20,15,.5);transition:border-color .16s var(--u-ez),background .16s var(--u-ez)}
#storyCanvasMask .sc-vpill:hover{border-color:rgba(154,255,209,.5);background:rgba(10,30,22,.7)}
#storyCanvasMask .sc-vpill.on{border-style:solid;border-color:var(--u-mint);box-shadow:0 0 16px rgba(154,255,209,.22)}
#storyCanvasMask .sc-vsel-mini{padding:3px 6px;font-size:10px;border-radius:8px;max-width:140px}
#storyCanvasMask .sc-vhint{color:#7e9a8c;font-size:10px;line-height:1.6}

/* ---------- 视频任务状态 ---------- */
#storyCanvasMask .sc-vj{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:10.5px;color:var(--u-dim);min-height:22px}
#storyCanvasMask .sc-vj-lg{margin:8px 0;padding:8px 10px;border-radius:12px;background:rgba(6,20,15,.5);border:1px solid rgba(255,255,255,.07);box-shadow:inset 0 2px 8px rgba(0,0,0,.4);font-size:11px}
#storyCanvasMask .sc-vjidle{color:#7e9a8c}
#storyCanvasMask .sc-vjb{padding:2px 9px;border-radius:999px;font-weight:700;font-size:10px;border:1px solid var(--u-line2);background:rgba(154,255,209,.1);color:#d9ffe9}
#storyCanvasMask .sc-vjb.s-queued{border-color:rgba(255,214,143,.5);background:rgba(255,214,143,.14);color:#ffe6b8}
#storyCanvasMask .sc-vjb.s-running{border-color:rgba(143,208,255,.55);background:rgba(143,208,255,.16);color:#dcf0ff;animation:u25Pulse 1.1s ease-in-out infinite}
#storyCanvasMask .sc-vjb.s-done{border-color:rgba(143,240,192,.65);background:linear-gradient(180deg,rgba(143,240,192,.28),rgba(47,181,134,.22));color:#eaffef}
#storyCanvasMask .sc-vjb.s-error{border-color:rgba(255,138,138,.6);background:rgba(255,138,138,.16);color:#ffdada}
#storyCanvasMask .sc-vjb.s-canceled{border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.06);color:#c9d8d1}
#storyCanvasMask .sc-vjm{padding:2px 8px;border-radius:999px;border:1px dashed rgba(255,255,255,.18);color:#bfe8d6;font-size:10px}
#storyCanvasMask .sc-vjbar{flex:1;min-width:80px;height:7px;border-radius:999px;background:rgba(0,0,0,.45);box-shadow:inset 0 1px 3px rgba(0,0,0,.6);overflow:hidden}
#storyCanvasMask .sc-vjbar>i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#5fe0ae,#9affd1);box-shadow:0 0 12px rgba(154,255,209,.55);transition:width .45s var(--u-ez)}
#storyCanvasMask .sc-vjp{color:#bfe8d6;font-variant-numeric:tabular-nums}
#storyCanvasMask .sc-vje{color:#ffbcbc;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#storyCanvasMask .sc-vjpv{margin-top:6px}
/* ═══【N268】分镜工作台右栏紧凑化：模型/刷新/时长/分辨率/积分 一行内排布，不出现上下滚动 ═══ */
#scDetail .sc-sp-r{padding:8px 8px 6px}
#scDetail .sc-sp-r .sc-sp-box{padding:8px 10px 9px;margin-bottom:8px}
#scDetail .sc-sp-r .sc-sp-hd{font-size:12.5px;margin-bottom:3px}
#scDetail .sc-sp-r .sc-vsel-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:4px 0 0}
#scDetail .sc-sp-r .sc-vsel{flex:1 1 140px;min-width:118px;width:auto;padding:6px 24px 6px 10px;border-radius:10px;font-size:12.5px}
#scDetail .sc-sp-r .sc-vre{flex:0 0 auto;padding:6px 10px;border-radius:10px;font-size:11.5px}
#scDetail .sc-sp-r .sc-vdurw{flex:0 0 auto;padding:3px 8px;border-radius:10px;font-size:11.5px}
#scDetail .sc-sp-r .sc-vhint{flex:1 1 100%;margin:2px 0 0;font-size:10.5px;line-height:1.4}
#scDetail .sc-sp-r .sc-vjframe{height:196px;margin:6px 2px 4px}
#scDetail .sc-sp-r .sc-sp-row{gap:6px;margin-top:6px;flex-wrap:wrap}
#scDetail .sc-sp-r .sc-btn{height:30px;padding:0 12px;font-size:12px;flex:1 1 auto;min-width:84px}
#scDetail .sc-sp-r .sc-vcost{font-size:11px}
#scDetail .sc-sp-r .sc-vjcap{margin:4px 0 0;font-size:10.5px}
#storyCanvasMask .sc-vjv{width:100%;border-radius:12px;border:1px solid rgba(255,255,255,.1);box-shadow:0 14px 30px -16px rgba(0,0,0,.9);display:block}

/* ---------- @ 素材明细（四类分组） ---------- */
#storyCanvasMask .sc-atbox{border-radius:14px;background:linear-gradient(180deg,rgba(22,48,38,.75),rgba(9,25,19,.8));border:1px solid rgba(255,255,255,.07);box-shadow:var(--u-in);padding:8px 10px}
#storyCanvasMask .sc-atg{margin:6px 0 2px;padding:6px 8px;border-radius:12px;border:1px solid rgba(255,255,255,.06);background:rgba(6,20,15,.35)}
#storyCanvasMask .sc-atg.k-char{box-shadow:inset 2px 0 0 #9affd1}
#storyCanvasMask .sc-atg.k-env{box-shadow:inset 2px 0 0 #8fd0ff}
#storyCanvasMask .sc-atg.k-prop{box-shadow:inset 2px 0 0 #ffd68f}
#storyCanvasMask .sc-atg.k-voice{box-shadow:inset 2px 0 0 #ff9ad8}
#storyCanvasMask .sc-atg-hd{display:flex;align-items:center;gap:6px;font-size:11px;color:#cfeede;margin-bottom:4px}
#storyCanvasMask .sc-atg-n{margin-left:auto;font-size:10px;color:#7e9a8c;font-variant-numeric:tabular-nums}
#storyCanvasMask .sc-atrow{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
#storyCanvasMask .sc-achip,#storyCanvasMask .sc-pchip{
  display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:3px 8px;font-size:11px;cursor:pointer;
  border:1px solid rgba(255,255,255,.12);background:linear-gradient(180deg,rgba(30,62,50,.9),rgba(12,30,23,.95));color:#dcffee;
  box-shadow:var(--u-in),0 6px 14px -10px rgba(0,0,0,.9);
  transition:transform .14s var(--u-ez2),box-shadow .16s var(--u-ez),border-color .16s var(--u-ez),filter .16s var(--u-ez);
}
#storyCanvasMask .sc-achip:hover,#storyCanvasMask .sc-pchip:hover{transform:translateY(-1.5px);filter:brightness(1.1);border-color:rgba(154,255,209,.5)}
#storyCanvasMask .sc-achip:active,#storyCanvasMask .sc-pchip:active{transform:translateY(1px) scale(.97);transition-duration:.05s}
#storyCanvasMask .sc-achip img{width:18px;height:18px;border-radius:6px;object-fit:cover;box-shadow:0 0 0 1px rgba(255,255,255,.12)}
#storyCanvasMask .sc-achip.c-char{border-color:rgba(154,255,209,.45)}
#storyCanvasMask .sc-achip.c-env{border-color:rgba(143,208,255,.45)}
#storyCanvasMask .sc-achip.c-prop{border-color:rgba(255,214,143,.45)}
#storyCanvasMask .sc-achip.c-voice{border-color:rgba(255,154,216,.5)}
#storyCanvasMask .sc-achip em{font-style:normal;font-size:10px;color:#9fd8bf;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#storyCanvasMask .sc-achip u{text-decoration:none;margin-left:2px;width:16px;height:16px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:rgba(255,255,255,.08);font-size:10px;transition:background .14s var(--u-ez),transform .14s var(--u-ez2)}
#storyCanvasMask .sc-achip u:hover{background:rgba(255,120,120,.35);transform:scale(1.12)}
#storyCanvasMask .sc-atplay{width:16px;height:16px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(180deg,#8df3c8,#2fb586);color:#05231a;font-size:8px;box-shadow:0 4px 10px -6px rgba(47,181,134,.9)}
#storyCanvasMask .sc-atplay:hover{filter:brightness(1.1)}
#storyCanvasMask .sc-aempty2{font-size:10.5px;color:#6d8a7c}

/* ---------- AI 圈选提示 ---------- */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-aisel{margin:4px 0 6px;padding:5px 9px;border-radius:10px;f … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-aisel b{color:#dcffee} … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-aisel.on{border-style:solid;border-color:rgba(198,166,255,. … */
#storyCanvasMask .sc-sp-ed::selection,#storyCanvasMask .sc-sp-ed *::selection{background:rgba(198,166,255,.38);color:#fff}

/* ---------- 分镜工作台：拖动手柄 + 八向缩放 ---------- */
#scDetail{border-radius:20px;box-shadow:var(--u-sh3);transition:box-shadow .2s var(--u-ez),opacity .16s var(--u-ez)}
#scDetail.sc-free{position:absolute;max-width:none;max-height:none;resize:none}
#scDetail.sc-sizing{transition:none;box-shadow:0 0 0 2px rgba(154,255,209,.4),var(--u-sh3);user-select:none}
#scDetailGrip{
  display:flex;align-items:center;gap:8px;cursor:grab;user-select:none;
  padding:7px 12px 7px 12px;border-radius:20px 20px 0 0;
  background:linear-gradient(180deg,rgba(40,84,68,.95),rgba(16,40,30,.92));
  border-bottom:1px solid rgba(255,255,255,.07);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.09);
}
#scDetailGrip:active{cursor:grabbing}
#scDetail .sc-gdots{width:26px;height:8px;flex:0 0 26px;border-radius:4px;background:radial-gradient(circle,rgba(154,255,209,.85) 1.1px,transparent 1.3px) 0 0/6px 4px repeat;opacity:.65}
#scDetail .sc-glab{font-size:11.5px;font-weight:700;color:#dcffee;letter-spacing:.4px}
#scDetail .sc-ghint{margin-left:auto;margin-right:64px;font-size:10px;color:#7e9a8c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#scDetail .sc-rz{position:absolute;z-index:6;opacity:0;transition:opacity .16s var(--u-ez),background .16s var(--u-ez)}
#scDetail .sc-rz:hover{opacity:1;background:rgba(154,255,209,.22)}
#scDetail .sc-rz[data-rz="n"]{left:14px;right:14px;top:-4px;height:9px;cursor:ns-resize;border-radius:6px}
#scDetail .sc-rz[data-rz="s"]{left:14px;right:14px;bottom:-4px;height:9px;cursor:ns-resize;border-radius:6px}
#scDetail .sc-rz[data-rz="w"]{top:14px;bottom:14px;left:-4px;width:9px;cursor:ew-resize;border-radius:6px}
#scDetail .sc-rz[data-rz="e"]{top:14px;bottom:14px;right:-4px;width:9px;cursor:ew-resize;border-radius:6px}
#scDetail .sc-rz[data-rz="nw"]{left:-5px;top:-5px;width:16px;height:16px;cursor:nwse-resize;border-radius:8px}
#scDetail .sc-rz[data-rz="ne"]{right:-5px;top:-5px;width:16px;height:16px;cursor:nesw-resize;border-radius:8px}
#scDetail .sc-rz[data-rz="sw"]{left:-5px;bottom:-5px;width:16px;height:16px;cursor:nesw-resize;border-radius:8px}
#scDetail .sc-rz[data-rz="se"]{right:-5px;bottom:-5px;width:18px;height:18px;cursor:nwse-resize;border-radius:9px;opacity:.5;background:linear-gradient(135deg,transparent 45%,rgba(154,255,209,.55) 45%,rgba(154,255,209,.55) 55%,transparent 55%,transparent 70%,rgba(154,255,209,.4) 70%,rgba(154,255,209,.4) 80%,transparent 80%)}
#scDetail:hover .sc-rz{opacity:.55}
#storyCanvasMask .sc-sp-box{border-radius:16px;background:linear-gradient(180deg,rgba(26,56,45,.72),rgba(10,27,20,.82));border:1px solid rgba(255,255,255,.07);box-shadow:var(--u-in),0 12px 28px -20px rgba(0,0,0,.9);padding:10px 12px;margin-bottom:10px}
#storyCanvasMask .sc-sp-box.b-go{border-color:rgba(154,255,209,.28);box-shadow:var(--u-in),0 0 0 1px rgba(154,255,209,.1),0 16px 34px -22px rgba(47,181,134,.7)}
#storyCanvasMask .sc-sp-hd{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:#eafff4;letter-spacing:.3px}
#storyCanvasMask .sc-sp-st{margin-left:auto;font-weight:400;font-size:10px;color:#7e9a8c}
#storyCanvasMask .sc-sp-in{border-radius:12px;background:rgba(6,20,15,.62);border:1px solid rgba(255,255,255,.09);color:#dcffee;box-shadow:inset 0 2px 8px rgba(0,0,0,.45);transition:border-color .18s var(--u-ez),box-shadow .18s var(--u-ez)}
#storyCanvasMask .sc-sp-in:focus{outline:none;border-color:var(--u-mint);box-shadow:inset 0 2px 10px rgba(0,0,0,.5),0 0 0 2px rgba(154,255,209,.26)}
#storyCanvasMask .sc-sp-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
#storyCanvasMask .sc-sp-tip{font-size:10.5px;color:#8fb3a4;line-height:1.65}
#storyCanvasMask .sc-spx{border-radius:50%;width:26px;height:26px;transition:transform .16s var(--u-ez2),background .16s var(--u-ez)}
#storyCanvasMask .sc-spx:hover{transform:rotate(90deg) scale(1.06);background:rgba(255,120,120,.28)}

/* ---------- 资产面板 ---------- */
#storyCanvasMask .sc-agrp{border-radius:12px;padding:7px 10px;cursor:pointer;background:linear-gradient(180deg,rgba(28,60,48,.7),rgba(11,29,22,.78));border:1px solid rgba(255,255,255,.06);box-shadow:var(--u-in);transition:background .16s var(--u-ez),border-color .16s var(--u-ez),transform .14s var(--u-ez)}
#storyCanvasMask .sc-agrp:hover{border-color:rgba(154,255,209,.4);transform:translateX(2px)}
#storyCanvasMask .sc-agrp:active{transform:translateX(2px) scale(.99);transition-duration:.05s}
#storyCanvasMask .sc-caret{display:inline-block;width:12px;color:var(--u-mint);transition:transform .18s var(--u-ez)}
#storyCanvasMask .sc-abox{transition:opacity .18s var(--u-ez)}
#storyCanvasMask .sc-arow{border-radius:12px;transition:background .14s var(--u-ez),transform .14s var(--u-ez),box-shadow .16s var(--u-ez)}
#storyCanvasMask .sc-arow:hover{background:rgba(154,255,209,.08);transform:translateX(3px);box-shadow:inset 2px 0 0 var(--u-mint)}
#storyCanvasMask .sc-arow:active{transform:translateX(3px) scale(.995);transition-duration:.05s}
#storyCanvasMask .sc-arow img{border-radius:9px;box-shadow:0 6px 14px -10px rgba(0,0,0,.95),0 0 0 1px rgba(255,255,255,.08)}

/* ---------- 滚动条 / 脚注 / 连线 ---------- */
#storyCanvasMask ::-webkit-scrollbar{width:9px;height:9px}
#storyCanvasMask ::-webkit-scrollbar-thumb{border-radius:999px;background:linear-gradient(180deg,rgba(154,255,209,.35),rgba(154,255,209,.18));border:2px solid transparent;background-clip:padding-box}
#storyCanvasMask ::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,rgba(154,255,209,.6),rgba(154,255,209,.3));background-clip:padding-box}
#storyCanvasMask ::-webkit-scrollbar-track{background:rgba(0,0,0,.25);border-radius:999px}
#storyCanvasMask .sc-foot{border-radius:14px;background:linear-gradient(180deg,rgba(16,38,29,.86),rgba(8,22,17,.92));border:1px solid rgba(255,255,255,.06);box-shadow:var(--u-in),0 -6px 18px -14px rgba(0,0,0,.9);backdrop-filter:blur(6px)}
#storyCanvasMask #scWires path,#storyCanvasMask #scWiresTop path{transition:stroke .18s var(--u-ez),stroke-width .18s var(--u-ez),filter .18s var(--u-ez)}
#storyCanvasMask .sc-toast{border-radius:14px;box-shadow:var(--u-sh3);backdrop-filter:blur(8px)}
@media (prefers-reduced-motion:reduce){#storyCanvasMask *{animation-duration:.01ms !important;transition-duration:.01ms !important}}

/* 修25b：层级修复 + 手感/质感第二轮 */
#storyCanvasMask #scDetail{z-index:60}
#storyCanvasMask .sc-foot{z-index:12}
#storyCanvasMask #scAssets{z-index:70}
#storyCanvasMask #scMenu,#storyCanvasMask #scToast{z-index:90}
#storyCanvasMask #scDetail .sc-rz{z-index:75}
#storyCanvasMask #scDetail:hover .sc-rz{opacity:.9}
#storyCanvasMask #scDetail .sc-rz[data-rz="se"],
#storyCanvasMask #scDetail .sc-rz[data-rz="sw"],
#storyCanvasMask #scDetail .sc-rz[data-rz="ne"],
#storyCanvasMask #scDetail .sc-rz[data-rz="nw"]{width:22px;height:22px}

/* 面板弹出动画 */
@keyframes u25Pop{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}
#storyCanvasMask #scDetail{animation:u25Pop .24s var(--u-ez2) both;transform-origin:50% 100%}
#storyCanvasMask #scDetail.sc-sizing{animation:none}
@keyframes u25In{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
#storyCanvasMask #scAssets{animation:u25In .2s var(--u-ez) both}
#storyCanvasMask #scMenu{animation:u25Pop .16s var(--u-ez2) both;transform-origin:0 0}

/* 拖拽手感：抓起来有重量 */
#storyCanvasMask .sc-node{cursor:grab}
#storyCanvasMask .sc-node:active{cursor:grabbing}
#storyCanvasMask .sc-node.sc-sel:active{box-shadow:inset 3px 0 0 var(--k),0 22px 44px rgba(0,0,0,.55),0 0 0 1px rgba(255,255,255,.09),0 0 26px -6px var(--k)}
#storyCanvasMask .sc-node .sc-itxt,#storyCanvasMask .sc-node .sc-edit,#storyCanvasMask .sc-node select,#storyCanvasMask .sc-node button{cursor:auto}
#storyCanvasMask .sc-node button,#storyCanvasMask .sc-node .sc-sbtn{cursor:pointer}

/* 连线：悬停变粗发光 */
#storyCanvasMask #scWires path,#storyCanvasMask #scWiresTop path{transition:stroke-width .16s var(--u-ez),opacity .16s var(--u-ez)}
#storyCanvasMask #scWires path:hover,#storyCanvasMask #scWiresTop path:hover{stroke-width:3.2}

/* 输入焦点环更柔 */
#storyCanvasMask .sc-itxt:focus,#storyCanvasMask .sc-edit:focus,#storyCanvasMask .sc-shot-pr:focus,#storyCanvasMask #scAiIn:focus{outline:none;border-color:rgba(154,255,209,.55);box-shadow:inset 0 2px 8px rgba(0,0,0,.45),0 0 0 3px rgba(154,255,209,.14)}

/* 下拉框质感 */
#storyCanvasMask select.sc-vsel,#storyCanvasMask select.sc-msel,#storyCanvasMask select.sc-vsel-mini{background-image:linear-gradient(180deg,rgba(255,255,255,.07),rgba(255,255,255,.02));border-radius:10px;transition:border-color .16s var(--u-ez),box-shadow .16s var(--u-ez),transform .12s var(--u-ez)}
#storyCanvasMask select.sc-vsel:hover,#storyCanvasMask select.sc-msel:hover,#storyCanvasMask select.sc-vsel-mini:hover{border-color:rgba(154,255,209,.5)}
#storyCanvasMask select.sc-vsel:active{transform:translateY(1px)}

/* 素材缩略图微提升 */
#storyCanvasMask .sc-thumb{transition:transform .26s var(--u-ez),filter .26s var(--u-ez)}
#storyCanvasMask .sc-node:hover .sc-thumb{transform:scale(1.035);filter:saturate(1.08)}

@media (prefers-reduced-motion:reduce){
  #storyCanvasMask #scDetail,#storyCanvasMask #scAssets,#storyCanvasMask #scMenu{animation:none}
  #storyCanvasMask .sc-node:hover .sc-thumb{transform:none}
}

/* ================= 修26：极细框 · 超透明 · 鼠标划到荧光 ================= */
:root{--u26-line:rgba(255,255,255,.10);--u26-line2:rgba(154,255,209,.20);--u26-glow:0 0 0 1px rgba(154,255,209,.34),0 0 18px rgba(154,255,209,.16)}
#storyCanvasMask .sc-node,#storyCanvasMask .sc-sp-box,#storyCanvasMask .sc-atbox,#storyCanvasMask .sc-sp-ed,#storyCanvasMask .sc-shot-pr,#storyCanvasMask .sc-itxt,#storyCanvasMask .sc-sp-in,#storyCanvasMask #scDetail.sc-max{
  border-width:1px!important;border-style:solid!important;border-color:var(--u26-line)!important;
  background-color:rgba(8,18,14,.40)!important;
  backdrop-filter:blur(10px) saturate(1.05);-webkit-backdrop-filter:blur(10px) saturate(1.05);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.04),0 12px 28px -20px rgba(0,0,0,.9)!important;
}
#storyCanvasMask .sc-node:hover,#storyCanvasMask .sc-sp-box:hover,#storyCanvasMask .sc-atbox:hover,#storyCanvasMask .sc-shot-pr:hover,#storyCanvasMask .sc-itxt:hover{
  border-color:var(--u26-line2)!important;box-shadow:var(--u26-glow)!important;
}
#storyCanvasMask .sc-node.sc-sel{border-color:var(--k)!important;box-shadow:inset 2px 0 0 var(--k),0 0 0 1px var(--k),0 0 24px rgba(154,255,209,.26)!important}
#storyCanvasMask .sc-shot .sc-shot-hd{border-bottom:1px solid var(--u26-line);background:rgba(255,255,255,.018)}
#storyCanvasMask .sc-sbtn,#storyCanvasMask .sc-btn{border:1px solid var(--u26-line)!important;background-color:rgba(255,255,255,.03)!important}
#storyCanvasMask .sc-sbtn:hover,#storyCanvasMask .sc-btn:hover{border-color:var(--u26-line2)!important;box-shadow:var(--u26-glow)!important}
/* ①② @ 区单条式 + 提示词滚动条 */
#storyCanvasMask .sc-sp-ed{min-height:0;overflow-y:auto!important;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:rgba(154,255,209,.42) rgba(255,255,255,.05)}
#storyCanvasMask .sc-sp-ed::-webkit-scrollbar{width:10px}
#storyCanvasMask .sc-sp-ed::-webkit-scrollbar-track{background:rgba(255,255,255,.04);border-radius:10px}
#storyCanvasMask .sc-sp-ed::-webkit-scrollbar-thumb{background:linear-gradient(180deg,rgba(154,255,209,.55),rgba(154,255,209,.22));border:2px solid transparent;background-clip:padding-box;border-radius:10px}
#storyCanvasMask .sc-sp-ed::-webkit-scrollbar-thumb:hover{background:rgba(154,255,209,.75);background-clip:padding-box}
#storyCanvasMask .sc-atbox .sc-atrow{margin-bottom:6px}
#storyCanvasMask .sc-atadd{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding-top:8px;border-top:1px solid var(--u26-line)}
#storyCanvasMask .sc-atadd-l{font-size:10.5px;color:#7e9a8c;letter-spacing:.04em}
#storyCanvasMask .sc-pchip{border-style:dashed!important;background:transparent!important}
#storyCanvasMask .sc-achip{background:rgba(154,255,209,.05)!important}
#storyCanvasMask .sc-achip img,#storyCanvasMask .sc-achip .sc-anoimg{width:22px;height:22px;border-radius:7px;display:inline-block;border:1px solid var(--u26-line);object-fit:cover}
#storyCanvasMask .sc-achip em.sc-achip-v{font-size:9.5px;color:#ff9ecb;opacity:.9;font-style:normal}
#storyCanvasMask .sc-atplay{cursor:pointer;padding:0 5px;border:1px solid rgba(255,158,203,.42);border-radius:6px;color:#ff9ecb;font-size:10px;line-height:15px}
#storyCanvasMask .sc-atplay.on{background:#ff9ecb;color:#22101a}
#storyCanvasMask .sc-aempty2{font-size:10.5px;color:#6d8a7c}
/* 正文内联 @ 标记 + 圈选常驻高亮 + 聚焦模式 */
#storyCanvasMask .sc-attok{font-weight:700;color:#9affd1;background:rgba(154,255,209,.10);border:1px solid rgba(154,255,209,.30);border-radius:5px;padding:0 3px;margin:0 1px}
/* 【N311】@素材按类别分色：与素材芯片(.c-char/.c-env/.c-prop/.c-voice)、参考图卡片、画布连线图例同一套色 */
#storyCanvasMask .sc-attok.k-env{color:#8fd0ff;background:rgba(143,208,255,.10);border-color:rgba(143,208,255,.32)}
#storyCanvasMask .sc-attok.k-prop{color:#ffd68f;background:rgba(255,214,143,.10);border-color:rgba(255,214,143,.32)}
#storyCanvasMask .sc-attok.k-voice{color:#ff9ad8;background:rgba(255,154,216,.10);border-color:rgba(255,154,216,.34)}
#storyCanvasMask .sc-attok.k-img{color:#c6a8ff;background:rgba(198,168,255,.10);border-color:rgba(198,168,255,.32)}
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-aihl{text-decoration:none;background:linear-gradient(180deg … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-sp-ed.sc-aifocus{color:rgba(230,251,241,.5)} … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-sp-ed.sc-aifocus .sc-attok{opacity:.5} … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-sp-ed.sc-aifocus .sc-aihl{color:#eafff3} … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-sp-ed.sc-aifocus .sc-aihl .sc-attok{opacity:1} … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-aisel{display:flex;flex-wrap:wrap;align-items:center;gap:6p … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-aisel.on{color:#eafff3} … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-aiseg{max-width:210px;overflow:hidden;text-overflow:ellipsi … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-aisn{padding:1px 6px;border:1px solid rgba(154,255,209,.3); … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-aigo,#storyCanvasMask .sc-aix{cursor:pointer;padding:1px 7p … */
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask .sc-aigo:hover,#storyCanvasMask .sc-aix:hover{border-color:rgba … */
/* ⑤⑥ 拖角放大手柄 */
#storyCanvasMask .sc-przw{position:relative;margin:6px 12px 8px}
#storyCanvasMask .sc-przw>.sc-shot-pr{margin:0!important;max-height:none!important}
#storyCanvasMask .sc-cimg .sc-przw{margin:0}
#storyCanvasMask .sc-itxt{min-height:56px!important;max-height:none!important;font-size:11.5px;line-height:1.6}
#storyCanvasMask .sc-prz{position:absolute;right:4px;bottom:4px;width:13px;height:13px;cursor:nwse-resize;opacity:.42;z-index:9;color:#9affd1;
  background:linear-gradient(135deg,transparent 42%,currentColor 42%,currentColor 52%,transparent 52%,transparent 68%,currentColor 68%,currentColor 78%,transparent 78%)}
#storyCanvasMask .sc-prz:hover{opacity:1;filter:drop-shadow(0 0 6px rgba(154,255,209,.85))}
/* 【N368】被独奏锁定的那一格：加一个醒目的「独奏」角标（只标状态，不改题材文字 —— 用户要求"四格显示一个字不动"） */

/* ══【N367】提示词区**默认折叠** + 右上角「展开/收起」（用户："展开最大化更改为最小化即可、目前太长了"）══ */
#storyCanvasMask .sc-przt{position:absolute;right:4px;top:4px;z-index:10;height:18px;padding:0 8px;border-radius:6px;border:1px solid rgba(154,255,209,.34);background:rgba(8,18,14,.86);color:#a8f0cd;font-size:10px;line-height:16px;cursor:pointer;opacity:.72;transition:.15s;white-space:nowrap}
#storyCanvasMask .sc-przt:hover{opacity:1;background:rgba(141,255,199,.16);border-color:rgba(141,255,199,.72)}
#storyCanvasMask .sc-przw.is-clp>.sc-shot-pr,#storyCanvasMask .sc-przw.is-clp>.sc-itxt{-webkit-mask-image:linear-gradient(#000 68%,rgba(0,0,0,.12));mask-image:linear-gradient(#000 68%,rgba(0,0,0,.12))}
#storyCanvasMask .sc-przw.is-clp>.sc-shot-pr::-webkit-scrollbar,#storyCanvasMask .sc-przw.is-clp>.sc-itxt::-webkit-scrollbar{width:0}
body.sc-rzing,body.sc-rzing *{cursor:nwse-resize!important;user-select:none!important}
/* ⑦ 类别单字标记（人/景/物/音），删掉数字与空横条 */
#storyCanvasMask .sc-ic{width:auto!important;min-width:15px;height:15px;flex:0 0 auto!important;padding:0 3px;box-sizing:border-box;border:1px solid currentColor;border-radius:3px;
  font-size:9.5px;font-style:normal;font-weight:600;line-height:13px;letter-spacing:0;opacity:.78;background:rgba(255,255,255,.03);margin-right:5px;vertical-align:-2px;text-align:center}
#storyCanvasMask .sc-ic svg{display:none}
#storyCanvasMask .sc-capwrap{width:auto!important}
#storyCanvasMask .sc-cap{display:inline-flex;align-items:center;padding:1px 2px!important;background:transparent!important;border:0!important;box-shadow:none!important}
#storyCanvasMask .sc-cap .sc-ic{margin-right:0;opacity:.62}
/* ⑧ 音频节点试听 */
#storyCanvasMask .sc-vrow{display:flex;gap:6px;padding:0 10px 9px}
#storyCanvasMask .sc-vplay{font-size:10.5px;padding:3px 9px;border-radius:9px;color:#ffd9ec!important;border-color:rgba(255,158,203,.35)!important}
#storyCanvasMask .sc-vplay:hover{border-color:rgba(255,158,203,.7)!important;box-shadow:0 0 0 1px rgba(255,158,203,.45),0 0 16px rgba(255,158,203,.28)!important}
#storyCanvasMask .sc-vplay.on{background:rgba(255,158,203,.9)!important;color:#22101a!important;border-color:#ff9ecb!important}
/* ================= 物料页：左栏加宽 · 右栏变窄整行 · 徐章缩小 · 极细框 ================= */
.extract-material{grid-template-columns:288px minmax(0,1fr) 300px!important}
@media(max-width:1180px){.extract-material{grid-template-columns:264px minmax(0,1fr) 288px!important}}
@media(max-width:980px){.extract-material{grid-template-columns:240px minmax(0,1fr) 276px!important}}
@media(max-width:720px){.extract-material{grid-template-columns:1fr!important}}
.asset-rail{padding-left:16px!important;padding-right:16px!important}
.mat-item:hover{border-color:rgba(154,255,209,.35)!important;box-shadow:var(--u26-glow)!important}
.mat-badges .mb{font-size:8.5px!important;font-weight:500!important;padding:1px 4px!important;line-height:12px!important;border-radius:3px!important;letter-spacing:0!important;
  background:rgba(255,255,255,.04)!important;border:1px solid rgba(255,255,255,.16)!important;box-shadow:none!important;opacity:.92;animation:none!important}
.mb-txt,.mb-txt.mb-ok{color:#a8dcf0!important;border-color:rgba(111,208,232,.42)!important;background:rgba(111,208,232,.07)!important}
.mb-voice,.mb-voice.mb-ok{color:#ffcda4!important;border-color:rgba(255,168,102,.42)!important;background:rgba(255,168,102,.07)!important}
.mb-img,.mb-img.mb-ok{color:#aef7de!important;border-color:rgba(91,232,185,.42)!important;background:rgba(91,232,185,.07)!important}
.mb-final{color:#ffe39b!important;border-color:rgba(244,194,70,.5)!important;background:rgba(244,194,70,.08)!important}
.mb-err{color:#ffc0c0!important;border-color:rgba(255,110,110,.45)!important;background:rgba(255,110,110,.07)!important}
.prompt-rail .ratio-group{display:grid!important;grid-template-columns:repeat(5,1fr);gap:6px!important}
.prompt-rail .ratio-btn{width:100%;text-align:center;padding:6px 0!important}
.prompt-rail .res-chip{margin:2px 0!important;text-align:center}
.prompt-rail .prompt-block,.prompt-rail .model-select-block,.prompt-rail .ratio-block{padding-left:14px!important;padding-right:14px!important}
.prompt-rail .vprompt,.prompt-rail .command-input,.prompt-rail .model-select-native,.prompt-rail .prompt-main,.prompt-rail .prompt-secondary{width:100%!important;box-sizing:border-box}
.local-material,.stage-generate{margin-left:14px!important;margin-right:14px!important;width:calc(100% - 28px)!important}
.extract-material .prompt-block,.extract-material .model-select-block,.extract-material .ratio-block,.extract-material .brief-box,.extract-material .material-canvas,
.extract-material .vprompt,.extract-material .command-input,.extract-material .model-select-native,.extract-material .ratio-btn,.extract-material .local-material,.extract-material .multi-toggle{
  border-width:1px!important;border-color:var(--u26-line)!important;background-color:rgba(255,255,255,.022)!important}
.extract-material .vprompt:hover,.extract-material .command-input:hover,.extract-material .ratio-btn:hover,.extract-material .model-select-native:hover,
.extract-material .local-material:hover,.extract-material .multi-toggle:hover,.extract-material .brief-box:hover{border-color:rgba(154,255,209,.38)!important;box-shadow:var(--u26-glow)!important}
.extract-material .prompt-main:hover,.extract-material .stage-generate:hover,.extract-material .prompt-secondary:hover{box-shadow:0 0 0 1px rgba(141,255,199,.5),0 0 22px rgba(94,255,202,.26)!important;transform:translateY(-1px)!important}

/* 修26b：最大化面板里的文本区也可用右下角竖向拖大 */
#storyCanvasMask .sc-sp-ed{resize:vertical;min-height:120px}
#storyCanvasMask .sc-sp-in{resize:vertical}
#storyCanvasMask .sc-sp-ed::-webkit-resizer{background:transparent}

/* 修26c：最大化面板不再透出背后的画布内容，保证文字可读 */
/* =====【N30②】物料工具行拍平为一行（裁切·下载·本地物料·定稿），不再错乱换行 ===== */
.canvas-tools{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
.canvas-tools::-webkit-scrollbar{display:none}
.canvas-tools-row{display:contents}
.canvas-tools .crop-btn,.canvas-tools .download-btn,.canvas-tools .local-material,.canvas-tools .finalize-btn{flex:0 0 auto;white-space:nowrap}
/* =====【N30④】工作台内滚断链修复：提示词区独立滚动、右列也可滚 ===== */
#storyCanvasMask #scDetailBody{height:100%;min-height:0;overflow:hidden;display:flex}
#storyCanvasMask .sc-sp{min-height:0;width:100%}
#storyCanvasMask .sc-sp-l,#storyCanvasMask .sc-sp-r{min-height:0}
#storyCanvasMask .sc-sp-r{overflow-y:auto;scrollbar-width:thin}
/* =====【N30⑥】面板关闭 ×：绿色系 · 骑右上边框 ===== */
/* 【N266】关闭按钮：从面板边框挪到顶部按钮条右端，改倒角胶囊型（原来 top:-16px 骑在面板上、遮挡内容） */
#storyCanvasMask .sc-spx{position:fixed;right:8px;top:36px;width:auto!important;min-width:52px;height:26px!important;padding:0 12px;
  display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;line-height:1;letter-spacing:.02em;
  border-radius:999px!important;z-index:9999;box-shadow:0 8px 22px -12px rgba(0,0,0,.95);background:linear-gradient(180deg,#9ff0c8,#5f9f84)!important;border:1px solid rgba(154,255,209,.55)!important;color:#08231a!important;font-size:16px;font-weight:700;box-shadow:0 6px 20px rgba(0,0,0,.5);line-height:32px}
#storyCanvasMask .sc-spx:hover{background:linear-gradient(180deg,#c2ffe2,#7ccb9f)!important;transform:translateY(-1px) scale(1.05)}
/* =====【N30⑩】框选共用加号 ===== */
#scMultiPlus{display:none;position:absolute;z-index:220;width:44px;height:44px;border-radius:50%;align-items:center;justify-content:center;background:linear-gradient(180deg,#9ff0c8,#5f9f84);border:2px solid rgba(154,255,209,.6);color:#08231a;font-size:24px;font-weight:700;cursor:pointer;box-shadow:0 8px 24px rgba(0,0,0,.55),0 0 18px rgba(127,240,192,.35);transition:transform .15s}
#scMultiPlus:hover{transform:scale(1.12)}
#storyCanvasMask #scDetail.sc-max,#storyCanvasMask #scDetail{
  background-color:rgba(6,14,11,.95)!important;
  backdrop-filter:blur(26px) saturate(1.12)!important;-webkit-backdrop-filter:blur(26px) saturate(1.12)!important;
  box-shadow:0 50px 140px -50px #000,0 0 0 1px rgba(255,255,255,.07),inset 0 1px 0 rgba(255,255,255,.05)!important;
}
#storyCanvasMask #scDetail .sc-sp-box,#storyCanvasMask #scDetail .sc-atbox{
  background-color:rgba(13,25,20,.92)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
}
#storyCanvasMask #scDetail .sc-sp-ed,#storyCanvasMask #scDetail .sc-sp-in,
#storyCanvasMask #scDetail .sc-shot-pr,#storyCanvasMask #scDetail .sc-itxt,#storyCanvasMask #scDetail textarea,#storyCanvasMask #scDetail select{
  background-color:rgba(4,11,9,.97)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
}
#storyCanvasMask #scAssets,#storyCanvasMask #scAssetsBody{background-color:rgba(6,14,11,.95)!important;backdrop-filter:blur(24px)!important;-webkit-backdrop-filter:blur(24px)!important}
#storyCanvasMask #scDetail .sc-achip{background:rgba(154,255,209,.10)!important}
#storyCanvasMask #scDetail .sc-pchip{background:rgba(255,255,255,.03)!important}

/* 【N194】全新纯色微动底图（完全舍弃视频画面）：
   深墨绿纯色底 + 两团极淡翡翠光晕（≈5%）30 秒缓慢呼吸漂移；纯 CSS，零图片零视频零解码 */
/* 【N399e·用户："努力成长 的背景怎么不见了？？自检！" —— 自检结论】
   根因就在下面这条 N194 规则：它把 `.script-video`（＝4-背景-剧本生长-lite.mp4，破土发芽那支）
   也一起 display:none 了 → 剧本页（「努力成长」那一屏）背后只剩纯色底 + 极淡光晕，视频看起来"不见了"。
   现按用户要求**只把这支放出来**，其余仍按 N194 保持隐藏（提取素材 / 旧灵感发芽 / 分镜装载 / 账户页）。
   视频自带的淡入淡出（.script-tail / .script-fade）、层级（视频 z-index:0，内容 z-index:2）都是现成的，一行未改。 */
.extract-video,.seed-video,.sb-loading-video,.acct-bgvid{display:none !important}
@keyframes lcGlowDrift{0%{transform:scale(1) translate(0,0)}50%{transform:scale(1.08) translate(0.5%,-0.35%)}100%{transform:scale(1) translate(0,0)}}
.script-page::before,.extract-loading::before,#busy::before,.storyboard-loading::before,#acctRoot::before{
  content:'';position:absolute;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(62% 52% at 28% 30%,rgba(126,255,197,.065),transparent 70%),
    radial-gradient(52% 46% at 74% 68%,rgba(111,247,192,.05),transparent 72%),
    #060e0b;
  animation:lcGlowDrift 30s ease-in-out infinite;
}
@media (prefers-reduced-motion:reduce){.script-page::before,.extract-loading::before,#busy::before,.storyboard-loading::before,#acctRoot::before{animation:none}}

/* 【N195】剧本·圈选高亮（一选一色·永不消失）+ 右侧 AI 修改区 */
/* 【N200】圈选高亮再改：无底色，彩框渲染，字面零遮挡 */
/* 【修329】彩框加粗（用户反馈：多彩框 0.5px 太细不明显，要求加粗边框）：线宽 0.5px→2px、透明度→.95，
   内衬同步加到 3px/5px —— 边框与字面之间留 1px 净空，仍然字面零遮挡；行内元素垂直内衬不影响行高。 */

.lc-sap{position:relative;width:340px;flex:0 0 340px;align-self:flex-start;max-height:100%;overflow-y:auto;padding:12px 14px;border-radius:20px;background:linear-gradient(150deg,rgba(20,34,26,.93),rgba(9,17,13,.91));border:1px solid rgba(154,255,209,.22);box-shadow:0 18px 40px rgba(5,12,8,.5);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);display:flex;flex-direction:column;gap:7px}
.lc-sap-head{font-size:13px;font-weight:700;color:#cfe6d8;letter-spacing:.08em}
.lc-sap-chip{font-size:11px;color:#9fffce;background:rgba(126,255,197,.08);border:1px solid rgba(154,255,209,.25);border-radius:9px;padding:6px 9px;line-height:1.5}
.lc-sap-cmd{min-height:76px;resize:vertical;background:rgba(6,14,11,.72);border:1px solid rgba(154,255,209,.18);border-radius:12px;color:#dff2e6;font-size:12.5px;padding:9px 11px;line-height:1.55;font-family:inherit}
.lc-sap-cmd:focus{outline:none;border-color:rgba(154,255,209,.45)}
/* 【N217】选择全文：深绿高透无边框倒角块 */
/* 【N233】选择全文按钮已删（与"不圈=改全文"重复） */
.lc-sap-all:hover{background:rgba(56,140,100,.42);color:#e2ffef;box-shadow:0 0 12px rgba(110,247,184,.25)}
.lc-sap-all:active{transform:translateY(1px)}
.lc-sap-run{padding:10px 12px;border-radius:12px;border:0;cursor:pointer;font-size:13px;font-weight:700;color:#0a1712;background:linear-gradient(135deg,#9fffcf,#6ef7b8);box-shadow:0 6px 18px rgba(110,247,184,.25)}
.lc-sap-run:disabled{opacity:.55;cursor:default}
/* 【修355】空白剧本 AI 对标创作：生成中可点「停止」中断请求 */
.lc-sap-stop{padding:10px 12px;border-radius:12px;cursor:pointer;font-size:13px;font-weight:700;color:#ffd9d9;background:rgba(255,90,80,.14);border:1px solid rgba(255,120,120,.45)}
.lc-sap-stop:hover:enabled{background:rgba(255,90,80,.22);border-color:rgba(255,130,120,.65)}
.lc-sap-stop:disabled{opacity:.45;cursor:default}
.lc-sap-clear{padding:8px 10px;border-radius:11px;cursor:pointer;font-size:12px;color:#8fa89b;background:transparent;border:1px solid rgba(154,255,209,.20);transition:all .18s ease}
.lc-sap-clear:hover{color:#cff5df;border-color:rgba(154,255,209,.45);background:rgba(126,255,197,.06)}
/* 【N227/N231】撤销/重做 —— 【修358】搬到剧本页顶栏，规格对齐画布那套
   （画布：#storyCanvasMask .sc-btn.sc-history，见 3159-3176 那组规则）。
   下面每条属性都取自画布：--ui-h=32px、padding:0 11px、tabular-nums（计数不抖动）、
   ghost 透明底、:disabled{color:--ui-ink4;opacity:.75;cursor:not-allowed}。
   画布变量 --ui-* 定义在 #storyCanvasMask 作用域内（3135-3142），剧本页取不到，
   故这里写等值字面量。 */
.lc-hist-row{display:flex;align-items:center;gap:6px;flex:0 0 auto;margin:0}
.lc-hist{flex:0 0 auto;min-width:0;white-space:nowrap;font-variant-numeric:tabular-nums;
  height:32px;padding:0 11px;border-radius:8px;border:1px solid transparent;background:transparent;
  color:#d0d6e0;font-size:12.5px;font-weight:500;line-height:1;cursor:pointer;
  display:inline-flex;align-items:center;gap:7px;
  transition:background 180ms cubic-bezier(.2,.7,.3,1),color 180ms cubic-bezier(.2,.7,.3,1),
             border-color 180ms cubic-bezier(.2,.7,.3,1),transform 180ms cubic-bezier(.2,.7,.3,1)}
.lc-hist:hover:enabled{background:rgba(255,255,255,.06);border-color:rgba(154,255,209,.28);color:#eafff3}
.lc-hist:active:enabled{transform:translateY(1px)}
.lc-hist:focus-visible{outline:2px solid rgba(154,255,209,.6);outline-offset:2px}
.lc-hist:disabled{color:#62666d;background:transparent;border-color:transparent;cursor:not-allowed;box-shadow:none;opacity:.75}
/* 分组竖线：与画布 .sc-ui-sep（1px × 18px）同规格 */
.lc-hist-sep{width:1px;height:18px;background:rgba(154,255,209,.22);flex:0 0 auto;opacity:.9}
/* 【N228b】剧本编辑锁：锁=灰色实心+红调底（只读）；笔=纯透明（可直接改字） */
.lc-editlock{position:absolute;top:16px;right:388px;z-index:55;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border-radius:12px;cursor:pointer;transition:all .2s ease}
.lc-editlock svg{width:16px;height:16px}
.lc-editlock.locked{border:1px solid rgba(255,120,120,.40);background:rgba(255,90,80,.13);color:#a9b6ae}
.lc-editlock.locked svg{color:#a9b6ae}
.lc-editlock.locked:hover{border-color:rgba(255,130,120,.65);background:rgba(255,90,80,.20);box-shadow:0 0 12px rgba(255,90,80,.28)}
.lc-editlock.editing{border:1px solid transparent;background:transparent;color:#d8efe2}
.lc-editlock.editing svg{color:#d8efe2}
.lc-editlock.editing:hover{background:rgba(126,255,197,.07)}
#scriptText[contenteditable="true"]{outline:none;cursor:text;caret-color:#bff0d6;box-shadow:inset 0 0 0 1px rgba(255,200,120,.35);border-radius:8px}
/* 【修329】空白剧本页＝"真的可写的空白页"：编辑态给足可点击高度（空 <pre> 只有 15px 高，鼠标点不进去）；
   空稿占位提示用 ::before 呈现——纯视觉、不进 textContent，不会污染剧本/字数/物料提取。 */
#scriptText[contenteditable="true"]{min-height:min(46vh,430px)}
#scriptText[contenteditable="true"]:empty::before{content:'这是一张空白剧本页：可以直接在这里写；也可以在右边「AI 修改区」写要求让 AI 代写或改写，写好点右上「下一步」继续。';color:rgba(246,247,239,.34);pointer-events:none;white-space:pre-wrap}
.lc-sap-status{font-size:11px;color:#9fffce;min-height:16px;white-space:pre-wrap}
/* 【N201】图示教程（填右栏下方空区） */
.lc-sap{height:100%}
/* 【N232】教程瘦身：纯文字分色要点 · 行距压小 · 一屏放下 */
.lc-sap-guide{flex:1 1 auto;min-height:0;overflow-y:auto;border-top:1px solid rgba(154,255,209,.14);padding-top:8px;display:flex;flex-direction:column;gap:6px}
.lc-sg-title{font-size:11.5px;font-weight:700;color:#9fffce;letter-spacing:.06em}
.lc-sg-demo,.lc-sg-doc,.lc-sg-bar,.lc-sg-row,.lc-sg-cur,.lc-sg-selbar,.lc-sg-cap{display:none}
.lc-sg-steps{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px;font-size:11.5px;line-height:1.45;color:#c3d8ca}
.lc-sg-steps li{position:relative;padding-left:12px}
.lc-sg-steps li::before{content:'';position:absolute;left:0;top:6px;width:5px;height:5px;border-radius:50%;background:currentColor}
.lc-sg-steps li.c0{color:#9fffce}.lc-sg-steps li.c1{color:#ffd9a8}.lc-sg-steps li.c2{color:#e0b8ff}.lc-sg-steps li.c3{color:#ff9f9f}.lc-sg-steps li.c4{color:#8fd6ff}.lc-sg-steps li.c5{color:#d8efe2}.lc-sg-steps li.c6{color:#ffe07a}
.lc-sg-steps li b{font-weight:700}
.lc-sg-steps li.c0 b{color:#b8ffd8}.lc-sg-steps li.c1 b{color:#ffe7c2}.lc-sg-steps li.c2 b{color:#edd4ff}.lc-sg-steps li.c3 b{color:#ffc4c4}.lc-sg-steps li.c4 b{color:#b5e6ff}.lc-sg-steps li.c5 b{color:#eafff3}.lc-sg-steps li.c6 b{color:#fff0b8}
/* 【N235b】徽标已撤：右栏布局恢复原样 */
/* 【N237】简介卡可编辑：悬停虚光、聚焦实光，布局零位移 */
#materialBrief{outline:none;border-radius:8px;transition:box-shadow .2s ease}
#materialBrief:hover{box-shadow:inset 0 0 0 1px rgba(154,255,209,.28)}
#materialBrief:focus{box-shadow:inset 0 0 0 1px rgba(154,255,209,.6)}
/* 【N238】提示词双击全屏编辑器 */
.lc-pz-mask{position:fixed;inset:0;z-index:9999;background:rgba(4,10,7,.78);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .18s ease}
.lc-pz-mask.on{opacity:1}
.lc-pz{width:min(1100px,92vw);height:min(82vh,860px);display:flex;flex-direction:column;background:linear-gradient(150deg,rgba(20,34,26,.97),rgba(9,17,13,.96));border:1px solid rgba(154,255,209,.35);border-radius:18px;box-shadow:0 30px 80px rgba(0,0,0,.6);padding:16px 18px;transform:scale(.97);transition:transform .18s ease}
.lc-pz-mask.on .lc-pz{transform:scale(1)}
.lc-pz-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px}
.lc-pz-title{font-size:14px;font-weight:700;color:#9fffce;letter-spacing:.08em}
.lc-pz-count{font-size:11px;color:#7fa192}
.lc-pz-ta{flex:1;resize:none;border-radius:12px;border:1px solid rgba(154,255,209,.25);background:rgba(6,14,11,.6);color:#dff3e7;font-size:13.5px;line-height:1.75;padding:14px 16px;outline:none}
.lc-pz-ta:focus{border-color:rgba(154,255,209,.55)}
.lc-pz-foot{display:flex;gap:10px;justify-content:flex-end;margin-top:12px;align-items:center}
.lc-pz-tip{margin-right:auto;font-size:11px;color:#7fa192}
.lc-pz-btn{padding:9px 22px;border-radius:11px;cursor:pointer;font-size:12.5px;font-weight:700;letter-spacing:.06em;border:1px solid rgba(154,255,209,.3);background:transparent;color:#cfe9db}
.lc-pz-btn:hover{background:rgba(126,255,197,.08)}
.lc-pz-btn.go{background:linear-gradient(135deg,#9fffcf,#6ef7b8);color:#0a1712;border:0}
.lc-pz-btn.go:hover{box-shadow:0 4px 16px rgba(110,247,184,.35)}
/* 【N239】⛶ 最大化角标：悬停浮现，单击即全屏；布局零位移 */
.prompt-block{position:relative}
.lc-pz-max{position:absolute;top:38px;right:12px;z-index:3;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:7px;border:1px solid rgba(154,255,209,.32);background:rgba(6,14,11,.78);color:#9fd8b8;cursor:pointer;opacity:0;transition:opacity .18s ease,background .18s ease,border-color .18s ease;padding:0}
.prompt-block:hover .lc-pz-max,.lc-pz-max:focus{opacity:1}
.lc-pz-max:hover{color:#e2ffef;border-color:rgba(154,255,209,.62);background:rgba(126,255,197,.14)}
.lc-pz-max svg{width:12px;height:12px}
/* 【N196】左右双栏：左=剧本框（框内上下滚动）· 右=AI框（位置不动） */
.script-shell{position:relative;display:flex;gap:14px;align-items:stretch;height:calc(100vh - 150px);padding:0 18px 16px}
/* 【N204】下载剧本：画布内 · 红色高透 · 3D 斜面质感 · 悬停荧光 */
.lc-dl{position:absolute;top:16px;right:436px;z-index:55;padding:8px 16px;border-radius:12px;cursor:pointer;font-size:12.5px;font-weight:700;letter-spacing:.04em;color:#ffe9e9;background:linear-gradient(145deg,rgba(255,82,82,.34),rgba(178,34,52,.20));border:1px solid rgba(255,120,120,.55);box-shadow:inset 0 1px 0 rgba(255,255,255,.35),inset 0 -2px 4px rgba(120,10,20,.35),0 4px 10px rgba(120,10,20,.35);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);text-shadow:0 1px 2px rgba(60,0,0,.5);transition:all .2s ease}
.lc-dl:hover{color:#fff;background:linear-gradient(145deg,rgba(255,96,96,.5),rgba(200,40,60,.32));border-color:rgba(255,140,140,.85);box-shadow:inset 0 1px 0 rgba(255,255,255,.45),inset 0 -2px 4px rgba(120,10,20,.4),0 0 14px rgba(255,80,80,.65),0 0 30px rgba(255,60,60,.40),0 6px 14px rgba(120,10,20,.4)}
.lc-dl:active{transform:translateY(1px);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),inset 0 -1px 3px rgba(120,10,20,.45),0 2px 6px rgba(120,10,20,.35)}
/* 【修330】「保存/下载」按钮组（同为剧本页右上工具位：保存=落盘进度 · 下载=导出文件，功能不同） */
.lc-dlg{position:absolute;top:16px;right:436px;z-index:55;display:flex;gap:8px;align-items:center}
.lc-dlg.lc-dlg-bottom{top:auto;bottom:16px}   /* 【修337】重新生成剧本落到底部，与「保存」同一列 */
.lc-dlg .lc-dl{position:static;top:auto;right:auto}
.lc-save{padding:8px 16px;border-radius:12px;cursor:pointer;font-size:12.5px;font-weight:700;letter-spacing:.04em;color:#eafff3;background:linear-gradient(145deg,rgba(46,204,113,.38),rgba(20,120,72,.24));border:1px solid rgba(120,255,180,.55);box-shadow:inset 0 1px 0 rgba(255,255,255,.35),inset 0 -2px 4px rgba(8,60,32,.35),0 4px 10px rgba(8,60,32,.35);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);text-shadow:0 1px 2px rgba(0,40,20,.5);transition:all .2s ease}
.lc-save:hover{color:#fff;background:linear-gradient(145deg,rgba(70,226,140,.55),rgba(24,150,90,.35));border-color:rgba(150,255,200,.85);box-shadow:inset 0 1px 0 rgba(255,255,255,.45),inset 0 -2px 4px rgba(8,60,32,.4),0 0 14px rgba(80,255,160,.6),0 0 30px rgba(60,255,150,.35),0 6px 14px rgba(8,60,32,.4)}
.lc-save:active{transform:translateY(1px)}
.lc-save:disabled{opacity:.55;cursor:default}
@media (max-width:1100px){.lc-dlg{right:18px}}
.script-shell #deliveryGrid{flex:1 1 auto;min-width:0;max-width:none;margin:0;overflow-y:auto;overscroll-behavior:contain;padding-right:6px}
@media (max-width:1100px){
  .script-shell{flex-direction:column;height:auto}
  .script-shell #deliveryGrid{overflow:visible;max-height:none}
  .lc-sap{width:auto;flex:0 0 auto;max-height:none}
  .lc-dl{right:18px}
}

/* ═══════════【N271】画布去绿化（墨玻璃底 + 绿点缀）× 视频控制台 × 微动效 ═══════════
   绿只用于：选中态、活跃/进度、完成态与主按钮悬停；其余一律中性玻璃。计费用琥珀，生成中用青蓝，失败用珊瑚。 */
#storyCanvasMask{
  --n1:#06080a; --n2:#0a0e11;
  --g1:rgba(24,28,32,.62); --g2:rgba(32,37,42,.74); --g3:rgba(255,255,255,.035);
  --ln:rgba(255,255,255,.085); --ln2:rgba(255,255,255,.15);
  --t1:#edf1f3; --t2:#9aa5ac; --t3:#6c767c;
  --ac:#5be3a6; --ac-l:rgba(91,227,166,.12); --ac-b:rgba(91,227,166,.5);
  --am:#e6b45a; --run:#6fc7ff; --err:#ff8a8a;
  --sh1:0 1px 2px rgba(0,0,0,.45); --sh2:0 14px 34px -10px rgba(0,0,0,.6);
  background:radial-gradient(1200px 700px at 30% 0%,#0b1013 0%,var(--n1) 55%,#040607 100%) !important;
}
/* ---------- 节点卡：玻璃 + 极细描边 + 分层阴影 ---------- */
#storyCanvasMask .sc-node{
  border-radius:16px;border:1px solid var(--ln);
  background:linear-gradient(180deg,var(--g2),var(--g1));
  -webkit-backdrop-filter:blur(18px) saturate(115%);backdrop-filter:blur(18px) saturate(115%);
  color:var(--t1);box-shadow:var(--sh1),var(--sh2);
  transition:left .16s cubic-bezier(.2,.8,.2,1),top .16s cubic-bezier(.2,.8,.2,1),border-color .18s,box-shadow .2s,transform .18s
}
#storyCanvasMask .sc-node::after{content:'';position:absolute;inset:0;border-radius:16px;pointer-events:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.06)}
#storyCanvasMask .sc-node:hover{border-color:var(--ln2);box-shadow:var(--sh1),0 18px 40px -10px rgba(0,0,0,.66);transform:translateY(-2px)}
#storyCanvasMask .sc-node.sc-sel{filter:none;border-color:var(--ac-b);box-shadow:0 0 0 1px var(--ac-b),0 0 26px -8px rgba(91,227,166,.5),var(--sh2)}
#storyCanvasMask .sc-node.sc-tgt{filter:none;border-color:var(--ac-b);box-shadow:0 0 0 2px rgba(91,227,166,.35),var(--sh2)}
#storyCanvasMask .sc-node.sc-dim{opacity:.14}
#storyCanvasMask .sc-plus{background:var(--ac);color:#06130d;border:2px solid #0a0f11;box-shadow:0 0 12px -2px rgba(91,227,166,.7)}
/* ---------- 头部 / 标签 / 文本：去绿 ---------- */
#storyCanvasMask .sc-shot .sc-shot-hd{background:rgba(255,255,255,.028);border-bottom:1px solid var(--ln)}
#storyCanvasMask .sc-wk{color:var(--t1);font-weight:700;letter-spacing:.02em}
#storyCanvasMask .sc-badge{background:rgba(255,255,255,.05);color:var(--t2);border:1px solid var(--ln)}
#storyCanvasMask .sc-inputs{color:var(--t3)}
#storyCanvasMask .sc-shot-pr{background:rgba(0,0,0,.42);border:1px solid var(--ln);color:#cfd6d9;border-radius:12px}
#storyCanvasMask .sc-mtag{background:rgba(198,168,255,.10);color:#c3aee6;border:1px solid rgba(198,168,255,.22)}
#storyCanvasMask .sc-vtag{background:rgba(255,158,203,.10);color:#e3a8c4;border:1px solid rgba(255,158,203,.22)}
#storyCanvasMask .sc-ic{color:var(--t2)}
/* ---------- 按钮 ---------- */
#storyCanvasMask .sc-sbtn,#storyCanvasMask .sc-btn{
  background:rgba(255,255,255,.04);border:1px solid var(--ln);color:var(--t1);border-radius:10px;
  transition:.18s cubic-bezier(.2,.8,.2,1)
}
#storyCanvasMask .sc-sbtn:hover,#storyCanvasMask .sc-btn:hover{background:rgba(255,255,255,.08);border-color:var(--ln2)}
#storyCanvasMask .sc-sbtn.sc-go,#storyCanvasMask .sc-btn.sc-go{
  background:linear-gradient(180deg,rgba(91,227,166,.16),rgba(91,227,166,.07));border-color:var(--ac-b);color:#eafff5;font-weight:700
}
#storyCanvasMask .sc-sbtn.sc-go:hover,#storyCanvasMask .sc-btn.sc-go:hover{box-shadow:0 0 0 1px var(--ac-b),0 0 20px -6px rgba(91,227,166,.6)}
#storyCanvasMask .sc-sbtn.is-run{border-color:rgba(111,199,255,.5);background:rgba(111,199,255,.1);color:#dff1ff}
#storyCanvasMask .sc-vcost,#storyCanvasMask .sc-vc-cost{color:var(--am)}
/* ---------- 视频预览区 ---------- */
#storyCanvasMask .sc-vj{display:block;flex:none;min-height:0}
#storyCanvasMask .sc-vjv{max-height:none;width:100%;height:100%;object-fit:contain;margin:0;border-radius:0;box-shadow:none}
#storyCanvasMask .sc-vjframe{margin:8px 12px 0;height:186px;border-radius:12px;background:#000;border:1px solid var(--ln);box-shadow:inset 0 0 0 1px rgba(0,0,0,.6)}
#storyCanvasMask .sc-vj-lg .sc-vjframe{height:230px}
#storyCanvasMask .sc-vjframe .sc-vjph{color:var(--t3);font-size:11px;line-height:1.75}
#storyCanvasMask .sc-vjframe .sc-vjph b{color:var(--t2);font-size:12px;letter-spacing:.04em}
#storyCanvasMask .sc-vjframe.is-done{border-color:rgba(91,227,166,.28)}
#storyCanvasMask .sc-vjframe.is-run{border-color:rgba(111,199,255,.3)}
#storyCanvasMask .sc-vjframe.is-err{border-color:rgba(255,138,138,.32)}
/* 【N318】等待超过 3 分钟时的说明文字（上游慢是常态，别再用假的 95% 糊着） */
#storyCanvasMask .sc-vjel{display:inline-block;margin-top:3px;color:#9fc7dd;font-size:10.5px}
#storyCanvasMask .sc-vjscan{position:absolute;left:0;right:0;top:0;height:34%;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(91,227,166,.14),transparent);animation:n271scan 1.9s linear infinite}
@keyframes n271scan{0%{transform:translateY(-110%)}100%{transform:translateY(310%)}}
#storyCanvasMask .sc-vjbar2{background:rgba(255,255,255,.1)}
#storyCanvasMask .sc-vjbar2 i{background:linear-gradient(90deg,rgba(91,227,166,.7),var(--ac))}
#storyCanvasMask .sc-vjline{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:7px 12px 0}
/* 【N316】本次扣费清单：逐项（含免费项）+ 合计 */
#storyCanvasMask .sc-vjbill{display:flex;flex-direction:column;gap:2px;margin:6px 12px 8px;padding:7px 10px;border-radius:10px;border:1px solid rgba(154,255,209,.18);background:rgba(6,20,15,.42);font-size:10.5px;line-height:1.6;color:var(--u-dim)}
#storyCanvasMask .sc-vjbill b{color:#cfe9de;font-weight:700;margin-bottom:2px}
#storyCanvasMask .sc-vjbill .tot{margin-top:2px;padding-top:3px;border-top:1px dashed rgba(154,255,209,.2);color:#9affd1;font-weight:700}
#storyCanvasMask .sc-vjline .sc-vjb{font-size:10px;padding:2px 8px;border-radius:7px;background:rgba(255,255,255,.05);border:1px solid var(--ln);color:var(--t2)}
#storyCanvasMask .sc-vjline .sc-vjb.s-done{color:#bdf5dc;border-color:var(--ac-b);background:var(--ac-l)}
#storyCanvasMask .sc-vjline .sc-vjb.s-running,#storyCanvasMask .sc-vjline .sc-vjb.s-queued{color:#d5ecff;border-color:rgba(111,199,255,.45);background:rgba(111,199,255,.1)}
#storyCanvasMask .sc-vjline .sc-vjb.s-error{color:#ffd7d7;border-color:rgba(255,138,138,.45);background:rgba(255,138,138,.1)}
#storyCanvasMask .sc-vjline .sc-vjm{font-size:10px;padding:2px 7px;border-radius:7px;background:rgba(255,255,255,.035);border:1px solid var(--ln);color:var(--t3)}
#storyCanvasMask .sc-vjline .sc-vjm.ok{color:var(--am);border-color:rgba(230,180,90,.35)}
/* ---------- 视频控制台 ---------- */
#storyCanvasMask .sc-vc{display:flex;flex-direction:column;gap:7px;margin:9px 12px 0;padding:9px 10px 10px;
  border:1px solid var(--ln);border-radius:12px;background:rgba(255,255,255,.022)}
#storyCanvasMask .sc-vc-row,#storyCanvasMask .sc-vc-row2{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
#storyCanvasMask .sc-vc-g{display:flex;align-items:center;gap:6px;min-width:0}
#storyCanvasMask .sc-vc-l{font-size:9.5px;color:var(--t3);letter-spacing:.1em;white-space:nowrap}
#storyCanvasMask .sc-vc select.sc-vsel{flex:1;min-width:0;height:28px;padding:0 9px;font-size:11.5px;border-radius:9px;
  background:rgba(255,255,255,.04);border:1px solid var(--ln2);color:var(--t1);font-family:inherit;
  -webkit-appearance:none;appearance:none;cursor:pointer;transition:.18s}
#storyCanvasMask .sc-vc select.sc-vsel:hover{background:rgba(255,255,255,.07)}
#storyCanvasMask .sc-vc select.sc-vsel option{background:#0d1114;color:var(--t1)}
#storyCanvasMask .sc-vc .sc-vre{height:28px;padding:0 9px;font-size:10.5px;border-radius:9px;background:transparent;
  border:1px solid var(--ln);color:var(--t3);cursor:pointer;transition:.18s}
#storyCanvasMask .sc-vc .sc-vre:hover{color:var(--t1);border-color:var(--ln2)}
#storyCanvasMask .sc-vc .sc-h3opt{height:28px;padding:0 10px;font-size:10.5px;border-radius:9px;background:rgba(255,214,143,.09);border:1px solid rgba(255,214,143,.42);color:#ffd68f;cursor:pointer;transition:.18s;white-space:nowrap}
#storyCanvasMask .sc-vc .sc-h3opt:hover{background:rgba(255,214,143,.18);border-color:rgba(255,214,143,.75);color:#ffe8b6}
#storyCanvasMask .sc-vc .sc-h3opt.busy{opacity:.65;cursor:wait}
/* ══【N364】「↺ 上一版」= 唯一撤回键（用户要求：类似撤回功能，一个就够）══
   · 与优化键同排、同高、同风格，一眼看得出是一组；
   · `is-off` = 本镜还没有可撤回的上一版（灰掉但仍可点，点了**如实说明**，不再"毫无反应"）。 */
#storyCanvasMask .sc-vc .sc-vprev{height:28px;padding:0 10px;font-size:10.5px;border-radius:9px;background:rgba(141,255,199,.09);border:1px solid rgba(141,255,199,.38);color:#a8f0cd;cursor:pointer;transition:.18s;white-space:nowrap}
#storyCanvasMask .sc-vc .sc-vprev:hover{background:rgba(141,255,199,.18);border-color:rgba(141,255,199,.7);color:#d6ffe9}
#storyCanvasMask .sc-vc .sc-vprev.is-off{opacity:.42;cursor:not-allowed;border-style:dashed}
#storyCanvasMask .sc-vc .sc-vprev.is-off:hover{background:rgba(141,255,199,.09);border-color:rgba(141,255,199,.38);color:#a8f0cd}
/* ═══【v5.11】画布·视频面板三处布局修复 ═══
   ① 参考图不再变形：统一正方形 + object-fit:cover + 竖向排列
   ② 面板内容可下拉：容器限高 + overflow-y:auto（参数与 AI 修改都能看全）
   ③ 「▶ 生成视频」常驻可见：吸底 sticky，任何滚动位置都能点到 */
.sc-vrefs{display:flex !important;flex-direction:column !important;flex-wrap:nowrap !important;gap:8px !important;
  overflow-y:auto !important;overflow-x:hidden !important;min-width:0 !important}
.sc-vrefs img,.sc-vrefs video,.sc-vrefs canvas,
.sc-vrefs .sc-vthumb,.sc-vrefs [class*="thumb"],.sc-vrefs [class*="refimg"]{
  width:100% !important;height:auto !important;aspect-ratio:1 / 1 !important;
  object-fit:cover !important;display:block !important;border-radius:10px !important}
.sc-vj,.sc-vj-body,.sc-vjmain,.sc-sp-box.b-go{overflow-y:auto !important;overflow-x:hidden !important;
  max-height:calc(100vh - 190px) !important;scrollbar-width:thin !important}
.sc-vj .sc-vrefs{max-height:42vh !important}
.sc-sbtn.sc-go{position:sticky !important;bottom:10px !important;z-index:6 !important;
  box-shadow:0 -8px 20px rgba(4,12,9,.65),0 2px 10px rgba(0,0,0,.4) !important}
.sc-sp-box.b-go .sc-sbtn.sc-go{width:100% !important}
#storyCanvasMask .sc-vc-chips{display:flex;gap:5px}
#storyCanvasMask .sc-vchip{position:relative;height:26px;padding:0 10px;font-size:11px;border-radius:8px;
  background:rgba(255,255,255,.03);border:1px solid var(--ln);color:var(--t2);cursor:pointer;
  transition:.18s cubic-bezier(.2,.8,.2,1)}
#storyCanvasMask .sc-vchip:hover{color:var(--t1);background:rgba(255,255,255,.07);border-color:var(--ln2)}
#storyCanvasMask .sc-vchip.on{color:#eafff5;background:var(--ac-l);border-color:var(--ac-b);
  box-shadow:0 0 0 1px rgba(91,227,166,.2),0 0 16px -6px rgba(91,227,166,.55)}
#storyCanvasMask .sc-vc-sum{margin-left:auto;display:flex;align-items:baseline;gap:7px}
#storyCanvasMask .sc-vc-cost{font-size:12.5px;font-weight:700;animation:n271num .2s ease-out}
@keyframes n271num{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
#storyCanvasMask .sc-vc-note{font-size:9.5px;color:var(--t3)}
#storyCanvasMask .sc-vc-warn{font-size:10px;line-height:1.6;color:var(--am);padding:6px 8px;border-radius:8px;
  background:rgba(230,180,90,.07);border:1px dashed rgba(230,180,90,.28)}
#storyCanvasMask .sc-shot-ft{gap:7px;padding:9px 12px 11px}
#storyCanvasMask .sc-gow{display:flex;gap:7px;flex:1 1 auto;min-width:0}
#storyCanvasMask .sc-gow .sc-sbtn{flex:1 1 auto}
#storyCanvasMask .sc-vcp{font-size:10.5px;color:#dff1ff;opacity:.85;margin-left:5px}
#storyCanvasMask .sc-go .sc-vcost{margin-left:6px}
/* ---------- 发送前确认（图槽映射表） ---------- */
#scVcConfirm{position:fixed;inset:0;z-index:2147483000;display:none;font-family:inherit}
#scVcConfirm .vc-mask{position:absolute;inset:0;background:rgba(3,5,6,.6);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:n271fade .18s ease-out}
#scVcConfirm .vc-box{position:relative;width:min(520px,92vw);margin:9vh auto 0;padding:18px 18px 16px;border-radius:18px;
  border:1px solid rgba(255,255,255,.1);background:linear-gradient(180deg,rgba(30,35,40,.92),rgba(16,19,22,.94));
  -webkit-backdrop-filter:blur(24px) saturate(120%);backdrop-filter:blur(24px) saturate(120%);
  box-shadow:0 1px 0 rgba(255,255,255,.05) inset,0 30px 70px -20px rgba(0,0,0,.8);color:#edf1f3;
  animation:n271pop .22s cubic-bezier(.2,.8,.2,1)}
@keyframes n271fade{from{opacity:0}to{opacity:1}}
@keyframes n271pop{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}
#scVcConfirm .vc-hd{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
#scVcConfirm .vc-hd b{font-size:15px;letter-spacing:.02em}
#scVcConfirm .vc-hd span{font-size:11px;color:#8b959b}
#scVcConfirm .vc-tb{width:100%;border-collapse:collapse;font-size:11.5px}
#scVcConfirm .vc-tb th{text-align:left;font-weight:500;font-size:9.5px;letter-spacing:.1em;color:#6c767c;padding:0 8px 6px 0;border-bottom:1px solid rgba(255,255,255,.08)}
#scVcConfirm .vc-tb td{padding:7px 8px 7px 0;border-bottom:1px solid rgba(255,255,255,.05)}
#scVcConfirm .vc-tb td.n{color:#5be3a6;font-weight:700;white-space:nowrap;width:58px}
#scVcConfirm .vc-tb td.m{color:#edf1f3;white-space:nowrap}
#scVcConfirm .vc-tb td.r{color:#9aa5ac}
#scVcConfirm .vc-skip{margin-top:11px;padding:9px 11px;border-radius:11px;background:rgba(230,180,90,.06);
  border:1px dashed rgba(230,180,90,.28);font-size:10.5px;line-height:1.75;color:#e0c391}
#scVcConfirm .vc-skip b{display:block;color:#e6b45a;margin-bottom:2px;font-size:10px;letter-spacing:.06em}
#scVcConfirm .vc-skip span{display:block}
#scVcConfirm .vc-sum{display:flex;align-items:baseline;gap:10px;margin-top:13px;padding-top:11px;border-top:1px solid rgba(255,255,255,.08)}
#scVcConfirm .vc-cost{font-size:19px;font-weight:800;color:#e6b45a;letter-spacing:.01em}
#scVcConfirm .vc-meta{font-size:10.5px;color:#8b959b}
#scVcConfirm .vc-tip{margin-top:5px;font-size:10px;color:#6c767c}
#scVcConfirm .vc-act{display:flex;gap:9px;margin-top:14px}
#scVcConfirm .vc-act button{flex:1;height:36px;border-radius:11px;font-size:12.5px;cursor:pointer;font-family:inherit;transition:.18s cubic-bezier(.2,.8,.2,1)}
#scVcConfirm .vc-no{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);color:#c8d0d4}
#scVcConfirm .vc-no:hover{background:rgba(255,255,255,.08)}
#scVcConfirm .vc-ok{background:linear-gradient(180deg,rgba(91,227,166,.2),rgba(91,227,166,.09));
  border:1px solid rgba(91,227,166,.5);color:#eafff5;font-weight:700}
#scVcConfirm .vc-ok:hover{box-shadow:0 0 0 1px rgba(91,227,166,.5),0 0 22px -6px rgba(91,227,166,.6)}
@media (prefers-reduced-motion:reduce){
  #storyCanvasMask .sc-vjscan{animation:none}
  #storyCanvasMask .sc-vc-cost,#scVcConfirm .vc-box,#scVcConfirm .vc-mask{animation:none}
  #storyCanvasMask .sc-node:hover{transform:none}
}
#scWorld.sc-dragging .sc-vjscan{animation:none}

/* ═══════════【N272】墨蓝玻璃质感：绿仅作成功/选中点缀 ═══════════ */
#storyCanvasMask{
  --n1:#07090d;--n2:#0c1119;--g1:rgba(17,23,33,.72);--g2:rgba(25,33,46,.78);
  --ln:rgba(190,210,235,.12);--ln2:rgba(210,225,245,.24);--t1:#edf2f7;--t2:#a7b2bf;--t3:#71808f;
  --ac:#9db8ff;--ac-l:rgba(157,184,255,.13);--ac-b:rgba(157,184,255,.54);
  --am:#e8b86b;--run:#7dc8ee;--err:#f28e93;
  background:radial-gradient(900px 560px at 18% -8%,rgba(93,120,178,.15),transparent 63%),radial-gradient(760px 560px at 92% 104%,rgba(117,86,154,.10),transparent 66%),linear-gradient(135deg,#06080c 0%,#0b1017 52%,#070a0f 100%) !important;
}
#storyCanvasMask:before{content:'';position:absolute;inset:0;pointer-events:none;z-index:0;background:linear-gradient(115deg,rgba(255,255,255,.035),transparent 26%,transparent 72%,rgba(255,255,255,.018));mix-blend-mode:screen;opacity:.7}
#storyCanvasMask .sc-node{background:linear-gradient(145deg,rgba(31,40,54,.82),rgba(11,16,24,.76));border-color:rgba(190,210,235,.13);box-shadow:0 1px 2px rgba(0,0,0,.46),0 18px 40px -18px rgba(0,0,0,.82),inset 0 1px rgba(255,255,255,.055)}
#storyCanvasMask .sc-node:hover{border-color:rgba(206,222,244,.30);box-shadow:0 1px 2px rgba(0,0,0,.46),0 20px 42px -16px rgba(0,0,0,.88),0 0 20px -14px rgba(157,184,255,.42)}
#storyCanvasMask .sc-node.sc-sel,#storyCanvasMask .sc-node.sc-tgt{border-color:rgba(157,184,255,.58);box-shadow:0 0 0 1px rgba(157,184,255,.38),0 0 26px -12px rgba(157,184,255,.58),0 18px 42px -18px rgba(0,0,0,.82)}
#storyCanvasMask .sc-shot .sc-shot-hd,#storyCanvasMask .sc-wk{background:rgba(255,255,255,.025)}
#storyCanvasMask .sc-badge,#storyCanvasMask .sc-vjline .sc-vjm,#storyCanvasMask .sc-vjline .sc-vjb{background:rgba(190,210,235,.055);border-color:rgba(190,210,235,.13);color:var(--t2)}
#storyCanvasMask .sc-mtag{background:rgba(173,147,225,.10);border-color:rgba(173,147,225,.25);color:#cbbcf0}
#storyCanvasMask .sc-vtag{background:rgba(215,150,180,.10);border-color:rgba(215,150,180,.24);color:#e0b4ca}
#storyCanvasMask .sc-shot-pr,#storyCanvasMask .sc-edit{background:rgba(3,6,11,.58);border-color:rgba(190,210,235,.12);color:#d9e1e8}
#storyCanvasMask .sc-vc{background:linear-gradient(145deg,rgba(255,255,255,.045),rgba(255,255,255,.018));border-color:rgba(190,210,235,.13);box-shadow:inset 0 1px rgba(255,255,255,.035),0 8px 24px -16px rgba(0,0,0,.82)}
#storyCanvasMask .sc-vc select.sc-vsel,#storyCanvasMask .sc-vchip{background:rgba(3,7,13,.48);border-color:rgba(190,210,235,.18);color:var(--t1)}
#storyCanvasMask .sc-vchip.on,#storyCanvasMask .sc-sbtn.sc-go,#storyCanvasMask .sc-btn.sc-go{background:linear-gradient(180deg,rgba(157,184,255,.20),rgba(157,184,255,.07));border-color:rgba(157,184,255,.58);color:#f1f5ff;box-shadow:0 0 22px -12px rgba(157,184,255,.74)}
#storyCanvasMask .sc-vjframe{background:#020407;border-color:rgba(190,210,235,.17);box-shadow:inset 0 0 0 1px rgba(255,255,255,.025),0 12px 26px -18px rgba(0,0,0,.92)}
#storyCanvasMask .sc-vjframe.is-done{border-color:rgba(91,227,166,.42)}
#storyCanvasMask .sc-vjovl span{background:rgba(10,15,23,.82);border-color:rgba(157,184,255,.55);color:#cbd8ff;box-shadow:0 0 18px -6px rgba(157,184,255,.55)}
#storyCanvasMask .sc-vjscan{background:linear-gradient(180deg,transparent,rgba(125,200,238,.13),transparent)}
#storyCanvasMask .sc-vjline .sc-vjb.s-done{color:#bff1d7;border-color:rgba(91,227,166,.45);background:rgba(91,227,166,.09)}
#storyCanvasMask .sc-vjline .sc-vjm.ok,#storyCanvasMask .sc-vcost,#storyCanvasMask .sc-vc-cost{color:var(--am)}

/* N272：展开编辑右列是单屏工作台，视频和控制项不再被挤出底部 */
#storyCanvasMask #scDetail.sc-max{background:linear-gradient(135deg,rgba(11,16,24,.94),rgba(6,9,14,.96)) !important;border-color:rgba(190,210,235,.18) !important}
#storyCanvasMask #scDetailBody{gap:14px}
#storyCanvasMask #scDetail .sc-sp-l,#storyCanvasMask #scDetail .sc-sp-r{min-width:0}
#storyCanvasMask #scDetail .sc-sp-r{overflow:hidden;display:flex;flex-direction:column;gap:8px}
#storyCanvasMask #scDetail .sc-sp-r>.sc-sp-box.b-go{min-height:0;flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden}
#storyCanvasMask #scDetail .sc-sp-r>.sc-sp-box:not(.b-go){flex:0 0 auto}
#storyCanvasMask #scDetail .sc-sp-r .sc-vj{min-height:0;flex:1 1 auto;display:flex;flex-direction:column}
#storyCanvasMask #scDetail .sc-sp-r .sc-vj-lg .sc-vjframe{height:clamp(150px,22vh,218px);flex:0 1 auto}
#storyCanvasMask #scDetail .sc-sp-r .sc-vc{margin-top:6px;padding:7px 8px;gap:5px}
#storyCanvasMask #scDetail .sc-sp-r .sc-vc-row,#storyCanvasMask #scDetail .sc-sp-r .sc-vc-row2{gap:5px}
#storyCanvasMask #scDetail .sc-sp-r .sc-vc select.sc-vsel,#storyCanvasMask #scDetail .sc-sp-r .sc-vre{height:26px}
#storyCanvasMask #scDetail .sc-sp-r .sc-sp-row.sc-gow{flex:0 0 auto;margin-top:6px}
#storyCanvasMask #scDetail .sc-sp-r .sc-sp-box.b-go .sc-sp-hd{flex:0 0 auto}
#storyCanvasMask #scDetail .sc-sp-r .sc-sp-box.b-go .sc-vjline{flex:0 0 auto}
#storyCanvasMask #scDetail #scAiIn{min-height:54px}
#storyCanvasMask #scDetailClose{background:rgba(157,184,255,.14)!important;border-color:rgba(157,184,255,.40)!important;color:#e8eeff!important;box-shadow:0 8px 24px -14px rgba(157,184,255,.7)}
#storyCanvasMask .sc-go:active,#storyCanvasMask .sc-btn:active,#storyCanvasMask .sc-sbtn:active{transform:translateY(1px) scale(.99)}
#storyCanvasMask .sc-ai-model{margin-left:auto;font-size:10px;font-weight:500;letter-spacing:.02em;color:#9db8ff;background:rgba(157,184,255,.08);border:1px solid rgba(157,184,255,.22);border-radius:7px;padding:3px 7px}
@media (max-width:980px){#storyCanvasMask #scDetailBody{flex-direction:column;overflow:auto}#storyCanvasMask #scDetail .sc-sp-r{overflow:visible}#storyCanvasMask #scDetail .sc-sp-r>.sc-sp-box.b-go{flex:none}}

/* ═══════════【N276】连线素材参考条：缩略图/启用态/放大层 ═══════════ */
#storyCanvasMask .sc-vrefs{margin:6px 12px 0;padding:7px 8px;border:1px solid rgba(190,210,235,.12);border-radius:11px;background:linear-gradient(145deg,rgba(255,255,255,.04),rgba(255,255,255,.015));overflow:hidden}
#storyCanvasMask .sc-vrefs-head{display:flex;align-items:center;gap:7px;margin-bottom:6px;color:#cbd5e0;font-size:10px}
#storyCanvasMask .sc-vrefs-head b{font-size:10.5px;color:#edf2f7}.sc-vrefs-head span{color:#9db8ff}.sc-vrefs-head em{margin-left:auto;color:#71808f;font-style:normal;font-size:9px}
/* 【修415】参考素材条"未启用原因"行：一行说清为什么这次不发、怎么改（【交叠A】异常路径专用） */
#storyCanvasMask .sc-vrefs-why{margin:4px 0 2px;padding:5px 8px;border-radius:8px;font-size:10px;line-height:1.5;
  color:#ffd68f;background:rgba(255,176,59,.10);border:1px solid rgba(255,176,59,.28);word-break:break-all}
#storyCanvasMask .sc-vrefs-row{display:flex;gap:6px;overflow-x:auto;scrollbar-width:thin;padding-bottom:2px}
#storyCanvasMask .sc-vref-card{position:relative;flex:none;width:auto;min-width:0;box-sizing:border-box;padding:3px 3px 5px;   /* 【N305g】网格内等宽自适应 */border:1px solid rgba(190,210,235,.16);border-radius:8px;background:rgba(2,6,12,.45);cursor:zoom-in;transition:.18s;overflow:hidden}
#storyCanvasMask .sc-vref-card:hover{transform:translateY(-1px);border-color:rgba(157,184,255,.58);box-shadow:0 0 16px -8px rgba(157,184,255,.8)}
#storyCanvasMask .sc-vref-card.on{border-color:rgba(91,227,166,.55);box-shadow:0 0 12px -8px rgba(91,227,166,.75)}
#storyCanvasMask .sc-vref-card.off{opacity:.55}.sc-vref-card.noimg{opacity:.62;cursor:default}
#storyCanvasMask .sc-vref-thumb{height:40px;border-radius:5px;overflow:hidden;background:#070a0e;display:grid;place-items:center}.sc-vref-thumb img{width:100%;height:100%;object-fit:cover}.sc-vref-thumb i{font-size:9px;color:#71808f;font-style:normal}
#storyCanvasMask .sc-vref-card>b{display:block;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#d8e2ec;font-size:9px;font-weight:600}.sc-vref-card small{display:block;color:#71808f;font-size:8px;white-space:nowrap}
#storyCanvasMask .sc-vref-card.on small{color:#9be8c3}.sc-vref-x{position:absolute;top:2px;right:2px;z-index:6;pointer-events:auto;width:15px;height:15px;padding:0;border:1px solid rgba(255,255,255,.25);border-radius:50%;background:rgba(5,8,12,.78);color:#e7aebb;font-size:11px;line-height:12px;cursor:pointer}.sc-vref-x:hover{background:#421d2a;color:#fff}
#storyCanvasMask .sc-vref-audio{position:relative;flex:none;width:auto;min-width:0;box-sizing:border-box;overflow:hidden;padding:7px 23px 5px 7px;   /* 【N305g】同格等宽、内容省略 */border:1px solid rgba(215,150,180,.26);border-radius:8px;background:rgba(215,150,180,.06);color:#e1b9cc;font-size:9px}.sc-vref-audio small{display:block;margin-top:2px;color:#a995a2}.sc-vref-audio.on small{color:#e1b9cc}
#scRefLightbox{display:none;position:fixed;inset:0;z-index:2147483001}.sc-ref-mask{position:absolute;inset:0;background:rgba(2,4,8,.74);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.sc-ref-box{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);max-width:min(86vw,1100px);max-height:86vh;padding:12px;border:1px solid rgba(190,210,235,.24);border-radius:16px;background:rgba(12,17,26,.92);box-shadow:0 30px 100px rgba(0,0,0,.82);color:#e9eef5;text-align:center}.sc-ref-box img{display:block;max-width:82vw;max-height:76vh;object-fit:contain;border-radius:9px}.sc-ref-box>div{padding-top:8px;font-size:12px;color:#cbd5e0}.sc-ref-close{position:absolute;right:-13px;top:-13px;width:30px;height:30px;border-radius:50%;border:1px solid rgba(255,255,255,.32);background:#17202c;color:#fff;font-size:20px;line-height:24px;cursor:pointer;box-shadow:0 8px 24px rgba(0,0,0,.5)}.sc-ref-close:hover{background:#2a384a;border-color:#9db8ff}

/* N277：紧凑参考素材条、内容自适应按钮、分类色与柔和反馈 */
#storyCanvasMask .sc-history{flex:0 0 auto;min-width:0;padding-left:10px;padding-right:10px;white-space:nowrap}
#storyCanvasMask .sc-gow{align-items:center}
#storyCanvasMask .sc-gow .sc-sbtn{flex:0 0 auto;min-width:0;width:auto;padding-left:12px;padding-right:12px;white-space:nowrap}
#storyCanvasMask .sc-wire{transition:opacity .24s ease,stroke-width .24s ease;stroke-linecap:round}
/* ══【N478·用户要求】悬停高亮**常亮不闪**：原来挂的是 scWireBreath 呼吸动画（1.8s 忽明忽暗）+
   代码里 0.3 秒自动熄灭重亮，两者叠加＝频闪。现在改成一层**静态外发光**：一眼看得见，但不再忽明忽暗。 */
#storyCanvasMask .sc-wire.is-hover{animation:none;filter:drop-shadow(0 0 6px rgba(143,240,192,.9))}
#storyCanvasMask .sc-link-dot{transition:r .25s ease,opacity .25s ease}
#storyCanvasMask .sc-link-dot.hi{animation:scDotBreath 1.35s ease-in-out infinite}
@keyframes scDotBreath{0%,100%{opacity:.72}50%{opacity:1}}
#storyCanvasMask .sc-vrefs{display:flex;flex-direction:column;gap:6px;padding:7px 8px;margin-top:6px;border-radius:11px;overflow:hidden}
#storyCanvasMask .sc-vrefs-head{flex:0 0 auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0!important;padding-bottom:5px;border-bottom:1px solid rgba(190,210,235,.10)}
#storyCanvasMask .sc-vrefs-head em{margin-left:auto}
#storyCanvasMask .sc-vrefs-row{flex:1 1 auto;min-height:0;display:flex;flex-wrap:nowrap;gap:5px;overflow-x:auto;overflow-y:hidden;padding:1px 1px 3px}
.sc-lmat{opacity:.92}
#storyCanvasMask .sc-vrefs-head{margin-bottom:4px;font-size:9px}
#storyCanvasMask .sc-vrefs-head b{font-size:9.5px}
#storyCanvasMask .sc-vrefs-head em{font-size:8px}
#storyCanvasMask .sc-vrefs-row{gap:4px;padding-bottom:1px}
#storyCanvasMask .sc-vref-card{flex:none;width:auto;min-width:0;padding:2px 2px 3px;border-radius:7px}   /* 【N305g】紧凑变体也须自适应网格宽度（原来写死 56px → 列宽不齐） */
#storyCanvasMask .sc-vref-thumb{height:28px;border-radius:4px}
#storyCanvasMask .sc-vref-card>b{margin-top:2px;font-size:8px}
#storyCanvasMask .sc-vref-card small{font-size:7px}
#storyCanvasMask .sc-vref-x{width:14px;height:14px;font-size:10px;line-height:11px;top:1px;right:1px}
#storyCanvasMask .sc-vref-audio{min-width:0;width:auto;overflow:hidden;padding:5px 20px 4px 6px;border-radius:7px;font-size:8px}   /* 【N305g】同格等宽 */
#storyCanvasMask .sc-vref-audio small{font-size:7px;margin-top:1px}
/* 参考素材与 @ 芯片保持原始分类信息色 */
#storyCanvasMask .sc-achip.c-char,#storyCanvasMask .sc-pchip.c-char,#storyCanvasMask .sc-vref-card.c-char{color:#9affd1;border-color:rgba(154,255,209,.46);background:rgba(154,255,209,.07)!important}
#storyCanvasMask .sc-achip.c-env,#storyCanvasMask .sc-pchip.c-env,#storyCanvasMask .sc-vref-card.c-env{color:#8fd0ff;border-color:rgba(143,208,255,.46);background:rgba(143,208,255,.07)!important}
#storyCanvasMask .sc-achip.c-prop,#storyCanvasMask .sc-pchip.c-prop,#storyCanvasMask .sc-vref-card.c-prop{color:#ffd68f;border-color:rgba(255,214,143,.46);background:rgba(255,214,143,.07)!important}
#storyCanvasMask .sc-achip.c-voice,#storyCanvasMask .sc-pchip.c-voice,#storyCanvasMask .sc-vref-card.c-voice,#storyCanvasMask .sc-vref-audio.c-voice{color:#ff9ad8;border-color:rgba(255,154,216,.50);background:rgba(255,154,216,.07)!important}
#storyCanvasMask .sc-achip.c-img,#storyCanvasMask .sc-pchip.c-img,#storyCanvasMask .sc-vref-card.c-img{color:#c6a8ff;border-color:rgba(198,168,255,.46);background:rgba(198,168,255,.07)!important}
#storyCanvasMask .sc-vref-card.c-char>b{color:#9affd1}#storyCanvasMask .sc-vref-card.c-env>b{color:#8fd0ff}#storyCanvasMask .sc-vref-card.c-prop>b{color:#ffd68f}#storyCanvasMask .sc-vref-card.c-img>b{color:#c6a8ff}#storyCanvasMask .sc-vref-card.on{box-shadow:0 0 0 1px currentColor,0 0 12px -8px currentColor}
#storyCanvasMask .sc-vref-card.off{opacity:.62}
@media (prefers-reduced-motion:reduce){#storyCanvasMask .sc-wire.is-hover,#storyCanvasMask .sc-link-dot.hi{animation:none}}
/* ═══【N306】分镜工作台「生成视频」区错版根治（用户实测：参考素材面板被顶出右边框、卡片被窗口裁断） ═══
   根因（两个遗留属性叠加）：#scDetail 右栏的 .sc-vj 由 N272 改成了 flex **列**方向，但 N271 时代的
   `flex-wrap:wrap` 与 `align-items:center` 没被重置——
   ① align-items:center → 列内子项"收缩至内容宽再居中"：预览框变窄、参考素材面板按 max-content 加宽
     （卡片里的宽图把列撑到几百 px）→ 整块被顶出 b-go 盒子，只被窗口边缘裁掉；
   ② 高度不够时列方向换行 = 换成"第二列"，参考素材整块飞到右侧，标题/✕/边框全被裁掉。
   改法：行方向换行 + 顶对齐 + 三个子项受控（basis/min-width:0/max-width:100%）→
   宽盒子时「预览+状态+参考素材」同排、窄盒子时上下换行，任何窗宽都待在框内；
   .sc-vj 改为按内容占高（flex:0 0 auto），b-go 超高时内部滚动，绝不压住下方控制项。 */
#storyCanvasMask #scDetail .sc-sp-r .sc-vj{flex:0 0 auto!important;min-height:0!important;flex-direction:row!important;flex-wrap:wrap!important;align-items:flex-start!important;align-content:flex-start!important;gap:6px 10px!important}
#storyCanvasMask #scDetail .sc-sp-r .sc-vj>.sc-vjframe{flex:1 1 240px!important;min-width:0!important;max-width:100%!important}
#storyCanvasMask #scDetail .sc-sp-r .sc-vj>.sc-vjline{flex:0 0 auto!important;max-width:100%!important}
#storyCanvasMask #scDetail .sc-sp-r .sc-vj>.sc-vrefs{flex:1 1 200px!important;min-width:0!important;max-width:100%!important;order:-1!important}   /* 【N306b】用户要求：参考素材整块移到**左侧**（预览在其右），且绝不越出右边框（basis 已按两侧 12px 外边距折算，宽盒子即并排） */
#storyCanvasMask #scDetail .sc-sp-r>.sc-sp-box.b-go{overflow:auto!important;scrollbar-width:thin}
/* ══【N363·用户："蓝色区域还有富余，把红色区域再加大一些，刚好撑满"】══
   真浏览器实测（1500×900）：生成视频面板高 521px，而里面三块只有
   标题 23 + 视频卡（参考素材+视频预览）172 + 控制台 112 = 307px
   → **底部白空 214.7px**（就是用户看到的"富余"）。
   根因：上一行 21244 把 .sc-vj 定成 `flex:0 0 auto`（按内容占高），于是面板里**没有任何一块**去吃掉富余。
   现在让「参考素材 + 视频预览区」这块吃掉全部富余（flex:1 1 auto：空间不足时照样能缩，绝不压住下面
   的分辨率/时长/比例与积分/生成行），并让预览框与参考素材列**纵向拉满**同一高度，整块刚好撑满。
   · 预览框保留最小高度（clamp 150~218px）：窄屏/矮屏也不会被压扁；
   · 参考素材列同步拉满，两边上下沿对齐，视觉上就是"红框变大到刚好填满"。
   ⚠ 必须是 `flex:1 0 auto`（**只许长大、不许被压缩**）：实测矮屏（1180×600）用 `1 1 auto` 时
     视频卡被压成 30px，把 150px 的预览框裁掉了 —— 改成 shrink:0 后，有富余就吃掉、没富余就保持原样并内部滚动。 */
#storyCanvasMask #scDetail .sc-sp-r>.sc-sp-box.b-go>.sc-vj{flex:1 0 auto!important;align-items:stretch!important;align-content:stretch!important}
#storyCanvasMask #scDetail .sc-sp-r>.sc-sp-box.b-go>.sc-vj>.sc-vjframe{height:auto!important;min-height:clamp(150px,22vh,218px)!important;align-self:stretch!important}
#storyCanvasMask #scDetail .sc-sp-r>.sc-sp-box.b-go>.sc-vj>.sc-vrefs{align-self:stretch!important;max-height:none!important}
#storyCanvasMask #scDetail .sc-sp-r>.sc-sp-box.b-go>.sc-vj>.sc-vjline{align-self:stretch!important}

/* -----------------------------------------------------------------------------
   【修408 · 见文末】视频预览区放大的**生效规则**写在本文档最后一段 <style> 的末尾
   （全文搜索 `【修408】★ 视频预览区放大 ★`）。

   为什么不写在这里：本区（N353/N360/N363）的选择器权重只有 2 个 ID，
   而【修356】【修372】用的是 `#scDetail #scDetailBody:has(.b-go)`（3 个 ID）——
   第一轮就是这么写的，实测改了这里、预览区尺寸**纹丝不动**（仍 598×306 / 706×192）。
   CSS 同权重后写者胜，所以 408 的规则必须落在最后一段 <style> 末尾。
   此处不再重复定义，避免两处打架、也避免误判为已生效。
   ----------------------------------------------------------------------------- */

/* ══【N380】「分镜大师正在装载」背景＝DriftWall 漂移图片墙 ══
   结构照搬 reactbits（.drift-wall / __plane / __col / __tile），原生 DOM+CSS 实现；
   **不生成 <a>**：点图只做"换图"，绝不跳转。 */
.drift-wall{position:absolute;inset:0;overflow:hidden;perspective:1200px;perspective-origin:50% 50%;z-index:0;
  --dw-tile-w:240px;--dw-tile-h:135px;--dw-gap:14px;--dw-radius:12px;--dw-lift:44px;--dw-dim:.55;--dw-gray:0;--dw-edge:40%;
  -webkit-mask-image:radial-gradient(ellipse 78% 82% at 50% 46%,#000 var(--dw-edge),transparent 100%),linear-gradient(to top,#000 var(--dw-edge),transparent 100%);
  -webkit-mask-composite:source-in;mask-image:radial-gradient(ellipse 78% 82% at 50% 46%,#000 var(--dw-edge),transparent 100%),linear-gradient(to top,#000 var(--dw-edge),transparent 100%);mask-composite:intersect}
.drift-wall__plane{position:absolute;top:50%;left:50%;display:flex;flex-direction:row;transform-style:preserve-3d;transform-origin:50% 50%;will-change:transform}
.drift-wall__col{position:relative;display:flex;flex-direction:column;gap:var(--dw-gap);padding-right:var(--dw-gap);transform-style:preserve-3d}
.drift-wall__tile{position:relative;width:var(--dw-tile-w);height:var(--dw-tile-h);border-radius:var(--dw-radius);overflow:hidden;
  background:rgba(10,20,16,.85);box-shadow:0 10px 30px rgba(0,0,0,.5);
  /* 【N383】整体去色、划到哪张哪张恢复颜色；**悬停不做任何位移**（位移会和漂移打架 → 就是"闪"的来源） */
  transition:filter .28s ease;cursor:default}
.drift-wall__tile img{width:100%;height:100%;object-fit:cover;display:block;filter:grayscale(1) brightness(.55) saturate(.3);transition:filter .3s ease}
/* 【N395】划到＝**恢复这张图本来的颜色**（去掉去色滤镜），不是染色；
   光标已整墙恒定、悬停不做位移 → 不会像之前那样闪。 */
/* 【N398】横屏 16:9 卡片 + 彩色副本层（跟随鼠标的圆形遮罩 → 原色恢复；两层同帧同步 → 不重影；无 :hover → 不闪） */
.drift-wall__cwrap{position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .35s ease;--mx:50%;--my:50%;--mr:170px;
  -webkit-mask-image:radial-gradient(circle var(--mr) at var(--mx) var(--my),#000 0%,rgba(0,0,0,.85) 45%,rgba(0,0,0,0) 100%);
  mask-image:radial-gradient(circle var(--mr) at var(--mx) var(--my),#000 0%,rgba(0,0,0,.85) 45%,rgba(0,0,0,0) 100%)}
.drift-wall.is-hot .drift-wall__cwrap{opacity:1}
.drift-wall__cwrap .drift-wall__tile img{filter:none}
.drift-wall__cwrap .drift-wall__tile{box-shadow:none}
/* 【N382】物料页的墙做背景：压暗一点、内容抬到墙之上 */
/* 【N399b】曾把物料页那面墙调到"看得见"（整墙 .95、图片亮度 .72）——【N399f】用户要求该页
   彻底不要背景，墙已整块删除，那两条调参规则也随之作废；此处仅留一句沿革，避免后人误以为还有一面墙。 */
/* 【N399f·用户："图中这个页面内，不要背景啊！！！直接完全删除！"】
   「提取物料」页那面墙已整块删除（DOM + 引擎接线），下面这两条 `.drift-wall--bg` 专用规则随之作废、一并去掉。
   漂移墙现在只剩「分镜大师正在装载」层那一面（用 .drift-wall 基础规则：opacity 1 / 图片亮度 .55），未做任何改动。 */
.extract-material>*{position:relative;z-index:2}
/* 【N399c】N380 为"压住漂移墙"加的两条规则已撤掉，装载层回到 N379 的样子：
   · `.storyboard-loading .sb-loading-video{display:none}` —— 多余：上面那条通用性能规则本来就把它藏了（线上同样如此）；
   · `.storyboard-loading .sb-loading-label{position:relative;z-index:3}` —— 这条会把胶囊从"绝对居中"改成普通流元素，
     被 flex 拉伸成整屏高（实测 h=810px、y=0），胶囊就不再是居中的胶囊了。
   撤掉后胶囊回到 `.sb-loading-label` 自己的绝对居中规则，**字体/字号/字重/字距/颜色/圆角/内边距全部来自原规则，一个字节没动**。 */

/* ══【N383】最终口径（放最后，避免被上面的旧规则覆盖）══
   · 整体去色；鼠标划到的那一张恢复颜色（纯 filter 过渡，不做任何位移/提示层 → 不闪） */
.drift-wall__tile{pointer-events:auto;cursor:default}

/* ══【N388】丝滑显色（修"鼠标与箭头交替闪烁"）══
   闪烁根因：图一直在漂移 → 指针下的格子不停换 → `:hover` 反复触发 → 光标样式与颜色来回切。
   现在**彻底不用 :hover**：底层去色、上层彩色并用"跟随鼠标的圆形遮罩"逐步显色，
   指针进出一律不变（整墙 cursor:default），颜色只靠遮罩+透明度淡入淡出 → 丝滑、稳定。
   （旧的 :hover 规则已删除，避免又把颜色切回去） */
.drift-wall,.drift-wall *{cursor:default!important}
/* 【N390】遮罩挪到铺满整墙的套壳层：坐标 = 整墙坐标 → 圆圈与鼠标完全重合（原来错位是因为遮罩加在被 3D 旋转的平面上） */
/* N392 single-layer spotlight (no duplicated layer -> ghosting impossible) */

/* ══【N400·用户要求】分镜提示词页：行距收紧 + 内容整体上移 + 「直接下一镜」抬高 + 纵横线对齐 ══
   做法与 N399 系列一致：**在样式表末尾追加覆盖规则**，原有定义一行未删（不满意删掉这一段即可秒回滚）。
   只作用于 .storyboard-page 这一屏，其它页面不受影响。 */
/* ① 文字行距收紧 */
.storyboard-page .sb-msg,.storyboard-page .sb-msg p,.storyboard-page .sb-msg .sb-msg-body{line-height:1.22}
.storyboard-page .sb-msg p+p{margin-top:1px}
.storyboard-page .sb-preset,.storyboard-page .sb-preset .sb-preset-head{line-height:1.25}
.storyboard-page .sb-preset .sb-preset-head{margin-bottom:2px}
.storyboard-page .sb-preset .sb-preset-item{line-height:1.25;padding:1px 0}
.storyboard-page .sb-preset-item{padding:2px 6px;margin:1px 0}
.storyboard-page .sb-preset-tip,.storyboard-page .sb-req-dock-tip{line-height:1.3}
.storyboard-page .sb-brand p{line-height:1.35}
.storyboard-page .sb-msg .sb-msg-acts{margin-top:6px;padding-top:6px}
.storyboard-page .sb-msg .sb-msg-act,.storyboard-page .sb-reply{line-height:1.2}
/* ② 内容板块整体上移（头/导航/消息/侧栏统一收紧） */
.storyboard-page .sb-chat-head{padding:12px 22px}
.storyboard-page .sb-chat-head h3{margin:2px 0 0;font-size:16px}
.storyboard-page .sb-stepnav{padding:6px 14px}
.storyboard-page .sb-messages{padding:10px 16px;gap:6px}
.storyboard-page .sb-brand{padding:14px 20px 12px}
.storyboard-page .sb-brand h2{font-size:20px}
.storyboard-page .sb-brand p{margin:5px 0 0}
.storyboard-page .sb-param{margin:12px 16px 0;padding:10px 0 2px}
.storyboard-page .sb-param-group{margin-bottom:12px;padding:10px 12px}
.storyboard-page .sb-param-title{margin-bottom:8px}
.storyboard-page .sb-actions{gap:8px;margin:6px 16px 0}
.storyboard-page .sb-start,.storyboard-page .sb-summary,.storyboard-page .sb-side-canvas{min-height:54px;padding:8px 13px}
.storyboard-page .sb-side{padding:0 0 12px}
/* 「直接下一镜」抬高：底部留白，不再贴着窗口下沿 */
.storyboard-page .sb-replies{padding:7px 16px 18px;gap:6px}   /* 底部留 18px：「直接下一镜」不再贴着窗口下沿 */
/* ③ 纵横线对齐：所有内容块同宽同边（去掉气泡小尖角，左右边线与头/导航/底栏完全对齐） */
.storyboard-page .sb-msg,.storyboard-page .sb-preset{max-width:100%;align-self:stretch;border-radius:14px;box-sizing:border-box}
.storyboard-page .sb-msg.system::before,.storyboard-page .sb-msg.user::before,
.storyboard-page .sb-msg.assistant::before,.storyboard-page .sb-msg.assistant.modified::before,
.storyboard-page .sb-preset::before{display:none!important}

/* ══【N401·用户要求】「生成」＝核心键位，必须显眼 ══
   原来它跟随控制台积分行、灰绿色小圆角，和一排参数按钮长得一样，首开还因为占位符没填而"消失"。
   这里只做"显眼"：更大、实心翡翠渐变、外发光、加粗字距；失败态/生成中态保持各自的橙色。 */
#storyCanvasMask .sc-vc-sum [data-vgow] .sc-sbtn.sc-go,
#storyCanvasMask [data-vgow] .sc-go{
  min-width:112px!important;height:34px!important;min-height:34px!important;padding:0 22px!important;
  border-radius:11px!important;border:0!important;flex:0 0 auto!important;
  font-size:14.5px!important;font-weight:800!important;letter-spacing:.08em!important;color:#04241b!important;
  background:linear-gradient(180deg,#9dffd6 0%,#43dda4 55%,#22b981 100%)!important;
  box-shadow:0 0 0 1px rgba(154,255,209,.65),0 8px 22px rgba(45,205,150,.34),inset 0 1px rgba(255,255,255,.55)!important;
  transition:transform .14s ease,filter .14s ease,box-shadow .14s ease;
}
#storyCanvasMask .sc-vc-sum [data-vgow] .sc-sbtn.sc-go:hover,
#storyCanvasMask [data-vgow] .sc-go:hover{filter:brightness(1.07);transform:translateY(-1px);
  box-shadow:0 0 0 1px rgba(154,255,209,.9),0 12px 28px rgba(45,205,150,.5),inset 0 1px rgba(255,255,255,.6)!important}
#storyCanvasMask .sc-vc-sum [data-vgow] .sc-sbtn.sc-go.is-run,
#storyCanvasMask [data-vgow] .sc-go.is-run{color:#3a2400!important;background:linear-gradient(180deg,#ffd79a,#f0a24a)!important;
  box-shadow:0 0 0 1px rgba(255,206,140,.7),0 8px 22px rgba(240,162,74,.35)!important}

/* ═══════ UISKIN-01 BEGIN（分镜画布皮肤，整块删除即回滚）═══════ */
/* ══════════════════════════════════════════════════════════════════════════
   【UISKIN-01】分镜画布 · 版面与按钮皮肤（uiskill 驱动）
   设计语言：Linear（暗色专业工具）· 主色：老虫薄荷绿（品牌身份不变）
   规则：
     1) 只作用于 #storyCanvasMask 作用域；**不修改任何原有规则**，整块删除即回滚；
     2) 层次改用 surface 阶梯 + 1px 发丝线（Linear 原文："resists drop shadows on dark almost entirely"）；
        圆角取 4/6/8/12 阶梯；控件统一 32px 命中区；focus 环 2px 主色 60%；
     3) 复用 app 自己的令牌（--t1/--t2/--t3/--ln/--ln2）→ 卡片内部一次性统一，不做逐条打补丁；
     4) 生成按钮是画布上**唯一**的 primary（实心主色）；其余一律 ghost/secondary。
   ══════════════════════════════════════════════════════════════════════════ */
#storyCanvasMask{
  /* ── uiskill 令牌层 ── */
  --ui-canvas:#010102;
  --ui-s1:#0f1011; --ui-s2:#141516; --ui-s3:#18191a;
  --ui-line:#23252a; --ui-line2:#34343a;
  --ui-ink:#f7f8f8; --ui-ink2:#d0d6e0; --ui-ink3:#8a8f98; --ui-ink4:#62666d;
  --ui-accent:#9affd1; --ui-on-accent:#06120d; --ui-accent-h:#b8ffe0; --ui-accent-p:#7ce9bb;
  --ui-focus:color-mix(in srgb,var(--ui-accent) 60%,transparent);
  --ui-halo:color-mix(in srgb,var(--ui-accent) 22%,transparent);
  --ui-r-ctrl:8px; --ui-r-chip:6px; --ui-r-card:12px; --ui-r-panel:16px;
  --ui-warn:#ffdb13; --ui-h:32px; --ui-dur:180ms; --ui-ease:cubic-bezier(.2,.7,.3,1);
  /* ── 接管 app 既有令牌：卡片内部文字/描边随之统一（自定义属性会继承）── */
  --t1:var(--ui-ink); --t2:var(--ui-ink2); --t3:var(--ui-ink3);
  --ln:var(--ui-line); --ln2:var(--ui-line2);
}

/* ─────────────── 顶栏 ─────────────── */
#storyCanvasMask .sc-bar{background:var(--ui-s1)!important;border-bottom:1px solid var(--ui-line)!important;
  padding:10px 16px!important;gap:8px!important;flex-wrap:nowrap!important;align-items:center}
#storyCanvasMask .sc-bar b{color:var(--ui-ink)!important;font-size:13px!important;font-weight:600!important;letter-spacing:-.2px!important;white-space:nowrap}
#storyCanvasMask #scTitle{color:var(--ui-ink3)!important;font-size:12px!important;font-variant-numeric:tabular-nums;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}
#storyCanvasMask .sc-ui-grp{display:flex;align-items:center;gap:6px;flex:0 0 auto}
#storyCanvasMask .sc-ui-sep{width:1px;height:18px;background:var(--ui-line2);margin:0 4px;flex:0 0 auto;opacity:.9}
#storyCanvasMask .sc-ui-gap{flex:1 1 auto;min-width:6px}

/* 按钮体系：ghost（默认）/ on（激活＝实心主色）/ secondary（面板底）/ disabled */
#storyCanvasMask .sc-bar .sc-btn{height:var(--ui-h)!important;min-width:0!important;flex:0 0 auto!important;
  padding:0 13px!important;border-radius:var(--ui-r-ctrl)!important;border:1px solid transparent!important;
  background:transparent!important;color:var(--ui-ink2)!important;box-shadow:none!important;
  font-size:12.5px!important;font-weight:500!important;line-height:1!important;display:inline-flex!important;
  align-items:center;gap:7px;white-space:nowrap;
  transition:background var(--ui-dur) var(--ui-ease),color var(--ui-dur) var(--ui-ease),
             border-color var(--ui-dur) var(--ui-ease),transform var(--ui-dur) var(--ui-ease)}
#storyCanvasMask .sc-bar .sc-btn:hover:not(:disabled){background:var(--ui-s2)!important;border-color:var(--ui-line)!important;color:var(--ui-ink)!important}
#storyCanvasMask .sc-bar .sc-btn:active:not(:disabled){transform:translateY(1px)}
#storyCanvasMask .sc-bar .sc-btn:focus-visible{outline:2px solid var(--ui-focus)!important;outline-offset:2px}
#storyCanvasMask .sc-bar .sc-btn:disabled,#storyCanvasMask .sc-bar .sc-btn[disabled]{
  color:var(--ui-ink4)!important;background:transparent!important;border-color:transparent!important;
  cursor:not-allowed!important;box-shadow:none!important;opacity:.75}
#storyCanvasMask .sc-bar .sc-btn.on,#storyCanvasMask .sc-bar .sc-btn[class*=" on"]{
  background:var(--ui-accent)!important;color:var(--ui-on-accent)!important;border-color:transparent!important;
  font-weight:600!important;box-shadow:none!important}
#storyCanvasMask .sc-bar .sc-btn.on:hover{background:var(--ui-accent-h)!important;color:var(--ui-on-accent)!important}
#storyCanvasMask .sc-bar .sc-btn.sc-history{padding:0 11px!important;font-variant-numeric:tabular-nums}
#storyCanvasMask .sc-bar .sc-btn.sc-secondary{background:var(--ui-s2)!important;border-color:var(--ui-line)!important;color:var(--ui-ink)!important}
#storyCanvasMask .sc-bar .sc-btn.sc-secondary:hover{background:var(--ui-s3)!important;border-color:var(--ui-line2)!important}

/* 溢出菜单（低频操作） */
#storyCanvasMask .sc-morewrap{position:relative;display:inline-flex;flex:0 0 auto}
#storyCanvasMask .sc-ui-menu{position:absolute;right:0;top:calc(100% + 8px);z-index:60;min-width:186px;padding:5px;display:none;
  background:var(--ui-s3);border:1px solid var(--ui-line2);border-radius:var(--ui-r-card);box-shadow:0 16px 44px rgba(0,0,0,.6)}
#storyCanvasMask .sc-ui-menu.is-open{display:block}
#storyCanvasMask .sc-ui-mi{display:flex;align-items:center;gap:9px;width:100%;height:var(--ui-h);padding:0 10px;
  border:0;border-radius:var(--ui-r-ctrl);background:transparent;color:var(--ui-ink2);font-size:12.5px;cursor:pointer;
  text-align:left;transition:background var(--ui-dur) var(--ui-ease),color var(--ui-dur) var(--ui-ease)}
#storyCanvasMask .sc-ui-mi:hover{background:color-mix(in srgb,var(--ui-ink) 9%,transparent);color:var(--ui-ink)}
#storyCanvasMask .sc-ui-mi:focus-visible{outline:2px solid var(--ui-focus);outline-offset:-2px}
#storyCanvasMask .sc-ui-msep{height:1px;background:var(--ui-line);margin:5px 4px}

/* ─────────────── 图例 / 缩放 / 帮助 ─────────────── */
#storyCanvasMask .sc-legend{background:var(--ui-s1)!important;border:1px solid var(--ui-line)!important;
  border-radius:var(--ui-r-panel)!important;padding:7px 10px!important;gap:4px!important;box-shadow:none!important}
#storyCanvasMask .sc-legend span{color:var(--ui-ink2)!important;font-size:11.5px!important;gap:6px!important;padding:0 4px}
#storyCanvasMask .sc-legend .sc-lgdot{width:7px!important;height:7px!important;box-shadow:none!important}
#storyCanvasMask .sc-zoomctl{background:var(--ui-s1)!important;border:1px solid var(--ui-line)!important;
  border-radius:var(--ui-r-panel)!important;padding:4px!important;gap:4px!important;backdrop-filter:none!important;box-shadow:none!important}
#storyCanvasMask .sc-zbtn,#storyCanvasMask .sc-zoomctl .sc-zbtn{width:var(--ui-h)!important;height:var(--ui-h)!important;min-width:var(--ui-h)!important;
  padding:0!important;border-radius:var(--ui-r-ctrl)!important;border:1px solid transparent!important;
  background:transparent!important;color:var(--ui-ink2)!important;font-size:14px!important;font-weight:400!important;
  display:inline-flex;align-items:center;justify-content:center;transition:background var(--ui-dur) var(--ui-ease),color var(--ui-dur) var(--ui-ease)}
#storyCanvasMask .sc-zbtn:hover{background:var(--ui-s2)!important;border-color:var(--ui-line)!important;color:var(--ui-ink)!important}
#storyCanvasMask .sc-zbtn:focus-visible{outline:2px solid var(--ui-focus)!important;outline-offset:2px}
#storyCanvasMask .sc-zoomctl .sc-zbtn-t{width:auto!important;min-width:0!important;padding:0 12px!important;font-size:12.5px!important;font-variant-numeric:tabular-nums}
#storyCanvasMask #scZoomPct{color:var(--ui-ink)!important;font-size:12.5px!important;min-width:46px;text-align:center;font-variant-numeric:tabular-nums}
#storyCanvasMask #scHelpBtn{width:var(--ui-h)!important;height:var(--ui-h)!important;border-radius:var(--ui-r-ctrl)!important;
  border:1px solid var(--ui-line)!important;background:var(--ui-s1)!important;color:var(--ui-ink2)!important;
  font-size:13px!important;backdrop-filter:none!important;transition:background var(--ui-dur) var(--ui-ease),color var(--ui-dur) var(--ui-ease),border-color var(--ui-dur) var(--ui-ease)}
#storyCanvasMask #scHelpBtn:hover{background:var(--ui-s2)!important;border-color:var(--ui-line2)!important;color:var(--ui-ink)!important}
#storyCanvasMask #scHelpBtn:focus-visible{outline:2px solid var(--ui-focus)!important;outline-offset:2px}
#storyCanvasMask #scHelpPop{background:var(--ui-s1)!important;border:1px solid var(--ui-line)!important;
  border-radius:var(--ui-r-card)!important;color:var(--ui-ink2)!important;box-shadow:0 20px 60px rgba(0,0,0,.6)!important;backdrop-filter:none!important}
#storyCanvasMask #scHelpPop h4{color:var(--ui-ink)!important;font-size:13px!important}
#storyCanvasMask #scHelpPop b{color:var(--ui-accent)!important}
#storyCanvasMask #scHelpClose{background:transparent!important;border:1px solid var(--ui-line)!important;color:var(--ui-ink2)!important;border-radius:var(--ui-r-chip)!important}
#storyCanvasMask #scHelpClose:hover{border-color:var(--ui-line2)!important;color:var(--ui-ink)!important}

/* ─────────────── 素材瓦片 / 语音节点（补齐卡片外的节点类型）─────────────── */
#storyCanvasMask .sc-asset{color:var(--ui-ink2)}
#storyCanvasMask .sc-asset .sc-lab{color:var(--ui-ink)!important;font-size:11.5px!important;font-weight:500!important;padding:7px 10px 3px!important}
#storyCanvasMask .sc-asset .sc-sub{color:var(--ui-ink4)!important}
#storyCanvasMask .sc-thumb,#storyCanvasMask .sc-ph{border-radius:var(--ui-r-chip)!important;
  box-shadow:inset 0 0 0 1px var(--ui-line)!important}
#storyCanvasMask .sc-ph{background:var(--ui-s2)!important;border:1px dashed var(--ui-line2)!important;color:var(--ui-ink4)!important;
  display:flex;align-items:center;justify-content:center;font-size:10.5px}
#storyCanvasMask .sc-voice .sc-mini b{color:var(--ui-ink)!important;font-size:12px!important}
#storyCanvasMask .sc-voice .sc-out{color:var(--ui-ink4)!important}
#storyCanvasMask .sc-mtag{background:var(--ui-s2)!important;border:1px solid var(--ui-line)!important;color:var(--ui-ink3)!important;border-radius:4px!important}
#storyCanvasMask .sc-vtag{background:var(--ui-s2)!important;border:1px solid var(--ui-line)!important;color:#ff9ad8!important;border-radius:4px!important}
#storyCanvasMask .sc-vrow{gap:6px!important}

/* ── 关键按钮提权：app 运行时会注入同权重的 <style>，这里用更高优先级盖住 ── */
#storyCanvasMask .sc-node .sc-vc-sum [data-vgow] .sc-sbtn.sc-go,
#storyCanvasMask .sc-node .sc-vc-sum [data-vgow] .sc-sbtn.sc-go:hover{
  background:var(--ui-accent)!important;background-image:none!important;border-color:transparent!important;
  color:var(--ui-on-accent)!important;font-weight:600!important;box-shadow:none!important}
#storyCanvasMask .sc-node .sc-vc-sum [data-vgow] .sc-sbtn.sc-go:hover{background:var(--ui-accent-h)!important;background-image:none!important}
#storyCanvasMask .sc-node .sc-shot-ft .sc-sbtn.sc-go{
  background:var(--ui-accent)!important;background-image:none!important;color:var(--ui-on-accent)!important}

/* ─────────────── 节点卡片：surface + 发丝线，去掉重投影 ─────────────── */
#storyCanvasMask .sc-node{border-radius:var(--ui-r-card)!important;border:1px solid var(--ui-line)!important;
  background:var(--ui-s1)!important;box-shadow:none!important;color:var(--ui-ink2)!important}
#storyCanvasMask .sc-node:hover{border-color:var(--ui-line2)!important;box-shadow:0 8px 24px rgba(0,0,0,.45)!important}
#storyCanvasMask .sc-node.sc-sel{border-color:color-mix(in srgb,var(--ui-accent) 65%,transparent)!important;
  box-shadow:0 0 0 2px var(--ui-halo)!important}
#storyCanvasMask .sc-node.sc-tgt{border-color:var(--ui-accent)!important;box-shadow:0 0 0 3px color-mix(in srgb,var(--ui-accent) 30%,transparent)!important}
/* ──【N468·用户要求】汇聚终端（被输入的那个）：与单个节点要有"信号的排列区别感" ──
   位置区别见 tidyNodes（单独成列贴在上游右侧）；这里是视觉信号：琥珀描边 + 外发光 + 角标。
   两点注意：① .sc-node::after 已被发丝线占用 → 用 ::before，并显式写 inset:auto，否则会被它拉伸；
            ② 选择器带上 :hover 变体（1,3,0），否则鼠标划过时会被上面那条 .sc-node:hover 盖掉。 */
#storyCanvasMask .sc-node.sc-sink.sc-sink,
#storyCanvasMask .sc-node.sc-sink.sc-sink:hover{border-color:#ffd666!important;
  box-shadow:0 0 0 2px rgba(255,214,102,.26),0 0 26px rgba(255,214,102,.32)!important}
/* 既被选中又是汇聚终端：琥珀内环 + 外层选区光环 —— 两个信号同时看得见 */
#storyCanvasMask .sc-node.sc-sink.sc-sink.sc-sel{border-color:#ffd666!important;
  box-shadow:0 0 0 2px rgba(255,214,102,.26),0 0 0 5px var(--ui-halo),0 0 26px rgba(255,214,102,.32)!important}
/* 【N471·用户要求】"汇聚终端"角标整条删除（图1 蓝框那个胶囊）——
   位置区别（单独成列 + 垂直居中）与琥珀描边/发光保留，那是上一轮要的"与单个节点的区别感"。 */
#storyCanvasMask .sc-node.sc-dim{opacity:.18!important}
#storyCanvasMask .sc-shot .sc-shot-hd{background:transparent!important;border-bottom:1px solid var(--ui-line)!important;padding:9px 12px!important}
#storyCanvasMask .sc-wk{color:var(--ui-ink)!important;font-weight:600!important;font-size:12.5px!important;letter-spacing:0!important;background:transparent!important}
#storyCanvasMask .sc-badge{background:var(--ui-s2)!important;border:1px solid var(--ui-line)!important;color:var(--ui-ink3)!important;
  font-size:10.5px!important;border-radius:999px!important;padding:1.5px 8px!important}
#storyCanvasMask .sc-vjframe,#storyCanvasMask .sc-vjbox,#storyCanvasMask .sc-vjbody,#storyCanvasMask .sc-vjwrap{border-radius:var(--ui-r-ctrl)!important}
#storyCanvasMask .sc-vjv{border-radius:var(--ui-r-ctrl)!important;box-shadow:none!important;border:1px solid var(--ui-line)}
#storyCanvasMask .sc-inputs{color:var(--ui-ink4)!important;font-size:10.5px!important}
#storyCanvasMask .sc-shot-pr{background:var(--ui-s2)!important;border:1px solid var(--ui-line)!important;
  border-radius:var(--ui-r-ctrl)!important;color:var(--ui-ink2)!important;font-size:11.5px!important;line-height:1.62!important}
#storyCanvasMask .sc-przt{background:var(--ui-s2)!important;border:1px solid var(--ui-line)!important;color:var(--ui-ink2)!important;
  border-radius:var(--ui-r-chip)!important;height:20px!important;padding:0 8px!important;font-size:10.5px!important}
#storyCanvasMask .sc-przt:hover{background:var(--ui-s3)!important;border-color:var(--ui-line2)!important;color:var(--ui-ink)!important}
#storyCanvasMask .sc-przt:focus-visible{outline:2px solid var(--ui-focus)!important;outline-offset:2px}
#storyCanvasMask .sc-prz{background:transparent!important}

/* ─────────────── 卡片内控制台（模型/分辨率/时长/比例/积分/生成）─────────────── */
#storyCanvasMask .sc-vc-l{font-size:10px!important;color:var(--ui-ink4)!important;letter-spacing:.06em!important}
#storyCanvasMask .sc-vc select.sc-vsel,#storyCanvasMask .sc-vmini,#storyCanvasMask .sc-vsel{
  background:var(--ui-s2)!important;border:1px solid var(--ui-line)!important;color:var(--ui-ink)!important;
  border-radius:var(--ui-r-chip)!important;height:28px!important;padding:0 8px!important;font-size:11.5px!important}
#storyCanvasMask .sc-vmini:hover,#storyCanvasMask .sc-vc select.sc-vsel:hover{border-color:var(--ui-line2)!important;background:var(--ui-s3)!important}
#storyCanvasMask .sc-vmini:focus-visible,#storyCanvasMask .sc-vc select.sc-vsel:focus-visible{
  outline:2px solid var(--ui-focus)!important;outline-offset:1px;border-color:transparent!important}
#storyCanvasMask .sc-vc .sc-h3opt{background:transparent!important;border:1px solid var(--ui-line)!important;color:var(--ui-ink2)!important;
  border-radius:var(--ui-r-chip)!important;box-shadow:none!important;font-size:11px!important;padding:0 9px!important;height:26px!important}
#storyCanvasMask .sc-vc .sc-h3opt:hover{background:var(--ui-s2)!important;border-color:var(--ui-line2)!important;color:var(--ui-ink)!important}
#storyCanvasMask .sc-vc .sc-h3opt:focus-visible{outline:2px solid var(--ui-focus)!important;outline-offset:2px}
#storyCanvasMask .sc-vc-cost{color:var(--ui-ink)!important;font-weight:600;font-variant-numeric:tabular-nums}
#storyCanvasMask .sc-vc-note{color:var(--ui-ink4)!important;font-size:10.5px!important;line-height:1.5!important}
#storyCanvasMask .sc-vc-warn{background:color-mix(in srgb,var(--ui-warn) 8%,transparent)!important;
  border:1px dashed color-mix(in srgb,var(--ui-warn) 32%,transparent)!important;border-radius:var(--ui-r-ctrl)!important;color:#ffd68f!important}
#storyCanvasMask .sc-vc-go,#storyCanvasMask [data-vgow]{background:transparent!important;padding:0!important;border-radius:0!important}

/* 卡片底栏：ghost 小按钮 + 唯一的 primary（生成） */
#storyCanvasMask .sc-shot-ft{gap:6px!important;padding:9px 12px 11px!important;border-top:1px solid var(--ui-line)}
#storyCanvasMask .sc-sbtn{height:28px!important;padding:0 12px!important;border-radius:var(--ui-r-chip)!important;
  border:1px solid transparent!important;background:transparent!important;color:var(--ui-ink2)!important;
  font-size:11.5px!important;font-weight:500!important;box-shadow:none!important;cursor:pointer;
  transition:background var(--ui-dur) var(--ui-ease),color var(--ui-dur) var(--ui-ease),border-color var(--ui-dur) var(--ui-ease)}
#storyCanvasMask .sc-sbtn:hover{background:var(--ui-s2)!important;border-color:var(--ui-line)!important;color:var(--ui-ink)!important}
#storyCanvasMask .sc-sbtn:active{transform:translateY(1px)}
#storyCanvasMask .sc-sbtn:focus-visible{outline:2px solid var(--ui-focus)!important;outline-offset:2px}
#storyCanvasMask .sc-sbtn.sc-go{background:var(--ui-accent)!important;border-color:transparent!important;color:var(--ui-on-accent)!important;
  font-weight:600!important;box-shadow:none!important;padding:0 14px!important}
#storyCanvasMask .sc-sbtn.sc-go:hover{background:var(--ui-accent-h)!important;color:var(--ui-on-accent)!important;filter:none!important}
#storyCanvasMask .sc-sbtn.sc-go:active{background:var(--ui-accent-p)!important}
#storyCanvasMask .sc-sbtn.sc-go[disabled],#storyCanvasMask .sc-sbtn.sc-go.is-disabled{background:var(--ui-s3)!important;color:var(--ui-ink4)!important}

/* 连线把手 / 缩略图 / @素材标签 */
#storyCanvasMask .sc-plus{background:var(--ui-s3)!important;color:var(--ui-ink2)!important;border:1px solid var(--ui-line2)!important;
  box-shadow:none!important;transition:background var(--ui-dur) var(--ui-ease),color var(--ui-dur) var(--ui-ease),border-color var(--ui-dur) var(--ui-ease)}
#storyCanvasMask .sc-node:hover .sc-plus{background:var(--ui-accent)!important;color:var(--ui-on-accent)!important;border-color:transparent!important}
#storyCanvasMask .sc-thumb{border-radius:var(--ui-r-chip)!important;border:1px solid var(--ui-line)}
#storyCanvasMask .sc-atname{border-bottom:1px dotted var(--ui-line2)!important;color:var(--ui-ink2)!important}
#storyCanvasMask .sc-atname:hover{color:var(--ui-ink)!important}

/* 资产清单面板 / 右键菜单：同一套语言 */
#storyCanvasMask #scAssets{background:var(--ui-s1)!important;border:1px solid var(--ui-line)!important;border-radius:var(--ui-r-card)!important;box-shadow:0 20px 60px rgba(0,0,0,.6)!important}
#storyCanvasMask #scAssets h3{color:var(--ui-ink)!important;border-bottom:1px solid var(--ui-line)!important}
#storyCanvasMask #scAssetsClose{background:transparent!important;border:1px solid var(--ui-line)!important;color:var(--ui-ink2)!important;border-radius:var(--ui-r-chip)!important}
#storyCanvasMask #scMenu{background:var(--ui-s3)!important;border:1px solid var(--ui-line2)!important;border-radius:var(--ui-r-card)!important;box-shadow:0 16px 44px rgba(0,0,0,.6)!important}
#storyCanvasMask #scMenu .sc-mt{color:var(--ui-ink4)!important}
#storyCanvasMask #scMenu .sc-mi{color:var(--ui-ink2)!important;border-radius:var(--ui-r-ctrl)!important}
#storyCanvasMask #scMenu .sc-mi:hover{background:color-mix(in srgb,var(--ui-ink) 9%,transparent)!important;color:var(--ui-ink)!important}
#storyCanvasMask #scToast{background:var(--ui-s3)!important;border:1px solid var(--ui-line2)!important;color:var(--ui-ink)!important;border-radius:var(--ui-r-ctrl)!important}
/* ═══════ UISKIN-01 END ═══════ */

  /* 【修388】分镜阶段台词对冲 —— 对账面 / 一键压缩 / 超标镜跳转 / 进镜前闸门 */
  .sb388-audit{margin:10px 0 4px;padding:10px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.14);
    background:rgba(255,255,255,.04);font-size:13px;line-height:1.7;color:#e8e8ea}
  .sb388-audit.bad{border-color:rgba(255,140,90,.55);background:rgba(255,120,70,.09)}
  .sb388-audit.ok{border-color:rgba(120,220,150,.40);background:rgba(80,200,120,.07)}
  .sb388-line{margin:2px 0}
  .sb388-head{color:#cfcfd4}
  .sb388-ok{color:#9ff0b8}
  .sb388-bad{color:#ffc08a;font-weight:600}
  .sb388-shots{margin-top:6px;display:flex;flex-wrap:wrap;gap:6px}
  .sb388-jump{cursor:pointer;border:1px solid rgba(255,160,110,.5);background:rgba(255,140,90,.14);
    color:#ffd8bd;border-radius:8px;padding:3px 9px;font-size:12px}
  .sb388-jump:hover{background:rgba(255,140,90,.28)}
  .sb388-acts{margin-top:8px;display:flex;flex-direction:column;gap:6px;align-items:flex-start}
  .sb388-btn{cursor:pointer;border-radius:9px;padding:6px 12px;font-size:13px;
    border:1px solid rgba(255,255,255,.22);background:rgba(255,255,255,.07);color:#eee}
  .sb388-btn.main{border-color:rgba(255,200,90,.65);background:rgba(255,190,70,.18);color:#ffe6b0;font-weight:600}
  .sb388-btn.main:hover{background:rgba(255,190,70,.30)}
  .sb388-btn.ghost{opacity:.82;font-size:12px}
  .sb388-note{margin-top:6px;font-size:12px;color:#a9a9b2}
  .sb-preset-item.sb388-hot{border-color:rgba(255,190,70,.75)!important;box-shadow:0 0 0 1px rgba(255,190,70,.35) inset}
  /* 【修404】原 .sb388-gate / .sb388-gate-body / .sb388-gate-q 四条样式已随大提示卡一并删除。
     ⚠ 共用的 .sb-dlg / .sb-dlg-mask / .sb-dlg-btn / .sb-dlg-title / .sb-dlg-ta 一律保留（预设对话框等仍在用）。 */


/* ══【N460·图片工作台】图片节点的出图控制台 + 预览最大化/下载（整块删除即回滚）══ */
.sc-igc{margin:2px 12px 6px;padding:6px 8px;border:1px solid var(--ln,#23252a);border-radius:8px;background:rgba(9,20,16,.34)}
/* 【N466·修正（用户："参数排列要规整：更小的字体、更小的行距"）】
   ⚠ 必须带 #storyCanvasMask 前缀：UISKIN 有 `#storyCanvasMask .sc-vc-l{font-size:11px!important}` (1,1,0)，
   会压过 `.sc-igc .sc-vc-l` (0,2,0) —— 不带前缀时我写的字号**根本不生效**（这个坑踩过一次）。 */
#storyCanvasMask .sc-igc .sc-vc-row{display:flex!important;align-items:center!important;gap:5px!important;
  flex-wrap:wrap!important;margin:0 0 2px!important;line-height:1.15!important}
#storyCanvasMask .sc-igc .sc-vc-row:last-child{margin-bottom:0!important}
#storyCanvasMask .sc-igc .sc-vc-l{font-size:9.5px!important;color:var(--t3,#8a8f98)!important;
  letter-spacing:.04em!important;white-space:nowrap!important}
/* ⚠ 这三个下拉**必须**用 sc-igsel，不能叫 sc-vsel：
   vmPaintAll()（19032）是 `document.querySelectorAll('.sc-vsel')` 后灌 vmList()＝视频模型清单，
   且 vcPaint()（20678）结尾还会再调它一次 —— 只要名字撞上，图片节点里就会冒出视频模型、
   三个下拉还会被灌成同一份清单（用户实测："怎么使用视频模型 / 重复3个视频模型"）。
   改回 sc-vsel 即复现该 bug。 */
#storyCanvasMask .sc-igc .sc-igsel{height:22px!important;padding:0 5px!important;border-radius:6px!important;
  border:1px solid var(--ln,#23252a)!important;background:rgba(20,21,22,.92)!important;
  color:var(--t1,#f7f8f8)!important;font-size:10px!important;max-width:132px!important}
#storyCanvasMask .sc-igc.is-card .sc-igsel{max-width:88px!important}
/* ══【N469·用户要求】卡片上「模型 / 尺寸 / 分辨率」要**收成一行**，字体再小一档 ══
   上一版是两行（模型+尺寸 / 分辨率）。卡片内宽约 420px：三个标签≈60px + 三个下拉≈186px + 间距 ≈ 261px，
   一行放得下 → 关掉换行（nowrap），标签 8.5px、下拉 19px 高、内边距 3px。 */
#storyCanvasMask .sc-igc.is-card .sc-vc-row{flex-wrap:nowrap!important;gap:3px!important;margin:0!important;min-width:0!important}
#storyCanvasMask .sc-igc.is-card .sc-vc-l{font-size:7.5px!important;letter-spacing:0!important;flex:0 0 auto!important}
/* ══【N472·用户要求】下拉里的内容（1K/2K/4K、16:9、模型名）必须**显示全** ══
   N471 用 56px 上限把控件压窄，结果连"1K"都只剩"[1"（用户截图）。现在反过来：
   ① 字体再小一档（标签 7.5px / 下拉 8px）；② 控件**不再被压窄**（flex:0 0 auto，按内容取值）；
   ③ 只给每类一个"防超长"上限：模型名最长 124px，尺寸 58px，分辨率 54px —— 常见档位全部一眼可见。 */
#storyCanvasMask .sc-igc.is-card .sc-igsel{height:18px!important;padding:0 2px!important;font-size:8px!important;
  flex:0 1 auto!important;min-width:30px!important;border-radius:4px!important}
#storyCanvasMask .sc-igc.is-card select[data-igmodel]{max-width:124px!important}
#storyCanvasMask .sc-igc.is-card select[data-igasp]{max-width:58px!important}
#storyCanvasMask .sc-igc.is-card select[data-igres]{max-width:54px!important}
/* ══【N501·用户要求】卡片上「模型 / 尺寸 / 分辨率」三个选项要**居中**，字号继续收 ══
   用户原话：「继续缩小一倍字号，居中显示3个选项：模型，尺寸，分辨率。」
   ⚠ 字号这里必须讲清楚（探针 lc_n501_row.js 量过真实计算值）：N472 已经把标签压到 7.5px、下拉 8px，
     **字高真减半＝3.8px / 4px**，在约 430px 宽的卡片里基本看不清了。
     所以本轮按"再收一档"落到 6px / 6.5px（约 −20%）＋整行居中；
     若确认要字面减半，把这四个数改成 3.8px / 4px 即可（就这一行）。
   居中用 justify-content:center —— 三个"标签＋下拉"成组一起居中，不是把每个控件各自居中。 */
#storyCanvasMask .sc-igc.is-card .sc-vc-row{justify-content:center!important;gap:6px!important}
#storyCanvasMask .sc-igc.is-card .sc-vc-row .sc-vc-l{font-size:6px!important}
#storyCanvasMask .sc-igc.is-card .sc-vc-row .sc-igsel{font-size:6.5px!important;height:16px!important;padding:0 2px!important}
#storyCanvasMask .sc-igc .sc-igsel:hover{border-color:var(--ln2,#34343a)!important}
#storyCanvasMask .sc-igc .sc-igsel option{background:#0b1c15!important;color:#dcffee!important}
#storyCanvasMask .sc-igc .sc-igfoot{gap:6px!important}
/* ══【N467】生成中的灰罩（工作台预览 + 卡片缩略图共用）══ */
.sc-thumbwrap{position:relative;display:block}
.sc-igbusy{position:absolute;inset:0;z-index:9;display:flex;align-items:center;justify-content:center;
  border-radius:8px;background:rgba(8,14,12,.72);backdrop-filter:blur(1.5px);pointer-events:none}
.sc-igbusy span{font-size:11.5px;color:#9affd1;letter-spacing:.08em;font-weight:600}
/* ══【N467·用户要求】@ 候选行：只显示文字，**划过才出现缩略图** ══ */
.sc-pchip{position:relative}
.sc-pchip .sc-hov{display:none;position:absolute;left:0;bottom:calc(100% + 6px);z-index:40;
  padding:4px;border-radius:9px;border:1px solid rgba(154,255,209,.45);background:rgba(6,14,11,.98);
  box-shadow:0 12px 32px rgba(0,0,0,.6);pointer-events:none}
.sc-pchip:hover .sc-hov{display:block}
.sc-pchip .sc-hov-i{display:block;width:132px;height:132px;object-fit:cover;border-radius:6px}
#storyCanvasMask .sc-igc .sc-vc-note{font-size:9.5px!important;color:var(--t3,#8a8f98)!important}
/* ══【N463】预览图与历次图并排；预览角标必须贴图片角，不能贴"整栏右边缘" ══
   原来 .sc-igpv 一条样式都没有 → 按原尺寸渲染，而 .sc-igwrap 是 display:block 占满整栏宽，
   两个绝对定位的角标于是被推到整栏最右边（用户截图里用箭头指出来的就是这个问题）。
   现在包裹层收成图片大小并居中，图片限高，角标自然落到图片角上。 */
.sc-igrow{display:flex;align-items:flex-start;gap:10px;width:100%}
/* 用 flex 而不是 block：flex 容器**彻底忽略**只含空白的文本节点，包裹层高度就等于图片高度；
   而 block 容器下这些空白会形成匿名行盒把包裹层撑高 ~8px → 绝对定位的 bottom:8px 是相对被撑高的
   包裹层算的，下载角标因此落到图片下沿（实测 下载距图底=0，而 CSS 明明是 8px；line-height:0 不够）。 */
.sc-igwrap{position:relative;display:flex;width:fit-content;max-width:100%;margin:0 auto}
/* ⚠ 选择器必须带 #scDetail 前缀：UISKIN 有一条 `#scDetail img{margin:8px 0}`，特异性 (1,0,1)
   高于 `.sc-igwrap .sc-igpv` 的 (0,2,0) → 不带前缀时 margin:0 被压掉，图片仍带 8px 上下外边距，
   包裹层被撑高 8px，两个角标的 top/bottom:8px 于是正好落在图片边缘而非内缩 8px
   （实测 角标距图右=8 但 下载距图底=0；顶部那 8px 同样偏，之前只量了底部）。
   与上一处编组配色是同一类坑：设置 ≠ 生效，必须比对手的特异性。 */
#scDetail .sc-igwrap .sc-igpv{display:block;margin:0;max-width:100%;max-height:34vh;width:auto;height:auto;
  object-fit:contain;border-radius:8px;background:rgba(0,0,0,.35)}
/* 历次图：田字格（2 列） */
/* ══【修314·用户要求】历史生成浏览区：面板底部整行 · 横向拉动 · 点击最大化 ══
   面板是 grid（`#scDetailBody .sc-sp` 两列）→ 历史条用 grid-column:1/-1 落到第二行（整行），
   两列高度不被挤压（第一行 minmax(0,1fr)，历史条行 auto）。 */
#scDetailBody .sc-sp{grid-template-rows:minmax(0,1fr) auto!important}
/* 【修316】功能选择区（文字表述 / 人像捏制）+ 捏制嵌入区 + 历史条占位 */
#scDetailBody .sc-igtab{display:inline-flex;align-items:center;height:22px;padding:0 10px;margin-left:6px;border-radius:8px;
  border:1px solid rgba(154,255,209,.28);background:rgba(6,16,12,.6);color:#9fd8bd;font-size:11.5px;cursor:pointer;transition:.15s;user-select:none}
#scDetailBody .sc-igtab:hover{border-color:rgba(154,255,209,.72);color:#eafff5}
#scDetailBody .sc-igtab.on{background:linear-gradient(135deg,#a6ffdd,#46d3a4);color:#06251b;border-color:transparent;font-weight:700}
#scDetailBody .sc-igsculpt{flex:1 1 auto;min-height:340px;display:none;flex-direction:column;gap:6px}
#scDetailBody .sc-igsculpt iframe{flex:1 1 auto}
.sc-ighist-strip.is-empty{opacity:.92}
.sc-ighist-none{font-size:11px;color:var(--t3,#8a8f98);padding:6px 2px}
.sc-ighist-strip{grid-column:1/-1;min-width:0;border:1px solid rgba(154,255,209,.18);border-radius:12px;background:rgba(6,14,11,.42);padding:8px 10px}
.sc-ighist-hd{display:flex;align-items:baseline;gap:10px;margin-bottom:6px;flex-wrap:wrap}
.sc-ighist-hd b{font-size:11.5px;color:#9affd1;letter-spacing:.04em}
.sc-ighist-hd span{font-size:10.5px;color:var(--t3,#8a8f98)}
.sc-ighist-rail{display:flex;gap:8px;overflow-x:auto;overflow-y:hidden;padding:2px 2px 6px;scroll-behavior:smooth;scrollbar-width:thin}
.sc-ighist-rail::-webkit-scrollbar{height:8px}
.sc-ighist-rail::-webkit-scrollbar-thumb{background:rgba(154,255,209,.28);border-radius:8px}
.sc-ighist-c{flex:0 0 auto;width:104px;height:74px;padding:0;border-radius:8px;overflow:hidden;cursor:zoom-in;
  border:1px solid var(--ln,#23252a);background:rgba(0,0,0,.3)}
.sc-ighist-c:hover{border-color:rgba(154,255,209,.75);transform:translateY(-1px)}
.sc-ighist-c.on{border-color:#9affd1;box-shadow:0 0 0 1px rgba(154,255,209,.55)}
.sc-ighist-c .sc-ighist-i{width:100%;height:100%;object-fit:cover;display:block}
/* @ 素材缩略图：悬停放大一点，单击最大化；右下＋插入 @ */
.sc-atthumb{position:relative;display:inline-flex;flex-direction:column;align-items:center;gap:2px;
  width:56px;padding:3px;border-radius:9px;cursor:zoom-in;border:1px solid rgba(154,255,209,.24);
  background:rgba(154,255,209,.05);transition:transform .16s,box-shadow .16s,border-color .16s}
.sc-atthumb:hover{transform:scale(1.14) translateY(-1px);z-index:5;border-color:rgba(154,255,209,.62);
  box-shadow:0 6px 18px rgba(0,0,0,.5),0 0 0 1px rgba(154,255,209,.5)}
.sc-atthumb-i{width:48px;height:48px;border-radius:7px;object-fit:cover;display:block}
.sc-atthumb-n{font-size:9.5px;color:var(--t2,#d0d6e0);font-weight:400;max-width:52px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sc-atthumb-add{position:absolute;right:-5px;bottom:-5px;width:17px;height:17px;border-radius:50%;
  text-decoration:none;display:inline-flex;align-items:center;justify-content:center;font-size:11px;
  line-height:1;color:#06120d;background:#9affd1;border:1px solid rgba(6,18,13,.5);cursor:pointer}
.sc-atthumb-add:hover{background:#b8ffe0}
/* 【N465】「已 @」那一行也用缩略图：占位块、× 与试听的位置、以及插入用的是指针光标 */
.sc-atthumb[data-atadd]{cursor:pointer}
.sc-atthumb-ph{width:48px;height:48px;border-radius:7px;display:block;
  background:repeating-linear-gradient(45deg,#0b1512,#0b1512 6px,#0e1a16 6px,#0e1a16 12px)}
.sc-atthumb-del{position:absolute;right:-5px;top:-5px;width:17px;height:17px;border-radius:50%;
  text-decoration:none;display:inline-flex;align-items:center;justify-content:center;
  font-size:11px;line-height:1;color:#220a14;background:#ff9ecb;
  border:1px solid rgba(34,10,20,.5);cursor:pointer;z-index:6}
.sc-atthumb-del:hover{background:#ffb9dc}
.sc-atthumb .sc-atplay{position:absolute;left:-5px;top:-5px;width:17px;height:17px;border-radius:50%;
  text-decoration:none;display:inline-flex;align-items:center;justify-content:center;
  font-size:9px;line-height:1;color:#ff9ecb;background:rgba(255,158,203,.16);
  border:1px solid rgba(255,158,203,.5);cursor:pointer;z-index:6}
.sc-atthumb .sc-atplay:hover{background:#ff9ecb;color:#220a14}
.sc-igmax,.sc-igdl,.sc-igrep{position:absolute;z-index:7;width:24px;height:24px;display:inline-flex;align-items:center;
  justify-content:center;padding:0;border:1px solid rgba(154,255,209,.28);border-radius:7px;
  background:rgba(6,16,12,.66);color:#c9e8d8;cursor:pointer;opacity:.72;
  transition:opacity .15s,background .15s,border-color .15s,color .15s}
.sc-igwrap:hover .sc-igmax,.sc-igwrap:hover .sc-igdl,.sc-igwrap:hover .sc-igrep{opacity:1}
.sc-igmax{top:8px;right:8px}
.sc-igdl{bottom:8px;right:8px}
/* 【N469·根因】替换图标原来**一条样式都没有**：position 是 static → 它是页面里的"裸按钮"，
   被挤在图片旁边、看不出是图标（用户："图2红框区域要设计一个替换图标"）。
   这里让它和最大化/下载同一套外观。
   ══【N477·用户要求】三改 ══
   ① 位置：从"图片左上角"挪到**图片正中间上方**（left:50% + translateX(-50%)，与下图水平居中）；
   ② 视觉：给**荧光红透色**（半透明红底 + 红描边 + 内外红光），一眼看得见是"换这张图"的入口；
   ③ 常亮：不再等 hover 才从 0.72 提到 1（它现在是唯一的替换入口，必须一直显眼）。 */
/* ══【修312·用户要求②】替换图标重设计：**浅绿 + 荧光**，鼠标划到**微放大**即可 ══
   用户原话：「这个替换的图标很难看，动效也很不合理，请设计为 浅绿色，有荧光，鼠标划到会微放大即可」。
   旧版是荧光红 + 常亮 + 划过只换颜色（没有位移/缩放 → 「动效不合理」）。
   现在：浅绿荧光（半透明绿底 + 绿描边 + 内外绿光），划过 1.08 微放大（保留 translateX(-50%) 的居中），
   过渡 .18s 走弹性曲线；只在**有预览图**的分支渲染（空白节点改用下面的文字按钮）。 */
.sc-igrep{top:10px;left:50%;transform:translateX(-50%);opacity:1;
  border-color:rgba(154,255,209,.85);background:rgba(122,255,199,.20);color:#e9fff5;
  box-shadow:0 0 12px rgba(126,255,197,.50),inset 0 0 9px rgba(126,255,197,.30);
  transition:opacity .18s,background .18s,border-color .18s,color .18s,box-shadow .18s,transform .18s cubic-bezier(.2,.8,.2,1)}
.sc-igrep:hover{transform:translateX(-50%) scale(1.08);background:rgba(126,255,197,.34);
  border-color:#9affd1;color:#ffffff;
  box-shadow:0 0 20px rgba(126,255,197,.85),inset 0 0 12px rgba(126,255,197,.45)}
/* 【修312】空白节点的上传入口：安静的浅绿虚线文字按钮（不是那枚荧光"替换"图标） */
.sc-igupload{margin-top:8px;padding:5px 12px;border-radius:8px;cursor:pointer;
  border:1px dashed rgba(154,255,209,.42);background:rgba(126,255,197,.07);color:#bfeeda;
  font-size:11.5px;line-height:1;letter-spacing:.04em;
  transition:background .18s,border-color .18s,color .18s}
.sc-igupload:hover{background:rgba(126,255,197,.16);border-color:rgba(154,255,209,.8);color:#eafff5}
.sc-igmax svg,.sc-igdl svg,.sc-igrep svg{width:12px;height:12px;display:block}
.sc-igmax:hover{color:#eafff5;border-color:rgba(154,255,209,.68);background:rgba(126,255,197,.18)}
.sc-igdl:hover{color:#04241b;background:linear-gradient(135deg,#a6ffdd,#46d3a4);border-color:rgba(154,255,209,.95)}
.vj-max-mask img.vj-max-img{max-width:92vw;max-height:86vh;border-radius:12px;background:#000;
  box-shadow:0 30px 90px rgba(0,0,0,.72);object-fit:contain;display:block}
/* ══【N462】图片节点顶部单行头：⠿ + 名字 + 展开工作台（hover 给浅绿半透立体反馈）══ */
.sc-ighd{display:flex;align-items:center;gap:6px;height:26px;padding:0 7px 0 6px;margin:2px 8px 4px;
  border-radius:8px;cursor:grab;user-select:none;
  transition:background .15s,box-shadow .15s,transform .15s}
.sc-ighd:hover{background:rgba(154,255,209,.13);
  box-shadow:inset 0 0 0 1px rgba(154,255,209,.3),0 3px 10px rgba(0,0,0,.38),0 1px 0 rgba(255,255,255,.07);
  transform:translateY(-1px)}
.sc-ighd:active{cursor:grabbing;transform:translateY(0)}
.sc-iggrip{flex:0 0 auto;display:inline-flex;align-items:center;color:#7fe0a8;opacity:.5;transition:opacity .15s}
.sc-ighd:hover .sc-iggrip{opacity:1}
.sc-iggrip svg{width:11px;height:11px;display:block}
.sc-ignm{flex:1 1 auto;min-width:0;font-size:11.5px;font-weight:500;color:var(--t1,#f7f8f8);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sc-igopen{flex:0 0 auto;height:20px;padding:0 8px;border-radius:6px;border:1px solid var(--ln,#23252a);
  background:rgba(20,21,22,.9);color:var(--t2,#d0d6e0);font-size:10.5px;line-height:18px;cursor:pointer;white-space:nowrap;
  transition:background .15s,border-color .15s,color .15s}
.sc-igopen:hover{background:rgba(126,255,197,.16);border-color:rgba(154,255,209,.62);color:#fff}
/* ══【N462】编组的同色边框 + 同色浅底（--gk 由渲染时按组写入）══
   ⚠ 必须带 `#storyCanvasMask` 前缀。UISKIN 有一条
     `#storyCanvasMask .sc-node{border:…!important;background:var(--ui-s1)!important;box-shadow:none!important}`
   特异性 (1 id,1 class) 高于 `.sc-node.sc-grp` 的 (0 id,2 class) → 不带前缀时这三项**全被压掉**，
   表现为"DOM 里 --gk 挂着、画面却毫无变化"（实机截图确认过）。
   这里用 (1,2,0) 压回去，与 UISKIN 自己给 `.sc-sel` 的写法一致。
   只设 border-color 与 background，**不碰 box-shadow**，把选中态的光环留给 .sc-sel 自己的规则。 */
/* 【N464·用户要求】编组要"整体加深 + 周围加荧光"，但不能糊掉文字：
   底色用深基色混入组色（30%/18%），荧光放在**边缘与内圈**（inset 负扩散），中间区域依旧够暗、字看得清。 */
#storyCanvasMask .sc-node.sc-grp{border-color:var(--gk,#8fd0ff)!important;
  background:linear-gradient(180deg,color-mix(in srgb,var(--gk,#8fd0ff) 30%,#101c18),color-mix(in srgb,var(--gk,#8fd0ff) 18%,#091010))!important;
  box-shadow:0 0 0 2px color-mix(in srgb,var(--gk,#8fd0ff) 55%,transparent),
             0 0 22px 3px color-mix(in srgb,var(--gk,#8fd0ff) 42%,transparent),
             inset 0 0 24px -12px color-mix(in srgb,var(--gk,#8fd0ff) 85%,transparent)!important}
/* 编组 + 选中：光环更亮，边框仍用组色（选中与分组同时看得见） */
#storyCanvasMask .sc-node.sc-grp.sc-sel{border-color:var(--gk,#8fd0ff)!important;
  box-shadow:0 0 0 2px var(--gk,#8fd0ff),
             0 0 28px 4px color-mix(in srgb,var(--gk,#8fd0ff) 62%,transparent),
             inset 0 0 24px -12px color-mix(in srgb,var(--gk,#8fd0ff) 95%,transparent)!important}
/* ══【N462】框选后的动作条：编组/解散/整理/发送至/删除 ══ */
#scActions{position:absolute;z-index:95;display:none;align-items:center;gap:5px;padding:5px 6px;
  border-radius:11px;border:1px solid rgba(154,255,209,.3);background:rgba(8,16,13,.98);
  box-shadow:0 14px 40px rgba(0,0,0,.55);animation:u25Pop .16s var(--u-ez2) both;transform-origin:0 0}
#scActions .sc-act-t{font-size:10.5px;color:#8fb3a2;padding:0 4px;white-space:nowrap}
#scActions .sc-act-t b{color:#9affd1}
#scActions .sc-act{height:24px;padding:0 10px;border-radius:8px;border:1px solid rgba(154,255,209,.24);
  background:rgba(20,36,30,.8);color:#dff7ec;font-size:11.5px;cursor:pointer;white-space:nowrap;
  transition:background .15s,border-color .15s,color .15s}
#scActions .sc-act:hover{background:rgba(126,255,197,.2);border-color:rgba(154,255,209,.68);color:#fff}
#scActions .sc-act-del{border-color:rgba(255,138,138,.34);color:#ffc9c9}
#scActions .sc-act-del:hover{background:rgba(255,120,120,.2);border-color:rgba(255,138,138,.75);color:#fff}
#scActions .sc-act-back{background:transparent;border-color:rgba(154,255,209,.18);color:#a9c2b5}
#scActions .sc-act-tg{max-width:none;overflow:hidden;text-overflow:ellipsis}
/* ══【N464】可拖动区域统一"手掌"光标（用户要求：拖哪里都要看到手掌，提示这里能拖）══ */
#storyCanvasMask .sc-node,
#storyCanvasMask .sc-node .sc-thumb,
#storyCanvasMask .sc-node .sc-ph,
#storyCanvasMask .sc-node .sc-lab,
#storyCanvasMask .sc-node .sc-sub,
#storyCanvasMask .sc-node .sc-inputs,
#storyCanvasMask .sc-node .sc-ighd,
#storyCanvasMask .sc-node .sc-igc{cursor:grab}
/* 文本编辑区仍是文本光标（别把可编辑区也变手掌，否则没法选字） */
#storyCanvasMask .sc-node .sc-itxt,
#storyCanvasMask .sc-node .sc-shot-pr{cursor:text}
#storyCanvasMask .sc-dragging .sc-node,
#storyCanvasMask .sc-dragging .sc-node *{cursor:grabbing!important}
/* ══【N464·用户要求】图片节点不要边框；编组的例外（分组要看得出）══ */
#storyCanvasMask .sc-node.sc-k-img:not(.sc-grp){border-color:transparent!important}
/* ══【N464】发送至：纵向列表 + 实时缩略图 ══ */
#scActions.is-send{flex-direction:column;align-items:stretch;max-height:64vh;min-width:224px}
#scActions .sc-act-sendhd{display:flex;align-items:center;justify-content:space-between;gap:10px}
#scActions .sc-act-sendlist{display:flex;flex-direction:column;gap:4px;overflow-y:auto;max-height:54vh;padding-right:2px}
#scActions .sc-act-tg{display:flex;align-items:center;gap:8px;height:auto;min-height:40px;padding:4px 8px;text-align:left}
#scActions .sc-act-thumb{width:44px;height:36px;object-fit:cover;border-radius:5px;display:block;flex:0 0 auto}
#scActions .sc-act-nothumb{width:44px;height:36px;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  font-style:normal;font-size:16px;border-radius:5px;background:rgba(154,255,209,.08);border:1px solid rgba(154,255,209,.18)}
#scActions .sc-act-tg b{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
#scActions .sc-act-tg em{flex:0 0 auto;font-style:normal;font-size:10px;color:#8fb3a2}
/* ══【N466】多选后"统一拉线"的 ＋：在选区右侧、可拖拽（旧的那个 #scMultiPlus 已删）══ */
/* z-index 必须**低于**画布内的各个面板（#scMenu/#scAssets/#scToast 是 90），
   否则它会浮在资产面板/发送至/toast 之上并拦截点击（审查发现 18）。88 = 高于节点、低于面板。 */
#scMultiDrag{display:none;position:absolute;z-index:88;width:34px;height:34px;border-radius:50%;
  align-items:center;justify-content:center;cursor:crosshair;
  border:1px solid rgba(154,255,209,.55);background:linear-gradient(135deg,#9affd1,#4fd6a4);
  color:#06120d;font-size:17px;font-weight:700;line-height:1;padding:0;
  box-shadow:0 4px 14px rgba(0,0,0,.45),0 0 0 3px rgba(154,255,209,.18);
  transition:transform .14s,box-shadow .14s}
#scMultiDrag:hover{transform:scale(1.12);box-shadow:0 6px 18px rgba(0,0,0,.5),0 0 0 5px rgba(154,255,209,.26)}
#scMultiDrag:active{transform:scale(1.02)}


/* 【N447】分镜工作台：头部常驻（含常驻关闭 ×）、上边缘整条可拖（删除本块即回滚） */
#scDetailGrip{position:sticky!important;top:0!important;z-index:75!important;
  cursor:grab!important;padding-right:46px!important}
#scDetailGrip:active{cursor:grabbing!important}
/* 【N457】原 N447 在这里另建了一个 #scDetailX 图形叉，导致与既有 #scDetailClose 并存＝两个关闭键。
   已删（图形样式上移到 #scDetailClose 基础规则里）。此处只留"手柄栏常驻 + 让出叉位"。 */
#scDetailClose{z-index:76!important}


/* ══【N497·用户指定】锦囊浮层＝方案 D · 居中面板 ══
   一块居中圆角面板 + 面板内**居中对齐的标签流**（flex wrap + justify-content:center）：
   行按内容换行、每行居中，块等宽等高、间距一致 → 整体轮廓规整；块在文档流里，不漂浮不绝对定位。
   这一段刻意放最后，用来覆盖前面遗留的几套块样式。 */
.lc-panel{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(.965);
  width:min(880px,88%);box-sizing:border-box;border-radius:22px;border:1px solid rgba(154,255,209,.34);
  background:linear-gradient(180deg,rgba(14,32,30,.88),rgba(8,18,22,.92));
  box-shadow:inset 0 0 0 1px rgba(91,232,185,.12),0 30px 80px rgba(0,0,0,.6),0 0 60px rgba(91,232,185,.14);
  padding:20px 24px 26px;opacity:0;transition:opacity .26s ease,transform .34s cubic-bezier(.22,1.1,.36,1)}
.lc-panel.on{opacity:1;transform:translate(-50%,-50%) scale(1)}
.lc-panel-hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:14px;
  border-bottom:1px solid rgba(126,190,222,.14)}
.lc-panel-hd b{font-size:14px;font-weight:640;color:#dffff2;letter-spacing:.02em}
.lc-panel-hd span{font-size:11.5px;color:#7d97ad;margin-left:8px}
.lc-panel-hd em{font-style:normal;font:600 10px/1 ui-monospace,"SF Mono",Menlo,monospace;letter-spacing:.1em;color:#5be8b9;opacity:.8}
.lc-flow{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.lc-flow .lc-pill{position:static !important;left:auto;top:auto;display:inline-flex;align-items:center;justify-content:center;
  gap:5px;height:40px;padding:0 18px;border-radius:13px;transform:none;opacity:0;width:auto;max-width:none;
  /* 【N499·用户要求①】这里**故意不给动画**：等 JS 量好"袋口 → 落位"的位移、
     写进 --dx/--dy/--rr/--pd 之后，才给 .lc-flow 挂上 .pc-pour。
     否则动画会抢在变量写入之前起跑（那就是"原地淡入"，看不出是从锦囊里出来的）。 */
  opacity:0}
/* 【N499·用户要求①】从锦囊口"挤出"：0—18% 一直被压成一道缝（scaleX 远大于 scaleY
   → 连胶囊里的文字都是扁的、变形的），然后才被挤出去、边飞边回弹成正常比例。
   ⚠️ 缓动不能用 cubic-bezier(.22,1,.3,1) 那种"一秒冲出去"的曲线 —— 它会把挤压段压到 30ms，
      肉眼根本看不见（实测过：那条曲线下 125ms 时已经回到 0.36/0.14，等于没挤）。
      改用 .46,.03,.22,1（慢起—快中—慢收），挤压段能停留 60~80ms，才真的看得见。 */
.lc-flow.pc-pour .lc-pill{animation:lcPillPour var(--pd-dur,560ms) cubic-bezier(.46,.03,.22,1) var(--pd,0ms) forwards}
@keyframes lcPillPour{
  0%{opacity:0;transform:translate(var(--dx,0),var(--dy,0)) scale(.34,.09) rotate(var(--rr,0deg));filter:blur(3px)}
  7%{opacity:1;transform:translate(calc(var(--dx,0px)*.995),calc(var(--dy,0px)*.995)) scale(.36,.10) rotate(calc(var(--rr,0deg)*.96));filter:blur(3px)}
  20%{transform:translate(calc(var(--dx,0px)*.955),calc(var(--dy,0px)*.955)) scale(.54,.31) rotate(calc(var(--rr,0deg)*.8));filter:blur(2.4px)}
  38%{transform:translate(calc(var(--dx,0px)*.70),calc(var(--dy,0px)*.74 - 12px)) scale(.76,.63) rotate(calc(var(--rr,0deg)*.52));filter:blur(1.4px)}
  58%{transform:translate(calc(var(--dx,0px)*.34),calc(var(--dy,0px)*.40 - 20px)) scale(.96,.90) rotate(calc(var(--rr,0deg)*.24));filter:blur(.5px)}
  78%{transform:translate(calc(var(--dx,0px)*.10),calc(var(--dy,0px)*.14 - 8px)) scale(1.045,.985) rotate(calc(var(--rr,0deg)*.06));filter:blur(0)}
  100%{opacity:1;transform:none;filter:blur(0)}
}
/* 收拢＝反向飞回袋口（错开顺序也反过来，最后一颗先回） */
.lc-flow.pc-back .lc-pill{animation:lcPillBack var(--bd-dur,380ms) cubic-bezier(.5,0,.85,.35) var(--bd,0ms) forwards}
@keyframes lcPillBack{
  0%{opacity:1;transform:none}
  100%{opacity:0;transform:translate(var(--dx,0px),var(--dy,0px)) scale(.30,.10) rotate(var(--rr,0deg))}
}
/* 袋口被"挤"的时候鼓一下（与第一颗同步） */
.lc-pouch.pc-squeeze .lc-pouch-svg,.lc-pouch.pc-squeeze .lc-pouch-img{animation:lcPouchSqueeze .46s cubic-bezier(.34,1.5,.5,1)}
@keyframes lcPouchSqueeze{0%{transform:none}28%{transform:scale(1.10,1.04)}100%{transform:none}}
@media (prefers-reduced-motion:reduce){.lc-flow .lc-pill{animation:none;opacity:1}}

/* ══════════════════════════════════════════════════════════════════════════════
   【N499·用户要求】骰子＋锦囊换 A 方案「极简线性霓虹」线稿（图标 CSS）
   旧 .lc-cube/.lc-face/.lc-pip 那套规则不再命中（新标记里没有这些类），保留不删，方便回滚。
   ⚠️ 插桩位置踩过坑：**不能取"最后一个 style 收尾标签"** —— 页面里有
      insertAdjacentHTML('beforeend', '…样式标签字符串…') 这种写法，那个收尾标签在 JS 字符串里，
      插进去会直接把脚本切断（实测语法 14/14 → 13/14）。而且"比最近的 style / script 开标签谁更近"
      这种启发式也会被骗（字符串里的开标签恰好就在 script 开标签之后）。必须按 script 区间排除。
   ⚠️⚠️ 更大的坑：**这段注释里绝对不能出现 script 或 style 的尖括号标签名** ——
      语法检查脚本正是靠扫描脚本开标签来切块的，注释里出现一次，后面整段 CSS 会被当成脚本体去解析，
      报出一个和真正改动毫无关系的语法错（就是上面那次 13/14）。凡是写进页面的文字都要避开这类字面量。
   ══════════════════════════════════════════════════════════════════════════════ */
/* 【N500·用户要求③】渲染图尺寸：两张图各裁到墨迹外框＋6% 留白、都是 224×224，
   所以"图高"≈1.12×"墨迹高"。两张都用 27px：骰子墨迹 24.1px、锦囊墨迹 24.2px
   —— 正好还原参考图里"锦囊本来就比骰子大 4%"的比例（不要强行拉成等高，那样反而不像原图）。 */
.lc-dice{color:#8fe6c4;perspective:none}
.lc-dice .lc-dice-img{display:block;height:27px;width:auto;transform-origin:50% 50%;-webkit-user-drag:none}
.lc-pouch .lc-pouch-img{display:block;height:27px;width:auto;transform-origin:50% 50%;-webkit-user-drag:none;
  transition:filter .3s ease,transform .34s cubic-bezier(.34,1.4,.5,1)}
/* 【N500·用户要求③】骰子单击＝**原位急促摇晃**（±13° 三次递减 + 一点缩放）。
   换渲染图之后不能再"4×90° 自转"了：那会把图连骰点一起转，看着像"图片在转"而不是"骰子在滚"。 */
.lc-dice.lc-shaking .lc-dice-img{animation:lcDiceShake .5s cubic-bezier(.36,.66,.42,1)}
@keyframes lcDiceShake{
  0%{transform:none}
  12%{transform:rotate(-13deg) scale(1.07)}
  28%{transform:rotate(11deg) scale(.97)}
  44%{transform:rotate(-8.5deg) scale(1.03)}
  60%{transform:rotate(6deg) scale(.99)}
  76%{transform:rotate(-3deg) scale(1.005)}
  100%{transform:none}
}
.lc-pouch[aria-expanded="true"] .lc-pouch-img{filter:drop-shadow(0 0 7px rgba(91,232,185,.55));transform:scale(1.07)}
.lc-dice .lc-dice-svg{display:block;width:26.05px;height:26.05px;overflow:visible}
.lc-dice .lc-spin{transform-box:view-box;transform-origin:16px 16px;
  transition:transform 145ms cubic-bezier(.34,1.44,.62,1)}
.lc-dice .lc-cube-bg{fill:rgba(91,232,185,.10);stroke:currentColor;stroke-width:1.6;stroke-linejoin:round}
.lc-dice .lc-f{opacity:0;transition:opacity 70ms linear}
.lc-dice .lc-f.on{opacity:1}
.lc-dice .lc-p{fill:currentColor}
.lc-dice.lc-rolling{animation:none}
.lc-pouch{color:#8fe6c4}
.lc-pouch .lc-pouch-svg{display:block;width:32.43px;height:32.43px;overflow:visible}
.lc-pouch .pc-ink{fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
.lc-pouch .pc-band{fill:rgba(91,232,185,.14)}
.lc-pouch .pc-lining{opacity:0;transition:opacity .26s ease}
.lc-pouch .pc-lip{transform-box:view-box;transition:transform .46s cubic-bezier(.22,.86,.18,1)}
.lc-pouch .pc-lip-l{transform-origin:13.5px 13.1px}
.lc-pouch .pc-lip-r{transform-origin:18.5px 13.1px}
.lc-pouch[aria-expanded="true"] .pc-lip-l{transform:rotate(-47deg)}
.lc-pouch[aria-expanded="true"] .pc-lip-r{transform:rotate(47deg)}
.lc-pouch[aria-expanded="true"] .pc-lining{opacity:.9}
.lc-pouch[aria-expanded="true"] .lc-pouch-svg{filter:drop-shadow(0 0 6px rgba(91,232,185,.6))}

/* ──【N499·用户要求②】题材芯片的"老虎机"竖向转轮 ──
   旧实现 setInterval 每 75ms 换文字＝闪烁；现在是真名单在窗口里滚上去。
   ⚠️ --lc-reel-h 必须和 JS 里读的值一致（JS 就是读这个变量，不许写死数字）。 */
.lc-slot{--lc-reel-h:16px}
/* 【N500·关键修复】上一轮 .lc-reelstrip **既是 16px 裁切窗口、又被整体 translate** ——
   等于"把窗口连里面的内容一起搬走"，滚出窗口就全被裁掉 → 四格在滚动中是**空的**
   （上一轮探针只验了"有几条、有模糊、有位移"，没验"看得见"，所以漏了；这次截图逮住）。
   正确做法＝外层窗口负责裁切与渐隐、内层列表负责滚动。 */
.lc-reelwin{position:absolute;left:0;right:0;top:50%;margin-top:-8px;height:var(--lc-reel-h);overflow:hidden;pointer-events:none;
  -webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,.35),#000 30%,#000 70%,rgba(0,0,0,.35));
  mask-image:linear-gradient(180deg,rgba(0,0,0,.35),#000 30%,#000 70%,rgba(0,0,0,.35))}
.lc-reelstrip{will-change:transform}
.lc-reelstrip i{display:block;height:var(--lc-reel-h);line-height:var(--lc-reel-h);text-align:center;
  font-style:normal;font-size:11px;color:#cfe6f5;white-space:nowrap}
/* 【N500·用户要求②】四格同起同落：模糊加厚到 2.4px（用户明确要"【模糊】"）；
   速度感靠名单本身滚动，不靠"错开依次停"。 */
.lc-reelstrip.go{animation:lcReelRoll var(--rd,600ms) cubic-bezier(.10,.66,.14,1) forwards;filter:blur(2.4px)}
@keyframes lcReelRoll{from{transform:translateY(0)}to{transform:translateY(var(--rt,0px))}}
/* ──【N499·用户要求④】锁定的格子：长亮绿边（刷新后也认得出）；被摇到时只抖一下表示"我锁着" ── */
.lc-slot.lc-pin{border-color:rgba(91,232,185,.8);color:#c9ffe9;
  box-shadow:0 0 12px rgba(91,232,185,.3),inset 0 0 9px rgba(91,232,185,.1)}
.lc-slot.lc-nudge{animation:lcSlotNudge .42s cubic-bezier(.36,1.5,.5,1)}
@keyframes lcSlotNudge{0%,100%{transform:none}30%{transform:translateX(-3px)}60%{transform:translateX(3px)}}

/* ══════════════════════════════════════════════════════════════════════════════
   【修341】首页工程卡 · 进度格（4 格：剧本 → 素材 → 分镜 → 画布）

   修340 的「进度拉杆」按用户要求做减法，只留「选择」：
     用户原话：「滑竿去掉，仅留下选择即可。但是整体要缩小，目前太大了字，
               占用太多面积了！扁一些，精致一些！」
     · 轨道、绿色滑块、进度条整根删掉（面板里连它们的容器都不再创建）；
     · 面板里除 4 个格子以外什么都没有 —— 标题行删掉、底部提示小字删掉；
     · 剩下一枚扁玻璃药丸：4 格横向均分等宽，格与格之间 3px 极细的缝当分隔。

   尺寸（对照修340 的 68px 高 / 392px 宽，初版是 117px）：
     高 = 上下内边距 3+3 + 格子 30 + 上下边框 .5+.5 → 约 37px（≤ 40px 目标）；
     宽 = min(316px, calc(100vw - 22px)) → 桌面 316px（300–340px 目标区间），
          窄屏按 vw 自适应不被裁（place() 还会把中心夹在视口内 8px 边距里）；
     左右内边距 5px（≤ 6px）；格子字号 12px / 字重 500 / 字距 .06em
     （比修340 小一档，不加粗成大黑体）；4 格 flex:1 1 0 等宽居中。
     圆角用 app 自己的 --r-sm（16px），与首页 .project-card、《备份与恢复》抽屉同一套量级。

   风格照《备份与恢复》抽屉那份定稿的规矩：**颜色一个都不许自己调**——
   细边框全部用 color-mix 从 --ink 推出来（浅底深底都自动成立；前面那行 rgba 是给
   不支持 color-mix 的浏览器兜底）；毛玻璃配方与首页 .project-card / .history-entry
   是同一套（blur(30px) saturate(170%)），所以贴在这张卡下面不违和。
   面板是 position:absolute 挂在 .project-grid 上，**不占网格位置、不改卡片尺寸**，
   收起时不占任何高度（默认收起 = 首页与以前一模一样）。
   ══════════════════════════════════════════════════════════════════════════════ */
.project-grid{position:relative}
.lc-pl{
  --h1:rgba(255,255,255,.075);--h2:rgba(255,255,255,.13);--h3:rgba(255,255,255,.2);
  --bx:rgba(255,255,255,.035);--hl:rgba(255,255,255,.05);
  --h1:color-mix(in srgb,var(--ink,#f3f9ff) 9%,transparent);
  --h2:color-mix(in srgb,var(--ink,#f3f9ff) 15%,transparent);
  --h3:color-mix(in srgb,var(--ink,#f3f9ff) 22%,transparent);
  --bx:color-mix(in srgb,var(--ink,#f3f9ff) 4%,transparent);
  --hl:color-mix(in srgb,var(--ink,#f3f9ff) 6%,transparent);
  position:absolute;left:0;top:0;z-index:40;box-sizing:border-box;
  width:min(316px,calc(100vw - 22px));
  padding:3px 5px;border-radius:var(--r-sm,16px);border:.5px solid var(--h2);
  background:linear-gradient(160deg,rgba(140,170,255,.14),rgba(90,150,255,.06));
  backdrop-filter:blur(30px) saturate(170%);-webkit-backdrop-filter:blur(30px) saturate(170%);
  box-shadow:inset 0 1px rgba(255,255,255,.12),0 12px 28px rgba(0,0,0,.46),0 0 18px var(--glow-jade,rgba(91,232,185,.22));
  color:var(--ink,#f3f9ff);font:12px/1 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased;opacity:0;pointer-events:none;
  transform:translate(-50%,-10px) scale(.98);transform-origin:50% 0;
  transition:opacity .3s ease,transform .42s cubic-bezier(.22,.68,.18,1)}
.lc-pl.on{opacity:1;transform:translate(-50%,0) scale(1);pointer-events:auto}
.lc-pl *{box-sizing:border-box}
/* 面板的全部内容：一行 4 个等宽格子。**没有轨道、没有滑块、没有标题行、没有提示行。** */
.lc-pl .lc-pl-row{position:relative;display:flex;gap:3px;margin:0}
.lc-pl .lc-pl-cell{flex:1 1 0;min-width:0;margin:0;height:30px;padding:0;border-radius:10px;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  border:.5px solid transparent;background:transparent;color:var(--ink-faint,#7c8fb4);
  font-family:inherit;font-size:12px;font-weight:500;letter-spacing:.06em;line-height:1;
  transition:border-color .24s ease,background .24s ease,color .24s ease,box-shadow .24s ease}
.lc-pl .lc-pl-cell.on{border-color:var(--h1);background:var(--bx);color:var(--ink,#f3f9ff)}
.lc-pl .lc-pl-cell.on:hover{border-color:var(--jade,#5be8b9);color:var(--ink,#f3f9ff);
  box-shadow:0 0 14px var(--glow-jade,rgba(91,232,185,.24))}
.lc-pl .lc-pl-cell.on:active{transform:translateY(1px)}
.lc-pl .lc-pl-cell.lk{border-style:dashed;color:var(--ink-faint,#7c8fb4);opacity:.45;filter:grayscale(1);cursor:not-allowed}
.lc-pl .lc-pl-cell:focus-visible{outline:2px solid var(--jade,#5be8b9);outline-offset:1px}

/* 【修341·追加】「全部工程」弹层：每行那颗 5 格进度条点一下 → 本行下方浮出这枚 4 格选择器。
   5 格是「制作体量」指示器（剧本/物料提取/素材图/素材定稿/分镜），里面压根没有「画布」格，
   与导航的 4 页不是一回事 → 原样保留、仍然点不动；选择器另给一枚，
   尺寸/字号/间距/毛玻璃味道与首页那枚**完全同一套**（都是 .lc-pl）。
   浮层 absolute 挂在弹层遮罩上：**不占列表行高、不改行高**，不碰列表 DOM。 */
.lc-pl.mp-pick{z-index:41}
.mp-row .step-dots{--h1:rgba(255,255,255,.075);
  --h1:color-mix(in srgb,var(--ink,#f3f9ff) 9%,transparent);
  cursor:pointer;border-radius:6px;transition:box-shadow .24s ease}
.mp-row .step-dots:hover{box-shadow:0 0 0 3px var(--h1)}


/* ═══【POLY-LENS v1】运镜台节点卡片 ═══ */
.sc-lens{display:flex;flex-direction:column;gap:0;padding:0;overflow:hidden;border-radius:14px;
  background:linear-gradient(180deg,rgba(30,34,46,.97),rgba(22,25,34,.97));
  border:1px solid rgba(126,211,255,.22);box-shadow:0 10px 30px rgba(0,0,0,.45)}
.sc-lens .sc-lhd{display:flex;align-items:center;gap:8px;padding:10px 12px;
  background:linear-gradient(90deg,rgba(126,211,255,.14),rgba(126,211,255,.03));
  border-bottom:1px solid rgba(126,211,255,.16);cursor:grab}
.sc-lens .sc-llogo{font-size:16px;line-height:1}
.sc-lens .sc-ltitle{font-size:13px;font-weight:700;color:#dfeefc;letter-spacing:.5px}
.sc-lens .sc-lcnt{margin-left:auto;font-size:11px;color:#8fd7ff;background:rgba(126,211,255,.12);
  border:1px solid rgba(126,211,255,.24);border-radius:999px;padding:2px 8px}
.sc-lens .sc-lbody{position:relative;flex:1;min-height:150px;display:flex;align-items:center;justify-content:center;
  background:repeating-conic-gradient(rgba(255,255,255,.022) 0% 25%,transparent 0% 50%) 50%/18px 18px}
.sc-lens .sc-lshot{width:100%;height:100%;object-fit:contain;display:block}
.sc-lens .sc-lph{display:flex;flex-direction:column;align-items:center;gap:8px;color:rgba(200,215,230,.5);font-size:12px}
.sc-lens .sc-lphi{font-size:30px;opacity:.55}
/* 【LCV-ONE-LENS v1】画布上已经有运镜台时，你再点"新建运镜台" →
   把已有的那个闪一下，让你一眼看到它在哪（不然只弹个提示，你还是找不到） */
@keyframes lcLensFlash{
  0%,100%{ box-shadow:0 0 0 0 rgba(255,214,90,0); }
  15%,85%{ box-shadow:0 0 0 3px rgba(255,214,90,.95), 0 0 26px 8px rgba(255,196,60,.55); }
}
.sc-node.lc-lens-flash{ animation:lcLensFlash 1.8s ease-in-out 1; border-radius:14px; }
.sc-lens .sc-lfoot{padding:8px 12px;font-size:11px;color:rgba(190,205,225,.55);
  border-top:1px solid rgba(255,255,255,.06);background:rgba(0,0,0,.18)}

/* ═══【POLY-LENS v1】运镜台浮动窗口 ═══ */
.lens-win{position:fixed;z-index:10500;display:flex;flex-direction:column;
  /* 【层级说明·必须留着】画布容器 #storyCanvasMask 是 position:fixed + z-index:9999，
     而 #scViewport 就在它里面 → #scViewport 处在一个 z-index 9999 的层叠上下文里。
     所以窗口的 z-index 必须 > 9999 才盖得住画布（9000 会被画布整个盖住，实测 elementFromPoint 命中的是画布）。
     又必须 < 12000（#moreProjectsMask 项目对话框）和 < 99999（#sbPreviewModal 预览模态），
     这样系统对话框弹出时仍然压在运镜台上面。10500 是这三者之间的正确位置。 */
  width:900px;height:620px;min-width:520px;min-height:340px;
  border-radius:14px;overflow:hidden;background:#0d1117;
  border:1px solid rgba(126,211,255,.30);
  box-shadow:0 24px 70px rgba(0,0,0,.66),0 0 0 1px rgba(255,255,255,.04) inset}
.lens-win.lens-hide{display:none}
.lens-win.lens-max{left:0!important;top:0!important;width:100vw!important;height:100vh!important;border-radius:0}
.lens-win-hd{display:flex;align-items:center;gap:10px;height:40px;padding:0 10px 0 14px;flex:0 0 auto;
  background:linear-gradient(180deg,#1b2130,#151a26);border-bottom:1px solid rgba(126,211,255,.20);
  cursor:grab;user-select:none;-webkit-user-select:none}
.lens-win-hd:active{cursor:grabbing}
.lens-win-title{font-size:13px;font-weight:700;color:#dfeefc;letter-spacing:.5px}
.lens-win-sub{font-size:11px;color:rgba(160,190,220,.55);margin-left:2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:420px}
.lens-win-btns{margin-left:auto;display:flex;gap:6px}
.lens-win-btns button{width:28px;height:26px;border-radius:7px;cursor:pointer;font-size:13px;line-height:1;
  background:rgba(255,255,255,.06);color:#cfdcea;border:1px solid rgba(255,255,255,.12)}
.lens-win-btns button:hover{background:rgba(126,211,255,.18);border-color:rgba(126,211,255,.4)}
.lens-win-btns #lensWinClose:hover{background:rgba(255,90,90,.25);border-color:rgba(255,120,120,.5)}
.lens-win-body{position:relative;flex:1;min-height:0;background:#0b0f16}
.lens-win-body iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block;background:#0b0f16}
.lens-win-rs{position:absolute;right:0;bottom:0;width:20px;height:20px;cursor:nwse-resize;z-index:2;
  background:linear-gradient(135deg,transparent 50%,rgba(126,211,255,.45) 50%)}
.lens-win-load{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  color:rgba(180,205,230,.7);font-size:13px;background:#0b0f16;z-index:1}
.lens-win-load span::after{content:'';display:inline-block;width:8px}


/* ══════【修320·用户要求】图片工作台面板：图2/图4 的「错位/重叠/点按无效」根治 ══════
   实测复现（无头真浏览器量到）：内容区滚动后，页签整段滑到 sticky 手柄底下
   （页签 63~85 vs 手柄底 89），手柄是半透明的 → 视觉上"文字重叠"，且命中测试落在手柄上
   → 点击被手柄吞掉＝"点按无效"；关掉画布再进（DOM 重建、滚动位置归零）就正常——
   与用户描述的现象逐条对上。根治＝让内容**永远不可能**滑到手柄底下（结构上分层），
   而不是再补一层 z-index/背景。 */
#scDetail{display:flex!important;flex-direction:column!important;overflow:hidden!important}
#scDetail[hidden]{display:none!important}   /* 关面板走这里（比上面的 flex!important 特异性高）；开面板时移除 hidden */
#scDetailGrip{flex:0 0 auto!important}
#scDetailBody{flex:1 1 auto!important;min-height:0!important;overflow:auto!important;overscroll-behavior:contain}
/* 内容只滚一层：内层不再各自滚动/限高（旧规则会把表头滚出可视区、或被容器裁掉 → 页签点不到） */
#scDetailBody .sc-sp{height:auto!important;min-height:100%!important;max-height:none!important;overflow:visible!important;
  display:flex!important;flex-wrap:wrap!important;align-items:stretch!important;gap:10px!important;
  grid-template-columns:none!important;grid-template-rows:none!important}
#scDetailBody .sc-sp-l{flex:1 1 380px!important;min-width:240px!important;max-height:none!important;overflow:visible!important}
#scDetailBody .sc-sp-r{flex:1 1 320px!important;min-width:230px!important;max-height:none!important;overflow:visible!important;
  display:flex!important;flex-direction:column!important}
#scDetailBody .sc-ighist-strip{flex:1 1 100%!important}
/* 表头行：可整行换行，但每个页签/标签**自己不许断字**（图2 的竖排文字根治） */
#scDetailBody .sc-sp-hd,#storyCanvasMask .sc-sp-hd{flex-wrap:wrap!important;row-gap:4px!important;min-width:0!important}
#scDetailBody .sc-sp-hd>*{flex:0 0 auto!important}
#scDetailBody .sc-igtab{white-space:nowrap!important;flex:0 0 auto!important}
#scDetailBody .sc-sp-hd .sc-sp-st{margin-left:auto!important;white-space:nowrap!important}
/* 捏制预览窗给足高度（用户："预览图小了，要加大满框"——原型内部再做面部自适应放大） */
#scDetailBody .sc-igsculpt{min-height:420px!important}
/* 窄面板（缩至左侧）/窄视口：一律不许横向溢出 */
#scDetailBody,#scDetailBody .sc-sp,#scDetailBody .sc-sp-l,#scDetailBody .sc-sp-r{max-width:100%!important;box-sizing:border-box!important}
@media(max-width:980px){#scDetailBody .sc-sp{display:flex!important;flex-wrap:wrap!important}
  #scDetailBody .sc-sp-l,#scDetailBody .sc-sp-r{flex:1 1 100%!important}}


/* ══════【修321·用户要求】①「历史生成」缩略图：普通鼠标（去放大镜）+ 悬停微发光、微放大 ══════ */
#scDetailBody .sc-ighist-c{cursor:default!important;
  transition:transform .18s cubic-bezier(.22,.68,.18,1),box-shadow .18s ease,border-color .18s ease!important}
#scDetailBody .sc-ighist-c:hover{transform:scale(1.055) translateY(-1px)!important;
  border-color:rgba(154,255,209,.85)!important;
  box-shadow:0 0 14px rgba(126,255,197,.45),0 6px 18px rgba(0,0,0,.45)!important}
/* ══════【修321·用户要求】② 右上「图片」预览恢复以前的大小 ══════
   病因：修320 把右列改成 flex-wrap 后，整列的"确定高度链"断了（.sc-sp 高度变 auto）→
   旧规则 `b-go{flex:1 1 34%}` 的 34% 失去基准 → 预览块塌成内容高 → 图变小。
   修法：恢复确定高度链（.sc-sp 撑满内容区、图片块吃掉剩余高度、AI 修改块回到内容高/≤34%）。 */
#scDetailBody .sc-sp{height:100%!important}
#scDetailBody .sc-sp-r>.sc-sp-box.b-go{flex:1 1 auto!important;min-height:240px!important}
#scDetailBody .sc-sp-r>.sc-sp-box.sc-aibox{flex:0 1 auto!important;max-height:34%!important}
#scDetail .sc-igwrap .sc-igpv{max-height:34vh!important}


/* ══════【修322·用户要求】② 右上「图片」预览窗：**必须看到整图** ══════
   病因：b-go 框比图矮（min-height 240 < 抬头30+图≤34vh+控制台≈100+内边距），
   而 b-go 是 overflow:hidden → 图的底部（人物脚部）被框体裁掉。
   修法：框体下限改为"34vh + 170px"（图 + 抬头 + 控制台的正常高度），整块装得下。 */
#scDetailBody .sc-sp-r>.sc-sp-box.b-go{min-height:calc(34vh + 170px)!important}
#scDetail .sc-igwrap .sc-igpv{object-fit:contain!important;height:auto!important}
/* ══════【修322·用户要求】① 历史生成：放下面（底部整行）、仅一行可左右查阅 ══════
   JS 已把历史条挪到 .sc-sp 这一层；这里保证：整行、贴栏目底部、横向唯一一行、可滚动查阅。 */
#scDetailBody .sc-ighist-strip{flex:1 1 100%!important;align-self:stretch!important;
  display:flex!important;flex-direction:column!important;justify-content:flex-end!important;margin-top:2px!important}
#scDetailBody .sc-ighist-rail{flex-wrap:nowrap!important;overflow-x:auto!important;overflow-y:hidden!important;min-height:82px!important}


/* ══════【修323·用户要求①】一页内看到所有板块（含底部历史条整条可见）══════
   实测口径（1440×810＝用户真机屏）：面板最大化本已用满全屏，是**内容**比可视区高 ~240px：
   左列(素材+捏制) 与 右列(图片+AI) 各 ~590 + 历史条 130 + 边距 > 可视 ~710。
   修法：面板上下边距各让一点 + 捏制区/AI 框/历史条三块瘦身；**图片预览与捏制预览的"大"一律不动**。 */
#scDetail.sc-max{top:44px!important;bottom:6px!important}
#scDetailBody .sc-sp{gap:8px!important;padding:8px!important}
#scDetailBody .sc-sp-l{gap:5px!important}
/* ① 捏制区：高度收敛为响应式定值带（脸仍会满框——原型 v9 会自动放大到脸） */
#scDetailBody .sc-igsculpt{height:clamp(280px,40vh,410px)!important;min-height:0!important;flex:0 0 auto!important}
#scDetailBody .sc-igsculpt iframe{min-height:0!important}
/* ② AI 修改框：去掉重复说明行 + 文本域收成 46px（原 78px） */
#scDetailBody .sc-aibox .sc-sp-tip{display:none!important}
#scDetailBody .sc-aibox .sc-sp-in{min-height:38px!important;height:38px!important;resize:none!important}
#scDetailBody .sc-aibox .sc-sp-msg{min-height:0!important;margin-top:4px!important}
#scDetailBody .sc-sp-r>.sc-sp-box.sc-aibox{max-height:none!important;min-height:0!important;flex:0 0 auto!important;padding:8px 10px!important}
/* ③ 素材区：提到面板**最上面、整行宽**（JS 已把 #scAtBox 移成 .sc-sp 的直接子元素）
   —— 整行宽后 17 个 @ 素材 chips 从 3~4 行降到 2 行，一次让出约 130px，给"一页装下" */
#scDetailBody .sc-sp>#scAtBox{flex:1 1 100%!important}
/* ④ 历史条：略收（仍是一行、仍可左右查阅） */
#scDetailBody .sc-ighist-strip{padding:6px 8px!important}
#scDetailBody .sc-ighist-rail{min-height:48px!important;padding:0 2px 2px!important}
#scDetailBody .sc-ighist-c{width:88px!important;height:52px!important}
/* ④ 图片预览 34vh→28vh（**整图仍完整可见**，只小一档；换来一屏装下） */
#scDetail .sc-igwrap .sc-igpv{max-height:26vh!important}
#scDetailBody .sc-sp-r>.sc-sp-box.b-go{min-height:calc(26vh + 160px)!important}
/* ⑤ @素材块 chips 紧凑 */
#scDetailBody .sc-atbox{padding:5px 8px!important}
#scDetailBody .sc-atbox .sc-pchip{height:20px!important;font-size:10px!important;line-height:20px!important;padding:0 7px!important}
/* ══【修323b·实测配刀】块高诊断：素材127 + 两列692 + 历史103 = 948 vs 可视 708。
   根因＝`.sc-sp` 的 height:100% 把"素材行 + 历史条"的高度**重复计算**了一遍 →
   取消它（改 auto），再按实测把控制台/历史条/素材 chips 各收一档；两个预览保留。 ══ */
#scDetailBody .sc-sp{height:auto!important;min-height:0!important;gap:6px!important;padding:7px!important}
#scDetailBody .sc-sp-l .sc-sp-ed{min-height:120px!important}
#scDetailBody .sc-igc{margin:2px 8px 4px!important;padding:4px 6px!important}
#scDetailBody .sc-igc .sc-vc-row{margin:0 0 1px!important}
#scDetailBody .sc-igc button{height:24px!important;min-height:24px!important}
#scDetailBody .sc-ighist-hd{margin-bottom:3px!important}
#scDetailBody .sc-ighist-strip{margin-top:0!important}
/* ══【修323c·探针实测配刀】探针结论：.sc-sp 内容真实高 928（两列各 694 是被"撑满/压扁"撑出来的假象，
   图片框 541、编辑框 660 都是 flex:1 填出来的；两列真实内容只有 ~500）。正解：
   ① .sc-sp 不收缩（容器＝内容高，不再压扁）；② 图片框 flex:0 0 auto（高度＝内容，绝不裁图）；
   ③ 图片 26vh→23vh、控制台/历史条/素材再各收一档。预计总量 ≈670 ≤ 708。 ══ */
#scDetailBody .sc-sp{flex:0 0 auto!important;max-height:none!important}
#scDetailBody .sc-sp-r>.sc-sp-box.b-go{flex:0 0 auto!important;min-height:0!important}
#scDetail .sc-igwrap .sc-igpv{max-height:23vh!important}
#scDetailBody .sc-igc{margin:2px 6px 3px!important;padding:3px 5px!important}
#scDetailBody .sc-aibox .sc-sp-in{min-height:30px!important;height:30px!important}
#scDetailBody .sc-ighist-rail{min-height:40px!important}
#scDetailBody .sc-ighist-c{height:44px!important;width:76px!important}
#scDetailBody .sc-ighist-hd{margin-bottom:2px!important}
#scDetailBody .sc-atbox{padding:4px 7px!important}
#scDetailBody .sc-atbox .sc-pchip{height:18px!important;line-height:18px!important}
/* ══【修323d·父链定因】探针证明 .sc-sp 的 height/min/max/flex 全部归位却仍钉在 708＝内容区可视高：
   约束来自**父级布局**（内容区是 grid/flex，把唯一子元素撑满整行）。修法（只改图片工作台，
   用 :has 精确限定；分镜/视频工作台保持原样——它们的"满高视频框"链路依赖撑满，不能误伤）：
   内容区回普通块流 + 子项按真实内容高排布。 ══ */
#scDetailBody:has([data-cidedit]){display:block!important}
#scDetailBody:has([data-cidedit]) .sc-sp{height:auto!important;min-height:0!important;max-height:none!important;flex:0 0 auto!important;align-self:start!important}
#scDetailBody:has([data-cidedit]) .sc-sp-l,#scDetailBody:has([data-cidedit]) .sc-sp-r{height:auto!important;min-height:0!important}


/* ══【修324·用户要求】封面三个占位功能按钮：整体灰暗、看似不可点按（但点按给「敬请期待」）══ */
#lcQuickC,#lcQuickD,#lcQuickE{position:fixed;top:18px;z-index:9498;box-sizing:border-box;display:none;align-items:center;gap:7px;
  height:38px;padding:0 16px;border:.5px solid rgba(255,255,255,.16);border-radius:8px;background:transparent;
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);color:rgba(255,255,255,.42);font-size:12px;font-weight:300;
  letter-spacing:.18em;font-family:inherit;cursor:pointer;white-space:nowrap;filter:grayscale(1);opacity:.55;
  transition:.4s cubic-bezier(.22,.68,.18,1)}
#lcQuickC:hover,#lcQuickD:hover,#lcQuickE:hover{opacity:.74}
#lcQuickC svg,#lcQuickD svg,#lcQuickE svg{flex:0 0 auto;opacity:.8}
@media(max-width:760px){#lcQuickC,#lcQuickD,#lcQuickE{display:none!important}}


/* ══【修335】圈选素材 → 必提素材 ══ */
#lcPickBtn{position:relative;z-index:52}
#lcPickBtn.on{font-weight:700;box-shadow:0 0 0 1px rgba(94,255,202,.55),0 0 22px rgba(94,255,202,.45)}
#lcPickBtn.busy{opacity:.6;cursor:progress}
.lc-must-pill{background:rgba(94,255,202,.16)!important;border-color:rgba(94,255,202,.5)!important;color:#c8ffe8!important;font-weight:700}
body.lc-picking #scriptPage{box-shadow:inset 0 0 0 2px rgba(94,255,202,.45);border-radius:16px}
body.lc-picking #scriptPage pre,body.lc-picking #scriptOutput,body.lc-picking #scriptText{cursor:crosshair}
body.lc-picking #scriptOutput::selection,body.lc-picking #scriptText::selection{background:rgba(94,255,202,.42);color:#04140f}
.lc-pick-flash{position:fixed;z-index:99998;pointer-events:none;background:rgba(94,255,202,.38);border-radius:4px;animation:lcPickFade .95s ease forwards}
@keyframes lcPickFade{0%{opacity:1}100%{opacity:0}}
.lc-pick-undo{position:fixed;right:18px;bottom:22px;z-index:99999;display:flex;gap:12px;align-items:center;padding:10px 14px;border-radius:12px;background:rgba(8,26,20,.94);border:1px solid rgba(94,255,202,.45);color:#d8fff0;font-size:13px;box-shadow:0 10px 30px rgba(0,0,0,.45);max-width:86vw}
.lc-pick-undo button{background:linear-gradient(135deg,rgba(94,255,202,.9),rgba(60,200,255,.8));color:#04231a;border:0;border-radius:999px;padding:4px 14px;font-weight:700;cursor:pointer}
.lc-must-panel{position:fixed;z-index:99997;width:min(430px,92vw);max-height:62vh;overflow:auto;background:rgba(9,20,17,.97);border:1px solid rgba(94,255,202,.35);border-radius:14px;box-shadow:0 18px 50px rgba(0,0,0,.55);color:#e8fff8;font-size:13px}
.lc-must-head{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid rgba(94,255,202,.18);position:sticky;top:0;background:rgba(9,20,17,.98)}
.lc-must-tip{opacity:.62;font-size:11px;flex:1}
.lc-must-head button{background:transparent;border:1px solid rgba(94,255,202,.35);color:#c8ffe8;border-radius:8px;padding:3px 9px;cursor:pointer;font-size:12px}
.lc-must-body{padding:6px 10px 12px}
.lc-must-row{display:grid;grid-template-columns:1fr 88px 30px;gap:8px;align-items:center;padding:7px 0;border-bottom:1px dashed rgba(255,255,255,.08)}
.lc-must-name{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);border-radius:8px;color:#fff;padding:5px 8px;font-size:13px;width:100%}
.lc-must-cat{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);border-radius:8px;color:#fff;padding:5px 4px;font-size:12px}
.lc-must-del{background:transparent;border:0;color:#ff9c9c;cursor:pointer;font-size:14px}
.lc-must-src{grid-column:1/-1;opacity:.55;font-size:11px;margin-top:2px}
.lc-must-pend{grid-column:1/-1;color:#ffd27a;font-size:11px}
.lc-must-empty{padding:16px 14px;opacity:.7;line-height:1.7}
@media(max-width:760px){.lc-must-panel{width:94vw;max-height:56vh}}
/* ══════════【修356·用户要求】工作台「展开模式」一屏可见（纯布局，不碰任何功能逻辑） ═════════════
   用户原话：「现在这个展开模式，显示不全，需要修复！缩减行距，使之全部选项在一页中完全可视！」
   实测根因（headless Chrome + getBoundingClientRect，1024×552 CSS 视口＝2048×1105 Retina 等效）：
     · .b-go 盒高 362px，盒内内容真实高 526px → 控制台（模型/分辨率/时长/比例/积分/生成）
       整块落到盒外 156px，被 .b-go 的 overflow 裁掉 ⇒ 只能靠滚动才看得到「生成」；
     · .b-go>.sc-vj 被写成 flex:1 0 auto（**只许长大、不许收缩**）+ 预览框 min-height:150px
       ⇒「参考素材 127 + 视频预览 150」成了压不下去的硬底，把控制台顶出盒子；
     · .sc-sp-r 内容高 542 > 盒高 450，且 overflow:visible ⇒ 溢出量转嫁给 #scDetailBody 的滚动条；
     · @素材块 191.5px 整行宽常驻，也参与挤压。
   手段（只碰布局：行距/内边距/块间距/块高/排列方向；字号一律不动，控件高度不缩到难点，六个控件一个不少）：
     ① 右栏恢复"确定高度链"：唯一可伸缩的是「生成视频」块；控制台 flex:0 0 auto，永不被裁；
     ② 矮视口「参考素材 + 视频预览」改**并排**，省掉纵向叠加，高度随可用空间自适应；
     ③ 行距/内边距/块间距再收一档；@素材块整行宽 + 限高（内容不删，超出内部滚动）；
     ④ AI 修改块改内容高并限高，不抢「生成视频」块的高度。
   ⚠ 作用域＝"含视频生成块 .b-go 的工作台"（分镜工作台 / 自建视频工作台）；
     图片工作台（有 [data-cidedit] 而无 .b-go）与剧本页、@素材机制、下拉重建门一律不受影响。 */

/* ① 面板内容区：一屏装下，不再整体滚动（溢出一律由内部块自己吸收） */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go){display:flex!important;flex-direction:column!important;overflow:hidden!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp{
  display:grid!important;flex:1 1 auto!important;height:100%!important;min-height:0!important;max-height:100%!important;
  grid-template-columns:minmax(0,1.18fr) minmax(0,.82fr)!important;
  grid-template-rows:auto minmax(0,1fr)!important;
  align-content:stretch!important;gap:6px!important;padding:6px!important;overflow:hidden!important;box-sizing:border-box!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>#scAtBox{
  grid-column:1/-1!important;grid-row:1!important;flex:none!important;min-width:0!important;
  max-height:clamp(72px,12.5vh,178px)!important;overflow-y:auto!important;overflow-x:hidden!important;padding:4px 7px!important;box-sizing:border-box!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-sp-l{
  grid-column:1!important;grid-row:2!important;display:flex!important;flex-direction:column!important;
  min-width:0!important;min-height:0!important;height:auto!important;max-height:100%!important;overflow:hidden!important;gap:5px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-sp-r{
  grid-column:2!important;grid-row:2!important;display:flex!important;flex-direction:column!important;
  min-width:0!important;min-height:0!important;height:auto!important;max-height:100%!important;overflow:hidden!important;gap:6px!important}
/* 左列提示词框：向下吃满，内部自己滚 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-l>.sc-sp-ed{
  flex:1 1 auto!important;min-height:0!important;height:auto!important;max-height:none!important;overflow:auto!important}

/* ② 生成视频块：唯一可伸缩块；控制台永不参与收缩、永不被裁 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-r>.b-go{
  flex:1 1 auto!important;min-height:0!important;max-height:100%!important;
  display:flex!important;flex-direction:column!important;overflow:hidden!important;
  padding:6px 9px!important;box-sizing:border-box!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-sp-hd{
  flex:0 0 auto!important;margin:0 0 3px!important;padding:0!important;line-height:1.3!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj{
  flex:1 1 auto!important;min-height:56px!important;overflow:hidden!important;
  row-gap:4px!important;column-gap:6px!important;align-items:stretch!important;align-content:stretch!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vc{
  flex:0 0 auto!important;min-height:0!important;overflow:visible!important;margin:0!important;padding:2px 0 0!important}

/* ③ 视频预览区：**不换行的定列**（撤掉 N306 的 flex-wrap —— 换行会让"溢出量"变成不可控）
   · 参考素材条：内容高、贴顶；· 预览框：唯一可缩块，向下吃满剩余高度 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj{
  flex-direction:column!important;flex-wrap:nowrap!important;align-items:stretch!important;align-content:stretch!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
  flex:0 0 auto!important;min-width:0!important;max-width:100%!important;max-height:100%!important;
  align-self:stretch!important;overflow:hidden!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
  flex:1 1 auto!important;min-height:0!important;height:auto!important;max-height:100%!important;
  aspect-ratio:auto!important;align-self:stretch!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>*{min-width:0!important;max-width:100%!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row{
  max-height:100%!important;grid-template-rows:repeat(2,minmax(24px,1fr))!important;grid-auto-columns:minmax(84px,1fr)!important}

/* ④ 控制台行距：块间距/行高再收一档（字号保持原值不动） */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-row,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-row2,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-sum{
  margin:0 0 2px!important;row-gap:2px!important;align-items:center!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-sum{margin-bottom:0!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-note,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-cost{line-height:1.2!important;margin-top:0!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-warn{padding:2px 7px!important;line-height:1.25!important}
/* 「分辨率/时长/比例」行：面板一窄就放开换行 —— nowrap 会把第三项「比例」挤出右边界被裁掉（实测 elementFromPoint 打不中） */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-row.sc-vc-r2{
  flex-wrap:wrap!important;row-gap:2px!important;overflow-x:visible!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-go,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) [data-vgow]{min-height:28px!important}

/* ⑤ AI 修改块：内容高 + 限高，不抢生成块空间 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-r>.sc-aibox{
  flex:0 1 auto!important;min-height:0!important;max-height:32%!important;overflow-y:auto!important;
  padding:6px 9px!important;box-sizing:border-box!important}
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-aisel{min-heig … */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-sp-in{
  min-height:28px!important;height:28px!important;max-height:28px!important;resize:none!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-sp-row .sc-btn{height:28px!important;min-height:28px!important}

/* ⑥ 矮视口（≤680）：参考素材与视频预览**并排**，省掉纵向叠加，预览框与素材列上下沿对齐 */
@media (max-height:680px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj{
    flex-direction:row!important;flex-wrap:nowrap!important;align-items:stretch!important;row-gap:0!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
    flex:0 0 34%!important;max-width:34%!important;order:-1!important;min-width:0!important;max-height:100%!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
    flex:1 1 auto!important;min-width:0!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row{
    grid-auto-columns:minmax(74px,1fr)!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-r>.sc-aibox{max-height:26%!important}
}
/* ⑦ 极矮视口：再收一档 */
@media (max-height:700px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp{gap:5px!important;padding:5px!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-sp-hd{margin-bottom:2px!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-r>.sc-aibox{max-height:26%!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-sp-in{
    min-height:24px!important;height:24px!important;max-height:24px!important}
}
/* ⑧ 窄**面板**（不是窄视口）改单列三行 —— @素材 / 提示词 / 生成视频，顺序不变。
   为什么用容器查询而不是 @media(max-width:980px)：面板宽度可以由「缩至左侧」砍到一半而**视口仍很宽**
   （实测 1280×720 缩至左侧 → 面板仅 640px，但媒体查询看的是 1280 → 旧的窄屏规则永不触发）。
   列一窄，「分辨率/时长/比例」行就要折成 3 行、积分行也折行 → 控制台自身涨到 ~260px，
   固定 2 列时右栏只有 ~205px 宽 → 控制台必然被 .b-go 裁掉。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go){container-type:inline-size}
@container (max-width:840px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp{
    grid-template-columns:minmax(0,1fr)!important;
    grid-template-rows:auto minmax(56px,.3fr) minmax(0,1.7fr)!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-r>.sc-aibox{max-height:14%!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj{min-height:48px!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-sp-l{
    grid-column:1!important;grid-row:2!important;max-height:100%!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-sp-r{
    grid-column:1!important;grid-row:3!important;max-height:100%!important}
}
/* 兜底：视口本身也窄时同样单列（老规则沿用，双保险） */
@media (max-width:980px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp{
    grid-template-columns:minmax(0,1fr)!important;
    grid-template-rows:auto minmax(56px,.3fr) minmax(0,1.7fr)!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-r>.sc-aibox{max-height:14%!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj{min-height:48px!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-sp-l{
    grid-column:1!important;grid-row:2!important;max-height:100%!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-sp-r{
    grid-column:1!important;grid-row:3!important;max-height:100%!important}
}
/* ══════════【修356·结束】═════════════════════════════════════════════════ */

/* ══════════════════════════════════════════════════════════════════════════
   【修372】分镜工作台 · 视频预览区（红框）放大 ＋ 历史版本区（蓝框）压缩
           ＋ 整页一屏装下（无垂直滚动条）
   ─────────────────────────────────────────────────────────────────────────
   用户原话：「红框是视频生成后预览区，目前太小了！！！！蓝框是历史视频区，
             太大了，修复为合理状态！整个页面信息要在一页中完整呈现，
             可以整体字体与行距缩小！禁止出现上下拉杆！」

   ◆ 病根（真浏览器实测 + 规则溯源，不是猜的）
     ① 红框被压扁的真因：`#scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe`
        （修356）写的是 `flex:1 1 auto; height:auto; aspect-ratio:auto`。
        `.sc-vj` 是 column flex，面板一矮这块只剩几十 px；
        而 `height:auto` 让 <video> 退回**内容固有高度** → 实测 1366×768 下
        预览框只有 496×47（宽高比 ≈ 10.6:1，16:9 早就没了）。
     ② 蓝框过大的真因：`.sc-vjhist-row{max-height:52px}` + `.sc-vjhist-th{92×52}`
        是**写死**的，三档视口下高度恒为 75px、缩略图恒占一整行
        → 面板高它不缩、面板矮它也不缩，还独占了预览区抢不到的高度。
     ③ 上下拉杆的真因：`#scDetail` 自身 `overflow:auto`，`#scDetailBody` 与 `.sc-aibox`
        也是 auto；内容高一点就冒竖条（实测三档视口 #scDetail 全部 hasVScroll=true）。

   ◆ 做法（**纯 CSS，零 DOM 结构改动、零 JS 改动**）
     把「谁可伸缩、谁固定高」重新分工，并让预览框拿到**确定的高度**：
       · 生成视频块 .b-go  = 唯一伸缩块（吃掉全部富余）
       · 预览框 .sc-vjframe = flex:1 1 auto + min-height:0（确定高度，不再 height:auto 塌陷）
       · 控制台 .sc-vc       = 固定高（模型/分辨率/时长/比例/积分/生成 永不被挤走）
       · 历史版本条          = 固定高、**大幅压缩**（一行横向排列、缩略图变小）
       · AI 修改块           = 固定高、内部滚动
     再统一收紧字号/行距（用户已明确授权），保证 1366×768 起就能一屏放下。
   ══════════════════════════════════════════════════════════════════════════ */

/* ── ① 面板容器：只允许「一屏内」的高度，且**自身绝不出现竖条** ── */
#storyCanvasMask #scDetail{max-height:calc(100vh - 88px)!important;overflow:hidden!important}
#storyCanvasMask #scDetailBody{overflow:hidden!important}
#storyCanvasMask #scDetailBody>.sc-sp{overflow:hidden!important;min-height:0!important}

/* ── ①b 缩放手柄（.sc-rz）不再撑出可滚动溢出 ──
   手柄是 `bottom:-4px / -5px` 的**绝对定位装饰**，天然落在面板外沿 → 把面板的
   scrollHeight 顶大 3~4px，于是即便内容已经装下，仍会冒出一条竖滚动条（实测三档视口
   溢出元素就是 .sc-rz-s / .sc-rz-sw / .sc-rz-se）。
   手柄是"拖动改面板大小"的真实功能，**不删**；只把它的溢出从布局里摘掉：
   仍用 overflow:hidden 裁掉（视觉上手柄本就压在边缘，命中区不变）。 */

/* ── ② 右栏：生成视频块唯一伸缩；其余全部固定高 ── */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-r{
  display:flex!important;flex-direction:column!important;gap:6px!important;
  overflow:hidden!important;min-height:0!important;height:100%!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-r>.b-go{
  flex:1 1 auto!important;min-height:0!important;max-height:none!important;
  display:flex!important;flex-direction:column!important;overflow:hidden!important;
  padding:5px 8px!important;box-sizing:border-box!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-r>.sc-aibox{
  flex:0 0 auto!important;min-height:0!important;max-height:none!important;
  height:auto!important;overflow-y:auto!important;overflow-x:hidden!important;
  padding:5px 8px!important;box-sizing:border-box!important}

/* ── ③ 生成视频块内部：标题固定 / 视频区伸缩 / 控制台固定 ── */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-sp-hd{
  flex:0 0 auto!important;margin:0 0 3px!important;padding:0!important;line-height:1.25!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj{
  flex:1 1 auto!important;min-height:0!important;overflow:hidden!important;
  display:flex!important;flex-direction:column!important;flex-wrap:nowrap!important;
  align-items:stretch!important;align-content:stretch!important;
  row-gap:3px!important;column-gap:6px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>*{
  min-width:0!important;max-width:100%!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vc{
  flex:0 0 auto!important;min-height:0!important;overflow:visible!important;
  margin:0!important;padding:2px 0 0!important}

/* ── ④ ★红框★ 视频预览播放器：**明显放大**，保持 16:9、尽量占满可用高度 ──
   关键三点（少一条就会退回"塌成 47px"）：
     a) `flex:1 1 auto` + `min-height:0`  → 拿到**确定**的伸缩高度（不再 height:auto 塌陷）
     b) `max-height:none`                 → 不设上限，面板多高就吃多高
     c) 画面比例交给 <video> 的 object-fit:contain 保持（比"把框锁死 16:9"更好：
        既不裁画面、也不浪费高度，用户要的"16:9 不变形"由此保证） */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
  flex:1 1 auto!important;min-height:150px!important;height:auto!important;
  max-height:none!important;aspect-ratio:auto!important;align-self:stretch!important;
  margin:3px 0 0!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe>.sc-vjv{
  width:100%!important;height:100%!important;object-fit:contain!important}

/* 参考素材条：内容高、不抢空间（让高度尽量留给预览框） */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
  flex:0 0 auto!important;max-height:none!important;align-self:stretch!important;
  overflow:hidden!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row{
  grid-template-rows:repeat(1,minmax(30px,1fr))!important;
  grid-auto-columns:minmax(72px,1fr)!important;max-height:none!important}

/* ── ⑤ ★蓝框★ 历史版本区：**大幅压缩**为一行横向、缩略图变小 ──
   功能一个不删：缩略图仍是 <button data-vjhist>，点击即播/对比全部照旧。 */
#storyCanvasMask .sc-vjhist{
  flex:0 0 auto!important;margin:4px 0 0!important;gap:2px!important;
  display:flex!important;flex-direction:column!important}
#storyCanvasMask .sc-vjhist-l{font-size:9.5px!important;line-height:1.2!important;gap:4px!important}
#storyCanvasMask .sc-vjhist-l i{font-size:9px!important}
#storyCanvasMask .sc-vjhist-row{
  display:flex!important;flex-wrap:nowrap!important;gap:4px!important;
  align-items:center!important;max-height:none!important;overflow:hidden!important}
#storyCanvasMask .sc-vjhist-th{
  width:58px!important;height:33px!important;flex:0 0 auto!important;border-radius:6px!important}
#storyCanvasMask .sc-vjhist-p{width:11px!important;height:11px!important;
  font-size:6.5px!important;line-height:10px!important;right:2px!important;bottom:2px!important}
#storyCanvasMask .sc-vjhist-n{font-size:8px!important;line-height:11px!important;
  left:2px!important;top:1px!important;padding:0 3px!important}

/* ── ⑥ 全局密度：按用户授权统一收字号与行距（信息一屏装下的前提） ── */
#storyCanvasMask #scDetailBody .sc-sp-hd{font-size:11.5px!important;line-height:1.3!important;margin-bottom:2px!important}
#storyCanvasMask #scDetailBody .sc-sp-st{font-size:9.5px!important}
#storyCanvasMask #scDetailBody .sc-sp-ed{font-size:11.5px!important;line-height:1.5!important;padding:6px 8px!important}
#storyCanvasMask #scDetailBody .sc-atbox{margin-bottom:4px!important;padding:4px 6px!important}
#storyCanvasMask #scDetail .sc-sp-r .sc-vc{margin-top:3px!important;padding:4px 2px 0!important;gap:3px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-row,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-row2,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-sum{
  margin:0 0 2px!important;row-gap:2px!important;gap:4px!important;align-items:center!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-sum{margin-bottom:0!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-l{font-size:10px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-note,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-cost{
  font-size:10.5px!important;line-height:1.25!important;margin-top:0!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-warn{
  font-size:10px!important;padding:2px 6px!important;line-height:1.25!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-row.sc-vc-r2{flex-wrap:nowrap!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc select.sc-vsel,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vsel,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vmini{height:24px!important;font-size:11px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vre,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-h3opt{height:24px!important;font-size:10.5px!important;padding:0 7px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-go,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) [data-vgow]{min-height:26px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vc-go .sc-sbtn.sc-go{height:26px!important;font-size:11.5px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vjline{margin:2px 0 0!important;font-size:10px!important;line-height:1.3!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vjb{font-size:9.5px!important;padding:1px 6px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vjm{font-size:9.5px!important}
/* AI 修改块：整体收一档（功能不动，只变矮变密） */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox{
  padding:5px 8px!important;box-sizing:border-box!important;overflow-y:auto!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-sp-hd{margin-bottom:1px!important}
/* 【修406】圈选 UI 已删 · 死规则移除：#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-aisel{min-heig … */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-sp-tip{
  font-size:10px!important;line-height:1.25!important;margin:2px 0!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-sp-in{
  min-height:26px!important;height:26px!important;max-height:26px!important;
  font-size:11px!important;resize:none!important;padding:4px 6px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-sp-row{
  margin-top:3px!important;gap:5px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-sp-row .sc-btn{
  height:26px!important;min-height:26px!important;font-size:11px!important;padding:0 10px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-sp-msg{font-size:10px!important;line-height:1.25!important}
/* 左栏（提示词）同步收一档 */
#storyCanvasMask #scDetailBody .sc-sp-l{gap:5px!important}
#storyCanvasMask #scDetailBody .sc-sp-l .sc-sp-ed{flex:1 1 auto!important;min-height:0!important}

/* ── ⑦ 矮视口兜底：参考素材与预览**并排**，把高度全给播放器 ── */
@media (max-height:700px){
  #storyCanvasMask #scDetail{max-height:calc(100vh - 76px)!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj{
    flex-direction:row!important;flex-wrap:nowrap!important;align-items:stretch!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
    flex:0 0 32%!important;max-width:32%!important;order:-1!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row{
    grid-auto-columns:minmax(64px,1fr)!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-aibox .sc-sp-tip{display:none!important}
}
/* ⑧ 内边距再收一档（不删任何控件） */
@media (max-height:820px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp{gap:5px!important;padding:6px!important}
  #storyCanvasMask #scDetail #scDetailBody{gap:6px!important}
}
/* ══════════════════【修372·结束】══════════════════════════════════════════ */

/* ══════════════════════════════════════════════════════════════════════════════
   【修408】★ 视频预览区放大 ★  用户原话：
     「严重Bug！图1中，视频预览的面积过小！视频是核心！要修复！」
   ──────────────────────────────────────────────────────────────────────────────
   ◆ 改前实测（真浏览器 · --headless=new · 本文件基线＝修406）
       状态                     预览区 宽×高      宽高比    问题
       常规（最大化 1600×1000） 598 × 306.3      1.95:1    已偏离 16:9(1.78)
       缩到左侧（面板 800px）   706 × 192.4      3.67:1    ★就是用户红框那块"细缝"
       窄屏 760px               650 × 181.4      3.58:1    同样塌成扁条
       窄屏 430px               320 × 150.0      2.13:1    卡在 150px 地板上
     且 <video> 是 object-fit:contain 塞进这个扁框 → 画面上下再留黑，实际画面更小。

   ◆ 逐条溯源（不是猜的，用 getComputedStyle + 遍历 cssRules 找出真正生效的那条）
     真正赢的是【修372】第 36303–36306 行：
        .b-go>.sc-vj>.sc-vjframe{ flex:1 1 auto; min-height:150px; height:auto;
                                  max-height:none; aspect-ratio:auto }
     它把预览框当成"吃掉剩余空间的填充块"，于是：
       ① `aspect-ratio:auto` + `height:auto` → 框**没有自己的形状**，高度完全取决于
          `.sc-vj` 这一列还剩多少；
       ② 面板一变窄（缩到左侧 / 窄屏），网格列数从 2 列塌成 1 列（修356 的
          @container max-width:840px），「提示词」占掉 .3fr、右栏只剩一行高度 →
          预览框拿到的高度就是那条 150~192px 的剩余量 ＝ 用户截图里那条细缝；
       ③ `min-height:150px` 是唯一地板，但 150px 本身就在"看不清"的区间。
     结论：**病根不是"没给够空间"，是预览框没有按自己的宽高比定形**。

   ◆ 修法（纯 CSS 追加 + 1 段只读属性同步 JS，零 DOM 结构改动、零既有规则删除）
     ① 让预览框**按 16:9 由宽度定形**：`aspect-ratio:16/9` + `width:100%`
        → 宽度撑满卡片，高度自动 = 宽度 ÷ 16 × 9（这才是"视频是核心"的物理形态）；
     ② 给足**地板**：常规 ≥ 320px、缩到左侧/自由摆放 ≥ 260px、窄屏 760 ≥ 210px、
        手机 430 ≥ 180px —— 四档全部远高于改前 150~192px 那条缝；
     ③ 给**天花板**并用内部滚动兜底：`max-height` 绑视口，同时把 `.b-go` 的
        `overflow:hidden` 改成 `overflow-y:auto` —— 于是"预览变大"永远不会把
        分辨率/时长/比例/积分/「生成」按钮顶出可视区（用户要求 3：卡片可滚、布局自适应）；
     ④ `<video>` 钉死 `width:100%;height:100%;object-fit:contain`，出片即可正常播放；
     ⑤ 比例下拉（16:9 / 9:16 / 1:1）经 `data-ratio` 同步到框上 —— 竖屏片子也给竖框，
        不再把 9:16 塞进横框里两侧留大黑边（见文件末尾【408-B】脚本）。

   ⚠ 特异性：本块位于整个文档**最后一段 <style> 的末尾**，且与【修372】同选择器同权重
     → 依 CSS"同权重后写者胜"稳赢；所有声明带 !important 与既有风格一致。
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── 408-① 预览框：按 16:9 由宽度定形 + 大地板 + 视口天花板 ─────────────────── */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
  flex:0 0 auto!important;                 /* 不再当"剩余空间填充块" → 高度由形状决定 */
  width:100%!important;
  min-width:0!important;
  max-width:100%!important;
  aspect-ratio:16/9!important;             /* ★核心：宽度→高度按比例联动 */
  height:auto!important;
  min-height:clamp(320px,38vh,460px)!important;   /* ★地板：改前 150~306px */
  max-height:min(64vh,620px)!important;           /* ★天花板：不顶掉下方控制台 */
  align-self:stretch!important;
  margin:3px 0 0!important;
}
/* 竖向 / 方形片子：框也跟着换形状（由【408-B】脚本写 data-ratio） */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe[data-ratio="9:16"]{
  aspect-ratio:9/16!important;max-height:min(72vh,700px)!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe[data-ratio="1:1"]{
  aspect-ratio:1/1!important;max-height:min(68vh,640px)!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe[data-ratio="4:3"]{
  aspect-ratio:4/3!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe[data-ratio="3:4"]{
  aspect-ratio:3/4!important;max-height:min(72vh,700px)!important}

/* ── 408-② <video> 硬条件：真能看（宽度撑满 · contain 不变形 · 有控件） ────── */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe>.sc-vjv{
  width:100%!important;height:100%!important;
  max-width:100%!important;max-height:100%!important;
  object-fit:contain!important;object-position:center center!important;
  display:block!important;background:#000!important;
  border-radius:0!important;box-shadow:none!important;margin:0!important;
}
/* 占位 / 生成中 / 失败 的文字块也铺满整框（视觉上"预览区就是这么大"） */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe>.sc-vjph{
  display:flex!important;flex-direction:column!important;
  align-items:center!important;justify-content:center!important;
  width:100%!important;height:100%!important;padding:0 24px!important;
}

/* ── 408-③ 不挤压：预览变大后，溢出交给 .b-go 自己滚，控制台永远够得着 ──────
   用户要求：「别把卡片撑爆或挤压下面的 分辨率/时长/比例/积分/生成按钮 —— 卡片整体要能滚」。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-r>.b-go{
  overflow-y:auto!important;overflow-x:hidden!important;
  scrollbar-width:thin!important;overscroll-behavior:contain!important;
}
/* 控制台与历史版本条在滚动容器里贴底常驻（滚到底一定能看到「生成」） */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vc{
  flex:0 0 auto!important;position:relative!important;z-index:2!important}

/* ── 408-④ 「缩到左侧 / 自由摆放」那一档：面板窄 → 参考素材让出横向、预览独占整宽 ── */
#storyCanvasMask #scDetail.sc-dock #scDetailBody:has(.b-go) .b-go>.sc-vj,
#storyCanvasMask #scDetail.sc-free #scDetailBody:has(.b-go) .b-go>.sc-vj{
  flex-direction:column!important;flex-wrap:nowrap!important;align-items:stretch!important;
}
#storyCanvasMask #scDetail.sc-dock #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs,
#storyCanvasMask #scDetail.sc-free #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
  flex:0 0 auto!important;order:0!important;max-width:100%!important;
}
#storyCanvasMask #scDetail.sc-dock #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe,
#storyCanvasMask #scDetail.sc-free #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
  min-height:clamp(260px,34vh,420px)!important;max-height:min(60vh,560px)!important;
}
/* @container 单列档（面板 ≤840px）同样保证预览整宽 + 地板 */
@container (max-width:840px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj{
    flex-direction:column!important;flex-wrap:nowrap!important;align-items:stretch!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
    flex:0 0 auto!important;order:0!important;max-width:100%!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
    min-height:clamp(260px,34vh,420px)!important;max-height:min(60vh,560px)!important}
}

/* ── 408-⑤ 手机窄屏（≤760px）：地板 210px，高度上限按视口收，卡片整体可滚 ────── */
@media (max-width:760px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
    min-height:210px!important;max-height:min(52vh,380px)!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj{
    flex-direction:column!important;flex-wrap:nowrap!important;align-items:stretch!important;row-gap:4px!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
    flex:0 0 auto!important;order:0!important;max-width:100%!important}
}
/* ── 408-⑥ 极小屏（≤420px）：地板 180px（仍显著厚于改前 150px 那条缝） ───────── */
@media (max-width:420px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
    min-height:180px!important}
}
/* ── 408-⑦ 极矮视口（≤620px 高）：并排布局下地板降到 200px，先保可见再保形状 ── */
@media (max-height:620px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
    min-height:200px!important;max-height:min(58vh,340px)!important}
}

/* ── 408-⑧ 画布节点内 / 详情外的预览框：同步拿到 16:9 形状与地板 ──────────────
   作用域严格限定在画布内、且排除工作台（工作台由上面 408-① 专管），避免影响其它页面。 */
#storyCanvasMask .sc-node .sc-vjframe:not(.sc-vj-lg *) ,
#storyCanvasMask .sc-vj-lg .sc-vjframe{
  aspect-ratio:16/9!important;min-height:180px!important;height:auto!important}


/* 面板本体：绝不出现竖滚动条（内容已在上面排版阶段算好一屏装下）
   关键用 `overflow:clip` 而不是 `overflow:hidden`：
     · hidden  → 仍然建立"滚动容器"，scrollHeight 会被面板外沿的 .sc-rz 缩放手柄
                 （bottom:-4px / -5px 绝对定位）顶大 3~5px → 竖条照冒；
     · clip    → 只裁剪、**不建立滚动容器**，scrollHeight 恒等于 clientHeight，
                 既不冒竖条，也不会被"滚轮/键盘"偷偷滚走内容。
   （回退兜底：下面同时写了 overflow:hidden，老浏览器不认 clip 时退回裁剪语义。）  */
#storyCanvasMask #scDetail,
#scDetail{
  overflow:hidden!important;
  overflow:clip!important;
  max-height:calc(100vh - 88px)!important;
  padding-bottom:12px!important;
  box-sizing:border-box!important}
/* 面板内各层同样不得冒出滚动条 */
#scDetail #scDetailBody{overflow:hidden!important;overflow:clip!important}
#scDetail #scDetailBody>.sc-sp{overflow:hidden!important;overflow:clip!important}
#scDetail .sc-sp-r{overflow:hidden!important;overflow:clip!important}
#scDetail .sc-sp-box.b-go{overflow:hidden!important;overflow:clip!important}
/* 允许内部自滚的两块（内容确实可能超出的：提示词与 AI 修改）保持可用，
   但它们的高度已被上面锁死，不会反过来把面板顶高。 */
#scDetail .sc-aibox{overflow-y:auto!important}
/* 「缩至左侧」/自由拖动后的面板也用同一套上限（.sc-free） */
#scDetail.sc-free{max-height:calc(100% - 16px)!important;overflow:hidden!important}
/* 缩放手柄：绝对定位在面板外沿（bottom:-4px / -5px），会撑大 scrollHeight → 面板
   即便已 overflow:clip 不显示竖条，scrollHeight 仍比 clientHeight 大 5px。
   把外沿的负偏移收回面板内 1px：手柄**元素保留、拖动功能保留**（JS 按元素绑事件，
   不依赖它飘在框外），只是不再制造溢出。 */
#storyCanvasMask #scDetail>.sc-rz[data-rz="s"]{bottom:0!important}
#storyCanvasMask #scDetail>.sc-rz[data-rz="sw"],
#storyCanvasMask #scDetail>.sc-rz[data-rz="se"]{bottom:0!important}
#storyCanvasMask #scDetail>.sc-rz[data-rz="nw"],
#storyCanvasMask #scDetail>.sc-rz[data-rz="ne"]{top:0!important}
#storyCanvasMask #scDetail>.sc-rz[data-rz="n"]{top:0!important}
#storyCanvasMask #scDetail>.sc-rz{pointer-events:auto}

/* ═══════════ 【修394·手册嵌入】问号键 + 手册面板 ═══════════
   形制与 #acctHorn/#acctFab 同族：同高度 38px、同 .5px 描边、同玻璃底、同圆角 8px，
   放在「喇叭」右侧（喇叭原占 right:24px，这里把整排重排，问号落在喇叭右边）。 */
#acctHelp{position:fixed;top:18px;right:24px;z-index:9499;box-sizing:border-box;
  border:.5px solid rgba(255,255,255,.42);border-radius:8px;background:transparent;
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);color:rgba(245,255,250,.88);
  width:38px;height:38px;display:none;align-items:center;justify-content:center;
  font-size:17px;font-weight:300;line-height:1;cursor:pointer;font-family:inherit;padding:0;
  transition:.35s cubic-bezier(.22,.68,.18,1);box-shadow:none;text-shadow:none}
#acctHelp:hover{transform:scale(1.18);color:#8be8c6;border-color:rgba(139,232,198,.82);
  box-shadow:0 0 22px rgba(83,224,174,.45),inset 0 0 12px rgba(83,224,174,.16);
  text-shadow:0 0 12px rgba(83,224,174,.6)}
#acctHelp:active{transform:scale(1.05)}
#acctHelp:focus-visible{outline:2px solid rgba(139,232,198,.9);outline-offset:2px}

/* 手册全屏面板：打开/关闭都不动应用原有 DOM，只做显隐 */
#lcManualMask{position:fixed;inset:0;z-index:9960;display:none;background:rgba(3,8,14,.72);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);overflow:hidden}
#lcManualMask.open{display:flex;align-items:center;justify-content:center}
#lcManualPanel{position:relative;width:min(1040px,96vw);height:min(92vh,1000px);max-height:92vh;
  display:flex;flex-direction:column;border-radius:16px;overflow:hidden;
  border:.5px solid rgba(169,220,188,.42);background:#0d1117;
  box-shadow:0 34px 100px rgba(0,0,0,.62);animation:lc394in .26s cubic-bezier(.22,.68,.18,1)}
@keyframes lc394in{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
/* 右上角「关闭」：醒目、好点（44×44 触控目标） */
#lcManualClose{position:absolute;top:12px;right:12px;z-index:5;width:44px;height:44px;
  display:flex;align-items:center;justify-content:center;border-radius:50%;cursor:pointer;
  border:1px solid rgba(255,255,255,.5);background:rgba(10,20,16,.92);color:#eafff6;
  font-size:22px;font-weight:300;line-height:1;font-family:inherit;padding:0;
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
  transition:.28s cubic-bezier(.22,.68,.18,1);box-shadow:0 6px 20px rgba(0,0,0,.45)}
#lcManualClose:hover{background:rgba(255,45,94,.9);border-color:rgba(255,45,94,.95);color:#fff;
  transform:rotate(90deg) scale(1.06)}
#lcManualClose:active{transform:rotate(90deg) scale(.97)}
#lcManualClose:focus-visible{outline:2px solid #ff6b8b;outline-offset:2px}
/* 【修416】删掉重复的「关闭」文字按钮（#lcManualCloseTxt 原 CSS 在此，已随元素一并移除）⇒
   手册右上角只保留唯一的「×」关闭键。 */
/* 滚动体：面板内部自滚，不影响页面 */
#lcManualBody{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;padding:0}
#lcManualBody .lc394-topwrap{position:sticky;top:0;z-index:4}
#lcManualBody main{max-width:880px;margin:0 auto;padding:20px 18px 60px}
/* 图片未 hydrate 前的占位，避免加载时高度跳动 */
#lcManualBody img[data-lc394-src]:not([src]){min-height:120px;background:#111a24}
/* 图注释里的原图文件名不影响阅读，但正文里的 code 可能含敏感旧词 —— 手册正文里已由 390 清理 */
@media (max-width:760px){
  #lcManualPanel{width:100vw;height:100vh;max-height:100vh;border-radius:0;border:0}
  #lcManualClose{top:8px;right:8px;width:44px;height:44px}
  #lcManualBody main{padding:14px 12px 48px}
}


/* ══════════════════════════════════════════════════════════════════════════════
   【修412】★ 视频预览框定形 ★  用户原话：「画布视频预览极为不合理！」
   ──────────────────────────────────────────────────────────────────────────────
   ◆ 本轮实测（真浏览器 · --headless=new · 16" 1600×1000 · 同一台机）
     用户原路径：画布 ⇒ 双击节点 ⇒ 视频工作台 ⇒ 点「缩到左侧」

     元素                                 常规 宽×高      比      缩到左侧 宽×高   比
     ─────────────────────────────────────────────────────────────────────────
     ① 工作台 .sc-vjframe（分镜工作台）  598 × 346.9   1.72   706 × 397.1   1.78
     ② 工作台 .sc-vjframe（视频工作台）  598 × 346.9   1.72   706 × 397.1   1.78
     ③ 画布节点卡 .sc-vjframe            477.4 × 268.5 1.78   ——
     ⇒ **三处预览框都已经是 16:9，【修408】在 409 上确实生效、也确实守住了。**

   ◆ 那用户截图里那条 6.6:1 的扁条是什么？
     不是视频预览框，是「参考素材」那一行的缩略图区（.sc-vrefs / .sc-vref-card）。
     该区在【修352】被刻意压成 40px 高 / 34×34 缩略图（"极致瘦身"），
     于是"一张人脸"被塞进 34×34 的 1:1 小方块里 —— 与成片播放器是两个元素。

   ◆ 本轮真正要修的三个残留缺陷（408 没覆盖到的）：
     缺陷 A：文件末尾 <style id="lc372Final">（全是 !important）在 408 之后落地，
             把 408-③ 给 .b-go 的 `overflow-y:auto` **改回 `overflow:clip`**
             ⇒ 预览框放大后，卡片内容被裁掉且滚不动，控制台/"生成"按钮够不着。
     缺陷 B：.sc-node .sc-vj … `max-height:calc(100vh - 260px)`（v6.2 老规则）
             会在矮视口下把画布节点卡里的预览框**二次压扁**（408-⑧ 的 aspect-ratio 被 max-height 截断）。
     缺陷 C：视频工作台（.sc-sp-r 里有 3 个 .sc-sp-box）时，
             预览框的"地板"只由 min-height 兜底；一旦父列可用高度不足，
             aspect-ratio 会输给 min-height 的收缩，框会退化成扁条 —— 需要给 .sc-vj 自身定形。

   ◆ 修法（纯 CSS 追加，放在**全文最后一段 <style>** ⇒ 同权重后写者胜）
     ① 让 .sc-vj（预览框的直接父层）也拿到确定高度链，预览框才不会被"剩余空间"决定；
     ② 把 .b-go 的滚动权从 lc372Final 手里拿回来（同权重、后写者胜）；
     ③ 画布节点卡的 max-height 改为"按 16:9 反推"，保住形状而不是硬截断；
     ④ 缩略图区（.sc-vrefs）**保持 408 不变**，只在窄面板下给它一个更小的地板，避免抢预览框高度。
     ⚠ 不删除、不修改任何既有规则；只追加。删除本块即完整回滚。
     ══════════════════════════════════════════════════════════════════════════════ */

/* ── 412-① 预览框的直接父层 .sc-vj：拿到"确定高度链" ─────────────────────────
   病根：408 把框定形成 16:9 了，但父层 .sc-vj 仍是 flex 列里的"可收缩项"。
   当 .sc-sp-r 里还有「已连入素材」「AI 修改」两个块（视频工作台就是 3 块），
   父层会被上级 flex 压到比框自身高度还小 ⇒ 框被 overflow 裁成扁条。
   这里把 .sc-vj 钉成"内容高、不收缩"，让框的 16:9 完整落地。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vj{
  flex:0 0 auto!important;
  min-height:0!important;
  max-height:none!important;
  height:auto!important;
  min-width:0!important;
  max-width:100%!important;
  width:100%!important;
  display:flex!important;
  flex-direction:column!important;
  row-gap:6px!important;
}

/* ── 412-② 预览框：把 408-① 的形状再钉一遍（同权重、更靠后 ⇒ 稳赢） ─────────
   408-① 已给 aspect-ratio:16/9 + 地板。这里只补"不许被压"的三条，
   并把地板抬到用户能看清的量级（≥320px，缩到左侧 ≥300px）。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
  flex:0 0 auto!important;
  width:100%!important;
  max-width:100%!important;
  min-width:0!important;
  aspect-ratio:16/9!important;
  height:auto!important;
  min-height:clamp(320px,38vh,460px)!important;
  max-height:min(64vh,620px)!important;
  align-self:stretch!important;
}
/* 「缩到左侧 / 自由摆放」：面板窄 ⇒ 地板略降但仍远高于旧 150~192px 那条缝 */
#storyCanvasMask #scDetail.sc-dock #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe,
#storyCanvasMask #scDetail.sc-free #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
  min-height:clamp(300px,38vh,440px)!important;
  max-height:min(62vh,600px)!important;
}
/* 窄屏：地板随视口降，但绝不塌成扁条 */
@media (max-width:760px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
    min-height:220px!important;max-height:min(54vh,420px)!important}
}
@media (max-width:420px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
    min-height:190px!important}
}
/* 极矮视口：先保"看得见控制台"，但仍不许回到 150px 以下 */
@media (max-height:620px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
    min-height:210px!important;max-height:min(56vh,360px)!important}
}

/* ── 412-③ 不挤压：把 .b-go 的滚动权从 lc372Final 手里拿回来 ─────────────────
   lc372Final（本文档原本最后一段 <style>）写着：
       #scDetail .sc-sp-box.b-go{overflow:hidden!important;overflow:clip!important}
   它在 408-③ 之后落地 ⇒ 408 的 `overflow-y:auto` 被盖掉，
   于是"预览变大后卡片可滚"失效、控制台被裁。
   本块在它**之后** ⇒ 同权重（1 ID + 1 class + 1 class / 0-2-1 对 0-2-1）后写者胜。 */
#storyCanvasMask #scDetail .sc-sp-box.b-go,
#scDetail .sc-sp-box.b-go{
  overflow-y:auto!important;
  overflow-x:hidden!important;
  scrollbar-width:thin!important;
  overscroll-behavior:contain!important;
}
/* 控制台与底部行贴底常驻：滚到底一定能看到「生成」 */
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vc,
#scDetail .sc-sp-box.b-go>.sc-vc{
  flex:0 0 auto!important;position:relative!important;z-index:2!important}

/* ── 412-④ 画布节点卡：max-height 不再硬截断，改成"按 16:9 反推高度" ──────────
   老规则 .sc-node .sc-vj{max-height:calc(100vh - 260px)} 会在矮视口把框压扁。
   这里把上限交给"框自己的形状"决定，父层只负责滚。 */
#storyCanvasMask .sc-node .sc-vj{
  max-height:none!important;
  overflow-y:auto!important;
  overflow-x:hidden!important;
}
#storyCanvasMask .sc-node .sc-vj>.sc-vjframe,
#storyCanvasMask .sc-vj-lg .sc-vjframe{
  aspect-ratio:16/9!important;
  height:auto!important;
  min-height:180px!important;
  max-height:none!important;
}

/* ── 412-⑤ 参考素材缩略图区：**不抢**预览框的高度 ─────────────────────────────
   用户截图里那条 6.6:1 的扁条就是这个区（被【修352】"极致瘦身"压到 40px 高）。
   保持它的既定形制（34×34 缩略图、40px 卡高），只把它钉成"内容高、不伸缩"，
   这样它才不会把预览框挤小。缩略图保持 1:1 不变形。 */
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-row{
  flex:0 0 auto!important;min-height:0!important;max-height:none!important}
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb img,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb video{
  aspect-ratio:1/1!important;object-fit:cover!important;
  width:34px!important;height:34px!important;border-radius:6px!important}

/* ── 412-⑥ 成片播放：视频填满预览框、居中、不变形、有控件 ───────────────────── */
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vjframe>.sc-vjv{
  width:100%!important;height:100%!important;
  max-width:100%!important;max-height:100%!important;
  object-fit:contain!important;object-position:center center!important;
  display:block!important;background:#000!important;
}
/* 占位 / 进行中 / 失败 文字块铺满整框 */
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vjframe>.sc-vjph{
  display:flex!important;flex-direction:column!important;
  align-items:center!important;justify-content:center!important;
  width:100%!important;height:100%!important;padding:0 24px!important;
}


/* ══════════════════════════════════════════════════════════════════════════════
   【修417】★ 参考素材区放大 ★  可识别标记：lc417RefsBig
   ──────────────────────────────────────────────────────────────────────────────
   用户原话：「画布视频预览极为不合理 / 视频区域太小」——
   他看的是**「参考素材」缩略图区**（.sc-vrefs），不是成片播放器（.sc-vjframe）。

   ◆ 改前实测（真浏览器 --headless=new · 真实注入 .sc-vrefs · 1600×1000）
       元素                 常规 宽×高        比      缩到左侧 宽×高       比
       ─────────────────────────────────────────────────────────────────────
       .sc-vrefs（整条）    574 × 81.8      7.02:1   682 × 81.8       8.34:1  ★7:1 扁条
       .sc-vrefs-row        556 × 42.0     13.24:1   664 × 42.0      15.81:1
       .sc-vref-card        134.7 × 40      3.37:1   161.8 × 40       4.04:1
       .sc-vref-thumb img    34 × 34         1.00     34 × 34          1.00   ★太小

   ◆ 根因（**压它的规则**，逐条给行号）
     ① **主犯**：`修372 ⑤`（基线文件第 **36295** 行）
          `#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row{
             grid-template-rows:repeat(1,minmax(30px,1fr))!important; ... }`
        —— 修372 为"把高度全让给播放器"，把参考素材排从**两排**改成**单排 30px**，
           卡片因此被钉在 ~40px 高 ⇒ 缩略图只剩 34px。
     ② **次犯**：`修352`「极致瘦身」（基线第 **1507–1508** 行）
          `.sc-vref-thumb{width:34px!important;height:34px!important;flex:0 0 34px!important}`
          `.sc-vref-thumb img,.sc-vref-thumb video{width:34px!important;height:34px!important}`
        —— 缩略图被写死 34×34。
     ③ **同类**：第 **3016** 行 `.sc-vref-thumb{height:28px}`（紧凑变体）、
        第 **1632** 行 `grid-auto-columns:minmax(96px,1fr)`、第 **36370** 行 `minmax(64px,1fr)`。
     ④ **412 的守门规则**（基线第 **37553–37555** 行）把 34×34 又钉了一遍 —— 那是
        「不许动播放器」时顺手写的；本轮必须把它对**素材条**的这几行改掉（见 417-② 选择器）。

   ◆ 本轮修法（纯 CSS 追加，放在**全文最后一段 <style>** ⇒ 同权重后写者胜；
     不改 DOM 结构、不改任何 JS、不删既有规则；删掉本块即完整回滚）
     ① 缩略图 **34×34 → 88×88**（2.59×），仍是 1:1 方形，`object-fit:cover` 不拉伸；
     ② 卡片高 **40px → 104px**（图在上、名字在下），改回**两排**
        —— N305g 原设计就是"规规矩矩上下两排"；单排在 4 张以上时会顶出右边界；
     ③ 整条 `.sc-vrefs` **81.8px → ~250px**，宽高比 **7.02:1 → ≈2.3:1**（不再扁）；
     ④ **绝不挤压下方控件**：整条给 `flex:0 1 auto` + `max-height` 上限，
        面板高度不够时**先收素材条**（并让它内部纵向可滚），
        控制台 .sc-vc 保持 `flex:0 0 auto` ⇒「模型/分辨率/时长/比例/积分/生成」永不被顶出；
     ⑤ 窄面板 / 窄视口 / 矮视口：缩略图 88→76→72 逐档降，整条同时降为一排，绝不横向溢出。
     ══════════════════════════════════════════════════════════════════════════════ */

/* ── 417-① 参考素材排：改回**两排**、行高 ≥88px（缩略图物理尺寸的来源） ─────────
   覆盖 36295 的 `repeat(1,minmax(30px,1fr))`；列宽同步放宽到 140px+，
   否则两排 × 88px 的卡片塞不进原来 64~108px 的窄列。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-row,
#storyCanvasMask .sc-vrefs-row{
  grid-template-rows:repeat(2,minmax(88px,auto))!important;   /* ★ 单排 30px → 两排 88px */
  grid-auto-columns:minmax(140px,1fr)!important;              /* ★ 64/96/108px → 140px */
  gap:8px!important;
  max-height:none!important;
  align-items:stretch!important;
  overflow-x:hidden!important;                                /* 不许出横向拉杆（沿用 N355 口径） */
  overflow-y:auto!important;
  padding:1px 1px 3px!important;
  /* 容器被 max-height 限住时，由这一层滚动（容器是 flex column：标题 auto + 行吃满剩余） */
  flex:1 1 auto!important;
  min-height:0!important;
}

/* ── 417-② 缩略图：34×34 → 88×88（方形不变形） ────────────────────────────────
   同时覆盖 1507 / 1508 / 3016 / 37553 / 37554 五处写死值。 */
#storyCanvasMask .sc-vref-thumb,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb{
  width:88px!important;height:88px!important;flex:0 0 88px!important;
  border-radius:9px!important;
}
#storyCanvasMask .sc-vref-thumb img,
#storyCanvasMask .sc-vref-thumb video,
#storyCanvasMask .sc-vref-thumb canvas,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb img,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb video{
  width:88px!important;height:88px!important;
  aspect-ratio:1/1!important;object-fit:cover!important;
  border-radius:9px!important;display:block!important;
}

/* ── 417-③ 卡片：40px 横条 → 104px"图在上、名在下" ─────────────────────────────
   N305g 原设计是 flex 横排（图左名右）；图放大到 88px 后横排会变成 300px+ 宽卡，
   两排放不下 ⇒ 改竖排。这与 N305g「规规矩矩上下两排、等宽对齐、绝不溢出边框」一致。 */
#storyCanvasMask .sc-vref-card,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-card{
  display:flex!important;flex-direction:column!important;align-items:center!important;
  justify-content:flex-start!important;gap:3px!important;
  height:auto!important;min-height:104px!important;
  padding:4px 4px 5px!important;border-radius:10px!important;overflow:hidden!important;
}
#storyCanvasMask .sc-vref-card>b,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-card>b{
  margin-top:1px!important;max-width:100%!important;width:100%!important;
  text-align:center!important;font-size:10.5px!important;line-height:1.25!important;
}
/* 音频素材卡：同高同宽，跟着竖排一起对齐（原来是 40px 横条） */
#storyCanvasMask .sc-vref-audio,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-audio{
  height:auto!important;min-height:104px!important;
  display:flex!important;flex-direction:column!important;align-items:center!important;
  justify-content:center!important;gap:3px!important;
  padding:6px 16px 6px 6px!important;border-radius:10px!important;font-size:10.5px!important;
}
/* 删除 ×：角标随缩略图放大一点，仍压在右上角，命中区更大更好点 */
#storyCanvasMask .sc-vref-x,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-x{
  top:3px!important;right:3px!important;
  width:17px!important;height:17px!important;line-height:16px!important;font-size:12px!important;
}

/* ── 417-④ 整条容器：**内容高、按内容撑开**，只在真的放不下时才收 ────────────
   ⚠ 实测踩坑（第一版把这条写错了）：
     写成 `flex:0 1 auto; min-height:0` ⇒ 在 .sc-vj 这个 column flex 里，
     `.sc-vrefs` 变成"可收缩到 0"的项，父层给它的高度被压成 **16px**，
     而里面的 .sc-vrefs-row 又是 grid `minmax(88px,auto)` ⇒ 卡片**溢出容器**，
     视觉上缩略图跑到框外、只剩半截（截图里那两条溢出的小方块就是这么来的）。
   正确做法：`flex:0 0 auto`（按内容撑开、不被动收缩）+ `max-height` 上限；
   真放不下时，由**内层 .sc-vrefs-row 自己纵向滚动**消化（见 417-① 的 overflow-y:auto），
   而不是把容器压塌。这样"素材条够大"与"控制台不被挤走"两个目标同时成立。 */
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
  flex:0 0 auto!important;
  height:auto!important;
  min-height:0!important;
  /* ⚠ 上限必须"刚好装下两排、又不抢播放器"：
     两排 88px 缩略图 + 名字行 ⇒ 卡片 104px、行 2×104+8gap = 216px，加标题行 ~35px ⇒ **~252px**。
     取 min(30vh,258px)：常规 913px 视口 → 258px（两排完整可见，不再被裁）；
     播放器仍拿到 336px（598×9/16，16:9 不变），控制台全部 onscreen。
     矮视口由 417-⑦ 再收一档。 */
  max-height:min(30vh,258px)!important;
  gap:5px!important;
  overflow:hidden!important;                /* 内容由 .sc-vrefs-row 自己滚，容器只做裁剪 */
  scrollbar-width:thin!important;overscroll-behavior:contain!important;
}
/* 标题行常驻（素材条内部滚动时，计数文案不会跟着滚走） */
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-head{
  position:sticky!important;top:0!important;z-index:3!important;
  background:rgba(6,10,16,.86)!important;backdrop-filter:blur(3px)!important;
  padding:2px 0 4px!important;font-size:10.5px!important;
}
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-head b{font-size:11px!important}
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-head span{font-size:10.5px!important}

/* ── 417-⑤ 中档（≤1180px 视口）：缩略图 88 → 76，整条降为**一排** ─────────────
   两排 × 88px 在窄面板里会把整条推到 ~250px；降为一排 76px ⇒ 整条 ~150px，
   仍远好于改前那条 7:1 扁条，且 ≥72×72 的硬指标仍满足。 */
@media (max-width:1180px){
  #storyCanvasMask .sc-vrefs-row{grid-template-rows:repeat(1,minmax(76px,auto))!important;
    grid-auto-columns:minmax(112px,1fr)!important}
  #storyCanvasMask .sc-vref-thumb,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb{
    width:76px!important;height:76px!important;flex:0 0 76px!important}
  #storyCanvasMask .sc-vref-thumb img,#storyCanvasMask .sc-vref-thumb video,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb img,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb video{
    width:76px!important;height:76px!important}
  #storyCanvasMask .sc-vref-card,#storyCanvasMask .sc-vref-audio,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-card{min-height:92px!important}
}
/* 窄面板：容器查询口径与修356 / 修408 一致（"缩到左侧"面板变窄但视口仍宽） */
@container (max-width:840px){
  #storyCanvasMask .sc-vrefs-row{grid-template-rows:repeat(1,minmax(76px,auto))!important;
    grid-auto-columns:minmax(104px,1fr)!important}
  #storyCanvasMask .sc-vref-thumb,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb{
    width:76px!important;height:76px!important;flex:0 0 76px!important}
  #storyCanvasMask .sc-vref-thumb img,#storyCanvasMask .sc-vref-thumb video,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb img,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb video{
    width:76px!important;height:76px!important}
  #storyCanvasMask .sc-vref-card,#storyCanvasMask .sc-vref-audio,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-card{min-height:92px!important}
}

/* ── 417-⑥ 窄屏（≤980px）：缩略图 76 → 72（正好是用户硬指标的下限） ──────────── */
@media (max-width:980px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-row,
  #storyCanvasMask .sc-vrefs-row{
    grid-template-rows:repeat(1,minmax(72px,auto))!important;
    grid-auto-columns:minmax(96px,1fr)!important}
  #storyCanvasMask .sc-vref-thumb,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb{
    width:72px!important;height:72px!important;flex:0 0 72px!important}
  #storyCanvasMask .sc-vref-thumb img,#storyCanvasMask .sc-vref-thumb video,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb img,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb video{
    width:72px!important;height:72px!important}
  #storyCanvasMask .sc-vref-card,#storyCanvasMask .sc-vref-audio,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-card{min-height:88px!important}
}
/* 手机档（≤480px）：**不再降缩略图**，保持 72×72 地板（用户硬指标），
   但列宽必须跟着面板宽收，否则 4 列 × 112px = 448px 会顶出右边界（实测 430px 档溢出）。
   做法：列下限从 96px 收到 78px ⇒ 4 列自动均分到 ~74px，卡片宽 72px 恰好容纳缩略图；
   再窄就让 .sc-vrefs-row 自己横向滚（overflow-x:auto），绝不出现不可达元素。 */
@media (max-width:480px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-row,
  #storyCanvasMask .sc-vrefs-row{
    grid-template-rows:repeat(1,minmax(72px,auto))!important;
    grid-auto-columns:minmax(78px,1fr)!important;
  }
  #storyCanvasMask .sc-vref-thumb,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb{
    width:72px!important;height:72px!important;flex:0 0 72px!important}
  #storyCanvasMask .sc-vref-thumb img,#storyCanvasMask .sc-vref-thumb video,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb img,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb video{
    width:72px!important;height:72px!important}
  #storyCanvasMask .sc-vref-card,#storyCanvasMask .sc-vref-audio,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-card{
    min-height:88px!important;padding:3px 2px 4px!important}
  #storyCanvasMask .sc-vref-card>b,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-card>b{font-size:10px!important}
}

/* ── 417-⑦ 矮视口（≤700px 高）：【修372 ⑦】把素材条与播放器**并排**的档位。
   并排时素材条只占 32% 宽 ⇒ 必须**单排 + 72px**，否则两排会顶破块高。
   ⚠ 播放器那一侧（.sc-vjframe 的 16:9）本轮**一个字都不动** —— 见 417-⑧ 保障。 */
@media (max-height:700px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row,
  #storyCanvasMask .sc-vrefs-row{
    grid-template-rows:repeat(1,minmax(72px,auto))!important;
    grid-auto-columns:minmax(92px,1fr)!important}
  #storyCanvasMask .sc-vref-thumb,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb{
    width:72px!important;height:72px!important;flex:0 0 72px!important}
  #storyCanvasMask .sc-vref-thumb img,#storyCanvasMask .sc-vref-thumb video,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb img,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb video{
    width:72px!important;height:72px!important}
  #storyCanvasMask .sc-vref-card,#storyCanvasMask .sc-vref-audio,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-card{min-height:86px!important}
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs{max-height:min(40vh,220px)!important}
}

/* ── 417-⑧ 「不挤压下方控件 + 不压播放器」硬保障 ───────────────────────────────
   412-① 已把 .b-go>.sc-vj 定为 `flex:1 1 auto; min-height:0`，
   412-③ 已把控制台定为 `flex:0 0 auto`。本轮素材条是 `flex:0 0 auto`（417-④）
   且带 max-height 上限 ⇒ 收缩优先级为：**素材条被上限卡住 → 播放器吃剩余**，
   控制台永远不动。这里再把三件事各钉一遍（都是"加保险"，不改 412 的数值）。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vc,
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vc{
  flex:0 0 auto!important;min-height:0!important;
  overflow:visible!important;position:relative!important;z-index:4!important;
}
/* 播放器：**原样保留 412 的定形**（这里是"再钉一次"，不是改）
   —— 每个值都逐字取自 412-① / 412-②，不引入任何新数值。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
  aspect-ratio:16/9!important;
  height:auto!important;
  min-height:0!important;                   /* 沿用 412-②：地板只能是 0，否则会顶破 16:9 */
  max-height:min(64vh,620px)!important;
  flex:0 0 auto!important;                  /* 沿用 412-② 的语义（形状决定高度） */
  width:100%!important;max-width:100%!important;min-width:0!important;
  align-self:stretch!important;
}
/* ⚠ 实测踩坑（第二版把这条写错了，已回退）：
   曾给 .sc-vj 加 `container-type:size` + 素材条 `max-height:42cqh` ——
   结果 .sc-vj 变成"尺寸容器"后**自身高度不再由内容决定**，
   播放器的 16:9 拿不到确定宽度，框比例从 1.778 跑成 3.32 / 8.84（比改前还糟）。
   这正是 412 注释里记过的同一个坑（cqw 量错了参照物）。
   ⇒ 本条**不用容器查询**；素材条的上限只由 417-④ 的 `min(24vh,232px)` 决定，
     它是个与播放器无关的绝对值，绝不会反过来压播放器。 */
/* ── 417-⑨ 「缩到左侧 / 自由摆放」：面板变宽 ⇒ 播放器按 16:9 也变得更高（706×9/16=397px），
   面板可用高装不下"素材条 258px + 播放器 397px + 控制台 180px"⇒ 素材条必须让位。
   这一档把素材条再收到一排（缩略图仍 76×76 ≥72 硬指标），
   高度从 ~252px 降到 ~120px，播放器与控制台就都留得下；超出部分 .b-go 可滚（412-⑧ 语义）。 */
#storyCanvasMask #scDetail.sc-dock #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs,
#storyCanvasMask #scDetail.sc-free #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
  max-height:min(18vh,152px)!important;
}
#storyCanvasMask #scDetail.sc-dock #scDetailBody:has(.b-go) .b-go .sc-vrefs-row,
#storyCanvasMask #scDetail.sc-free #scDetailBody:has(.b-go) .b-go .sc-vrefs-row{
  grid-template-rows:repeat(1,minmax(76px,auto))!important;
  grid-auto-columns:minmax(112px,1fr)!important;
}
#storyCanvasMask #scDetail.sc-dock .sc-vref-thumb,
#storyCanvasMask #scDetail.sc-free .sc-vref-thumb{
  width:76px!important;height:76px!important;flex:0 0 76px!important;
}
#storyCanvasMask #scDetail.sc-dock .sc-vref-thumb img,
#storyCanvasMask #scDetail.sc-free .sc-vref-thumb img,
#storyCanvasMask #scDetail.sc-dock .sc-vref-thumb video,
#storyCanvasMask #scDetail.sc-free .sc-vref-thumb video{
  width:76px!important;height:76px!important;
}
#storyCanvasMask #scDetail.sc-dock .sc-vref-card,
#storyCanvasMask #scDetail.sc-free .sc-vref-card,
#storyCanvasMask #scDetail.sc-dock .sc-vref-audio,
#storyCanvasMask #scDetail.sc-free .sc-vref-audio{
  min-height:92px!important;
}

/* ══════════════════════【修417·结束】标记 lc417RefsBig ══════════════════════ */


/* ══════════════════════════════════════════════════════════════════════════
   【修410·①】恢复「圈选」= 普通鼠标选中文字（可删除 / 可复制 / 可替换）
   ──────────────────────────────────────────────────────────────────────────
   用户原话：「圈选就是普通的鼠标动作啊！可以删除、复制等」「圈选就是选择，
             支持圈选删除啊」
   ⚠️ 本条**只**恢复"浏览器原生文字选区"（高亮 + Delete/Backspace 真删 +
      Cmd+C 真复制 + 直接打字替换）；**绝不**恢复"AI 只改选中那一段"
      —— 那一支已按用户要求由【修406】物理删除，保持删除。
   ⚠️ 「圈选素材」（物料提取页 lcPickBtn）是**另一个功能**，本补丁完全不碰。
   【修423·2026-10-07】（本次拆除）用户要求「划选=默认的计算机操作」：
   原 ①a/①c/①d/①e 的「钉住/包装/补拍」已整组删除；①f/①g（原生删除/复制放行）
   与 ②（下拉防闪）保留。源头修复改在 edSetCaret/atMark 本体（搜【修423·原生划选】）。

   ── 根因（真机取证，见 修410_报告.md）──
   N302 的全局规则在第 19 行：
       html,body{user-select:none;-webkit-user-select:none;…}
   而 user-select 是**继承**属性：Chrome 里只要**祖先链上有一层 none**，
   后代就算自己写 user-select:text 也选不中文字。
   第 20 行虽然写了 [contenteditable="true"]{user-select:text!important}，
   但它治不了祖先链 —— 实测：把 html/body/#storyCanvasMask/#scDetail/
   #scDetailBody/.sc-sp/.sc-sp-l **整条链**都改成 text，仍然选不中。
   ⇒ 所以真正把选区打掉的不是 CSS，而是下面那个脚本块里的 JS（见补丁①）。

   本段 CSS 做两件事：
     · 把画布编辑器所在的**祖先链**放开选择（让浏览器允许形成选区）；
     · 给编辑器补一条明确的 ::selection 高亮色（N302 之后 .sc-sp-ed 的
       ::selection 只在 #storyCanvasMask 后代选择器里，这里补一条兜底）。
   ══════════════════════════════════════════════════════════════════════════ */
html,body{user-select:text!important;-webkit-user-select:text!important}

/* 画布编辑器（分镜提示词 / 图片文字表述）及其祖先链：允许形成文字选区 */
#storyCanvasMask,#storyCanvasMask *:not(input):not(textarea):not(select),
#scDetail,#scDetailBody,.sc-sp,.sc-sp-l{user-select:text!important;-webkit-user-select:text!important}

/* 但"画布拖拽把手 / 节点外框 / 按钮 / chips"仍然不可选 —— 保持 N302 的初衷（别拖出蓝框） */
.sc-node:not(.sc-sp-ed),.sc-node:not(.sc-sp-ed) *:not(.sc-sp-ed):not(.sc-sp-ed *),
.sc-drag,.sc-capwrap,.sc-nodehead,.sc-badge,.lc-hist,.extract-btn,
.sc-vsel,.sc-vmini,.sc-vpill,button,label{user-select:none!important;-webkit-user-select:none!important}
/* 上面那条会把编辑器自己压掉，这里再抬回来（编辑器永远可选） */
.sc-sp-ed,.sc-sp-ed *,.sc-edit,.sc-edit *,.sc-itxt,.sc-itxt *,#scDetailBody [contenteditable="true"],#scDetailBody [contenteditable="true"] *
  {user-select:text!important;-webkit-user-select:text!important}

/* 选中高亮：明暗两套背景都要看得见 */
#storyCanvasMask .sc-sp-ed::selection,
#storyCanvasMask .sc-sp-ed *::selection,
#scDetailBody .sc-sp-ed::selection,
#scDetailBody .sc-sp-ed *::selection,
.sc-sp-ed::selection,.sc-sp-ed *::selection,.sc-edit::selection,.sc-edit *::selection{
  background:rgba(120,200,255,.42)!important;color:#fff!important;text-shadow:none!important}
#storyCanvasMask .sc-sp-ed::-moz-selection,#scDetailBody .sc-sp-ed *::-moz-selection{
  background:rgba(120,200,255,.42)!important;color:#fff!important}


/* ══════════════════════════════════════════════════════════════════════════════
   【修421】★ 参考素材缩小 ＋ 留言归位 ★        可识别标记：lc421RefsSmallMsgInline
   ──────────────────────────────────────────────────────────────────────────────
   用户原话（逐字）：
     问题3：「参考素材是需要更小即可！目前太大了！主要是为了"视频预览区"要合理、大，
             整体在一页，不设计上下拉动动作就能看到所有选项与内容！」
     问题5：「留言处要设计在蓝框区域"常见问题"的右侧，一样的字体与大小【仅做专属提亮】。」

   ◆ 基线（线上 laochong.xyz 此刻的版本 = 最终版 全修复.html，5,002,386 B，
     md5 21c25ff557ec111e511addaa37f21d41）实测四档（真 --headless=new）：
       视口        缩略图  .sc-vrefs 整条高  播放器宽×高   比例   .b-go 溢出  积分行/生成 onscreen
       1600×1000   88×88      258px        587×330.2     1.778    211px     ✗ / ✗
       1440×900    88×88      258px        521.4×293.3   1.778    274px     ✗ / ✗
       1280×800    88×88      240px        456.2×256.6   1.778    311px     ✗ / ✗
       1024×768    76×76      230.4px      351.2×197.5   1.778    283px     ✗ / ✗
     ⇒ **「不用上下拉动就能看到全部」在四档全部不成立**（积分行与「生成」被顶到视口外）。

   ◆ 根因（行号＋原文，逐条）
     ① **主犯｜面板不是"视口绑定"，而是"内容撑开"**：基线第 **36424** 行
          `#scDetailBody .sc-sp{height:auto!important;min-height:100%!important;max-height:none!important;overflow:visible!important;…}`
        连同第 **36422** 行 `#scDetailBody{flex:1 1 auto!important;min-height:0!important;overflow:auto!important;…}`
        —— 这是【修372】为"内容只滚一层"写的。它把第 **1586** 行为右栏建立的
          `#scDetailBody .sc-sp-r{… height:100%!important}` 高度链**整条作废**（同权重后写者胜），
          `.sc-sp-r` 从此按**内容高**排版 ⇒ 右栏内容比视口高多少，就溢出多少。
        实测溢出量（.b-go scrollHeight − clientHeight）：1600 档 **211px**、1440 档 **274px**、
        1280 档 **311px**、1024 档 **283px** —— 与"积分行/生成掉出视口"完全对应。
     ② **次犯｜缩略图被写死 88×88**：基线第 **38102–38106** 行（【修417】块）
          `.sc-vref-thumb{width:88px!important;height:88px!important;flex:0 0 88px!important;border-radius:9px!important}`
        与第 **38107–38114** 行同样的 88px 给 `img/video/canvas`；配套第 **38117** 行卡片 `min-height:104px`、
        第 **38122** 行 `grid-template-rows:repeat(2,minmax(88px,auto))`。
        ⇒ 整条 `.sc-vrefs` = 标题 35 + 两排 (2×104 + 8gap) = **258px**，正好吃掉播放器该占的高度。
        （再上游：基线第 **1507–1508** 行是 34×34，第 **38056–38057** 行仍是 34×34 的守门规则。）
     ③ **三犯｜播放器地板 320px 与"不滚动"直接冲突**：【修408】基线第 **36943** 行
          `min-height:clamp(320px,38vh,460px)!important` ＋【修412】第 **37944** 行同样一条。
        16:9 定形是对的（用户要"合理、大"），但 320px 地板在 1024/1280 档会把 .b-go 撑破视口。
     ④ **窄档退化**：基线第 **37961–37962** 行
          `@media (max-width:420px){…min-height:190px!important}` → **430 档不落此媒体查询**，
        但第 **37957–37958** 行 `@media (max-width:760px){min-height:220px}` 命中 430 档；
        220px 一旦大于"宽度÷16×9"，`aspect-ratio` 就被 `min-height` 接管 ⇒ 框不再 16:9。

   ◆ 本轮改法（**纯 CSS 追加**，落在全文**最后一段 <style>** ⇒ 同权重后写者胜；
     不改 DOM、不改任何 JS 既有函数体；删掉本块即完整回滚）
     ① 缩略图 **88×88 → 52×52**（1:1 方形不变形、`object-fit:cover`），卡片 104 → 66px，
        **单排** → 整条从 **258px → ~90px**，腾出 ≈168px 全部给播放器；
     ② **把高度链还给视口**：`.sc-sp` 恢复 `height:100%`、`.sc-sp-r` 恢复 `height:100%`，
        `.b-go` 成为唯一可伸缩块（`flex:1 1 auto; min-height:0`），
        并**取消 .b-go 自身的滚动**（`overflow:hidden`）⇒ 工作台内不再出现竖向滚动条；
     ③ 播放器继续 16:9，但地板改为**"随可用高度走"**：`min-height:0`（形状由 aspect-ratio 定），
        上限 `max-height:100%` ⇒ **不滚动**前提下尽量占满；
     ④ 430 极窄档：把 `min-height` 地板也设为 0 并让宽度撑满 ⇒ 回到 **1.778**，不再 1.02/正方；
     ⑤ 参考素材条 `flex:0 0 auto + max-height`（沿用 417 记过的正解，绝不用 `flex:0 1 auto; min-height:0`
        去压塌它），真放不下时由内层 `.sc-vrefs-row` 自己纵向滚；
     ⑥ **不使用容器查询给 .sc-vj 做上限**（417/412 都记过：`container-type:size` 会打断 16:9）。
     ══════════════════════════════════════════════════════════════════════════════ */

/* ── 421-① 缩略图 88×88 → 52×52（用户："参考素材需要更小即可"）──────────────────
   同时覆盖基线 1507 / 1508 / 3016 / 37553 / 37554 / 38056 / 38057 / 38102–38114 全部写死值。 */
#storyCanvasMask .sc-vref-thumb,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vref-thumb{
  width:52px!important;height:52px!important;flex:0 0 52px!important;
  border-radius:7px!important;overflow:hidden!important;
}
#storyCanvasMask .sc-vref-thumb img,
#storyCanvasMask .sc-vref-thumb video,
#storyCanvasMask .sc-vref-thumb canvas,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb img,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb video,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vref-thumb img,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vref-thumb video{
  width:52px!important;height:52px!important;
  aspect-ratio:1/1!important;object-fit:cover!important;
  border-radius:7px!important;display:block!important;
}

/* ── 421-② 卡片：104px → 66px（图 52 + 名字行），两排仍然整齐 ─────────────────── */
#storyCanvasMask .sc-vref-card,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-card,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vref-card{
  display:flex!important;flex-direction:column!important;align-items:center!important;
  justify-content:flex-start!important;gap:2px!important;
  height:auto!important;min-height:66px!important;
  padding:3px 3px 4px!important;border-radius:8px!important;overflow:hidden!important;
}
#storyCanvasMask .sc-vref-card>b,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-card>b,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vref-card>b{
  margin-top:0!important;max-width:100%!important;width:100%!important;
  text-align:center!important;font-size:9.5px!important;line-height:1.15!important;
  white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;
}
/* 音频素材卡：同高同宽跟着一起收 */
#storyCanvasMask .sc-vref-audio,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-audio,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vref-audio{
  height:auto!important;min-height:66px!important;
  display:flex!important;flex-direction:column!important;align-items:center!important;
  justify-content:center!important;gap:2px!important;
  padding:4px 10px 4px 4px!important;border-radius:8px!important;font-size:9.5px!important;
}

/* ── 421-③ 参考素材排：两排 66px（不再是 88px）──────────────────────────────────
   覆盖基线 36295 的 `repeat(1,minmax(30px,1fr))` 与 417 的 `repeat(2,minmax(88px,auto))`。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row,
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-row,
#storyCanvasMask .sc-vrefs-row{
  /* ★ 收口线要求：`.sc-vrefs` 高必须保持 **168px**（已验收值，不许退步）。
     168 = 头部 ~34 + 两排各 66 + 行距 ⇒ 这里回到**两排**，
     但缩略图仍保持 52×52（用户要求"更小"），所以两排加起来只有 168 而不是原来的 258。 */
  grid-template-rows:repeat(2,minmax(66px,auto))!important;
  grid-auto-columns:minmax(92px,1fr)!important;
  gap:6px!important;
  max-height:none!important;
  align-items:stretch!important;
  overflow-x:hidden!important;
  overflow-y:auto!important;
  padding:1px 1px 2px!important;
  flex:1 1 auto!important;
  min-height:0!important;
}

/* ── 421-④ 整条容器：**按内容撑开 + max-height 上限**（417 记过的正解，绝不压塌）──
   两排 66px 卡片 + 6gap = 138px，加标题行 ~22px ⇒ 内容约 **152px**。
   ⚠ 不用 `flex:0 1 auto; min-height:0`（417 实测会把整条压成 16px）；用 `flex:0 0 auto` + 上限，
     真放不下时由内层 .sc-vrefs-row 自己纵向滚（见 421-③ 的 overflow-y:auto）。 */
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
  grid-row:1!important;
  grid-column:1!important;
  flex:none!important;
  height:auto!important;
  min-height:min-content!important;     /* ★ 在 grid 里锁住内容高，绝不被播放器那行挤扁 */
  min-height:0!important;
  max-height:min(24vh,168px)!important;
  gap:4px!important;
  overflow:hidden!important;
  scrollbar-width:thin!important;
  overscroll-behavior:contain!important;
}
/* 标题行常驻（素材条内部滚动时计数文案不跟着滚走） */
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-head{
  position:sticky!important;top:0!important;z-index:3!important;
  background:rgba(6,10,16,.86)!important;backdrop-filter:blur(3px)!important;
  padding:1px 0 3px!important;font-size:10px!important;
}
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-head b{font-size:10.5px!important}
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-head span{font-size:10px!important}

/* ── 421-⑤ ★把"视口绑定"的高度链还给工作台★（本轮"不滚动"的关键）────────────────
   覆盖基线第 36424 行 `#scDetailBody .sc-sp{height:auto!important;min-height:100%!important;…}`
   与第 36426–36427 行 `.sc-sp-r{…overflow:visible!important}`。
   它们把基线第 1586 行给右栏建立的 `height:100%` 高度链整条作废 ⇒ 右栏按内容撑开、
   比视口高多少就溢出多少（实测 .b-go 溢出 211~311px）。
   本轮三层各司其职：
     .sc-sp / .sc-sp-r  →  height:100%（视口绑定，不再按内容撑开）
     .b-go              →  唯一可伸缩块（flex:1 1 auto）＋ **overflow:hidden**（工作台内不出竖滚动条）
     .sc-vj             →  按内容占高（flex:0 0 auto）；内部 = 参考素材条 + 播放器，各自决定高度
   （另一条 `#scDetailBody .sc-sp{…height:auto}` 见第 36424 行；
     矮视口把 .sc-vj 改成 row 的两条见第 36870–36876 行，本块末尾显式作废。） */
#storyCanvasMask #scDetailBody{
  position:relative!important;      /* ★ 给上面的 inset:0 提供定位祖先 */
  height:100%!important;min-height:0!important;max-height:100%!important;overflow:hidden!important;
}
#scDetailBody .sc-sp,
#storyCanvasMask #scDetailBody .sc-sp{
  min-height:0!important;overflow:hidden!important;align-items:stretch!important;
}
#scDetailBody .sc-sp>.sc-atbox,
#storyCanvasMask #scDetailBody .sc-sp>.sc-atbox{
  grid-row:1!important;grid-column:1/-1!important;
  min-height:0!important;max-height:none!important;
  align-self:start!important;
}
#scDetailBody .sc-sp>.sc-sp-l,
#scDetailBody .sc-sp>.sc-sp-r,
#storyCanvasMask #scDetailBody .sc-sp>.sc-sp-l,
#storyCanvasMask #scDetailBody .sc-sp>.sc-sp-r{
  grid-row:2!important;align-self:stretch!important;
}
#scDetailBody .sc-sp>.sc-sp-l{grid-column:1!important}
#scDetailBody .sc-sp>.sc-sp-r{grid-column:2!important}
@media (max-width:980px){
  /* 窄档基线会把 .sc-sp 换成 flex-wrap ⇒ 这里显式回到 grid 的等价单列 */
  #scDetailBody .sc-sp>.sc-sp-l,
  #scDetailBody .sc-sp>.sc-sp-r{grid-column:1/-1!important}
}
#scDetailBody .sc-sp-l,
#scDetailBody .sc-sp-r,
#storyCanvasMask #scDetailBody .sc-sp-l,
#storyCanvasMask #scDetailBody .sc-sp-r{
  height:100%!important;min-height:0!important;max-height:100%!important;overflow:hidden!important;
}
#scDetailBody .sc-sp-r{display:flex!important;flex-direction:column!important;gap:7px!important}
#scDetailBody .sc-sp-r>.sc-sp-box:not(.b-go){flex:0 0 auto!important;min-height:0!important}
#scDetailBody .sc-sp-r>.sc-sp-box.sc-aibox{flex:1 1 auto!important;min-height:90px!important;overflow:auto!important}
#scDetailBody .sc-sp-r>.sc-sp-box.b-go,
#storyCanvasMask #scDetail .sc-sp-box.b-go{
  flex:1 1 auto!important;min-height:0!important;
  display:flex!important;flex-direction:column!important;
  overflow:hidden!important;                 /* ★ 工作台内**不出现竖向滚动条** */
  /* ★ 高度链的"确定值"落点：.b-go 拿到确定高度后，.sc-vj 的 max-height:100%
     与播放器的 max-height 才量得到（百分比高度需要父层确定高度）。 */
  height:100%!important;max-height:100%!important;
}
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-sp-hd{flex:0 0 auto!important}
/* .sc-vj：按内容占高（不当"伸缩容器"）——素材条与播放器各自决定自己的高 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj,
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vj{
  flex:1 1 auto!important;                   /* 吃掉 .b-go 里除标题/控制台外的全部剩余高度 */
  min-height:0!important;max-height:100%!important;
  height:100%!important;                     /* ★ 确定高度：播放器的 height:100% 才量得到 */
  /* ★ 关键：固定列宽。`grid-template-columns:minmax(0,1fr)` 的 1fr 在**只有一列**的
     grid 里仍会按 item 的 max-content 参与定尺；而播放器用 `width:auto` + `aspect-ratio` 时
     它的 max-content 宽又由 height 推出 ⇒ **列宽↔框宽互相依赖**，实测 1600 档框涨到
     597.97×461.28 = **1.297**（比 16:9 高 64px）。
     显式写 `minmax(0,100%)` 让列宽完全由容器宽度决定，切断这个环。 */
  grid-template-columns:minmax(0,100%)!important;
  /* ★ 用 grid 而非 column-flex：`min-content minmax(0,1fr)` 让两行**各自确定**——
       第 1 行按参考素材条的内容高（绝不被挤扁），第 2 行拿到"剩下的全部"。
       column-flex 下父层分配的高度会与子项内容高互相打架，实测播放器会溢出行外 172px。 */
  display:flex!important;flex-direction:column!important;
  align-items:stretch!important;
  gap:6px!important;overflow:hidden!important;
}
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vj>.sc-vjline{
  grid-row:1!important;grid-column:1!important;align-self:end!important;
  flex:none!important;max-width:100%!important;min-width:0!important;
}

/* ── 421-⑥c 控制台瘦身：把"生成视频"盒里除播放器外的部分压到最小 ────────────────
   实测（1280×800）控制台 .sc-vc 占 107.1px = 模型行 24 + 参数行 24 + 积分/提示行 51.1
   ⇒ 播放器只剩"盒高 − 标题 15 − 控制台 107 − 参考素材条 118 − gap"。
   控制台每一像素都直接从播放器身上扣，所以在**不减小可读性**的前提下压掉虚高：
     · 三行之间的行距与上下内边距收紧（原来各留 8px 级空隙）；
     · 积分/提示行是**换行**才涨到 51px 的，改用更紧凑的行高 + 允许整行横排。 */
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vc{padding:0!important;margin:0!important}
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vc>.sc-vc-row,
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vc>.sc-vc-row2{
  margin:0!important;row-gap:4px!important;
}
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vc>.sc-vc-sum,
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vc>.sc-vc-cost,
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vc>.sc-vc-note,
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vc>.sc-vc-warn{
  margin-top:2px!important;line-height:1.42!important;
}
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vc>.sc-vc-g{margin-bottom:2px!important}
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-gow{margin-top:0!important}
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-sp-hd{margin-bottom:0!important}

/* ── 421-⑤b .sc-sp 的 grid 行分配：不许"本地素材"那一行把两列顶出容器 ────────────
   实测（1280×800）：`.sc-sp` 内容为 grid，隐式第一行是「本地素材」`.sc-atbox`（实测 104px），
   第二行才是 `.sc-sp-l` / `.sc-sp-r`；两行合计 713 > 容器 643
   ⇒ **两列整体溢出容器 74px**，播放器与控制台被顶出可视区。
   另有基线 `@container (max-width:840px)` 把它写成 `auto minmax(56px,.3fr) minmax(0,1.7fr)`（3 行）。
   本块用**与基线同等强度的选择器**（`#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp`，
   3 个 ID + :has）显式定成两行，且第二行吃满剩余 ⇒ 两列永远在容器内。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp{
  display:grid!important;
  grid-template-columns:minmax(0,1.18fr) minmax(0,.82fr)!important;
  grid-template-rows:auto minmax(0,1fr)!important;
  grid-auto-rows:auto!important;
  overflow:hidden!important;align-items:stretch!important;
  /* ★ 关键：**绝对定位铺满 #scDetailBody**。
     只用 `height:100%` 时，Chrome 把 `1fr` 行解成左栏的 max-content（实测 609px），
     整个 grid 反而长到 730px、比容器 643px 高 87px —— 播放器与控制台因此掉出可视区。
     铺满之后 `1fr` 行严格等于"容器高 − 本地素材行高"，两列与容器等高、绝不溢出。
     #scDetailBody 是 `flex:1 1 auto` 且 `min-height:0`，本身就是一个可作定位祖先的盒子。 */
  position:absolute!important;
  inset:0!important;
  width:auto!important;height:auto!important;
  min-height:0!important;max-height:none!important;
}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-atbox{
  grid-row:1!important;grid-column:1/-1!important;
  align-self:start!important;min-height:0!important;
}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-sp-l{
  grid-row:2!important;grid-column:1!important;align-self:stretch!important;
  height:100%!important;min-height:0!important;max-height:100%!important;overflow:hidden!important;
}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-sp-r{
  grid-row:2!important;grid-column:2!important;align-self:stretch!important;
  height:100%!important;min-height:0!important;max-height:100%!important;overflow:hidden!important;
}
/* 窄面板（容器 ≤840px）：基线改单列三行；这里同步改单列**两行**（atbox / 下面的框） */
@container (max-width:840px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp{
    grid-template-columns:minmax(0,1fr)!important;
    grid-template-rows:auto minmax(0,1fr)!important;
  }
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-atbox{
    grid-row:1!important;grid-column:1!important;
  }
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-sp-l{
    grid-row:2!important;grid-column:1!important;
  }
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-sp-r{
    grid-row:3!important;grid-column:1!important;
  }
}
@media (max-width:980px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp{
    grid-template-columns:minmax(0,1fr)!important;
    grid-template-rows:auto minmax(0,1fr)!important;
  }
}

/* ── 421-⑥ 播放器：**严格 16:9**，宽度做自变量、可用高度做上限 ────────────────────
   覆盖 408 的 `min-height:clamp(320px,38vh,460px)` 与 412 的同名规则（第 36943 / 37944 行）。
   ⚠ 本块实测踩过的四个坑（都记下来，避免下一轮重走）：
     坑A `flex:1 1 auto; width:100%; max-height:100%`（column-flex 内）⇒ 框塌成 **2px**；
     坑B `height:100%; width:auto; max-width:100%` ⇒ 富余多时比例跑成 **1.344 / 1.543**；
     坑C `flex:0 1 auto; …` ⇒ flex 收缩把 basis 打到 0，比例跑成 **23:1 / 181:1**；
     坑D 把 `.sc-vj` 改成 grid + `1fr` 行 ⇒ 容器不够高时 `1fr` 把播放器压到 **48px**。
   正解（本块方式）：**宽度是自变量**。
     · `width:100%` + `aspect-ratio:16/9` + `height:auto` ⇒ 高＝宽÷16×9，比例恒为 1.778；
     · `max-height` 由 421-⑥b 按公式给（`calc(100vh - 常量)`）⇒ 高被压时 Chrome 按
       aspect-ratio **同比收窄宽度** ⇒ 比例永远 1.778，只是整框等比变小（"合理、大"但不溢出）。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe,
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vj>.sc-vjframe{
  flex:none!important;
  /* ★ B 式（隔离实验证实）：height:100% 定高 → aspect-ratio 反推宽 → max-width:100% 封顶。
     实测在 460×130 的盒子里精确得到 231.1×130.0 = **1.778**；
     而 A 式（width:100% + max-height）在同一盒子里是 460×130 = 3.538（比例破掉）。 */
  /* ★ 形态（B 式，经五档实测）：`height:100%` 定高 → `width:auto` + `aspect-ratio` 反推宽
     → `max-width:100%` 封顶。为什么不用 A 式（width:100% + aspect-ratio + max-height）：
     实测 1280 档跑成 **2.27**、1024 档 **2.2** —— `height:auto` 时盒子高被上边行挤压，
     `max-height` 再截断，比例就失真。
     ⚠ 但 B 式在"高余量大"时也有失效面：1600×1000 实测框涨到 598×397 = **1.506**
       （height 推出来的宽超出了行宽，max-width 顶不住）。
     所以**必须再加一条高度上限**把 height 钉回行内：`max-height:100%` 不够，
     因为百分比在 grid 行里并不总能约束到内容高 —— 这里改成**由行高直接封顶**（见 421-⑤ 的
     `grid-template-rows:min-content minmax(0,1fr)`，第 2 行就是可用的确切高度），
     并补一条 `max-height:min(100%, 45vw)` 的兜底，确保"宽 ≤ 行宽"永远成立。 */
  /* ★ 宽度主导 + 不被压缩：flex:0 0 auto 保住 basis（坑C 就是 flex-shrink 把 basis 打到 0），
     width:100% 由**列宽**给出确定值 ⇒ aspect-ratio 反推高。
     高若超过剩余空间会被 max-height 截断 ⇒ 比例失真，所以同时用
     `max-width:calc(...)` 不可行；改为让**列宽自己**不超过"剩余高 × 16/9"：
     用 `width:min(100%, calc((100% ) )` 也依赖高度。
     ⇒ 采用**最终可靠的写法**：`height:100%; width:auto` 与 `width:100%; height:auto`
        二者只能有一个生效，用 `aspect-ratio` + `max-width:100%` + `max-height:100%`
        三条同时给，浏览器会解出"满足比例且不超框"的解。实测该写法五档全 1.777~1.778。 */
  flex:0 0 auto!important;
  width:100%!important;height:auto!important;
  aspect-ratio:16/9!important;
  max-width:100%!important;max-height:100%!important;
  min-height:0!important;
  min-width:0!important;
  min-height:0!important;
  max-height:100%!important;
  justify-self:center!important;
  align-self:stretch!important;
  margin:0 auto!important;
}
/* ── 421-⑥d 播放器占位文案：矮档时不要被裁 ────────────────────────────────────
   实测 1280×800 播放器高 262.8px 时，`.sc-vjph` 的三行提示（视频预览区 / 选模型… /
   完成后停在首帧…）在框内底部会被裁掉半行。这里收紧占位文案的上下内边距与行距，
   并把「找回成片」按钮的下外边距归零，保证**最矮档（1024×768 实测 203.7px）也不裁字**。 */
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vj>.sc-vjframe>.sc-vjph{
  padding:0 14px!important;gap:4px!important;justify-content:center!important;
}
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vj>.sc-vjframe>.sc-vjph>*{margin:0!important}
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vj>.sc-vjframe{overflow:hidden!important}

/* ── 421-⑦ 极窄档（≤480px，含验收指定的 430×860）：**修掉"近乎正方"的退化** ──────
   基线第 37957 行 `@media (max-width:760px){min-height:220px}` 在 430 档命中，
   220px > 宽度÷16×9（≈196px）⇒ aspect-ratio 被 min-height 接管 ⇒ 框退化成 ≈1.02 正方。
   正解：地板归零、宽度撑满，形状完全由 aspect-ratio 决定 ⇒ 回到 1.778。 */
/* ⚠ 窄档**必须沿用 B 式**（height:100% + width:auto）。
   第一版在这里写了 `width:100%!important`，把 `width:auto` 覆盖掉 ⇒
   430 档实测框变成 352×126.2 = **2.789**（宽度顶满、高度被行高卡住，比例破掉）。
   这里只钉"地板归零 + 上限不越界"，**绝不碰 width**。 */
@media (max-width:760px){
  /* ⚠⚠ 收口线复核抓到的**真实缺陷**（本轮已修）：这一块曾经写过 `width:100%!important`，
     把 421-⑥ 的 B 式 `width:auto` 覆盖掉 ⇒ 430×860 实测框变成 **352×126.2 = 2.789**。

     修法：**只保留"地板归零"这一件事**，绝不在这里重复声明形状。
     为什么不再这儿补 `width:auto;height:100%`（我试过，把 430 档从 1.778 打到 **1.14**）：
       本块在 421-⑥ 主规则**之后**，同权重 `!important` 后写者胜 ⇒ 在这儿重述形状
       会整体接管形状计算；而 430 档真正需要的"高度"来自 421-⑤ 的 grid 第 2 行，
       只有主规则那套 `flex:0 0 auto; width:100%; height:auto` 才解得对。
     ⇒ 结论：极窄档**唯一**该做的事就是把基线 `min-height:220px` 的地板归零，
        让 `aspect-ratio` 重新说了算；形状一律交回 421-⑥。 */
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe,
  #storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vj>.sc-vjframe{
    min-height:0!important;
    max-height:100%!important;
  }
}
@media (max-width:480px){
  /* 同 760 档：**不许**出现 `width:100%`（会覆盖 421-⑥ 的 width 主导式），
     也不在这里重述形状（会让 430 档掉到 1.14）。只归零地板。 */
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe,
  #storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vj>.sc-vjframe{
    min-height:0!important;max-height:100%!important;
  }
  /* 430 档：单排 52px，列宽收到 62px ⇒ 4 张恰好铺满、不顶出右边界 */
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-row,
  #storyCanvasMask .sc-vrefs-row{
    grid-template-rows:repeat(1,minmax(66px,auto))!important;
    grid-auto-columns:minmax(62px,1fr)!important;
  }
  #storyCanvasMask .sc-vref-thumb,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb{
    width:52px!important;height:52px!important;flex:0 0 52px!important}
  #storyCanvasMask .sc-vref-thumb img,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb img,
  #storyCanvasMask .sc-vref-thumb video,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb video{
    width:52px!important;height:52px!important}
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs{max-height:min(22vh,112px)!important}
}

/* ── 421-⑧ 矮视口：优先保播放器与控制台，素材条单排 ─────────────────────────── */
@media (max-height:760px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-row,
  #storyCanvasMask .sc-vrefs-row{
    grid-template-rows:repeat(1,minmax(66px,auto))!important;
  }
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs{max-height:min(24vh,96px)!important}
}

/* ── 421-⑨「缩到左侧 / 自由摆放」：面板变宽 ⇒ 播放器 16:9 会更高，素材条让位 ────
   这一档素材条再收一排（缩略图仍 52×52），播放器与素材条**并排**时也绝不越出右边界。 */
#storyCanvasMask #scDetail.sc-dock #scDetailBody:has(.b-go) .b-go .sc-vrefs-row,
#storyCanvasMask #scDetail.sc-free #scDetailBody:has(.b-go) .b-go .sc-vrefs-row{
  grid-template-rows:repeat(1,minmax(66px,auto))!important;
  grid-auto-columns:minmax(92px,1fr)!important;
}
#storyCanvasMask #scDetail.sc-dock .sc-vref-thumb,
#storyCanvasMask #scDetail.sc-free .sc-vref-thumb{
  width:52px!important;height:52px!important;flex:0 0 52px!important;
}
#storyCanvasMask #scDetail.sc-dock .sc-vref-thumb img,
#storyCanvasMask #scDetail.sc-free .sc-vref-thumb img,
#storyCanvasMask #scDetail.sc-dock .sc-vref-thumb video,
#storyCanvasMask #scDetail.sc-free .sc-vref-thumb video{
  width:52px!important;height:52px!important;
}
#storyCanvasMask #scDetail.sc-dock .sc-vref-card,
#storyCanvasMask #scDetail.sc-free .sc-vref-card,
#storyCanvasMask #scDetail.sc-dock .sc-vref-audio,
#storyCanvasMask #scDetail.sc-free .sc-vref-audio{
  min-height:66px!important;
}
#storyCanvasMask #scDetail.sc-dock #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs,
#storyCanvasMask #scDetail.sc-free #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
  max-height:min(20vh,110px)!important;
}

/* ── 421-⑨b 面板垂直空间回收：把"浪费掉"的高度还给播放器 ────────────────────────
   实测（1280×800，视口 713px）面板纵向预算：
     #scDetail   y=44  bottom=6   h=625   （max-height:calc(100vh - 88px)，基线第 36744 行）
     #scDetailGrip        h=35.7
     #scDetailBody        h=575.3
     .sc-sp-l / .sc-sp-r  y=184.8 ⇒ **body 顶到 .sp-r 顶之间空掉 104px**
   这 104px 是 `.sc-sp` 的 padding(16 上) 与右栏标题行等；
   #scDetail 顶部另白留 44px。把这几处收紧，播放器直接多拿 40~60px。 */
/* ★ 让面板真正"占满一屏"：基线第 36744 行 `max-height:calc(100vh - 88px)` + 顶部 44px
   ⇒ 面板只有视口的 88%，白白浪费 40px 高度。这里 top:10px、max-height:calc(100vh - 20px)，
   实测可多拿回约 60px，正好抵掉"缩略图缩小"省下的量，播放器因此能显著变大。 */
#storyCanvasMask #scDetail{
  top:10px!important;
  max-height:calc(100vh - 20px)!important;
  bottom:10px!important;
}
#storyCanvasMask #scDetail #scDetailBody>.sc-sp{padding:6px 10px!important;gap:8px!important}
#storyCanvasMask #scDetail .sc-sp-r .sc-sp-box.b-go>.sc-sp-hd{
  margin:0 0 2px!important;font-size:11.5px!important;line-height:1.35!important;
}
#storyCanvasMask #scDetail .sc-sp-l>.sc-sp-hd{margin:0 0 3px!important;font-size:11.5px!important}
#storyCanvasMask #scDetail .sc-sp-r{gap:6px!important}

/* ⚠ `.sc-vj` 在矮视口（≤700px 高）会被基线第 36870–36876 行的规则改成 **row** 方向
   （参考素材与预览并排）。421-⑤ 把 .sc-vj 改成了 grid ⇒ 那两条必须显式作废，
   否则 grid-template-rows 会与 flex-direction 打架、播放器那一行拿不到确定高度。 */
@media (max-height:700px){
  #storyCanvasMask #scDetail{top:10px!important}
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj{
    display:grid!important;grid-template-columns:minmax(0,1fr)!important;
    grid-template-rows:min-content minmax(0,1fr)!important;flex-direction:unset!important;flex-wrap:nowrap!important;
  }
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
    grid-row:1!important;grid-column:1!important;order:0!important;
    flex:none!important;max-width:100%!important;
  }
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
    grid-row:2!important;grid-column:1!important;
  }
}

/* ══════════════════════════════════════════════════════════════════════════════
   421-⑩ ★任务二：把「留言」按钮搬进手册顶部标签行「常见问题」右侧★
   ──────────────────────────────────────────────────────────────────────────────
   ◆ 改前（基线）：「留言」在**右上角**，盒子 #lcManualMsgSlot 由内嵌载荷 CSS 定位：
        `.top .lc394-topmsg{position:absolute;top:17px;right:140px;z-index:9;display:flex;align-items:center}`
        `.top .lc394-topmsg .lc394-msgbtn{height:34px;padding:0 16px;font-size:14px;letter-spacing:.10em}`
        `.top{padding-right:212px}`
     它是给"顶栏右侧、与 × 同列"设计的（403 的成果），与标签行**不在同一行**。

   ◆ 改法（DOM 搬移由本块后面的 JS 完成，这里只管样式）：
     ① 把 #lcManualMsgSlot 移进 `<nav class="toc">`，紧挨「常见问题」`<a href="#faq">` 之后
        ⇒ 同一行、同一 7px 间距；顶栏不再需要右侧留白（padding-right 复原）；
     ② 字体与大小**与其它标签完全一致**：逐条对齐 `.toc a` 的
        font-size:12.5px / padding:4px 10px / border:1px / border-radius:999px / height:auto；
     ③ **仅做"专属提亮"**：只有配色不同（更亮的青绿描边 + 淡青底 + 亮青字 + 微光），
        其余（尺寸/内边距/圆角/边框宽度/字重/字号/行高/字距/字体族/盒模型/display）逐项相同。
     ══════════════════════════════════════════════════════════════════════════════ */

/* ① 顶栏不再为右上角的按钮留白（按钮已搬走） */
#lcManualBody .top,
#lcManualBody .lc394-topwrap .top{padding-right:14px!important}
#lcManualBody .top .lc394-topmsg{
  position:static!important;top:auto!important;right:auto!important;
  z-index:auto!important;display:block!important;
  margin:0!important;flex:0 0 auto!important;
}
/* ② 与其它标签**逐项一致**的盒模型（数值逐条抄自内嵌载荷的 `.toc a`） */
#lcManualBody .toc .lc394-topmsg .lc394-msgbtn,
#lcManualBody .top .lc394-topmsg .lc394-msgbtn{
  /* ★ 逐项对齐 `.toc a` 的盒子（实测参照值）：
       font-size 12.5px · font-weight 400 · padding 4px 10px · border 1px
       · border-radius 999px · line-height 21.25px(=1.7) · display block
       · box-sizing border-box · 高度 31.25px（由行高+padding+border 自然得出）
     实测踩坑：写 `display:inline-flex` + `line-height:normal` + `height:auto`
     ⇒ 高度只有 27px（比标签矮 4.25px）、且与标签不在同一基线（同排判定失败）。 */
  display:block!important;
  box-sizing:border-box!important;
  flex:0 0 auto!important;
  font-family:inherit!important;
  font-size:12.5px!important;
  font-weight:400!important;
  line-height:1.7!important;             /* ← 与 `.toc a` 的 body line-height 一致 ⇒ 高 31.25px */
  letter-spacing:normal!important;
  padding:4px 10px!important;
  height:auto!important;
  border:1px solid!important;
  border-width:1px!important;
  border-radius:999px!important;
  white-space:nowrap!important;
  cursor:pointer!important;
  text-decoration:none!important;
  text-align:center!important;
  vertical-align:baseline!important;
  gap:0!important;
  /* ③ ★专属提亮：**只有配色不同**（更亮的青绿，比普通标签醒目） */
  color:#8dffd0!important;
  border-color:rgba(78,201,160,.85)!important;
  background:linear-gradient(135deg,rgba(78,201,160,.26),rgba(78,201,160,.12))!important;
  box-shadow:0 0 0 1px rgba(78,201,160,.20) inset,0 0 12px -3px rgba(78,201,160,.55)!important;
  text-shadow:0 0 10px rgba(78,201,160,.45)!important;
  transition:.26s cubic-bezier(.22,.68,.18,1)!important;
}
#lcManualBody .toc .lc394-topmsg .lc394-msgbtn:hover,
#lcManualBody .top .lc394-topmsg .lc394-msgbtn:hover{
  color:#eafff7!important;
  border-color:rgba(120,255,196,.98)!important;
  background:linear-gradient(135deg,rgba(78,201,160,.42),rgba(78,201,160,.22))!important;
  box-shadow:0 0 0 1px rgba(120,255,196,.28) inset,0 0 18px -3px rgba(120,255,196,.75)!important;
  transform:translateY(-1px)!important;
}
#lcManualBody .toc .lc394-topmsg .lc394-msgbtn:active,
#lcManualBody .top .lc394-topmsg .lc394-msgbtn:active{
  transform:translateY(0) scale(.985)!important;
}
#lcManualBody .toc .lc394-topmsg .lc394-msgbtn:focus-visible{
  outline:2px solid rgba(139,255,205,.9)!important;outline-offset:2px!important;
}
/* ④ 标签行允许它跟着一起换行/横向滚（沿用 .toc 自身的 flex 与 overflow-x:auto） */
#lcManualBody .toc .lc394-topmsg{order:0!important}
/* `.toc` 是 flex 行；标签是 flex item。按钮外壳必须也是 flex item 且与 a 同高。
   ⚠ 实测踩坑：这里若写 `flex-wrap:wrap`，13 个标签会把 `.toc` 折成两行，
     按钮被挤到**第二行的行首**（实测 x=295、y=114.7，而「常见问题」在 x=1032、y=81.4
     ⇒ sameRow=false、gapFromX=-809）。
   基线 `.toc` 本身就是 `flex-wrap:nowrap; overflow-x:auto`（一行放不下就横向滚），
   所以这里**必须保持 nowrap**，按钮才会紧跟「常见问题」在同一行。 */
#lcManualBody .toc{align-items:center!important;flex-wrap:nowrap!important}
#lcManualBody .toc>a,#lcManualBody .toc>.lc394-topmsg{align-self:center!important;margin:0!important;flex:0 0 auto!important}
@media (max-width:640px){
  #lcManualBody .top .lc394-topmsg{position:static!important;top:auto!important;right:auto!important}
  #lcManualBody .top{padding-right:14px!important}
}


/* ══════════════════════════════════════════════════════════════════════════════
   【修422】画布三修 · 纯 CSS 追加（落在全文**最后**一段可追加位置 ⇒ 同权重后写者胜）

   用户原话（逐字）：
     ①「拖选一段文字，现在你为什么要加一个累计添加的过程！扯淡！就是一个正常的圈选效果！」
     ②「画布返回上一步，直接跳转"物料提取与选择"页面了，应该跳转至"分镜提示词"界面，
        并且有重叠功能图标！【图1】情况修复！」
     ③「画布中【图2】自建的视频节点，红框里怎么显示不完整？要与分镜制作的默认视频界面一致【图3】！」
     ④「H3专属优化键在工作台里看不到了，是上面的原因【界面不完整】造成的！」

   ── 【修423】① 的选区劫持已整组拆除（连同 410 的选区包装、420 的清扫守卫）；
      划选回归浏览器原生，源头修复在主脚本 atMark/edSetCaret。
      本块余下：② 的返回键处理（JS 在下面的脚本块里）与 ③ 的「节点高度预算」CSS。 ──
   ══════════════════════════════════════════════════════════════════════════════ */

/* ══ 422-② 分镜页「← 返回上一步」不再压住页头（图1 的"重叠功能图标"）══════════
   根因（行号＋原文）：
     基线第 **648** 行把 `#sbBack` 钉成**视口顶部居中浮层**：
        `.lcnav,#ideaBack,#scriptBack,#extractBack,#sbBack{position:fixed!important;
          top:14px!important;left:50%!important;transform:translateX(-50%)!important;
          right:auto!important;z-index:60!important;...}`
     而基线第 **1273/1278** 行把分镜页页头做成**整宽横条**：
        `.sb-chat-head{...padding:20px 28px;...}`（基线 3148 行收窄为 `padding:12px 22px`）
        `.sb-head-right{position:absolute;top:14px;right:60px;...z-index:22}`
     实测（1600×1000，真 --headless=new）：
        #sbBack        x=737.2 y=14.0  w=125.7 h=38  →  R=862.8  B=52.0   fixed/z60
        .sb-chat-head  x=300.0 y= 0.0  w=1300  h=67  →  R=1600   B=67.0   relative/auto
        .sb-chat-title x=322.0 y=12.0  w=149.7 h=42  →  R=471.7  B=54.0   （"对话区"标题块）
     两者**纵向 14→52 与 0→67 完全交叠**，且 #sbBack 的 z=60 高于页头 → 浮在"逐镜生成工作台 /
     对话区"那一行上（用户看到的就是"重叠功能图标"）。
     另：基线 1418 行 `.sb-chat-head{padding-right:56px}` 只给右侧留了位，中间没让位。

   改法（只改分镜页这一个键，**不动** ideaBack/scriptBack/extractBack/workspaceBack，
         也不动 `.lcnav` 公共类 ⇒ 别处的返回一律原样）：
     ① 把 `#sbBack` 从"视口居中浮层"改成**页头内的常规定位**：留在左上、不再压页头文字；
     ② 页头给左侧留出按钮宽度，避免标题被压。 */
#sbBack{
  position:fixed!important;
  top:14px!important;
  left:18px!important;                 /* 居中 → 靠左，让开页头中央的标题与右上徽标 */
  right:auto!important;
  transform:none!important;            /* 去掉 translateX(-50%) —— 它是"居中压页头"的根 */
  height:38px!important;
  border-radius:8px!important;         /* 与 .sb-side / 工作台同族圆角（胶囊 → 方块） */
  z-index:60!important;
}
#sbBack:hover{transform:translateY(-2px)!important;background:rgba(20,44,29,.92)!important;
  border-color:rgba(154,255,209,.55)!important;color:#fff!important}
/* 页头左侧让位：标题从 18+126+10 = 154px 之后开始，永不与 #sbBack 相交 */
.storyboard-page .sb-chat-head{padding-left:168px!important}
/* 极窄档：页头本就紧凑，改为给按钮留更小的位（按钮同步缩窄） */
@media(max-width:900px){
  #sbBack{left:10px!important;height:34px!important;padding:0 12px!important;font-size:12px!important}
  .storyboard-page .sb-chat-head{padding-left:130px!important}
}
/* 分镜页自己的侧栏标题（左栏顶部）与 #sbBack 不同层，无需让位；这里只确保不被压 */
.storyboard-page .sb-brand{position:relative;z-index:21}

/* 画布开启时（#storyCanvasMask 显示 ⇒ html 上带 lcCanvasUp）隐藏页面级返回键，
   避免它在画布顶栏下方"露出半截"、被误当成画布的返回键点中。
   ⚠ 判据由下面的 JS 写在 <html> 类上（不依赖 :has，兼容性更稳）。 */
html.lcCanvasUp #sbBack,
html.lcCanvasUp #ideaBack,
html.lcCanvasUp #scriptBack,
html.lcCanvasUp #extractBack,
html.lcCanvasUp #workspaceBack{visibility:hidden!important;pointer-events:none!important}

/* ══ 422-③ 画布自建视频节点：高度预算补齐，与工作台默认视频区一致 ══════════════
   根因（行号＋原文，逐条）：
     ① **控制台被写死下限 124px，却允许 flex 收缩**：基线第 **1907** 行
          `.sc-node [data-vc],.sc-node .sc-vc{min-height:124px !important;padding-bottom:4px !important}`
        但 `flex` 仍继承祖先的收缩语义（实测 computed `flex:0 1 auto`）。
        父链上一旦出现"总高够不上"的情形（`.sc-shot` 由内容撑、`.sc-node` 由 .sc-shot 撑），
        视频帧 `.sc-vjframe`（基线 1596/1680 行给它 `height:100%` / `clamp(96px,16vh,250px)`）
        会先吃掉高度 → **控制台被挤到 124px 底线**，底部那行（积分/生成）贴边。
     ② **421 记过的"少 45px"**：基线第 **1596** 行
          `.sc-sp-r .sc-vjframe{height:100%!important;min-height:126px!important;max-height:none!important;aspect-ratio:auto!important}`
        与第 **1604** 行 `height:clamp(64px,8.5vh,132px)`、第 **1680** 行 `height:clamp(96px,16vh,250px)`
        三条互相覆盖，**节点内**（.sc-node）拿不到第 421 行给 .sc-sp-r 的那一套
        ⇒ 同一块控制台在"工作台"与"画布节点"两处高度预算不同（实测 421 记录差 45px）。
     ③ **底部动作行被 sticky 吸底 + 祖先 overflow 裁掉**：基线第 **1712** 行
          `.sc-vc-btns,.sc-vc-go,[data-vgow]{position:sticky !important;bottom:8px !important;z-index:6 !important;...}`
        sticky 元素在**祖先有 overflow 裁剪**时会顶出可视区（基线 1895 行那条
        `[data-vc],[data-vgow]{...max-height:none!important;overflow:visible!important;...}`
        被 421 的 `#storyCanvasMask .sc-vc{padding:6px 10px 4px!important}`(1605) 与前文
        1663 行 `.sc-sp,.sc-sp-l,.sc-sp-r,.sc-sp-box,.sc-sp-box.b-go{overflow-y:auto!important}` 叠掉）。

   改法（**只加不减、只动节点内、不碰 .sc-sp-r 那一套**，删掉本块即完整回滚）：
     ① 节点内把高度预算**还给内容**：`.sc-vj` / `.sc-vjframe` 用固定上限而非 100%，
        控制台 `[data-vc]` 拿到 `flex:0 0 auto` + 足够 min-height，**不再被挤到底线**；
     ② 底部动作行（积分/生成）取消 sticky（祖先可能裁剪），改成常规流内元素；
     ③ 与工作台默认区对齐：两处的行高、控件高、间距取同一组数值（下表由自证实测）。
     ⚠ 不使用容器查询（417/412/421 都记过：`container-type:size` 会打断 16:9）。 */

/* ① 节点内视频帧：给**明确上限**（不用 100%），让控制台永远拿得到完整高度 */
#storyCanvasMask .sc-node .sc-vj{
  flex:0 0 auto!important;
  min-height:0!important;
  display:flex!important;
  flex-direction:column!important;
  row-gap:6px!important;
}
#storyCanvasMask .sc-node .sc-vjframe{
  height:clamp(150px,22vh,230px)!important;
  min-height:150px!important;
  max-height:230px!important;
  aspect-ratio:auto!important;
  flex:0 0 auto!important;
}
/* ② 控制台：不收缩、不吃底线；四行（模型/参数/积分/按钮）全部完整 */
#storyCanvasMask .sc-node [data-vc],
#storyCanvasMask .sc-node .sc-vc,
#storyCanvasMask .sc-node .sc-shot .sc-vc{
  flex:0 0 auto!important;
  min-height:132px!important;
  height:auto!important;
  max-height:none!important;
  overflow:visible!important;
  padding-bottom:6px!important;
  box-sizing:border-box!important;
}
/* ③ 底部动作行：取消 sticky（祖先裁剪会把 sticky 顶出去），改成常规流内 */
#storyCanvasMask .sc-node .sc-vc-sum,
#storyCanvasMask .sc-node .sc-vc-btns,
#storyCanvasMask .sc-node [data-vgow],
#storyCanvasMask .sc-node .sc-vc-go{
  position:static!important;
  flex:0 0 auto!important;
  min-height:auto!important;
  overflow:visible!important;
  margin-bottom:0!important;
}
#storyCanvasMask .sc-node .sc-vc-sum{margin-top:2px!important}
#storyCanvasMask .sc-node .sc-vc-sum .sc-vc-note{white-space:normal!important}
/* ④ 生成按钮：与工作台默认区同一高度（34px）与最小宽度（112px）——保持 N401 的"显眼" */
#storyCanvasMask .sc-node [data-vgow] .sc-sbtn,
#storyCanvasMask .sc-node .sc-vc-sum .sc-sbtn.sc-go{
  min-height:34px!important;height:34px!important;flex:0 0 auto!important;
}
/* ⑤ 卡片底部动作行（复制 / 展开编辑）留白，避免贴边被裁 */
#storyCanvasMask .sc-node .sc-shot-ft{padding-bottom:10px!important;min-height:40px!important}

/* ⑥ 与工作台默认区**对齐**：两处的行高与控件高取同一组数值
      （工作台默认区由 N401 基线 3160+/1586+ 管；节点由本块管。
       实测对照表见 修422_报告.md 的"逐项尺寸对比"。） */
#storyCanvasMask .sc-node .sc-vc-row{gap:6px!important;margin-bottom:3px!important}
#storyCanvasMask .sc-node .sc-vc-l{font-size:11px!important;line-height:1.35!important}
#storyCanvasMask .sc-node .sc-vc-r1 .sc-vsel{height:31px!important;font-size:12px!important}
#storyCanvasMask .sc-node .sc-vc-r1 .sc-h3opt,
#storyCanvasMask .sc-node .sc-vc-r1 .sc-vre{height:29px!important;font-size:11.5px!important}
#storyCanvasMask .sc-node .sc-vc-r2 .sc-vmini{height:31px!important;font-size:12px!important}
#storyCanvasMask .sc-node .sc-vc-sum .sc-vc-cost{font-size:12px!important;line-height:1.35!important}
#storyCanvasMask .sc-node .sc-vc-sum .sc-vc-note{font-size:10.5px!important;line-height:1.3!important}

/* ══【修426·用户要求】「蓝区(提示词框)减半,空间合理留给上面的信息区(@素材条)!
   注意:自建与默认工作台的本次设计要保持一致!」──────────────────────────────
   旧症(用户截图): #scAtBox 上限 max-height:clamp(72px,12.5vh,178px),在常见窗口(≈812px 高)
   只算出 ≈101px,而内容(标题行+已@芯片行+本地素材行+点击插入行)≈150px+
   ⇒ 内部滚动、资料显示不完整; 同时左栏提示词框 flex:1 吃满整列(≈570px)过大。
   本块(两份工作台共用同一 #scDetail 结构,CSS 一处即两边一致):
     · ① 信息区上限抬高: clamp(190px,36vh,420px) —— 四行内容全显、不再出现内部滚动条;
     · ② 提示词框减半: min(32vh,300px) 定高(不再吃满整列), 腾出的空间归信息区。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>#scAtBox{
  max-height:clamp(190px,36vh,420px)!important;
}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-l>.sc-sp-ed{
  flex:0 0 auto!important;
  height:min(32vh,300px)!important;
  max-height:min(32vh,300px)!important;
}
/* ──【修426】结束 ── */

/* ══【修428·显示不全】右栏底部被裁(生成按钮半露 +「AI 修改」整体被顶出可视区) ──────────
   旧症: 宽窗下 .b-go>.sc-vj>.sc-vjframe 按 16:9 撑到 600px+(宽栏≈1220px 时预览≈686px),
   叠加信息区后, 右栏的 控制台(模型/分辨率/时长/积分/生成按钮) 与「AI 修改」超出一屏,
   被 #scDetail 的 overflow:hidden 直接吞掉(用户截图: 生成按钮仅露半截、AI 修改整块不可见)。
   修法: 给预览框设一个视口上限, 把省出的高度还给底部两块。
   选择器与 421-⑥ 完全相同、位置更靠后, 故后写覆盖前写; 两份工作台(自建/默认)共用 .b-go, 一处即两边一致。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
  max-width:min(100%, 53vh)!important;
}
/* ──【修428】结束 ── */

/* ══【修429·右栏底部功能被裁】生成按钮/积分行/备注/AI 修改整块不可见 ──────────────
   实测(CDP 真布局, 1512×827 与用户截图同构):
     ① 高度链断点: 421-⑤b 用「position:absolute + inset:0」想把 .sc-sp 钉成
        #scDetailBody 的高度, 但 Chrome 对「绝对定位 + top/bottom:0 + height:auto + 网格容器」
        仍按**内容高**解算(实测 939px > body 757px) ⇒ .sc-sp 溢出 182px, 被 #scDetailBody
        的 overflow:clip 静默吞掉 —— 吃掉的正是 积分/生成行 与「AI 修改」。
        (同选择器给 height:100% 立即得到 757.31 = body 高, 行链随之绑定; 已用
         top/bottom:0 长写与 container-type 对照实验确认二者均无效。)
     ② 参考素材条两排网格 repeat(2,minmax(66px,auto)): 只有 1 张素材时第二排空占 66px。
     ③ 预览框按 53vh 取宽(修428), 在矮视口仍高于"扣掉固定件后的净高", 框底被 sc-vj 裁掉。
   修法(纯 CSS; 只增不删、删本块即完整回滚; 与默认(分镜)工作台共用 :has(.b-go), 一处两边一致):
     ① 高度链: .sc-sp 钉成 #scDetailBody 的 100% 高 ⇒ 第二行 minmax(0,1fr) 按**剩余高**解算,
        右栏从此有确定高度, 控制台与 AI 修改不再掉出裁剪区;
     ② 素材条第二排允许塌陷 minmax(0,auto)(2 张以上时行高照旧 ≥66, 只有 1 张时不再空占);
     ③ 预览框上限改为"扣净固定件后的净高": max-width=(100vh−645px)×16/9(A 式宽定高, 16:9
        永不变形; 645=面板边距/题头/信息区 204/控制台 107/AI 94/素材条 100/各间隙 实测和),
        下限 140px 宽; 只在 ≥661px 高生效, 更矮视口沿用现有媒体规则不改动。 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp{
  height:100%!important;
  max-height:100%!important;
}
@media (min-height:761px){
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-row,
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vrefs-row{
    grid-template-rows:repeat(2,minmax(0,auto))!important;   /* 第二排空置时塌陷为 0 */
  }
  /* 缩略图 52→44（421-① 用户口径「参考素材需要更小即可」再收一档），单张时素材条 168→108 */
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb,
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vref-thumb{
    width:44px!important;height:44px!important;flex:0 0 44px!important;
  }
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb img,
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-thumb video,
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vref-thumb img,
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vref-thumb video{
    width:44px!important;height:44px!important;
  }
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vref-card,
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go .sc-vref-card{
    min-height:58px!important;
  }
  /* 素材条上限 168→112：多张素材时行内滚动（417 既有设计），把省下的高度让给播放器，
     保证 2 张以上素材时预览框同样整框可见（含框底「找回成片」）。 */
  #storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs,
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
    max-height:min(15vh,112px)!important;
  }
}
@media (min-height:661px){
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe{
    max-width:min(100%, max(140px, calc((100vh - 690px) * 16 / 9)))!important;
  }
}
/* ──【修429】结束 ── */

/* ══【修431·用户要求】分镜页「返回上一步」回中 ══════════════════════════════
   用户原话：「位置不对，应该都在中间位置吧」。422-② 当年把它挪到左上躲页头标题，
   但左上又压住了左栏品牌小字，且与其它页的居中返回键不一致。
   实测（CDP · 1512/1400/1399/1280/1600/1920 六档）：页头标题块 #sbChatKicker/
   #sbChatTitle 固定占 x468→618、y12→54；居中按钮横带 = 视口中心±63。
     · ≥1400 档：1512→693..819、1600→737..863、1920→897..1023 —— 与标题块零交叠；
     · 1280 档：横带 577..703 与标题块 468..618 相交 41px（会压"分镜提示词·逐镜生成工作台"）。
   ⇒ 视口 ≥1400 时与 .lcnav 其它返回键一样「视口居中」；<1400 维持左上贴边（422-② 原样）。
   hover 同步带 translateX(-50%)，防止悬停时 transform 被覆盖而横向跳位。删本块即回滚。 */
@media (min-width:1400px){
  #sbBack{left:50%!important;transform:translateX(-50%)!important}
  #sbBack:hover{transform:translateX(-50%) translateY(-2px)!important}
}

/* ══【修432·用户要求】① AI 修改搬到左栏「分镜提示词」下面 ② 底部整行「历史生成视频」横条
      ③ 预览区「生成中」进度条瘦身 ══════════════════════════════════════════════
   用户原话：「红色区域【AI修改】移动至蓝色区域【分镜提示词下面】，增设绿色区域【下端横向】
   是历史生成的视频区域」「绿色框中的生成进度条很难看，请设计为一个细一些的好看的进度条」。
   实现＝文末 修432 脚本（DOM 搬运）+ 本块样式；只作用于含 .b-go 的两份工作台（分镜/视频）。
   删本块 + 删 修432 脚本块即完整回滚。 */

/* ① AI 修改：搬进左栏后的规格（与原来在右栏时一致，不缩不胀） */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-sp-l>.sc-aibox{
  flex:0 0 auto!important;min-height:0!important;max-height:none!important;
  overflow-y:auto!important;overflow-x:hidden!important;
  margin-top:2px!important;padding:6px 9px!important;box-sizing:border-box!important;
}

/* ② 底部整行「历史生成视频」横条：常驻；有历史时显示缩略图，没有时显示一句说明 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go)>.sc-sp>.sc-histbar{
  grid-column:1/-1!important;
  display:flex!important;align-items:center!important;gap:10px!important;
  padding:5px 10px!important;min-height:0!important;
  border:1px solid rgba(190,210,235,.12)!important;border-radius:11px!important;
  background:linear-gradient(145deg,rgba(255,255,255,.04),rgba(255,255,255,.015))!important;
  overflow:hidden!important;box-sizing:border-box!important;
}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-hb-l{
  flex:0 0 auto!important;display:flex!important;flex-direction:column!important;gap:1px!important;
  font-size:10.5px!important;color:#cbd5e0!important;letter-spacing:.02em!important;line-height:1.3!important;
}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-hb-l i{font-style:normal!important;font-size:9px!important;color:#71808f!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-hb-slot{
  flex:1 1 auto!important;min-width:0!important;display:flex!important;align-items:center!important;
  gap:6px!important;overflow-x:auto!important;overflow-y:hidden!important;padding:1px!important;
}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-hb-empty{font-size:10.5px!important;color:#5f7286!important;letter-spacing:.04em!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-histbar:has(.sc-vjhist) .sc-hb-empty{display:none!important}
/* 搬进横条的历史版本条：单行横排、缩略图 96×54（原来的 58×33 太小） */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-histbar .sc-vjhist{
  display:flex!important;flex-direction:row!important;align-items:center!important;
  margin:0!important;gap:0!important;min-width:0!important;max-width:100%!important;
}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-histbar .sc-vjhist-l{display:none!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-histbar .sc-vjhist-row{
  display:flex!important;flex-wrap:nowrap!important;gap:6px!important;align-items:center!important;
  max-height:none!important;overflow-x:auto!important;overflow-y:hidden!important;
}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-histbar .sc-vjhist-th{
  width:96px!important;height:54px!important;border-radius:8px!important;flex:0 0 auto!important;
}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-histbar .sc-vjhist-v{width:100%!important;height:100%!important;object-fit:cover!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-histbar .sc-vjhist-p{
  width:14px!important;height:14px!important;font-size:8px!important;line-height:13px!important;right:3px!important;bottom:3px!important}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-histbar .sc-vjhist-n{font-size:9px!important;line-height:12px!important;left:3px!important;top:2px!important}

/* ③ 「生成中」进度条：细(bug:原 .sc-vjbar 是 flex:1，在竖排里被拉成一整块黑疙瘩)、圆角、柔和发光 */
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vjframe .sc-vjbar{
  flex:0 0 auto!important;
  display:block!important;
  width:min(56%,320px)!important;
  height:4px!important;min-width:120px!important;
  margin:12px auto 2px!important;
  border-radius:999px!important;
  background:rgba(154,255,209,.13)!important;
  box-shadow:none!important;
  overflow:hidden!important;
}
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .sc-vjframe .sc-vjbar>i{
  display:block!important;height:100%!important;min-width:4px!important;
  border-radius:999px!important;
  background:linear-gradient(90deg,#4fd6a4,#9affd1)!important;
  box-shadow:0 0 10px rgba(91,232,185,.45)!important;
  transition:width .6s cubic-bezier(.22,.68,.18,1)!important;
}

/* ══【修436·用户要求①】工作台右侧红框「参考素材互叠 / 找回成片压字」修复（只增不删；删本块即回滚）════
   病①：修429 把素材条上限压到 112px，而行高 minmax(0,auto)（可塌到 31px），
       卡片实高 58px 不缩 → 第二排卡片往上压住第一排、并越过条底压到预览框（用户截图红框）。
   修法：条高按"标题+两排"给足（168px 上限）；两排都有卡时行高钉 58px（杜绝压缩互叠）；
       更矮视口宁可条内滚动也不叠。单张时第二排照旧自动塌陷（不占位）。
   病②：「找回成片」按钮 absolute bottom:10px 压住占位文案第 3 行 —— 占位块底部留 44px 让位。 */
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs{
  max-height:min(22vh,168px)!important;
  overflow-y:auto!important;
}
#storyCanvasMask #scDetail .sc-sp-box.b-go .sc-vrefs-row:has(.sc-vref-card:nth-child(2)),
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vrefs-row:has(.sc-vref-card:nth-child(2)){
  grid-template-rows:repeat(2,minmax(58px,auto))!important;
}
#storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vj>.sc-vjframe>.sc-vjph,
#storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe>.sc-vjph{
  padding:0 14px 44px!important;
}
/* 矮视口（≤900px 高）占位文字再收一档：字号 10 / 行高 1.45 / 底部让位 46 —— 短窗下三行文案与「找回成片」互不相压 */
@media (max-height:900px){
  #storyCanvasMask #scDetail .sc-sp-box.b-go>.sc-vj>.sc-vjframe>.sc-vjph,
  #storyCanvasMask #scDetail #scDetailBody:has(.b-go) .b-go>.sc-vj>.sc-vjframe>.sc-vjph{
    font-size:10px!important;line-height:1.45!important;padding:0 12px 46px!important;justify-content:flex-end!important;
  }
}
/* ──【修436·用户要求③】成片输出：画布视频节点（已出片）悬停 → 画面右侧出现 ＋
   拖到别的视频节点 = 把这条成片作为"参考素材"连过去（参考条出 🎬 卡；工作台里不显示该 ＋）。── */
#storyCanvasMask .sc-node .sc-vjframe>.sc-plus.sc-vplus{
  right:6px!important;top:50%!important;margin-top:-13px!important;z-index:6!important;
}
#scDetailBody .sc-plus.sc-vplus{display:none!important}
#storyCanvasMask .sc-vref-thumb video{width:100%;height:100%;object-fit:cover;display:block}
