/* ============================================================
   宠物产品研究与自主产品开发实验室 · V1.2.2 视觉系统
   设计原则：实验室分层 + 细网格（低透明度背景）+ 单一签名元素（证据轨道）
   - 全页仅一个发光/强调元素（证据轨道），其余靠间距/层级/细边界区分
   - 同一层级只使用一种圆角
   - 绿色仅表示「健康 / 已确认」；不作为普通装饰
   - 正文 15px（紧凑 14px），核心数字 26–32px，页面标题 24–28px
   ============================================================ */
:root{
  --bg:#0b0f14;
  --surface-1:#111824;
  --surface-2:#161f2c;
  --surface-3:#1b2533;
  --surface-hi:#212d3d;
  --line:#243244;
  --line-soft:#1a2330;
  --text:#e7eef5;
  --text-2:#aab6c4;
  --text-mute:#8d9bab;   /* V1.2.2 提亮：在 surface-3 上仍保 ≥4.5:1 余量 */
  --accent:#2dd4bf;      /* 实验室青：主操作 / 事实（签名色） */
  --accent-2:#818cf8;    /* 靛：自主产品开发 */
  --accent-3:#fbbf24;    /* 琥珀：成本 / 分析假设 */
  --danger:#f87171;      /* 红：仅异常 / 停止悬停 */
  --ok:#34d399;          /* 绿：仅健康 / 已确认 */
  --fact:#34d399;
  --human:#818cf8;
  --assume:#fbbf24;
  --tbd:#94a3b8;
  --radius:10px;         /* 唯一主圆角 */
  --radius-pill:999px;
  --sp-1:6px; --sp-2:10px; --sp-3:14px; --sp-4:18px; --sp-5:26px; --sp-6:36px;
  --sidebar-w:236px;
  --ctx-w:320px;
  --fs-body:15px;
  --fs-page:26px;
  --fs-core:30px;        /* 核心指标数字 28–32px */
  --fs-sec:13.5px;
  --fs-table:13px;
  --fs-label:12px;
  /* V1.2.2 指标专用文字令牌（不参与继承，始终显式赋值） */
  --kpi-num:#F1F5F7;     /* 指标数字：对比度 vs #161f2c ≈ 14.8:1 */
  --kpi-lab:#A6B5BE;     /* 指标名称：对比度 vs #161f2c ≈ 7.6:1 */
  --lh:1.62;
  --mono:"SF Mono",ui-monospace,"Cascadia Code","Microsoft YaHei Mono",Consolas,monospace;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei","PingFang SC","Hiragino Sans GB",sans-serif;
}
*{box-sizing:border-box}
/* ------------------------------------------------------------------
   【V1.2.2 根因修复】表单控件继承截断
   浏览器 UA 样式表对 button/input/select/textarea 强制 color:buttontext
   （深色背景下 = 纯黑），这会「切断」文字颜色继承链：父级即使是浅色，
   button 内部未显式声明 color 的子元素也会变黑。
   V1.2.1 的 .kpi(BUTTON) .k-n 与 .phase(BUTTON) .pname 即因此不可见。
   此处统一恢复继承，属系统性修复而非单点补丁。
------------------------------------------------------------------ */
button,input,select,textarea,optgroup{
  font-family:inherit;font-size:inherit;line-height:inherit;
  color:inherit;               /* 关键：恢复继承，取代 UA 的 buttontext */
}
button{background:none}
html,body{height:100%;margin:0}
body{
  font-family:var(--sans);
  background:var(--bg);
  color:var(--text);
  font-size:var(--fs-body);
  line-height:var(--lh);
  -webkit-font-smoothing:antialiased;
}
/* 低透明度网格背景，仅作轻微实验室坐标感（透明度已较 V1.2 降低约 60%） */
body::before{
  content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background-image:
    linear-gradient(rgba(120,160,180,.035) 1px,transparent 1px),
    linear-gradient(90deg,rgba(120,160,180,.035) 1px,transparent 1px);
  background-size:34px 34px;
}
body.density-compact{ --fs-body:14px; --fs-page:24px; --fs-core:28px; --sp-3:10px; --sp-4:13px; --sp-5:18px; --lh:1.5; }

/* 缩放（依据 devicePixelRatio） */
body.zoom-125{ font-size:14.5px; --fs-core:29px; --fs-page:25px; }
body.zoom-150{ font-size:14px;   --fs-core:28px; --fs-page:24px; --sp-5:20px; }
body.zoom-lower{ font-size:14.5px; }

#app{position:relative;z-index:1;display:grid;grid-template-rows:auto 1fr;height:100vh;overflow:hidden}

/* ---------- 顶部栏 ---------- */
.topbar{
  display:flex;align-items:center;gap:var(--sp-4);
  padding:10px 18px;border-bottom:1px solid var(--line);
  background:linear-gradient(180deg,var(--surface-2),var(--surface-1));
}
.brand{display:flex;align-items:center;gap:10px;white-space:nowrap}
.brand .ic{width:22px;height:22px;color:var(--accent)}
.brand .name{font-weight:700;font-size:15px;letter-spacing:.3px}
.brand .ver{font-size:11px;color:var(--text-mute);border:1px solid var(--line);border-radius:var(--radius-pill);padding:1px 7px}
.brand .lab{font-size:13px;color:var(--text-2);max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gsearch{position:relative;flex:1;max-width:520px;margin:0 auto}
.gsearch input{
  width:100%;padding:9px 38px 9px 36px;border-radius:var(--radius-pill);
  border:1px solid var(--line);background:var(--surface-3);color:var(--text);font-size:14px;outline:none;
  cursor:text;
}
.gsearch input[readonly]{cursor:text;}
.gsearch input:focus{border-color:var(--accent)}
.gsearch .ic{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--text-mute)}
.gsearch .hint{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:12px;color:var(--text-mute);border:1px solid var(--line);border-radius:6px;padding:1px 6px}
.suggest{position:absolute;top:42px;left:0;right:0;background:var(--surface-hi);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;display:none;z-index:50;box-shadow:0 10px 30px rgba(0,0,0,.4)}
.suggest.show{display:block}
.suggest a{display:flex;gap:10px;padding:9px 14px;cursor:pointer;border-bottom:1px solid var(--line-soft)}
.suggest a:hover{background:var(--surface-3)}
.suggest .sid{font-family:var(--mono);color:var(--accent);font-size:12px}
.suggest .smeta{color:var(--text-2);font-size:13px}

.topright{display:flex;align-items:center;gap:10px}
.conn{display:flex;align-items:center;gap:7px;font-size:13px;padding:6px 12px;border-radius:var(--radius-pill);border:1px solid var(--line);background:var(--surface-3);white-space:nowrap}
.conn .dot{width:8px;height:8px;border-radius:50%;background:var(--text-mute)}
.conn.ok{border-color:rgba(52,211,153,.4)} .conn.ok .dot{background:var(--ok);box-shadow:0 0 0 3px rgba(52,211,153,.15)}
.conn.partial{border-color:rgba(251,191,36,.45)} .conn.partial .dot{background:var(--accent-3)}
.conn.down{border-color:rgba(248,113,113,.5)} .conn.down .dot{background:var(--danger)}
.conn .fail-list{font-size:12px;color:var(--accent-3);margin-left:4px}
.btn-ic{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface-3);color:var(--text-2);cursor:pointer}
.btn-ic:hover{color:var(--text);border-color:var(--accent)}
.btn-ic .ic{width:18px;height:18px}

