:root{
--ink:#1a1d21;--soft:#6b7280;--faint:#9ca3af;
--line:#e5e7eb;--line2:#f0f1f3;
--paper:#f7f8fa;--card:#fff;
--brand:#2b5cff;--brand-soft:#eef2ff;
--pass:#0f9d58;--pass-soft:#e6f4ea;
--reject:#d93025;--reject-soft:#fce8e6;
--warn:#b45309;--warn-soft:#fef3c7;
--sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
--mono:ui-monospace,"SF Mono",Menlo,monospace;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}

/* ── 顶栏 ── */
.topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;justify-content:space-between;
height:52px;padding:0 20px;background:var(--card);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:9px;font-weight:600;font-size:15px;letter-spacing:.2px}
.dot{width:8px;height:8px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.topright{display:flex;align-items:center;gap:14px}
.stat{font-size:12px;color:var(--soft);font-variant-numeric:tabular-nums}
.ghost{border:1px solid var(--line);background:var(--card);color:var(--soft);font-size:12px;
padding:5px 11px;border-radius:7px;cursor:pointer;font-family:inherit}
.ghost:hover{border-color:var(--faint);color:var(--ink)}

/* ── 左侧竖排导航（按平台分组）── */
.shell{display:flex;align-items:flex-start;min-height:calc(100vh - 52px)}
.tabs{position:sticky;top:52px;z-index:35;flex:0 0 194px;width:194px;height:calc(100vh - 52px);
  display:flex;flex-direction:column;gap:2px;padding:12px 10px 20px;overflow-y:auto;
  background:var(--card);border-right:1px solid var(--line)}
.navgroup{display:flex;align-items:center;gap:6px;padding:11px 9px 5px;
  font-size:11px;font-weight:700;color:var(--faint);letter-spacing:1px}
.navgroup:first-child{padding-top:2px}
.navgroup em{font-style:normal;font-weight:600;font-size:9.5px;letter-spacing:0;
  background:var(--warn-soft);color:var(--warn);padding:1px 6px;border-radius:8px}
.navgroup:not(:has(em)){border-top:1px solid var(--line2);margin-top:6px;padding-top:12px}
.navgroup:first-child{border-top:0;margin-top:0}
.navbadge{margin-left:auto;background:var(--line2);color:var(--soft)}
.tab.active .navbadge{background:#fff;color:var(--brand)}
.tab{appearance:none;border:0;background:none;font-family:inherit;font-size:13.5px;color:var(--soft);
  padding:9px 12px;cursor:pointer;border-radius:8px;white-space:nowrap;width:100%;text-align:left;
  display:flex;align-items:center;gap:8px;transition:background .14s,color .14s}
.tab:hover{color:var(--ink);background:var(--line2)}
.tab.active{color:var(--brand);background:var(--brand-soft);font-weight:600}
.tab em{font-style:normal;font-size:11px;background:var(--line2);color:var(--soft);
  padding:1px 6px;border-radius:9px;font-variant-numeric:tabular-nums}
.tab.active em{background:#fff;color:var(--brand);box-shadow:0 0 0 1px rgba(43,92,255,.28)}

main{flex:1;max-width:1240px;margin:0 auto;padding:22px 20px 60px;min-width:0}

/* 窗口不够宽时，侧边栏退回顶部横排，避免挤掉内容 */
@media (max-width:900px){
  .shell{display:block}
  .tabs{position:sticky;top:52px;flex:none;width:auto;height:auto;flex-direction:row;
    gap:2px;padding:0 12px;border-right:0;border-bottom:1px solid var(--line);overflow-x:auto}
  .tab{width:auto;border-radius:0;padding:12px 14px}
  .tab.active{background:none;box-shadow:inset 0 -2px 0 var(--brand)}
  .tab.active em{background:var(--brand);color:#fff;box-shadow:none}
  .tab em{margin-left:0}
}
.view{display:none}
.view.active{display:block}

/* ── 提示条 ── */
.banner{background:var(--brand-soft);border:1px solid #d5defb;color:#1e3a8a;
padding:10px 14px;border-radius:9px;font-size:13px;margin-bottom:16px;display:flex;
justify-content:space-between;align-items:center;gap:12px}
.banner.warn{background:var(--warn-soft);border-color:#fde68a;color:#78350f}
.hidden{display:none !important}

/* ── 审核台布局 ── */
#reviewLayout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:22px;align-items:start}
@media (max-width:1100px){#reviewLayout{grid-template-columns:1fr}}

.stage{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px;overflow:hidden}
.media-frame{position:relative;background:#0f1115;border-radius:10px;overflow:hidden;
aspect-ratio:9/16;max-height:640px;margin:0 auto;width:100%;max-width:420px;
display:flex;align-items:center;justify-content:center}
.media-frame img{width:100%;height:100%;object-fit:contain;display:block;user-select:none;-webkit-user-drag:none}
/* ⚠️ 只给「没有预览图」的占位层用，必须限定在 .media-frame 里面。
   这个类名同时被右栏两个区块标题复用（<div class="ph"><b>检测结果</b></div>），
   以前写成裸 .ph 的 position:absolute;inset:0，区块标题就变成两张
   铺满整页的透明层，把「打回/通过/撤销」和整页点击全吞掉。 */
.media-frame .ph{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px}
.ph-icon{width:54px;height:54px;border:2px dashed #3d434d;border-radius:12px;position:relative}
.ph-icon::after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
width:0;height:0;border-left:13px solid #3d434d;border-top:8px solid transparent;border-bottom:8px solid transparent;margin-left:2px}
.ph-text{color:#5c636e;font-size:12.5px}

.count-badge{position:absolute;top:10px;left:10px;background:rgba(15,17,21,.72);color:#e8eaed;
font-size:11.5px;padding:3px 9px;border-radius:20px;font-variant-numeric:tabular-nums;backdrop-filter:blur(6px)}
.stamp{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-14deg);
font-size:26px;font-weight:800;letter-spacing:3px;padding:8px 22px;border-radius:8px;
opacity:0;transition:opacity .1s;pointer-events:none}
.stamp.show-pass{opacity:1;color:var(--pass);border:3px solid var(--pass);background:rgba(230,244,234,.9)}
.stamp.show-reject{opacity:1;color:var(--reject);border:3px solid var(--reject);background:rgba(252,232,230,.9)}

.veto-flag{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(217,48,37,.95) 30%);
color:#fff;font-size:12.5px;padding:26px 14px 11px;font-weight:600}

.byline{display:flex;flex-direction:column;gap:3px;padding:13px 3px 4px}
.byline #candidateTitle{font-size:15px;font-weight:600}
.byline .meta{font-size:12px;color:var(--soft)}

.actions{display:grid;grid-template-columns:1fr auto 1fr;gap:10px;padding:14px 3px 3px}
.act{appearance:none;font-family:inherit;font-size:14.5px;font-weight:600;padding:13px 0;
border-radius:10px;cursor:pointer;border:1.5px solid;transition:transform .08s,box-shadow .14s}
.act:active{transform:scale(.985)}
.act .k{opacity:.7;font-weight:400}
.act.pass{background:#0f9d58;border-color:#0f9d58;color:#fff;box-shadow:0 1px 3px rgba(15,157,88,.22)}
.act.pass:hover{background:#0b8049;border-color:#0b8049}
.act.reject{background:#fff;border-color:#f0b3ae;color:#c5221f}
.act.reject:hover{background:#fce8e6;border-color:#e88b84}
.act.undo{background:var(--card);border-color:var(--line);color:var(--soft);padding:13px 18px;font-weight:400}
.act.undo:hover{border-color:var(--faint);color:var(--ink)}

/* ── 右侧面板 ── */
.panel{display:flex;flex-direction:column;gap:14px}
.pblock{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 14px}
.plabel{font-size:12px;font-weight:600;color:var(--soft);letter-spacing:.4px;
text-transform:uppercase;margin-bottom:9px;display:flex;justify-content:space-between;align-items:baseline}
.plabel .hint{font-weight:400;text-transform:none;letter-spacing:0;color:var(--faint);font-size:11.5px}

.precheck{display:flex;flex-direction:column;gap:6px;font-size:12.5px}
.pc-row{display:flex;align-items:flex-start;gap:7px;color:var(--soft)}
.pc-row .mk{flex-shrink:0;width:15px;font-weight:700}
.pc-ok .mk{color:var(--pass)}
.pc-bad .mk{color:var(--reject)}
.pc-bad{color:var(--reject);font-weight:500}
.pc-warn .mk{color:var(--warn)}
.pc-warn{color:var(--warn)}

.chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
.chip{font-size:12px;padding:4px 10px;border-radius:15px;border:1px solid var(--line);
background:var(--card);color:var(--soft);cursor:pointer;font-family:inherit;transition:all .12s}
.chip:hover{border-color:var(--faint)}
.chip.on{background:var(--reject-soft);border-color:#f4c7c3;color:#a01b12;font-weight:600}
textarea{width:100%;border:1px solid var(--line);border-radius:8px;padding:8px 10px;
font-family:inherit;font-size:12.5px;resize:vertical;color:var(--ink);background:var(--card)}
textarea:focus{outline:none;border-color:var(--brand)}

.scores{display:flex;flex-direction:column;gap:5px}
.srow{display:grid;grid-template-columns:1fr 74px 30px;align-items:center;gap:8px;font-size:12px}
.srow span:first-child{color:var(--soft)}
.srow .mx{color:var(--faint);font-size:11px;text-align:right}
.srow input{width:100%;border:1px solid var(--line);border-radius:6px;padding:3px 7px;
font-family:var(--mono);font-size:12px;text-align:center;color:var(--ink)}
.srow input:focus{outline:none;border-color:var(--brand)}

/* ── 空态 ── */
.empty{text-align:center;padding:70px 20px;background:var(--card);border:1px solid var(--line);border-radius:14px}
.empty h2{font-size:17px;margin:0 0 8px;font-weight:600}
.empty p{color:var(--soft);margin:0 0 20px;font-size:13px}
.primary{appearance:none;background:var(--brand);color:#fff;border:0;border-radius:9px;
padding:10px 20px;font-size:13.5px;font-weight:600;cursor:pointer;font-family:inherit}
.primary:hover{background:#1e4ae0}

/* ── 拆解网格 ── */
.leadbar{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px}
.leadbar p{margin:0;color:var(--soft);font-size:13px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(255px,1fr));gap:14px}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden;
transition:border-color .14s,box-shadow .14s}
.card:hover{border-color:#d1d5db;box-shadow:0 2px 10px rgba(16,24,40,.05)}
.card .thumb{aspect-ratio:16/10;background:#0f1115;display:flex;align-items:center;justify-content:center;position:relative}
.card .thumb img{width:100%;height:100%;object-fit:cover}
.card .thumb .none{color:#4b515b;font-size:12px}
.card .body{padding:11px 13px 13px}
.card h4{margin:0 0 5px;font-size:13.5px;font-weight:600;line-height:1.4}
.card .sub{font-size:11.5px;color:var(--soft);margin-bottom:9px}
.card .cardacts{display:flex;gap:6px}
.mini{flex:1;font-size:12px;padding:6px 0;border-radius:7px;border:1px solid var(--line);
background:var(--card);color:var(--soft);cursor:pointer;font-family:inherit}
.mini.yes{background:var(--pass-soft);border-color:#b7dfc4;color:#0b6b3d;font-weight:600}
.mini.no{background:var(--reject-soft);border-color:#f4c7c3;color:#a01b12;font-weight:600}

/* ── 素材池表 ── */
.filterbar{display:flex;gap:7px;margin-bottom:14px;flex-wrap:wrap}
.fchip{font-size:12.5px;padding:6px 13px;border-radius:16px;border:1px solid var(--line);
background:var(--card);color:var(--soft);cursor:pointer;font-family:inherit}
.fchip.active{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.pooltable{background:var(--card);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.prow{display:grid;grid-template-columns:30px 2.1fr 1fr .8fr .9fr .8fr .9fr 52px 92px 46px;gap:10px;
  padding:11px 15px;border-bottom:1px solid var(--line2);align-items:center;font-size:12.5px}
/* 投放平台归属：点一下切换进/出该平台 */
.platcell{display:flex;justify-content:center}
.plattags{display:flex;gap:4px}
.ptag{appearance:none;font-family:inherit;font-size:11px;padding:2px 8px;border-radius:9px;
  border:1px solid var(--line);background:var(--card);color:var(--faint);cursor:pointer}
.ptag:hover{border-color:var(--faint)}
.ptag.on{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.pchk{display:flex;align-items:center;justify-content:center}
.pchk input{width:14px;height:14px;accent-color:var(--brand);cursor:pointer;margin:0}
.prow.sel{background:var(--brand-soft)}
.prow.hd.sel{background:#fafbfc}
/* 批量操作条 */
.bulkbar{display:flex;align-items:center;gap:12px;background:var(--card);
  border:1px solid #d5defb;border-radius:11px;padding:9px 14px;margin-bottom:12px;font-size:12.5px}
.bulkall{display:flex;align-items:center;gap:7px;cursor:pointer;color:var(--soft)}
.bulkall input{width:14px;height:14px;accent-color:var(--brand);cursor:pointer;margin:0}
.bulkall b{color:var(--ink);font-variant-numeric:tabular-nums}
.bulksep{width:1px;height:18px;background:var(--line)}
.bulkcount{color:var(--soft)}
.bulkcount b{color:var(--brand);font-size:13px;font-variant-numeric:tabular-nums}
.bulkspacer{flex:1}
.sm{padding:4px 11px;font-size:12px}
.danger2{background:var(--reject);border:1px solid var(--reject);color:#fff;
  border-radius:8px;cursor:pointer;font-family:inherit;font-weight:500}
.danger2:hover{background:#b0251b}
.danger2:disabled{background:var(--line2);border-color:var(--line);color:var(--faint);cursor:default}
/* 各平台审片结论：✓ 合规 / ✕ 有问题 / · 没审 */
.pmarks{display:flex;gap:4px;justify-content:center}
.pmark{display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;
  border-radius:5px;font-size:10.5px;font-weight:700;cursor:default}
.pm-ok{background:var(--pass-soft);color:#0b6b3d}
.pm-bad{background:var(--reject-soft);color:#a01b12}
.pm-none{background:var(--line2);color:var(--faint);font-weight:400}
.prow.hd{background:#fafbfc;color:var(--soft);font-size:11.5px;font-weight:600;
  text-transform:uppercase;letter-spacing:.3px}
.prow:last-child{border-bottom:0}
.prow .nm{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.prow .num{font-variant-numeric:tabular-nums;text-align:right;color:var(--soft)}
/* 行内删除按钮：平时低调，悬停才变红，避免一屏红叉看着吓人 */
.rowdel{appearance:none;border:0;background:none;font-family:inherit;cursor:pointer;
  color:var(--faint);font-size:11.5px;padding:4px 6px;border-radius:6px;line-height:1}
.rowdel:hover{color:var(--reject);background:var(--reject-soft)}
.rowdel:disabled{opacity:.4;cursor:default;color:var(--faint)}
.tag{display:inline-block;font-size:11px;padding:2px 8px;border-radius:10px;font-weight:600}
.tag.p{background:var(--pass-soft);color:#0b6b3d}
.tag.r{background:var(--reject-soft);color:#a01b12}
.tag.w{background:var(--line2);color:var(--soft)}
.tag.hot{background:#fff1e6;color:#b45309}

/* ── 手法排行 ── */
.methodrank{display:flex;flex-direction:column;gap:8px}
.mrow{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:11px 15px;
display:grid;grid-template-columns:34px 1.6fr 64px 1fr 108px;gap:12px;align-items:center;font-size:12.5px}
.mrow .rk{font-family:var(--mono);color:var(--faint);font-size:12px}
.mrow .nm{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mrow .rate{font-variant-numeric:tabular-nums;text-align:right;font-weight:600}
.bar{height:6px;background:var(--line2);border-radius:3px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--brand);border-radius:3px}
.bar i.good{background:var(--pass)}
.bar i.bad{background:var(--reject)}
.mrow .verdict{font-size:11.5px;text-align:right;color:var(--soft);white-space:nowrap}

.rejectstats,.teamstats{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}
.statcard{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.statcard .k{font-size:11.5px;color:var(--soft);margin-bottom:4px}
.statcard .v{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}
.statcard .s{font-size:11.5px;color:var(--faint);margin-top:2px}

/* ── toast / modal ── */
.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:#1f2329;
color:#fff;font-size:13px;padding:10px 20px;border-radius:9px;z-index:90;box-shadow:0 6px 24px rgba(0,0,0,.18)}
.toast.err{background:#a01b12}
/* 没权限提示条：只在当前页顶部亮一下，不弹登录、不拦人 */
.nopermbar{position:fixed;left:50%;top:64px;transform:translateX(-50%);z-index:95;
  display:flex;align-items:center;gap:10px;max-width:min(680px,92vw);
  background:#fff8e6;border:1px solid #f0d9a8;border-radius:10px;
  padding:9px 14px;font-size:12.5px;color:#7a5a12;cursor:pointer;
  box-shadow:0 6px 22px rgba(0,0,0,.12)}
.nopermbar b{color:#a06b00;flex:0 0 auto}
.nopermbar span{flex:1 1 auto;line-height:1.5}
.nopermbar i{font-style:normal;color:#a06b00;flex:0 0 auto;text-decoration:underline}
.nopermbar.hidden{display:none}
/* 没权限的按钮：留着但看着是锁着的，点一下给提示 */
.primary2.noperm,.ghost2.noperm{opacity:.55;cursor:not-allowed}
.modal{position:fixed;inset:0;background:rgba(15,17,21,.42);z-index:100;
display:flex;align-items:center;justify-content:center;padding:20px}
.modal-box{background:var(--card);border-radius:14px;padding:24px 26px;max-width:520px;width:100%}

/* ── 账号弹窗（新建 / 批准 / 改权限）──
   18 项权限铺开之后弹窗必然比屏幕高，以前整页一起滚，
   底部「确认」被顶到视口外，鼠标根本点不到（实测 headless 里点了个空）。
   现在：弹窗本身定高、权限区自己滚、标题和底部按钮永远在视野里。 */
#userModal .modal-box{max-height:calc(100vh - 32px);display:flex;flex-direction:column;
  overflow:hidden;max-width:640px}
#userModal #umTitle,#userModal #umTarget,#userModal .um2col,#userModal #umPwdWrap,
#userModal .mfoot{flex:0 0 auto}
#userModal #umPermWrap{display:flex;flex-direction:column;min-height:0;flex:1 1 auto}
#userModal #umPerms{overflow-y:auto;max-height:min(42vh,380px);flex:1 1 auto;
  padding-right:6px;overscroll-behavior:contain}
#userModal .mfoot{margin-top:14px;padding-top:13px;border-top:1px solid var(--line2)}
@media (max-height:700px){
  #userModal #umPerms{max-height:34vh}
}
.modal-box h3{margin:0 0 14px;font-size:16px}
.modal-box ol{margin:0 0 14px;padding-left:20px;font-size:13px;line-height:1.85;color:#374151}
.modal-box .muted{font-size:12px;color:var(--faint);margin:0 0 16px}

/* ── 删除素材弹窗 ── */
.del-target{background:#fafbfc;border:1px solid var(--line);border-radius:9px;
  padding:10px 13px;font-size:13px;font-weight:500;margin-bottom:12px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.del-warn{background:var(--warn-soft);border:1px solid #fde68a;color:#92400e;
  border-radius:9px;padding:9px 12px;font-size:12px;line-height:1.6;margin-bottom:14px}
.del-list-in{display:flex;flex-wrap:wrap;gap:6px;background:#fafbfc;
  border:1px solid var(--line);border-radius:9px;padding:10px 12px;margin-bottom:12px}
.del-list-in span{font-size:11.5px;background:var(--card);border:1px solid var(--line);
  border-radius:6px;padding:2px 8px;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.del-list-in span.dim{color:var(--faint);border-style:dashed}
.del-opt{display:flex;gap:10px;align-items:flex-start;padding:11px 13px;border:1px solid var(--line);
  border-radius:10px;cursor:pointer;margin-bottom:9px;transition:border-color .14s,background .14s}
.del-opt:hover{background:#fafbfc}
.del-opt input{margin-top:3px;accent-color:var(--brand)}
.del-opt span{display:flex;flex-direction:column;gap:2px}
.del-opt b{font-size:13px;font-weight:600}
.del-opt em{font-style:normal;font-size:11.5px;color:var(--soft)}
.del-opt:has(input:checked){border-color:var(--brand);background:var(--brand-soft)}
.del-opt:has(input:checked) em{color:#3b4a7a}
.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}
.danger{appearance:none;background:var(--reject);color:#fff;border:0;border-radius:9px;
  padding:9px 20px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit}
.danger:hover{background:#b0251b}
.danger:disabled{background:var(--line2);color:var(--faint);cursor:default}

/* ── AI 自动审片 ── */
.mini-run{font-size:11.5px;padding:3px 10px;border-radius:6px;border:1px solid var(--brand);
background:var(--brand);color:#fff;cursor:pointer;font-family:inherit;font-weight:600}
.mini-run:hover{background:#1e4ae0}
.mini-run:disabled{background:var(--line2);border-color:var(--line);color:var(--faint);cursor:default}
.auditbox{font-size:12.5px}
.ahint{color:var(--faint);font-size:12px;line-height:1.65}
.aitem{display:flex;gap:7px;align-items:flex-start;padding:4px 0;border-bottom:1px solid var(--line2)}
.aitem:last-child{border-bottom:0}
.aitem .ic{flex-shrink:0;font-weight:700;width:14px}
.ai-hi .ic{color:var(--reject)} .ai-hi{color:var(--reject);font-weight:500}
.ai-mid .ic{color:var(--warn)} .ai-mid{color:var(--warn)}
.ai-low .ic{color:var(--soft)} .ai-low{color:var(--soft)}
.ai-ok .ic{color:var(--pass)} .ai-ok{color:var(--pass)}
/* 参考信息：不是问题点。刻意做得比 ai-low 还淡，不抢问题点的注意力 */
.ai-ref .ic{color:var(--faint)} .ai-ref{color:var(--soft);font-weight:400}
.marktime.ref{background:transparent;border-color:var(--line);color:var(--soft)}
.marktime.ref:hover{border-color:var(--soft);color:var(--ink)}
.aisec{margin-top:9px;padding-top:8px;border-top:1px dashed var(--line)}
.aisec .st{font-size:11px;color:var(--soft);margin-bottom:5px;font-weight:600}
.aitag{display:inline-block;font-size:11px;padding:1px 7px;border-radius:9px;
background:var(--line2);color:var(--soft);margin:2px 3px 2px 0}
.sheetlink{display:block;margin-top:8px;font-size:11.5px;color:var(--brand);text-decoration:none}
.sheetlink:hover{text-decoration:underline}
.spin{display:inline-block;width:11px;height:11px;border:2px solid var(--line);
border-top-color:var(--brand);border-radius:50%;animation:sp .7s linear infinite;vertical-align:-1px;margin-right:5px}
@keyframes sp{to{transform:rotate(360deg)}}

/* ── 混剪出片 ── */
.mixwrap{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:22px;align-items:start}
@media (max-width:900px){.mixwrap{grid-template-columns:1fr}}
.mixform{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px}
.flabel{display:block;font-size:12px;color:var(--soft);font-weight:600;margin-bottom:6px}
.mixform textarea{font-size:13px;line-height:1.7;margin-bottom:14px}
.mixrow{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}
.mixrow input,.mixrow select{width:100%;border:1px solid var(--line);border-radius:8px;
padding:8px 10px;font-family:inherit;font-size:13px;color:var(--ink);background:var(--card)}
.mixrow input:focus,.mixrow select:focus{outline:none;border-color:var(--brand)}
.primary.wide{width:100%;padding:11px 0}
.muted{color:var(--faint)}
.small{font-size:11.5px;margin:10px 0 0;line-height:1.6}
.mixjobs{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px}
.joblist{display:flex;flex-direction:column;gap:8px}
.job{background:#fafbfc;border:1px solid var(--line2);border-radius:8px;padding:10px 12px;font-size:12px}
.job .jt{font-weight:600;margin-bottom:3px}
.job .js{color:var(--soft);font-size:11.5px}
.job .jb{display:inline-block;font-size:10.5px;padding:1px 7px;border-radius:8px;font-weight:600;margin-left:6px}
.job .jb.run{background:var(--brand-soft);color:var(--brand)}
.job .jb.ok{background:var(--pass-soft);color:#0b6b3d}
.job .jb.err{background:var(--reject-soft);color:#a01b12}
.job .outs{margin-top:6px}
.job .outs span{display:block;font-size:11px;color:var(--soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#mainVideo{width:100%;height:100%;object-fit:contain;display:block;background:#0f1115}

/* ── 导入条 ── */
.importbar{display:flex;align-items:center;justify-content:space-between;gap:16px;
background:var(--card);border:1px solid var(--line);border-radius:12px;
padding:12px 16px;margin-bottom:16px}
@media (max-width:700px){.importbar{flex-direction:column;align-items:stretch}}
.imp-left{display:flex;flex-direction:column;gap:3px;min-width:0}
.imp-title{font-size:13px;font-weight:600}
.imp-hint{font-size:11.5px;color:var(--faint)}
.imp-hint code{background:var(--line2);padding:1px 5px;border-radius:4px;font-size:11px}
.imp-right{display:flex;gap:8px;flex-shrink:0}
.ghost2{border:1px solid var(--line);background:var(--card);color:var(--soft);
font-size:12.5px;padding:8px 15px;border-radius:8px;cursor:pointer;font-family:inherit;white-space:nowrap}
.ghost2:hover{border-color:var(--faint);color:var(--ink)}
.ghost2:disabled{opacity:.5;cursor:default}
.primary2{background:var(--brand);border:1px solid var(--brand);color:#fff;
font-size:12.5px;font-weight:600;padding:8px 16px;border-radius:8px;cursor:pointer;
font-family:inherit;white-space:nowrap}
.primary2:hover{background:#1e4ae0}
.primary2:disabled{background:var(--line2);border-color:var(--line);color:var(--faint);cursor:default}

/* ── 问题点时间戳（可点击跳转）── */
.markrow{display:flex;align-items:flex-start;gap:8px;padding:5px 0;border-bottom:1px solid var(--line2)}
.markrow:last-child{border-bottom:0}
.marktime{flex-shrink:0;font-family:var(--mono);font-size:11.5px;padding:2px 7px;border-radius:5px;
border:1px solid #d5defb;background:var(--brand-soft);color:var(--brand);
cursor:pointer;font-weight:600;line-height:1.5}
.marktime:hover{background:#dfe7ff;border-color:var(--brand)}
.marktime.dim{background:var(--line2);border-color:var(--line);color:var(--faint);cursor:default}
.mk-kind{flex-shrink:0;font-size:11.5px;color:var(--soft);min-width:52px}
.mk-desc{font-size:11.5px;color:var(--ink);line-height:1.5;flex:1}
.ghost3{background:var(--card) !important;border-color:var(--line) !important;color:var(--soft) !important}
.ghost3:hover{border-color:var(--faint) !important;color:var(--ink) !important}
#taskText{width:100%;font-family:var(--sans);font-size:12.5px;line-height:1.75;
border:1px solid var(--line);border-radius:8px;padding:12px;background:var(--paper);
color:var(--ink);resize:vertical}

/* ── 检测清单 ── */
.ckrow{display:grid;grid-template-columns:14px 62px 1fr;gap:7px;align-items:start;
padding:4px 0;font-size:12px;line-height:1.5}
.ckrow .ic{font-weight:700}
.ckrow .ck-label{color:var(--soft)}
.ckrow .ck-detail{color:var(--ink)}
.ckrow.ai-ok .ic{color:var(--pass)} .ckrow.ai-ok .ck-detail{color:#0b6b3d}
.ckrow.ai-hi .ic{color:var(--reject)} .ckrow.ai-hi .ck-detail{color:var(--reject);font-weight:500}
.ckrow.ai-mid .ic{color:var(--warn)} .ckrow.ai-mid .ck-detail{color:var(--warn)}
.ckrow.ai-low .ic{color:var(--faint)} .ckrow.ai-low .ck-detail{color:var(--soft)}
/* 「机器判不了、请看图」—— 必须显眼，不能让人以为检过了 */
.ckrow.ai-view{background:var(--warn-soft)}
.ckrow.ai-view .ic{font-size:12px}
.ckrow.ai-view .ck-label{color:var(--warn);font-weight:600}
.ckrow.ai-view .ck-detail{color:#92400e}
.aitem.ai-view{background:var(--warn-soft)}
.aitem.ai-view .ic{font-size:12px}
.sheetimg{width:100%;border-radius:9px;border:1px solid var(--line);display:block}
.sheetlink{font-size:12px;color:var(--brand);text-decoration:none;margin-top:4px;display:inline-block}

/* ── 平台尺度切换（抖音 / 视频号）── */
.pfilters{display:flex;gap:6px}
.pchip{appearance:none;border:1px solid var(--line);background:var(--card);color:var(--soft);
  font-family:inherit;font-size:11.5px;padding:4px 10px;border-radius:7px;cursor:pointer;
  display:flex;align-items:center;gap:5px}
.pchip:hover{border-color:var(--faint);color:var(--ink)}
.pchip.active{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.pchip em{font-style:normal;font-size:10px;opacity:.7;background:rgba(0,0,0,.06);
  padding:0 5px;border-radius:8px}
.pchip.active em{background:rgba(255,255,255,.3);opacity:1}
.phint{font-size:11.5px;color:var(--soft);line-height:1.7}
.phint-top{display:flex;align-items:center;gap:7px;margin-bottom:3px}
.phint-top b{color:var(--ink);font-size:12.5px}
.phint-top em{font-style:normal;font-size:10px;background:var(--warn-soft);color:var(--warn);
  padding:1px 6px;border-radius:8px;font-weight:600}
.phint-kv{font-variant-numeric:tabular-nums}
.phint b{color:var(--ink)}
.platblock{padding:11px 12px}
.platblock .plabel{margin-bottom:5px}
.phint-basis{display:block;color:var(--faint);font-size:10.5px;margin-top:2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.platrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  background:var(--brand-soft);border:1px solid #d5defb;border-radius:9px;
  padding:7px 11px;margin-bottom:12px;font-size:12px}
.platrow .platname{font-weight:600;color:#1e3a8a}
.platrow .plattier{font-size:10.5px;background:#fff;color:var(--brand);
  padding:1px 7px;border-radius:9px;border:1px solid #d5defb}
.platrow.stale{background:var(--warn-soft);border-color:#fde68a}.platrow.stale .platname{color:#92400e}
.platrow.stale .plattier{background:#fff;border-color:#fde68a;color:var(--warn)}
.platalt{font-size:11px;color:#5b6b8f}
.srcfrom{font-size:10px;background:var(--brand-soft);color:var(--brand);
  padding:0 5px;border-radius:6px;margin-left:5px;white-space:nowrap}
.cbasis{color:var(--soft);font-size:11.5px}
.fixhint{margin-top:3px;font-size:11.5px;color:#0b6b3d;
  background:var(--pass-soft);border-radius:6px;padding:3px 8px;display:inline-block}
.phint-dim{color:var(--faint)}

/* ── AI 混剪 ── */
.clipbar{display:flex;gap:14px;align-items:stretch;margin-bottom:6px}
.clip-drop{flex:1;border:1.5px dashed var(--line);border-radius:13px;padding:18px 20px;
  background:var(--card);cursor:pointer;transition:border-color .15s,background .15s}
.clip-drop:hover,.clip-drop.over{border-color:var(--brand);background:var(--brand-soft)}
.clip-drop.busy{opacity:.75;cursor:progress}
.cd-t{font-size:13.5px;font-weight:600;margin-bottom:4px}
.cd-h{font-size:11.5px;color:var(--soft);line-height:1.6}
.clip-act{width:210px;display:flex;flex-direction:column;gap:8px;justify-content:center;
  background:var(--card);border:1px solid var(--line);border-radius:13px;padding:14px 16px}
.clipgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.clipcard{position:relative;background:var(--card);border:1px solid var(--line);
  border-radius:11px;overflow:hidden}
.clipcard video{width:100%;aspect-ratio:9/16;object-fit:cover;display:block;background:#000;max-height:210px}
.cc-name{font-size:12px;font-weight:500;padding:7px 9px 2px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.cc-meta{font-size:10.5px;color:var(--faint);padding:0 9px 9px}
.cc-meta em{font-style:normal;color:var(--brand)}
.clipcard .rowdel{position:absolute;top:6px;right:6px;background:rgba(255,255,255,.92);
  border-radius:6px;padding:3px 7px}
.clippick{max-height:230px;overflow-y:auto;border:1px solid var(--line);
  border-radius:9px;background:var(--card)}
.pickrow{display:flex;align-items:center;gap:9px;padding:8px 11px;cursor:pointer;
  border-bottom:1px solid var(--line2);font-size:12.5px}
.pickrow:last-child{border-bottom:0}
.pickrow:hover{background:#fafbfc}
.pickrow.on{background:var(--brand-soft)}
.pickrow input{accent-color:var(--brand);margin:0;width:14px;height:14px}
.pr-i{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;
  background:var(--line2);border-radius:5px;font-size:10.5px;color:var(--soft);flex:0 0 auto}
.pr-n{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pr-d{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums}
.jobcard{border:1px solid var(--line);border-radius:10px;padding:10px 12px;
  background:var(--card);margin-bottom:9px;font-size:12px}
.jobcard.cur{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}
.jc-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:7px}
.jc-st{font-size:11px;padding:1px 8px;border-radius:9px}
.st-running{background:var(--warn-soft);color:var(--warn)}
.st-done{background:var(--pass-soft);color:#0b6b3d}
.st-failed{background:var(--reject-soft);color:#a01b12}
.jc-bar{height:4px;background:var(--line2);border-radius:3px;overflow:hidden;margin-bottom:6px}
.jc-bar i{display:block;height:100%;background:var(--brand);border-radius:3px}
.jc-meta{font-size:11px;color:var(--faint);margin-bottom:7px}
.jc-meta em{font-style:normal;color:var(--reject)}
.expbox{margin-top:20px;background:var(--card);border:1px solid var(--line);
  border-radius:13px;padding:16px 18px}
.expgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:14px}
.expf{display:flex;flex-direction:column;gap:5px}
.expf.wide{grid-column:1/-1}
.expf input,.expf select{padding:8px 11px;font-size:13px}
.dirq{display:flex;gap:6px;flex-wrap:wrap}
.expres{margin-top:12px}

/* ── 警示语位置标注图 ── */
.mark-wrap{margin-top:9px}
.warnmark{max-width:100%;max-height:300px;width:auto;margin:0 auto;
  border-radius:8px;border:1px solid var(--line);display:block;background:#000}
.mark-cap{font-size:11px;color:var(--faint);margin-top:5px;text-align:center}

/* ══════════════ 登录 / 申请 ══════════════ */
body.locked .topbar,body.locked .shell{display:none}
.gate{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  padding:20px;background:linear-gradient(160deg,#f3f6fb 0%,#e8eef7 55%,#eef1f6 100%)}
.gate-card{background:var(--card);border:1px solid var(--line);border-radius:16px;
  width:100%;max-width:392px;padding:28px 30px 26px;box-shadow:0 18px 48px rgba(20,32,56,.13)}
.gate-brand{display:flex;align-items:center;gap:9px;font-size:17px;font-weight:700;
  letter-spacing:.2px;margin-bottom:20px}
.gate-brand .dot{width:9px;height:9px;border-radius:50%;background:var(--brand);flex:0 0 auto}
.gate-tabs{display:flex;gap:3px;background:var(--line2);border-radius:10px;padding:3px;margin-bottom:20px}
.gtab{flex:1;appearance:none;border:0;background:none;font-family:inherit;font-size:13px;
  color:var(--soft);padding:8px 6px;border-radius:8px;cursor:pointer;font-weight:500;transition:.14s}
.gtab:hover{color:var(--ink)}
.gtab.active{background:var(--card);color:var(--brand);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.07)}
.gpane{display:flex;flex-direction:column;gap:12px}
.gfield{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--soft);font-weight:500}
.gfield input{font-size:13.5px;padding:10px 12px;border:1px solid var(--line);border-radius:9px;
  background:#fff;font-family:inherit;color:var(--ink)}
.gfield input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.gerr{font-size:12px;color:var(--reject);line-height:1.55;display:none}
.gerr:not(:empty){display:block}
.gerr.ok{color:#0b6b3d;background:var(--pass-soft);border-radius:8px;padding:9px 11px}
.ghint{font-size:11.5px;color:var(--faint);line-height:1.65;margin:2px 0 0}
/* 登录页底部的"该用哪个地址"提示：组员连不上时第一眼看这里 */
.gshare{margin-top:10px;padding:9px 11px;border-radius:9px;line-height:1.7;
  background:var(--warn-soft);border:1px solid #fde68a;color:#92400e;font-size:11.5px}
.gshare:empty{display:none}
.gshare b{font-family:var(--mono,ui-monospace,Consolas,monospace);word-break:break-all}
.gtip{font-size:12px;color:#92400e;background:var(--warn-soft);border:1px solid #fde68a;
  border-radius:9px;padding:10px 12px;line-height:1.65}

/* ══════════════ 我是谁 ══════════════ */
.whoami{display:flex;align-items:center;gap:6px;font-size:12px;cursor:pointer;
  padding:5px 11px;border-radius:9px;background:var(--brand-soft);border:1px solid transparent;
  user-select:none;transition:.14s}
.whoami:hover{border-color:var(--brand)}
.whoami b{font-weight:600;color:var(--brand)}
.whoami em{font-style:normal;font-size:10.5px;color:var(--soft);background:rgba(255,255,255,.6);
  padding:1px 6px;border-radius:8px}

/* ══════════════ 账号与权限 ══════════════ */
.modal-box.wide{max-width:800px}
.modal-box .flabel{margin-top:12px}
.modal-box input{width:100%;font-size:13px;padding:9px 11px;border:1px solid var(--line);
  border-radius:9px;background:#fff;font-family:inherit}
.modal-box input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.modal-box input:disabled{background:#f4f5f7;color:var(--faint)}
.mfoot{display:flex;justify-content:flex-end;gap:10px;margin-top:22px;padding-top:16px;
  border-top:1px solid var(--line2)}
.accsum{font-size:12px;color:var(--soft);margin:14px 0 10px}
.accsum b{color:var(--brand);font-size:13px}
.uslist{display:flex;flex-direction:column;gap:8px;max-height:44vh;overflow-y:auto;padding-right:3px}
.usrow{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;
  border:1px solid var(--line);border-radius:11px;padding:12px 14px;background:#fff}
.usrow.pending{background:var(--warn-soft);border-color:#fde68a}
.usrow.disabled{opacity:.62}
.usmain{min-width:0}
.usname{display:flex;align-items:center;gap:7px;font-size:13.5px;font-weight:600;flex-wrap:wrap}
.usacc{font-size:11.5px;color:var(--soft);margin-top:2px;font-variant-numeric:tabular-nums}
.usperms{display:flex;flex-wrap:wrap;gap:4px;margin-top:7px}
.usnone{font-size:11px;color:var(--reject)}
.usmeta{font-size:11px;color:var(--faint);margin-top:6px}
.ust{font-size:10.5px;padding:1px 7px;border-radius:8px;font-weight:600}
.ust.ok{background:var(--pass-soft);color:#0b6b3d}
.ust.wait{background:#fef3c7;color:#92400e}
.ust.off{background:var(--line2);color:var(--soft)}
.ust.bad{background:var(--reject-soft);color:#a01b12}
.pmark.pm-owner{background:var(--brand-soft);color:var(--brand)}
.ptag.mini{font-size:10.5px;padding:2px 7px;background:var(--line2);color:var(--soft);
  border-radius:7px;font-weight:500}
.usacts{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}
.rowdel.ok{color:var(--brand);border-color:var(--brand)}
.rowdel.danger{color:var(--reject)}
.ustep{margin-top:20px;padding-top:15px;border-top:1px solid var(--line2)}
.ustep b{font-size:12px;color:var(--soft)}
.evlist{margin-top:8px;max-height:180px;overflow-y:auto;border:1px solid var(--line2);
  border-radius:9px;background:#fafbfc}
.evrow{display:grid;grid-template-columns:74px 130px 1fr 88px;gap:8px;padding:6px 11px;
  font-size:11px;border-bottom:1px solid var(--line2);align-items:center}
.evrow:last-child{border-bottom:0}
.evrow.bad{background:var(--reject-soft)}
.evk{font-weight:600;color:var(--soft)}
.evrow.bad .evk{color:var(--reject)}
.eva,.evt{color:var(--faint);font-variant-numeric:tabular-nums}
.evw{color:var(--soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ══════════════ 权限选择 ══════════════ */
.permgrid{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-top:2px}
/* 分组小标题：横跨两列，右边给一个「全选本组」，18 项不用一个个点 */
.pmghead{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;
  gap:8px;margin:7px 0 1px;padding:0 2px}
.pmghead:first-child{margin-top:0}
.pmghead span{font-size:11px;font-weight:700;letter-spacing:.04em;color:var(--soft)}
.pmgall{border:0;background:none;padding:0 2px;font-size:10.5px;color:var(--brand);
  cursor:pointer;font-weight:600}
.pmgall:hover{text-decoration:underline}
.pmrow{display:flex;align-items:flex-start;gap:8px;padding:8px 10px;border:1px solid var(--line);
  border-radius:9px;cursor:pointer;background:#fff;transition:.14s}
.pmrow:hover{border-color:var(--brand);background:var(--brand-soft)}
.pmrow input{margin-top:2px;width:auto;flex:0 0 auto;accent-color:var(--brand)}
.pmrow span{display:flex;flex-direction:column;min-width:0}
.pmrow b{font-size:12.5px;font-weight:600}
.pmrow em{font-style:normal;font-size:10.5px;color:var(--faint);line-height:1.5}

/* ══════════════ 提意见 ══════════════ */
.sugbtn{position:relative;display:flex;align-items:center;gap:5px}
.sugdot{display:none;min-width:16px;height:16px;padding:0 4px;border-radius:9px;
  background:var(--reject);color:#fff;font-size:10px;font-weight:700;
  align-items:center;justify-content:center;font-variant-numeric:tabular-nums}
.sugdot.on{display:inline-flex}

.modal-box.sugbox{max-width:660px;max-height:86vh;display:flex;flex-direction:column}
.sugtabs{display:flex;gap:4px;background:var(--line2);border-radius:10px;padding:3px;margin-bottom:18px}
.sugtab{flex:1;appearance:none;border:0;background:none;font-family:inherit;font-size:13px;
  color:var(--soft);padding:8px 6px;border-radius:8px;cursor:pointer;font-weight:500}
.sugtab.active{background:var(--card);color:var(--brand);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.07)}
.sugtab em{font-style:normal;font-size:10.5px;background:var(--reject);color:#fff;
  padding:1px 6px;border-radius:9px;margin-left:3px}
.sugtab em:empty{display:none}
.sugpane{display:flex;flex-direction:column;min-height:0;overflow-y:auto}
.kindrow{display:flex;flex-wrap:wrap;gap:6px}
.kindchip{appearance:none;border:1px solid var(--line);background:#fff;font-family:inherit;
  font-size:12px;color:var(--soft);padding:6px 13px;border-radius:8px;cursor:pointer;transition:.14s}
.kindchip:hover{border-color:var(--brand);color:var(--ink)}
.kindchip.active{background:var(--brand-soft);border-color:var(--brand);color:var(--brand);font-weight:600}
.statrow{display:flex;flex-wrap:wrap;gap:6px}

.sugctx{font-size:11.5px;color:var(--faint);background:#fafbfc;border:1px solid var(--line2);
  border-radius:8px;padding:8px 11px;margin-top:12px;line-height:1.6}

/* ── 提意见：截图上传 ── */
.fopt{font-weight:400;color:var(--faint);font-size:11px;margin-left:8px}
.shotdrop{display:flex;flex-wrap:wrap;gap:8px;border:1px dashed var(--line);
  border-radius:10px;padding:9px;background:#fcfcfd;transition:.15s;margin-bottom:7px}
.shotdrop.over{border-color:var(--brand);background:var(--brand-soft)}
.shotdrop.busy{opacity:.55;pointer-events:none}
.shotgrid{display:flex;flex-wrap:wrap;gap:8px}
.shotgrid:empty{display:none}
.shotcell{position:relative;width:82px;height:82px;border-radius:9px;overflow:hidden;
  border:1px solid var(--line);background:#fff;cursor:zoom-in}
.shotcell img{width:100%;height:100%;object-fit:cover;display:block}
.shotcell .shotdel{position:absolute;top:0;right:0;width:19px;height:19px;border:0;
  border-radius:0 8px 0 8px;background:rgba(17,20,26,.5);color:#fff;font-size:11px;
  line-height:19px;padding:0;cursor:pointer;opacity:.85;transition:.14s}
.shotcell:hover .shotdel{opacity:1}
.shotcell .shotdel:hover{background:var(--reject)}
.shotcell.tmp{display:flex;align-items:center;justify-content:center;text-align:center;
  font-size:11px;color:var(--faint);cursor:default;padding:4px;line-height:1.45}
.shotcell.bad{border-color:var(--reject);color:var(--reject)}
.shotadd{appearance:none;width:82px;height:82px;border:1px dashed var(--line);border-radius:9px;
  background:#fff;color:var(--soft);font-family:inherit;font-size:11px;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  transition:.14s;flex:0 0 auto}
.shotadd b{font-size:19px;font-weight:400;line-height:1;color:var(--brand)}
.shotadd:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}
.shotadd:disabled{opacity:.4;cursor:not-allowed}
.shothint{font-size:11px;color:var(--faint);line-height:1.6;margin:0 0 2px}
.shots{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.shots img{width:62px;height:62px;object-fit:cover;border-radius:7px;
  border:1px solid var(--line);cursor:zoom-in;display:block}
.sd-shots{display:flex;flex-wrap:wrap;gap:8px;margin:-4px 0 14px}
.sd-shots img{width:94px;height:94px;object-fit:cover;border-radius:8px;
  border:1px solid var(--line);cursor:zoom-in;display:block}

/* ── 看图 ── */
.shotview{position:fixed;inset:0;z-index:200;background:rgba(10,12,16,.9);
  display:flex;align-items:center;justify-content:center;padding:44px 24px 74px}
.shotview img{max-width:100%;max-height:100%;border-radius:6px;
  box-shadow:0 18px 60px rgba(0,0,0,.55);background:#fff}
.shotview-x{position:absolute;top:16px;right:18px;width:34px;height:34px;border-radius:50%;
  border:0;background:rgba(255,255,255,.14);color:#fff;font-size:15px;cursor:pointer}
.shotview-x:hover{background:rgba(255,255,255,.3)}
.shotview-bar{position:absolute;bottom:16px;display:flex;align-items:center;gap:14px;
  color:#e5e7eb;font-size:12px}
.shotview-bar .ghost2{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.22);color:#fff}
.shotview-bar .ghost2:hover{background:rgba(255,255,255,.24);color:#fff}
.shotview-bar .ghost2:disabled{opacity:.35;cursor:not-allowed}
.sugfilters{display:flex;gap:5px;margin-bottom:12px;flex-wrap:wrap}
.suglist{display:flex;flex-direction:column;gap:9px;min-height:0;overflow-y:auto;padding-right:3px}
.sugcard{border:1px solid var(--line);border-radius:11px;padding:12px 14px;background:#fff}
.sugcard.open{border-left:3px solid #f59e0b}
.sugcard.doing{border-left:3px solid #3b82f6}
.sugcard.done{border-left:3px solid #16a34a;opacity:.78}
.sugcard.closed{opacity:.6}
.sugline1{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.sugline1 b{font-size:13.5px;font-weight:600}
.kinddot{width:8px;height:8px;border-radius:50%;flex:0 0 auto}
.sugkind{font-size:10.5px;background:var(--line2);color:var(--soft);padding:1px 7px;border-radius:7px}
.sugst{font-size:10.5px;padding:1px 7px;border-radius:7px;border:1px solid;margin-left:auto}
.sugwho{font-size:11px;color:var(--faint);margin-top:4px}
.sugtext{font-size:12.5px;color:var(--ink);line-height:1.7;margin-top:7px;white-space:pre-wrap}
.sugreply{margin-top:9px;padding:9px 11px;background:var(--pass-soft);border-radius:8px;
  font-size:12px;line-height:1.7;color:#0b6b3d}
.sugreply b{color:#08522c}
.sugacts{display:flex;gap:6px;justify-content:flex-end;margin-top:10px}

.sd-meta{font-size:11.5px;color:var(--soft);display:flex;align-items:center;gap:6px;
  margin-bottom:12px;flex-wrap:wrap}
.sd-body{background:#fafbfc;border:1px solid var(--line2);border-radius:9px;padding:11px 13px;
  font-size:12.5px;line-height:1.75;color:var(--ink);white-space:pre-wrap;margin-bottom:14px}
.danger-text{color:var(--reject)!important;border-color:var(--line)!important}
.danger-text:hover{background:var(--reject-soft)!important}

/* ══════════════ 人员管理：三栏 ══════════════ */
.modal-box.full{max-width:1180px;max-height:92vh;display:flex;flex-direction:column}
.orgwrap{display:grid;grid-template-columns:180px 168px minmax(0,1fr);gap:0;
  border:1px solid var(--line);border-radius:11px;overflow:hidden;flex:1;min-height:0}
.orgcol{border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0}
.orgcol:last-child{border-right:0}
.orgcol.grow{min-width:0}
.orghd{display:flex;align-items:center;justify-content:space-between;gap:6px;
  padding:10px 12px;background:#fafbfc;border-bottom:1px solid var(--line2);
  font-size:12px;font-weight:600;color:var(--soft);flex:0 0 auto}
.orghd small{font-weight:400;color:var(--faint);font-size:11px}
.orglist{flex:1;overflow-y:auto;padding:5px;min-height:120px}
.orgitem{display:flex;align-items:center;gap:6px;padding:7px 9px;border-radius:7px;
  font-size:12.5px;cursor:pointer;color:var(--ink);transition:background .12s}
.orgitem:hover{background:var(--line2)}
.orgitem.on{background:var(--brand-soft);color:var(--brand);font-weight:600}
.orgitem .orgname{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.orgitem em{font-style:normal;font-size:10.5px;color:var(--soft);background:var(--line2);
  padding:1px 6px;border-radius:8px;font-variant-numeric:tabular-nums}
.orgitem.on em{background:#fff}
.orgedit{appearance:none;border:0;background:none;cursor:pointer;font-size:11px;
  padding:1px 3px;opacity:0;border-radius:4px;color:var(--soft)}
.orgitem:hover .orgedit{opacity:1}
.orgedit:hover{background:rgba(0,0,0,.07)}
.orghint{font-size:10.5px;color:var(--faint);padding:8px 9px;border-top:1px solid var(--line2);margin-top:5px}

.orgfilters{display:flex;gap:6px;padding:9px 12px;border-bottom:1px solid var(--line2);
  background:#fafbfc;flex-wrap:wrap;flex:0 0 auto}
.orgfilters input{flex:1;min-width:130px;font-size:12px;padding:6px 10px;
  border:1px solid var(--line);border-radius:8px;background:#fff;font-family:inherit}
.orgfilters select{font-size:12px;padding:6px 8px;border:1px solid var(--line);
  border-radius:8px;background:#fff;font-family:inherit}
.minibtn{appearance:none;border:1px solid var(--line);background:#fff;font-family:inherit;
  font-size:11.5px;color:var(--soft);padding:4px 10px;border-radius:7px;cursor:pointer;white-space:nowrap}
.minibtn:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}
.minibtn:disabled{opacity:.4;cursor:default}

.orgtable-wrap{flex:1;overflow-y:auto;min-height:0;padding:10px 12px}
.orgsum{font-size:11.5px;color:var(--soft);margin-bottom:8px}
.orgsum .pend{color:#92400e}
.memtable{border:1px solid var(--line);border-radius:9px;overflow:hidden}
.memrow{display:grid;
  grid-template-columns:52px minmax(150px,1.4fr) 78px 78px 92px 80px minmax(0,1.6fr);
  gap:8px;align-items:center;padding:9px 11px;border-bottom:1px solid var(--line2);
  font-size:12px}
.memrow:last-child{border-bottom:0}
.memrow.hd{background:#fafbfc;color:var(--soft);font-size:11px;font-weight:600;
  text-transform:uppercase;letter-spacing:.3px;padding:8px 11px}
.memrow.disabled{opacity:.55;background:#fbfbfc}
.memrow.pending{background:var(--warn-soft)}
.mcell{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--soft)}
.mcell.acct .mstrong{font-weight:600;color:var(--ink);font-size:12.5px}
.msub{font-size:10.5px;color:var(--faint);font-variant-numeric:tabular-nums}
.msub.faint{color:#cbd5e1}
.mcell.acts{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end;overflow:visible}
.rbadge{font-size:10.5px;padding:1px 7px;border-radius:7px;font-weight:600;
  background:var(--line2);color:var(--soft)}
.rbadge.owner{background:#fde68a;color:#92400e}
.rbadge.admin{background:#ddd6fe;color:#5b21b6}

.switch{position:relative;display:inline-block;width:34px;height:19px;cursor:pointer}
.switch input{opacity:0;width:0;height:0}
.switch span{position:absolute;inset:0;background:#cbd5e1;border-radius:19px;transition:.2s}
.switch span:before{content:"";position:absolute;height:15px;width:15px;left:2px;bottom:2px;
  background:#fff;border-radius:50%;transition:.2s}
.switch input:checked+span{background:var(--brand)}
.switch input:checked+span:before{transform:translateX(15px)}
.switch input:disabled+span{opacity:.45;cursor:not-allowed}

.um2col{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
.um2col select{width:100%;font-size:13px;padding:9px 11px;border:1px solid var(--line);
  border-radius:9px;background:#fff;font-family:inherit}

/* 操作列按钮：单行不换行，删除用描边红而非红底 */
.mcell.acts{gap:2px;flex-wrap:wrap}
.mcell.acts .rowdel{padding:3px 7px;font-size:11px;line-height:1.4;white-space:nowrap;
  border:1px solid transparent}
.mcell.acts .rowdel:hover{border-color:var(--reject)}
.rowdel.uact-danger{color:var(--reject);background:var(--reject-soft)}
.rowdel.uact-danger:hover{color:#fff;background:var(--reject);border-color:var(--reject)}
.mcell.acts .rowdel.ok{color:var(--brand);background:var(--brand-soft)}
.mcell.acts .rowdel.ok:hover{color:#fff;background:var(--brand)}
.memrow{grid-template-columns:46px minmax(140px,1.35fr) 72px 72px 84px 74px minmax(0,1.75fr)}

/* 更多菜单 */
.morewrap{position:relative;display:inline-block}
.moremenu{position:absolute;right:0;top:calc(100% + 3px);z-index:60;min-width:168px;
  background:var(--card);border:1px solid var(--line);border-radius:9px;padding:4px;
  box-shadow:0 8px 24px rgba(15,23,42,.16);display:flex;flex-direction:column;gap:1px}
.moremenu button{appearance:none;border:0;background:none;font-family:inherit;font-size:11.5px;
  color:var(--ink);text-align:left;padding:7px 10px;border-radius:6px;cursor:pointer;white-space:nowrap}
.moremenu button:hover{background:var(--line2)}
.moremenu button.danger{color:var(--reject)}
.moremenu button.danger:hover{background:var(--reject-soft)}
.mcell.acts .rowdel.on{background:#ddd6fe;color:#5b21b6;font-weight:600}
.mcell.acts .rowdel.on:hover{color:#fff;background:#7c3aed}

/* 三栏表格列宽（放在最后以覆盖前面的定义） */
.orgtable-wrap .memrow{grid-template-columns:44px minmax(136px,1.3fr) 66px 70px 82px 72px minmax(160px,1.9fr)}
.orgtable-wrap .memrow.hd{grid-template-columns:44px minmax(136px,1.3fr) 66px 70px 82px 72px minmax(160px,1.9fr)}
.orgtable-wrap .mcell.acts{flex-wrap:nowrap;align-items:center}

/* ══════════════ AI 审片：页签式 ══════════════ */
.audblock{min-height:0}
.audit-tabs{display:flex;gap:2px;background:var(--line2);border-radius:9px;padding:3px;
  margin-bottom:10px;position:sticky;top:0;z-index:2}
.atab{flex:1;appearance:none;border:0;background:none;font-family:inherit;font-size:12px;
  color:var(--soft);padding:7px 4px;border-radius:7px;cursor:pointer;font-weight:500;
  white-space:nowrap;transition:.14s}
.atab:hover{color:var(--ink)}
.atab.active{background:var(--card);color:var(--brand);font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.07)}
.atab em{font-style:normal;font-size:10px;background:var(--reject);color:#fff;
  padding:1px 5px;border-radius:8px;margin-left:2px;vertical-align:1px}
.atab em:empty{display:none}
.audpanes{min-height:0}
.audpane{animation:fadein .16s ease}
@keyframes fadein{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}

/* 逐项检测：标签与详情同行 */
.ckrow{display:grid;grid-template-columns:18px 62px minmax(0,1fr);gap:7px;align-items:baseline;
  padding:6px 0;border-bottom:1px solid var(--line2);font-size:12px}
.ckrow:last-child{border-bottom:0}
.ckrow .ic{font-style:normal;text-align:center;flex:0 0 auto}
.ck-l{font-weight:600;color:var(--ink)}
.ck-detail{color:var(--soft);line-height:1.55;word-break:break-word}
.ckrow.ai-ok .ic{color:#0b6b3d}
.ckrow.ai-hi .ic{color:var(--reject)}
.ckrow.ai-mid .ic{color:#b45309}
.ckrow.ai-view .ic{color:#7c3aed}
.ckrow.ai-view .ck-detail{color:var(--soft)}

/* 问题点（视频备注） */
.issrow{display:grid;grid-template-columns:16px 58px 60px minmax(0,1fr);gap:7px;
  align-items:baseline;padding:8px 0;border-bottom:1px solid var(--line2);font-size:12px}
.issrow:last-child{border-bottom:0}
.issrow .ic{text-align:center;font-style:normal}
.issrow.ai-hi .ic{color:var(--reject)}
.issrow.ai-mid .ic{color:#b45309}
.issrow.ai-low .ic{color:var(--faint)}
.issrow .mk-kind{font-size:11px;background:var(--line2);color:var(--soft);
  padding:1px 6px;border-radius:6px;justify-self:start}
.issrow .mk-desc{color:var(--ink);line-height:1.55}
.issrow.ai-hi .mk-desc{color:var(--reject)}
.marktime.dim{color:var(--faint);font-variant-numeric:tabular-nums;font-size:11px}

/* 素材信息网格 */
.metagrid{display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px 12px;font-size:12px;align-items:baseline}
.metagrid span{color:var(--faint)}
.metagrid b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.distbar{display:flex;height:9px;border-radius:5px;overflow:hidden;background:var(--line2);margin:4px 0 7px}
.distseg:nth-child(1){background:#3b82f6}.distseg:nth-child(2){background:#f59e0b}
.distseg:nth-child(3){background:#10b981}.distseg:nth-child(4){background:#a855f7}
.distseg:nth-child(5){background:#ef4444}.distseg:nth-child(6){background:#64748b}
.distkey{display:flex;flex-wrap:wrap;gap:4px}

/* ══════════════ 管理区页面 ══════════════ */
.navgroup.admin{margin-top:auto;padding-top:12px}
.navgroup.admin span{color:var(--brand)}
.navbadge.red{background:var(--reject);color:#fff}

.adminhead{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;
  margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--line2);flex-wrap:wrap}
.adminhead h2{margin:0 0 5px;font-size:17px}
.adminhead p{margin:0;font-size:12.5px;color:var(--soft);line-height:1.65;max-width:640px}
.adminacts{display:flex;gap:8px;align-items:center;flex:0 0 auto}

.permlegend{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:14px}
.permchip{font-size:11px;padding:2px 8px;border-radius:7px;background:var(--line2);
  color:var(--soft);white-space:nowrap}
.permchip.on{background:var(--brand-soft);color:var(--brand)}

.acctgrid{background:var(--card);border:1px solid var(--line);border-radius:11px;overflow:hidden}
.acctrow{display:grid;grid-template-columns:minmax(150px,1.2fr) 90px 130px minmax(0,2fr) auto;
  gap:12px;align-items:center;padding:11px 15px;border-bottom:1px solid var(--line2);font-size:12.5px}
.acctrow:last-child{border-bottom:0}
.acctrow.hd{background:#fafbfc;color:var(--soft);font-size:11.5px;font-weight:600;
  text-transform:uppercase;letter-spacing:.3px}
.acctrow .mstrong{font-weight:600;color:var(--ink);display:flex;flex-direction:column}
.permwrap{display:flex;flex-wrap:wrap;gap:3px}
.pall{font-size:11px;color:var(--brand);font-weight:600}

/* ── 账号权限页：待批准申请 / 刚批准生成的密码 ──
   2026-10-26 主管反馈「账号录入改成部员自己申请，我只负责同意＋配权限」。
   这两块必须在账号权限页里，因为主管就是在这页干活，跑去人员管理页才能批太绕。 */
.pendbox{background:#fff8e8;border-bottom:1px solid var(--line2)}
.pendhead{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
  padding:11px 15px 5px;font-size:12.5px}
.pendhead b{color:#9a6100}
.pendhead span{color:var(--soft);font-size:11.5px;line-height:1.5}
.pendrow{display:grid;grid-template-columns:minmax(128px,1fr) minmax(0,2fr) 86px auto;
  gap:12px;align-items:center;padding:9px 15px;font-size:12.5px;
  border-top:1px dashed rgba(154,97,0,.2)}
.pendrow .pwho{display:flex;flex-direction:column;gap:2px;min-width:0}
.pendrow .pwho b{color:var(--ink);font-weight:600}
.pendrow .pwho em{font-style:normal;color:var(--soft);font-size:11.5px}
.pendrow .pwhy{color:var(--ink);font-size:12px;line-height:1.5;min-width:0;
  overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.pendrow .pwhen{color:var(--soft);font-size:11.5px;white-space:nowrap}
.pendrow .pacts{display:flex;gap:6px;justify-content:flex-end;flex-wrap:wrap}

.pwdbox{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:11px 15px;
  background:var(--brand-soft);border-bottom:1px solid var(--line2)}
.pwdbox .pwdt{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0;font-size:12.5px}
.pwdbox .pwdt b{color:var(--brand)}
.pwdbox .pwdt em{font-style:normal;color:var(--soft);font-size:11.5px;line-height:1.5}
.pwdbox code{background:#fff;border:1px solid var(--line);border-radius:5px;padding:1px 7px;
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;color:var(--ink);
  user-select:all;margin:0 3px}
.pwdbox .pacts{display:flex;gap:6px;flex:0 0 auto}
.acctrow.off{opacity:.62}
@media (max-width:900px){
  .pendrow{grid-template-columns:1fr;gap:6px}
  .pendrow .pacts{justify-content:flex-start}
}
#sugListPage{max-height:none}
.switchlist{display:flex;flex-wrap:wrap;gap:5px;align-items:center;margin:8px 0}

/* ══════════════ 右栏重构（V1.26）══════════════ */
/* 原来 340px 塞 5 个区块，字体挤、层次不清。加宽到 430px 并把序号打出来 */
#reviewLayout{grid-template-columns:minmax(0,1fr) 430px;gap:20px}
@media (max-width:1280px){#reviewLayout{grid-template-columns:minmax(0,1fr) 380px}}
@media (max-width:1040px){#reviewLayout{grid-template-columns:1fr}}

.panel{gap:12px}
.pblock{padding:14px 15px;border-radius:13px}
.plabel.big{font-size:14px;font-weight:600;color:var(--ink);margin-bottom:12px}
.plabel .step{display:inline-flex;align-items:center;justify-content:center;
  width:19px;height:19px;border-radius:50%;background:var(--brand);color:#fff;
  font-size:11px;font-weight:700;margin-right:7px;vertical-align:1px}

/* 尺度条：压缩成一行，不再占大块 */
.scale-strip{padding:11px 14px;background:linear-gradient(180deg,#fbfcfe,#f6f8fb)}
.scale-row{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.scale-k{font-size:12px;color:var(--soft);font-weight:600;flex:0 0 auto}
.scale-strip .phint{font-size:11.5px;line-height:1.6}

/* 审片区是主体，给足内边距与呼吸感 */
.audblock{padding:15px 16px}
.audit-tabs{position:sticky;top:0;z-index:3;margin:0 -2px 12px;padding:3px}
.audpane{font-size:13px}
.audpane .aisec{margin-bottom:14px}
.audpane .aisec:last-child{margin-bottom:0}
.audpane .st{font-size:12.5px;font-weight:600;margin-bottom:8px;padding-bottom:5px;
  border-bottom:1px solid var(--line2)}
.aitem{font-size:12.5px;line-height:1.65}
.ckrow{grid-template-columns:20px 68px minmax(0,1fr);padding:7px 0;font-size:12.5px}
.issrow{grid-template-columns:18px 62px 66px minmax(0,1fr);padding:9px 0;font-size:12.5px}
.aitag{font-size:11.5px;padding:2px 9px}
.ahint{font-size:12px;line-height:1.65}
.switchlist{display:flex;flex-wrap:wrap;gap:5px;align-items:center;margin:8px 0}

/* 判定区：折叠起来，不占版面 */
.judgeblock{border-color:var(--line2);background:#fcfdfe}
.judge{border-top:1px solid var(--line2);padding:11px 0}
.judge:first-of-type{border-top:0;padding-top:0}
.judge>summary{cursor:pointer;font-size:13px;font-weight:600;color:var(--ink);
  list-style:none;display:flex;align-items:center;gap:7px;padding:3px 0;
  user-select:none}
.judge>summary::-webkit-details-marker{display:none}
.judge>summary::before{content:"▸";color:var(--faint);font-size:11px;transition:.15s}
.judge[open]>summary::before{transform:rotate(90deg)}
.judge>summary:hover{color:var(--brand)}
.judge .hint{font-weight:400;color:var(--faint);font-size:11.5px}
.judge .chips,.judge .scores,.judge textarea{margin-top:10px}
.judge textarea{font-size:12.5px}
/* ══════════════════════════════════════════════════
   右栏 V1.27 重做
   目标：一眼看到结论，其余按需展开。
   做法：顶部一条结论条（唯一强色块），下面全部用白底 + 细分隔线，
   不再层层叠灰卡片——原来 5 个灰块堆在一起，看不出主次。
   ══════════════════════════════════════════════════ */
#reviewLayout{grid-template-columns:minmax(0,1fr) 424px}
.panel{display:flex;flex-direction:column;gap:10px}

/* ── 结论条：整栏唯一的强视觉 ── */
.vbar{display:flex;align-items:center;gap:10px;padding:12px 14px;border-radius:13px;
  background:var(--card);border:1px solid var(--line);position:sticky;top:64px;z-index:20;
  box-shadow:0 1px 2px rgba(16,24,40,.04)}
.vbar .vtone{flex:0 0 30px;height:30px;border-radius:50%;display:grid;place-items:center;
  font-size:15px;font-weight:700;background:var(--line2);color:var(--faint)}
.vbar .vbody{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.vbar .vbody b{font-size:13.5px;font-weight:650;line-height:1.35}
.vbar .vbody small{font-size:11.5px;color:var(--soft);line-height:1.4;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vbar .vrun{flex:0 0 auto;height:30px;padding:0 14px;border-radius:8px;border:1px solid var(--brand);
  background:var(--brand);color:#fff;font-size:12.5px;font-weight:600;cursor:pointer;font-family:inherit}
.vbar .vrun:hover{background:#1e4ae0;border-color:#1e4ae0}
.vbar .vrun:disabled{background:var(--line2);border-color:var(--line);color:var(--faint);cursor:default}

.vbar[data-tone="pass"]{border-color:#b7e1c4;background:linear-gradient(180deg,#f4fbf6,#fff)}
.vbar[data-tone="pass"] .vtone{background:var(--pass-soft);color:var(--pass)}
.vbar[data-tone="warn"]{border-color:#f0d9a8;background:linear-gradient(180deg,#fffcf3,#fff)}
.vbar[data-tone="warn"] .vtone{background:var(--warn-soft);color:var(--warn)}
.vbar[data-tone="bad"]{border-color:#f3c2bd;background:linear-gradient(180deg,#fdf5f4,#fff)}
.vbar[data-tone="bad"] .vtone{background:var(--reject-soft);color:var(--reject)}
.vbar[data-tone="idle"] .vtone{background:var(--line2);color:var(--faint)}

/* ── 尺度行 ── */
.scaleline{display:flex;align-items:center;gap:8px;padding:0 2px}
.scaleline .sk{font-size:11.5px;color:var(--faint);flex:0 0 auto}
.shint{font-size:11px;color:var(--faint);line-height:1.55;padding:0 2px;margin-top:-4px}

/* ── 区块：白底 + 细线，不用灰底堆叠 ── */
.pblock{background:var(--card);border:1px solid var(--line);border-radius:13px;padding:0;overflow:hidden}
.pblock .ph{position:static;inset:auto;display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:11px 14px;border-bottom:1px solid var(--line2)}
.pblock .ph b{font-size:12.5px;font-weight:650;letter-spacing:.2px}
.ghint{font-size:11px;color:var(--faint);font-weight:400}
.ginline{height:24px;padding:0 10px;border-radius:7px;border:1px solid var(--line);
  background:var(--card);color:var(--soft);font-size:11.5px;cursor:pointer;font-family:inherit}
.ginline:hover{border-color:var(--faint);color:var(--ink)}

/* ── 四页签：做成 pill 分段控件 ── */
.audit-tabs{display:flex;gap:2px;margin:10px 14px 0;padding:3px;background:var(--line2);border-radius:9px}
.audit-tabs .atab{flex:1;height:26px;border:0;background:transparent;border-radius:7px;
  font-size:12px;color:var(--soft);cursor:pointer;font-family:inherit;
  display:flex;align-items:center;justify-content:center;gap:4px;transition:.12s}
.audit-tabs .atab:hover{color:var(--ink)}
.audit-tabs .atab.active{background:var(--card);color:var(--ink);font-weight:600;
  box-shadow:0 1px 2px rgba(16,24,40,.08)}
.audit-tabs .atab em{font-style:normal;font-size:10.5px;min-width:16px;height:16px;padding:0 4px;
  border-radius:8px;background:var(--reject);color:#fff;display:none;
  align-items:center;justify-content:center;font-variant-numeric:tabular-nums}
.audit-tabs .atab em:not(:empty){display:inline-flex}

.audpanes{padding:12px 14px 14px}
.audpane{max-height:none}

/* 预检小标题 */
.subhead{font-size:11px;color:var(--faint);font-weight:600;margin:14px 0 6px;
  padding-top:10px;border-top:1px dashed var(--line)}

/* 预检行 */
.pc-row{display:flex;gap:7px;align-items:flex-start;font-size:12px;padding:3px 0;color:var(--soft)}
.pc-row .mk{flex:0 0 13px;font-weight:700}
.pc-ok .mk{color:var(--pass)} .pc-bad .mk{color:var(--reject)} .pc-warn .mk{color:var(--warn)}

/* ── 判定区 ── */
.judgeblock .ph{border-bottom:0}
.judgeblock .chips{padding:0 14px}
.judgeblock textarea{margin:8px 14px 0;width:calc(100% - 28px);resize:vertical;
  border:1px solid var(--line);border-radius:9px;padding:8px 10px;font-family:inherit;font-size:12.5px;
  color:var(--ink);background:var(--card);line-height:1.6}
.judgeblock textarea:focus{outline:0;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.scorefold{border-top:1px solid var(--line2);margin-top:10px}
.scorefold>summary{list-style:none;cursor:pointer;padding:10px 14px;font-size:12px;color:var(--soft);
  display:flex;justify-content:space-between;align-items:center}
.scorefold>summary::-webkit-details-marker{display:none}
.scorefold>summary:hover{color:var(--ink)}
.scorefold>summary::after{content:'展开';font-size:11px;color:var(--faint)}
.scorefold[open]>summary::after{content:'收起'}
.scorefold .scores{padding:0 14px 12px}

/* 一键跳秒按钮统一形态 */
.marktime{border:1px solid var(--line);background:var(--card);border-radius:6px;
  padding:1px 6px;font-size:11px;color:var(--brand);cursor:pointer;font-family:var(--mono);
  font-variant-numeric:tabular-nums}
.marktime:hover{border-color:var(--brand);background:var(--brand-soft)}
.marktime.dim{color:var(--faint);cursor:default;background:transparent}
.marktime.dim:hover{border-color:var(--line);background:transparent}

/* 问题点行 */
.issrow{display:flex;gap:7px;align-items:flex-start;font-size:12.5px;padding:6px 0;
  border-bottom:1px solid var(--line2);line-height:1.55}
.issrow:last-child{border-bottom:0}
.issrow .ic{flex:0 0 14px;font-weight:700}
.issrow .mk-kind{font-weight:600;flex:0 0 auto}
.issrow .mk-desc{color:var(--soft);min-width:0}
.issrow.ai-hi .ic{color:var(--reject)} .issrow.ai-hi .mk-kind{color:var(--reject)}
.issrow.ai-mid .ic{color:var(--warn)} .issrow.ai-mid .mk-kind{color:var(--warn)}
.issrow.ai-low .ic{color:var(--faint)}

/* 关键帧页：产品一览图 */
.galwrap{margin-top:8px}
.galwrap img{width:100%;border:1px solid var(--line);border-radius:9px;display:block;cursor:zoom-in}
.galtip{font-size:11.5px;color:var(--soft);line-height:1.6;margin-bottom:7px;
  padding:8px 10px;background:var(--paper);border-radius:8px;border-left:2px solid var(--brand)}

/* 长图可点开 */
.sheetimg{width:100%;border:1px solid var(--line);border-radius:9px;display:block;margin-top:6px}

/* 全片产品一览：窄栏里用 3 列网格，每格够大能看清产品 */
.galgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:8px}
.galcell{position:relative;padding:0;border:1px solid var(--line);border-radius:8px;
  overflow:hidden;background:#000;cursor:pointer;aspect-ratio:9/14}
.galcell img{width:100%;height:100%;object-fit:cover;display:block}
.galcell:hover{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}
.galcell span{position:absolute;left:0;bottom:0;right:0;padding:2px 5px;font-size:10px;
  font-family:var(--mono);color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.72));
  text-align:left;font-variant-numeric:tabular-nums}

/* 关键帧页里「折叠的图」——警示语标注等，默认收起来 */
.foldimg details>summary{list-style:none;cursor:pointer;display:flex;align-items:center;
  gap:6px;font-size:11px;color:var(--soft);font-weight:600;padding:2px 0}
.foldimg details>summary::-webkit-details-marker{display:none}
.foldimg details>summary::after{content:'▾';margin-left:auto;color:var(--faint);font-size:10px}
.foldimg details[open]>summary::after{content:'▴'}
.foldimg details>summary:hover{color:var(--ink)}
.foldimg .mark-wrap{margin-top:7px}
.foldimg .warnmark{width:100%;border:1px solid var(--line);border-radius:9px;display:block}

/* 问题点序号键：告诉用户按几就能跳过去 */
.isskey{flex:0 0 16px;height:16px;line-height:16px;text-align:center;font-size:10px;
  font-weight:700;color:var(--soft);background:var(--line2);border-radius:4px;
  font-variant-numeric:tabular-nums;margin-top:2px}
.isskeys-tip{margin-top:9px;padding:7px 9px;border-radius:7px;background:var(--paper);
  font-size:11px;color:var(--soft);line-height:1.55}
.isskeys-tip b{color:var(--ink);font-family:var(--mono);margin:0 1px}
.issrow.flash{animation:issflash .9s ease}
@keyframes issflash{0%{background:#fff5cc}100%{background:transparent}}

/* 转码提示条 */
#playTip{position:absolute;left:50%;top:14px;transform:translateX(-50%);z-index:6;
  padding:6px 13px;border-radius:8px;font-size:12px;color:#fff;
  background:rgba(20,24,32,.86);pointer-events:none;white-space:nowrap}
#playTip.hidden{display:none}

/* ══════════════════════════════════════════════════════
   总览 · 作战区 · 直播 · 情报 · 店铺 · 拍摄
   ══════════════════════════════════════════════════════ */
.leadbar h2{margin:0 0 4px;font-size:19px;font-weight:650;letter-spacing:.2px}
.leadbar .sub{margin:0}
.leadact{display:flex;gap:8px;flex:0 0 auto}
.leadact .primary,.leadact .ghost{font-size:12.5px;padding:7px 14px}

/* KPI */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 15px;display:flex;flex-direction:column;gap:2px}
.kpi .kk{font-size:11.5px;color:var(--soft)}
.kpi .kv{font-size:25px;font-weight:650;letter-spacing:-.4px;font-variant-numeric:tabular-nums;line-height:1.25}
.kpi .ks{font-size:11px;color:var(--faint)}
.kpi.good .kv{color:var(--pass)} .kpi.warn .kv{color:var(--warn)} .kpi.bad .kv{color:var(--reject)}
.kpi.good{border-color:#b7dfc4} .kpi.warn{border-color:#f3d9a4} .kpi.bad{border-color:#f4c7c3}

/* 卡片网格 */
.ovgrid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}
@media (max-width:1000px){.ovgrid{grid-template-columns:1fr}}
.ovcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px 16px}
.ovcard.hidden{display:none}
.ovh{font-size:13px;font-weight:650;margin-bottom:11px;display:flex;align-items:baseline;gap:6px}
.ovh .hint{font-weight:400;font-size:11.5px;color:var(--faint)}
.ovh .hint b{color:var(--brand)}
.ovempty{font-size:12.5px;color:var(--faint);line-height:1.7;padding:14px 2px}

/* 小表：覆盖 .mini 按钮样式（table.mini 优先级够） */
table.mini{display:table;width:100%;flex:none;font-size:12.5px;border:1px solid var(--line);
  border-radius:9px;border-collapse:collapse;background:var(--card);color:var(--ink);cursor:default;padding:0}
table.mini th{text-align:left;font-weight:600;color:var(--soft);font-size:11.5px;
  padding:7px 10px;background:var(--paper);border-bottom:1px solid var(--line)}
table.mini td{padding:7px 10px;border-bottom:1px solid var(--line2);font-variant-numeric:tabular-nums}
table.mini tr:last-child td{border-bottom:0}
table.mini td.ttl{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:normal}
table.mini td.good,table.mini td.good b{color:var(--pass)}
table.mini td.warn,table.mini td.warn b{color:var(--warn)}
table.mini td.bad,table.mini td.bad b{color:var(--reject)}
.srowdel{appearance:none;border:0;background:none;color:var(--faint);cursor:pointer;
  font-size:14px;line-height:1;padding:0 3px;font-family:inherit}
.srowdel:hover{color:var(--reject)}

/* 进度条行 */
.progrow{display:grid;grid-template-columns:130px 1fr 54px 1fr;gap:10px;align-items:center;
  padding:6px 0;font-size:12.5px}
.pg-n{color:var(--ink);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pg-n em{font-style:normal;font-weight:400;color:var(--faint);font-size:11px;margin-left:5px}
.pg-bar{height:7px;border-radius:4px;background:var(--line2);overflow:hidden;display:block}
.pg-bar i{display:block;height:100%;background:var(--pass);border-radius:4px;transition:width .3s}
.pg-t{text-align:right;font-variant-numeric:tabular-nums;color:var(--soft);font-size:12px}
.pg-w{color:var(--faint);font-size:11.5px;text-align:right}

/* 表单网格：录入投放数据 / 新建派单 / 各模块表单 */
.spendform,.tf-grid,.ff-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:11px 13px}
.spendform label,.tf-grid label,.ff-grid label{display:flex;flex-direction:column;gap:4px;
  font-size:11.5px;color:var(--soft)}
.spendform label.wide,.tf-grid label.wide,.ff-grid label.wide{grid-column:1/-1}
.spendform input,.spendform select,.spendform textarea,
.tf-grid input,.tf-grid select,.tf-grid textarea,
.ff-grid input,.ff-grid select,.ff-grid textarea{
  font-family:inherit;font-size:13px;color:var(--ink);background:var(--card);
  border:1px solid var(--line);border-radius:8px;padding:7px 10px;width:100%}
.spendform input:focus,.tf-grid input:focus,.ff-grid input:focus,
.tf-grid select:focus,.ff-grid select:focus{outline:none;border-color:var(--brand)}
.tf-act,.fact{display:flex;gap:9px;margin-top:14px}
.taskform,.checkcard,.rivalform,.shopform,.shootform{
  background:var(--card);border:1px solid var(--line);border-radius:12px;padding:15px 16px 16px;margin-bottom:16px}
.taskform.hidden,.checkcard.hidden,.rivalform.hidden,.shopform.hidden,.shootform.hidden{display:none}

/* 作战区看板 */
.board{display:flex;flex-direction:column;gap:14px}
.gcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 14px}
.gh{display:flex;align-items:baseline;gap:8px;margin-bottom:11px;flex-wrap:wrap}
.gh b{font-size:13.5px}
.gh .glead{font-size:11.5px;color:var(--brand);font-weight:600}
.gh .gdesc{font-size:11.5px;color:var(--faint)}
.bcols{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}
@media (max-width:1180px){.bcols{grid-template-columns:repeat(3,1fr)}}
@media (max-width:820px){.bcols{grid-template-columns:1fr 1fr}}
.bcol{background:var(--paper);border-radius:9px;padding:8px;min-height:64px}
.bch{font-size:11.5px;font-weight:650;color:var(--soft);padding:2px 4px 8px;
  display:flex;align-items:center;gap:6px}
.bch .bn{margin-left:auto;font-size:10.5px;background:var(--card);border:1px solid var(--line);
  color:var(--faint);padding:0 6px;border-radius:8px;font-variant-numeric:tabular-nums}
.bempty{font-size:11.5px;color:var(--faint);text-align:center;padding:10px 0}
.tcard{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:9px 10px;margin-bottom:7px}
.tcard .tt{font-size:12.5px;font-weight:600;line-height:1.45;margin-bottom:3px}
.tcard .tm{font-size:11px;color:var(--soft);font-variant-numeric:tabular-nums}
.tcard .tsrc{font-size:11px;color:var(--brand);margin-top:3px}
.tcard .tnote{font-size:11px;color:var(--faint);margin-top:4px;line-height:1.55}
.tcard .tact{display:flex;gap:6px;align-items:center;margin-top:8px}
.tstatus{flex:1;font-family:inherit;font-size:11.5px;padding:4px 6px;border-radius:7px;
  border:1px solid var(--line);background:var(--card);color:var(--soft);cursor:pointer}
.tdel{appearance:none;border:0;background:none;color:var(--faint);cursor:pointer;
  font-size:15px;line-height:1;padding:0 3px;font-family:inherit}
.tdel:hover{color:var(--reject)}

/* ── 直播间监控 ── */
.howbar{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px}
@media (max-width:900px){.howbar{grid-template-columns:1fr}}
.howc{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 13px}
.howc b{font-size:12.5px;display:block;margin-bottom:2px}
.howc span{font-size:11.5px;color:var(--soft);line-height:1.55}
.roomgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));gap:12px}
.roomcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 14px}
.roomcard.bad{border-color:#f4c7c3;background:#fffbfb}
.roomh{display:flex;align-items:baseline;gap:7px;margin-bottom:8px}
.roomh b{font-size:13.5px}
.roomh .rplat{font-size:10.5px;padding:1px 7px;border-radius:8px;background:var(--paper);
  color:var(--soft);border:1px solid var(--line)}
.roomh .rmeta{margin-left:auto;display:flex;gap:5px}
.rmeta button,.rminibtn{appearance:none;border:0;background:none;color:var(--faint);
  cursor:pointer;font-size:12px;font-family:inherit;padding:0 3px}
.rmeta button:hover,.rminibtn:hover{color:var(--brand)}
.rsub{font-size:11.5px;color:var(--faint);margin-bottom:9px}
.rchecks{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.rck{border:1px solid var(--line);border-radius:7px;padding:5px 7px;background:var(--paper)}
.rck .rl{font-size:10.5px;color:var(--soft);display:block;margin-bottom:2px}
.rck .rv{font-size:11.5px;font-weight:600}
.rck.ok .rv{color:var(--pass)} .rck.bad .rv{color:var(--reject)} .rck.na .rv{color:var(--faint)}
.rck.bad{background:var(--reject-soft);border-color:#f4c7c3}
.ralerts{margin-top:8px;display:flex;flex-wrap:wrap;gap:5px}
.alertpill{font-size:10.5px;padding:2px 8px;border-radius:9px;background:var(--reject-soft);
  color:#a01b12;border:1px solid #f4c7c3;font-weight:600}
.ckgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin-bottom:4px}
.ckitem{border:1px solid var(--line);border-radius:9px;padding:9px 11px;background:var(--paper)}
.ckitem .ckt{font-size:12px;font-weight:650;margin-bottom:3px}
.ckitem .ckh{font-size:11px;color:var(--faint);margin-bottom:7px}
.choice{display:flex;gap:5px}
.choice button{flex:1;font-family:inherit;font-size:11.5px;padding:4px 0;border-radius:7px;
  border:1px solid var(--line);background:var(--card);color:var(--soft);cursor:pointer}
.choice button.on[data-v="ok"]{background:var(--pass-soft);border-color:#b7dfc4;color:#0b6b3d;font-weight:600}
.choice button.on[data-v="bad"]{background:var(--reject-soft);border-color:#f4c7c3;color:#a01b12;font-weight:600}
.choice button.on[data-v="na"]{background:var(--line2);border-color:var(--line);color:var(--soft);font-weight:600}
.scriptbox{grid-column:1/-1}
.scriptbox textarea{width:100%;font-family:inherit;font-size:12.5px;line-height:1.65;
  border:1px solid var(--line);border-radius:9px;padding:9px 11px;resize:vertical;background:var(--card);color:var(--ink)}
.hitbox{margin-top:9px}
.hitrow{display:flex;gap:8px;align-items:baseline;font-size:12px;padding:5px 9px;border-radius:7px;
  background:var(--reject-soft);border:1px solid #f4c7c3;margin-bottom:5px;flex-wrap:wrap}
.hitrow .hw{font-weight:700;color:#a01b12}
.hitrow .ht{font-size:11px;color:var(--soft)}
.hitrow .hb{font-size:11px;color:var(--faint)}
.hitrow .hs{font-size:11px;color:var(--pass);margin-left:auto}
.hitok{font-size:12px;color:var(--pass);padding:5px 9px;background:var(--pass-soft);
  border:1px solid #b7dfc4;border-radius:7px}
.audiobox{grid-column:1/-1;border:1px dashed var(--line);border-radius:9px;padding:11px 13px;background:var(--paper)}
.audiobox .at{font-size:12px;font-weight:650;margin-bottom:4px}
.audiobox .ah{font-size:11.5px;color:var(--faint);margin-bottom:9px;line-height:1.6}
.audiores{margin-top:9px;font-size:12.5px;padding:8px 11px;border-radius:8px;
  background:var(--card);border:1px solid var(--line)}
.audiores.ok{background:var(--pass-soft);border-color:#b7dfc4;color:#0b6b3d}
.audiores.silent{background:var(--reject-soft);border-color:#f4c7c3;color:#a01b12}
.audiores.low{background:var(--warn-soft);border-color:#f3d9a4;color:#8a4b06}
.audiores.unknown{background:var(--line2);color:var(--soft)}
.logrow{display:grid;grid-template-columns:112px 128px 1fr 130px 30px;gap:10px;align-items:center;
  padding:8px 0;border-bottom:1px solid var(--line2);font-size:12.5px}
.logrow .lg-t{color:var(--faint);font-size:11.5px;font-variant-numeric:tabular-nums}
.logrow .lg-r{font-weight:600}
.logrow .lg-s{display:flex;gap:5px;flex-wrap:wrap}
.lgtag{font-size:10.5px;padding:1px 7px;border-radius:8px;border:1px solid var(--line);color:var(--faint)}
.lgtag.ok{background:var(--pass-soft);border-color:#b7dfc4;color:#0b6b3d}
.lgtag.bad{background:var(--reject-soft);border-color:#f4c7c3;color:#a01b12}
.logrow .lg-n{color:var(--soft);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ── 同行情报 ── */
.kindbar{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:14px}
.kchip{font-family:inherit;font-size:12px;padding:5px 13px;border-radius:16px;
  border:1px solid var(--line);background:var(--card);color:var(--soft);cursor:pointer}
.kchip.active{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
/* 品牌筛选条：6 家同行混在一个列表里根本看不过来，单独一行、样式更轻一点 */
.brandbar{margin-top:-6px}
.brandbar .kchip{font-size:11.5px;padding:4px 11px;border-radius:14px;color:var(--soft)}
.brandbar .kchip.active{background:var(--brand-soft);border-color:var(--brand);
  color:var(--brand);font-weight:600}
.brandbar .cnt{opacity:.65;margin-left:4px;font-size:10.5px}
/* 平台切换条：抖音 / 视频号的爆款逻辑完全不同，放最上面一行单独一排 */
/* 日期筛选条：跟有米云一样的今天/昨天/近7天/近30天，放最上面一层——
   每天 9 点上班第一件事就是"看昨天同行发了什么" */
.datebar{align-items:center;margin-bottom:10px}
.datebar .dlab{font-size:12px;color:var(--faint);margin-right:2px}
.datebar .kchip{font-size:12px;padding:5px 13px}
.datebar .cnt{opacity:.6;margin-left:5px;font-size:10.5px}
.datebar .kchip.active .cnt{opacity:.85}
.datebar .dsep{width:1px;height:16px;background:var(--line);margin:0 4px}
/* 曝光量：这是"这条片子到底起没起量"的唯一硬指标，做成实心胶囊，比日期显眼 */
.rcard .rexp{font-size:11px;padding:1px 8px;border-radius:8px;font-weight:700;
  background:var(--warn-soft);color:var(--warn);white-space:nowrap}
.rcard .rexp i{font-style:normal;opacity:.7;font-weight:500;margin-left:3px;font-size:10px}
/* 素材结构拆解：默认折叠，点开是钩子/痛点/产品/证明/CTA 五段 */
.rstruct{margin-top:6px;font-size:12px}
.rstruct summary{cursor:pointer;color:var(--brand);font-size:11.5px;font-weight:600;
  list-style:none;display:inline-flex;align-items:center;gap:4px;
  padding:2px 9px;border:1px solid var(--line);border-radius:11px;background:#fff}
.rstruct summary::-webkit-details-marker{display:none}
.rstruct summary::before{content:'▸';font-size:9px;opacity:.6}
.rstruct[open] summary::before{content:'▾'}
.rstruct summary i{font-style:normal;color:var(--faint);font-weight:400;font-size:10.5px}
.rstruct .srow{display:flex;gap:8px;margin-top:5px;line-height:1.55;align-items:baseline}
.rstruct .srow b{flex:0 0 68px;color:var(--faint);font-weight:600;font-size:11px}
.rstruct .srow span{color:var(--ink);flex:1}
.platbar{margin-bottom:9px;padding-bottom:9px;border-bottom:1px dashed var(--line)}
.platbar .kchip{font-size:12px;padding:5px 14px}
.platbar .cnt{opacity:.6;margin-left:5px;font-size:10.5px}
.platbar .kchip.active .cnt{opacity:.85}
/* 卡片上的平台角标：一屏混着两个平台的片子时，必须一眼分出是哪边的 */
.rcard .rplat{font-size:10px;padding:1px 7px;border-radius:8px;font-weight:700;letter-spacing:.2px}
.rcard .rplat.p-dy{background:#111;color:#fff}
.rcard .rplat.p-wx{background:#e8f7ec;color:#0b8c3f;border:1px solid #bfe6cc}
/* 微信群（群里转的视频号卡片）：跟「视频号」区分开，用微信主色的浅底 */
.rcard .rplat.p-wxq{background:#e6f6ff;color:#0b6ea8;border:1px solid #b6dcf0}
/* 群素材的互动数据 + 发布距今 */
.rcard .rwxs{font-size:10.5px;color:#c2410c;background:#fff3e8;border:1px solid #fbd5b5;
  padding:1px 6px;border-radius:8px;white-space:nowrap}
.rcard .rgo{font-size:10.5px;color:var(--faint);letter-spacing:.2px}
.rivallist{display:flex;flex-direction:column;gap:9px}
.rcard{background:var(--card);border:1px solid var(--line);border-radius:11px;padding:11px 14px;
  display:grid;grid-template-columns:auto 1fr auto;gap:11px;align-items:center}
.rcard.done{opacity:.62}
.rcard .rl{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.rcard .rkind{font-size:10.5px;padding:1px 8px;border-radius:8px;background:var(--brand-soft);
  color:var(--brand);font-weight:600}
.rcard .rkind.k-ai_intro{background:#f3e8ff;color:#7c3aed}
.rcard .rkind.k-hot_product{background:var(--warn-soft);color:var(--warn)}
.rcard .rkind.k-script{background:var(--pass-soft);color:#0b6b3d}
.rcard .rbrand{font-size:13px;font-weight:650}
/* 视频类型：爆片的形态（口播/剧情/测评…）。用空心胶囊，跟实心的「情报类型」区分开，
   一眼能看出「这是条口播」还是「这是剧情」——抄的时候方向完全不同。 */
.rcard .rvtype{font-size:10.5px;padding:1px 7px;border-radius:8px;background:#fff;
  border:1px solid var(--line);color:var(--soft);font-weight:600}
/* 品类：这个账号卖的是哪类品（面护/洁面皂/洗发皂/口腔）。
   用淡品牌色实心，跟上面空心的「视频类型」区分开——账号一多，最先要看的是品类。 */
.rcard .rcat{font-size:10.5px;padding:1px 7px;border-radius:8px;background:var(--brand-soft);
  border:1px solid #D3DFFD;color:var(--brand-deep);font-weight:650;white-space:nowrap}
/* 封面缩略图：竖屏 9:16，跟抖音原片比例一致，一眼能看出镜头是什么样。
   没封面时是个虚线感的浅色块，点它就能传图/传视频。 */
.rcard .rthumb{width:47px;height:82px;border-radius:8px;overflow:hidden;position:relative;
  flex:0 0 auto;border:1px solid var(--line);cursor:pointer;
  background:linear-gradient(160deg,#f2f4f8,#e3e8f1);
  display:flex;align-items:center;justify-content:center}
.rcard .rthumb img{width:100%;height:100%;object-fit:cover;display:block}
.rcard .rthumb .lempty{font-size:10px;color:var(--faint);line-height:1.35;text-align:center}
/* 有页链接但还没传封面：给一个「▶ 看片」，别让人对着灰方块猜 */
.rcard .rthumb.asplay{background:linear-gradient(160deg,#f0f4ff,#dde5ff);border-style:dashed;border-color:#c7d3f5}
.rcard .rthumb .lempty.play{display:flex;flex-direction:column;align-items:center;gap:1px;
  color:var(--brand);font-size:15px;font-weight:600}
.rcard .rthumb .lempty.play i{font-style:normal;font-size:9px;letter-spacing:.5px}
.rcard .rthumb .rplay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:15px;color:#fff;text-shadow:0 1px 5px rgba(0,0,0,.75);pointer-events:none}
.rcard .rthumb:hover{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}

/* 看片浮层：点封面直接在这儿播，不用跳出去 */
#rvViewer{position:fixed;inset:0;z-index:9998;background:rgba(10,13,18,.88);
  display:flex;align-items:center;justify-content:center;padding:40px 24px}
#rvViewer.hidden{display:none}
#rvViewer .box{position:relative;max-height:88vh}
#rvViewer video,#rvViewer img{max-height:84vh;max-width:min(520px,86vw);border-radius:10px;
  display:block;background:#000;box-shadow:0 18px 50px rgba(0,0,0,.5)}
#rvViewer .x{position:absolute;top:-32px;right:0;background:none;border:0;color:#fff;
  font-size:20px;cursor:pointer;line-height:1}
/* 素材页内嵌：比视频宽，顶上给「新窗口打开」兜底（它家是登录态 SPA） */
#rvViewer.wide .box{width:min(1180px,94vw)}
#rvViewer .pbar{display:flex;justify-content:space-between;align-items:center;gap:14px;
  color:#dfe6f2;font-size:12px;padding:0 2px 8px}
#rvViewer .pbar a{color:#9fc0ff;text-decoration:none;white-space:nowrap}
#rvViewer .pbar a:hover{text-decoration:underline}
#rvViewer iframe{width:100%;height:min(78vh,780px);border:0;border-radius:10px;
  background:#fff;display:block;box-shadow:0 18px 50px rgba(0,0,0,.5)}
/* 批量传片 · 对照表确认框。文件是有米云下来的哈希名，跟情报对不上号，
   所以必须在传之前把「第几个文件挂哪条」摊开给人看一眼。 */
.rvmodal{position:fixed;inset:0;z-index:9996;background:rgba(10,13,18,.5);
  display:flex;align-items:center;justify-content:center;padding:28px 20px}
.rvmodal.hidden{display:none}
.rvmodal .box{background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:16px 18px;width:min(820px,95vw);max-height:86vh;overflow:auto;
  box-shadow:0 18px 50px rgba(0,0,0,.28)}
.rvmodal .ovh{font-size:14px;font-weight:650;color:var(--ink);margin-bottom:6px}
.rvmodal .hint{font-size:11.5px;color:var(--faint);line-height:1.7;margin:0 0 10px}
.rvmodal .rtbl{border:1px solid var(--line);border-radius:9px;overflow:hidden;max-height:46vh;overflow-y:auto}
.rvmodal table{width:100%;border-collapse:collapse;font-size:12px}
.rvmodal th{background:var(--softbg,#f6f7f9);color:var(--faint);font-weight:600;
  text-align:left;padding:7px 10px;position:sticky;top:0}
.rvmodal td{padding:7px 10px;border-top:1px solid var(--line);color:var(--soft);vertical-align:top}
.rvmodal td.fname{color:var(--ink);font-family:ui-monospace,Menlo,Consolas,monospace;
  font-size:11px;word-break:break-all}
.rvmodal td.mb{white-space:nowrap;color:var(--faint)}
.rvmodal .tf-act{margin-top:12px}
/* 对照表里的匹配来源：绿=靠素材ID认出来的，灰=只能按顺序挂 */
.rvmodal .how{display:inline-block;font-size:10px;font-weight:650;padding:1px 6px;
  border-radius:6px;background:#eef0f3;color:#6b7280;margin-right:5px;white-space:nowrap}
.rvmodal .how.ok{background:#e7f6ec;color:#15803d}
/* 卡片上的「已存」小角标：一眼分清哪些片子是真存进工作台了（同事能看） */
.rcard .rlocal{position:absolute;left:5px;top:5px;z-index:2;background:rgba(22,163,74,.92);
  color:#fff;font-size:9.5px;font-weight:700;padding:1px 5px;border-radius:5px;letter-spacing:.2px}
.rcard .rtitle{font-size:12.5px;color:var(--ink)}
.rcard .rmeta{font-size:11.5px;color:var(--faint);margin-top:3px}
.rcard .rn{margin-top:5px;font-size:11.5px;color:var(--soft);line-height:1.6}
.rcard .racts{display:flex;gap:6px;align-items:center}
.racts .ghost{font-size:11.5px;padding:5px 11px}
.racts .converted{font-size:11px;color:var(--pass);font-weight:600}

/* ── 店铺监控 ── */
.shopalerts{display:flex;flex-direction:column;gap:7px;margin-bottom:14px}
.salert{background:var(--reject-soft);border:1px solid #f4c7c3;border-radius:9px;
  padding:8px 13px;font-size:12.5px;color:#a01b12;display:flex;gap:8px;align-items:baseline}
.salert b{flex:0 0 auto}
.salert .sapp{font-size:10.5px;padding:1px 6px;border-radius:8px;background:#fff;
  border:1px solid #f0c4bf;color:#a01b12;flex:0 0 auto}
/* 等级圆点：危险实心红、警戒黄、正常绿，和卡片边框同一套 */
.sapdot{width:7px;height:7px;border-radius:50%;flex:0 0 auto;align-self:center}
.sapdot.danger{background:var(--reject)}
.sapdot.warn{background:#d98b0b}
.sapdot.ok{background:var(--pass)}

/* 抖店 API 同步状态条：五态（未接入灰/待授权黄/已授权蓝/已同步绿/失败红） */
.syncbar{display:flex;align-items:center;gap:9px;background:var(--panel,#fff);
  border:1px solid var(--line,#e6e2e9);border-radius:9px;padding:7px 13px;
  margin-bottom:12px;font-size:12.5px}
.syncbar .sdot{width:8px;height:8px;border-radius:50%;flex:0 0 auto}
.syncbar .sdot.off{background:#b9b4c0}
.syncbar .sdot.wait{background:#d98b0b}
.syncbar .sdot.idle{background:#2f6bd8}
.syncbar .sdot.ok{background:var(--pass)}
.syncbar .sdot.bad{background:var(--reject)}
.syncbar .slbl{font-size:10.5px;padding:1px 7px;border-radius:8px;
  background:var(--soft,#f4f2f7);color:var(--dim,#6b6577);flex:0 0 auto}
.syncbar .smsg{color:var(--dim,#6b6577)}
.syncbar .smeta{margin-left:auto;color:var(--dim,#6b6577);font-size:11.5px}
.syncbar .smbtn{flex:0 0 auto;padding:3px 12px;font-size:12px}
.syncbar .smbtn:disabled{opacity:.5;cursor:not-allowed}

/* 最危险的那家：单独一条，不藏在大类目卡里 */
.shopworst{display:none}
.shopworst.on{display:flex;align-items:baseline;gap:10px;background:#fff4f3;
  border:1px solid #f4c7c3;border-left:3px solid var(--reject);border-radius:9px;
  padding:10px 14px;margin-bottom:14px;font-size:12.5px;color:#a01b12}
.shopworst .swp{font-size:10.5px;padding:1px 7px;border-radius:8px;background:#fff;
  border:1px solid #f0c4bf}
.shopworst .swv{margin-left:auto;color:#8c1610}

/* 五大类目卡：一屏看清五家店铺谁在掉分 */
.shopcats{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}
@media (max-width:1500px){.shopcats{grid-template-columns:repeat(3,1fr)}}
@media (max-width:900px){.shopcats{grid-template-columns:repeat(2,1fr)}}
@media (max-width:600px){.shopcats{grid-template-columns:1fr}}
.shopcat{background:var(--card);border:1px solid var(--line);border-radius:11px;
  padding:11px 13px;cursor:pointer;transition:border-color .12s,box-shadow .12s;
  border-top:3px solid var(--pc,#888)}
.shopcat:hover{box-shadow:0 2px 10px rgba(0,0,0,.07)}
.shopcat.on{border-color:var(--pc);box-shadow:0 0 0 2px color-mix(in srgb,var(--pc) 22%,transparent)}
.shopcat.bad{border-color:#f4c7c3;border-top-color:var(--reject)}
.shopcat.warn{border-color:#f3d9a4;border-top-color:#d98b0b}
.shopcat.empty{opacity:.72}
.shopcat .scat-h{display:flex;align-items:center;gap:6px;margin-bottom:9px}
.shopcat .scat-h b{font-size:13px}
.scat-dot{width:8px;height:8px;border-radius:50%;background:var(--pc,#888);flex:0 0 auto}
.scat-badge{margin-left:auto;font-size:10px;padding:1px 6px;border-radius:7px;
  border:1px solid var(--line);color:var(--soft);background:var(--paper);white-space:nowrap}
.scat-badge.bad{color:#a01b12;background:var(--reject-soft);border-color:#f4c7c3}
.scat-badge.warn{color:#8a5a00;background:#fdf6e8;border-color:#f3d9a4}
.scat-badge.ok{color:var(--pass);background:#eef7f1;border-color:#cfe6d8}
.scat-badge.empty{color:var(--faint)}
.shopcat .scat-score{display:flex;align-items:baseline;gap:5px;margin-bottom:7px}
.shopcat .scat-score b{font-size:22px;font-weight:680;font-variant-numeric:tabular-nums;line-height:1.2}
.shopcat .scat-score>span{font-size:10.5px;color:var(--soft)}
.shopcat .scat-score .sd2{margin-left:auto;font-size:10.5px;font-variant-numeric:tabular-nums}
.shopcat .sd2.down{color:var(--reject)} .shopcat .sd2.up{color:var(--pass)}
.shopcat .sd2.na{color:var(--faint)}
.shopcat .scat-kv,.shopcat .scat-kv2{display:flex;gap:10px;font-size:10.5px;color:var(--soft);
  padding:4px 0;border-top:1px solid var(--line);flex-wrap:wrap}
.shopcat .scat-kv2 b{font-variant-numeric:tabular-nums;color:var(--ink)}
.shopcat .scat-watch{margin-top:6px;font-size:10.5px;color:var(--faint);line-height:1.55;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}

.shoplist{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}
.shopcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 15px;
  border-left:3px solid var(--pc,#888)}
.shopcard.warn{border-color:#f3d9a4}
.shopcard.bad{border-color:#f4c7c3;border-left-color:var(--reject)}
.shoph{display:flex;align-items:baseline;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.shoph b{font-size:13.5px}
.shoph .sp{font-size:10.5px;padding:1px 7px;border-radius:8px;background:var(--paper);
  color:var(--soft);border:1px solid var(--line)}
.shoph .sd{margin-left:auto;font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums}
.smetrics{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.sm{background:var(--paper);border-radius:8px;padding:7px 9px;text-align:center}
.sm .sl{font-size:10.5px;color:var(--soft)}
.sm .sv{font-size:16px;font-weight:650;font-variant-numeric:tabular-nums;line-height:1.35}
.sm.down .sv{color:var(--reject)} .sm.up .sv{color:var(--pass)}
.sm .sd2{font-size:10px;color:var(--faint);font-variant-numeric:tabular-nums}
.sm.down .sd2{color:var(--reject)} .sm.up .sd2{color:var(--pass)}
.shopwarn{margin-top:9px;display:flex;flex-wrap:wrap;gap:5px}

/* 录快照时的维度区：标签跟着平台走 */
.spdims{border:1px dashed var(--line);border-radius:9px;padding:10px 12px;background:var(--paper)}
.spdims-t{font-size:12px;font-weight:600;margin-bottom:9px;display:flex;align-items:baseline;gap:8px}
.spdims-t .dimhint{font-weight:400;font-size:10.5px;color:var(--soft)}
.spdims-g{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
@media (max-width:900px){.spdims-g{grid-template-columns:repeat(2,1fr)}}
.spdims-g label{font-size:10.5px;color:var(--soft);display:flex;flex-direction:column;gap:3px}
.spbasis{margin-top:9px;font-size:10.5px;color:var(--faint);line-height:1.6}
.spwatch{margin-top:4px;font-size:10.5px;color:#8a5a00;line-height:1.6}

/* ── 编导拍摄对接 ──
   2026-10-26 重做。三泳道（未开始 / 进行中 / 已完成）替代原来的六列小看板：
   提需求的人只关心这三档，六个状态名反而看花眼。细状态放卡片右上角徽章。 */
.shootbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:0 0 14px}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--card)}
.seg button{border:0;background:transparent;font-family:inherit;font-size:12.5px;color:var(--soft);
  padding:7px 13px;cursor:pointer;display:flex;align-items:center;gap:5px;white-space:nowrap}
.seg button+button{border-left:1px solid var(--line)}
.seg button:hover{background:var(--paper);color:var(--ink)}
.seg button.active{background:var(--brand);color:#fff}
.seg .segn{font-size:10px;font-weight:700;background:var(--reject);color:#fff;
  padding:0 5px;border-radius:7px;font-variant-numeric:tabular-nums}
.seg button.active .segn{background:rgba(255,255,255,.28)}
.seg .segn.hidden{display:none}
.shootsearch{flex:1;min-width:170px;max-width:330px;font-family:inherit;font-size:12.5px;
  padding:7px 11px;border:1px solid var(--line);border-radius:9px;background:var(--card);color:var(--ink)}
.shootsearch:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.shootsel{font-family:inherit;font-size:12.5px;padding:7px 9px;border:1px solid var(--line);
  border-radius:9px;background:var(--card);color:var(--soft);cursor:pointer}
.ghost.tiny{font-size:11.5px;padding:5px 9px;border-radius:7px}

.sboard3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;align-items:start}
@media (max-width:1180px){.sboard3{grid-template-columns:1fr}}
.s3col{background:#f1f3f7;border:1px solid var(--line);border-radius:13px;padding:8px;min-height:130px}
.s3h{display:flex;align-items:center;gap:7px;padding:3px 6px 9px;font-size:12px;font-weight:700;
  color:var(--soft);letter-spacing:.2px}
.s3h em{font-style:normal;font-weight:400;font-size:10.5px;color:var(--faint)}
.s3h .s3n{margin-left:auto;font-size:10.5px;background:var(--card);border:1px solid var(--line);
  color:var(--faint);padding:0 7px;border-radius:9px;font-variant-numeric:tabular-nums}
.s3col[data-stage="todo"] .s3h{color:#96650a}
.s3col[data-stage="doing"] .s3h{color:var(--brand)}
.s3col[data-stage="done"] .s3h{color:#0b7a45}
.s3empty{font-size:11.5px;color:var(--faint);text-align:center;padding:20px 8px;line-height:1.8}

.tk{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 11px 9px;
  margin-bottom:8px;cursor:pointer;position:relative;transition:border-color .12s,box-shadow .12s}
.tk:hover{border-color:#c5d2f2;box-shadow:0 2px 10px rgba(28,52,120,.08)}
.tk::before{content:'';position:absolute;left:0;top:9px;bottom:9px;width:3px;border-radius:0 3px 3px 0;
  background:var(--line)}
.tk[data-stage="todo"]::before{background:#e0a008}
.tk[data-stage="doing"]::before{background:var(--brand)}
.tk[data-stage="done"]::before{background:#12a15a}
.tk.od{border-color:#f4c7c3;background:#fffbfb}
.tk-top{display:flex;align-items:center;gap:5px;margin-bottom:4px;flex-wrap:wrap}
.tk-type{font-size:10px;font-weight:700;padding:1px 6px;border-radius:6px;
  background:var(--brand-soft);color:var(--brand)}
.tk-type.script{background:#f2e9ff;color:#6b3fd4}
.tk-pri{font-size:10px;font-weight:700;padding:1px 6px;border-radius:6px;background:var(--paper);
  color:var(--faint);border:1px solid var(--line)}
.tk-pri.high{background:var(--reject-soft);color:var(--reject);border-color:#f4c7c3}
.tk-st{margin-left:auto;font-size:10.5px;padding:1px 7px;border-radius:7px;background:var(--paper);
  color:var(--soft);border:1px solid var(--line);white-space:nowrap}
.tk-st.review{background:var(--warn-soft);color:var(--warn);border-color:#f3d9a4}
.tk-st.done{background:var(--pass-soft);color:var(--pass);border-color:#b7dfc4}
.tk-st.closed{background:#f3f4f6;color:var(--faint)}
.tk-title{font-size:13px;font-weight:600;line-height:1.45;margin-bottom:5px;word-break:break-word}
.tk-meta{font-size:11px;color:var(--soft);display:flex;gap:8px;flex-wrap:wrap;line-height:1.6}
.tk-meta i{font-style:normal;color:var(--faint);margin-right:3px}
.tk-prog{display:flex;gap:3px;margin-top:9px}
.tk-prog i{flex:1;height:4px;border-radius:2px;background:#e7e9ef}
.tk-prog i.on{background:var(--brand)}
.tk[data-stage="done"] .tk-prog i.on{background:#12a15a}
.tk-foot{display:flex;align-items:center;gap:6px;margin-top:7px;font-size:10.5px;color:var(--faint)}
.tk-due{font-variant-numeric:tabular-nums}
.tk.od .tk-due{color:var(--reject);font-weight:700}
.tk-wait{margin-left:auto;font-size:10px;font-weight:700;color:#fff;background:var(--reject);
  padding:1px 6px;border-radius:7px;white-space:nowrap}

/* ── 抽屉（提需求 / 详情 / 提醒共用）── */
/* 遮罩和抽屉都从顶栏下面开始画（inset 顶部 = 52px）：
   顶栏是全局唯一的「提醒 / 提意见 / 怎么用」入口，抽屉一打开就点不到的话，
   用户在详情里收到提醒连铃铛都点不了。也让视觉上像是从导航栏下方滑出。 */
.drmask{position:fixed;inset:52px 0 0 0;background:rgba(17,22,34,.36);z-index:60;opacity:0;
  transition:opacity .16s}
.drmask.show{opacity:1}
.drawer{position:fixed;top:52px;right:0;height:calc(100vh - 52px);width:min(640px,100vw);
  background:var(--card);
  z-index:61;display:flex;flex-direction:column;box-shadow:-8px 0 34px rgba(17,22,34,.18);
  transform:translateX(103%);transition:transform .2s ease}
.drawer.show{transform:none}
.drawer.wide{width:min(820px,100vw)}
.drawer.narrow{width:min(440px,100vw)}
.dh{display:flex;align-items:flex-start;gap:12px;padding:15px 20px 12px;border-bottom:1px solid var(--line)}
.dhgrow{flex:1;min-width:0}
.dhtitle{font-size:16px;font-weight:650;line-height:1.45;word-break:break-word}
.dhsub{font-size:11.5px;color:var(--faint);margin-top:3px;display:flex;gap:7px;
  flex-wrap:wrap;align-items:center}
.xbtn{border:0;background:var(--paper);color:var(--soft);font-size:19px;line-height:1;
  width:30px;height:30px;border-radius:8px;cursor:pointer;flex:0 0 auto}
.xbtn:hover{background:var(--line);color:var(--ink)}
.dbody{flex:1;overflow-y:auto;padding:15px 20px 24px}
.dfoot{display:flex;align-items:center;gap:9px;padding:11px 20px;border-top:1px solid var(--line);
  background:var(--card)}
.dfoot-tip{flex:1;font-size:11.5px;color:var(--faint);line-height:1.5}

/* 详情里的分页签 */
.sd-tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin:-2px 0 15px;overflow-x:auto}
.sd-tab{border:0;background:transparent;font-family:inherit;font-size:12.5px;color:var(--soft);
  padding:8px 12px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}
.sd-tab:hover{color:var(--ink)}
.sd-tab.on{color:var(--brand);border-bottom-color:var(--brand);font-weight:600}
.sd-tab b{font-size:10.5px;color:var(--faint);font-weight:600;margin-left:2px}
.sd-sec{margin-bottom:17px}
.sd-lbl{font-size:10.5px;font-weight:700;color:var(--faint);letter-spacing:.7px;margin-bottom:6px}
.sd-kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(138px,1fr));gap:9px}
.sd-kv>div{background:var(--paper);border:1px solid var(--line2);border-radius:9px;padding:8px 10px}
.sd-kv b{display:block;font-size:10.5px;color:var(--faint);font-weight:600;margin-bottom:1px}
.sd-kv span{font-size:12.5px;word-break:break-word}
.sd-txt{font-size:13px;line-height:1.78;white-space:pre-wrap;word-break:break-word}
.sd-txt.muted{color:var(--faint);font-size:12px}
.reflist{display:flex;flex-direction:column;gap:6px}
.reflist a{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--brand);
  text-decoration:none;background:var(--brand-soft);border:1px solid #dbe3ff;
  border-radius:8px;padding:7px 10px;word-break:break-all}
.reflist a:hover{background:#e3eaff}
.reflist a em{font-style:normal;color:var(--soft);font-size:11px;flex:0 0 auto}

/* 步骤条 */
.stepbar{display:flex;margin:6px 0 22px;padding:0 2px}
.stepbar .st{flex:1;position:relative;text-align:center;font-size:10.5px;color:var(--faint);
  padding-top:17px}
.stepbar .st::before{content:'';position:absolute;top:5px;left:0;right:0;height:2px;background:var(--line)}
.stepbar .st:first-child::before{left:50%}
.stepbar .st:last-child::before{right:50%}
.stepbar .st::after{content:'';position:absolute;top:1px;left:50%;transform:translateX(-50%);
  width:10px;height:10px;border-radius:50%;background:var(--card);
  border:2px solid var(--line);z-index:1}
.stepbar .st.done{color:var(--soft)}
.stepbar .st.done::before{background:#12a15a}
.stepbar .st.done::after{background:#12a15a;border-color:#12a15a}
.stepbar .st.cur{color:var(--brand);font-weight:700}
.stepbar .st.cur::after{background:#fff;border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-soft)}

/* 表单 */
.sf{margin-bottom:12px}
.sf>label{display:block;font-size:11.5px;font-weight:600;color:var(--soft);margin-bottom:5px}
.sf>label .req{color:var(--reject);margin-left:2px}
.sf input,.sf select,.sf textarea{width:100%;font-family:inherit;font-size:13px;padding:9px 11px;
  border:1px solid var(--line);border-radius:9px;background:var(--card);color:var(--ink)}
.sf textarea{resize:vertical;line-height:1.7}
.sf input:focus,.sf select:focus,.sf textarea:focus{outline:none;border-color:var(--brand);
  box-shadow:0 0 0 3px var(--brand-soft)}
.sf input:disabled,.sf textarea:disabled,.sf select:disabled{background:var(--paper);color:var(--soft)}
.sfgrid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
@media(max-width:560px){.sfgrid{grid-template-columns:1fr}}
.sfhint{font-size:11px;color:var(--faint);margin-top:4px;line-height:1.6}
.refrow{display:flex;gap:6px;margin-bottom:6px}
.refrow input{flex:1;min-width:0}
.refrow .ghost{flex:0 0 auto;padding:6px 10px}

/* 脚本编辑器 */
.scfield{margin-bottom:11px}
.scfield>label{display:block;font-size:11px;font-weight:600;color:var(--soft);margin-bottom:4px}
.scfield input,.scfield textarea{width:100%;font-family:inherit;font-size:12.5px;padding:8px 10px;
  border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink);resize:vertical}
.scfield input:focus,.scfield textarea:focus{outline:none;border-color:var(--brand);
  box-shadow:0 0 0 3px var(--brand-soft)}
.shotwrap{overflow-x:auto}
.scshots{width:100%;border-collapse:collapse;font-size:12px;min-width:520px}
.scshots th{text-align:left;font-size:10.5px;color:var(--faint);font-weight:700;padding:0 4px 5px}
.scshots td{padding:0 4px 5px;vertical-align:top}
.scshots input,.scshots textarea{width:100%;font-family:inherit;font-size:12px;padding:6px 8px;
  border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--ink);resize:vertical}
.scshots input:focus,.scshots textarea:focus{outline:none;border-color:var(--brand)}
.scshots .c-no{width:28px;text-align:center;color:var(--faint);font-variant-numeric:tabular-nums;
  padding-top:8px}
.scshots .c-sec{width:56px}
.scshots .c-x{width:26px}

/* 分镜只读展示 */
.shotread{width:100%;border-collapse:collapse;font-size:12.5px}
.shotread th{text-align:left;font-size:10.5px;color:var(--faint);font-weight:700;
  padding:6px 8px;background:var(--paper);border-bottom:1px solid var(--line)}
.shotread td{padding:8px;border-bottom:1px solid var(--line2);vertical-align:top;line-height:1.65}
.shotread tr:last-child td{border-bottom:0}
.shotread .n{width:30px;color:var(--faint);font-variant-numeric:tabular-nums}
.shotread .s{width:52px;color:var(--faint);font-variant-numeric:tabular-nums}

/* 附件 */
.attdrop{border:1.5px dashed var(--line);border-radius:11px;padding:18px 14px;text-align:center;
  color:var(--faint);font-size:12px;cursor:pointer;background:var(--paper);transition:.15s;
  line-height:1.7}
.attdrop:hover,.attdrop.over{border-color:var(--brand);background:var(--brand-soft);color:var(--brand)}
.attdrop b{color:var(--soft)}
.att{display:flex;align-items:center;gap:9px;padding:8px 10px;border:1px solid var(--line);
  border-radius:9px;margin-bottom:6px;background:var(--card)}
.att-ico{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;
  font-size:9.5px;font-weight:700;color:#fff;background:var(--soft);flex:0 0 auto;letter-spacing:.2px}
.att-ico.image{background:#2563eb}.att-ico.video{background:#7c3aed}
.att-ico.pdf{background:#dc2626}.att-ico.doc{background:#0891b2}
.att-main{flex:1;min-width:0}
.att-name{font-size:12.5px;font-weight:600;word-break:break-all;line-height:1.4}
.att-name a{color:var(--ink);text-decoration:none}
.att-name a:hover{color:var(--brand);text-decoration:underline}
.att-meta{font-size:10.5px;color:var(--faint)}
.att-act{display:flex;gap:5px;flex:0 0 auto}

/* 时间线 */
.tl{position:relative;padding-left:16px}
.tl::before{content:'';position:absolute;left:4px;top:5px;bottom:5px;width:1px;background:var(--line)}
.tl-i{position:relative;padding-bottom:11px;font-size:12px;line-height:1.65;color:var(--soft)}
.tl-i::before{content:'';position:absolute;left:-15px;top:5px;width:7px;height:7px;border-radius:50%;
  background:var(--card);border:2px solid var(--line)}
.tl-i.hot::before{border-color:var(--brand);background:var(--brand)}
.tl-i b{color:var(--ink);font-weight:600}
.tl-w{color:var(--faint);font-size:10.5px;margin-left:6px;font-variant-numeric:tabular-nums}

/* 评论 */
.cm{border:1px solid var(--line);border-radius:9px;padding:8px 10px;margin-bottom:7px;background:var(--paper)}
.cm-h{font-size:11px;color:var(--faint);margin-bottom:2px}
.cm-h b{color:var(--soft);font-size:11.5px}
.cm-t{font-size:12.5px;line-height:1.72;white-space:pre-wrap;word-break:break-word}
.cmbox{display:flex;gap:7px;align-items:flex-end;margin-top:9px}
.cmbox textarea{flex:1;font-family:inherit;font-size:12.5px;padding:8px 10px;border:1px solid var(--line);
  border-radius:9px;resize:vertical;line-height:1.65;background:var(--card);color:var(--ink)}
.cmbox textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}

/* 提醒列表 */
.nnum{font-size:10.5px;font-weight:700;background:var(--reject);color:#fff;border-radius:8px;
  padding:0 5px;margin-left:4px;font-variant-numeric:tabular-nums}
.nnum.hidden{display:none}
.nt{padding:11px 12px;border:1px solid var(--line);border-radius:10px;margin-bottom:7px;
  cursor:pointer;background:var(--card);position:relative;transition:.12s}
.nt:hover{border-color:#c5d2f2}
.nt.unread{background:#f7f9ff;border-color:#dbe3ff}
.nt.unread::before{content:'';position:absolute;left:6px;top:16px;width:6px;height:6px;
  border-radius:50%;background:var(--brand)}
.nt-t{font-size:12.5px;font-weight:600;line-height:1.5;margin-bottom:2px;padding-left:11px;
  word-break:break-word}
.nt-b{font-size:11.5px;color:var(--soft);line-height:1.65;padding-left:11px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.nt-at{font-size:10.5px;color:var(--faint);margin-top:3px;padding-left:11px;
  font-variant-numeric:tabular-nums}
.nt-empty{font-size:12px;color:var(--faint);text-align:center;padding:40px 10px;line-height:1.9}

/* 新提醒弹卡（右下角，三秒自己消失） */
.npop{position:fixed;right:18px;bottom:18px;z-index:80;display:flex;flex-direction:column;gap:8px;
  max-width:340px}
.npop>div{background:var(--card);border:1px solid #dbe3ff;border-left:3px solid var(--brand);
  border-radius:11px;padding:11px 13px;box-shadow:0 10px 30px rgba(17,22,34,.16);cursor:pointer;
  animation:npopin .22s ease}
@keyframes npopin{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.npop b{display:block;font-size:12.5px;font-weight:650;margin-bottom:3px;line-height:1.5}
.npop span{display:block;font-size:11.5px;color:var(--soft);line-height:1.6}

/* ══════════════════════════════════════════════════════
   新人培训 · 持续改善飞轮
   ══════════════════════════════════════════════════════ */
.trainform,.flyform{background:var(--card);border:1px solid var(--line);
  border-radius:12px;padding:15px 16px 16px;margin-bottom:16px}
.trainform.hidden,.flyform.hidden{display:none}

/* ── 双平台差异表 ── */
.difftable{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px;
  border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--card)}
.difftable th{text-align:left;font-size:11.5px;font-weight:600;padding:9px 13px;
  background:var(--paper);border-bottom:1px solid var(--line);color:var(--soft);white-space:nowrap}
.difftable th.wx{background:#eaf7ee;color:#0b6b3d}
.difftable th.dy{background:#fdf0ec;color:#a8452c}
.difftable td{padding:10px 13px;border-bottom:1px solid var(--line2);vertical-align:top}
.difftable tr:last-child td{border-bottom:0}
.difftable .dim{font-weight:600;color:var(--ink);white-space:nowrap;width:96px}
.difftable .wx{background:#fbfffc}
.difftable .dy{background:#fffdfb}
.difftable .note{font-size:11.5px;color:var(--soft);line-height:1.6;padding-top:3px}

/* ── 交付节奏时间轴 ── */
.timeline{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
@media (max-width:900px){.timeline{grid-template-columns:1fr}}
.tl{position:relative;background:var(--card);border:1px solid var(--line);
  border-radius:12px;padding:13px 15px}
.tl::before{content:'';position:absolute;left:15px;right:15px;top:-7px;height:2px;
  background:var(--line2);border-radius:2px}
.tl:first-child::before{display:none}
.tl .tt{font-size:17px;font-weight:650;font-variant-numeric:tabular-nums;
  color:var(--brand);margin-bottom:5px}
.tl .tw{font-size:13px;font-weight:650;margin-bottom:5px}
.tl .td{font-size:11.5px;color:var(--soft);line-height:1.7}

/* ── SOP 七模块 ── */
.sopcard{background:var(--card);border:1px solid var(--line);border-radius:12px;
  margin-bottom:11px;overflow:hidden}
.sophd{display:flex;align-items:baseline;gap:8px;padding:12px 15px;
  border-bottom:1px solid var(--line2);background:var(--paper)}
.sophd .si{font-size:14px}
.sophd b{font-size:13.5px}
.sophd .sn{font-size:11px;color:var(--faint);margin-left:auto}
.sopitem{padding:11px 15px;border-bottom:1px solid var(--line2)}
.sopitem:last-child{border-bottom:0}
.sopitem .sc{font-size:12.5px;font-weight:650;margin-bottom:4px}
.sopitem .sv{font-size:12.5px;color:var(--ink);line-height:1.7}
.sopitem .sn2{font-size:11.5px;color:var(--soft);margin-top:5px;line-height:1.6;
  padding-left:10px;border-left:2px solid var(--line2)}

/* ── 审核尺度 ── */
.auditrow{display:grid;grid-template-columns:120px 1fr;gap:14px;background:var(--card);
  border:1px solid var(--line);border-radius:12px;padding:13px 15px;margin-bottom:10px}
.auditrow .ap{font-size:14px;font-weight:650}
.auditrow .ap em{display:block;font-style:normal;font-size:11.5px;color:var(--faint);font-weight:400}
.auditrow .am{font-size:12.5px;line-height:1.8}
.auditrow .am b{color:var(--reject)}
.auditrow .am i{font-style:normal;color:var(--soft)}
.audithints{display:flex;flex-direction:column;gap:6px;margin-top:4px}
.audithints div{font-size:12px;color:var(--soft);padding:6px 11px;background:var(--paper);
  border-radius:8px;border:1px solid var(--line2)}

/* ── 学员带教 ── */
.trainlist{display:grid;grid-template-columns:repeat(auto-fill,minmax(370px,1fr));gap:12px}
.trcard{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 15px}
.trcard.behind{border-color:#f3d9a4;background:#fffdf7}
.trcard.pass{border-color:#b7dfc4;background:#fbfffc}
.trhd{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}
.trhd b{font-size:14px}
.trhd .tdir{font-size:10.5px;padding:1px 8px;border-radius:8px;background:var(--paper);
  border:1px solid var(--line);color:var(--soft)}
.trhd .tst{margin-left:auto;font-size:10.5px;padding:1px 8px;border-radius:8px}
.trhd .tst.on{background:var(--brand-soft);color:var(--brand)}
.trhd .tst.pass{background:#eaf7ee;color:#0b6b3d}
.trhd .tst.drop{background:var(--reject-soft);color:#a01b12}
.trhd button{margin-left:6px}
.trsub{font-size:11.5px;color:var(--faint);margin-bottom:9px}
.trsub .lag{color:var(--warn);font-weight:600}
.days{display:grid;grid-template-columns:repeat(6,1fr);gap:5px}
.dayc{border:1px solid var(--line);border-radius:8px;padding:5px 2px;background:var(--paper);
  cursor:pointer;text-align:center;font-family:inherit;transition:all .12s}
.dayc:hover{border-color:var(--brand)}
.dayc .dn{font-size:11px;font-weight:650;color:var(--soft)}
.dayc .dd{font-size:14px;font-weight:650;line-height:1.35;color:var(--faint)}
.dayc.done{background:#eaf7ee;border-color:#b7dfc4}
.dayc.done .dd{color:#0b6b3d}
.dayc.today{border-color:var(--brand);border-width:2px;padding:4px 1px}
.dayc.today .dn{color:var(--brand)}
.tract{display:flex;gap:7px;align-items:center;margin-top:9px}
.tract select{flex:1;font-family:inherit;font-size:11.5px;padding:4px 6px;
  border-radius:7px;border:1px solid var(--line);background:var(--card);color:var(--soft)}
.trnote{font-size:11px;color:var(--faint);margin-top:7px;line-height:1.6}

/* ── 试岗六天 ── */
.probcards{display:flex;flex-direction:column;gap:11px}
.prob{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px}
.probh{display:flex;align-items:baseline;gap:9px;margin-bottom:9px;flex-wrap:wrap}
.probh .pd{font-size:11px;padding:1px 9px;border-radius:8px;background:var(--brand);
  color:#fff;font-weight:600}
.probh b{font-size:14px}
.probh .pt{font-size:11.5px;color:var(--faint)}
.probh .pn{margin-left:auto;font-size:11.5px;color:var(--soft)}
.probcols{display:grid;grid-template-columns:1.25fr 1fr 1.25fr;gap:16px}
@media (max-width:1100px){.probcols{grid-template-columns:1fr}}
.probcol h4{font-size:11.5px;color:var(--faint);font-weight:600;margin:0 0 5px}
.probcol ul{margin:0;padding-left:16px}
.probcol li{font-size:12.5px;line-height:1.75;color:var(--ink)}
.probcol .aim{font-size:12.5px;line-height:1.75;color:var(--soft)}
.probcol .rv li{color:var(--soft);font-size:12px}
.probacc{margin-top:11px;padding:9px 12px;background:var(--paper);border-radius:9px;
  border:1px solid var(--line2);font-size:12.5px;line-height:1.7}
.probacc b{color:var(--brand)}

/* ── 新人手册 ── */
.precheck{display:grid;grid-template-columns:repeat(auto-fit,minmax(272px,1fr));gap:10px}
.pcitem{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:11px 13px}
.pcitem .pk{font-size:11px;color:var(--faint);margin-bottom:4px}
.pcitem .pv{font-size:13px;line-height:1.7}
.pcitem.must{border-left:3px solid var(--brand)}

.mistakes{display:grid;grid-template-columns:repeat(auto-fit,minmax(310px,1fr));gap:10px}
.mk{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.mkh{display:flex;align-items:baseline;gap:7px;margin-bottom:6px}
.mkh b{font-size:13px;flex:1;line-height:1.5}
.mtag{font-size:10px;padding:1px 7px;border-radius:7px;white-space:nowrap;
  background:#eaf7ee;color:#0b6b3d;border:1px solid #b7dfc4}
.mtag.eye{background:var(--paper);color:var(--faint);border-color:var(--line)}
.mk p{font-size:12px;color:var(--soft);line-height:1.7;margin:0 0 6px}
.mk .fix{font-size:12px;color:var(--ink);line-height:1.7;padding:7px 10px;
  background:var(--paper);border-radius:8px}
.mk .fix b{color:var(--brand);font-weight:600}

.srcgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(238px,1fr));gap:10px}
.srcc{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:11px 13px}
.srcc a{font-size:13px;font-weight:650;color:var(--brand);text-decoration:none;
  display:block;margin-bottom:4px;word-break:break-all}
.srcc a:hover{text-decoration:underline}
.srcc span{font-size:11.5px;color:var(--soft);line-height:1.65}

.findgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(292px,1fr));gap:10px}
.fnd{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.fnd b{font-size:13px;display:block;margin-bottom:5px}
.fnd .fh{font-size:12.5px;color:var(--ink);line-height:1.7}
.fnd .ft{font-size:11.5px;color:var(--soft);line-height:1.65;margin-top:6px;
  padding-top:6px;border-top:1px dashed var(--line2)}

.flowbar{display:flex;flex-wrap:wrap;gap:9px;margin-top:12px;align-items:stretch}
.flowbar .fstep{flex:1;min-width:186px;background:var(--brand-soft);border:1px solid var(--line);
  border-radius:9px;padding:9px 12px;font-size:12px;line-height:1.65;color:var(--ink)}
.flowbar .fstep em{font-style:normal;display:block;font-size:10.5px;color:var(--brand);
  font-weight:700;margin-bottom:2px}

/* ── 双环飞轮 ── */
.ringwrap{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media (max-width:1000px){.ringwrap{grid-template-columns:1fr}}
.ring{background:var(--card);border:1px solid var(--line);border-radius:13px;padding:15px 17px}
.ring.outer{border-color:#c9b6f0;background:#fcfaff}
.ringh{display:flex;align-items:baseline;gap:8px;margin-bottom:8px}
.ringh .rbadge{font-size:10px;padding:2px 9px;border-radius:9px;font-weight:700;
  background:var(--brand);color:#fff}
.ring.outer .ringh .rbadge{background:#7c3aed}
.ringh b{font-size:14.5px}
.ringh .rsub2{font-size:11.5px;color:var(--faint);margin-left:auto}
.ring .rq{font-size:12.5px;color:var(--ink);line-height:1.75;margin-bottom:9px}
.ring .verbs{font-size:12px;color:var(--brand);font-weight:600;margin-bottom:8px}
.ring.outer .verbs{color:#7c3aed}
.ring .rex{font-size:12px;color:var(--soft);line-height:1.75;padding:9px 11px;
  background:var(--paper);border-radius:9px;margin-bottom:8px}
.ring .rex b{color:var(--ink)}
.ring .rin{font-size:11.5px;color:var(--faint);line-height:1.7;
  padding-top:8px;border-top:1px dashed var(--line2)}

.triggers{display:grid;grid-template-columns:repeat(auto-fit,minmax(268px,1fr));gap:10px;margin-bottom:18px}
.tg{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:11px 13px;
  cursor:pointer;transition:all .12s}
.tg:hover{border-color:#c9b6f0}
.tg.hit{background:#fcfaff;border-color:#c9b6f0}
.tg .tgs{font-size:12.5px;line-height:1.65;color:var(--ink)}
.tg .tgm{font-size:11.5px;color:#6b21a8;line-height:1.65;margin-top:6px;
  padding-top:6px;border-top:1px dashed #ddd0f5}
.tghit{font-size:12px;color:#7c3aed;font-weight:650;margin:0 0 8px}

.flylist{display:flex;flex-direction:column;gap:11px}
.fly{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 15px}
.fly.outer{border-left:3px solid #7c3aed}
.flyh{display:flex;align-items:baseline;gap:8px;margin-bottom:6px;flex-wrap:wrap}
.flyh .fring{font-size:10px;padding:1px 8px;border-radius:8px;font-weight:700;
  background:var(--brand-soft);color:var(--brand)}
.flyh .fring.outer{background:#f3e8ff;color:#7c3aed}
.flyh b{font-size:13.5px}
.flyh .fplat{font-size:10.5px;color:var(--faint)}
.flyh .fact{margin-left:auto;display:flex;gap:6px;align-items:center}
.flyh select{font-family:inherit;font-size:11.5px;padding:4px 6px;border-radius:7px;
  border:1px solid var(--line);background:var(--card);color:var(--soft);cursor:pointer}
.flyprob{font-size:12px;color:var(--soft);line-height:1.75;margin:7px 0;
  padding:9px 12px;background:var(--paper);border-radius:9px}
.flyprob b{color:var(--ink)}
.flyprob .fl{font-size:10.5px;color:var(--faint);display:block;margin-bottom:2px}
.flysteps{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin-top:9px}
@media (max-width:980px){.flysteps{grid-template-columns:repeat(3,1fr)}}
.fstep2{font-size:10.5px;padding:5px 7px;border-radius:8px;border:1px solid var(--line);
  background:var(--paper);color:var(--faint);line-height:1.5}
.fstep2.on{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.fstep2.done{background:#eaf7ee;border-color:#b7dfc4;color:#0b6b3d}
.flymiss{margin-top:9px;font-size:11.5px;color:var(--reject);background:var(--reject-soft);
  border:1px solid #f4c7c3;border-radius:8px;padding:6px 11px;line-height:1.6}
.flysink{margin-top:9px;font-size:11.5px;color:var(--ink);background:#eaf7ee;
  border:1px solid #b7dfc4;border-radius:8px;padding:6px 11px;line-height:1.6}

.sinkgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}
.sinkc{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:11px 13px}
.sinkc .sn3{font-size:17px;font-weight:650;font-variant-numeric:tabular-nums;color:var(--pass)}
.sinkc .sl3{font-size:12px;color:var(--ink);margin-top:2px}
.sinkc .sh3{font-size:11px;color:var(--faint);margin-top:4px;line-height:1.55}

/* ══════════════════════════════════════════════════════
   总览：三平台 · 链路 · 每小时曲线 · 日期选择
   ══════════════════════════════════════════════════════ */
.datesel{font-family:inherit;font-size:12.5px;padding:7px 12px;border-radius:8px;
  border:1px solid var(--line);background:var(--card);color:var(--ink);cursor:pointer}
.datesel:focus{outline:none;border-color:var(--brand)}

table.mini td.ttlw{max-width:200px;font-size:11.5px;color:var(--soft)}
table.mini .na{color:var(--faint)}
.okdot{display:inline-flex;align-items:center;gap:4px;color:var(--pass);font-weight:600}
.okdot::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--pass)}

/* 曲线 */
.spark{width:100%;display:block;overflow:visible}
.spark text{font-family:inherit;user-select:none}
.linkpicker{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px;align-items:center}
.linkpicker:empty{display:none}
.chip{font-family:inherit;font-size:11.5px;padding:5px 13px;border-radius:16px;cursor:pointer;
  border:1px solid var(--line);background:var(--card);color:var(--soft);
  display:inline-flex;align-items:center;gap:6px;transition:all .12s}
.chip::before{content:'';width:8px;height:8px;border-radius:50%;background:var(--chip, #999)}
.chip:hover{border-color:var(--chip, var(--brand))}
.chip.on{background:var(--brand-soft);border-color:var(--chip, var(--brand));
  color:var(--ink);font-weight:600}

/* ── ADQ 同步状态条 ── */
.syncbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:12px;
  padding:8px 14px;border-radius:10px;margin-bottom:16px;
  background:var(--paper);border:1px solid var(--line);color:var(--soft)}
.syncbar b{font-size:12.5px;font-weight:650}
.syncbar .sd{width:7px;height:7px;border-radius:50%;background:var(--faint);flex:0 0 auto}
.syncbar .sh{color:var(--faint)}
.syncbar.ok{background:#f4fbf6;border-color:#b7dfc4}
.syncbar.ok b{color:#0b6b3d}
.syncbar.ok .sd{background:#2ea043;box-shadow:0 0 0 3px rgba(46,160,67,.15)}
.syncbar.bad{background:#fff7f6;border-color:#f4c7c3}
.syncbar.bad b{color:#a01b12}
.syncbar.bad .sd{background:#d93025;box-shadow:0 0 0 3px rgba(217,48,37,.15)}
.syncbar.wait .sd{background:var(--warn);animation:sd-pulse 1.4s ease-in-out infinite}
.syncbar.off{opacity:.75}
@keyframes sd-pulse{0%,100%{opacity:.35}50%{opacity:1}}

/* 无数据链路：淡出但仍可见，让人一眼看出「这条今天没投」而不是「漏配了」 */
table.mini tr.nodata td{color:var(--faint)}
table.mini tr.nodata td.ttl b{color:var(--soft);font-weight:500}
.nadot{font-size:10.5px;padding:1px 7px;border-radius:7px;
  background:var(--paper);border:1px solid var(--line);color:var(--faint)}

/* ── 时间段切换 ── */
.rangetabs{display:inline-flex;border:1px solid var(--line);border-radius:9px;
  overflow:hidden;background:var(--card)}
.rangetabs button{appearance:none;border:0;background:none;font-family:inherit;
  font-size:12px;padding:6px 13px;color:var(--soft);cursor:pointer;
  border-right:1px solid var(--line2)}
.rangetabs button:last-child{border-right:0}
.rangetabs button:hover{background:var(--paper)}
.rangetabs button.on{background:var(--brand);color:#fff;font-weight:600}

/* ── 账户提示 ── */
.acctnote{font-size:11.5px;padding:3px 10px;border-radius:8px;line-height:1.6;
  margin-left:auto;border:1px solid transparent}
.acctnote.warn{background:var(--warn-soft);border-color:#f3d9a4;color:#8a4b06}
.acctnote.bad{background:var(--reject-soft);border-color:#f4c7c3;color:#a01b12}
.acctnote b{font-weight:650}

/* ── 素材消耗榜 ── */
.crtop{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));
  gap:10px;margin-bottom:16px}
.crkpi{background:var(--paper);border:1px solid var(--line2);border-radius:10px;
  padding:9px 12px;display:flex;flex-direction:column;gap:1px}
.crkpi .kk{font-size:11px;color:var(--soft)}
.crkpi .kv{font-size:20px;font-weight:650;font-variant-numeric:tabular-nums;line-height:1.3}
.crkpi .ks{font-size:10.5px;color:var(--faint)}

.crsec{font-size:12px;font-weight:650;color:var(--soft);margin:16px 0 9px;
  padding-bottom:5px;border-bottom:1px solid var(--line2)}
.crsec .hint{font-weight:400;font-size:11px;color:var(--faint)}

/* 素材榜「按剪辑人」：五列 grid（名字 | 能量条 | 消耗 | ROI | 条数）。
   ⚠️ 类名必须带 cbr 前缀 —— 曾和总览产出榜的 .edrow 同名，
   被后写的 flex 规则覆盖，能量条压成 0 宽直接消失（2026-10-20 踩过）。 */
.edbar{display:flex;flex-direction:column;gap:6px}
.cbrw{display:grid;grid-template-columns:76px 1fr 96px 78px 54px;gap:10px;
  align-items:center;font-size:12px}
.cbrn{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  text-align:right;color:var(--ink)}
.cbrb{height:14px;background:var(--line2);border-radius:4px;overflow:hidden;display:block}
.cbrb i{display:block;height:100%;background:var(--c,var(--brand));border-radius:4px;
  transition:width .3s;opacity:.85}
.cbrv{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.cbrr,.cbrt{text-align:right;font-size:11.5px;color:var(--faint);
  font-variant-numeric:tabular-nums}

.crtable{margin-top:2px}
.crtable td.crcost{position:relative;white-space:nowrap;
  font-variant-numeric:tabular-nums;min-width:126px;padding-left:11px}
.crtable td.crcost .crbar{position:absolute;left:0;top:2px;bottom:2px;
  background:var(--brand-soft);border-radius:3px;z-index:0;max-width:100%}
.crtable td.crcost em{position:relative;z-index:1;font-style:normal}


/* ── 账户清单面板 ── */
.acctbox{width:100%;font-family:ui-monospace,Menlo,monospace;font-size:12.5px;
  line-height:1.7;border:1px solid var(--line);border-radius:9px;
  padding:10px 12px;background:var(--card);color:var(--ink);resize:vertical}
.acctmsg{font-size:11.5px;color:var(--faint);margin-left:4px}
.acctdeny{margin-top:12px;background:var(--reject-soft);border:1px solid #f4c7c3;
  border-radius:9px;padding:10px 13px;font-size:12px;color:#a01b12;line-height:1.7}
.acctdeny .adlist{display:flex;flex-wrap:wrap;gap:5px;margin:7px 0}
.acctdeny .adlist span{font-family:ui-monospace,Menlo,monospace;font-size:11px;
  background:#fff;border:1px solid #f4c7c3;border-radius:6px;padding:1px 7px}
.acctdeny .adtip{font-size:11.5px;color:#8a3a30}

/* ── 每小时明细表 ── */
.htable{margin-top:14px;border-top:1px solid var(--line2);padding-top:12px}
.hhead{font-size:12px;font-weight:650;color:var(--soft);margin-bottom:8px}
.hhead .hint{font-weight:400;font-size:11px;color:var(--faint)}
.hscroll{max-height:260px;overflow:auto;border:1px solid var(--line);border-radius:9px}
.hscroll table.mini{border:0}
.hscroll table.mini thead th{position:sticky;top:0;z-index:2}
.hscroll table.mini td.hh{font-variant-numeric:tabular-nums;color:var(--soft);
  font-size:11.5px;white-space:nowrap}
.hscroll table.mini tr.zero td{color:var(--faint);background:var(--paper)}

/* ── 产品一致性 ── */
.pbase{display:flex;gap:11px;align-items:center;margin:8px 0;
  background:var(--paper);border:1px solid var(--line2);border-radius:9px;padding:9px 11px}
.pbase img{width:78px;height:auto;border-radius:6px;flex:0 0 auto;
  border:1px solid var(--line)}
.pbase b{display:block;font-size:12px;margin-bottom:3px}
.pbase span{font-size:11.5px;color:var(--soft);line-height:1.6}
.psheet{display:inline-block;font-size:11.5px;color:var(--brand);
  text-decoration:none;margin-top:4px}
.psheet:hover{text-decoration:underline}
.pnote{font-size:11.5px;color:var(--faint);line-height:1.7;margin-top:7px;
  padding-top:7px;border-top:1px dashed var(--line2)}

/* ── 组 / 负责人 / 客单 ── */
.dims{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px}
.dimblk{min-width:0}
.dimt{font-size:12px;font-weight:650;color:var(--soft);margin-bottom:8px;
  padding-bottom:5px;border-bottom:1px solid var(--line2)}
.dimh{font-weight:400;font-size:10.5px;color:var(--faint);margin-left:5px}
.dimrow{display:grid;grid-template-columns:60px 1fr 96px 42px 40px;gap:8px;
  align-items:center;font-size:11.5px;padding:3px 0}
.dname{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dbar{height:11px;background:var(--line2);border-radius:4px;overflow:hidden;display:block}
.dbar i{display:block;height:100%;background:var(--brand);opacity:.7;border-radius:4px}
.dcost{text-align:right;font-variant-numeric:tabular-nums}
.droi{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.droi.good{color:var(--pass)} .droi.warn{color:var(--warn)} .droi.bad{color:var(--reject)}
.dacc{text-align:right;font-size:10.5px;color:var(--faint);
  font-variant-numeric:tabular-nums}

/* 素材榜：视频合并标识 */
.vtag{display:inline-block;font-size:9px;color:var(--brand);margin-right:3px;
  transform:translateY(-1px)}
.cn{display:inline-block;font-size:10px;padding:0 5px;border-radius:7px;
  background:var(--brand-soft);color:var(--brand);margin-left:5px;
  font-variant-numeric:tabular-nums;white-space:nowrap}
.crtable td.cn{color:var(--soft);background:none;padding:0;text-align:center}

/* ── 每日直播复盘 ── */
.lrform{background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:15px 16px 16px;margin-bottom:16px}
.lrform.hidden{display:none}
.lrtable td{white-space:nowrap}
.srctag{font-size:10px;padding:1px 7px;border-radius:7px;
  background:#eaf7ee;color:#0b6b3d;border:1px solid #b7dfc4}
.srctag.m{background:var(--paper);color:var(--faint);border-color:var(--line)}

/* ── 平台切换 / 曲线悬停 / 子组 ── */
.platrow{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:10px}
.pbtn{font-family:inherit;font-size:12px;padding:5px 13px;border-radius:16px;
  border:1px solid var(--line);background:var(--card);color:var(--soft);cursor:pointer}
.pbtn:hover{border-color:var(--brand)}
.pbtn.on{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}

.curvewrap{position:relative}
.spark.hoverable .hv{cursor:crosshair}
.htip{position:absolute;pointer-events:none;z-index:5;min-width:152px;
  background:rgba(255,255,255,.98);border:1px solid var(--line);border-radius:9px;
  box-shadow:0 6px 22px rgba(0,0,0,.14);padding:9px 12px;font-size:11.5px;color:var(--soft)}
.htip b{display:block;font-size:12px;color:var(--ink);margin-bottom:5px;
  padding-bottom:5px;border-bottom:1px solid var(--line2)}
.htip div{display:flex;justify-content:space-between;gap:14px;line-height:1.8}
.htip em{font-style:normal;font-weight:650;color:var(--ink);font-variant-numeric:tabular-nums}

.teams{display:flex;flex-direction:column;gap:12px;margin-top:16px}
.teamcard{border:1px solid var(--line);border-radius:11px;padding:12px 14px;background:var(--paper)}
.teamh{display:flex;align-items:baseline;gap:10px;margin-bottom:10px}
.teamh b{font-size:13.5px}
.teammeta{font-size:11.5px;color:var(--faint);font-variant-numeric:tabular-nums}
.teamsplit{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media (max-width:820px){.teamsplit{grid-template-columns:1fr}}
.tcolh{font-size:11px;color:var(--faint);margin-bottom:6px;font-weight:600}
/* 左右两栏是两个口径（账户花费 / 创意署名），不是拆分，所以各带一句说明 ——
   不加这句会被当成「占比加起来要是 100%」。 */
.tcolh em{display:block;font-style:normal;font-weight:400;font-size:10.5px;
  color:var(--faint);opacity:.85;margin-top:1px}
.trow{display:flex;justify-content:space-between;font-size:12px;line-height:1.9;
  font-variant-numeric:tabular-nums}
.trow .troi{font-style:normal;font-size:10.5px;color:var(--faint);margin-left:5px}
/* 剪辑人多的时候（全部门十几个）单列会把卡片拉到两屏高，左栏却只有一两个人。
   超过 7 个自动折两列，卡片高度砍一半。 */
.trowbox.two{display:grid;grid-template-columns:1fr 1fr;gap:0 22px}
@media (max-width:1080px){.trowbox.two{grid-template-columns:1fr}}
.trow.dim{color:var(--faint)}
.tlead{margin-top:9px;padding-top:8px;border-top:1px dashed var(--line2);
  font-size:11.5px;color:var(--soft)}

/* ══════════ V1.43 ══════════ */

/* 口径条：贴在 KPI 正下方，跟着数字走 */
.calbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  margin:-4px 0 14px;padding:7px 12px;border-radius:8px;
  background:var(--brand-soft);border:1px solid #dfe6ff;font-size:11.5px;color:var(--soft)}
.calbar:empty{display:none}
.caldot{flex:0 0 auto;background:var(--brand);color:#fff;font-weight:600;
  font-size:10px;letter-spacing:.5px;padding:1px 7px;border-radius:9px}
.calbar b{color:var(--ink);font-weight:600}
.calnote{color:var(--soft);line-height:1.6}

/* 榜单排序切换 */
.sortbtns{float:right;display:inline-flex;gap:4px}
.sbtn{border:1px solid var(--line);background:var(--card);color:var(--soft);
  font-size:11px;padding:2px 9px;border-radius:6px;cursor:pointer;font-family:inherit}
.sbtn:hover{color:var(--ink);border-color:var(--faint)}
.sbtn.on{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}

/* 产出待接入占位：不填假数字，说清楚缺什么 */
.pending{padding:14px 16px;border:1px dashed var(--line);border-radius:10px;background:var(--paper)}
.pd-h{font-weight:600;font-size:13px;color:var(--warn);margin-bottom:6px}
.pd-b{font-size:12px;color:var(--soft);line-height:1.85}
.pd-n{margin-top:8px;font-size:11.5px;color:var(--faint)}

/* 产品库 */
.prodgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.prodcard{display:flex;gap:11px;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--card)}
.pimg{flex:0 0 78px;height:78px;border-radius:8px;overflow:hidden;background:var(--paper);
  display:flex;align-items:center;justify-content:center}
.pimg img{width:100%;height:100%;object-fit:cover;display:block}
.pbody{min-width:0;flex:1}
.pname{font-weight:600;font-size:12.5px;line-height:1.4}
.pmeta{font-size:11px;color:var(--faint);margin-top:1px}
.ppkg{font-size:11.5px;color:var(--soft);margin-top:3px}
.pft{margin-top:5px;display:flex;flex-wrap:wrap;gap:3px}
.pft span{font-size:10px;background:var(--line2);color:var(--soft);padding:1px 6px;border-radius:5px}
.pst{margin-top:5px;font-size:10.5px;color:var(--pass);font-weight:600}

/* Y-H组这种「只做投放不出素材」的卡，弱化一点 */
.teamcard.noout{border-style:dashed}
.teamcard.noout .trow.dim{color:var(--faint);font-size:11px}

/* 剪辑产出榜（V1.43）：按素材名里的人名聚合，全工作台唯一带剪辑署名的源 */
.edlist{display:flex;flex-direction:column;gap:5px}
.edrow{display:flex;align-items:center;gap:8px;font-size:12px}
/* 表头行：七个窄列，没表头根本分不清「成片」和「已投」 */
.edhead{color:var(--soft);font-size:11px;padding-bottom:3px;
  border-bottom:1px solid var(--line2)}
.edhead .ed-n{font-weight:400;color:var(--soft)}
.ed-n{flex:0 0 68px;font-weight:600;color:var(--ink);text-align:right;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ed-bar{flex:1;min-width:24px;height:14px;background:var(--line2);border-radius:4px;overflow:hidden}
.ed-bar i{display:block;height:100%;background:var(--brand);border-radius:4px}
/* 成片量 / 投放率：V1.52 加。成片量是交付口径，已投是消耗口径，必须分列 */
.ed-p{flex:0 0 34px;text-align:right;color:var(--soft);font-variant-numeric:tabular-nums}
.ed-p b{color:var(--ink)}
.ed-l{flex:0 0 50px;text-align:right;font-weight:600;font-variant-numeric:tabular-nums}
.ed-l.good{color:var(--pass)}
.ed-l.warn{color:var(--warn)}
.ed-l.bad{color:var(--bad)}
.ed-l.dim{color:var(--soft);font-weight:400}
.ed-v{flex:0 0 44px;text-align:right;color:var(--soft);font-variant-numeric:tabular-nums}
.ed-v b{color:var(--ink)}
.ed-c{flex:0 0 84px;text-align:right;font-variant-numeric:tabular-nums;color:var(--soft)}
.ed-r{flex:0 0 52px;text-align:right;font-weight:600}
.ed-r.good{color:var(--pass)}
.ed-r.warn{color:var(--warn)}
.ed-r.bad{color:var(--bad)}
/* 扫盘记账的结果条：新增了几条、哪几条认不出，直接说清楚 */
.outpend{margin-top:8px;font-size:11px;color:var(--soft);line-height:1.6}
.outpend b{color:var(--ink)}
.outpend .bad{color:var(--bad)}
/* 手工补记：扫盘扫不到的片子靠这里补，所以输入框常驻，不藏在弹窗里 */
.ovadd{display:flex;gap:6px;margin-top:8px}
.ovadd input{flex:1;min-width:0;height:26px;padding:0 8px;font-size:12px;
  border:1px solid var(--line2);border-radius:6px;background:transparent;
  color:var(--ink);font-family:inherit}
.ovadd input::placeholder{color:var(--soft)}
.ovadd button{flex:0 0 auto}

/* 平台切换：无消耗的平台按钮置灰但不消失 ——
   要能看出「今天没投这个」和「这个平台没接」是两回事 */
.pbtn.dim{opacity:.42}
.pbtn.dim:hover{opacity:.75}

/* 素材榜日期控件：跟在标题右侧，和排序按钮同一套路 */
.crctl{float:right;display:inline-flex;gap:6px;align-items:center;margin-left:8px}
.crctl .rangetabs button{padding:2px 9px;font-size:11.5px}
.crctl .datesel{font-size:11.5px;padding:2px 6px}
/* 素材榜平台切换条：按钮上带各平台区间消耗，量级差一眼看清 */
.crctl .rangetabs{margin-right:2px}
.crctl .rangetabs button.rb{white-space:nowrap}
.crctl .rangetabs button.rb.on{background:var(--brand)}
/* 没数据的平台置灰但不消失 —— 「抖音 ¥0」要看得见，才知道它在等导入 */
.crctl .rangetabs button.rb.dim{opacity:.45}
.crctl .rangetabs button.rb.dim:hover{opacity:.8}
/* 抖音千川口径拆分：全域推广(整体) ＋ 标准推广，写在消耗下面，方便跟巨量后台逐项对账 */
.pksplit{margin-top:3px;font-size:10.5px;line-height:1.25;color:var(--muted,#888);
  font-weight:400;cursor:help;border-bottom:1px dotted var(--line,#ccc)}
/* 净成交没取到时的提示：必须看得出来是「还没回传/取数失败」，不能跟 0 混在一起 */
.pksplit.pending{color:var(--warn,#b45309);border-bottom:none;cursor:default}

/* 小时曲线图例：叠加视图里每个平台一条线，颜色对得上 */
.curvelegend{display:flex;flex-wrap:wrap;gap:4px 14px;margin-top:8px}
.lgd{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--soft)}
.lgd i{width:9px;height:9px;border-radius:2px;display:inline-block}

/* 爆量素材榜 / 小时曲线的平台筛选 chip：复用 .chip，颜色跟曲线一致 */
#ovHotPlats .chip{font-size:11px;padding:3px 9px}

/* ══════════════════════════════════════════════════════
   抖店退款数据 · 罗盘口径（V1.51）
   表格蓝本：总订单/实际付款/售前·收货前·收货后退款/四个率
   ══════════════════════════════════════════════════════ */
.rfcard{margin-top:16px}
/* 状态条：复用 syncbar 的视觉，但独立成类（.sdot/.slbl/.smsg/.smeta
   的样式是 .syncbar 作用域下的，这里补一份等价的） */
.rfstatus{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:12px;
  padding:8px 14px;border-radius:10px;margin-bottom:14px;
  background:var(--paper);border:1px solid var(--line);color:var(--soft)}
.rfstatus b{font-size:12.5px;font-weight:650}
.rfstatus .sdot{width:8px;height:8px;border-radius:50%;flex:0 0 auto}
.rfstatus .sdot.off{background:#b9b4c0}
.rfstatus .sdot.idle{background:#2f6bd8}
.rfstatus .sdot.ok{background:var(--pass)}
.rfstatus .sdot.fail,.rfstatus .sdot.bad{background:var(--reject)}
.rfstatus .slbl{font-size:10.5px;padding:1px 7px;border-radius:8px;
  background:var(--card);border:1px solid var(--line)}
.rfstatus .smsg{color:var(--soft)}
.rfstatus .smeta{margin-left:auto;color:var(--soft);font-size:11.5px}
.rfstatus .smeta.rfbusy{color:var(--warn);font-weight:600}

/* 15 列表格：横向滚动，表头吸顶，金额列右对齐等宽数字 */
.rfscroll{overflow-x:auto;border:1px solid var(--line);border-radius:10px}
.rftable{width:100%;border-collapse:collapse;font-size:12px;white-space:nowrap}
.rftable th{position:sticky;top:0;background:var(--paper);text-align:right;
  font-weight:600;color:var(--soft);padding:8px 10px;border-bottom:1px solid var(--line)}
.rftable th:first-child{text-align:left}
.rftable td{padding:7px 10px;text-align:right;border-bottom:1px solid var(--line2);
  font-variant-numeric:tabular-nums;color:var(--ink)}
.rftable td:first-child{text-align:left}
.rftable tbody tr:last-child td{border-bottom:0}
.rftable tbody tr:hover td{background:var(--brand-soft)}
/* 合计行：黄底，跟主管手写那张对齐 */
.rftable .rftotal td{background:#FFF8E1;font-weight:650;border-top:1px solid var(--line)}
.rftable .rftotal:hover td{background:#FFF3D6}
/* 退款率着色：>=35% 红 / >=25% 橙 / 其余默认墨色 */
.rftable b.good{color:var(--pass)}
.rftable b.warn{color:var(--warn)}
.rftable b.bad{color:var(--reject)}

/* 空态：没拉过数据的区间 */
.rfempty{display:flex;flex-direction:column;align-items:center;gap:8px;
  padding:26px 16px;text-align:center;border:1px dashed var(--line);border-radius:10px}
.rfempty b{font-size:13px;color:var(--soft)}
.rfempty span{font-size:11.5px;color:var(--faint);line-height:1.7;max-width:560px}

/* 口径对照脚注 */
.rfnote{margin-top:12px;font-size:11px;line-height:1.75;color:var(--faint)}
.rfnote b{color:var(--soft)}

/* ── 退款表 · 日期框（V1.52）─────────────────────────────
   原来 .crctl .datesel 只有 padding:2px 6px，框又小又窄，
   右侧的日历图标几乎点不到，主管反馈「选不了日期」。
   撑大 + 整框可点（click 里调 showPicker）。 */
.rfcard .crctl .datesel{
  font-family:inherit;font-size:12px;padding:5px 9px;border-radius:8px;
  border:1px solid var(--line);background:var(--card);color:var(--ink);
  min-width:132px;height:30px;cursor:pointer;box-sizing:border-box;
}
.rfcard .crctl .datesel:hover{border-color:var(--brand)}
.rfcard .crctl .datesel:focus{outline:none;border-color:var(--brand);
  box-shadow:0 0 0 3px var(--brand-soft)}
.rfcard .crctl #rfTilde{color:var(--faint);font-size:12px}

/* 今天表里的 T+1 占位 */
.rfwait{display:inline-block;font-size:10.5px;padding:1px 6px;border-radius:6px;
  background:var(--paper);border:1px solid var(--line);color:var(--faint);letter-spacing:.3px}

/* ── AI混剪 · 混剪工坊（独立服务全屏内嵌）──
   这一页要吃掉整个内容区的宽高，所以要把 main 的 1240 上限和 padding 破掉，
   否则 iframe 被挤在中间一条，素材网格放不下。 */
main:has(#view-mixshop.active){max-width:none;padding:0}
#view-mixshop.active{display:flex;flex-direction:column;height:calc(100vh - 52px)}
.msbar{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:9px 16px;background:var(--card);border-bottom:1px solid var(--line)}
.ms-title{display:flex;align-items:baseline;gap:9px;font-weight:600;font-size:13.5px}
.ms-title span{font-weight:400;font-size:11.5px;color:var(--faint)}
.ms-act{display:flex;align-items:center;gap:9px}
.ms-dot{width:7px;height:7px;border-radius:50%;background:var(--faint);flex:0 0 auto}
.ms-dot.on{background:var(--pass);box-shadow:0 0 0 3px var(--pass-soft)}
.ms-dot.off{background:var(--reject);box-shadow:0 0 0 3px var(--reject-soft)}
.ms-state{font-size:11.5px;color:var(--soft);font-variant-numeric:tabular-nums}
.ms-wrap{position:relative;flex:1;min-height:0;background:var(--card)}
.ms-iframe{display:block;width:100%;height:100%;border:0;background:#fff}
.ms-hint{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:7px;padding:24px;text-align:center;color:var(--soft);font-size:13px}
.ms-hint b{font-size:15px;color:var(--ink)}
.ms-hint p{margin:0;max-width:540px;line-height:1.75}
.ms-hint code{font-family:var(--mono);font-size:12px;background:var(--paper);
  padding:1px 5px;border-radius:4px}
@media (max-width:900px){
  #view-mixshop.active{height:calc(100vh - 105px)}
  .ms-title span{display:none}
}

.muse-stat{font-size:11.5px;color:var(--faint);align-self:center;margin-left:2px;
  max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.muse-stat.on{color:var(--brand)}
.muse-stat.err{color:#c0392b}

/* 缺片提示条：有米登录失效 / 补片跑到一半 / 跑完 0 命中，都在这条上说话。
   以前这些只写进服务端日志，页面上完全看不出来，人会以为"忘传了"。 */
.rvwarn{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  margin:0 0 10px;padding:9px 12px;border-radius:9px;
  background:var(--warn-soft);border:1px solid #f6d99a;color:#8a5308;font-size:12.5px}
.rvwarn.err{background:var(--reject-soft);border-color:#f3c3bd;color:#8f221b}
.rvwarn.ok{background:var(--pass-soft);border-color:#bfe3c9;color:#0b6b3d}
.rvwarn b{font-weight:700}
.rvwarn .rvw-txt{flex:1 1 380px;min-width:240px;line-height:1.5}
.rvwarn .rvw-txt i{font-style:normal;opacity:.72}
.rvwarn button,.rvwarn a.rvw-go{border:1px solid currentColor;background:transparent;color:inherit;
  font-size:12px;padding:3px 10px;border-radius:7px;cursor:pointer;white-space:nowrap;
  text-decoration:none;display:inline-block;line-height:1.5}
.rvwarn button:hover,.rvwarn a.rvw-go:hover{background:rgba(0,0,0,.05)}
.rvwarn button[disabled]{opacity:.5;cursor:default}
.rsrc{font-size:10px;padding:1px 5px;border-radius:5px;background:var(--brand-soft);
  color:var(--brand);border:1px solid transparent;letter-spacing:.3px}

/* ══════════════════════════════════════════════════════════
   ADQ 大盘 · 腾讯直客给的行业/单公司快照
   ──────────────────────────────────────────────────────────
   这一页的视觉优先级：判断（该收/该加）> 排行与象限 > 明细表 > 趋势。
   所以 KPI 和「该收一收」放在最上面，明细表反而往下压 ——
   主管打开这一页不是为了读 30 行数字，是为了决定钱往哪调。
   ══════════════════════════════════════════════════════════ */

/* ── 空态 ── */
.adq-empty{border:1px dashed var(--line);border-radius:var(--r-lg);
  background:var(--card);padding:44px 28px;text-align:center}
.adq-empty-in h3{margin:0 0 10px;font-size:16px;font-weight:650}
.adq-empty-in p{margin:0 auto 8px;max-width:600px;font-size:13px;color:var(--soft);line-height:1.85}
.adq-empty-in p.dim{color:var(--faint);font-size:12px}
.adq-none{color:var(--faint);font-size:12.5px;padding:16px 4px;margin:0}

/* ── 时间轴：所有期次一排，老的左、新的右 ── */
.adq-tl{display:flex;gap:6px;overflow-x:auto;padding:2px 2px 8px;margin-bottom:12px;
  scrollbar-width:thin}
.adq-tl-i{flex:none;display:flex;flex-direction:column;gap:1px;align-items:center;
  min-width:62px;padding:6px 9px;border:1px solid var(--line);border-radius:9px;
  background:var(--card);cursor:pointer;font-family:inherit;
  transition:all .15s var(--ease)}
.adq-tl-i:hover{border-color:#C9D6F5;background:var(--brand-soft)}
.adq-tl-i b{font-size:12px;font-weight:650;color:var(--ink);
  font-variant-numeric:tabular-nums;letter-spacing:-.2px}
.adq-tl-i span{font-size:10px;color:var(--faint);white-space:nowrap}
.adq-tl-i.on{background:var(--brand);border-color:var(--brand);
  box-shadow:0 4px 12px rgba(22,93,255,.24)}
.adq-tl-i.on b,.adq-tl-i.on span{color:#fff}
/* 明细覆盖不足 60%：边框提醒「这期是残的」，点进去会看到覆盖 KPI */
.adq-tl-i.low:not(.on){border-color:#FBD9B4;background:#FFFBF5}
.adq-tl-i.low:not(.on) b{color:var(--warn)}

/* ── 按期次 / 按周 切换 ── */
.adq-modebar{display:flex;align-items:center;gap:10px;margin-bottom:9px;flex-wrap:wrap}
.adq-modehint{font-size:11.5px;color:var(--faint);line-height:1.6}
.seg button:disabled{opacity:.42;cursor:not-allowed;background:transparent;color:var(--faint)}
.ghost:disabled,.primary:disabled{opacity:.45;cursor:not-allowed;
  border-color:var(--line);background:var(--card);color:var(--faint);
  box-shadow:none;transform:none}

/* 排行卡片有 15 行、散点图只有一张 —— 让它俩各自按内容高度排，
   否则散点图下面会拖出一大片空白，看着像图表没画完。 */
#view-adqmarket .ovgrid{align-items:start}

/* 周视图的时间轴方块：比单期宽一点，要塞得下「4/7 天 · 3 期」 */
.adq-tl-i.wk{min-width:88px}
/* 这周没盖满 7 天 —— 紫色边，跟「明细覆盖不足」的橙色区分开：
   一个是数据残（横向），一个是天数缺（纵向），两回事。 */
.adq-tl-i.part:not(.on){border-color:#DCCBF6;background:#FCFAFF}
.adq-tl-i.part:not(.on) b{color:#7B4FD1}

/* ── KPI 后缀单位：跟着数字走，不要占一行 ── */
.adq-u{font-style:normal;font-size:12px;font-weight:500;color:var(--faint);
  margin-left:3px;letter-spacing:0}

/* ── 环比/变化 ── */
.adq-chg{font-size:11px;font-variant-numeric:tabular-nums;white-space:nowrap}
.adq-chg.good{color:var(--pass)}
.adq-chg.bad{color:var(--reject)}
.adq-chg.neutral{color:var(--soft)}
.adq-chg.dim{color:var(--faint)}

/* ── 判断条：该收 / 该加 ── */
.adq-verdict{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.adq-vd{border:1px solid var(--line);border-radius:var(--r);background:var(--card);
  padding:12px 14px;box-shadow:var(--sh-xs)}
.adq-vd.none{grid-column:1/-1;color:var(--soft);font-size:12.5px;line-height:1.8}
.adq-vd.bad{box-shadow:inset 3px 0 0 var(--reject), var(--sh-xs);border-color:#F8CFCF}
.adq-vd.good{box-shadow:inset 3px 0 0 var(--pass), var(--sh-xs);border-color:#BFEBDB}
.vd-h{display:flex;align-items:baseline;gap:8px;margin-bottom:9px;flex-wrap:wrap}
.vd-h b{font-size:13px}
.adq-vd.bad .vd-h b{color:var(--reject)}
.adq-vd.good .vd-h b{color:var(--pass)}
.vd-h span{font-size:11px;color:var(--faint)}
.vd-list{display:flex;flex-wrap:wrap;gap:6px}
.adq-tag{font-size:11.5px;padding:3px 9px;border-radius:7px;cursor:pointer;
  border:1px solid transparent;transition:all .14s var(--ease);
  max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.adq-tag.bad{background:var(--reject-soft);color:#A32B33;border-color:#F8CFCF}
.adq-tag.good{background:var(--pass-soft);color:#07714C;border-color:#BFEBDB}
.adq-tag:hover{filter:brightness(.97);border-color:currentColor}

/* ── 消耗排行：横向条 ── */
.adq-bar{display:grid;grid-template-columns:20px minmax(96px,170px) 1fr 52px 42px;
  align-items:center;gap:8px;padding:4px 2px;border-radius:7px;cursor:pointer;
  transition:background .14s var(--ease)}
.adq-bar:hover{background:var(--brand-soft)}
.adq-bar .rk{font-size:10.5px;color:var(--faint);text-align:right;
  font-variant-numeric:tabular-nums}
.adq-bar .nm{font-size:12px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap}
.adq-bar .tr{height:9px;border-radius:5px;background:var(--line2);overflow:hidden}
.adq-bar .tr i{display:block;height:100%;border-radius:5px;
  background:linear-gradient(90deg,#5B9BFF 0%,#165DFF 100%)}
/* ROI 明显低于大盘的号：条变红，扫一眼就知道是哪几个在拖 */
.adq-bar.hot .tr i{background:linear-gradient(90deg,#F49A9A 0%,#E34D59 100%)}
.adq-bar.hot .nm{color:#A32B33}
.adq-bar .vv{font-size:11.5px;text-align:right;font-variant-numeric:tabular-nums;
  color:var(--ink);font-weight:600}
.adq-bar .pp{font-size:10.5px;text-align:right;color:var(--faint);
  font-variant-numeric:tabular-nums}

/* ── 图表容器 ── */
.adq-svg{display:block;width:100%;height:auto;overflow:visible}
.adq-dot{cursor:pointer}
.adq-dot circle{transition:fill-opacity .14s var(--ease)}
.adq-dot:hover circle{fill-opacity:.72}
/* 散点上的名字：描一圈白边，压在别的点或参考线上也能读清。
   不加白边的话，三四个点凑在一起就是一坨看不清的字。 */
.adq-slab{font-size:9.5px;fill:var(--soft);
  paint-order:stroke;stroke:#fff;stroke-width:2.6;stroke-linejoin:round}

/* ── 品牌筛选：单独一行，不跟标题挤 ── */
.adq-brandrow{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px}
.adq-brandrow:empty{display:none}
.adq-brandrow button{font-family:inherit;font-size:11.5px;padding:3px 10px;
  border:1px solid var(--line);background:var(--card);color:var(--soft);
  border-radius:7px;cursor:pointer;transition:all .14s var(--ease)}
.adq-brandrow button:hover{border-color:#C9D6F5;color:var(--brand);background:var(--brand-soft)}
.adq-brandrow button.on{background:var(--brand);border-color:var(--brand);
  color:#fff;font-weight:600}
/* 标题里的「全部视频号」不能被 hint 挤成两行 */
.adq-h-t{flex:none;white-space:nowrap}

/* ── 明细表 ── */
.adq-scroll{max-height:620px;overflow:auto;border:1px solid var(--line);border-radius:var(--r)}
.adq-scroll table.mini{border:0}
.adq-scroll table.mini thead th{position:sticky;top:0;z-index:2;background:#F8FAFD}
.adq-table td{vertical-align:middle}
/* 消耗列（第 3 列）绝不能折行：折一次整张表的行高就翻倍 */
.adq-table td:nth-child(3){white-space:nowrap}
.adq-table .adq-ix{font-size:10.5px;color:var(--faint);text-align:right;
  font-variant-numeric:tabular-nums;padding-right:4px}
.adq-table th.adq-sort{cursor:pointer;user-select:none;white-space:nowrap}
.adq-table th.adq-sort:hover{color:var(--brand)}
.adq-table th.adq-sort.on{color:var(--brand)}
.adq-table tbody tr{cursor:pointer}
.adq-table tbody tr.adq-on td{background:var(--brand-mid)}
.adq-bd{display:inline-block;margin-left:6px;font-size:10px;padding:1px 5px;
  border-radius:5px;background:var(--brand-soft);color:var(--brand);
  vertical-align:1px;letter-spacing:.2px}
/* 单元格里的迷你条：跟数字同一行，宽度算过 —— 超过 26px 会把数字挤到下一行，
   表现为整张表行高翻倍（第一次改就踩了这个坑） */
.adq-table td .adq-cellbar{display:inline-block;width:26px;height:5px;border-radius:3px;
  background:var(--line2);margin-right:5px;vertical-align:middle;overflow:hidden}
.adq-table td .adq-cellbar i{display:block;height:100%;background:var(--brand);opacity:.5}
.adq-table td.dimv{color:var(--soft)}
.adq-sh{font-variant-numeric:tabular-nums;color:var(--soft)}

/* 搜索框：跟 .datesel 一个手感 */
.adq-q{font-family:inherit;font-size:12px;padding:6px 10px;border-radius:8px;
  border:1px solid var(--line);background:var(--card);color:var(--ink);
  width:132px;transition:width .18s var(--ease)}
.adq-q:focus{width:180px;outline:none}

/* ── 趋势 ── */
.adq-trendwrap{display:flex;flex-direction:column;gap:6px}
.adq-legend{display:flex;gap:16px;align-items:center;font-size:11px;color:var(--soft);
  flex-wrap:wrap;padding-left:4px}
.adq-legend i{display:inline-block;width:14px;height:3px;border-radius:2px;
  margin-right:5px;vertical-align:2px}
.adq-legend i.l1{background:var(--brand)}
.adq-legend i.l2{background:var(--pass)}
.adq-legend .dim{color:var(--faint)}
.adq-trendone{display:flex;flex-direction:column;gap:5px;padding:14px 4px;
  font-size:12.5px;color:var(--soft)}
.adq-trendone b{color:var(--ink);font-size:13px}
.adq-trendone em{font-size:11.5px;color:var(--faint);font-style:normal}

/* ── 期次流水 ── */
.adq-snaps tbody tr{cursor:pointer}
.adq-snaps tbody tr.adq-on td{background:var(--brand-mid)}
/* 区间和期次名一定不能换行：一换行整张流水表的行高就参差不齐，
   「哪几期是一周」反而看不出来了。列宽不够就截断，hover 有 title 兜底。 */
.adq-snaps td.dimv,.adq-snaps td.ttl{white-space:nowrap}
/* 第 3 列是粒度（单日/周/月/区间）。列窄，不 nowrap 会把「区间」拆成两行，
   整张表的行高立刻参差。 */
.adq-snaps td:nth-child(3),.adq-snaps th:nth-child(3){white-space:nowrap}
.adq-snaps td.ttl b{display:inline-block;max-width:240px;overflow:hidden;
  text-overflow:ellipsis;vertical-align:bottom}
.adq-ln{color:var(--brand);text-decoration:none;font-size:11.5px}
.adq-ln:hover{text-decoration:underline}

/* ── 期次弹窗 ── */
.adq-modal{width:min(480px,92vw)}
.adq-form{display:flex;flex-direction:column;gap:11px;margin:14px 0 0}
.adq-form label{display:flex;flex-direction:column;gap:5px;font-size:12px;
  color:var(--soft)}
.adq-form label em{font-size:10.5px;color:var(--faint);font-style:normal;line-height:1.5}
.adq-form input,.adq-form select{font-family:inherit;font-size:13px;padding:8px 10px;
  border-radius:9px;border:1px solid var(--line);background:var(--card);color:var(--ink)}
.adq-two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.adq-two label{margin:0}
.adq-mact{display:flex;justify-content:flex-end;gap:9px;margin-top:18px}

/* 删除按钮的二次确认态 */
.ghost.adq-danger{border-color:#F5C0BE;background:var(--reject-soft);color:var(--reject)}

/* ── 期次备注：数据是不是残的、来源是谁、日期是不是猜的 ── */
.adq-note{font-size:11.5px;line-height:1.75;color:var(--soft);
  background:#FBFCFE;border:1px solid var(--line2);border-left:3px solid #C9D6F5;
  border-radius:8px;padding:8px 12px;margin:0 0 12px}
.adq-note.hidden{display:none}

/* 窄屏：判断条和图表堆叠，时间轴继续横滑 */
@media (max-width:900px){
  .adq-verdict{grid-template-columns:1fr}
  .adq-bar{grid-template-columns:18px minmax(80px,120px) 1fr 46px 38px;gap:6px}
  .adq-q{width:100px}
}

/* 空库引导：第一次进来的人得先明白这页怎么用 */
.guidebox{grid-column:1/-1;background:#f1f3f7;border:1px dashed var(--line);
  border-radius:13px;padding:42px 24px;display:flex;flex-direction:column;gap:6px;
  font-size:13px;line-height:1.9;color:var(--soft)}
.guidebox b{font-size:15px;color:var(--ink);margin-bottom:6px}
.guidebox span{display:block}
.guidebox .guidehint{margin-top:10px;font-size:11.5px;color:var(--faint)}

/* ── 链路切换条 ──
   比「按期次 / 按周」更外一层。刻意做成跟模式切换同款的分段控件，
   但尺寸大一点、带期次数 —— 让人一眼知道「另一条链路上有没有东西」，
   不然会把「这边是空的」误当成「我点错了」。 */
.adq-chseg{margin:0 0 14px}
.adq-chseg button{padding:8px 16px;font-size:13px;font-weight:600}
.adq-chseg .adq-chn{font-size:10px;font-weight:700;padding:0 5px;border-radius:7px;
  background:var(--line2);color:var(--soft);font-variant-numeric:tabular-nums}
.adq-chseg button.active .adq-chn{background:rgba(255,255,255,.28);color:#fff}

/* 平台切换：直购CID 的下一层。挂在链路行下面，样式跟链路一致但略小一档，
   一眼能看出「链路 > 平台」的层级关系。 */
.adq-pfrow{display:flex;align-items:center;gap:10px;margin:0 0 14px;flex-wrap:wrap}
.adq-pfseg button{padding:5px 13px;font-size:12.5px;font-weight:600}
.adq-pfseg .adq-chn{font-size:10px;font-weight:700;padding:0 5px;border-radius:7px;
  background:var(--line2);color:var(--soft);font-variant-numeric:tabular-nums}
.adq-pfseg button.active .adq-chn{background:rgba(255,255,255,.28);color:#fff}
.adq-pfseg button.empty{opacity:.5}
.adq-pfhint{font-size:12px;color:var(--soft)}

/* ── 部员入口：大地址 + 二维码 ──
   快速隧道的域名是 40 位随机英文，让部员手敲是不可能的；
   给个码让他们扫，地址一变重发一张就行。 */
.addr-big{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13.5px;
  line-height:1.6;word-break:break-all;background:#f5f7fa;border:1px solid var(--line);
  border-radius:9px;padding:10px 12px;margin-bottom:14px;user-select:all;-webkit-user-select:all}
.addr-qr{width:190px;height:190px;margin:0 auto 14px;background:#fff;border:1px solid var(--line);
  border-radius:10px;padding:8px;display:flex;align-items:center;justify-content:center}
.addr-qr img,.addr-qr svg{width:100%;height:100%;display:block}
#addrWarn:empty{display:none}

/* 顶栏下面那条黄色提示：地址变了，催主管重新发。
   用 sticky 而不是 fixed —— fixed 会浮在内容上面把「总览」标题盖住（第一版就踩了），
   sticky 是占位的，页面内容整体下移，滚动时又跟着顶栏走。 */
#addrBanner{position:sticky;top:52px;z-index:39;display:flex;align-items:center;
  justify-content:center;gap:10px;flex-wrap:wrap;background:#fff7e6;border-bottom:1px solid #fde68a;
  color:#92400e;font-size:12.5px;padding:8px 16px;box-shadow:0 2px 8px rgba(0,0,0,.05)}
#addrBanner b{font-family:ui-monospace,Menlo,Consolas,monospace}
body.locked #addrBanner{display:none}

/* ═══ 脚本预审（抖音平台规则） ═══
   颜色三级：ok 绿 / mid 黄 / high 红，和审片、提醒保持一套语义。
   预审条刻意做得比表单字段更「窄而高对比」——它是唯一的拦截信号，
   混在其它信息里就会被忽略。 */
.scpre{display:flex;align-items:center;gap:9px;margin:2px 0 12px;
  padding:9px 11px;border-radius:9px;border:1px solid var(--line);
  background:var(--paper);font-size:12px}
.scpre-i{width:20px;height:20px;flex:0 0 20px;border-radius:50%;display:flex;
  align-items:center;justify-content:center;font-weight:800;font-size:12px;
  background:#e5e7eb;color:#6b7280}
.scpre-m{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;line-height:1.5}
.scpre-m b{font-size:12px;color:var(--ink);font-weight:700}
.scpre-m span{font-size:11.5px;color:var(--soft)}
.scpre.ok{border-color:#b7e1c4;background:var(--pass-soft)}
.scpre.ok .scpre-i{background:var(--pass);color:#fff}
.scpre.ok .scpre-m b{color:#0b6b3d}
.scpre.mid{border-color:#fcd9a0;background:var(--warn-soft)}
.scpre.mid .scpre-i{background:var(--warn);color:#fff}
.scpre.mid .scpre-m b{color:#8a4b06}
.scpre.high{border-color:#f3b8b2;background:var(--reject-soft)}
.scpre.high .scpre-i{background:var(--reject);color:#fff}
.scpre.high .scpre-m b{color:#a01d14}
.scpre.err{border-color:#f3b8b2;background:var(--reject-soft)}

/* 命中明细：按字段分组，一眼看出是哪一句话出的问题 */
.sprlist{margin:-4px 0 12px;border:1px solid var(--line);border-radius:9px;
  overflow:hidden;background:var(--card)}
.sprf{padding:8px 11px;border-top:1px solid var(--line2)}
.sprf:first-child{border-top:0}
.sprf-h{font-size:11.5px;font-weight:700;color:var(--soft);margin-bottom:5px;
  display:flex;align-items:center;gap:6px}
.sprf-h b{background:var(--reject-soft);color:var(--reject);font-size:10.5px;
  min-width:16px;height:16px;border-radius:8px;display:inline-flex;
  align-items:center;justify-content:center;padding:0 5px}
.sprhit{display:flex;align-items:flex-start;gap:7px;flex-wrap:wrap;
  font-size:11.5px;line-height:1.7;padding:2px 0}
.sprhit i{font-style:normal;font-weight:700;color:#8a4b06;background:var(--warn-soft);
  border-radius:4px;padding:0 5px;white-space:nowrap}
.sprhit em{font-style:normal;color:var(--soft);white-space:nowrap}
.sprhit span{color:var(--faint);flex:1;min-width:120px}
.sprhit.high i{color:var(--reject);background:var(--reject-soft)}
.sprhit.high em{color:#a01d14}

/* 看板卡片上的合规角标：审片人扫一眼就知道哪张单脚本有问题 */
.tk-pre{font-size:10.5px;font-weight:700;color:var(--reject);background:var(--reject-soft);
  border:1px solid #f3b8b2;border-radius:4px;padding:0 5px;line-height:16px;white-space:nowrap}

/* ── 平台规则抽屉 ── */
.rulebar{display:flex;align-items:center;gap:8px}
.rulebar input{flex:1;font-family:inherit;font-size:12.5px;padding:7px 10px;
  border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--ink)}
.rulebar input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(43,92,255,.1)}
.ruleitem{border:1px solid var(--line);border-left:3px solid var(--line);
  border-radius:8px;padding:9px 11px;margin-bottom:8px;background:var(--card)}
.ruleitem.high{border-left-color:var(--reject)}
.ri-h{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.ri-h b{font-size:12.5px;color:var(--ink)}
.ri-lv{font-size:10.5px;font-weight:700;border-radius:4px;padding:0 5px;line-height:16px;
  color:var(--warn);background:var(--warn-soft)}
.ruleitem.high .ri-lv{color:var(--reject);background:var(--reject-soft)}
.ri-src{font-size:10.5px;color:var(--faint);margin-left:auto}
.ri-words{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
.ri-words span{font-size:11px;color:var(--soft);background:var(--paper);
  border:1px solid var(--line2);border-radius:4px;padding:0 5px;line-height:17px}
.ri-fix{font-size:11.5px;color:var(--pass);margin-top:6px;line-height:1.6}
.ri-fix b{font-size:10.5px;color:#0b6b3d;background:var(--pass-soft);
  border-radius:4px;padding:0 5px;margin-right:5px}
.ri-basis{font-size:11px;color:var(--faint);margin-top:4px;line-height:1.6}
