:root{--bg:#0f1115;--card:#181b22;--line:#272b34;--fg:#e8eaed;--mut:#9aa0aa;--acc:#ff4d6d;--ok:#3ddc84}
*{box-sizing:border-box}
body{margin:0;font:15px/1.5 -apple-system,"PingFang SC",system-ui,sans-serif;background:var(--bg);color:var(--fg)}
a{color:inherit}
.topbar{display:flex;align-items:center;gap:16px;padding:12px 20px;border-bottom:1px solid var(--line);background:var(--card)}
/* 二级菜单(纯 CSS hover 下拉,无 JS):
   - .nav-group 是父容器,定位锚点
   - .nav-sub 绝对定位下沉到父按钮下方,默认隐藏
   - hover/focus-within 时显示。focus-within 让键盘 tab 也能弹出 */
.nav-group{position:relative}
.nav-group-head{cursor:pointer}
.nav-sub{position:absolute;top:100%;left:0;min-width:180px;background:var(--card);border:1px solid var(--line);border-radius:8px;padding:6px;display:none;flex-direction:column;gap:2px;z-index:100;box-shadow:0 6px 24px rgba(0,0,0,.45);margin-top:8px}
/* 透明"桥":填补父按钮底部到下拉之间的 8px 间隙,让鼠标穿过时仍算 hover 在
   .nav-sub 自己的 bounding box 内,下拉不会因鼠标进入"无人区"而被收起。
   原 bug:用户从父按钮往下滑过 8px margin 时,父和子都失 hover,下拉消失 → 永远点不到子项。 */
.nav-sub::before{content:"";position:absolute;top:-8px;left:0;right:0;height:8px}
.nav-group:hover .nav-sub,
.nav-group:focus-within .nav-sub{display:flex}
.nav-sub a{padding:8px 12px;color:var(--fg);text-decoration:none;border-radius:5px;font-size:13px;white-space:nowrap}
.nav-sub a:hover{background:#1d2230;color:var(--acc)}
/* 子菜单内分组小标题(如"— 兼职 —")—— 不可点,小字+暗色,跟链接区分 */
.nav-sub-sep{padding:6px 12px 2px;font-size:11px;color:var(--mut);border-top:1px solid var(--line);margin-top:4px}
/* 父按钮在下拉打开时高亮 */
.nav-group:hover>.nav-group-head,
.nav-group:focus-within>.nav-group-head{color:var(--acc);background:#1d2230;border-radius:5px}
.brand{font-weight:700;text-decoration:none}
.phase{color:var(--mut);font-size:13px}
.userbar{margin-left:auto;display:flex;align-items:center;gap:10px;font-size:13px}
.userbar .uname{color:var(--mut)}
.ubadge{padding:3px 9px;border-radius:999px;font-size:11px;font-weight:600;border:1px solid;display:inline-flex;align-items:center;gap:3px;white-space:nowrap}
.ubadge.admin{background:#241d12;border-color:#ffb020;color:#ffd089}
.ubadge.shooter{background:#10131a;border-color:#36a3ff;color:#9bd0ff}
.logoutf{margin:0}
.logoutf button{padding:5px 12px;font-size:12px;background:transparent;border:1px solid var(--line);color:var(--mut);border-radius:6px;cursor:pointer}
.logoutf button:hover{color:var(--fg);border-color:var(--mut)}
/* 登录/setup 页面 */
.loginform{display:flex;flex-direction:column;gap:14px;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:18px;margin-top:14px}
.loginform label{display:block;color:var(--mut);font-size:13px}
.loginform input{width:100%;margin-top:4px;padding:10px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:8px;font:inherit}
.loginform button{padding:11px;border-radius:8px}
.errmsg{color:#ff5470;font-size:13px;margin:0}
/* 任务卡片"完成人"标签 */
.card .byline{color:var(--mut);font-size:11px;background:#1a1d24;border:1px solid var(--line);border-radius:6px;padding:3px 8px;align-self:flex-start;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card .byline.good{color:var(--ok);background:#10221a;border-color:#1d4d34}
.card .byline.reject{color:#ff9aab;background:#2a1a1f;border-color:#5a2230}
.m-task .m-by{display:block;font-size:11px;color:var(--mut);margin-top:2px}
.m-task .m-by.good{color:var(--ok)}
/* 审计页 + 用户管理表格 */
.auditlist,.userlist{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-top:14px}
.auditlist th,.userlist th{text-align:left;font-size:12px;color:var(--mut);padding:8px 10px;border-bottom:1px solid var(--line)}
.auditlist td,.userlist td{padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
.auditlist tr:last-child td,.userlist tr:last-child td{border-bottom:none}
.auditlist .act{padding:1px 7px;border-radius:6px;background:#10131a;color:var(--fg);font-size:12px}
.auditlist .act.render_ok{color:var(--ok);background:#10221a}
.auditlist .act.render_fail{color:#ff5470;background:#2a1a1f}
.auditlist .act.footage_upload{color:#9bd0ff;background:#10202a}
.auditlist .act.ai_rewrite{color:#ffd089;background:#241d12}
.auditlist .meta .kv{display:inline-block;margin-right:8px;font-size:12px;color:var(--mut)}
/* 矩阵号设备管理 */
.pair-codebox{margin-top:14px;padding:14px;background:#10131a;border:1px solid var(--acc);border-radius:8px}
.pair-codebox .pair-code{font-family:'Menlo','Consolas',monospace;font-size:36px;font-weight:700;letter-spacing:6px;color:var(--acc);user-select:all;text-align:center;display:block;margin:8px 0}
/* 双路径:左 Android 看码 / 右 iPhone 复制一键链接 */
.pair-paths{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:10px}
@media (max-width:720px){.pair-paths{grid-template-columns:1fr}}
.pair-path{padding:12px;background:#181b22;border:1px solid var(--line);border-radius:6px;display:flex;flex-direction:column;align-items:center;gap:8px}
.pair-path-head{font-size:12px;color:var(--mut);text-align:center}
.pair-link{font-family:ui-monospace,monospace;font-size:12px;color:var(--fg);background:#0d1018;border:1px solid var(--line);border-radius:4px;padding:6px 8px;word-break:break-all;text-align:center;user-select:all;width:100%;min-height:34px;display:flex;align-items:center;justify-content:center}
.pair-codebox .rowbtn{padding:6px 14px;background:var(--acc);border:1px solid var(--acc);color:#fff;font-size:12px}
.pair-codebox .rowbtn:hover{filter:brightness(1.1)}
/* 设备类型徽章:iPhone 银灰 / Android 绿 */
.ph-kind{display:inline-block;padding:1px 6px;border-radius:3px;font-size:11px}
.ph-kind.ios{background:#1a1a26;border:1px solid #3a3a55;color:#c5c5e0}
.ph-kind.android{background:#102818;border:1px solid #2d5d3e;color:#7be0a8}
.phonelist .ph-name{width:200px;padding:5px 8px;background:#181b22;border:1px solid var(--line);color:var(--fg);border-radius:5px;font:inherit;font-size:13px}
.phonelist .ph-meta{font-size:11px;color:var(--mut);margin-top:4px;display:flex;flex-direction:column;gap:1px}
.phonelist .ph-on{color:var(--ok);font-weight:600;font-size:13px}
.phonelist .ph-off{color:var(--mut);font-size:13px}
.phonelist .ph-plat,.phonelist .ph-caps{display:flex;flex-direction:column;gap:4px;font-size:12px}
.phonelist .ph-platck{color:var(--mut);cursor:pointer;font-size:12px;display:flex;align-items:center;gap:4px}
.phonelist .ph-platck input{margin:0}
.phonelist .ph-capf{color:var(--mut);font-size:12px;display:flex;align-items:center;gap:6px}
.phonelist .ph-capf input{width:54px;padding:3px 6px;background:#181b22;border:1px solid var(--line);color:var(--fg);border-radius:5px;font:inherit;font-size:12px}
.phonelist .ph-st{font-size:11px;color:var(--mut);display:block;margin-top:4px}

/* 宠物档案管理 */
.petfilter{margin-bottom:18px}
.petform{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;max-width:none}
.petform label{font-size:13px;color:var(--mut)}
.petform input,.petform select,.petform textarea{padding:6px 9px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px;width:100%;box-sizing:border-box}
.petform textarea{resize:vertical}
.petform .setbox-save{grid-column:1/-1}
.petlist td{vertical-align:top}
.petlist input,.petlist select,.petlist textarea{padding:5px 8px;background:#181b22;border:1px solid var(--line);color:var(--fg);border-radius:5px;font:inherit;font-size:12px;box-sizing:border-box}
.petlist .pet-status,.petlist .pet-species,.petlist .pet-gender{width:auto;min-width:80px}
.petlist .pet-sell,.petlist .pet-notes{width:200px;margin-top:4px;display:block;resize:vertical}

/* 编号 lookup（admin /templates 内联表单 + /m/new）*/
.pet-idfield{display:block;margin:8px 0}
.pet-id-st{display:block;margin-top:4px}
.pet-snap{background:#10221a;border:1px solid #1d4d34;border-radius:8px;padding:10px 14px;margin:8px 0}
.pet-snap-head{margin:0 0 4px;color:var(--ok);font-size:13px}
.pet-snap-text{margin:0 0 8px;color:#cdebd9;font-size:13px}
.pet-snap-clear,.m-clearbtn{padding:4px 10px;background:transparent;border:1px solid var(--line);color:var(--mut);border-radius:5px;cursor:pointer;font-size:12px}
.pet-manual{margin-top:6px}
.pet-manual>summary{cursor:pointer;color:var(--mut);font-size:12px;padding:4px 0}

/* 手机端 /m/new 简化版 */
.m-petidlbl input{font-size:16px;font-family:'Menlo','Consolas',monospace;letter-spacing:2px}
.m-petsnap{background:#10221a;border:1px solid #1d4d34;border-radius:8px;padding:12px 14px;margin:10px 0}
.m-snaphead{margin:0 0 4px;color:var(--ok);font-size:14px}
.m-snaptxt{margin:0 0 10px;color:#cdebd9;font-size:14px}
.m-petmanual{margin:10px 0;border:1px solid var(--line);border-radius:8px;padding:0 14px}
.m-petmanual>summary{cursor:pointer;color:var(--mut);font-size:13px;padding:10px 0}
.m-petmanual[open]>summary{color:var(--fg);border-bottom:1px solid var(--line)}
.m-hint{color:var(--mut);font-size:12px}
.m-newform input:disabled,.m-newform select:disabled,.m-newform textarea:disabled{opacity:.5;cursor:not-allowed;background:#10131a}

/* 发布排程：产线页 #pubpanel + 全店看板 #publish-board */
.pubpanel{margin:18px 0;border:1px solid var(--line);border-radius:8px;background:#161922;padding:0 14px}
.pubpanel>summary{padding:12px 0;font-weight:600;cursor:pointer;list-style:none}
.pubpanel>summary::before{content:"▶ ";display:inline-block;transition:transform .15s}
.pubpanel[open]>summary::before{transform:rotate(90deg)}
.pubbody{padding-bottom:14px}
.pubbody .warn{color:#ffb347}
.pubform{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-top:10px}
.pubform label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--mut)}
.pubform select,.pubform input,.pubform textarea{padding:6px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px}
.pubform textarea{font-size:13px;resize:vertical;min-height:42px}
.pubform .pubtitle{grid-column:1/-1;position:relative}
.pubform .pubtitle button{position:absolute;right:6px;top:24px;padding:4px 10px;font-size:12px;background:#1d2230;border:1px solid var(--acc);color:var(--acc);border-radius:6px;cursor:pointer}
.pubform .pubtitle button:disabled{opacity:.5;cursor:not-allowed}
.pub-cands{grid-column:1/-1;display:flex;flex-direction:column;gap:8px;margin-top:6px}
.pub-cand{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;background:#10131a;border:1px solid var(--line);border-radius:6px;padding:8px 10px}
.pub-cand-t{font-weight:600;font-size:14px;color:var(--fg)}
.pub-cand-tags{font-size:12px;color:var(--acc);grid-column:1;margin-top:3px}
.pub-cand button{padding:6px 14px;background:#1d2230;border:1px solid var(--acc);color:var(--acc);border-radius:6px;cursor:pointer;font-size:12px}
.pubact{grid-column:1/-1;display:flex;align-items:center;gap:12px;margin-top:6px}
.pubjobs{width:100%;border-collapse:collapse;font-size:13px;margin-top:8px}
.pubjobs th,.pubjobs td{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.pubjobs th{color:var(--mut);font-weight:600;font-size:12px}
.pubjobs .nowrap{white-space:nowrap}
.pubjobs .pb-title{max-width:380px;word-break:break-word}
.pubjobs .useract{justify-content:flex-end}
/* 平台徽章 */
.pb-plat{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600}
.pb-plat-xhs{background:#3a1620;color:#ffb6c7;border:1px solid #6b2031}
.pb-plat-douyin{background:#161a2f;color:#9eb7ff;border:1px solid #2a3258}
/* 状态徽章 */
.pb-st{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600}
.pb-st-scheduled{background:#1a2230;color:#9eb7ff;border:1px solid #2a3258}
.pb-st-downloaded{background:#10221a;color:#7dd3a8;border:1px solid #1d4d34}
.pb-st-notified{background:#1a2230;color:#ffd279;border:1px solid #5a4423}
.pb-st-published{background:#10221a;color:var(--ok);border:1px solid #1d4d34}
.pb-st-failed{background:#2a1a1f;color:#ff9aab;border:1px solid #5a2230}
.pb-st-cancelled{background:#1a1a1a;color:var(--mut);border:1px solid var(--line)}
/* 通道 chip:区分矩阵机自动发 vs 派给兼职 */
.ch-chip{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600;white-space:nowrap}
.ch-chip.ch-matrix{background:#161a2f;color:#9eb7ff;border:1px solid #2a3258}
.ch-chip.ch-partner{background:#15241f;color:#5cc8a8;border:1px solid #2f6b56}
/* 派给兼职的状态徽章(蓝绿色系,跟矩阵 PubJob 的灰蓝/绿区分开)*/
.dp-st{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600;white-space:nowrap}
.dp-st-pending{background:#1a1d24;color:var(--mut);border:1px solid var(--line)}
.dp-st-published{background:#241c0a;color:#e6c47a;border:1px solid #5a4520}
.dp-st-verified{background:#15241f;color:#5cc8a8;border:1px solid #2f6b56}
.dp-st-rejected{background:#2a1418;color:#ff9aab;border:1px solid #5a2230}
.dp-st-expired{background:#1a1d24;color:var(--mut);border:1px solid var(--line)}
.dp-rej{color:#ff9aab}
/* 看板 */
.pbtable{width:100%;border-collapse:collapse;font-size:13px;margin-top:14px}
.pbtable th,.pbtable td{padding:9px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.pbtable th{color:var(--mut);font-weight:600;font-size:12px}
.pbtable .pb-title{max-width:380px;word-break:break-word}
.pbtable .nowrap{white-space:nowrap}
.pb-acks ul{margin:6px 0 0 14px;padding:0;font-size:11px;color:var(--mut)}
.pb-acks li{margin:1px 0}
.board-shortcuts{background:#161922;border:1px solid var(--line);border-radius:10px;padding:14px 18px;margin:14px 0}
.board-shortcuts p{margin:4px 0}
.board-shortcuts .ghost{padding:6px 12px;margin-right:8px;font-size:13px}

/* 封面文案面板（任务详情页成片旁）*/
.coverpanel{margin:14px 0;border:1px solid var(--line);border-radius:10px;background:#161922;padding:0 14px}
.coverpanel>summary{padding:12px 0;font-weight:600;cursor:pointer;list-style:none;display:flex;align-items:center;gap:10px}
.coverpanel>summary::before{content:"▶ ";display:inline-block;transition:transform .15s}
.coverpanel[open]>summary::before{transform:rotate(90deg)}
.coverpanel .cover-meta{font-size:11px;color:var(--mut);font-weight:400;background:#10131a;border:1px solid var(--line);padding:2px 8px;border-radius:5px}
.cover-body{display:grid;grid-template-columns:160px 1fr;gap:14px;padding-bottom:14px}
.cover-preview{width:100%;border:1px solid var(--line);border-radius:8px;background:#000;aspect-ratio:3/4;object-fit:cover}
.cover-form{display:flex;flex-direction:column;gap:6px;min-width:0}
.cover-form label{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--mut);min-width:0}
.cover-form input{padding:8px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:14px;width:100%;box-sizing:border-box;min-width:0}
.cover-form input:focus{outline:none;border-color:var(--acc)}
.cov-style-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;min-width:0}
.cov-style-row label{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--mut);min-width:0}
.cov-style-row select{padding:7px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px;width:100%;min-width:0;max-width:100%;box-sizing:border-box;text-overflow:ellipsis}
.cov-frame-row{margin-top:6px;display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--mut)}
.cov-frame-row input{padding:6px 9px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px;width:160px}
.cover-act{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px}
.cover-act .primary{padding:8px 14px;font-size:13px}
.cover-act .ghost{padding:8px 12px;font-size:13px}
/* 前 3 秒开场钩面板:跟封面共生,视觉上稍微区分让用户知道是另一脚钩 */
.opener-pack{margin:8px 0 4px;border:1px solid #2d3850;border-radius:8px;padding:8px 10px;background:#10131a}
.opener-pack legend{font-size:12px;color:#9bd0ff;padding:0 6px;display:flex;align-items:center;gap:6px}
.opener-pack input{width:100%;padding:8px 10px;background:#0c0f15;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px;box-sizing:border-box;margin-bottom:6px}
.opener-pack input:focus{outline:none;border-color:#9bd0ff}
.opener-act{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.opener-act .ghost{padding:6px 11px;font-size:12px}
.opener-cands{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.opener-cand{background:#0c0f15;border:1px solid var(--line);border-radius:6px;padding:8px 10px;display:flex;flex-direction:column;gap:4px}
.opener-cand-head{display:flex;align-items:center;gap:8px}
.opener-cand-tag{background:#2d3850;color:#9bd0ff;padding:1px 7px;border-radius:4px;font-size:11px;font-weight:600;font-family:ui-monospace,monospace}
.opener-cand-line{font-size:14px;font-weight:500;flex:1}
.opener-cand-why{font-size:11px;color:var(--mut)}
.opener-cand .rowbtn{align-self:flex-end;padding:4px 10px;font-size:11px}
/* 封面主标候选 — 跟 opener-cand 同源样式,但 hook tag 用橙色区分 */
.cover-titles-pack{border:1px dashed #4a3d2a;border-radius:8px;padding:10px 12px;margin:10px 0}
.cover-titles-pack > legend{font-size:12px;color:#e0b46a;padding:0 8px}
.cover-titles-pack > input{width:100%;padding:7px 10px;background:#181b22;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px;margin-bottom:6px;box-sizing:border-box}
.cover-titles-pack > input:focus{border-color:#e0b46a;outline:none}
.cover-titles-act{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.cover-cands{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.cov-cand{background:#0c0f15;border:1px solid var(--line);border-radius:6px;padding:8px 10px;display:flex;flex-direction:column;gap:4px}
.cov-cand-head{display:flex;align-items:center;gap:8px}
.cov-cand-tag{background:#3d2a1a;color:#ffb56b;padding:1px 7px;border-radius:4px;font-size:11px;font-weight:600;font-family:ui-monospace,monospace}
.cov-cand-title{font-size:14px;font-weight:600;flex:1}
.cov-cand-why{font-size:11px;color:var(--mut)}
.cov-cand .rowbtn{align-self:flex-end;padding:4px 10px;font-size:11px}
@media (max-width: 640px){.cover-body{grid-template-columns:1fr}.cover-preview{max-width:200px}}

/* 发布中心：任务卡片网格 */
.board-h2{font-size:18px;margin:20px 0 6px}
/* 卡片筛选条（与 .taskfilter 复用基础样式，下面只覆盖 grid 列）*/
.cardfilter{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));margin-bottom:14px}
/* 创建时间自定义日期段 */
.cardfilter .daterange{display:flex;align-items:center;gap:6px;margin-top:4px}
.cardfilter .daterange input[type=date]{flex:1;min-width:0;padding:6px 8px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:12px;color-scheme:dark}
.cardfilter .dr-sep{color:var(--mut);font-size:12px;flex:none}
.cardfilter .dr-hint{color:var(--mut);font-size:11px;margin-top:3px}
.taskcards{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px;margin:14px 0 24px}
.taskcard{background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column;transition:border-color .15s}
.taskcard:hover{border-color:var(--acc)}
.taskcard.done{opacity:.6}
.taskcard-preview{position:relative;display:block;background:#000;aspect-ratio:16/9;overflow:hidden;text-decoration:none}
.taskcard-preview video{width:100%;height:100%;object-fit:contain;background:#000;display:block}
.taskcard-overlay{position:absolute;right:6px;top:6px;padding:3px 8px;font-size:11px;background:rgba(0,0,0,.55);border:1px solid rgba(255,255,255,.2);color:#fff;border-radius:5px;backdrop-filter:blur(4px)}
.taskcard-body{padding:12px 14px;display:flex;flex-direction:column;gap:8px;flex:1}
.taskcard-title{font-weight:600;font-size:14px;color:var(--fg);line-height:1.3}
.taskcard-pet{font-size:12px;color:#ffd089;background:#241d12;border:1px solid #3a2d18;border-radius:5px;padding:3px 7px;align-self:flex-start;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.taskcard-reject{font-size:12px;color:#ff9aab;background:#2a1a1f;border:1px solid #5a2230;border-radius:5px;padding:3px 7px;align-self:flex-start;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.taskcard-plats{display:flex;flex-direction:column;gap:6px;margin-top:2px}
.tc-plat{border:1px solid var(--line);border-radius:6px;padding:6px 8px;background:#10131a}
.tc-plat-done{border-color:#1d4d34;background:#10221a}
.tc-plat-pending{border-color:#5a4423;background:#1a1812}
.tc-plat-head{display:flex;align-items:center;justify-content:space-between;font-size:11px}
.tc-plat-st{color:var(--mut);font-size:11px}
.tc-plat-done .tc-plat-st{color:var(--ok)}
.tc-plat-pending .tc-plat-st{color:#ffd279}
.tc-plat-jobs{list-style:none;padding:0;margin:5px 0 0;display:flex;flex-direction:column;gap:3px}
.tc-job{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--mut)}
.tc-job-time{color:#9eb7ff;font-size:10px}
.tc-job-phone{color:var(--fg);font-size:11px}
.tc-job.hint{color:var(--mut);font-size:10px;font-style:italic}

/* 派给兼职(dispatches)在卡片平台行下方,跟 .tc-plat-jobs 视觉对齐但颜色区分 */
.tc-plat-disp{list-style:none;padding:0;margin:3px 0 0;display:flex;flex-direction:column;gap:3px}
.tc-disp{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--mut)}
.tc-disp-who{color:#a8e3cc;font-size:11px;flex:1}
.tc-disp.hint{font-size:10px;font-style:italic}
/* dispatch 状态小徽章(in-card,跟核验页大徽章风格保持一致) */
.dp-st-mini{padding:1px 6px;border-radius:3px;font-size:10px;font-weight:600;white-space:nowrap}
.dp-st-mini.dp-st-pending{background:#1a1d24;color:var(--mut);border:1px solid var(--line)}
.dp-st-mini.dp-st-published{background:#241c0a;color:#e6c47a;border:1px solid #5a4520}
.dp-st-mini.dp-st-verified{background:#15241f;color:#5cc8a8;border:1px solid #2f6b56}
.dp-st-mini.dp-st-rejected{background:#2a1418;color:#ff9aab;border:1px solid #5a2230}
.taskcard-act{margin-top:auto;display:flex;gap:8px}
.taskcard-pub{flex:1;padding:8px 12px;font-size:13px}

/* 发布中心：带宽看板 */
.pb-bw{display:flex;align-items:baseline;gap:14px;background:#10221a;border:1px solid #1d4d34;border-radius:8px;padding:10px 14px;margin:14px 0;font-size:13px;color:#cdebd9}
.pb-bw code{background:#1a2230;padding:1px 5px;border-radius:4px;font-size:11px}
.pb-stat.pb-st-downloading{border-color:#3a2d18}
.pb-stat.pb-st-downloading .n{color:#ffb347}
.pb-st.pb-st-downloading{background:#2a1f12;color:#ffb347;border:1px solid #3a2d18}
.ack-state.ack-downloading{background:#2a1f12;color:#ffb347;border-color:#3a2d18}
/* 发布中心：状态卡（可点击筛选）*/
.pb-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:10px;margin:14px 0 20px}
.pb-stat[data-status]{cursor:pointer;transition:transform .12s,box-shadow .12s,border-color .12s}
.pb-stat[data-status]:hover{transform:translateY(-2px);border-color:var(--acc)}
.pb-stat[data-status].selected{box-shadow:0 0 0 2px var(--acc) inset;background:#1c1f29}
/* 手机名 inline 筛选链接 */
.pb-phone-link{display:inline-block;color:var(--fg);text-decoration:none;padding:2px 5px;margin:-2px -5px;border-radius:5px;line-height:1.35;transition:background .12s}
.pb-phone-link:hover{background:rgba(255,61,126,.10);text-decoration:none}
.pb-phone-link.selected{background:rgba(255,61,126,.18);outline:1px solid var(--acc)}
.pb-phone-link code{color:var(--mut)}
.pb-phone-link.selected code{color:#ffd089}
/* 平台徽章 inline 筛选链接（共用 .pb-plat 颜色，叠加交互态）*/
.pb-plat-link{cursor:pointer;text-decoration:none;transition:transform .12s,filter .12s,box-shadow .12s}
.pb-plat-link:hover{transform:translateY(-1px);filter:brightness(1.15);text-decoration:none}
.pb-plat-link.selected{box-shadow:0 0 0 2px var(--acc);filter:brightness(1.2)}
.pb-stat{padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:#161922;display:flex;flex-direction:column;gap:2px;align-items:flex-start}
.pb-stat .n{font-size:22px;font-weight:700}
.pb-stat span:last-child{font-size:12px;color:var(--mut)}
.pb-stat.pb-st-scheduled{border-color:#2a3258}
.pb-stat.pb-st-scheduled .n{color:#9eb7ff}
.pb-stat.pb-st-downloaded{border-color:#1d4d34}
.pb-stat.pb-st-downloaded .n{color:#7dd3a8}
.pb-stat.pb-st-notified{border-color:#5a4423}
.pb-stat.pb-st-notified .n{color:#ffd279}
.pb-stat.pb-st-published{border-color:#1d4d34}
.pb-stat.pb-st-published .n{color:#3ddc84}
.pb-stat.pb-st-failed{border-color:#5a2230}
.pb-stat.pb-st-failed .n{color:#ff6b7a}
.pb-stat.pb-st-cancelled{border-color:var(--line)}
.pb-stat.pb-st-cancelled .n{color:var(--mut)}

/* 批量排发布表单 —— 4 列紧凑 */
.pubform-grid4{display:grid;grid-template-columns:1.4fr 1fr 200px auto;gap:12px;margin:10px 0;align-items:start}
.pubform-grid4 label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--mut)}
.pubform-grid4 select,.pubform-grid4 input{padding:8px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px;width:100%;box-sizing:border-box}
/* 选视频后的预览盒子 —— 9:16 竖屏视频自然落入 max-height */
.preview-box{position:relative;margin-top:8px;background:#000;border:1px solid var(--line);border-radius:6px;display:flex;justify-content:center;align-items:center;max-height:280px;overflow:hidden}
.preview-box video{max-height:280px;max-width:100%;display:block;background:#000}
.preview-box .preview-open{position:absolute;right:6px;top:6px;padding:3px 8px;font-size:11px;background:rgba(0,0,0,.55);border:1px solid rgba(255,255,255,.2);color:#fff;border-radius:5px;text-decoration:none;backdrop-filter:blur(4px)}
.preview-box .preview-open:hover{background:rgba(0,0,0,.8)}
/* 平台勾选组：右侧 #batchPlatChecks */
.plat-checks{display:flex;flex-wrap:wrap;gap:8px 14px;padding:7px 0}
.plat-check{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--fg);cursor:pointer;text-transform:none;letter-spacing:0}
.plat-check input{transform:scale(1.15)}
.plat-check input:disabled + span{color:var(--mut)}
.plat-check .pc-cap{font-size:11px;color:var(--mut);margin-left:2px}

.batchplats{margin-top:8px;display:flex;flex-direction:column;gap:8px}

/* 每条发布记录单行：平台名 / 标题 / AI按钮 / 容量提示 */
.batchplat{display:grid;grid-template-columns:90px minmax(280px,1fr) 100px 130px;gap:10px 14px;align-items:center;border:1px solid var(--line);border-radius:8px;padding:12px 16px;background:#10131a}
.batchplat .bp-name{font-size:14px;font-weight:600;color:var(--fg)}
.batchplat .bp-title{padding:7px 10px;background:#181b22;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px;width:100%;box-sizing:border-box;resize:vertical;min-height:38px;line-height:1.4}
.batchplat .bp-genai{padding:7px 10px;font-size:12px;background:#1d2230;border:1px solid var(--acc);color:var(--acc);border-radius:6px;cursor:pointer;white-space:nowrap;align-self:center}
.batchplat .bp-genai:disabled{opacity:.5;cursor:not-allowed}
.batchplat .bp-cap{font-size:11px;color:var(--mut);text-align:right}

/* 状态文字 + 候选列表：占满整行宽，只在生成后显示 */
.batchplat .bp-st{grid-column:1/-1;font-size:11px;color:var(--mut);margin-top:2px}
.batchplat .bp-cands{grid-column:1/-1;display:flex;flex-direction:column;gap:6px;margin-top:6px;padding:8px;background:#161922;border-radius:6px}
.batch-act{display:flex;align-items:center;gap:14px;margin-top:14px}

/* 反馈列 */
.pb-feedback{font-size:12px;max-width:260px}
.pb-feedback code{display:block;color:var(--mut);font-size:11px;margin-bottom:2px}
.ack-state{display:inline-block;padding:1px 6px;border-radius:6px;font-size:11px;background:#1a1d24;color:var(--mut);border:1px solid var(--line)}
.ack-state.ack-published{background:#10221a;color:var(--ok);border-color:#1d4d34}
.ack-state.ack-failed{background:#2a1a1f;color:#ff9aab;border-color:#5a2230}
.ack-state.ack-downloaded{background:#10221a;color:#7dd3a8;border-color:#1d4d34}
.ack-state.ack-notified{background:#1a1d24;color:#ffd279;border-color:#5a4423}
.ack-note{margin-top:4px;color:var(--fg);background:#161922;border:1px solid var(--line);border-radius:5px;padding:5px 8px;font-size:11px;word-break:break-word}
.ack-history{margin-top:6px}
.ack-history summary{cursor:pointer;color:var(--mut);font-size:11px}
.ack-history ul{margin:4px 0 0 12px;padding:0;font-size:11px;color:var(--mut)}
.ack-history li{margin:1px 0}
/* 用户管理 */
.okmsg{color:var(--ok);background:#10221a;border:1px solid #1d4d34;padding:8px 12px;border-radius:8px;margin:10px 0}
.userlist .self{color:var(--acc);font-size:11px;margin-left:4px}
/* App 版本徽章(兼职列表的"App 版本/活跃"列) */
.app-ver{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600;white-space:nowrap}
.app-ver.cur{background:#15241f;color:#5cc8a8;border:1px solid #2f6b56}
.app-ver.old{background:#241c0a;color:#e6c47a;border:1px solid #5a4520}
.app-ver.none{background:#1a1d24;color:var(--mut);border:1px solid var(--line)}
.ver-cell{min-width:130px}
.userlist .metacol{color:var(--mut);font-size:12px;white-space:nowrap}
.userlist .inlrow{display:inline-flex;align-items:center;gap:6px;margin:0}
.userlist .inlrow select{padding:5px 8px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px;font:inherit;font-size:13px}
.userlist .rowbtn{padding:5px 11px;font-size:12px;background:#222732;border:1px solid var(--line);color:var(--fg);border-radius:6px;cursor:pointer}
.userlist .rowbtn:hover{border-color:var(--acc)}
.userlist .rowbtn.del{color:#ff9aab;border-color:#5a2230;background:#2a1a1f}
.userlist .rowbtn.del:hover{background:#3a1f28}
/* 模块权限勾选 */
.userlist .permcol{min-width:150px}
.permwrap{display:inline-block}
.permtog{cursor:pointer;font-size:12px;color:var(--fg);padding:5px 9px;border:1px solid var(--line);border-radius:6px;background:#222732;list-style:none}
.permtog::-webkit-details-marker{display:none}
.permcount{color:var(--mut)}
.permform{margin-top:8px;display:flex;flex-direction:column;gap:7px;padding:10px;border:1px solid var(--line);border-radius:8px;background:#10131a;min-width:200px}
.permitem{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--fg);cursor:pointer}
.permitem input[type=checkbox]{width:auto;margin:0;transform:scale(1.15)}
.permform .rowbtn{margin-top:4px;align-self:flex-start;background:var(--acc);border-color:var(--acc);color:#fff}
.useract{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.pwdwrap{display:inline-block}
.pwdtog{cursor:pointer;font-size:12px;color:var(--mut);padding:5px 9px;border:1px solid var(--line);border-radius:6px;background:#222732;list-style:none}
.pwdtog::-webkit-details-marker{display:none}
.pwdwrap[open] .pwdtog{color:var(--fg);border-color:var(--acc)}
.pwdform{display:flex;flex-direction:column;gap:6px;margin-top:8px;padding:10px;background:#10131a;border:1px solid var(--line);border-radius:8px;min-width:240px}
.pwdform input{padding:7px;border:1px solid var(--line);background:#181b22;color:var(--fg);border-radius:6px;font:inherit;font-size:13px}
.pwdform .rowbtn{align-self:flex-start}
/* 新建用户抽屉 */
.newuser{margin:14px 0;border:1px solid var(--line);border-radius:10px;background:var(--card)}
.newuser>summary{padding:12px 14px;cursor:pointer;font-weight:600;color:var(--acc);list-style:none}
.newuser>summary::-webkit-details-marker{display:none}
.newuser[open]>summary{border-bottom:1px solid var(--line)}
.userform{padding:14px;display:flex;flex-direction:column;gap:10px;max-width:380px}
.userform label{display:block;color:var(--mut);font-size:13px}
.userform input,.userform select{width:100%;margin-top:4px;padding:8px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px;font:inherit}
.userform button{align-self:flex-start;padding:9px 16px}
.wrap{max-width:1080px;margin:24px auto;padding:0 20px}
h1{font-size:22px;margin:0 0 16px}
h2{font-size:16px;margin:0 0 10px}
.hint{color:var(--mut);font-size:13px;margin:6px 0 14px}
.newproj{display:flex;gap:8px;margin:16px 0 24px}
.newproj input{flex:1;padding:10px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:8px}
button{cursor:pointer;border:1px solid var(--line);background:#222732;color:var(--fg);padding:9px 14px;border-radius:8px}
button.primary,.newproj button{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600}
button.ghost{background:transparent}
/* 首页 dashboard 概况卡 */
.dash-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;margin:18px 0 26px}
.dash-stat{display:flex;flex-direction:column;gap:6px;padding:18px;background:var(--card);border:1px solid var(--line);border-radius:12px;text-decoration:none;color:var(--fg);transition:border-color .15s}
.dash-stat:hover{border-color:var(--acc)}
.dash-num{font-size:34px;font-weight:700;color:var(--acc);line-height:1}
.dash-lbl{font-size:14px;color:var(--fg);font-weight:600}
.dash-sub{font-size:12px;color:var(--mut)}
.dash-section{margin:22px 0}
.dash-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px}
.dash-head h2{margin:0;font-size:18px}
/* 任务列表筛选条 */
.taskfilter{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px 14px;padding:14px 16px;margin:14px 0;background:var(--card);border:1px solid var(--line);border-radius:10px}
.taskfilter label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--mut)}
.taskfilter input,.taskfilter select{padding:6px 9px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px}
.taskfilter-q{grid-column:span 2}
.taskfilter-act{grid-column:1/-1;display:flex;align-items:center;gap:10px;margin-top:4px}
.taskfilter-act .ghost{padding:7px 13px;font-size:13px}
.cards{list-style:none;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.card{position:relative;background:var(--card);border:1px solid var(--line);border-radius:12px}
.card a{display:flex;flex-direction:column;gap:6px;padding:16px;text-decoration:none}
.card .meta{color:var(--mut);font-size:12px}
.card code{color:var(--mut);font-size:11px}
.card .del{position:absolute;top:8px;right:8px;padding:2px 8px;background:transparent;border:none;color:var(--mut)}
.card .petline{color:#ffd089;font-size:12px;background:#241d12;border:1px solid #3a2d18;border-radius:6px;padding:3px 8px;align-self:flex-start;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card .petline.warn{color:#ff9aab;background:#2a1a1f;border-color:#5a2230}
.cardact .petfill{color:#ffd089;background:#241d12;border:1px solid #3a2d18;padding:4px 10px;border-radius:6px;font-size:13px;font-weight:600}
.cardact .petfill:hover{border-color:#ffb020;color:#ffeac7}
/* 任务卡上的"分配给" 选择器 —— admin 给摄影师派活/认领老任务 */
.cardact .assignbox{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--mut);background:#10131a;border:1px solid var(--line);padding:5px 9px;border-radius:8px}
.cardact .assign-sel{padding:3px 6px;border:1px solid var(--line);background:#181b22;color:var(--fg);border-radius:5px;font:inherit;font-size:12px}
.cardact .assign-st{font-size:11px;min-width:0}
.empty{color:var(--mut)}
/* 任务卡上的「+ 建任务」可展开抽屉：因为新增了宠物档案 5 字段，单行行不通 */
.cardact{display:flex;flex-direction:column;gap:8px;padding:0 14px 14px}
.cardact .ghost{align-self:flex-start;color:var(--mut);text-decoration:none;font-size:13px}
.newtask{border:1px solid var(--line);border-radius:8px;background:#10131a}
.newtask>summary{list-style:none;padding:10px 12px;cursor:pointer;color:var(--acc);font-weight:600;font-size:14px}
.newtask>summary::-webkit-details-marker{display:none}
.newtask[open]>summary{border-bottom:1px solid var(--line)}
.newtask-form{padding:12px;display:flex;flex-direction:column;gap:10px}
.newtask-form label{display:block;color:var(--mut);font-size:13px}
.newtask-form sup{color:var(--acc);margin-left:2px}
.newtask-form input,.newtask-form select,.newtask-form textarea{width:100%;margin-top:4px;padding:8px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px;font:inherit}
.newtask-form textarea{resize:vertical;min-height:48px}
.newtask-form button{align-self:flex-start}
.pet2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
@media(max-width:480px){.pet2{grid-template-columns:1fr}}
.crumbs{display:flex;gap:14px;align-items:center;color:var(--mut);margin-bottom:18px}
.crumbs a{text-decoration:none}
.crumbs .ghost{margin-left:auto}
/* 兼职模块子导航——7 个并列页面共用 partial(crumbs partner-subnav)。
   active = 当前页,高亮 acc 色 + 加底线;其它链接保持次要色,hover 提亮 */
.crumbs.partner-subnav{flex-wrap:wrap;gap:8px 12px;padding:8px 14px;background:#171a21;border:1px solid var(--line);border-radius:8px;font-size:13px;margin-bottom:18px}
.crumbs.partner-subnav a{color:var(--mut);padding:4px 8px;border-radius:4px;white-space:nowrap}
.crumbs.partner-subnav a:hover{color:var(--fg);background:#1a1d24}
.crumbs.partner-subnav a.active{color:var(--acc);background:#15241f;border:1px solid #2f6b56;font-weight:600}
.grid{display:grid;grid-template-columns:1fr 300px;gap:20px}
.panel{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px}
.side label{display:block;margin:0 0 12px;font-size:13px;color:var(--mut)}
.side input,.side select{width:100%;margin-top:4px;padding:8px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px}
table.shots{width:100%;border-collapse:collapse}
table.shots th{text-align:left;font-size:12px;color:var(--mut);padding:6px 8px;border-bottom:1px solid var(--line)}
table.shots td{padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:top}
table.shots textarea{width:100%;min-height:42px;resize:vertical;overflow:hidden;line-height:1.5;padding:7px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px;font:inherit}
table.shots textarea.r-prompt{min-height:34px;margin-top:6px;color:#c7d3e1;background:#0d1118;font-size:13px}
table.shots input{width:70px;padding:7px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px}
.est{color:var(--mut);font-size:12px;white-space:nowrap}
.rowdel{background:transparent;border:none;color:var(--mut)}
.move{background:transparent;border:none;color:var(--mut);padding:2px 4px}
.add{margin-top:12px}
.savebar{position:sticky;bottom:0;display:flex;gap:14px;align-items:center;margin-top:18px;padding:14px 0;flex-wrap:wrap}
/* 主题/口令输入:跟按钮在同一行 — 输入框占主要宽度,提示语在上方 */
.rewrite-theme-row{display:flex;flex-direction:column;gap:3px;flex:1 1 280px;min-width:240px}
.rewrite-theme-row > .hint{font-size:11px;color:var(--mut)}
.rewrite-theme-row > input{padding:7px 10px;background:#181b22;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px}
.rewrite-theme-row > input:focus{border-color:var(--acc);outline:none}
#status{font-size:13px;color:var(--ok)}
.script-ai{border:1px solid #24435c;background:#101824;border-radius:10px;padding:12px;margin:12px 0 14px}
.script-ai-head{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;margin-bottom:10px}
.script-ai-head strong{color:#9bd0ff}
.script-ai-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}
.script-ai-grid label{font-size:12px;color:var(--mut);font-weight:600}
.script-ai-grid input,.script-ai-grid select,.script-ai-grid textarea{width:100%;box-sizing:border-box;margin-top:4px;padding:8px;border:1px solid var(--line);background:#0d1118;color:var(--fg);border-radius:6px;font:inherit}
.script-ai-grid textarea{resize:vertical;min-height:68px}
.script-ai-wide{grid-column:span 2}
.script-ai-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:10px}
@media(max-width:760px){.script-ai-wide{grid-column:1/-1}}
/* shotlist */
.shotcards{list-style:none;padding:0;counter-reset:s}
.shotcard{display:flex;gap:14px;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px;margin:0 0 10px}
.shotno{font-weight:700;color:var(--acc);min-width:54px}
.shotbody{flex:1}
.shotbody .dur{font-size:13px;color:var(--mut)}
.shotbody .line{margin-top:4px}
.chk{font-size:13px;color:var(--mut);white-space:nowrap}
.total{color:var(--mut)}
/* produce: 任务工作台（拍摄→上传→自动配音→自动渲染）*/
#produce .ph2{font-size:17px;margin:8px 0}
/* 全站统一的样片预览底部悬浮播放器（produce / m_task / m_home 共用）。
   不写父选择器——以后任何页面再放 <video id="refv"> 都自动拿到这个浮层布局，
   避免之前忘加 #xxx #refv 导致 video 撑成原生全尺寸的坑。 */
#refv{position:fixed;left:0;right:0;bottom:0;width:100%;max-height:55vh;background:#000;z-index:30;object-fit:contain}
/* 关闭按钮跟视频同高:视频是 bottom 锚定的 55vh,按钮挂在视频【右上角内侧】
   (距视频顶 12px,右 12px)→ 跟着视频走、用户视线不用上下乱跳 */
.refclose{position:fixed;bottom:calc(55vh - 48px);right:12px;z-index:31;background:rgba(0,0,0,.85);color:#fff;border:1px solid rgba(255,255,255,.6);padding:8px 14px;border-radius:999px;font:inherit;font-weight:600;font-size:14px;cursor:pointer;box-shadow:0 2px 8px rgba(0,0,0,.4)}
.refclose:hover{background:rgba(0,0,0,.95)}
/* BGM 行：select + 管理直链；缺数据时下方 hint 提示去采集 */
.bgmrow{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.bgmrow select{flex:1;min-width:220px}
.bgmrow .bgmgo{padding:7px 12px;font-size:12px;background:transparent;border:1px solid var(--line);color:var(--mut);border-radius:6px;text-decoration:none;white-space:nowrap}
.bgmrow .bgmgo:hover{color:var(--fg);border-color:var(--acc)}
.bgmrow #bgmPreview{padding:7px 14px;font-size:13px;background:#10221a;border:1px solid var(--ok);color:#a9e3c4;border-radius:6px;cursor:pointer;font:inherit;font-weight:600;white-space:nowrap}
.bgmrow #bgmPreview:hover:not(:disabled){background:#14302a}
/* BGM 采集：抖音 cookies 上传盒 */
.cookiebox{background:#181b22;border:1px solid var(--line);border-radius:8px;padding:12px;margin:4px 0 6px}
.cookiehead{display:flex;align-items:center;gap:10px;font-weight:600;font-size:13px;margin-bottom:8px}
.cookie-ok{color:var(--ok);font-size:12px;font-weight:400}
.cookie-no{color:#ffb020;font-size:12px;font-weight:400}
.cookieup{display:block;font-size:13px;color:var(--mut)}
.cookieup input{margin-top:4px}
/* 音色行：select + ▶ 试听 + 状态文字 */
.voicerow{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.voicerow select{flex:1;min-width:200px;max-width:100%}
.voicerow .hint{flex-basis:100%;font-size:11px;line-height:1.5;color:var(--mut);margin-top:4px}
.voicerow .hint code{background:#10131a;padding:1px 5px;border-radius:4px;color:#ffd089;font-size:11px}
.voicerow #voicePreview{padding:7px 14px;font-size:13px;background:#1f2a36;border:1px solid #36a3ff;color:#9bd0ff;border-radius:6px;cursor:pointer;font:inherit;font-weight:600}
.voicerow #voicePreview:hover:not(:disabled){background:#243345}
.voicerow #voicePreview:disabled{opacity:.5;cursor:wait}
.voicerow #voicest{font-size:12px;color:var(--mut)}
/* 切片恢复条（早期 bug 修复入口） */
#produce .reapplybar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:0 0 14px;padding:10px 14px;background:#2a1a1f;border:1px solid #5a2230;border-radius:10px;color:#ffd5dc;font-size:13px}
#produce .reapplybar button{flex:none}
/* 任务详情页双栏：成片在左（sticky 跟随滚动），分镜头在右；窄屏单栏堆叠 */
#produce .produce-grid{display:grid;grid-template-columns:1fr;gap:20px;align-items:start;margin-top:12px}
#produce .produce-grid.has-film{grid-template-columns:460px minmax(0,1fr)}
#produce .produce-grid .outpanel{position:sticky;top:14px;min-width:0;max-width:100%}
#produce .produce-grid .produce-main{min-width:0}
/* 封面面板内部也防溢出 */
.coverpanel,.cover-body,.cover-form{min-width:0;max-width:100%;box-sizing:border-box}
.cover-form input,.cover-form select,.cover-form textarea{min-width:0}
#produce .produce-main{min-width:0}
@media(max-width:920px){
  #produce .produce-grid.has-film{grid-template-columns:1fr}
  #produce .produce-grid .outpanel{position:static}
}
/* 成片面板（双栏左侧；未渲染时不出现） */
#produce .outpanel{margin:0 0 8px;padding:14px;background:#10221a;border:1px solid #1d4d34;border-radius:12px}
#produce .outpanel .outhead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:10px}
#produce .outpanel .outhead .ph2{margin:0;color:var(--ok);font-size:16px}
#produce .outpanel video{display:block;width:100%;max-height:60vh;background:#000;border-radius:8px}
/* 成片审核面板 */
#produce .reviewpanel{margin:10px 0;padding:12px;border:1px solid var(--line);border-radius:10px;background:#15181f}
#produce .reviewpanel .rev-cur{font-size:13px;font-weight:600;margin-bottom:8px}
#produce .reviewpanel .rev-cur.rejected{color:#ff9aab}
#produce .reviewpanel .rev-cur.approved{color:var(--ok)}
#produce .reviewpanel .rev-cur.pending{color:var(--mut)}
#produce .reviewpanel .rev-meta{font-weight:400;color:var(--mut);margin-left:6px}
#produce .reviewpanel .rev-reason{margin-top:4px;color:#ffb6c7;font-weight:400;white-space:pre-wrap}
#produce .reviewpanel textarea{width:100%;box-sizing:border-box;padding:8px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px;font:inherit;font-size:14px;resize:vertical}
#produce .reviewpanel .rev-act{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
#produce .reviewpanel .rev-act button{padding:8px 14px;font-size:13px;border-radius:8px;border:1px solid var(--line);font:inherit;font-weight:600;cursor:pointer}
#produce .reviewpanel .rev-act .danger{background:#2a1a1f;border-color:#5a2230;color:#ff9aab}
#produce .reviewpanel .rev-act .danger:hover{background:#3a1f28;border-color:#ff4d6d;color:#ffb6c7}
#produce .reviewpanel .rev-act .primary{background:var(--ok);border-color:var(--ok);color:#0f1115}
#produce .reviewpanel .rev-act .ghost{background:transparent;color:var(--mut)}
#produce .outpanel .outact{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:10px}
#produce .outpanel .actbtn{padding:9px 14px;font-size:14px;flex:none;min-width:auto}
#produce .outpanel .actbtn.dl{background:var(--ok);border-color:var(--ok);color:#0f1115}
#produce .outpanel .actbtn.ghost{background:transparent;color:var(--mut)}
#produce .outpanel .actbtn.ghost:hover{color:var(--fg);border-color:var(--mut)}
#copyst{margin-left:8px}
/* 手机端成片面板 */
.m-outpanel{margin:14px 0;padding:12px;background:#10221a;border:1px solid #1d4d34;border-radius:12px}
.m-outpanel .m-outh{font-weight:700;color:var(--ok);font-size:15px;margin-bottom:8px}
.m-outpanel .m-outh .m-sub{color:var(--mut);font-size:11px;font-weight:400;margin-left:6px}
.m-outpanel video{display:block;width:100%;max-height:55vh;background:#000;border-radius:8px}
.m-outpanel .m-actbtn.dl{display:block;text-align:center;margin-top:10px;background:var(--ok);border-color:var(--ok);color:#0f1115;text-decoration:none;flex:none}
/* 任务工作台顶部：当前任务的宠物档摘要（AI 改写的锚点）— 点了直跳"任务设置" */
.petcard{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:8px 0 16px;padding:10px 14px;background:#241d12;border:1px solid #3a2d18;border-radius:10px;color:#ffd089;font-size:14px;text-decoration:none;cursor:pointer}
.petcard:hover{border-color:#ffb020}
.petcard.warn{background:#2a1a1f;border-color:#5a2230;color:#ff9aab}
.petcard.warn:hover{border-color:#ff5470}
.petcard .pcact{color:#fff;background:rgba(255,255,255,.08);border:1px solid currentColor;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}
.petcard.warn .pcact{background:rgba(255,84,112,.18);color:#ffd5dc}
/* settings 里的宠物档编辑区 */
.petset{border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin:0 0 12px;background:#10131a}
.petset legend{padding:0 6px;color:#ffd089;font-size:13px}
/* 紧凑：5 个短字段 3 列排，2 行内显示完（类别/品种/性别 · 出生日期/毛色）*/
.petset .pet2{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px 10px;margin-bottom:6px}
.petset label{display:block;color:var(--mut);font-size:13px;margin:0}
.petset .pet2 label{margin:0}
.petset .settings input,.petset input,.petset select{margin-top:3px}
.petset sup{color:var(--acc);margin-left:2px}
.petset small.hint{display:block;margin-top:2px;font-size:11px}
@media(max-width:680px){.petset .pet2{grid-template-columns:1fr 1fr}}
@media(max-width:420px){.petset .pet2{grid-template-columns:1fr}}
/* 卖点：标签行内带「按品种生成」按钮 */
.sell-label{position:relative}
.sell-gen{margin-left:8px;padding:3px 9px;font-size:12px;font-weight:600;cursor:pointer;
  background:#241d12;border:1px solid #3a2d18;color:#ffd089;border-radius:6px;vertical-align:middle}
.sell-gen:hover:not(:disabled){border-color:#ffb020}
.sell-gen:disabled{opacity:.5;cursor:wait}
.sell-label #sellst{margin-left:8px;font-size:11px}
/* 混音滑块：数值回显 */
.mixval{display:inline-block;min-width:30px;color:var(--acc);font-weight:700;font-size:13px}
.settings input[type=range]{width:100%;margin-top:6px;accent-color:var(--acc);cursor:pointer;padding:0}
/* 任务设置面板内的保存按钮 */
.setbox-save{display:flex;align-items:center;gap:12px;margin-top:14px;
  padding-top:12px;border-top:1px solid var(--line)}
.setbox-save button{padding:9px 18px;font-size:14px;flex:none;width:auto}
.setbox-save #setst{font-size:12px}
.shot-addbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:10px 0 12px;padding:12px 14px;background:var(--card);border:1px solid var(--line);border-radius:10px}
.shot-addbar strong{display:block;font-size:15px;color:var(--fg)}
.shot-addbar span{display:block;margin-top:3px;color:var(--mut);font-size:12px}
.shot-addbar button{flex:none}
.shoots{list-style:none;padding:0;margin:6px 0 0}
.shoot{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px;margin:0 0 12px}
.shoot-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;color:var(--mut);margin-bottom:8px}
.shoot-id{font-weight:700;color:var(--acc);font-size:15px}
.shoot-extra{padding:2px 7px;border:1px solid #3a2d18;border-radius:999px;background:#241d12;color:#ffd089;font-size:12px;font-weight:600}
.shoot-meta{color:var(--mut)}
.shoot-stat{margin-left:auto;font-size:13px}
.shoot-stat.good{color:var(--ok)} .shoot-stat.warn{color:#ffb020} .shoot-stat.todo{color:#ff8090}
.shoot-vo{color:var(--ok);font-size:12px}
#produce .r-script{width:100%;min-height:42px;max-height:calc(1.55em * 5 + 16px);overflow-y:auto;resize:vertical;padding:8px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:8px;font:inherit;line-height:1.55;box-sizing:border-box}
.shoot-act{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px}
.shoot-btns{display:flex;flex-direction:row;gap:8px;flex:1;min-width:240px;flex-wrap:wrap}
/* flex:0 1 auto — 按文字宽度自适应,允许少量收缩但不强行 grow,
   避免按钮多时挤压(原 flex:1 等分会让"换黄金三秒"5字 + emoji 装不下,
   文字溢出按钮边框,Mac Chrome 用 PingFang SC 更明显)。
   挤不下自动 wrap 到下一行,不再溢出。 */
.actbtn{display:inline-flex;align-items:center;justify-content:center;flex:0 1 auto;min-width:0;padding:11px 14px;border:1px solid var(--line);border-radius:8px;background:#222732;color:var(--fg);font:inherit;font-weight:600;cursor:pointer;white-space:nowrap}
.actbtn.samp{background:#1f2a36;border-color:#36a3ff;color:#9bd0ff}
.actbtn.samp:disabled,.actbtn.shot:disabled{opacity:.45;cursor:not-allowed;color:var(--mut);border-color:var(--line);background:#222732}
.actbtn.up{background:var(--acc);border-color:var(--acc);color:#fff}
.actbtn.shot{background:#2a2218;border-color:#ffb020;color:#ffd089}
/* 下载原视频（原始素材）：绿色调，跟"下载 MP4 成片"的语义呼应、又区别于播放/上传 */
.actbtn.rawdl{background:#16241c;border-color:#3ddc84;color:#8ff0bd;text-decoration:none}
.actbtn.rawdl:hover{background:#1c3026;border-color:#5ff0a0}
.play-vo{padding:6px 10px;font-size:13px;background:#222732;color:var(--fg);border:1px solid var(--line);border-radius:6px;cursor:pointer}
/* 单镜文案工具栏：AI 改写本镜 / 保存本镜 / 生成本镜配音 —— 都是次级动作，比上传/样片轻量 */
.r-tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:4px 0 8px}
.r-tool{padding:6px 11px;font-size:12px;background:#1a1d24;border:1px solid var(--line);color:var(--mut);border-radius:6px;cursor:pointer;font:inherit;font-weight:500}
.r-tool:hover:not(:disabled){color:var(--fg);border-color:var(--mut)}
.r-tool:disabled{opacity:.45;cursor:not-allowed}
.r-tool.ai{color:#ffd089;border-color:#3a2d18;background:#241d12}
.r-tool.ai:hover:not(:disabled){border-color:#ffb020}
.r-tool.save{color:#9bd0ff;border-color:#1a2a3a;background:#10202a}
.r-tool.save:hover:not(:disabled){border-color:#36a3ff}
.r-tool.vo{color:#a9e3c4;border-color:#1d4d34;background:#10221a}
.r-tool.vo:hover:not(:disabled){border-color:var(--ok)}
/* 对话音色标记按钮（[A]/[B]）：紫色调，跟 AI/保存/配音 区分 */
.r-tool.spk{color:#c9b6ff;border-color:#332a4d;background:#1a1626}
.r-tool.spk:hover:not(:disabled){border-color:#9b7dff}
.r-st{font-size:12px;color:var(--mut);margin-left:auto;max-width:100%;word-break:break-all}
.shoot-act .prev{font-size:12px}
.shoot-st{font-size:13px;margin-top:8px}
.settings{margin:18px 0 6px;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 14px}
.settings summary{cursor:pointer;font-weight:600;color:var(--mut)}
.settings .setbox{padding-top:10px}
.settings label{display:block;margin:0 0 10px;font-size:13px;color:var(--mut)}
.settings input,.settings select{width:100%;margin-top:4px;padding:8px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px;box-sizing:border-box}
/* 任务设置里的勾选行：复选框跟标题同行，hint 小字独占一行；
   覆盖上面通用 .settings input 的 width:100% / padding:8px，否则复选框被拉成大方块 */
.settings .cbk-row{display:block;margin:6px 0 12px;cursor:pointer}
.settings .cbk-row input[type=checkbox]{width:auto;margin:0 6px 0 0;padding:0;vertical-align:middle;transform:scale(1.15)}
.settings .cbk-row > span{color:var(--fg);font-weight:600;font-size:13px}
.settings .cbk-row .hint{display:block;margin-top:4px;font-size:12px;color:var(--mut)}
@media(min-width:760px){.shoot-act{align-items:flex-start}.shoot-btns{flex:0 0 340px}}
#produce .savebar{position:static;flex-wrap:wrap;padding:14px;background:var(--card);border:1px solid var(--line);border-radius:10px}
/* 渲染成片：主按钮（带光晕），点了直接走 ffmpeg */
#produce #renderOnly{font-size:15px;padding:11px 18px;box-shadow:0 0 0 1px rgba(255,77,109,.18),0 4px 18px -8px rgba(255,77,109,.5)}
#produce #renderOnly:disabled{opacity:.55;cursor:not-allowed;box-shadow:none}
/* 一键成片：现在是"全套流水线"的副选项——灰一点免得跟主按钮抢眼 */
#produce #oneClick{background:#1a1d24;border-color:#3a3d44;color:#a8adb7}
#produce #oneClick:hover{background:#222732;border-color:var(--mut);color:var(--fg)}
#produce #oneClick:disabled{opacity:.55;cursor:not-allowed}
#produce #oneClick[data-nopet]{background:#3a2a18;border-color:#ffb020;color:#ffd089}
#produce #oneClick[data-nopet]:hover{background:#4a341a}
/* produce: 配音 & 素材（旧）*/
.bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px;margin-bottom:16px}
.bar .hint{margin:0;flex:1;min-width:220px}
#vstatus{font-size:13px;color:var(--ok)}
table.seg{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden}
table.seg th{text-align:left;font-size:12px;color:var(--mut);padding:10px;border-bottom:1px solid var(--line)}
table.seg td{padding:10px;border-bottom:1px solid var(--line);vertical-align:middle}
table.seg tr:last-child td{border-bottom:none}
.seg .sn{color:var(--acc);font-weight:700;width:34px}
.seg .ln{max-width:340px}
.seg .play{padding:5px 10px;font-size:13px}
.seg .vdur{margin-left:8px;font-size:12px;color:var(--mut)}
.seg .up{display:inline-block;padding:5px 10px;border:1px solid var(--line);border-radius:6px;cursor:pointer;font-size:13px;background:#222732}
.seg .fok{margin-left:8px;font-size:12px}
.seg .fok.good{color:var(--ok)}
.seg .fok.bad{color:#ffb020}
.seg .fok.none{color:var(--mut)}
.seg .prev{margin-left:8px;font-size:12px}
/* preview readiness */
.ok{color:var(--ok);font-size:12px}
.warn{color:#ffb020;font-size:12px}
.bad{color:#ff5470;font-size:12px}
.small{margin-top:10px}
#preview video{border-radius:10px;background:#000;max-height:70vh}
#preview .side{display:flex;flex-direction:column;gap:8px}
#rstatus{font-size:13px;color:var(--ok);word-break:break-all}
/* slicer 样板拆解 */
.newways{display:flex;gap:16px;flex-wrap:wrap;align-items:stretch;margin:16px 0 20px}
.newways .up.big{flex:1;min-width:260px;text-align:center;border-color:var(--acc);background:#241a1f}
.newways .up.big small{color:var(--mut);font-weight:400}
.newways .newproj{flex:1;min-width:260px;margin:0;align-items:center}
.import-result{padding:9px 12px;border:1px solid #1d4d34;background:#10221a;color:#8ff0bd;border-radius:8px}
.import-md{margin:0 0 18px;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.import-md>summary{cursor:pointer;font-weight:600;color:#ffd089}
.import-md form{display:flex;flex-direction:column;gap:10px;margin-top:10px}
.import-md textarea{width:100%;box-sizing:border-box;min-height:180px;padding:10px;border:1px solid var(--line);border-radius:8px;background:#10131a;color:var(--fg);font:inherit;line-height:1.5;resize:vertical}
.import-md button{align-self:flex-start}
.up.big{display:inline-block;padding:14px 22px;border:1px dashed var(--line);border-radius:10px;background:#222732;cursor:pointer}
#slicer #ref{display:block;width:100%;height:auto;background:#000;border-radius:8px;margin:0}
.slgrid{display:grid;grid-template-columns:340px 1fr;gap:18px;align-items:start}
.slplayer{position:sticky;top:14px}
.sledit{min-width:0}     /* 防 grid 子项被内部宽元素撑爆 */
@media(max-width:900px){.slgrid{grid-template-columns:1fr}.slplayer{position:static}#slicer #ref{max-height:50vh;width:auto;margin:0 auto}}
.seg .segdel{padding:2px 9px;font-size:13px;background:transparent;border:none;color:var(--mut);cursor:pointer;border-radius:4px}
.seg .segdel:hover{color:#fff;background:rgba(255,84,112,.6)}
.timeline{position:relative;display:block;width:100%;height:104px;background:#000;border:1px solid var(--line);border-radius:8px;overflow:hidden;cursor:crosshair;user-select:none}
.timeline .th{position:absolute;top:0;height:100%;object-fit:cover;pointer-events:none;opacity:.85}
.timeline .sil{position:absolute;top:0;height:100%;background:rgba(255,255,255,.12);pointer-events:none}
.timeline .scn{position:absolute;top:0;height:100%;width:2px;background:#36a3ff;opacity:.7;pointer-events:none}
.timeline .segf{position:absolute;bottom:0;height:20px;background:rgba(255,77,109,.30);border-left:1px solid rgba(255,255,255,.3);color:#fff;font-size:11px;line-height:20px;text-align:center;pointer-events:none}
.timeline .bnd{position:absolute;top:0;height:100%;width:9px;margin-left:-4px;background:var(--acc);opacity:.85;cursor:ew-resize;border-radius:2px}
.timeline .bnd:hover{opacity:1}
.timeline .bnd .bndx{position:absolute;top:0;left:50%;transform:translateX(-50%);width:16px;height:16px;line-height:15px;text-align:center;font-size:11px;background:#fff;color:var(--acc);border-radius:50%;box-shadow:0 0 0 1px var(--acc);cursor:pointer}
.timeline .bnd .bndx:hover{background:var(--acc);color:#fff}
.tlbar .rate{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--mut)}
.tlbar .rate select{padding:5px 8px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px}
.timeline .phh{position:absolute;top:0;height:100%;width:2px;background:#3ddc84;pointer-events:none}
.segplay{margin-left:8px;padding:2px 8px;font-size:12px;background:#222732;border:1px solid var(--line);border-radius:5px;color:var(--fg);cursor:pointer}
.segplay:hover{border-color:var(--acc)}
/* 文字校准分镜 */
.txwrap{margin:16px 0;padding:14px;background:#181b22;border:1px solid var(--line);border-radius:10px}
.txh{font-size:15px;margin:0 0 6px}
.tx{font-size:19px;line-height:2.0;letter-spacing:1px;user-select:none;max-height:40vh;overflow:auto}
.tx .ch{cursor:pointer;padding:1px 0;border-radius:3px}
.tx .ch:hover{background:rgba(255,77,109,.25)}
.tx .ch.used{color:var(--mut);background:rgba(255,255,255,.04)}
.tx .ch.sel{background:var(--acc);color:#fff}
.tx .gap{display:inline-block;margin:0 7px;padding:0 7px;font-size:11px;color:var(--mut);background:rgba(255,255,255,.06);border:1px dashed var(--line);border-radius:9px;user-select:none;cursor:default;vertical-align:middle}
.tx .gap.big{color:#ffb020;border-color:#ffb020;background:rgba(255,176,32,.12)}
.tx .br{display:block;margin:12px 0 4px;font-size:11px;color:var(--acc);font-weight:600;user-select:none;border-top:1px dashed var(--line);padding-top:8px}
.tx .br:first-child{border-top:0;margin-top:0}
.txbar{display:flex;gap:10px;align-items:center;margin-top:12px;flex-wrap:wrap}
.tlbar{display:flex;align-items:center;gap:12px;margin:12px 0}
.tlbar .grow{flex:1}
.knobs{display:flex;flex-wrap:wrap;gap:18px;align-items:center;background:#181b22;border:1px solid var(--line);border-radius:8px;padding:12px;margin:6px 0 14px}
.knobs label{font-size:13px;color:var(--mut);display:flex;align-items:center;gap:8px;white-space:nowrap}
.knobs input[type=range]{width:130px;flex:none}
.knobs label span{color:var(--fg);min-width:32px;display:inline-block}
/* 手机端拍摄 */
.m-wrap{max-width:560px;margin:0 auto;padding:14px}
.m-wrap h1{font-size:20px;margin:6px 0}
.m-hint{color:var(--mut);font-size:13px;margin:10px 0}
.m-card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px;margin:0 0 14px}
.m-tpl{font-weight:700;font-size:16px;margin-bottom:8px}
.m-sub{color:var(--mut);font-size:12px;font-weight:400;margin-left:8px}
.m-task{display:flex;justify-content:space-between;align-items:center;background:#222732;border:1px solid var(--line);border-radius:8px;padding:12px 14px;margin:8px 0;text-decoration:none;color:var(--fg)}
.m-new{display:flex;gap:8px;margin-top:10px}
.m-new input{flex:1;padding:11px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:8px}
.m-new button,.m-shoot,.m-refbtn{padding:11px 16px;border-radius:8px;border:1px solid var(--acc);background:var(--acc);color:#fff;font-weight:600;font-size:15px;cursor:pointer;display:inline-block}
/* /m 顶部"已完成"入口按钮（点了跳 /m/done 独立页面）—— 避免在工作流首页内嵌视频卡片 */
.m-doneentry{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px;margin:14px 0 6px;background:#10221a;border:1px solid #1d4d34;border-radius:12px;color:var(--ok);font-weight:600;font-size:15px;text-decoration:none}
.m-doneentry:hover{filter:brightness(1.15);border-color:#2ea872}
/* /m/done：已完成任务卡片（嵌成片视频 + 下载按钮）—— 单独页面避免拥挤 */
.m-donecard{background:#10221a;border:1px solid #1d4d34;border-radius:12px;padding:12px;margin:0 0 12px}
.m-doneh{display:flex;flex-direction:column;gap:3px;margin-bottom:10px}
.m-donetitle{font-size:15px}
.m-donecard video{display:block;width:100%;max-height:60vh;background:#000;border-radius:8px;object-fit:contain}
.m-doneact{display:flex;gap:10px;margin-top:10px}
/* /m 首页：分区标题 + 模板卡列表（摄影师视角） */
.m-sec{font-size:14px;color:var(--mut);margin:22px 0 8px;font-weight:600}
.m-tplgrid{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:10px}
.m-tplcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px}
.m-tplhead{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}
.m-tpltitle{font-size:16px}
.m-tplmeta{color:var(--mut);font-size:12px}
.m-tplact{display:flex;gap:10px;flex-wrap:nowrap}
.m-tplbtn{display:inline-flex;align-items:center;justify-content:center;flex:1;min-width:0;padding:11px 10px;border-radius:8px;border:1px solid var(--line);font:inherit;font-weight:600;font-size:14px;cursor:pointer;text-align:center;white-space:nowrap;text-decoration:none}
.m-tplbtn.samp{background:#1f2a36;border-color:#36a3ff;color:#9bd0ff}
.m-tplbtn.samp:disabled{opacity:.45;cursor:not-allowed;color:var(--mut);border-color:var(--line);background:#222732}
.m-tplbtn.go{background:var(--acc);border-color:var(--acc);color:#fff}
.m-tplbtn.danger{background:#2a1a1f;border-color:#5a2230;color:#ff9aab;flex:0 0 auto;padding:11px 14px}
.m-tplbtn.danger:hover{background:#3a1f28;border-color:#ff4d6d;color:#ffb6c7}

/* /m 未完成任务卡：原 <a>.m-task 改成 div 包裹 + 浮动 ✕ 删除 */
.m-task-wrap{position:relative}
.m-task-wrap .m-task{padding-right:54px}  /* 给右上角的 ✕ 留位 */
.m-task-del{position:absolute;top:8px;right:8px;margin:0}
.m-task-del button{width:36px;height:36px;border-radius:8px;background:#2a1a1f;border:1px solid #5a2230;color:#ff9aab;font-size:16px;cursor:pointer;line-height:1;padding:0;display:flex;align-items:center;justify-content:center}
.m-task-del button:hover{background:#3a1f28;border-color:#ff4d6d;color:#ffb6c7}
.m-del-inline{margin:0}
.m-tplbtn.go:hover{filter:brightness(1.05)}
/* /m/new/<tid>：模板锁定的建任务页顶部芯片 */
.m-tplpick{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:10px 12px;background:#241d12;border:1px solid #3a2d18;border-radius:10px;margin:12px 0 14px;color:#ffd089;font-size:14px}
/* 移动端 + 新建任务：抽屉式（因增加了宠物档案 5 字段，单行行不通）*/
.m-newwrap{margin-top:10px;border:1px solid var(--line);border-radius:8px;background:#10131a}
.m-newwrap>summary{list-style:none;padding:11px 14px;cursor:pointer;color:var(--acc);font-weight:600}
.m-newwrap>summary::-webkit-details-marker{display:none}
.m-newwrap[open]>summary{border-bottom:1px solid var(--line)}
.m-newform{padding:12px;display:flex;flex-direction:column;gap:10px}
.m-newform label{display:block;color:var(--mut);font-size:13px}
.m-newform sup{color:var(--acc);margin-left:2px}
.m-newform input,.m-newform select,.m-newform textarea{width:100%;margin-top:4px;padding:10px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:8px;font:inherit}
.m-newform textarea{resize:vertical;min-height:54px}
.m-newform button{padding:11px;border-radius:8px;border:1px solid var(--acc);background:var(--acc);color:#fff;font-weight:600;font-size:15px;cursor:pointer}
.m-task .m-pet{display:block;color:#ffd089;font-size:12px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.m-refbtn{background:#222732;border-color:var(--line);color:var(--fg);font-weight:500}
.m-bar{position:sticky;top:0;display:flex;align-items:center;gap:12px;background:var(--bg);padding:10px 0;border-bottom:1px solid var(--line);z-index:5}
.m-back{text-decoration:none;color:var(--mut)}
.m-prog{margin-left:auto;color:var(--mut);font-size:13px}
.m-shot{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px;margin:12px 0}
.m-shot-h{font-size:13px;color:var(--mut);display:flex;justify-content:space-between;gap:8px}
.m-ok{color:var(--ok)} .m-ok.warn{color:#ffb020} .m-todo{color:#ff8090}
.m-line{font-size:17px;line-height:1.5;margin:8px 0 12px}
/* 单镜可编辑文案 + per-shot 工具条 */
.m-line-edit{width:100%;box-sizing:border-box;font-size:16px;line-height:1.5;padding:10px 12px;margin:10px 0 8px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:8px;font-family:inherit;resize:vertical;min-height:64px}
.m-line-edit:focus{outline:none;border-color:var(--acc)}
.m-line-tools{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.m-line-btn{padding:7px 11px;background:#222732;border:1px solid var(--line);color:var(--fg);border-radius:7px;font:inherit;font-size:13px;cursor:pointer;white-space:nowrap}
.m-line-btn.save{background:#2a1f12;border-color:#ffb020;color:#ffd089}
.m-line-btn.ai{background:#1c1f29;border-color:var(--acc);color:#ffb6c7}
.m-line-btn.vo{background:#10221a;border-color:#1d4d34;color:#7dd3a8}
.m-line-btn.vo-play{background:#1f2a36;border-color:#36a3ff;color:#9bd0ff}
.m-line-btn:disabled{opacity:.45;cursor:not-allowed}
.m-line-st{font-size:12px;color:var(--mut);flex:1;text-align:right}
.m-vo-ok{color:#7dd3a8;font-size:12px;margin-left:6px}

/* 任务级操作条 —— 摄影师可以保存全部 / AI 改写全部 / 重新生成配音 / 渲染 */
.m-actbar{margin:18px 0 8px;padding:14px;background:var(--card);border:1px solid var(--line);border-radius:12px;display:flex;flex-direction:column;gap:8px}
.m-bigbtn{padding:13px 12px;border-radius:10px;border:1px solid var(--line);background:#222732;color:var(--fg);font:inherit;font-size:15px;font-weight:600;cursor:pointer}
.m-bigbtn.primary{background:var(--acc);border-color:var(--acc);color:#fff}
.m-bigbtn:disabled{opacity:.45;cursor:not-allowed}
.m-bigbtn.danger{background:#2a1a1f;border-color:#5a2230;color:#ff9aab}
.m-bigbtn.danger:hover{background:#3a1f28;border-color:#ff4d6d;color:#ffb6c7}
.m-delform{margin-top:18px}
.m-delform .m-hint{text-align:center;margin-top:6px}
.m-warn{background:#2a1a1f;border:1px solid #5a2230;color:#ff9aab;padding:10px 14px;border-radius:8px;font-size:13px;margin:10px 0}
/* 驳回横幅（摄影师手机端）：红底醒目，原因大字 */
.m-reject{background:#2a1216;border:1px solid #ff4d6d;border-radius:10px;padding:12px 14px;margin:12px 0}
.m-reject-h{color:#ff6b7a;font-weight:700;font-size:15px}
.m-reject-reason{color:#ffd6dd;font-size:15px;margin:8px 0 6px;white-space:pre-wrap;line-height:1.5}
.m-reject-meta{color:#d99aa6;font-size:12px}
.m-approved{background:#10221a;border:1px solid #1d4d34;color:var(--ok);border-radius:10px;padding:10px 14px;margin:12px 0;font-size:14px;font-weight:600}
/* 手机端任务设置面板 */
.m-settings{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:12px 0}
.m-settings>summary{cursor:pointer;font-weight:600;font-size:14px;color:var(--fg);list-style:none}
.m-settings>summary::-webkit-details-marker{display:none}
.m-settings>summary::before{content:"▸ ";color:var(--mut)}
.m-settings[open]>summary::before{content:"▾ "}
.m-set-body{margin-top:12px;display:flex;flex-direction:column;gap:12px}
.m-set-body label{display:block;font-size:13px;color:var(--mut)}
.m-set-body input,.m-set-body select,.m-set-body textarea{width:100%;margin-top:5px;padding:10px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:8px;font:inherit;font-size:15px;box-sizing:border-box}
.m-set-body textarea{resize:vertical}
.m-set-body sup{color:#ff9aab}
.m-set-pet{border:1px solid var(--line);border-radius:10px;padding:10px 12px 12px;margin:0;display:flex;flex-direction:column;gap:10px}
.m-set-pet legend{font-size:13px;color:var(--fg);font-weight:600;padding:0 6px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.m-mini{padding:5px 10px;font-size:12px;border:1px solid var(--line);border-radius:6px;background:#222732;color:#9bd0ff;cursor:pointer;font:inherit;font-weight:600}
.m-mini:disabled{opacity:.45;cursor:not-allowed;color:var(--mut)}
/* 试音/试听：下拉 + 按钮同行；按钮不被拉伸 */
.m-voicerow{display:flex;gap:8px;align-items:center;margin-top:5px}
.m-voicerow select{flex:1;min-width:0;width:auto;margin-top:0}
.m-voicerow .m-mini{flex:none;white-space:nowrap;padding:8px 12px;font-size:13px}
/* 音量数字回显 */
.m-volval{color:var(--acc);font-weight:600;margin-left:4px}
/* range 滑块去掉输入框那套边框/内距 */
.m-set-body input[type=range]{padding:0;border:none;background:transparent;height:auto;accent-color:var(--acc)}
.m-set-sell{position:relative}
.m-set-cbk{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap}
.m-set-cbk input[type=checkbox]{width:auto;margin:2px 0 0;flex:none;transform:scale(1.3)}
.m-set-cbk>span{font-weight:600;color:var(--fg);font-size:14px}
.m-set-cbk .m-hint{flex-basis:100%;margin-top:2px}
.m-set-save{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:4px}
.m-set-save .m-bigbtn{flex:1}
.m-shot-addbar{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:12px 0;display:flex;align-items:center;gap:10px;justify-content:space-between}
.m-shot-addbar strong{display:block;font-size:14px;color:var(--fg)}
.m-shot-addbar span{display:block;margin-top:3px;color:var(--mut);font-size:12px;line-height:1.4}
.m-shot-addbar .m-bigbtn{flex:none;white-space:nowrap}
.m-extra{display:inline-block;margin-left:6px;padding:2px 6px;border:1px solid #3a2d18;border-radius:999px;background:#241d12;color:#ffd089;font-size:11px;font-weight:600}
.m-act{display:flex;gap:8px;flex-wrap:nowrap}
.m-shoot{flex:1;text-align:center}
.m-actbtn{display:inline-flex;align-items:center;justify-content:center;flex:1;min-width:0;padding:11px 8px;border:1px solid var(--line);border-radius:8px;background:#222732;color:var(--fg);font:inherit;font-weight:600;font-size:14px;cursor:pointer;text-align:center;white-space:nowrap}
.m-actbtn.samp{background:#1f2a36;border-color:#36a3ff;color:#9bd0ff}
.m-actbtn.up{background:var(--acc);border-color:var(--acc);color:#fff}
.m-actbtn.shot{background:#2a2218;border-color:#ffb020;color:#ffd089}
.m-actbtn.rawdl{background:#16241c;border-color:#3ddc84;color:#8ff0bd;text-decoration:none}
.m-actbtn.samp:disabled,.m-actbtn.shot:disabled{opacity:.45;cursor:not-allowed;color:var(--mut);border-color:var(--line);background:#222732}
.m-st{font-size:13px;margin-top:8px}
/* (#mtask #refv 旧规则已并入全站 #refv，见 produce 区块顶部) */
@media print{
  body{background:#fff;color:#000}.topbar,.no-print{display:none}
  .shotcard{border:1px solid #ccc;background:#fff;break-inside:avoid}
  .shotno{color:#000}
}
@media(max-width:760px){.grid{grid-template-columns:1fr}}

/* ───────── 素材库 ───────── */
#materials .mat-summary{display:flex;gap:10px;flex-wrap:wrap;margin:6px 0 4px}
#materials .mat-sum{font-size:13px;padding:4px 10px;border-radius:6px;border:1px solid var(--line);background:#1a1d24;color:var(--mut)}
#materials .mat-sum.g-youzhi{color:#8ff0bd;border-color:#1d4d34;background:#10221a}
#materials .mat-sum.g-liang{color:#ffd089;border-color:#3a2d18;background:#241d12}
#materials .mat-sum.g-cha{color:#ff9aab;border-color:#5a2230;background:#2a1a1f}
#materials .mat-sum.g-total{color:var(--fg)}
.matgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;margin-top:14px}
.matcard{background:var(--card);border:1px solid var(--line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column;border-left-width:4px}
.matcard.grade-youzhi{border-left-color:var(--ok)}
.matcard.grade-liang{border-left-color:#ffb020}
.matcard.grade-cha{border-left-color:#ff4d6d}
.matcard.grade-none{border-left-color:var(--line)}
.matcard-vid{width:100%;aspect-ratio:3/4;max-height:300px;background:#000;object-fit:contain;display:block}
.matcard-body{padding:10px 12px;display:flex;flex-direction:column;gap:6px}
.matcard-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.matcard-title{font-size:13px;font-weight:600;color:var(--fg);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.matcard-title:hover{color:var(--acc)}
.matcard-dur{font-size:11px;color:var(--mut);flex:none}
.matcard-pet{font-size:11px;color:#ffd089;background:#241d12;border:1px solid #3a2d18;border-radius:5px;padding:2px 6px;align-self:flex-start;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.matcard-meta{display:flex;gap:6px;flex-wrap:wrap;font-size:11px;color:#8fa0b6}
.matcard-meta span{display:inline-flex;align-items:center;gap:3px;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:#10131a;border:1px solid #242a35;border-radius:5px;padding:2px 6px}
.matcard-grade-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:2px}
.grade-btn{padding:5px 9px;font-size:12px;border:1px solid var(--line);background:#1a1d24;color:var(--mut);border-radius:6px;cursor:pointer;font:inherit;font-weight:600}
.grade-btn:disabled{opacity:.5;cursor:wait}
.grade-btn.gb-youzhi.on{background:#10221a;border-color:var(--ok);color:#8ff0bd}
.grade-btn.gb-liang.on{background:#241d12;border-color:#ffb020;color:#ffd089}
.grade-btn.gb-cha.on{background:#2a1a1f;border-color:#ff4d6d;color:#ff9aab}
.grade-dl{margin-left:auto;padding:5px 9px;font-size:13px;text-decoration:none;border:1px solid #1d4d34;background:#16241c;color:#8ff0bd;border-radius:6px}
.grade-st{font-size:11px;flex-basis:100%}

/* ───────── 素材库多选条 ───────── */
.matcard{position:relative}
.mat-pick{position:absolute;top:8px;left:8px;z-index:2;background:rgba(0,0,0,.55);border-radius:6px;padding:4px 6px;cursor:pointer}
.mat-pick input{width:18px;height:18px;cursor:pointer;accent-color:var(--acc);margin:0;display:block}
.mat-selbar{position:fixed;left:0;right:0;bottom:0;z-index:50;display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 18px;background:#11141b;border-top:1px solid var(--acc);box-shadow:0 -4px 18px -8px rgba(0,0,0,.6)}
.mat-selbar .mat-selinfo{font-size:14px;color:var(--fg)}
.mat-selbar input{flex:1;min-width:160px;max-width:340px;padding:8px 10px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px;font:inherit}
.mat-selbar .primary{padding:9px 16px}
.mat-selbar .primary.alt{background:#235c8c;border-color:#2f7fbd;color:#e7f4ff}

/* ───────── AI脚本混剪弹层 ───────── */
.mat-script-modal{position:fixed;inset:0;z-index:80;background:rgba(5,7,12,.76);display:flex;align-items:center;justify-content:center;padding:22px}
.mat-script-modal[hidden]{display:none}
.mat-script-panel{width:min(1180px,96vw);max-height:88vh;overflow:auto;background:#151922;border:1px solid var(--line);border-radius:10px;box-shadow:0 20px 60px rgba(0,0,0,.5);padding:16px}
.mat-script-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;border-bottom:1px solid var(--line);padding-bottom:12px;margin-bottom:14px}
.mat-script-head h2{margin:0 0 4px;font-size:22px}
.mat-script-head .hint{margin:0}
.mat-script-grid{display:grid;grid-template-columns:310px minmax(0,1fr);gap:16px}
.mat-script-config{display:flex;flex-direction:column;gap:10px;padding:12px;background:#10131a;border:1px solid var(--line);border-radius:8px}
.mat-script-config label,.mat-script-titleline label{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--mut);font-weight:600}
.mat-script-config input,.mat-script-config select,.mat-script-config textarea,
.mat-script-titleline input,.mat-shot-text textarea{
  width:100%;box-sizing:border-box;padding:8px 10px;background:#0d1118;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit
}
.mat-script-config textarea{resize:vertical;min-height:92px}
.mat-script-result{min-width:0}
.mat-script-empty{height:100%;min-height:260px;border:1px dashed #303642;border-radius:8px;display:flex;align-items:center;justify-content:center;color:var(--mut);background:#10131a;text-align:center;padding:18px}
.mat-script-titleline{display:grid;grid-template-columns:minmax(260px,1fr) auto;gap:12px;align-items:end}
.mat-script-source{font-size:12px;color:#9bd0ff;border:1px solid #24435c;background:#102033;border-radius:6px;padding:6px 9px;white-space:nowrap}
.mat-script-shots{display:flex;flex-direction:column;gap:10px;margin-top:10px}
.mat-script-shot{display:grid;grid-template-columns:34px 120px minmax(0,1fr);gap:12px;align-items:start;background:#10131a;border:1px solid var(--line);border-radius:8px;padding:10px}
.mat-shot-idx{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#235c8c;color:#fff;font-weight:700;font-size:13px}
.mat-shot-thumb{width:120px;aspect-ratio:3/4;background:#000;border-radius:6px;object-fit:contain}
.mat-shot-main{min-width:0;display:grid;grid-template-columns:1fr 1fr;gap:8px 10px}
.mat-shot-role,.mat-shot-need,.mat-shot-reason{font-size:12px;color:var(--mut);min-width:0}
.mat-shot-role b,.mat-shot-need b,.mat-shot-reason b{color:var(--fg)}
.mat-shot-text{grid-column:1/-1}
.mat-shot-text textarea{min-height:54px;resize:vertical}
.mat-shot-reason{grid-column:1/-1;color:#8fa0b6}
.mat-script-actions{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
@media(max-width:820px){
  .mat-script-modal{padding:10px}
  .mat-script-grid{grid-template-columns:1fr}
  .mat-script-titleline{grid-template-columns:1fr}
  .mat-script-shot{grid-template-columns:28px 88px minmax(0,1fr)}
  .mat-shot-thumb{width:88px}
  .mat-shot-main{grid-template-columns:1fr}
}

/* ───────── 卡点混剪编辑页 ───────── */
#mashup .mh-title{font-size:20px;font-weight:700;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:8px;padding:6px 10px;width:60%;max-width:420px;font-family:inherit}
#mashup .mh-outpanel{background:#10221a;border:1px solid #1d4d34;border-radius:12px;padding:14px;margin:8px 0}
#mashup .mh-outpanel video{display:block;width:100%;max-height:60vh;background:#000;border-radius:8px}
#mashup .mh-outact{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:10px}
#mashup .mh-settings{display:flex;flex-wrap:wrap;gap:14px;align-items:flex-end;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px;margin:12px 0}
#mashup .mh-settings>label{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--mut)}
#mashup .mh-settings select{padding:8px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit}
#mashup .mh-settings .bgmrow{display:flex;gap:8px;align-items:center}
#mashup .mh-settings .cbk-row{flex-direction:row;align-items:center;gap:8px}
#mashup .mh-settings .cbk-row input{width:auto;transform:scale(1.2)}
#mashup .mh-settings .hint{flex-basis:100%;margin:0}
#mashup .mh-cover{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:8px 14px;margin:12px 0}
#mashup .mh-cover summary{cursor:pointer;font-weight:600;color:var(--mut)}
#mashup .mh-coverbody{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
#mashup .mh-coverbody input,#mashup .mh-coverbody select{padding:8px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px}
#mashup .mh-script-brief{display:flex;gap:10px;align-items:flex-start;background:#102033;border:1px solid #24435c;border-radius:8px;padding:10px 12px;margin:12px 0;color:#cfe9ff;font-size:13px}
#mashup .mh-script-brief strong{color:#9bd0ff;white-space:nowrap}
.mh-clips{list-style:none;padding:0;margin:8px 0;display:flex;flex-direction:column;gap:10px}
.mh-clip{display:flex;gap:12px;align-items:flex-start;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px}
.mh-clip.dead{opacity:.55;border-color:#5a2230}
.mh-clip-ord{flex:none;width:26px;height:26px;border-radius:50%;background:var(--acc);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px}
.mh-clip-vid{flex:none;width:120px;aspect-ratio:3/4;background:#000;border-radius:6px;object-fit:cover}
.mh-clip-ctl{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}
.mh-dead{color:#ff9aab;font-size:12px}
.mh-script-meta{display:flex;flex-direction:column;gap:3px;background:#0d1118;border:1px solid #242a35;border-radius:7px;padding:8px 10px;font-size:12px;color:var(--mut)}
.mh-script-meta b{color:#9bd0ff}
.mh-script-meta span{color:var(--fg)}
.mh-script-meta em{color:#8fa0b6;font-style:normal}
.mh-mini{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--mut)}
.mh-mini input{padding:7px 9px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px}
.mh-clip-btns{display:flex;gap:6px}
.mh-clip-btns button{width:34px;height:32px;border:1px solid var(--line);background:#222732;color:var(--fg);border-radius:6px;cursor:pointer;font-size:15px}
.mh-clip-btns .mh-del{color:#ff9aab;border-color:#5a2230;background:#2a1a1f}
.mh-actbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:16px 0;padding:14px;background:var(--card);border:1px solid var(--line);border-radius:10px}
.mh-actbar .primary{font-size:15px;padding:11px 18px}
.mh-delform{margin-top:8px}
.mh-delform .del{background:#2a1a1f;border:1px solid #5a2230;color:#ff9aab;border-radius:8px;padding:8px 14px;cursor:pointer}

/* 素材库缩略图（点开才加载视频） */
.matcard-vidwrap{position:relative;width:100%;aspect-ratio:3/4;max-height:300px;background:#000;cursor:pointer;display:block;overflow:hidden}
.matcard-thumb{width:100%;height:100%;object-fit:contain;display:block;background:#000}
.matcard-playico{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:54px;height:54px;border-radius:50%;background:rgba(0,0,0,.5);color:#fff;display:flex;align-items:center;justify-content:center;font-size:20px;pointer-events:none}
.matcard-vidwrap:hover .matcard-playico{background:rgba(0,0,0,.7)}

/* ───────── 矩阵号监控 ───────── */
#phmon h1{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
#phmon .phmon-auto{font-size:12px;color:var(--mut);font-weight:400}
.phmon-rangebar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:10px 0 14px}
.phmon-tab{padding:6px 12px;font-size:13px;border:1px solid var(--line);background:#1a1d24;color:var(--mut);border-radius:6px;text-decoration:none;font-weight:600}
.phmon-tab:hover{color:var(--fg);border-color:var(--mut)}
.phmon-tab.on{color:#fff;background:var(--acc);border-color:var(--acc)}
.phmon-custom{display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border:1px solid var(--line);border-radius:6px;background:#10131a;color:var(--mut);font-size:12px}
.phmon-custom input[type=date]{padding:4px 6px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:4px;font:inherit;font-size:12px;color-scheme:dark}
.phmon-custom .ghost{padding:4px 10px;font-size:12px;background:#222732;border:1px solid var(--line);color:var(--fg);border-radius:4px;cursor:pointer;font-family:inherit}
.phmon-period{margin-left:auto;font-size:12px;color:var(--mut)}
.phmon-summary{display:flex;align-items:center;gap:18px;flex-wrap:wrap;padding:14px 18px;border-radius:10px;border:1px solid var(--line);background:var(--card);margin-bottom:14px}
.phmon-summary.danger{background:#2a1216;border-color:#ff4d6d}
.phmon-summary.danger .phmon-big{color:#ff6b7a}
.phmon-summary.good{background:#10221a;border-color:#1d4d34}
.phmon-summary.good .phmon-big{color:var(--ok)}
.phmon-big{font-size:18px;font-weight:700;color:var(--fg)}
.phmon-tip{color:#ffd6dd;font-size:13px}
.phmon-stats{margin-left:auto;font-size:13px;color:var(--mut)}
.phmon-stats b{color:var(--fg)}
.phmon-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.phcard{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px;display:flex;flex-direction:column;gap:8px;border-left-width:5px}
.phcard.alert{border-left-color:#ff4d6d;background:#1f1418;animation:phpulse 2.4s ease-in-out infinite}
.phcard:not(.alert){border-left-color:#1d4d34}
.phcard.disabled{opacity:.55;border-left-color:var(--line)}
@keyframes phpulse{0%,100%{box-shadow:0 0 0 0 rgba(255,77,109,0)}50%{box-shadow:0 0 0 4px rgba(255,77,109,.18)}}
.phcard-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.phcard-name{font-weight:700;font-size:14px;color:var(--fg)}
.phcard-dot{width:8px;height:8px;border-radius:50%;background:#5a5d65;flex:none}
.phcard-dot.on{background:var(--ok);box-shadow:0 0 6px rgba(61,220,132,.6)}
.phcard-flag{margin-left:auto;font-size:12px;font-weight:700;padding:3px 9px;border-radius:5px;color:#ff9aab;background:#2a1a1f;border:1px solid #5a2230}
.phcard-flag.ok{color:var(--ok);background:#10221a;border-color:#1d4d34}
.phcard-last{font-size:12px;color:var(--mut)}
.phcard-last.muted{color:#5a5d65;font-style:italic}
.phcard-plats{width:100%;border-collapse:collapse;font-size:13px}
.phplat td{padding:5px 4px;border-top:1px solid #1f222a}
.phplat:first-child td{border-top:none}
.phplat .ppname{color:var(--fg);font-weight:600;width:54px}
.phplat .ppstat{color:var(--fg);white-space:nowrap;width:70px}
.phplat .ppstat b{color:var(--ok)}
.phplat .ppmeta{color:var(--mut);font-size:11px;text-align:right}
.phplat .ppmeta .pp-pen{color:#ffd089;margin-right:6px}
.phplat .ppmeta .pp-last{color:var(--mut)}
.phplat.off td{color:#5a5d65}
.phplat.off .ppstat,.phplat.off .ppname{color:#5a5d65}
.phplat.miss .ppstat{color:#ff9aab}
.phplat.miss .ppstat b{color:#ff9aab}
.phplat.miss .ppname{color:#ff9aab}
.phcard-noplats{font-size:12px;color:var(--mut);padding:8px 0;font-style:italic}
.phcard-noplats a{color:var(--acc);text-decoration:none}

/* ───────── 兼职管理 ───────── */
.trace-hash{font-family:ui-monospace,monospace;background:#1a1626;border:1px solid #332a4d;color:#c9b6ff;padding:2px 7px;border-radius:4px;font-weight:700}
#admin-partners .userlist td{vertical-align:top}
/* 兼职配对码内联显示 — 单行小字,方便选中复制 */
.pair-cell{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.pair-cell .pair-code{font-family:ui-monospace,monospace;background:#102818;border:1px solid #2d5d3e;color:#7be0a8;padding:3px 9px;border-radius:5px;font-weight:700;font-size:14px;letter-spacing:1px;user-select:all;cursor:text}
.pair-exp{color:var(--mut);font-size:11px;white-space:nowrap}
.pair-none{color:var(--mut);font-size:12px}
.pair-btn.copied{color:#7be0a8;border-color:#2d5d3e;background:#0c1d14}

/* 派单核验卡 */
.dlist{display:flex;flex-direction:column;gap:10px;margin-top:12px}
.dcard{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px;border-left:4px solid var(--acc);display:flex;flex-direction:column;gap:6px}
.dcard-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px}
.dcard-by{color:var(--mut)}
.dcard-by b{color:var(--fg)}
.dcard-when{margin-left:auto;color:var(--mut);font-size:12px}
.dcard-task,.dcard-cap,.dcard-url{font-size:13px;color:var(--mut)}
.dcard-task a,.dcard-url a{color:#9bd0ff}
.dcard-cap{color:var(--fg);background:#10131a;padding:6px 8px;border-radius:6px;font-size:12px}
.dcard-act{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px}
.dcard-act .primary{background:var(--ok);border:1px solid var(--ok);color:#0f1115;padding:7px 14px;font-weight:700;border-radius:6px;cursor:pointer;font:inherit}
.dcard-act .del{background:#2a1a1f;border:1px solid #5a2230;color:#ff9aab;padding:7px 14px;font-weight:600;border-radius:6px;cursor:pointer;font:inherit}
.dcard-act .arch{background:#1a1a1a;border:1px solid #444;color:#bbb;padding:7px 14px;font-weight:600;border-radius:6px;cursor:pointer;font:inherit}
.dcard-act .arch:hover{background:#252525;border-color:#666}
.dcard-act .dup-block-tip{padding:7px 12px;background:#2a1f0a;border:1px solid #5a4520;color:#e6c47a;border-radius:6px;font-size:12px}
.dcard-act .dup-block-tip b{color:#ffd089}
.dcard-reason{flex:1;min-width:200px;padding:7px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px}

/* ── 核验自动检查:汇总条 + verdict 卡片标记 ── */
.auto-check-bar{display:flex;gap:14px;align-items:center;flex-wrap:wrap;padding:12px 16px;margin:14px 0;background:#171a21;border:1px solid var(--line);border-radius:8px}
.auto-check-bar .ac-stat{font-size:13px;color:var(--mut)}
.auto-check-bar .ac-stat b{margin-left:4px;font-size:15px;font-weight:700}
.auto-check-bar .ac-stat.ok b{color:#5cc8a8}
.auto-check-bar .ac-stat.warn b{color:#e6c47a}
.auto-check-bar .ac-stat.fail b{color:#ff9aab}
.auto-check-bar button.primary{margin-left:auto;padding:9px 16px;font-size:13px;font-weight:600;background:#5cc8a8;color:#0a1118;border:0;border-radius:6px;cursor:pointer;font:inherit}
.auto-check-bar button.primary:hover{background:#7adfbc}
.auto-check-bar button.primary:disabled{opacity:.55;cursor:wait}

.dcard-v-ok{border-left:3px solid #5cc8a8}
.dcard-v-warn{border-left:3px solid #e6c47a}
.dcard-v-fail{border-left:3px solid #ff9aab;opacity:.85}
.v-tag{padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600;margin-right:6px;display:inline-block}
.v-tag.v-ok{background:#15241f;color:#5cc8a8;border:1px solid #2f6b56}
.v-tag.v-warn{background:#241c0a;color:#e6c47a;border:1px solid #5a4520}
.v-tag.v-fail{background:#2a1418;color:#ff9aab;border:1px solid #5a2230}
.dcard-auto-warn{margin:8px 0;padding:8px 12px;background:#241c0a;border-left:2px solid #5a4520;border-radius:4px;font-size:12.5px;color:#e6c47a}
.dcard-auto-warn div{padding:2px 0}
.dcard-st{font-size:12px}
/* 重复链接告警:卡片左边框换琥珀色,内嵌一个警告块 */
.dcard.dcard-dup{border-left-color:#e6a64a;background:#1d1a13}
.dcard-dup-warn{background:#2a1f0a;border:1px solid #5a4520;border-radius:6px;padding:8px 12px;color:#e6c47a;font-size:12.5px;display:flex;flex-direction:column;gap:4px}
.dcard-dup-warn b{color:#ffd089}
.dcard-dup-warn .dup-veri{color:#ff9aab;font-weight:600}
.dcard-dup-warn ul.dup-list{margin:4px 0 2px;padding-left:20px;font-size:12px;color:var(--fg)}
.dcard-dup-warn ul.dup-list li{padding:2px 0}
.dcard-dup-warn ul.dup-list a{color:#9bd0ff}
.dp-st-mini{display:inline-block;padding:1px 6px;border-radius:3px;font-size:10.5px;font-weight:600;margin:0 2px}
.dp-st-mini.ok{background:#15241f;color:#5cc8a8;border:1px solid #2f6b56}
.dp-st-mini.warn{background:#241c0a;color:#e6c47a;border:1px solid #5a4520}
.dp-st-mini.err{background:#2a1418;color:#ff9aab;border:1px solid #5a2230}

/* 线索表 */
#admin-leads .lead-override{padding:4px 6px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:4px;font:inherit;font-size:12px;margin-top:4px}
#admin-leads .lead-amount{padding:5px 8px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:4px;font:inherit;font-size:12px;margin-right:6px}
#admin-leads .lead-st{font-size:11px;display:block;margin-top:4px}

/* ───────── 已精剪标记 + 工具按钮 ───────── */
.shoot-trim{font-size:11px;color:#8ff0bd;background:#10221a;border:1px solid #1d4d34;border-radius:5px;padding:2px 7px;font-weight:600}
.actbtn.trim{background:#241d12;border-color:#ffb020;color:#ffd089}
.actbtn.restore{background:#1a1d24;border-color:var(--line);color:var(--mut);font-size:13px}
.m-actbtn.trim{background:#241d12;border-color:#ffb020;color:#ffd089}
.m-actbtn.restore{background:#1a1d24;border-color:var(--line);color:var(--mut)}

/* ───────── 精剪弹层 ───────── */
.trim-modal{position:fixed;inset:0;background:rgba(0,0,0,.72);z-index:1000;display:flex;align-items:center;justify-content:center;padding:14px}
.trim-modal[hidden]{display:none}
/* 素材库选片 modal — 跟 trim-modal 同尺寸/层级,内部用卡片网格 */
.lib-modal{position:fixed;inset:0;background:rgba(0,0,0,.78);z-index:1001;display:flex;align-items:center;justify-content:center;padding:24px}
.lib-modal[hidden]{display:none}
/* 弹窗占满 92vh — 内部 grid overflow:auto 滚动,一屏装不下也能上下翻 */
.lib-panel{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px;max-width:1200px;width:100%;height:92vh;overflow:hidden;display:flex;flex-direction:column;gap:12px}
.lib-head{display:flex;align-items:center;gap:10px;justify-content:space-between}
.lib-x{background:transparent;border:1px solid var(--line);color:var(--fg);width:30px;height:30px;border-radius:50%;cursor:pointer;font-size:14px}
.lib-x:hover{background:#2a1a1f;border-color:#5a2230;color:#ff9aab}
.lib-filters{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.lib-filters input,.lib-filters select{padding:6px 10px;background:#181b22;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px}
.lib-filters input{flex:1;min-width:200px}
/* 根因(2026-06-27 排查):grid 默认 grid-auto-rows: auto 但在 flex container
   overflow 子项时会被压成等高几像素 — 用户 console 测到 card:181x9 而 img 自身
   renderH=318 但被 card overflow:hidden 切剩 9px。修法两条:
   ① grid-auto-rows: max-content — 行高严格按子项自然内容算,不再被父 flex 压
   ② align-content: start — 行不拉伸 + 顶对齐(不会被居中分布) */
.lib-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));grid-auto-rows:max-content;align-content:start;gap:14px;overflow:auto;flex:1;min-height:0;padding-right:6px}
/* card 用 block 不再 flex — flex column 跟 grid row 高互动会有坑;
   block 子项(img + meta)自然垂直排列,img 撑多高 card 就多高,稳。 */
.lib-card{background:#10131a;border:1px solid var(--line);border-radius:8px;overflow:hidden;cursor:pointer;display:block;transition:all .12s}
.lib-card:hover{border-color:var(--acc);transform:translateY(-2px)}
/* img 直接是 card 子元素,不再包 wrap — 少一层就少一个出错点。
   width:100% + height:auto = 浏览器按图片真实像素比例自渲染,绝对不会塌成横条。 */
.lib-thumb-wrap{position:relative;background:#0a0d12;line-height:0}
.lib-thumb-img{display:block;width:100%;height:auto;background:#0a0d12}
.lib-card-thumb-empty{display:flex;align-items:center;justify-content:center;height:200px;color:var(--mut);font-size:11px;background:#0a0d12}
.lib-card-dur{position:absolute;right:6px;bottom:6px;background:rgba(0,0,0,.72);color:#fff;padding:1px 6px;border-radius:3px;font-size:11px;font-weight:600;letter-spacing:.3px;line-height:1.4}
.lib-card-meta{padding:6px 8px;font-size:11px;display:flex;flex-direction:column;gap:2px}
.lib-card-title{font-size:12px;color:var(--fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lib-card-sub{color:var(--mut);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lib-card-row{display:flex;justify-content:space-between;color:var(--mut)}
.lib-card-grade{padding:0 5px;border-radius:3px;font-size:10px;font-weight:600}
.lib-card-grade.优{background:#3d2a1a;color:#ffb56b}
.lib-card-grade.良{background:#1a2a3d;color:#6bafff}
.lib-card-grade.差{background:#2a1a1f;color:#ff9aab}

/* ───────── 🎬 Seedance Prompt 库 + 生成页 ───────── */
.ark-key-card{background:#10131a;border:1px solid #2a3550;border-left-width:4px;border-radius:6px;padding:10px 14px;margin:10px 0}
.ark-key-card.warn{border-color:#5a3a18;border-left-color:#ffb020;background:#1a1612}
.ark-key-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px}
.ark-key-set{color:#7be0a8;font-weight:600}
.ark-key-unset{color:#ffb020;font-weight:600}
.ark-key-masked{font-family:ui-monospace,monospace;background:#0a0d12;border:1px solid var(--line);padding:2px 8px;border-radius:4px;color:#c9b6ff;letter-spacing:1px;user-select:all}
.ark-key-setup{margin-top:8px;font-size:12px}
.ark-key-setup summary{cursor:pointer;color:var(--acc);padding:6px 0}
.ark-key-setup pre{background:#0a0d12;border:1px solid var(--line);padding:8px 10px;border-radius:4px;font-size:12px;color:#c9d1d9;overflow:auto;white-space:pre;font-family:ui-monospace,monospace}
.ark-key-setup p{margin:6px 0;font-size:12px;color:var(--mut)}
.seedance-prompts .sp-text{white-space:pre-wrap;background:#0a0d12;border:1px solid var(--line);padding:6px 8px;border-radius:4px;font-size:12px;color:var(--mut);max-width:380px;max-height:90px;overflow:auto;font-family:ui-monospace,monospace;margin:0}
.seedance-prompts .sp-var{display:inline-block;background:#2d3850;color:#9bd0ff;padding:1px 6px;margin:1px 2px;border-radius:3px;font-size:11px;font-family:ui-monospace,monospace}
.seedance-prompts .sp-tag{display:inline-block;background:#1a2a1a;color:#7be0a8;padding:1px 6px;margin:1px 2px;border-radius:3px;font-size:11px}
.seedance-prompts .sp-jobid,.seedance-jobs .sp-jobid{font-family:ui-monospace,monospace;background:#10131a;border:1px solid var(--line);padding:1px 6px;border-radius:3px;font-size:11px;color:#9bd0ff}
.newprompt-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:8px 0}
/* ⚠ 冲突弹窗(原生 dialog)— 取代 confirm,按钮文字可定制 */
.conflict-modal{background:var(--card);border:1px solid var(--line);border-radius:12px;color:var(--fg);padding:0;max-width:680px;width:90vw;box-shadow:0 10px 40px rgba(0,0,0,.6)}
.conflict-modal::backdrop{background:rgba(0,0,0,.6)}
.conflict-modal-head{padding:14px 18px;border-bottom:1px solid var(--line);font-size:15px;color:#ffb020}
.conflict-modal-body{padding:14px 18px;max-height:55vh;overflow-y:auto;font-size:13px;line-height:1.6}
.conflict-modal-act{padding:12px 18px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}
.conflict-modal-act button{padding:8px 16px;border-radius:6px;font-size:13px;cursor:pointer;border:1px solid var(--line);background:#222732;color:var(--fg)}
.conflict-modal-act .ghost{background:transparent}
.conflict-modal-act .primary{background:var(--acc);border-color:var(--acc);color:#fff}
/* 🪄 AI 一键拆解面板 — 紫色调跟下面 4 段(蓝色)区分,提示是"AI 智能"区 */
.prompt-parse-pack{border:1px dashed #6a4a8a;border-radius:8px;padding:10px 12px;margin:10px 0;background:#15101c}
.prompt-parse-pack > summary{font-size:13px;color:#c0a4e0;padding:4px 0;cursor:pointer;list-style:none}
.prompt-parse-pack > summary::-webkit-details-marker{display:none}
.prompt-parse-pack > summary::before{content:"▶ ";color:#8a6aaa;transition:transform .15s}
.prompt-parse-pack[open] > summary::before{content:"▼ "}
.prompt-parse-pack .prompt-parse-body{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.prompt-parse-pack textarea{padding:8px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px;line-height:1.5;resize:vertical;width:100%;box-sizing:border-box}
.prompt-parse-pack textarea:focus{border-color:#8a6aaa;outline:none}
.prompt-parse-pack .prompt-parse-act{display:flex;gap:10px;align-items:center}
/* API-KEY 收缩态:summary 单行紧凑;展开后 body 才出现 */
.ark-key-card{margin-bottom:12px}
.ark-key-card > summary{cursor:pointer;list-style:none;padding:8px 12px;font-size:13px}
.ark-key-card > summary::-webkit-details-marker{display:none}
.ark-key-card > summary::before{content:"▶ ";color:var(--mut)}
.ark-key-card[open] > summary::before{content:"▼ "}
.ark-key-body{padding:10px 12px;border-top:1px solid var(--line)}
.ark-key-body pre{background:#0a0d12;padding:8px;border-radius:6px;font-size:11px;overflow-x:auto}
.ark-key-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
/* 4 段 prompt 容器 — 视觉上跟其它字段隔离,提示这是核心结构化区 */
.seg-pack{border:1px dashed #3a4a6a;border-radius:8px;padding:12px 14px;margin:10px 0;background:#0c0f17;display:flex;flex-direction:column;gap:8px}
.seg-pack > label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:#a0b4d8}
.seg-pack textarea{padding:8px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px;font-family:ui-monospace,monospace;line-height:1.5;resize:vertical}
.seg-pack textarea:focus{border-color:#4a6aaa;outline:none}
/* 预估费用条 — 醒目但不抢眼 */
.seedance-cost{background:#1a2a1a;border:1px solid #2d4a30;border-radius:6px;padding:8px 12px;margin:8px 0;font-size:13px;color:#7be0a8}
.seedance-cost b{font-size:16px;color:#aef0c8;margin:0 6px}
.seedance-cost .hint{color:#5a8a6a;font-size:11px;margin-left:8px}
/* 参考图行 — 文件 + URL 并排 */
.ref-img-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.ref-img-row > .hint{color:var(--mut);font-size:12px}
/* 提交区按钮组 */
.seedance-submit{display:flex;gap:10px;align-items:center;margin-top:8px}
#newPromptForm textarea{width:100%;min-height:80px;font:inherit;font-size:13px;padding:8px;background:#10131a;border:1px solid var(--line);border-radius:6px;color:var(--fg);box-sizing:border-box;font-family:ui-monospace,monospace}

.seedance-gen-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:12px}
@media (max-width:880px){.seedance-gen-grid{grid-template-columns:1fr}}
/* 3 栏布局:左 模板侧边栏(260) / 中 表单(1fr) / 右 预览(360) */
.seedance-gen-grid-3col{grid-template-columns:260px minmax(0,1fr) 360px}
@media (max-width:1180px){
  .seedance-gen-grid-3col{grid-template-columns:240px minmax(0,1fr)}
  .seedance-gen-grid-3col .seedance-gen-right{grid-column:1 / -1}
}
@media (max-width:760px){
  .seedance-gen-grid-3col{grid-template-columns:1fr}
  .seedance-gen-grid-3col .seedance-tpl-sidebar{position:static;max-height:280px}
}
/* 模板侧边栏 */
.seedance-tpl-sidebar{background:#10131a;border:1px solid var(--line);border-radius:10px;padding:10px;display:flex;flex-direction:column;gap:8px;position:sticky;top:10px;max-height:calc(100vh - 80px);overflow:hidden}
.tpl-sidebar-head{display:flex;align-items:center;justify-content:space-between;padding:0 4px}
.tpl-sidebar-head .ghost{padding:2px 8px;text-decoration:none;border-radius:4px;color:var(--mut);font-size:14px}
.tpl-sidebar-head .ghost:hover{color:var(--acc);background:#1d2230}
.tpl-search{padding:6px 10px;background:#0a0d12;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:12px}
.tpl-search:focus{border-color:var(--acc);outline:none}
.tpl-card-list{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:6px;padding-right:4px}
.tpl-card{background:#181b22;border:1px solid var(--line);border-radius:6px;padding:8px 10px;cursor:pointer;transition:all .12s}
.tpl-card:hover{border-color:var(--acc);background:#1d2230}
.tpl-card.is-active{border-color:var(--acc);background:#1a2230;box-shadow:inset 3px 0 0 var(--acc)}
.tpl-card-name{font-size:13px;color:var(--fg);font-weight:600;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tpl-card-meta{display:flex;gap:4px;flex-wrap:wrap}
.tpl-card-pill{background:#10131a;color:var(--mut);padding:1px 6px;border-radius:3px;font-size:10px;font-family:ui-monospace,monospace}
.tpl-card-pill.use{background:#102818;color:#7be0a8}
.tpl-card-tags{margin-top:4px;display:flex;gap:3px;flex-wrap:wrap}
.tpl-card-tags .tpl-tag{background:#2d3850;color:#9bd0ff;padding:0 5px;border-radius:3px;font-size:10px}
.seedance-gen-form{display:flex;flex-direction:column;gap:10px}
.seedance-gen-form label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--mut)}
.seedance-gen-form select,.seedance-gen-form input{padding:7px 10px;background:#181b22;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px}
.seedance-preview{background:#10131a;border:1px solid var(--line);border-radius:6px;padding:10px;margin:4px 0}
.seedance-preview .sp-preview-text{font-family:ui-monospace,monospace;font-size:12px;color:var(--mut);white-space:pre-wrap;max-height:120px;overflow:auto;margin-bottom:6px}
.seedance-preview .sp-preview-meta{font-size:11px;color:var(--acc)}
.seedance-vars{background:#0d1018;border:1px dashed var(--line);border-radius:6px;padding:10px}
.sp-var-row{flex-direction:row !important;align-items:center;gap:10px}
.sp-var-row span{flex:0 0 100px;font-size:12px}
.sp-var-row input{flex:1}
.seedance-gen-act{display:flex;align-items:center;gap:10px;margin-top:4px}
.seedance-rendered{background:#0a0d12;border:1px solid var(--line);padding:10px;border-radius:6px;font-family:ui-monospace,monospace;font-size:12px;color:#c9d1d9;white-space:pre-wrap;margin:4px 0;max-height:200px;overflow:auto}
.seedance-job{background:#10131a;border:1px solid var(--acc);border-radius:8px;padding:12px;margin-top:10px}
.job-status{display:inline-block;padding:3px 10px;border-radius:4px;font-weight:600;font-size:13px;margin-bottom:8px}
.job-status.queued,.job-status.running{background:#2d2a18;color:#ffd089}
.job-status.succeeded{background:#1a3a2a;color:#9affb0}
.job-status.failed{background:#3a1a1a;color:#ff9aab}
.job-status.cancelled{background:#2a2a3a;color:#c5c5e0}
.seedance-job .job-meta{font-size:12px;color:var(--mut);display:flex;flex-direction:column;gap:2px;margin-bottom:8px}
.seedance-jobs .job-st{display:inline-block;padding:1px 8px;border-radius:3px;font-size:12px;font-weight:600}
.seedance-jobs .job-st.ok{background:#1a3a2a;color:#9affb0}
.seedance-jobs .job-st.err{background:#3a1a1a;color:#ff9aab}
.seedance-jobs .job-st.run{background:#2d2a18;color:#ffd089}
/* 已用时进度文字(running 行) */
.seedance-jobs .job-progress{font-size:11px;color:var(--mut);margin-top:4px;font-family:ui-monospace,monospace}
/* table-layout: fixed 让 th/td 的 width 真正生效(auto 布局会按内容抢宽度,
   之前操作列 130px 被内容推挤到无形,视觉上按钮跑到成片列 — 用户报的 bug)。
   !important 是为了确保任何未来引入的 .userlist 补丁样式都不能覆盖它。 */
table.seedance-jobs{table-layout:fixed !important;width:100%}
/* 变量/错误列 — 用户要求缩窄一半 380→190 */
.seedance-jobs .job-vars-cell{width:190px;max-width:190px;word-break:break-all;vertical-align:top}
.seedance-jobs .job-err-truncate{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;line-height:1.4;cursor:help;word-break:break-all}
.seedance-jobs .job-err-truncate:hover{color:#ffb0b0}
/* 成片缩略图 */
.seedance-jobs .job-out-cell{width:190px;min-width:190px;max-width:190px;vertical-align:top}
.seedance-jobs .job-video-thumb{width:160px;max-width:100%;height:auto;background:#000;border-radius:6px;border:1px solid var(--line);display:block;margin-bottom:6px}
.seedance-jobs .job-video-thumb:hover{border-color:var(--acc)}
.seedance-jobs .job-out-btns{display:flex;flex-wrap:wrap;gap:4px}
.seedance-jobs .job-out-empty{width:160px;height:90px;display:flex;align-items:center;justify-content:center;background:#0a0d12;border:1px dashed var(--line);border-radius:6px;color:var(--mut);font-size:12px;margin-bottom:6px}
/* 操作列 — 用户要求拉宽 130→170,按钮竖排 100% 宽,视觉独立 */
.seedance-jobs .job-op-cell{width:170px;min-width:170px;max-width:170px;vertical-align:top}
.seedance-jobs .job-op-cell .rowbtn{display:block;width:100%;margin-bottom:4px;text-align:center;padding:6px 8px}
/* 时间列固定宽 — 避免 fixed 布局下算不出合理宽 */
.seedance-jobs .job-time-cell{width:130px;min-width:130px;max-width:130px;vertical-align:top;font-size:12px;line-height:1.5}
.actbtn.lib{background:#1a1a26;border:1px solid #3a3a55;color:#c5c5e0}
.actbtn.lib:hover{background:#222236;border-color:#5a5a85}
.trim-panel{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px;max-width:720px;width:100%;max-height:92vh;overflow:auto;display:flex;flex-direction:column;gap:12px}
.trim-head{display:flex;justify-content:space-between;align-items:center;color:var(--fg)}
.trim-x{background:transparent;border:none;color:var(--mut);font-size:18px;cursor:pointer;padding:2px 8px}
.trim-x:hover{color:#ff4d6d}
#trimVideo{width:100%;max-height:55vh;background:#000;border-radius:8px;display:block}
/* 双滑块叠放在同一条标尺上,各占独立 z 层。轨道由 marks 渲染阴影色块。 */
.trim-axis{position:relative;height:50px}
.trim-marks{position:absolute;left:0;right:0;top:18px;height:14px;border-radius:7px;background:#1a1d24;border:1px solid var(--line);pointer-events:none}
.trim-axis input[type=range]{position:absolute;left:0;right:0;width:100%;height:50px;margin:0;background:transparent;pointer-events:none;-webkit-appearance:none;appearance:none}
.trim-axis input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:22px;height:22px;border-radius:50%;border:2px solid #fff;cursor:pointer;pointer-events:auto;margin-top:-4px;box-shadow:0 2px 6px rgba(0,0,0,.4)}
.trim-axis input[type=range]::-moz-range-thumb{width:22px;height:22px;border-radius:50%;border:2px solid #fff;cursor:pointer;pointer-events:auto;box-shadow:0 2px 6px rgba(0,0,0,.4)}
#trimIn::-webkit-slider-thumb{background:#3ddc84}
#trimIn::-moz-range-thumb{background:#3ddc84}
#trimOut::-webkit-slider-thumb{background:#ff4d6d}
#trimOut::-moz-range-thumb{background:#ff4d6d}
.trim-axis input[type=range]::-webkit-slider-runnable-track{height:50px;background:transparent;border:none}
.trim-axis input[type=range]::-moz-range-track{height:50px;background:transparent;border:none}
.trim-info{display:flex;gap:14px;align-items:center;flex-wrap:wrap;font-size:13px;color:var(--mut)}
.trim-info b{color:var(--fg)}
.trim-keep b{color:#3ddc84}
.trim-warn{color:#ffb020;font-size:12px;flex-basis:100%}
.trim-act{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.trim-act .ghost{padding:8px 12px;font-size:13px;background:#222732;border:1px solid var(--line);color:var(--fg);border-radius:6px;cursor:pointer;font:inherit;font-weight:600}
.trim-act .primary{padding:10px 16px;font-size:14px;background:var(--acc);border:1px solid var(--acc);color:#fff;border-radius:8px;cursor:pointer;font:inherit;font-weight:700;margin-left:auto}
.trim-act .primary:disabled{opacity:.55;cursor:not-allowed}
.trim-act .hint{font-size:12px;flex-basis:100%}

/* ───────── 单镜 AI 改写补充指令（B 方案,每镜独立）───────── */
/* 桌面 produce.html */
.r-prompt{margin:6px 0 8px}
.r-prompt>summary{cursor:pointer;font-size:12px;color:#c5a4ff;background:#1a1626;border:1px dashed #4a3a6a;border-radius:6px;padding:5px 10px;display:inline-block;list-style:none}
.r-prompt>summary::-webkit-details-marker{display:none}
.r-prompt>summary:hover{border-color:#c5a4ff}
.r-prompt-tag{margin-left:6px;font-size:10px;background:#c5a4ff;color:#11141b;padding:1px 6px;border-radius:8px;font-weight:700}
.r-prompt-input{margin-top:6px;width:100%;padding:8px 10px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px;font:inherit;font-size:13px;box-sizing:border-box}
.r-prompt-input:focus{outline:none;border-color:#c5a4ff}
.r-prompt .hint{display:block;margin-top:4px}

/* 手机 m_task.html */
.m-prompt{margin:6px 0 8px}
.m-prompt>summary{cursor:pointer;font-size:12px;color:#c5a4ff;background:#1a1626;border:1px dashed #4a3a6a;border-radius:6px;padding:6px 10px;display:inline-block;list-style:none}
.m-prompt>summary::-webkit-details-marker{display:none}
.m-prompt-tag{margin-left:6px;font-size:10px;background:#c5a4ff;color:#11141b;padding:1px 6px;border-radius:8px;font-weight:700}
.m-prompt-input{margin-top:6px;width:100%;padding:9px 11px;border:1px solid var(--line);background:#10131a;color:var(--fg);border-radius:6px;font:inherit;font-size:14px;box-sizing:border-box}
.m-prompt-input:focus{outline:none;border-color:#c5a4ff}

/* ───────── 快捷音色切换条(分镜列顶部) ───────── */
/* 纯 BGM 模式(audio_mode=bgm_only):藏掉所有跟 TTS / 字幕相关的 UI。
   产品决策:无文案 / 无音色 / 无字幕,只拼视频 + BGM。
   .tts-only 是模板里给"仅 TTS 模式有意义"的字段打的 class。 */
#produce[data-audio-mode="bgm_only"] .tts-only,
#produce[data-audio-mode="bgm_only"] .quickvoice,
#produce[data-audio-mode="bgm_only"] .r-script,
#produce[data-audio-mode="bgm_only"] .r-prompt,
#produce[data-audio-mode="bgm_only"] .r-tools,
#produce[data-audio-mode="bgm_only"] .play-vo,
#produce[data-audio-mode="bgm_only"] .shoot-vo {
  display: none !important;
}

.quickvoice{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 14px;margin:8px 0 12px;background:#171a21;border:1px solid var(--line);border-left:3px solid var(--acc);border-radius:8px}
.quickvoice .qv-label{font-size:13px;color:var(--mut);font-weight:600;flex:none}
.quickvoice .qv-select{flex:1;min-width:160px;max-width:340px;padding:8px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:14px}
.quickvoice .qv-btn{padding:8px 14px;background:#1f2a36;border:1px solid #36a3ff;color:#9bd0ff;border-radius:6px;cursor:pointer;font:inherit;font-weight:600;font-size:13px;white-space:nowrap}
.quickvoice .qv-btn:hover{background:#2a3a4a}
.quickvoice .qv-btn:disabled{opacity:.5;cursor:wait}
.quickvoice .qv-st{font-size:12px;color:var(--mut);flex-basis:100%;margin-top:2px;min-height:1em}
/* 🎬 开头钩子开关 · 紧贴 .qv-btn 右侧 */
.quickvoice .qv-intro-toggle{display:flex;align-items:center;gap:6px;
  padding:6px 12px;background:#1a1f28;border:1px solid var(--line);
  border-radius:6px;cursor:pointer;font-size:13px;color:var(--fg);
  white-space:nowrap;user-select:none}
.quickvoice .qv-intro-toggle:hover{border-color:var(--acc);background:#1f2630}
.quickvoice .qv-intro-toggle input{accent-color:var(--acc);cursor:pointer}

/* "镜 0" 钩子卡片:跟 .shoot 同视觉但加左边强调 */
.intro-shoots{margin-bottom:14px;padding:0;list-style:none}
.intro-shoot{border-left:3px solid #5cc8a8 !important}
.intro-shoot .shoot-id{background:#15241f;color:#5cc8a8;border:1px solid #2f6b56}
.intro-ready{margin:8px 0}
.intro-ready-vid{display:block;width:100%;max-width:240px;border-radius:6px;
  background:#000}
.intro-trim{margin:8px 0;padding:10px 12px;background:#0a0e14;
  border:1px solid #5cc8a8;border-radius:6px;
  box-shadow:0 0 0 1px rgba(92,200,168,.15) inset}
.intro-trim > video{display:block;width:100%;max-width:280px;
  border-radius:6px;background:#000;margin:0 auto 8px}
.intro-trim-tip{font-size:13px;color:#5cc8a8;font-weight:600;
  text-align:center;padding:6px 0;margin-bottom:6px;
  border-bottom:1px dashed rgba(92,200,168,.3)}
.intro-commit-big{display:block;width:100%;margin-top:10px;
  padding:12px 16px !important;font-size:15px !important;font-weight:700 !important}
/* intro 卡:未上传时的红色状态 banner,让用户一眼知道还没就绪 */
.intro-status-banner{margin:8px 0 6px;padding:8px 12px;
  background:#2a1418;color:#ff9aab;border-left:3px solid #ff4d6d;
  border-radius:4px;font-size:12.5px;line-height:1.6}
.intro-status-banner b{color:#ffb4c0}

/* intro 文案 + 配音区:commit 后才显示;视觉跟 shot 卡的 textarea 区一致 */
.intro-script-wrap{margin:10px 0 4px}
.intro-r-script{width:100%;background:#10131a;border:1px solid var(--line);
  color:var(--fg);border-radius:6px;padding:8px 10px;font:inherit;font-size:13px;
  resize:vertical;min-height:54px}
.intro-r-script:focus{outline:none;border-color:#5cc8a8}
/* 音轨选择 radio:摄影师在原音 / 配音之间二选一 */
.intro-audio-mode{display:flex;gap:10px;align-items:center;flex-wrap:wrap;
  margin:0 0 8px;padding:6px 10px;background:#10131a;
  border:1px solid var(--line);border-radius:6px;font-size:13px}
.intro-am-label{color:var(--mut);font-size:12px;margin-right:2px}
.intro-am-opt{display:inline-flex;align-items:center;gap:5px;cursor:pointer;
  padding:3px 8px;border-radius:5px}
.intro-am-opt input{accent-color:#5cc8a8;cursor:pointer}
.intro-am-opt.is-disabled{color:var(--mut);cursor:not-allowed}
.intro-am-opt.is-disabled input{cursor:not-allowed}
.intro-am-tip{font-size:11px;color:var(--mut);margin-left:4px}
@media (max-width: 768px) {
  .intro-audio-mode{gap:6px;padding:8px}
  .intro-am-label{flex-basis:100%;margin-bottom:2px}
}

.intro-vo-row{display:flex;align-items:center;gap:10px;margin-top:8px;
  padding:6px 8px;background:#10131a;border:1px solid var(--line);border-radius:6px}
.intro-vo-row audio{flex:0 1 240px;height:36px;max-height:36px;display:block}
.intro-vo-row .hint{flex:1;font-size:11.5px;color:var(--mut);line-height:1.5}
@media (max-width: 768px) {
  /* 国内手机浏览器(华为/UC/MIUI)对 <audio controls> 默认 height 很高,
     用空白填满父容器 — 必须固定 height 否则会出现整段黑色 dead zone */
  .intro-vo-row{flex-direction:column;align-items:stretch;gap:6px;padding:8px 10px}
  .intro-vo-row audio{width:100%;height:40px;max-height:40px}
  .intro-vo-row .hint{font-size:12px}
}
.actbtn.del{color:#ff8c8c;border-color:#5a2a2a}
.actbtn.primary{background:#5cc8a8;color:#0a1118;border-color:#5cc8a8;font-weight:600}
.actbtn.primary:hover{background:#6fd4b8}

/* 手机端 shoot-btns 强制换行 + 拉开间距,避免按钮被遮 */
@media (max-width: 768px) {
  .shoot-btns{flex-wrap:wrap !important;gap:6px !important}
  .shoot-btns .actbtn{flex:0 0 auto;min-height:34px;padding:6px 10px;font-size:12px}
  .intro-trim > video{max-width:100%}
  .intro-ready-vid{max-width:100%}
  .quickvoice{flex-direction:column;align-items:stretch}
  .quickvoice .qv-intro-toggle{align-self:flex-start}
}
/* 手机端紧凑:窄屏下让 select 和按钮各占一半,而不是挤到下行 */
.m-quickvoice{margin:6px 0 10px;padding:8px 12px}
.m-quickvoice .qv-label{flex-basis:100%;margin-bottom:2px}
@media(max-width:600px){
  .quickvoice .qv-select{min-width:0}
}

/* ───────── 标题风格指令(任务级 prompt) ───────── */
/* .pubform 是 1fr 1fr 1fr 三列 grid;不跨行就只占 1/3 宽被压成竖窄条
   (预设按钮要换 7 次行)。强制跨整行才能正常铺开。 */
.title-prompt-wrap{grid-column:1/-1;margin:6px 0 8px;background:#171a21;border:1px solid var(--line);border-left:3px solid #b18bff;border-radius:8px;padding:8px 12px}
.title-prompt-wrap>summary{cursor:pointer;font-size:13px;font-weight:600;color:#c9b6ff}
.title-prompt-wrap>summary::-webkit-details-marker{display:none}
.title-prompt-wrap>summary::before{content:"▸ ";color:var(--mut)}
.title-prompt-wrap[open]>summary::before{content:"▾ "}
.title-prompt-wrap .tp-tag{margin-left:6px;font-size:11px;padding:2px 7px;border-radius:5px;background:#1a1626;border:1px solid #4a3a78;color:#b18bff}
.title-prompt-body{margin-top:8px;display:flex;flex-direction:column;gap:8px}
.title-prompt-body textarea{width:100%;box-sizing:border-box;padding:8px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px;resize:vertical;line-height:1.5}
.title-prompt-body textarea:focus{outline:none;border-color:#b18bff}
.tp-presets{display:flex;flex-wrap:wrap;gap:6px}
.tp-preset{padding:5px 11px;font-size:12px;background:#1a1626;border:1px solid #332a4d;color:#c9b6ff;border-radius:5px;cursor:pointer;font:inherit;font-weight:500;white-space:nowrap}
.tp-preset:hover{background:#231d33;border-color:#b18bff}
.tp-preset.tp-clear{background:#1f1418;border-color:#5a2230;color:#ff9aab;margin-left:auto}
.tp-preset.tp-clear:hover{background:#2a1a1f;border-color:#ff4d6d}

/* ───────── 排发布:标题区 + tab + 派给兼职面板 ───────── */
/* 标题区(两个 tab 共用),flex 列布局,跨整行不再走 grid */
.pub-title-block{margin:8px 0 14px;display:flex;flex-direction:column;gap:8px}
.pub-title-block .pubtitle{position:relative;display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--mut)}
.pub-title-block .pubtitle textarea{padding:6px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px;resize:vertical;min-height:42px}
.pub-title-block .pubtitle button{position:absolute;right:6px;top:24px;padding:4px 10px;font-size:12px;background:#1d2230;border:1px solid var(--acc);color:var(--acc);border-radius:6px;cursor:pointer}
.pub-title-block .pubtitle button:disabled{opacity:.5;cursor:not-allowed}

/* tab 切换条:横排两个按钮,选中加底边色;深色 underline-tabs 风格 */
.pub-tabs{display:flex;gap:0;border-bottom:1px solid var(--line);margin:14px 0 0}
.pubtab{padding:10px 18px;font:inherit;font-size:14px;font-weight:600;background:transparent;border:0;border-bottom:2px solid transparent;color:var(--mut);cursor:pointer;transition:color .12s,border-color .12s;margin-bottom:-1px}
.pubtab:hover{color:var(--fg)}
.pubtab.is-active{color:var(--acc);border-bottom-color:var(--acc)}
.pubtab-panel{padding:14px 0 4px}
.pubtab-panel[hidden]{display:none}

/* partner tab:平台选择 + 兼职多选 + 派单按钮(原 .dispatch-wrap 已废,但保留兼容) */
.dispatch-form{display:grid;grid-template-columns:240px;gap:12px;margin-bottom:10px}
.dispatch-form label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--mut)}
.dispatch-form select{padding:6px 10px;background:#10131a;border:1px solid var(--line);color:var(--fg);border-radius:6px;font:inherit;font-size:13px}
/* 旧 .dispatch-wrap 样式留着,以防其他模板还在用;新结构不再依赖 */
.dispatch-wrap{margin:6px 0 8px;background:#171a21;border:1px solid var(--line);border-left:3px solid #5cc8a8;border-radius:8px;padding:8px 12px}
.dispatch-wrap>summary{cursor:pointer;font-size:13px;font-weight:600;color:#a8e3cc}
.dispatch-wrap>summary::-webkit-details-marker{display:none}
.dp-tag{margin-left:6px;font-size:11px;padding:2px 7px;border-radius:5px;background:#15241f;border:1px solid #2f6b56;color:#5cc8a8}
.dispatch-body{margin-top:8px;display:flex;flex-direction:column;gap:10px}
/* 兼职多选列表:深色 chip 网格,每行 2-3 个,大屏自适应 */
.dp-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:6px;max-height:260px;overflow-y:auto;padding:4px;background:#10131a;border:1px solid var(--line);border-radius:6px}
.dp-list .dp-empty{grid-column:1/-1;color:var(--mut);padding:8px;text-align:center;font-size:12px}
.dp-item{display:flex;align-items:center;gap:8px;padding:6px 10px;background:#14181f;border:1px solid var(--line);border-radius:5px;cursor:pointer;font-size:12.5px;color:var(--fg);user-select:none}
.dp-item:hover{background:#1a2028;border-color:#2f6b56}
.dp-item input{margin:0;cursor:pointer;accent-color:#5cc8a8}
/* locked = 已发布/已核验:禁用,灰底,不可勾 */
.dp-item.dp-locked{opacity:.45;cursor:not-allowed;background:#101319}
.dp-item.dp-locked:hover{background:#101319;border-color:var(--line)}
.dp-item.dp-locked input{cursor:not-allowed}
/* pending = 已派但未发:可勾,左边条用琥珀色暗示"会覆盖原派单" */
.dp-item.dp-pending{border-left:3px solid #e6a64a;padding-left:7px;background:#1a1812}
.dp-item.dp-pending:hover{background:#221f15;border-color:#e6a64a;border-left-color:#e6a64a}
.dp-item .dp-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dp-item .dp-meta{font-size:11px;color:var(--mut);font-family:ui-monospace,Menlo,monospace}
.dp-badge{font-size:10.5px;padding:1px 6px;border-radius:4px;font-weight:600;letter-spacing:.3px;white-space:nowrap}
.dp-badge-locked{background:#1a1f2a;border:1px solid #2c3340;color:#7a8597}
.dp-badge-pending{background:#241d0f;border:1px solid #6b4e16;color:#e6a64a}
/* 今日派单数徽章:0 灰、1-3 普通绿、≥4 警告色(避免压一个人) */
.dp-today{font-size:10.5px;padding:1px 6px;border-radius:4px;font-weight:600;white-space:nowrap}
.dp-today.today-zero{background:#10131a;border:1px solid var(--line);color:var(--mut)}
.dp-today.today-some{background:#15241f;border:1px solid #2f6b56;color:#5cc8a8}
.dp-today.today-busy{background:#2a1f0a;border:1px solid #5a4520;color:#e6c47a}
.dp-act{display:flex;align-items:center;gap:12px}

/* 兼职收款码缩略图(管理员表 · 结算时点开扫码) */
.qr-thumb-wrap{margin-top:6px;display:inline-block}
.qr-thumb{display:block;width:72px;height:72px;object-fit:cover;background:#fff;
  padding:3px;border-radius:6px;border:1px solid var(--line);cursor:zoom-in;
  transition:transform .12s}
.qr-thumb:hover{transform:scale(1.05);border-color:var(--acc)}
.qr-thumb-note{font-size:11px;color:var(--mut);max-width:84px;margin-top:2px;
  line-height:1.3;word-break:break-all}
.qr-thumb-none{margin-top:6px;font-size:11px;color:#e6c47a;
  background:#241c0a;border-left:2px solid #5a4520;padding:4px 6px;
  border-radius:3px;display:inline-block}

/* 开头模板·任务级上传裁剪 UI(produce 设置区 + admin_intros 共享) */
.introctl{margin:8px 0;padding:8px 10px;background:#0a0e14;
  border:1px solid var(--line);border-radius:5px}
.introctl-row{display:flex;align-items:center;gap:10px;
  font-size:12px;color:var(--mut);margin:4px 0}
.introctl-row > span{width:96px;flex-shrink:0}
.introctl-row input[type=range]{flex:1;accent-color:var(--acc);cursor:pointer}
.introctl-row input[type=number]{width:72px;padding:3px 6px;
  background:#10131a;border:1px solid var(--line);color:var(--fg);
  border-radius:4px;font:inherit;font-size:12px}