/* ---------- 主体：侧栏 + 内容 ---------- */
.body{display:grid;grid-template-columns:var(--sidebar-w) 1fr;min-height:0}
.sidebar{display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--line);background:var(--surface-1)}
.sidebar.collapsed{--sidebar-w:60px}
.sidebar .brand-sub{display:flex;align-items:center;justify-content:space-between;padding:12px 14px 8px;color:var(--text-mute);font-size:13px;text-transform:uppercase;letter-spacing:.5px}
.sidebar.collapsed .brand-sub .label{display:none}
.sidebar .collapse{cursor:pointer;color:var(--text-mute)}
.sidebar .collapse:hover{color:var(--accent)}
.snav{flex:1;overflow-y:auto;overflow-x:hidden;padding:4px 8px 10px}
.snav::-webkit-scrollbar{width:8px} .snav::-webkit-scrollbar-thumb{background:var(--line);border-radius:8px}
.pinbar{border-bottom:1px solid var(--line-soft);padding:6px 8px;margin-bottom:4px}
.pinbar .ph{font-size:13px;color:var(--text-mute);padding:2px 6px}
.recentbar{border-top:1px solid var(--line-soft);padding:6px 8px}
.recentbar .ph{font-size:13px;color:var(--text-mute);padding:2px 6px}
.nav-sec{font-size:13px;color:var(--text-mute);padding:10px 10px 4px;letter-spacing:.4px}
.navgroup{display:flex;align-items:center;justify-content:space-between;padding:8px 10px 4px;color:var(--text-2);font-size:14px;cursor:pointer;user-select:none}
.navgroup .caret{transition:transform .2s;color:var(--text-mute);font-size:10px}
.navgroup.collapsed .caret{transform:rotate(-90deg)}
.navitem{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;margin:2px 0;border:0;border-radius:var(--radius);background:transparent;color:var(--text-2);font-size:14px;text-align:left;cursor:pointer;font-family:inherit}
.navitem:hover{background:var(--surface-3);color:var(--text)}
.navitem.active{background:var(--surface-3);color:var(--text);box-shadow:inset 3px 0 0 var(--accent)}
.navitem .ic{width:17px;height:17px;flex:none;color:var(--text-mute)}
.navitem.active .ic,.navitem:hover .ic{color:var(--accent)}
.navitem .lbl{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.navitem .pin{opacity:0;color:var(--text-mute);font-size:12px;cursor:pointer}
.navitem:hover .pin{opacity:1}
.navitem .pin.on{opacity:1;color:var(--accent)}
.sidebar.collapsed .navitem .lbl,.sidebar.collapsed .navitem .pin,.sidebar.collapsed .nav-sec,.sidebar.collapsed .navgroup .t{display:none}
.sidebar.collapsed .navitem{justify-content:center}

.foot{border-top:1px solid var(--line);padding:8px;display:flex;flex-direction:column;gap:6px}
.foot .navitem{color:var(--text-2)}
.stop{display:flex;align-items:center;gap:8px;justify-content:center;padding:8px;border:1px solid var(--line);border-radius:var(--radius);background:transparent;color:var(--text-mute);cursor:pointer;font-family:inherit;font-size:13px}
.stop:hover{color:var(--danger);border-color:rgba(248,113,113,.5)}
.stop .ic{width:15px;height:15px}

/* ---------- 内容容器：12 列自适应 ---------- */
main#view{overflow-y:auto;min-width:0;padding:var(--sp-5) var(--sp-5) 60px}
main#view::-webkit-scrollbar{width:10px} main#view::-webkit-scrollbar-thumb{background:var(--line);border-radius:8px}
.wrap{max-width:2360px;margin:0 auto}
.row12{display:grid;grid-template-columns:repeat(12,1fr);gap:var(--sp-4)}
.col-3{grid-column:span 3}.col-4{grid-column:span 4}.col-5{grid-column:span 5}
.col-6{grid-column:span 6}.col-7{grid-column:span 7}.col-8{grid-column:span 8}
.col-9{grid-column:span 9}.col-12{grid-column:span 12}
/* 决策驾驶舱基础栅格（<1600 单栏；≥1600 主内容 + 上下文右栏；≥1920 2:1） */
.cockpit{display:grid;grid-template-columns:1fr;gap:var(--sp-4);align-items:start}
@media(max-width:1180px){ :root{--sidebar-w:60px} .navitem .lbl,.navitem .pin,.nav-sec,.navgroup .t{display:none} .navitem{justify-content:center} .brand .lab{display:none} }

/* 大屏：1600 加窄右栏；1920+ 主 8 列 + 上下文 4 列 */
@media(min-width:1600px){
  main#view{padding:var(--sp-5)}
  .cockpit{grid-template-columns:1fr var(--ctx-w)}
  .col-ctx{grid-column:span 4}
}
@media(min-width:1920px){
  .cockpit{grid-template-columns:minmax(0,2fr) 1fr;gap:var(--sp-5)}
}

/* ---------- 通用面板 / 卡片 ---------- */
.panel{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-4)}
.panel > h3{margin:0 0 var(--sp-3);font-size:15px;display:flex;align-items:center;gap:8px;color:var(--text)}
.panel > h3 .ic{width:16px;height:16px;color:var(--accent)}
.panel .sub{font-size:13px;color:var(--text-mute);font-weight:400;margin-left:auto}
h2{font-size:var(--fs-page);margin:0 0 var(--sp-4);display:flex;align-items:center;gap:10px}
h2 .ic{width:22px;height:22px;color:var(--accent)}
h2 .sub{font-size:13px;color:var(--text-mute);font-weight:400}
h3{font-size:16px;margin:var(--sp-5) 0 var(--sp-3)}
.tip{color:var(--text-mute);font-size:12.5px;margin-top:var(--sp-2)}
.muted{color:var(--text-mute)}
.mono{font-family:var(--mono)}

/* KPI 卡（≤6 核心指标，可点击） */
.kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--sp-3)}
@media(max-width:1400px){.kpis{grid-template-columns:repeat(3,1fr)}}
@media(max-width:760px){.kpis{grid-template-columns:repeat(2,1fr)}}
.kpi{position:relative;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);
     padding:14px 16px;cursor:pointer;text-align:left;color:var(--text);
     transition:border-color .15s,transform .1s,background .15s}
/* 全状态锁定：卡片自身颜色在任何状态下都不回落到 UA 的 buttontext */
.kpi:hover,.kpi:focus,.kpi:active,.kpi:focus-visible,.kpi:disabled{color:var(--text)}
.kpi:hover{border-color:var(--accent);transform:translateY(-1px);background:var(--surface-3)}
.kpi:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.kpi:active{transform:translateY(0)}
.kpi:disabled{cursor:not-allowed;opacity:.55}
.kpi .k-l{font-size:13.5px;color:var(--kpi-lab);display:flex;align-items:center;gap:6px}
.kpi .k-l .ic{width:14px;height:14px;color:var(--text-mute)}
/* 核心数字：显式赋色 + 全状态锁定，绝不依赖继承（V1.2.1 不可见的根因） */
.kpi .k-n,
.kpi:hover .k-n,.kpi:focus .k-n,.kpi:active .k-n,
.kpi:focus-visible .k-n,.kpi:disabled .k-n{
  color:var(--kpi-num);
  font-size:var(--fs-core);font-weight:700;line-height:1.15;margin-top:6px;
  font-variant-numeric:tabular-nums;letter-spacing:.2px;
}
.kpi .k-trend{font-size:12.5px;margin-top:4px;color:var(--text-mute)}
.kpi .k-trend.up{color:var(--ok)} .kpi .k-trend.down{color:var(--danger)}
.kpi.alert{border-color:rgba(248,113,113,.45)}
.kpi.warn{border-color:rgba(251,191,36,.4)}
.kpi .k-badge{position:absolute;top:10px;right:12px;font-size:12px;color:var(--text-mute)}
.more-metrics{margin-top:var(--sp-3)}
.more-metrics summary{cursor:pointer;color:var(--accent);font-size:13px;padding:4px 0}
.more-metrics .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--sp-2);margin-top:var(--sp-2)}
.mini{background:var(--surface-3);border:1px solid var(--line-soft);border-radius:var(--radius);padding:10px 12px}
.mini .ml{font-size:13px;color:var(--text-2)} .mini .mn{font-size:18px;font-weight:700;margin-top:2px;font-variant-numeric:tabular-nums}

/* ---------- 证据轨道（唯一签名元素） ---------- */
.evidence-track{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;padding:6px 0}
.evidence-track.clickable .et-node{cursor:pointer}
.evidence-track.clickable .et-node:hover{transform:translateY(-2px);border-color:var(--accent)}
.et-node{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;transition:transform .12s,border-color .12s;position:relative;overflow:hidden}
.et-node::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--c)}
.et-node .et-dot{width:9px;height:9px;border-radius:50%;background:var(--c);display:inline-block;margin-bottom:6px}
.et-node .et-t{font-size:13px;color:var(--text-2)}
.et-node .et-v{font-size:22px;font-weight:700;font-variant-numeric:tabular-nums}
.et-node .et-s{font-size:13px;color:var(--text-mute)}
.et-node.fact{--c:var(--fact)} .et-node.human{--c:var(--human)}
.et-node.assume{--c:var(--assume)} .et-node.tbd{--c:var(--tbd)}
.et-bar{height:6px;border-radius:6px;background:var(--surface-3);margin-top:8px;overflow:hidden}
.et-bar > i{display:block;height:100%;background:var(--c);border-radius:6px}
.et-help{font-size:13px;color:var(--accent);cursor:pointer;margin-left:8px}
.et-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:13px;color:var(--text-mute);margin-top:6px}
.et-legend i{width:8px;height:8px;border-radius:2px;display:inline-block;margin-right:5px;vertical-align:middle}

/* ---------- 今日优先事项 ---------- */
.prio-list{display:flex;flex-direction:column;gap:8px}
.prio{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;background:var(--surface-2);border:1px solid var(--line);border-left:3px solid var(--pc,var(--accent));border-radius:var(--radius);padding:10px 12px}
.prio.p-high{--pc:var(--danger)} .prio.p-med{--pc:var(--accent-3)} .prio.p-low{--pc:var(--accent-2)}
.prio .p-ico{width:18px;height:18px;color:var(--pc)}
.prio .p-obj{font-size:13.5px;font-weight:600}
.prio .p-reason{font-size:13.5px;color:var(--text-2);margin-top:2px}
.prio .p-meta{display:flex;gap:8px;align-items:center;margin-top:3px;font-size:13px;color:var(--text-mute)}
.prio .p-pri{font-size:12.5px;border:1px solid var(--pc);color:var(--pc);border-radius:var(--radius-pill);padding:0 7px}
.prio .p-due{font-family:var(--mono)}
.prio .p-go{font-size:13px;color:var(--accent);background:var(--surface-3);border:1px solid var(--line);border-radius:var(--radius);padding:5px 10px;cursor:pointer;white-space:nowrap}
.prio .p-go:hover{border-color:var(--accent)}

/* ---------- 阶段轨道（流程） ---------- */
.phasebar{display:flex;align-items:stretch;gap:0;background:var(--surface-1);border:1px solid var(--line);border-radius:var(--radius);padding:8px;margin-bottom:var(--sp-4);overflow-x:auto}
.phase{position:relative;flex:1;min-width:132px;padding:10px 12px;border-radius:var(--radius);cursor:pointer;
       background:transparent;border:1px solid transparent;text-align:left;color:var(--text)}
/* 与 KPI 同因：BUTTON 会截断继承，此处全状态锁定 */
.phase:hover,.phase:focus,.phase:active,.phase:focus-visible,.phase:disabled{color:var(--text)}
.phase:hover{background:var(--surface-3)}
.phase:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.phase:disabled{cursor:not-allowed;opacity:.5}
.phase.active{background:var(--surface-3);border-color:var(--line)}
.phase + .phase::before{content:"";position:absolute;left:-1px;top:50%;width:2px;height:18px;background:var(--line);transform:translateY(-50%)}
.phase .pname,.phase:hover .pname,.phase:focus .pname,.phase:disabled .pname{
  color:var(--text);font-size:14px;font-weight:600;display:flex;align-items:center;gap:6px}
.phase .pname .ic{width:15px;height:15px;color:var(--accent)}
.phase .pstat{font-size:13px;color:var(--text-mute);margin-top:4px;display:flex;gap:10px;flex-wrap:wrap}
.phase .pstat b{color:var(--text-2);font-variant-numeric:tabular-nums}
.phase .blk{color:var(--danger)} .phase .ok{color:var(--ok)}

/* ---------- 表格（表头固定 / 行高 40–44） ---------- */
.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface-2)}
table{width:100%;border-collapse:collapse;font-size:var(--fs-table)}
thead th{position:sticky;top:0;z-index:2;background:var(--surface-3);color:var(--text-2);text-align:left;font-weight:600;padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap;font-size:13px}
tbody td{padding:0 12px;height:42px;border-bottom:1px solid var(--line-soft);color:var(--text);vertical-align:middle}
tbody tr:hover{background:var(--surface-3)}
td.id,th.id{font-family:var(--mono);font-size:13px;color:var(--accent)}
.cell-tbd{color:var(--text-mute);font-style:italic}
.tip-inline{color:var(--text-mute);font-size:13px;cursor:help;border-bottom:1px dotted var(--text-mute)}

/* 徽章 */
.badge{display:inline-block;font-size:12.5px;padding:1px 8px;border-radius:var(--radius-pill);border:1px solid var(--line);color:var(--text-2)}
.badge.b-fact{color:var(--fact);border-color:rgba(52,211,153,.4)}
.badge.b-human{color:var(--human);border-color:rgba(129,140,248,.4)}
.badge.b-assume{color:var(--assume);border-color:rgba(251,191,36,.4)}
.badge.b-tbd{color:var(--tbd)}
.badge.b-ok{color:var(--ok);border-color:rgba(52,211,153,.45)}
.badge.b-bad{color:var(--danger);border-color:rgba(248,113,113,.45)}
.badge.b-warn{color:var(--accent-3);border-color:rgba(251,191,36,.45)}
/* 闸门状态 */
.gate{display:inline-flex;align-items:center;gap:6px;font-size:13px;padding:2px 9px;border-radius:var(--radius-pill);border:1px solid var(--line)}
.gate.g-pass{color:var(--ok);border-color:rgba(52,211,153,.45)}
.gate.g-fail{color:var(--danger);border-color:rgba(248,113,113,.45)}
.gate.g-pend{color:var(--accent-3);border-color:rgba(251,191,36,.45)}
.gate.g-rej{color:var(--danger);border-color:rgba(248,113,113,.5)}

/* 按钮 */
button.act{background:var(--accent);color:#04201c;border:0;border-radius:var(--radius);padding:8px 14px;font-weight:600;cursor:pointer;font-family:inherit;font-size:13px}
button.act:hover{filter:brightness(1.08)}
button.ghost{background:transparent;color:var(--text-2);border:1px solid var(--line);border-radius:var(--radius);padding:7px 13px;cursor:pointer;font-family:inherit;font-size:13px}
button.ghost:hover{border-color:var(--accent);color:var(--text)}
a{color:var(--accent);text-decoration:none} a:hover{text-decoration:underline}

/* 空状态（带下一步提示） */
.empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:34px 20px;text-align:center;color:var(--text-mute);background:var(--surface-2);border:1px dashed var(--line);border-radius:var(--radius)}
.empty .ico{width:30px;height:30px;opacity:.6}
.empty .et{font-size:14px;color:var(--text-2)}
.empty .nx{font-size:13px;color:var(--accent)}
.empty .nx::before{content:"➜ ";}

/* 加载 / 错误 / Toast */
.loading{display:flex;align-items:center;gap:10px;color:var(--text-mute);padding:30px}
.spinner{width:16px;height:16px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.err{color:var(--danger);background:rgba(248,113,113,.08);border:1px solid rgba(248,113,113,.4);border-radius:var(--radius);padding:14px}
#toasts{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:8px;z-index:200}
.toast{display:flex;align-items:center;gap:8px;background:var(--surface-hi);border:1px solid var(--line);border-left:3px solid var(--ok);border-radius:var(--radius);padding:9px 14px;font-size:13px;min-width:200px;box-shadow:0 8px 24px rgba(0,0,0,.4)}
.toast.err{border-left-color:var(--danger)} .toast.warn{border-left-color:var(--accent-3)}
.toast .ti{color:var(--ok)} .toast.err .ti{color:var(--danger)} .toast.warn .ti{color:var(--accent-3)}

/* 抽屉 */
.drawer-mask{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:300;display:none}
.drawer-mask.show{display:block}
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(560px,92vw);background:var(--surface-1);border-left:1px solid var(--line);z-index:301;transform:translateX(100%);transition:transform .22s;overflow-y:auto;padding:var(--sp-5)}
.drawer.show{transform:translateX(0)}
.drawer .dh{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--sp-4)}
.drawer .dh .x{cursor:pointer;color:var(--text-mute);font-size:20px}

/* 漏斗 / 进度条 */
.funnel{display:flex;flex-direction:column;gap:7px}
.funnel .step{display:flex;align-items:center;gap:10px}
.funnel .step .fl{width:90px;font-size:13px;color:var(--text-2)}
.funnel .step .bar{flex:1;height:10px;background:var(--surface-3);border-radius:6px;overflow:hidden}
.funnel .step .bar > i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-2));border-radius:6px}
.funnel .step .fv{font-size:13px;font-variant-numeric:tabular-nums;width:34px;text-align:right}
.progress{height:8px;background:var(--surface-3);border-radius:6px;overflow:hidden}
.progress > i{display:block;height:100%;background:var(--accent);border-radius:6px}

/* ---------- 核心150进度（V1.2.2 方案B：真实数据补齐，无装饰图表） ---------- */
.c150-head{display:flex;align-items:baseline;gap:10px;margin-bottom:8px}
.c150-pct{font-size:26px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;line-height:1}
.c150-cap{font-size:13px;color:var(--text-2)}
.c150-cap b{color:var(--text)}
.c150-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}
.c150-s{display:flex;flex-direction:column;align-items:flex-start;gap:1px;
        background:var(--surface-3);border:1px solid var(--line);border-left:3px solid var(--sc,var(--line));
        border-radius:var(--radius);padding:8px 10px;cursor:pointer;color:var(--text);
        transition:border-color .15s,background .15s}
.c150-s.ok{--sc:var(--ok)} .c150-s.warn{--sc:var(--accent-3)} .c150-s.alert{--sc:var(--danger)}
.c150-s:hover{background:var(--surface-hi);border-color:var(--sc)}
.c150-s:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.c150-s:disabled{opacity:.5;cursor:not-allowed}
.c150-s b,.c150-s:hover b{font-size:19px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;line-height:1.15}
.c150-s span,.c150-s:hover span{font-size:13px;color:var(--text-2)}
.c150-sec{margin-top:14px;margin-bottom:6px;font-size:13px;color:var(--text-2);display:flex;align-items:baseline;gap:8px}
.c150-sub{font-size:12.5px;color:var(--text-mute)}
.gradebar{display:flex;height:8px;border-radius:6px;overflow:hidden;background:var(--surface-3)}
.gradebar > i{display:block;height:100%}
.gradelist{display:flex;flex-wrap:wrap;gap:12px;margin-top:7px;font-size:13px;color:var(--text-2)}
.gradelist i{width:8px;height:8px;border-radius:2px;display:inline-block;margin-right:5px;vertical-align:middle}
.gradelist b{color:var(--text);font-variant-numeric:tabular-nums}
.c150-recent{display:flex;flex-wrap:wrap;gap:7px}
.c150-r{display:inline-flex;align-items:center;gap:6px;background:var(--surface-3);
        border:1px solid var(--line);border-radius:var(--radius);padding:5px 10px;
        font-size:13px;color:var(--text);cursor:pointer;transition:border-color .15s}
.c150-r:hover{border-color:var(--ok);background:var(--surface-hi)}
.c150-r:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.c150-r .ic{width:14px;height:14px;color:var(--ok);flex:none}
.c150-foot{margin-top:14px}

/* 变更日志行 */
.chlog{display:flex;flex-direction:column;gap:2px}
.chlog .row{display:grid;grid-template-columns:84px 1fr auto;gap:10px;padding:8px 4px;border-bottom:1px solid var(--line-soft);font-size:13px;align-items:center}
.chlog .row .ts{color:var(--text-mute);font-family:var(--mono);font-size:12.5px}
.chlog .row .act{font-weight:600}
.chlog .row .tg{color:var(--text-mute);font-family:var(--mono);font-size:12.5px}

/* 双滚动防护：侧栏与主内容各自滚动，body 不滚动 */
.body{overflow:hidden}

.phase .pnext{font-size:12.5px;color:var(--text-mute);margin-top:3px;line-height:1.4}
/* 导航固定星：固定后长显 */
.navitem .pin.on{opacity:1;color:var(--accent)}
/* 首页 KPI 悬停反馈已在 .kpi 定义；空状态箭头微调 */
.empty .nx{margin-top:2px}

/* ===== V1.2.2 交互反馈补充（跳转定位 / 阻塞详情 / 禁用态） ===== */
/* 跳转后目标行高亮：2.4s 后自动淡出，不遮挡内容 */
.focus-hit{
  position:relative;
  background:rgba(58,169,255,.10) !important;
  box-shadow:inset 3px 0 0 var(--accent);
  animation:focusFade 2.4s ease-out forwards;
}
@keyframes focusFade{
  0%{background:rgba(58,169,255,.22)}
  70%{background:rgba(58,169,255,.12)}
  100%{background:transparent;box-shadow:inset 3px 0 0 transparent}
}
@media (prefers-reduced-motion:reduce){
  .focus-hit{animation:none;background:rgba(58,169,255,.12) !important}
}

/* 阻塞详情抽屉：键值表 */
table.kv{width:100%;border-collapse:collapse;font-size:13.5px}
table.kv th{
  text-align:left;color:var(--text-2);font-weight:500;
  padding:7px 10px 7px 0;vertical-align:top;width:104px;white-space:nowrap;
  border-bottom:1px solid var(--line-soft);
}
table.kv td{
  color:var(--text);padding:7px 0;vertical-align:top;line-height:1.55;
  border-bottom:1px solid var(--line-soft);word-break:break-word;
}
table.kv tr:last-child th,table.kv tr:last-child td{border-bottom:none}
table.kv td .mono{font-family:var(--mono);font-size:12.5px;color:var(--text-2)}

/* 阻塞原因解释块 */
.blk-why{
  margin-top:14px;padding:11px 13px;background:var(--surface-3);
  border-left:3px solid var(--warn);border-radius:0 var(--radius) var(--radius) 0;
  font-size:13.5px;color:var(--text-2);line-height:1.65;
}
.blk-why b{color:var(--text);font-weight:600}
/* 阻塞处理动作区 */
.blk-act{margin-top:16px;display:flex;gap:8px;flex-wrap:wrap}
.blk-act button{min-height:32px}

/* 今日优先事项：携带的任务编号徽标 */
.p-tid{
  font-family:var(--mono);font-size:12px;color:var(--text-mute);
  background:var(--surface-3);border:1px solid var(--line-soft);
  border-radius:4px;padding:1px 5px;margin-left:6px;white-space:nowrap;
}
/* 可点击的产品编号 = 进入产品详情页的入口 */
a.p-tid-link{
  color:var(--accent);text-decoration:none;cursor:pointer;
  border-color:color-mix(in srgb, var(--accent) 38%, transparent);
}
a.p-tid-link:hover{
  background:color-mix(in srgb, var(--accent) 14%, var(--surface-3));
  border-color:var(--accent);text-decoration:underline;
}

/* 全局禁用态：所有按钮统一反馈 */
button:disabled,button[disabled]{
  opacity:.5;cursor:not-allowed;filter:grayscale(.25);
}
button:disabled:hover{background:inherit;border-color:inherit;transform:none}
/* 全局键盘焦点可见（无鼠标操作可用） */
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px;
}

/* 阶段卡当前态：左侧强调条，可一眼识别 */
.phase.active{box-shadow:inset 3px 0 0 var(--accent)}
.phase.active .pname{color:var(--accent-2,var(--text));font-weight:700}

/* ===== V1.2.2 侧边栏补充：分组计数 / 当前页更明确 / 键盘可达 ===== */
.navgroup{gap:8px}
.navgroup .t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.navgroup .cnt{
  font-family:var(--mono);font-size:12px;color:var(--text-mute);
  background:var(--surface-3);border-radius:9px;padding:0 6px;line-height:17px;flex:none;
}
.navgroup:hover{color:var(--text)}
.navgroup:hover .caret,.navgroup:hover .cnt{color:var(--text-2)}
.navgroup:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:var(--radius)}
/* 当前页：左侧强调条 + 文字加重 + 图标点亮（已有 .active，补强可辨识度） */
.navitem.active{font-weight:600}
.navitem.active .lbl{color:var(--text)}
.navitem:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
/* 常用/最近区的条目视觉上略收敛，避免与主分组混淆 */
.pinbar .navitem,.recentbar .navitem{padding:6px 10px;margin:1px 0}
.pinbar .ph,.recentbar .ph{font-weight:600;letter-spacing:.3px}

/* ============================================================
   全库搜索结果中心（V1.2.3）
   ============================================================ */
.lib-h{font-size:22px;margin:0 0 12px;display:flex;align-items:baseline;gap:12px;color:var(--text)}
.lib-sub{font-size:13px;color:var(--text-mute);font-weight:400}
.lib-card{background:var(--surface-1);border:1px solid var(--line);border-radius:var(--radius);padding:14px;margin-bottom:12px}
.libbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.libq{flex:1 1 40%;min-width:360px;height:42px;padding:0 12px;border-radius:var(--radius);
  background:var(--surface-3);border:1px solid var(--line);color:var(--text);font-size:15px}
.libq::placeholder{color:var(--text-mute)}
.libbar select{height:42px;min-width:118px;padding:0 10px;border-radius:var(--radius);
  background:var(--surface-3);border:1px solid var(--line);color:var(--text);font-size:14px}
.libbar select:disabled{opacity:.55;cursor:not-allowed;filter:grayscale(.2)}
.lib-go{height:42px;padding:0 20px;background:var(--accent);color:#04201c;border:none;border-radius:var(--radius);
  font-weight:700;font-size:15px;cursor:pointer}
.lib-go:hover{filter:brightness(1.08)}
.lib-go:disabled{opacity:.6;cursor:progress}
.lib-reset,.lib-advbtn{height:42px;padding:0 16px;background:transparent;border:1px solid var(--line);
  color:var(--text-2);border-radius:var(--radius);font-size:14px;cursor:pointer}
.lib-reset:hover,.lib-advbtn:hover{color:var(--text);border-color:var(--accent)}
.libadv{margin-top:12px;background:var(--surface-2);border:1px solid var(--line-soft);border-radius:var(--radius);padding:12px}
.libadv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px 14px}
.libadv-grid label{display:flex;flex-direction:column;gap:4px;font-size:12.5px;color:var(--text-mute)}
.libadv-grid input,.libadv-grid select{height:40px;padding:0 10px;border-radius:var(--radius);
  background:var(--surface-3);border:1px solid var(--line);color:var(--text);font-size:14px}
.libadv-actions{grid-column:1/-1;display:flex;gap:10px;margin-top:4px}
.libtags{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:12px}
.lib-tagcnt{font-size:13px;color:var(--accent);font-weight:600}
.lib-tag{display:inline-flex;align-items:center;gap:4px;font-size:13px;background:var(--surface-3);
  border:1px solid var(--line);color:var(--text);border-radius:var(--radius-pill);padding:3px 6px 3px 12px}
.lib-x{background:transparent;border:none;color:var(--text-mute);cursor:pointer;font-size:15px;line-height:1;padding:0 2px}
.lib-x:hover{color:var(--danger)}
.lib-summary{margin:10px 2px}
.lib-sum{font-size:14px;color:var(--text-2);line-height:1.7}
.lib-sum .lib-n{font-size:18px;color:var(--accent);margin-right:2px}
.lib-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:6px 0 12px;position:relative}
.lib-seg{display:inline-flex;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.lib-seg-btn{height:38px;padding:0 14px;background:var(--surface-2);border:none;color:var(--text-2);cursor:pointer;font-size:14px}
.lib-seg-btn.on{background:var(--accent);color:#04201c;font-weight:700}
.lib-sort,.lib-size{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--text-mute)}
.lib-sort select,.lib-size select{height:36px;background:var(--surface-3);border:1px solid var(--line);
  color:var(--text);border-radius:var(--radius);padding:0 8px;font-size:13px}
.lib-order{height:36px;padding:0 12px;background:transparent;border:1px solid var(--line);color:var(--text-2);border-radius:var(--radius);cursor:pointer;font-size:13px}
.lib-toolbar .ghost,.lib-toolbar .act{height:36px;padding:0 12px;border-radius:var(--radius);font-size:13px;cursor:pointer}
.lib-toolbar .ghost{background:transparent;border:1px solid var(--line);color:var(--text-2)}
.lib-toolbar .ghost:hover{color:var(--text);border-color:var(--accent)}
.lib-toolbar .act{background:var(--accent);color:#04201c;border:none;font-weight:700}
.lib-colpop{position:absolute;top:42px;left:auto;right:0;z-index:30;background:var(--surface-2);
  border:1px solid var(--line);border-radius:var(--radius);padding:10px;display:grid;grid-template-columns:repeat(3,auto);gap:6px 14px;box-shadow:0 12px 30px rgba(0,0,0,.4)}
.lib-colopt{font-size:13px;color:var(--text-2);display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.lib-table-wrap{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch}
.lib-table{width:100%;border-collapse:collapse;font-size:13.5px}
.lib-table th{text-align:left;padding:9px 10px;background:var(--surface-2);color:var(--text-2);
  border-bottom:1px solid var(--line);position:sticky;top:0;font-weight:600;white-space:nowrap}
.lib-table td{padding:9px 10px;border-bottom:1px solid var(--line-soft);color:var(--text);vertical-align:middle}
.lib-table tbody tr:hover{background:var(--surface-2)}
.lib-table td.fx,.lib-table th.fx{background:var(--surface-1)}
.libthumb{width:46px;height:34px;object-fit:cover;border-radius:6px;border:1px solid var(--line);background:var(--surface-3)}
.lib-gap{color:var(--accent-3);font-weight:700}
.lib-gap0{color:var(--text-mute)}
.lib-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px}
.lib-card{background:var(--surface-1);border:1px solid var(--line);border-radius:var(--radius);padding:12px;display:flex;flex-direction:column;gap:6px}
.lib-card-img{width:100%;height:130px;object-fit:cover;border-radius:8px;background:var(--surface-3);border:1px solid var(--line)}
.lib-card-top{display:flex;justify-content:space-between;align-items:center;font-size:14px}
.lib-card-cat{font-size:12px;color:var(--text-mute)}
.lib-card-name{font-size:13px;color:var(--text-2);min-height:18px}
.lib-card-row{font-size:13px;color:var(--text-2)}
.lib-card-acts{display:flex;gap:8px;margin-top:4px}
.lib-card-acts .ghost,.lib-card-acts .act{height:32px;padding:0 10px;border-radius:8px;font-size:13px;cursor:pointer}
.lib-card-acts .ghost{background:transparent;border:1px solid var(--line);color:var(--text-2)}
.lib-card-acts .act{background:var(--accent);color:#04201c;border:none;font-weight:700}
.lib-rowacts{display:flex;flex-wrap:wrap;gap:5px}
.lib-rowacts .ghost,.lib-rowacts .act{height:28px;padding:0 8px;border-radius:7px;font-size:12px;cursor:pointer;white-space:nowrap}
.lib-rowacts .ghost{background:transparent;border:1px solid var(--line);color:var(--text-2)}
.lib-rowacts .ghost:hover{color:var(--text);border-color:var(--accent)}
.lib-rowacts .act{background:var(--accent);color:#04201c;border:none;font-weight:700}
.lib-pager{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:14px}
.lib-pg{height:32px;min-width:34px;padding:0 10px;background:var(--surface-2);border:1px solid var(--line);
  color:var(--text-2);border-radius:8px;cursor:pointer;font-size:13px}
.lib-pg:hover:not(.dis){color:var(--text);border-color:var(--accent)}
.lib-pg.dis{opacity:.4;cursor:not-allowed}
.lib-pg-ell{color:var(--text-mute);padding:0 4px}
.lib-pg-info{margin-left:auto;font-size:12.5px;color:var(--text-mute)}
.lib-empty{text-align:center;padding:40px 16px;background:var(--surface-1);border:1px dashed var(--line);border-radius:var(--radius)}
.lib-empty-msg{font-size:15px;color:var(--text);margin-bottom:14px}
.lib-empty-acts{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.lib-empty-acts .act{height:38px;padding:0 16px;background:var(--accent);color:#04201c;border:none;border-radius:var(--radius);font-weight:700;cursor:pointer}
.lib-empty-acts .ghost{height:38px;padding:0 16px;background:transparent;border:1px solid var(--line);color:var(--text-2);border-radius:var(--radius);cursor:pointer}
.lib-batch{margin-top:12px}
.lib-batch-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;background:var(--surface-2);
  border:1px solid var(--accent);border-radius:var(--radius);padding:10px 14px;font-size:14px;color:var(--text)}
.lib-batch-bar .act,.lib-batch-bar .ghost{height:34px;padding:0 12px;border-radius:8px;font-size:13px;cursor:pointer}
.lib-batch-bar .act{background:var(--accent);color:#04201c;border:none;font-weight:700}
.lib-batch-bar .ghost{background:transparent;border:1px solid var(--line);color:var(--text-2)}
.lib-basket{position:fixed;right:18px;bottom:18px;z-index:60;width:280px;background:var(--surface-2);
  border:1px solid var(--accent);border-radius:var(--radius);padding:10px 12px;box-shadow:0 16px 40px rgba(0,0,0,.5)}
.lib-basket-h{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--text);margin-bottom:8px}
.lib-basket-h b{color:var(--accent)}
.lib-basket-h .ghost{margin-left:auto;height:28px;padding:0 8px;border-radius:7px;background:transparent;border:1px solid var(--line);color:var(--text-2);font-size:12px;cursor:pointer}
.lib-basket-list{display:flex;flex-wrap:wrap;gap:6px}
.lib-basket-item{display:inline-flex;align-items:center;gap:3px;font-size:12.5px;background:var(--surface-3);
  border:1px solid var(--line);border-radius:var(--radius-pill);padding:2px 4px 2px 10px;color:var(--text)}
.lib-basket-item .lib-x{font-size:14px}
.libtoast{position:fixed;left:50%;bottom:30px;transform:translateX(-50%) translateY(20px);opacity:0;
  background:var(--surface-hi);border:1px solid var(--accent);color:var(--text);padding:10px 18px;
  border-radius:var(--radius);font-size:14px;z-index:200;transition:.25s;pointer-events:none}
.libtoast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.badge.b-signed{color:var(--ok);border-color:rgba(52,211,153,.45)}
.badge.b-dim{color:var(--text-mute);border-color:var(--line-soft)}
.badge.b-stage{color:var(--accent-2);border-color:rgba(129,140,248,.45);cursor:help}
@media (max-width:1280px){
  .libq{flex:1 1 100%;min-width:0}
  .libbar select{flex:1 1 calc(50% - 10px)}
  .libbar .lib-go,.libbar .lib-reset,.libbar .lib-advbtn{flex:1 1 calc(33% - 10px)}
}

/* ============================================================
   V1.2.2 修复补丁：任务与撤销面板 / toast 撤销按钮 / 最近更新列
   仅新增样式，不覆盖任何既有规则。
   ============================================================ */
.libtoast .lib-undo{
  margin-left:10px;padding:2px 10px;height:24px;line-height:20px;
  border:1px solid rgba(45,212,191,.55);border-radius:6px;
  background:transparent;color:var(--accent);cursor:pointer;font-size:12px;
  pointer-events:auto;   /* V1.2.2 修复：toast 整体 pointer-events:none，撤销按钮必须可点 */
}
.libtoast .lib-undo:hover{background:rgba(45,212,191,.14)}
.lib-taskpanel{
  position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(920px,92vw);max-height:76vh;overflow:auto;z-index:60;
  background:var(--panel,#111823);border:1px solid var(--line,#243044);
  border-radius:12px;padding:14px 16px;box-shadow:0 18px 50px rgba(0,0,0,.55);
}
.lib-taskpanel-h{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  font-weight:600;font-size:14px;color:var(--fg,#e6edf6);
  padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid var(--line,#243044);
}
.lib-taskpanel .lib-table{width:100%}
.lib-taskpanel .lib-table th,.lib-taskpanel .lib-table td{white-space:nowrap}
.lib-tp-empty{padding:26px 0;text-align:center;color:var(--muted,#8b98ab);font-size:13px}
.lib-tp-undo{height:26px;padding:0 10px;font-size:12px}
.lib-table td .badge.b-dim{white-space:nowrap}

/* ============================================================
   V1.2.2 · 产品详情页闭环（dp-*）
   沿用既有令牌：surface / line / text / accent / ok / danger
   ============================================================ */
.badge.b-block{color:var(--danger);border-color:rgba(248,113,113,.5);background:rgba(248,113,113,.08)}
.badge.b-core{color:var(--accent);border-color:rgba(45,212,191,.45)}

.dp{display:flex;flex-direction:column;gap:var(--sp-3)}
.dp-flex{flex:1}
.dp-crumb{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dp-crumb-t{font-size:14px;color:var(--text-2)}
.dp-crumb-t b{color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.dp-ro{
  font-size:11.5px;color:var(--text-mute);border:1px dashed var(--line);
  border-radius:var(--radius-pill);padding:3px 10px;cursor:help;white-space:nowrap;
}

/* ---- 顶部摘要 ---- */
.dp-sum{
  background:var(--surface-1);border:1px solid var(--line);
  border-radius:var(--radius);padding:var(--sp-4) var(--sp-4) var(--sp-3);
}
.dp-sum-h{display:flex;align-items:flex-start;gap:var(--sp-3);flex-wrap:wrap;margin-bottom:var(--sp-3)}
.dp-sum-title{flex:1;min-width:260px;font-size:20px;font-weight:650;line-height:1.35;color:var(--text)}
.dp-sum-tags{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.dp-kv{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:8px 18px}
.dp-sum-kv{padding-top:var(--sp-2);border-top:1px solid var(--line-soft)}
.dp-kvi{display:flex;gap:8px;align-items:baseline;font-size:13.5px;line-height:1.6;min-width:0}
.dp-k{flex:0 0 auto;color:var(--text-mute);font-size:12.5px;white-space:nowrap}
.dp-v{flex:1;min-width:0;color:var(--text);word-break:break-word}
.dp-legend{
  margin-top:var(--sp-3);padding-top:var(--sp-2);border-top:1px solid var(--line-soft);
  font-size:12px;color:var(--text-mute);line-height:1.7;
}
.dp-tbd{color:var(--tbd);font-style:normal}
.dp-none{color:var(--text-mute)}
.dp-note{margin-left:6px;font-size:11px;color:var(--text-mute)}
.dp-bad{color:var(--danger)}
.dp-ok{color:var(--ok)}
.dp-up{color:#f87171;font-weight:600}    /* 涨=红（国内习惯） */
.dp-down{color:#34d399;font-weight:600}  /* 跌=绿 */
.dp-score{font-size:16px;color:var(--accent);font-variant-numeric:tabular-nums}
.dp-gap{color:var(--accent-3);font-weight:700}
.dp-sys{
  display:inline-block;font-size:10.5px;color:var(--accent-2);cursor:help;
  border:1px solid rgba(129,140,248,.4);border-radius:var(--radius-pill);
  padding:0 6px;line-height:16px;vertical-align:1px;white-space:nowrap;
}
.dp-sub{color:var(--text-mute);font-size:12px;line-height:1.7}
.dp-path{word-break:break-all;font-size:11.5px}

/* ---- 主体两栏 ---- */
.dp-body{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--sp-3);align-items:start}
@media (max-width:1180px){.dp-body{grid-template-columns:minmax(0,1fr)}}
.dp-main{min-width:0}
.dp-tabs{
  display:flex;gap:4px;flex-wrap:wrap;padding-bottom:var(--sp-2);
  border-bottom:1px solid var(--line);margin-bottom:var(--sp-3);
}
.dp-tab{
  background:transparent;border:1px solid transparent;color:var(--text-2);
  font-size:13px;padding:6px 12px;border-radius:var(--radius);cursor:pointer;white-space:nowrap;
}
.dp-tab:hover{background:var(--surface-2);color:var(--text)}
.dp-tab.on{background:var(--surface-3);border-color:var(--line);color:var(--accent);font-weight:600}
.dp-tabc{min-height:180px}

/* ---- 区块 ---- */
.dp-sec{
  background:var(--surface-1);border:1px solid var(--line);
  border-radius:var(--radius);padding:var(--sp-3) var(--sp-4);margin-bottom:var(--sp-3);
}
.dp-sec>h3{
  margin:0 0 var(--sp-3);font-size:var(--fs-sec);font-weight:650;color:var(--text);
  letter-spacing:.02em;display:flex;align-items:center;gap:8px;
}
.dp-cnt{
  font-size:11px;color:var(--text-mute);border:1px solid var(--line-soft);
  border-radius:var(--radius-pill);padding:0 7px;line-height:17px;font-variant-numeric:tabular-nums;
}
.dp-actline{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:var(--sp-3)}
.dp-mini{
  background:var(--surface-3);border:1px solid var(--line);color:var(--text-2);
  font-size:11.5px;padding:3px 9px;border-radius:var(--radius);cursor:pointer;white-space:nowrap;
}
.dp-mini:hover{border-color:var(--accent);color:var(--accent)}
.dp-warn{
  margin-top:var(--sp-2);font-size:12px;line-height:1.75;color:var(--text-2);
  background:rgba(251,191,36,.07);border:1px solid rgba(251,191,36,.28);
  border-radius:var(--radius);padding:8px 11px;
}
.dp-warn b{color:var(--accent-3)}

/* ---- 表格 ---- */
.dp-tb{width:100%;border-collapse:collapse;font-size:var(--fs-table)}
.dp-tb th{
  text-align:left;font-weight:600;color:var(--text-mute);font-size:11.5px;
  padding:7px 10px;border-bottom:1px solid var(--line);white-space:nowrap;
}
.dp-tb td{padding:7px 10px;border-bottom:1px solid var(--line-soft);vertical-align:top;color:var(--text)}
.dp-tb tr:hover td{background:var(--surface-2)}
.dp-tb code{font-size:11.5px;color:var(--text-2)}
.dp-trend{margin-top:var(--sp-2);font-size:12.5px;color:var(--text-2)}

/* ---- 机会分层 ---- */
.dp-opp{border:1px solid var(--line-soft);border-radius:var(--radius);margin-bottom:var(--sp-2);overflow:hidden}
.dp-opp-h{
  background:var(--surface-2);padding:7px 12px;font-size:12.5px;font-weight:600;
  color:var(--text);display:flex;align-items:center;gap:8px;
}
.dp-opp-b{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1px;background:var(--line-soft)}
.dp-lay{background:var(--surface-1);padding:9px 12px;min-width:0}
.dp-lay-h{font-size:11.5px;font-weight:600;margin-bottom:6px;display:flex;align-items:center;gap:6px}
.dp-lay-h.L-fact{color:var(--fact)}
.dp-lay-h.L-human{color:var(--human)}
.dp-lay-h.L-assume{color:var(--assume)}
.dp-lay-h.L-tbd{color:var(--tbd)}
.dp-lay-e{font-size:11.5px;color:var(--text-mute)}
.dp-lay-l{margin:0;padding-left:16px;font-size:12.5px;line-height:1.7;color:var(--text)}
.dp-lay-l li{margin-bottom:5px}
.dp-basis{display:block;font-size:11px;color:var(--text-mute);margin-top:2px}

/* ---- 图片 ---- */
.dp-imgs{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--sp-3)}
.dp-img{border:1px solid var(--line-soft);border-radius:var(--radius);overflow:hidden;background:var(--surface-2)}
.dp-img>img{width:100%;height:190px;object-fit:contain;background:var(--surface-3);display:block}
.dp-img-b{padding:9px 11px}
.dp-img-id{margin-bottom:5px}
.dp-img-r{font-size:11.5px;color:var(--text-2);line-height:1.85}
.dp-fp{font-size:11px;color:var(--accent-2)}
.dp-noimg{display:flex;gap:var(--sp-4);align-items:center;flex-wrap:wrap}
.dp-ph{width:160px;height:120px;border-radius:var(--radius);border:1px solid var(--line-soft)}
.dp-noimg-b{flex:1;min-width:240px;display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.dp-chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.dp-chip{
  background:var(--surface-3);border:1px solid var(--line);color:var(--text-2);
  font-size:12px;padding:4px 11px;border-radius:var(--radius-pill);cursor:pointer;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
}
.dp-chip:hover{border-color:var(--accent);color:var(--accent)}

/* ---- 来源 / 审核卡 ---- */
.dp-src{
  border:1px solid var(--line-soft);border-radius:var(--radius);
  padding:10px 12px;margin-bottom:var(--sp-2);background:var(--surface-2);
}
.dp-src-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.dp-link{color:var(--accent);text-decoration:none;word-break:break-all}
.dp-link:hover{text-decoration:underline}
.dp-notes{margin:8px 0 0;padding-left:16px;font-size:11.5px;color:var(--text-mute);line-height:1.75}

/* ---- 竞品 ---- */
.dp-rel{margin-bottom:var(--sp-3)}
.dp-rel-h{font-size:12.5px;font-weight:600;color:var(--text-2);margin-bottom:7px;display:flex;align-items:center;gap:8px}
.dp-rel-b{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px}
.dp-relc{border:1px solid var(--line-soft);border-radius:var(--radius);padding:8px 10px;background:var(--surface-2);min-width:0}
.dp-relck{display:flex;align-items:center;gap:7px;font-size:13px;cursor:pointer;color:var(--text)}
.dp-relck b{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.dp-relm{font-size:11.5px;color:var(--text-mute);margin-top:4px;word-break:break-word}
.dp-relc .dp-basis{margin-top:4px}
.dp-relc .dp-actline{margin-top:6px}

/* ---- 任务 / 草案卡 ---- */
.dp-task{
  border:1px solid var(--line-soft);border-left:3px solid var(--accent-3);
  border-radius:var(--radius);padding:10px 12px;margin-bottom:var(--sp-2);background:var(--surface-2);
}
.dp-task.done{border-left-color:var(--accent-2)}
.dp-task-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.dp-task-h code{font-size:11.5px;color:var(--text-2)}

/* ---- 表单 ---- */
.dp-form{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px 14px}
.dp-f{display:flex;flex-direction:column;gap:4px;min-width:0}
.dp-f-w{grid-column:span 1}
.dp-f>span{font-size:11.5px;color:var(--text-mute)}
.dp-f input,.dp-f textarea,.dp-f select{
  background:var(--surface-3);border:1px solid var(--line);color:var(--text);
  border-radius:var(--radius);padding:6px 9px;font-size:13px;font-family:inherit;width:100%;
}
.dp-f textarea{resize:vertical;line-height:1.6}
.dp-f input:focus,.dp-f textarea:focus,.dp-f select:focus{outline:none;border-color:var(--accent)}

/* ---- 右侧决策栏 ---- */
.dp-side{display:flex;flex-direction:column;gap:var(--sp-3);position:sticky;top:var(--sp-3)}
.dp-card{background:var(--surface-1);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.dp-card-h{
  background:var(--surface-2);padding:8px 13px;font-size:12.5px;font-weight:650;
  color:var(--text);border-bottom:1px solid var(--line-soft);
}
.dp-card-b{padding:11px 13px}
.dp-si{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;padding:5px 0;align-items:baseline}
.dp-si>span{color:var(--text-mute);flex:0 0 auto}
.dp-si>b{text-align:right;font-weight:500;color:var(--text);min-width:0;word-break:break-word}
.dp-next{margin-top:9px;padding-top:9px;border-top:1px solid var(--line-soft)}
.dp-next-t{font-size:11.5px;color:var(--text-mute);margin-bottom:5px}
.dp-next-b{font-size:12.5px;line-height:1.7;color:var(--accent)}
.dp-acts{display:flex;flex-direction:column;gap:7px}
.dp-acts button{width:100%;justify-content:center}
.dp-card .dp-warn{margin:0 13px 12px}

/* ---- 简报 ---- */
.dp-brief{
  background:var(--surface-3);border:1px solid var(--line-soft);border-radius:var(--radius);
  padding:12px 14px;font-size:12px;line-height:1.75;color:var(--text-2);
  white-space:pre-wrap;word-break:break-word;max-height:52vh;overflow:auto;margin:10px 0;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
}

/* ============================================================
   数据证据补全工程（规范六 / 七 / 八 / 九）
   配色仅复用既有令牌：绿=已确认，琥珀=需注意，红=不可回验/异常
   ============================================================ */
.evnote{background:var(--surface-3);border:1px solid var(--line-soft);
  border-left:3px solid var(--accent);border-radius:var(--radius);
  padding:12px 14px;font-size:13.5px;line-height:1.75;color:var(--text-2);margin:12px 0}
.evnote b{color:var(--text);font-weight:600}
.evnote.bad{border-left-color:var(--danger)}
.evnote.ok{border-left-color:var(--ok)}

.evbar{display:inline-block;width:120px;height:8px;background:var(--surface-3);
  border-radius:6px;overflow:hidden;vertical-align:middle}
.evbar i{display:block;height:100%;background:var(--tbd);border-radius:6px}
.evbar i.ok{background:var(--ok)} .evbar i.mid{background:var(--accent-3)}
.evbar i.bad{background:var(--danger)}
.evpct{font-size:12.5px;color:var(--text-2);margin-left:8px;
  font-variant-numeric:tabular-nums}

.evtargets{display:flex;flex-direction:column;gap:8px}
.evtrow{display:grid;grid-template-columns:170px 1fr 170px;gap:12px;align-items:center;
  font-size:13.5px}
.evtrow .evtl{color:var(--text-2)}
.evtrow .evbar{width:100%}
.evtrow .evtv{text-align:right;font-variant-numeric:tabular-nums;color:var(--text)}

.evbad{color:var(--danger)} .evdim{color:var(--text-mute)} .evok{color:var(--ok)}

.evfilter{display:flex;gap:12px;flex-wrap:wrap;align-items:center;
  background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);
  padding:10px 14px;margin-bottom:var(--sp-3);font-size:13.5px}
.evfilter label{display:flex;align-items:center;gap:6px;color:var(--text-2)}
.evfilter select,.evfilter input{background:var(--surface-3);border:1px solid var(--line);
  border-radius:6px;padding:5px 8px;color:var(--text)}

.evurl{font-family:var(--mono);font-size:11.5px;color:var(--text-mute);
  word-break:break-all}
.evrisk{color:var(--accent-3)}

.evgrid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-4);
  align-items:start;margin-bottom:var(--sp-4)}
@media (max-width:1400px){ .evgrid2{grid-template-columns:1fr} }

.evform{display:flex;flex-direction:column;gap:4px}
.evlab{font-size:12.5px;color:var(--text-2);margin-top:10px}
.evform input,.evform textarea,.evform select,.evcommit input{
  background:var(--surface-3);border:1px solid var(--line);border-radius:6px;
  padding:8px 10px;color:var(--text);font-size:13.5px;width:100%}
.evform textarea{font-family:var(--mono);font-size:12.5px;line-height:1.7;resize:vertical}
.evhint{font-size:12.5px;color:var(--text-mute);line-height:1.7;margin-top:6px}

.evrules{margin:0;padding-left:18px;font-size:13px;color:var(--text-2);line-height:1.9}
.evkinds{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.evkind{background:var(--surface-3);border:1px solid var(--line-soft);
  border-radius:var(--radius);padding:8px 12px;font-size:13px}
.evkind .muted{font-size:12.5px;margin-top:2px}

.evpv{display:flex;flex-direction:column;gap:6px;font-size:13.5px;line-height:1.8}
.evpl{display:inline-block;min-width:96px;color:var(--text-mute);font-size:12.5px}
.evsub{margin:4px 0 0;padding-left:18px;font-size:12.5px;color:var(--text-2)}
.evh4{font-size:14px;margin:16px 0 8px;color:var(--text)}
.evcommit{margin-top:16px;padding-top:14px;border-top:1px solid var(--line-soft)}

.evpacks{display:flex;flex-direction:column;gap:12px}
.evpack{background:var(--surface-2);border:1px solid var(--line);
  border-radius:var(--radius);padding:12px 14px}
.evpk-h{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding-bottom:8px;border-bottom:1px solid var(--line-soft)}
.evpk-seq{font-family:var(--mono);color:var(--text-mute);font-size:12.5px}
.evpk-pid{font-weight:600;color:var(--accent)}
.evpk-title{color:var(--text-2);font-size:13px;flex:1;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.evpk-b{display:grid;grid-template-columns:1fr 1fr;gap:4px 20px;
  padding:10px 0;font-size:13px;line-height:1.75}
@media (max-width:1200px){ .evpk-b{grid-template-columns:1fr} }
.evpk-a{display:flex;gap:6px;flex-wrap:wrap;padding-top:8px;
  border-top:1px solid var(--line-soft)}
.evpk-a .act.mini{font-size:12px;padding:3px 8px}
.evpk-a .act.mini.on{border-color:var(--accent);color:var(--accent)}

.evlegend{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}

/* 附件区（人工导入上传） */
.evatts{display:flex;flex-direction:column;gap:6px;margin:6px 0}
.evatt{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  background:var(--surface-3);border:1px solid var(--line-soft);
  border-radius:8px;padding:6px 8px;font-size:12.5px}
.evatt select{font-size:12px;padding:2px 4px}

/* 图片补全审核 */
.evimglist{display:flex;flex-direction:column;gap:10px;margin-top:12px}
.evimgcard{border:1px solid var(--line-soft);border-radius:10px;overflow:hidden;background:var(--surface-2)}
.evimghead{display:flex;justify-content:space-between;align-items:center;
  gap:12px;padding:10px 12px;cursor:pointer;background:var(--surface-3)}
.evimghead:hover{background:var(--surface-2)}
.evimgmeta b{font-size:14px}
.evimgmeta .muted{font-size:12px;margin-top:2px}
.evimgstat{display:flex;align-items:center;gap:10px;font-size:12px}
.evchev{transition:transform .15s;color:var(--text-mute)}
.evimgbody{padding:10px 12px;border-top:1px solid var(--line-soft)}
.evimgrow{display:flex;gap:12px;align-items:flex-start;padding:8px 0;
  border-bottom:1px dashed var(--line-soft)}
.evimgrow:last-child{border-bottom:0}
.evimgthumb{flex:0 0 120px;word-break:break-all;font-size:11px;color:var(--text-mute)}
.evimginfo{flex:1;font-size:13px;line-height:1.7}
.evimgacts{flex:0 0 auto;display:flex;flex-direction:column;gap:4px;align-items:flex-end}
.evimgacts .badge{margin-bottom:2px}


/* ========== 资料补全中心（规范八） ========== */
.ccpanel{padding:var(--sp-4);margin:var(--sp-4) 0}
.ccpanel h3{margin:0 0 var(--sp-3);font-size:15px}
.cctbl{width:100%;border-collapse:collapse;font-size:13px}
.cctbl th{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);
  color:var(--text-mute);font-weight:600;white-space:nowrap;position:sticky;top:0;
  background:var(--surface-2);z-index:1}
.cctbl td{padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:top;line-height:1.6}
.cctbl tbody tr:hover{background:rgba(255,255,255,.03)}
.cctbl a{color:var(--accent);text-decoration:none}
.cctbl a:hover{text-decoration:underline}
.ccbar{display:flex;height:8px;border-radius:4px;overflow:hidden;background:var(--line);margin-bottom:3px}
.ccbar i{display:block;height:100%}
.ccbar .s1{background:var(--ok)}
.ccbar .s2{background:var(--assume)}
.ccbar .s3{background:var(--danger)}
.ccrow2{display:flex;align-items:center;gap:var(--sp-3);margin:var(--sp-2) 0}
.ccrow2 .lbl{flex:0 0 90px;font-size:13px;color:var(--text-mute)}
.ccrow2 .ccbar{flex:1;margin:0}
.ccrow2 .num{flex:0 0 auto;font-size:12px;color:var(--text-mute)}
.cclegend{margin-top:var(--sp-2);font-size:12px;color:var(--text-mute);display:flex;
  align-items:center;gap:6px;flex-wrap:wrap}
.cclegend i{display:inline-block;width:12px;height:8px;border-radius:2px;margin-left:8px}
.cclegend .s1{background:var(--ok)}
.cclegend .s2{background:var(--assume)}
.cclegend .s3{background:var(--danger)}
.ccpri{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-3)}
.ccpri-i{border:1px solid var(--line);border-radius:8px;padding:var(--sp-3);cursor:pointer;
  transition:border-color .15s,background .15s}
.ccpri-i:hover{border-color:var(--accent)}
.ccpri-i.on{border-color:var(--accent);background:rgba(45,212,191,.08)}
.ccpri-i .n{font-size:24px;font-weight:700;margin:6px 0 2px}
.ccpri-i .n small{font-size:14px;font-weight:400;color:var(--text-mute)}
.ccpri-i .d{font-size:11px;color:var(--text-mute)}
.ccpri-i .w{font-size:12px;color:var(--text-mute);margin-top:6px;line-height:1.5}
.ccpage{display:flex;align-items:center;gap:var(--sp-3);margin:var(--sp-4) 0;font-size:13px}
.kvs{display:grid;grid-template-columns:repeat(2,1fr);gap:6px var(--sp-4);font-size:13px}
.kvs>div{display:flex;gap:8px;padding:4px 0;border-bottom:1px dashed var(--line)}
.kvs>div>span{flex:0 0 60px;color:var(--text-mute)}
.ccwarn{margin-top:var(--sp-3);padding:8px 10px;border-radius:6px;font-size:12px;
  line-height:1.6;background:rgba(245,158,11,.10);border:1px solid rgba(245,158,11,.28);
  color:var(--text)}
.ccwarn.danger{background:rgba(239,68,68,.10);border-color:rgba(239,68,68,.32)}
.ccacts{display:flex;gap:6px;flex-wrap:wrap;margin-top:var(--sp-3)}
.ccurl{max-width:280px;word-break:break-all}
.ccimgs{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:var(--sp-3)}
.ccimg{margin:0;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--surface-1)}
.ccimg img{width:100%;height:130px;object-fit:contain;background:#0b0f14;display:block}
.ccimg figcaption{padding:8px;font-size:11px;line-height:1.6}
.ccimg .sha{font-family:ui-monospace,Menlo,Consolas,monospace}
.ccimg.st-confirmed{border-color:var(--ok)}
.ccimg.st-rejected,.ccimg.st-not_same_item{border-color:var(--danger);opacity:.6}
.ccimg.st-quarantined{border-color:var(--tbd);opacity:.75}


/* ==========================================================
   商品资料采集助手（插件接收端 + 人工审核中心）
   ========================================================== */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:var(--sp-2)}
.cards .card{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-2) var(--sp-3)}
.cards .card .c-t{font-size:12.5px;color:var(--text-mute);margin-bottom:4px}
.cards .card .c-v{font-size:15px;color:var(--text);font-weight:600;line-height:1.6}
.tiny{font-size:12px;color:var(--text-mute);line-height:1.5}
.btnbar{display:flex;flex-wrap:wrap;gap:var(--sp-1);align-items:center}
tr.row-warn>td{background:rgba(251,191,36,.07)}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}
@media (max-width:900px){.two-col{grid-template-columns:1fr}}
pre.rawtext{white-space:pre-wrap;word-break:break-all;max-height:420px;overflow:auto;
  background:var(--surface-1);border:1px solid var(--line-soft);border-radius:var(--radius);
  padding:var(--sp-2);font-size:12px;color:var(--text-2);margin-top:var(--sp-1)}
.imggrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:var(--sp-2)}
.imgcell{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);
  padding:var(--sp-1);display:flex;flex-direction:column;gap:4px}
.imgcell.warn{border-color:rgba(251,191,36,.5)}
.imgcell img{width:100%;height:132px;object-fit:contain;background:var(--surface-1);
  border-radius:6px;border:1px solid var(--line-soft)}
.imgcell select.mini{width:100%}
.imgcell label{display:inline-flex;align-items:center;gap:3px;margin-right:6px}
