:root {
    /* 2026-09-05: 并入 vibe 系统 — 语义色全部 alias vibe.css 主题 (html[data-theme] 切换) */
    --bg:var(--c-bg); --fg:var(--c-text); --muted:var(--c-muted); --border:var(--c-border);
    --accent:var(--c-accent); --accent2:var(--c-accent-2); --ok:var(--c-ok); --err:var(--c-err);
    --warn:var(--c-warn); --panel:var(--c-surface); --panel2:var(--c-surface-2);
    --blue:var(--c-blue); --teal:var(--c-teal); --amber:var(--c-warn);
    /* UI/UX review tokens (2026-09-04) */
    --fg-strong:var(--c-text-strong); --link:var(--c-accent-2); --input-bg:var(--c-surface-3);
    --soft-border:var(--c-glass-line); --ok-bg:var(--c-ok-soft); --ok-line:color-mix(in srgb, var(--c-ok) 45%, transparent); --ok-fg:var(--c-ok);
    --err-bg:var(--c-err-soft); --err-line:color-mix(in srgb, var(--c-err) 40%, transparent); --err-fg:var(--c-err);
    --warn-soft:var(--c-warn-soft); --warn-line:color-mix(in srgb, var(--c-warn) 40%, transparent);
    --drawer-bg:var(--c-surface-2); --drawer-hd:var(--c-surface-3); --drawer-border:var(--c-border-strong);
    --skel1:var(--c-surface-2); --skel2:var(--c-surface-3); --bar:color-mix(in srgb, var(--c-bg) 86%, transparent); --overlay:rgba(4,6,12,.7);
  }
  * { box-sizing:border-box; margin:0; padding:0; }
  /* 2026-09-06 (布局审阅 a-1): body 字体用 vibe --font-ui (自托管 Inter) —
     原硬编码栈漏 Inter, app 正文与全站字体族不一致且 woff2 白下载 */
  body { background:var(--bg); color:var(--fg);
    font-family:var(--font-ui, -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",Roboto,Helvetica,Arial,sans-serif);
    font-size:var(--fs-15); line-height:var(--leading-ui); }
  :focus-visible { outline:2px solid var(--accent2); outline-offset:2px; }
  input:focus, textarea:focus, select:focus { border-color:var(--accent); }
  h1 { font-size:var(--fs-22); color:var(--fg-strong); }
  .sub { color:var(--muted); margin:var(--space-4) 0 var(--space-20); }

  /* ── 工作台两栏布局 (2026-09-05 重构: 左订阅导航 + 右内容) ── */
  .app-wrap { max-width:1240px; margin:0 auto; padding:var(--space-24) var(--space-20) var(--space-64);
    display:grid; grid-template-columns:300px minmax(0, 1fr); gap:var(--space-20); align-items:start; }
  .app-side { min-width:0; position:sticky; top:82px; }
  .app-side .side-card { border:var(--line) solid var(--c-border); border-radius:var(--r-lg);
    background:linear-gradient(180deg, var(--c-surface), var(--c-surface-2));
    padding:var(--space-16) var(--space-14); position:relative; overflow:hidden; }
  .app-side .side-card::before { content:""; position:absolute; inset:0 0 auto; height:1px;
    background:linear-gradient(90deg, transparent, var(--c-glass-line) 30%, var(--c-glass-line) 70%, transparent); }
  .side-eyebrow { font-family:var(--font-mono); font-size:var(--fs-xs); letter-spacing:.14em;
    text-transform:uppercase; color:var(--c-accent); margin-bottom:var(--space-12); }
  .side-stats { display:grid; grid-template-columns:1fr 1fr; gap:var(--space-8); margin-bottom:var(--space-14); }
  .side-stat { background:var(--c-surface-3); border-radius:var(--r-md); padding:var(--space-8) var(--space-10); }
  .side-stat .lbl { font-size:var(--fs-11); color:var(--c-muted); text-transform:uppercase; letter-spacing:.04em; }
  .side-stat .val { font-size:var(--fs-15); font-weight:700; color:var(--fg-strong); font-family:var(--font-mono); margin-top:var(--space-2); }
  /* 订阅导航列表 */
  .side-subnav { display:grid; gap:var(--space-6); max-height:46vh; overflow-y:auto; }
  .subnav-item { display:block; width:100%; text-align:left; cursor:pointer; border:var(--line) solid var(--c-border);
    border-radius:var(--r-md); background:var(--c-surface-2); padding:var(--space-10) var(--space-12);
    transition:border-color .12s, background .12s; font:inherit; color:var(--fg); }
  .subnav-item:hover { border-color:var(--accent); }
  .subnav-item.on { border-color:var(--accent); background:color-mix(in srgb, var(--c-accent) 8%, var(--c-surface-2)); }
  .subnav-item .n-name { font-weight:600; font-size:var(--fs-13); color:var(--fg-strong); word-break:break-word;
    display:flex; justify-content:space-between; gap:var(--space-8); align-items:flex-start; }
  .subnav-item .n-name .p { flex:1 1 auto; min-width:0; display:-webkit-box; -webkit-line-clamp:2;
    -webkit-box-orient:vertical; overflow:hidden; }
  .subnav-item .n-meta { font-size:var(--fs-11); color:var(--muted); margin-top:var(--space-4); display:flex; gap:var(--space-10); flex-wrap:wrap; }
  .subnav-item .n-new { background:var(--warn-soft); color:var(--warn); border-radius:999px;
    font-size:var(--fs-11); font-weight:700; padding:1px var(--space-8); white-space:nowrap; font-family:var(--font-mono); }
  .side-actions { display:grid; gap:var(--space-8); margin-top:var(--space-14); }
  /* 健康仪表导航项 (2026-09-08 F1: 侧栏「健康」入口, 复用订阅导航观感) */
  .side-healthbtn { display:block; width:100%; text-align:left; cursor:pointer;
    border:var(--line) solid var(--c-border); border-radius:var(--r-md);
    background:var(--c-surface-2); padding:var(--space-10) var(--space-12); margin-top:var(--space-10);
    transition:border-color .12s, background .12s; font:inherit; color:var(--fg); }
  .side-healthbtn:hover { border-color:var(--accent); }
  .side-healthbtn.on { border-color:var(--accent); background:color-mix(in srgb, var(--c-accent) 8%, var(--c-surface-2)); }
  .side-healthbtn .n-name { display:flex; justify-content:space-between; align-items:center;
    gap:var(--space-8); font-weight:600; font-size:var(--fs-13); color:var(--fg-strong); }
  .side-healthbtn .n-meta { font-size:var(--fs-11); color:var(--muted); margin-top:var(--space-2);
    display:flex; gap:var(--space-8); align-items:center; flex-wrap:wrap; }
  .side-healthbtn .n-new { background:var(--warn-soft); color:var(--warn); border-radius:999px;
    font-size:var(--fs-11); font-weight:700; padding:1px var(--space-8); white-space:nowrap; font-family:var(--font-mono); }
  /* 邮件提醒开关 (2026-09-12 owner: "别用卡片, 要开关, 要能看出状态") ——
     紧凑开关行: 左标签 + 右 pill; 状态 = 轨道配色(off 灰/on 强调色) + knob 位移 + 短标签。
     刻意不复用 .side-healthbtn (那是"可点卡片", 没有开关语义也没有状态反馈)。 */
  .side-switchrow { display:flex; align-items:center; justify-content:space-between;
    gap:var(--space-10); margin-top:var(--space-14); padding:2px var(--space-2); }
  .side-switchrow .sw-lbl { font-size:var(--fs-12); font-weight:600; color:var(--fg-strong); }
  .sw { display:inline-flex; align-items:center; gap:var(--space-6); background:none; border:0;
    padding:0; cursor:pointer; font:inherit; }
  .sw-track { position:relative; display:block; width:34px; height:18px; border-radius:999px;
    background:var(--c-surface-3); border:var(--line) solid var(--c-border);
    transition:background .15s, border-color .15s; }
  .sw-knob { position:absolute; top:2px; left:2px; width:12px; height:12px; border-radius:999px;
    background:var(--muted); transition:transform .15s, background .15s; }
  .sw.on .sw-track { background:color-mix(in srgb, var(--c-accent) 22%, var(--c-surface-3));
    border-color:var(--accent); }
  .sw.on .sw-knob { transform:translateX(15px); background:var(--accent); }
  .sw:hover .sw-track { border-color:var(--accent); }
  .sw-state { font-size:var(--fs-11); font-weight:600; color:var(--muted); min-width:2.4em;
    text-align:left; font-family:var(--font-mono); }
  .sw.on .sw-state { color:var(--accent); }
  .sw[disabled] { opacity:.55; cursor:default; }
  /* 健康仪表独立页 (2026-09-08 F2) */
  .health-card { border:var(--line) solid var(--c-border); border-radius:var(--r-lg);
    background:linear-gradient(180deg, var(--c-surface), var(--c-surface-2));
    padding:var(--space-14) var(--space-18); margin-bottom:var(--space-12); position:relative; overflow:hidden;
    display:grid; grid-template-columns:minmax(0, 1.3fr) auto auto auto auto auto auto;
    gap:var(--space-10) var(--space-20); align-items:center; }
  .health-card::before { content:""; position:absolute; inset:0 0 auto; height:1px;
    background:linear-gradient(90deg, transparent, var(--c-glass-line) 30%, var(--c-glass-line) 70%, transparent); }
  .health-card .hc-prod { min-width:0; }
  .health-card .hc-prod .p { font-weight:700; color:var(--fg-strong); font-size:var(--fs-14);
    word-break:break-word; display:flex; align-items:center; gap:var(--space-8); flex-wrap:wrap; }
  .health-card .hc-prod .m { font-size:var(--fs-11); color:var(--muted); margin-top:var(--space-2); }
  .hc-cell { text-align:center; min-width:0; }
  .hc-cell .lbl { font-size:var(--fs-10); color:var(--muted); text-transform:uppercase;
    letter-spacing:.06em; white-space:nowrap; }
  .hc-cell .num { font-family:var(--font-mono); font-size:var(--fs-16); font-weight:700;
    font-variant-numeric:tabular-nums; margin-top:var(--space-2); }
  .hc-cell .num.sub { color:var(--warn); }
  .hc-cell .num.warn { color:var(--err-fg); }
  .hc-cell .num.ok { color:var(--ok-fg); }
  .hb { display:inline-block; font-family:var(--font-mono); font-size:var(--fs-11); font-weight:700;
    padding:var(--space-2) var(--space-10); border-radius:999px; border:var(--line) solid var(--c-border);
    background:var(--c-surface-3); color:var(--c-muted); white-space:nowrap; }
  .hb.ok { color:var(--c-ok); border-color:color-mix(in srgb, var(--c-ok) 45%, transparent); }
  .hb.warn { color:var(--c-warn); border-color:color-mix(in srgb, var(--c-warn) 45%, transparent); }
  .hb.err { color:var(--c-err); border-color:color-mix(in srgb, var(--c-err) 45%, transparent); }
  .health-sum { display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:var(--space-10); margin:var(--space-14) 0 var(--space-4); }
  .health-sum .mini-stat { background:var(--c-surface-3); border-radius:var(--r-md);
    padding:var(--space-8) var(--space-12); }
  .health-sum .mini-stat .lbl { font-size:var(--fs-10); color:var(--muted); text-transform:uppercase;
    letter-spacing:.05em; margin-bottom:var(--space-2); white-space:nowrap; }
  .health-sum .mini-stat .num { font-size:var(--fs-18); font-weight:700; font-family:var(--font-mono);
    font-variant-numeric:tabular-nums; line-height:var(--leading-tight); }
  .health-sum .mini-stat .num.warn { color:var(--warn); }
  @media (max-width: 900px) {
    .health-card { grid-template-columns:minmax(0, 1fr) repeat(3, auto); }
    .health-card .hc-cell { text-align:left; }
  }
  @media (max-width: 640px) {
    .health-card { grid-template-columns:1fr 1fr; gap:var(--space-10); }
    .health-card .hc-prod { grid-column:1 / -1; }
    .health-sum { grid-template-columns:repeat(2, 1fr); }
  }
  .app-main { min-width:0; }


  /* 工作台引擎状态行 (引擎全局在左栏) */
  .eng-status-line { display:flex; align-items:center; gap:var(--space-10); margin-bottom:var(--space-4);
    font-size:var(--fs-12); }
  .eng-status-line #engEngineBadge { font-family:var(--font-mono); }
  .eng-status-line a { font-size:var(--fs-12); }

  /* 骨架屏 */
  .skel-wrap { display:none; gap:var(--space-12); }
  .skel-wrap.on { display:grid; }
  .skel-card { border:var(--line) solid var(--c-border); border-radius:var(--r-lg); padding:var(--space-18);
    background:linear-gradient(90deg, var(--skel1) 25%, var(--skel2) 50%, var(--skel1) 75%);
    background-size:200% 100%; animation:sh 1.2s infinite; min-height:90px; }
  @keyframes sh { to { background-position:-200% 0; } }

  /* 内容区通用 */
  .card { border:var(--line) solid var(--c-border); border-radius:var(--r-lg); padding:var(--space-20) var(--space-24);
    background:linear-gradient(180deg, var(--panel), var(--panel2)); max-width:900px; margin-bottom:var(--space-18);
    position:relative; overflow:hidden; }
  .card::before { content:""; position:absolute; inset:0 0 auto; height:1px;
    background:linear-gradient(90deg, transparent, var(--c-glass-line) 30%, var(--c-glass-line) 70%, transparent); }
  .card h2 { font-size:var(--fs-18); margin-bottom:var(--space-6); color:var(--fg-strong); letter-spacing:-.01em; }
  .card p { color:var(--muted); font-size:var(--fs-14); margin-bottom:var(--space-12); }
  label { display:block; font-size:var(--fs-13); color:var(--muted); margin:var(--space-12) 0 var(--space-6); }
  input[type=text], textarea, input[type=password], select {
    width:100%; max-width:640px; padding:var(--space-10) var(--space-12); border-radius:var(--r-card);
    border:1px solid var(--c-border-control);   /* 2026-09-12 P0: 控件边界 ≥3:1 (原 --border 仅 1.55) */
    background:var(--input-bg); color:var(--fg); font-family:inherit; font-size:var(--fs-16); }
  select { cursor:pointer; padding-right:var(--space-32);
    background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path d='M1 1l4 4 4-4' stroke='%23888' stroke-width='1.5' fill='none' stroke-linecap='round'/></svg>");
    background-repeat:no-repeat; background-position:right 12px center; appearance:none; -webkit-appearance:none; }
  textarea { min-height:84px; resize:vertical; }
  .row { display:flex; gap:var(--space-10); align-items:center; flex-wrap:wrap; margin-top:var(--space-12); }
  .msg { display:none; margin-top:var(--space-10); padding:var(--space-8) var(--space-12); border-radius:var(--r-card); font-size:var(--fs-13); }
  .msg.ok { display:block; background:var(--ok-bg); border:1px solid var(--ok-line); color:var(--ok-fg); }
  .msg.err { display:block; background:var(--err-bg); border:1px solid var(--err-line); color:var(--err-fg); }
  .hint { color:var(--muted); font-size:var(--fs-12); margin-top:var(--space-4); }
  .chk { display:inline-flex; align-items:center; gap:var(--space-6); color:var(--muted); font-size:var(--fs-13); cursor:pointer; margin:0; }
  .chk input { accent-color:var(--accent); }
  .view { display:none; }
  .view.on { display:block; }
  /* 评分引擎 (2026-09-05) — 2026-09-06 面板配方统一: 同向渐变 + 顶部 gloss */
  .eng-card { border:var(--line) solid var(--c-border); border-radius:var(--r-lg);
    background:linear-gradient(180deg, var(--panel), var(--panel2));
    padding:var(--space-16) var(--space-18); margin-bottom:var(--space-14); position:relative; overflow:hidden; }
  .eng-card::before { content:""; position:absolute; inset:0 0 auto; height:1px;
    background:linear-gradient(90deg, transparent, var(--c-glass-line) 30%, var(--c-glass-line) 70%, transparent); }
  .eng-head { display:flex; justify-content:space-between; align-items:center; gap:var(--space-10); margin-bottom:var(--space-10); }
  .eng-title { font-size:var(--fs-xs); letter-spacing:.14em; text-transform:uppercase; color:var(--c-accent); }
  .eng-status { font-size:var(--fs-12); color:var(--c-muted); }
  .eng-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:var(--space-10); }
  .eng-grid label { margin:0; }
  .eng-grid select, .eng-grid input { width:100%; }
  .eng-hint { color:var(--c-muted); font-size:var(--fs-11); margin-top:var(--space-10); line-height:var(--leading-ui); }
  .eng-meta { color:var(--c-muted); font-size:var(--fs-12); line-height:var(--leading-ui); }
  .eng-meta b { color:var(--fg); font-family:var(--font-mono); font-weight:600; }
  .eng-actions { display:flex; gap:var(--space-8); flex-wrap:wrap; margin-top:var(--space-10); }
  /* 供需编辑区 (2026-09-06) */
  .eng-sd { margin-top:var(--space-14); padding-top:var(--space-12); border-top:var(--line) solid var(--c-border); }
  .eng-sd-title { font-size:var(--fs-xs); letter-spacing:.14em; text-transform:uppercase;
    color:var(--c-accent); margin-bottom:var(--space-4); }
  .eng-sd textarea { width:100%; max-width:none; font-size:var(--fs-12); line-height:var(--leading-body); }
  /* 供需 tab 完整产品描述只读区 (2026-09-06 C) */
  .sd-prod { margin-top:var(--space-12); border:var(--line) solid var(--c-border); border-radius:var(--r-md);
    background:var(--c-surface-2); padding:var(--space-8) var(--space-12); }
  .sd-prod-lbl { font-size:var(--fs-10); letter-spacing:.1em; text-transform:uppercase;
    color:var(--c-muted); margin-bottom:var(--space-4); }
  .sd-prod-txt { font-size:var(--fs-12); line-height:var(--leading-ui); color:var(--fg); word-break:break-word;
    max-height:110px; overflow:auto; white-space:pre-wrap; }
  /* 工作台 Tab 分区 (2026-09-05: 待评分/已交付分离) */
  .wb-tabs { display:inline-flex; gap:var(--space-6); padding:var(--space-4); margin-bottom:var(--space-14);
    border:var(--line) solid var(--c-border); border-radius:999px; background:var(--c-surface-2); }
  .wb-tab { display:inline-flex; align-items:center; gap:var(--space-6); padding:var(--space-6) var(--space-16); border:0;
    border-radius:999px; background:transparent; color:var(--muted); cursor:pointer;
    font-size:var(--fs-13); font-weight:600; font-family:inherit; }
  .wb-tab:hover { color:var(--fg); }
  .wb-tab.on { background:var(--accent); color:var(--c-on-accent); }
  .wb-tabn { font-family:var(--font-mono); font-size:var(--fs-11); font-weight:700;
    background:color-mix(in srgb, currentColor 14%, transparent); border-radius:999px; padding:1px var(--space-8); }
  .wb-pane { display:none; }
  .wb-pane.on { display:block; }
  /* tab 内容头部 (2026-09-08) */
  .pane-hd { display:flex; justify-content:space-between; align-items:center; gap:var(--space-8);
    margin-bottom:var(--space-10); padding:var(--space-12) var(--space-16); border:var(--line) solid var(--c-border);
    border-radius:var(--r-md); background:var(--c-surface-2);
    font-size:var(--fs-13); color:var(--fg-strong); }
  /* 词表 / Sub 管理卡 (2026-09-06) */
  .kwmgr-card { border:var(--line) solid var(--c-border); border-radius:var(--r-lg);
    background:linear-gradient(180deg, var(--panel), var(--panel2)); padding:var(--space-16) var(--space-18);
    margin-bottom:var(--space-14); position:relative; }
  .kwmgr-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:var(--space-12); }
  .kwmgr-title { font-size:var(--fs-xs); letter-spacing:.14em; text-transform:uppercase; color:var(--c-accent); }
  .kwmgr-sec-hd { display:flex; justify-content:space-between; align-items:center; gap:var(--space-8);
    margin-bottom:var(--space-8); font-size:var(--fs-13); color:var(--fg-strong); }
  .kwmgr-table-wrap { overflow-x:auto; }
  .kwmgr-table { width:100%; border-collapse:collapse; font-size:var(--fs-12); }
  .kwmgr-table th { text-align:left; color:var(--c-muted); font-size:var(--fs-11); font-weight:600;
    text-transform:uppercase; letter-spacing:.04em; padding:var(--space-4) var(--space-8); border-bottom:var(--line) solid var(--c-border);
    white-space:nowrap; }
  .kwmgr-table td { padding:var(--space-4) var(--space-8); border-bottom:var(--line) solid var(--c-border);
    color:var(--fg); vertical-align:top; }
  .kwmgr-table tr:last-child td { border-bottom:0; }
  .kwmgr-table td.kw-txt { word-break:break-word; max-width:340px; }
  .kwmgr-table .num { font-family:var(--font-mono); color:var(--c-muted); white-space:nowrap; }
  /* F1.5: 降权分/无效数红色 — 负反馈信号可见 (avg<0 / inv>0) */
  .kwmgr-table .avg-neg { color:var(--c-err); font-weight:700; }
  .src-manual { color:var(--c-ok); font-weight:700; }
  .src-auto { color:var(--c-muted); }
  .st-kw { display:inline-block; font-size:var(--fs-10); padding:0 var(--space-6); border-radius:999px;
    border:var(--line) solid var(--c-border); color:var(--c-muted); }
  .st-kw.active { color:var(--c-ok); border-color:color-mix(in srgb, var(--c-ok) 45%, transparent); }
  .st-kw.removed, .st-kw.retire { color:var(--c-err); opacity:.75; }
  .st-kw.monitor { color:var(--c-warn); }
  .kwmgr-add { margin:var(--space-10) 0 var(--space-12); }
  .kwmgr-add input, .kwmgr-add select { font-size:var(--fs-14); padding:var(--space-8) var(--space-12); }
  .kwmgr-add .btn.sm { padding:var(--space-8) var(--space-14); font-size:var(--fs-13); }
  .kwmgr-empty { padding:var(--space-16) var(--space-4); color:var(--c-muted); font-size:var(--fs-12); }
  /* auth 视图 */
  #view-auth .card { max-width:560px; }
  /* 已交付区标题 */
  .wb-head { border:var(--line) solid var(--c-border); border-radius:var(--r-lg);
    background:linear-gradient(180deg, var(--panel), var(--panel2)); padding:var(--space-14) var(--space-18); margin-bottom:var(--space-14);
    position:relative; overflow:hidden; }
  .wb-head::before { content:""; position:absolute; inset:0 0 auto; height:1px;
    background:linear-gradient(90deg, transparent, var(--c-glass-line) 30%, var(--c-glass-line) 70%, transparent); }
  /* 顶栏单行布局 (2026-09-08: 产品 | 统计 | 引擎+运行控制) */
  .wbtop { display:flex; align-items:center; gap:var(--space-18); flex-wrap:wrap; }
  .wbtop-l { flex:1 1 220px; min-width:0; }
  .wb-head .product { font-size:var(--fs-16); font-weight:800; color:var(--fg-strong); word-break:break-word;
    letter-spacing:-.01em; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
  .wbtop-stats { display:flex; gap:var(--space-8); flex:1 1 auto; min-width:280px; }
  .wbtop-stats .mini-stat { flex:1; background:var(--c-surface-3); border-radius:var(--r-md);
    padding:var(--space-6) var(--space-10); min-width:0; }
  .wbtop-stats .mini-stat .lbl { color:var(--muted); font-size:var(--fs-10); text-transform:uppercase;
    letter-spacing:.05em; margin-bottom:1px; white-space:nowrap; }
  .wbtop-stats .mini-stat .num { font-size:var(--fs-16); font-weight:700; font-family:var(--font-mono);
    font-variant-numeric:tabular-nums; line-height:var(--leading-tight); }
  .wbtop-stats .mini-stat .num.rel { color:var(--ok-fg); }
  .wbtop-stats .mini-stat .num.irr { color:var(--err-fg); }
  .wbtop-stats .mini-stat .num.todo { color:var(--warn); }
  .wbtop-r { display:flex; align-items:center; gap:var(--space-10); flex:0 0 auto; }
  .eng-badge { font-family:var(--font-mono); font-size:var(--fs-11); color:var(--c-ok);
    max-width:190px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .eng-ctrl { display:inline-flex; gap:var(--space-8); align-items:center; }
  .wbtop-ops { display:flex; gap:var(--space-8); margin-top:var(--space-10); padding-top:var(--space-10);
    border-top:var(--line) solid var(--c-border); }
  .mini-stats { display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:var(--space-10);
    margin-top:var(--space-14); padding-top:var(--space-14); border-top:var(--line) solid var(--c-border); }
  .mini-stat { background:var(--c-surface-3); border-radius:var(--r-md); padding:var(--space-8) var(--space-12); }
  .mini-stat .lbl { color:var(--muted); font-size:var(--fs-10); text-transform:uppercase; letter-spacing:.05em; margin-bottom:var(--space-2); }
  .mini-stat .num { font-size:var(--fs-20); font-weight:700; font-family:var(--font-mono); font-variant-numeric:tabular-nums;
    line-height:var(--leading-tight); }
  .mini-stat .num.rel { color:var(--ok-fg); } .mini-stat .num.irr { color:var(--err-fg); } .mini-stat .num.todo { color:var(--warn); }
  @media (max-width: 560px) { .mini-stats { grid-template-columns:repeat(2, 1fr); } }
  /* lead cards (2026-09-05 设计升级: vibe 卡质感 + 评分视觉 + 层次网格) */
  .lead { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:var(--space-8) var(--space-18);
    border:var(--line) solid var(--c-border); border-radius:var(--r-lg);
    background:linear-gradient(180deg, var(--c-surface), var(--c-surface-2));
    padding:var(--space-16) var(--space-18); margin-bottom:var(--space-12); transition:border-color .15s, transform .15s;
    position:relative; overflow:hidden; }
  .lead::before { content:""; position:absolute; inset:0 0 auto; height:1px;
    background:linear-gradient(90deg, transparent, var(--c-glass-line) 30%, var(--c-glass-line) 70%, transparent); }
  .lead:hover { border-color:var(--c-accent); transform:translateY(-1px); }
  .lead-main { min-width:0; }
  .lead-top { display:flex; align-items:center; gap:var(--space-10); margin-bottom:var(--space-8);
    flex-wrap:wrap; }
  .lead-top .lead-sub { flex:0 0 auto; }
  .lead-top > span:last-child { margin-left:auto; }
  .lead-sub { font-family:var(--font-mono); font-size:var(--fs-xs); color:var(--c-accent-2);
    letter-spacing:.02em; }
  .lead .lt { font-weight:700; color:var(--fg-strong); font-size:var(--fs-15); cursor:pointer;
    letter-spacing:-.01em; line-height:var(--leading-head); display:-webkit-box; -webkit-line-clamp:2;
    -webkit-box-orient:vertical; overflow:hidden; }
  .lead .lt:hover { color:var(--accent2); }
  /* 徽章 (lead-raw: 回收卡的 ✗ 标记) + 正文预览 (lead-body — 卡片信息回归 2026-09-06) */
  .lead-body { color:var(--muted); font-size:var(--fs-13); line-height:var(--leading-body); margin-top:var(--space-4);
    display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
  .lead-raw { margin-left:auto; font-family:var(--font-mono); font-size:var(--fs-11); color:var(--c-faint);
    border:var(--line) solid var(--c-border); border-radius:999px; padding:var(--space-2) var(--space-10);
    background:var(--c-surface-3); white-space:nowrap; }
  /* meta 栏: kw 类型弱化, 与意图/发现时间同级 */
  .lead-meta { display:flex; flex-wrap:wrap; gap:var(--space-6) var(--space-16); align-items:center; margin-top:var(--space-10);
    padding-top:var(--space-10); border-top:var(--line) solid var(--c-border); font-size:var(--fs-11); color:var(--muted); }
  .lead-meta .mi { display:inline-flex; align-items:center; gap:var(--space-6); }
  .lead-meta .kwdot { width:6px; height:6px; border-radius:50%; display:inline-block; }
  .lead-meta .kwdot.tail { background:var(--blue); } .lead-meta .kwdot.competitor { background:var(--amber); } .lead-meta .kwdot.comment { background:var(--teal); }
  .lead-meta b { color:var(--fg); font-weight:600; font-family:var(--font-mono); font-size:var(--fs-11); }
  .lead-meta .meta-kw { color:var(--muted); }
  /* 右列操作 (弱化: ghost 风, hover 才显语义色) — 2026-09-06 左对齐修复:
     .btn 是 inline-block, justify-content 无效 → display:flex + width:100% */
  .lead-side { display:flex; flex-direction:column; gap:var(--space-6); justify-content:center;
    padding-left:var(--space-18); border-left:var(--line) solid var(--c-border); }
  .lead-side .btn { display:flex; align-items:center; justify-content:flex-start;
    width:100%; min-width:112px; }
  .lead-side .btn.ok, .lead-side .btn.danger, .lead-side .btn.warn { background:transparent;
    border-color:var(--c-border); color:var(--c-muted); }
  .lead-side .btn.ok:hover { border-color:var(--ok); color:var(--ok); filter:none; }
  .lead-side .btn.warn:hover { border-color:var(--warn); color:var(--warn); filter:none; }
  .lead-side .btn.danger:hover { border-color:var(--err); color:var(--err); filter:none; }
  .tag.tail { background:color-mix(in srgb, var(--blue) 12%, transparent); color:var(--blue); }
  .tag.competitor { background:color-mix(in srgb, var(--amber) 12%, transparent); color:var(--amber); }
  .tag.comment { background:color-mix(in srgb, var(--teal) 12%, transparent); color:var(--teal); }
  .tag.sub { background:var(--soft-border); color:var(--muted); }
  /* 状态徽章 (st: 订阅/线索 outcome — 旧版渲染但从未有样式, 2026-09-06 补齐) */
  .st { display:inline-block; font-family:var(--font-mono); font-size:var(--fs-11); font-weight:600;
    padding:1px var(--space-8); border-radius:999px; border:var(--line) solid var(--c-border);
    color:var(--c-muted); background:var(--c-surface-3); white-space:nowrap; }
  .st.active { color:var(--c-ok); border-color:color-mix(in srgb, var(--c-ok) 45%, transparent);
    background:var(--c-ok-soft, transparent); }
  /* 标记状态筛选条 (相关线索, 2026-09-06)
     2026-09-12 P2 收尾: 筛选按钮改用统一小控件 .act (原来是自己一套 21px 胶囊,
     与动作按钮 30px 并存 → 同一面板里两种尺寸)。保留类名作兼容, 尺寸对齐 .act。 */
  .flt { display:flex; gap:var(--space-8); flex-wrap:wrap; align-items:center;
    margin:var(--space-2) 0 var(--space-12); }
  .flt-btn { display:inline-flex; align-items:center; justify-content:center; gap:var(--space-4);
    font-family:var(--font-ui); font-size:var(--fs-12); height:30px; padding:0 var(--space-12);
    color:var(--c-text); background:var(--c-surface-3); cursor:pointer;
    border:var(--line) solid var(--c-border-control); border-radius:var(--r-sm); }
  .flt-btn:hover { border-color:var(--c-border-strong); background:var(--c-surface-2); }
  .flt-btn.on { color:var(--c-accent); border-color:var(--c-accent);
    background:color-mix(in srgb, var(--c-accent) 14%, var(--c-surface-3)); }
  .flt-btn i { font-style:normal; opacity:.7; font-size:var(--fs-10); }
  .st.pending { color:var(--c-warn); border-color:color-mix(in srgb, var(--c-warn) 45%, transparent);
    background:var(--c-warn-soft, transparent); }
  .st.cancelled { color:var(--c-err); border-color:color-mix(in srgb, var(--c-err) 45%, transparent);
    background:var(--c-err-soft, transparent); }
  @media (max-width: 640px) {
    .lead { grid-template-columns:1fr; gap:var(--space-10); }
    .lead-side { flex-direction:row; flex-wrap:wrap; border-left:0; padding-left:0;
      border-top:var(--line) solid var(--c-border); padding-top:var(--space-10); }
  }
  /* 已交付区标题行 */
  .deliv-hd { display:flex; align-items:center; gap:var(--space-10); padding:var(--space-12) var(--space-16); margin-bottom:var(--space-10);
    border:var(--line) solid var(--c-border); border-radius:var(--r-md); background:var(--c-surface-2);
    font-size:var(--fs-12); color:var(--c-muted); text-transform:uppercase; letter-spacing:.08em; font-weight:700; }
  /* drawer */
  .overlay { position:fixed; inset:0; background:var(--overlay); z-index:40; display:none; }
  .overlay.on { display:block; }
  .drawer { position:fixed; top:0; right:0; bottom:0; width:min(680px,96vw); background:var(--drawer-bg); border-left:1px solid var(--drawer-border); z-index:45; transform:translateX(102%); transition:transform .18s ease; display:flex; flex-direction:column; }
  .drawer.on { transform:none; }
  .dhead { display:flex; align-items:center; gap:var(--space-10); padding:var(--space-14) var(--space-18); border-bottom:1px solid var(--border); background:var(--drawer-hd); }
  .dhead h3 { font-size:var(--fs-14); color:var(--fg-strong); flex:1; min-width:0; word-break:break-word; }
  .dhead .x { background:transparent; border:0; color:var(--muted); font-size:var(--fs-20); cursor:pointer; width:36px; height:36px; line-height:1; border-radius:var(--r-sm); display:flex; align-items:center; justify-content:center; }
  .dhead .x:hover { background:var(--soft-border); color:var(--fg); }
  .dbody { flex:1; overflow-y:auto; padding:var(--space-16) var(--space-20) var(--space-24); font-size:var(--fs-13); }
  .fld { font-size:var(--fs-11); color:var(--muted); letter-spacing:.08em; text-transform:uppercase; margin:var(--space-14) 0 var(--space-4); font-weight:600; }
  .fld:first-child { margin-top:0; }
  pre.body { white-space:pre-wrap; word-break:break-word; font-size:var(--fs-13); line-height:var(--leading-ui); color:var(--fg); font-family:inherit; }
  /* 2026-09-06 抽屉布局修复: 长 URL/长词断行 — 防横向溢出 (over:true 实证) */
  .dbody a { word-break:break-all; overflow-wrap:anywhere; }
  .dbody pre.body { overflow-wrap:anywhere; }
  a { color:var(--accent2); }
  .empty { border:var(--line) solid var(--c-border); border-radius:var(--r-lg); padding:var(--space-32) var(--space-24);
    color:var(--muted); text-align:center; background:linear-gradient(180deg, var(--c-surface-2), var(--c-surface)); }
  .empty .empty-ico { width:38px; height:38px; margin:0 auto var(--space-12); border-radius:var(--r-md);
    background:var(--c-surface-3); display:flex; align-items:center; justify-content:center;
    font-size:var(--fs-16); color:var(--c-faint); }
  .empty b { display:block; color:var(--fg); font-size:var(--fs-14); margin-bottom:var(--space-4); }
  .skip-link { position:absolute; left:-9999px; top:0; background:var(--accent); color:var(--c-on-accent); padding:var(--space-8) var(--space-14); border-radius:0 0 var(--r-card) 0; z-index:100; }
  .skip-link:focus { left:0; }
  @media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { transition-duration:.01ms !important; animation-duration:.01ms !important; animation-iteration-count:1 !important; }
  }
  @media (max-width: 900px) {
    .app-wrap { grid-template-columns:1fr; }
    .app-side { position:static; }
  }
  @media (max-width:680px){
    .app-wrap{padding:var(--space-16) var(--space-14) var(--space-48);} .card{padding:var(--space-18) var(--space-16);}
    .lead .lt { padding:var(--space-6) 0; }
  }

  /* ── 2026-09-11 待评分 · 人工判定 (app 端定位: 数据 UI + 人工调整) ── */
  .pend-hd { display:flex; justify-content:space-between; align-items:flex-start; gap:var(--space-12);
    margin-bottom:var(--space-10); padding:var(--space-12) var(--space-16); border:var(--line) solid var(--c-border);
    border-radius:var(--r-md); background:var(--c-surface-2); }
  .pend-hd-l b { font-size:var(--fs-14); color:var(--fg-strong); }
  .pend-sub { font-size:var(--fs-11); color:var(--muted); line-height:var(--leading-body); margin-top:var(--space-4); max-width:660px; }
  .pend-stats { display:flex; flex-wrap:wrap; gap:var(--space-14); font-size:var(--fs-11); color:var(--muted);
    margin:0 0 var(--space-8) var(--space-2); }
  .pend-exp.warn { color:var(--warn); font-weight:600; }
  .pend-list { display:flex; flex-direction:column; gap:var(--space-10); }
  .pend-row { border:var(--line) solid var(--c-border); border-radius:var(--r-md);
    background:var(--c-surface-2); padding:var(--space-12) var(--space-14); }
  .pend-row.marked { border-color:var(--c-border-strong); background:var(--c-surface-3); }
  .pend-row-hd { display:flex; align-items:center; gap:var(--space-8); flex-wrap:wrap; margin-bottom:var(--space-4); }
  .pend-src { color:var(--accent); font-size:var(--fs-11); }
  .pend-kw { font-size:var(--fs-11); color:var(--muted); background:var(--c-surface-3);
    border-radius:999px; padding:1px var(--space-8); }
  .pend-kwt { font-size:var(--fs-10); color:var(--c-faint); }
  .pend-open { margin-left:auto; font-size:var(--fs-11); color:var(--link); }
  .pend-title { font-size:var(--fs-13); font-weight:600; color:var(--fg-strong); line-height:var(--leading-body); }
  .pend-body { font-size:var(--fs-12); color:var(--fg); line-height:var(--leading-ui); white-space:pre-wrap;
    margin-top:var(--space-6); max-height:190px; overflow:auto; word-break:break-word; }
  .pend-acts { display:flex; align-items:center; gap:var(--space-8); flex-wrap:wrap; margin-top:var(--space-10); }
  .pend-acts .btn.on { border-color:var(--accent); }
  .pend-reason { flex:1 1 260px; min-width:180px; font-size:var(--fs-12); padding:var(--space-6) var(--space-10); }
  .pend-foot { display:flex; align-items:center; gap:var(--space-12); flex-wrap:wrap;
    margin-top:var(--space-14); padding-top:var(--space-12); border-top:var(--line) solid var(--c-border); }
  .pend-why { margin-top:var(--space-10); font-size:var(--fs-12); line-height:var(--leading-ui); color:var(--warn);
    background:var(--warn-soft); border-radius:var(--r-md); padding:var(--space-8) var(--space-10); }

  /* ── 2026-09-11 §14 搜索面（Sub 清单）── */
  .subface-note { font-size:var(--fs-11); line-height:var(--leading-ui); color:var(--muted); margin-bottom:var(--space-8); }
  .subface-note.warn { color:var(--warn); }
  .subface-search { margin:var(--space-10) 0 var(--space-8); }
  .sf-desc { font-size:var(--fs-12); color:var(--muted); line-height:var(--leading-body); max-width:420px;
    text-align:left; }

  /* ── 2026-09-11 接入引导 (装 skill + 贴 MCP 配置) ──
     2026-09-12 owner: 一次性配置 → 挪到侧栏**最下方** + **可折叠** (默认收起)。
     折叠头是 <button> (键盘可达), aria-expanded 表达状态; 展开态存 localStorage。 */
  .side-onboard { margin-top:var(--space-12); border:var(--line) solid var(--c-border);
    border-radius:var(--r-md); background:var(--c-surface-2); padding:var(--space-10) var(--space-12); }
  .side-onboard-hd { display:flex; align-items:center; gap:var(--space-6); width:100%;
    background:transparent; border:0; padding:0; cursor:pointer; color:inherit; text-align:left;
    transition:color 150ms ease-in-out; }
  .side-onboard-hd:hover { color:var(--c-text-strong); }
  .side-onboard-hd:focus-visible { outline:2px solid var(--c-accent); outline-offset:2px; border-radius:var(--r-xs); }
  .side-onboard-hd .t-mono { font-size:var(--fs-xs); letter-spacing:.1em; text-transform:uppercase;
    color:var(--c-accent); }
  .side-onboard-hd .once { font-size:var(--fs-10); color:var(--c-faint); }
  .side-onboard-hd .chev { margin-left:auto; color:var(--muted); font-size:var(--fs-12);
    transition:transform 150ms ease-out; }
  .side-onboard.open .side-onboard-hd .chev { transform:rotate(180deg); }
  .side-onboard-body { margin-top:var(--space-8); }
  .on-line { font-size:var(--fs-11); color:var(--muted); line-height:var(--leading-body); margin-bottom:var(--space-6); }
  .on-dim { color:var(--c-faint); }
  .on-pre { font-family:var(--font-mono); font-size:var(--fs-10); line-height:var(--leading-body); color:var(--fg);
    background:var(--c-surface-3); border-radius:var(--r-sm); padding:var(--space-8) var(--space-8); margin:0 0 var(--space-6);
    overflow:auto; max-height:180px; white-space:pre; }
  .on-offscreen { position:fixed; left:-9999px; top:0; }

/* ═══════════════════════════════════════════════════════════════════════════
   P0 交互基线 (2026-09-12) — docs/app-ui-ux-refactor-plan-20260912.md
   规范来源: skills/ui-ux-pro-max (状态集/尺寸/对比度) + skills/pencilplaybook
   (Perceptual Design Defaults:动效 100–400ms、hover ≥8%、禁用 40%、点击目标)。
   只补"态"与"值", 不改布局与信息架构。
   ═══════════════════════════════════════════════════════════════════════════ */

/* ① 交互态: 过渡 + 按下 (按钮类元素统一; 配色过渡 150ms / 位移 120ms) */
.flt-btn, .wb-tab, .subnav-item, .side-tab, .act-detail,
button:not(.btn) { transition:background-color 150ms ease-in-out,
  border-color 150ms ease-in-out, color 150ms ease-in-out, transform 120ms ease-out; }
.flt-btn:not(:disabled):active, .wb-tab:active, .subnav-item:active,
.side-tab:active, button:not(.btn):not(:disabled):active { transform:translateY(1px); }
.act-detail:active { transform:translateY(1px); }

/* ② 禁用态: 40% 不透明 + 不可点 (与 .btn 一致) */
.flt-btn:disabled, .wb-tab:disabled, button:not(.btn):disabled,
input:disabled, textarea:disabled, select:disabled { opacity:.4; cursor:not-allowed; }

/* ③ 控件边界 ≥3:1 — 只作用于"可交互控件", 装饰分隔线仍用 --c-border */
input, textarea, select, .chk input[type="checkbox"] {
  border-color:var(--c-border-control); }
input:hover:not(:disabled), textarea:hover:not(:disabled), select:hover:not(:disabled) {
  border-color:var(--c-border-strong); }

/* ④ 可点卡片指向性 (不加新元素): cursor + hover 提亮 (亮/暗底都 ≥8% 感知差) */
.pend-row { cursor:pointer;
  transition:border-color 150ms ease-in-out, background-color 150ms ease-in-out; }
.pend-row:hover { border-color:var(--c-border-strong); background:var(--c-surface-3); }

/* ⑤ 统一提示: 全局 toast 栈 (替代原先写进隐藏 #sub-msg 的做法) */
.toast-stack { position:fixed; right:16px; bottom:16px; z-index:60;
  display:flex; flex-direction:column; gap:var(--space-8); max-width:min(420px, 92vw); }
.toast { display:flex; align-items:flex-start; gap:var(--space-8);
  padding:var(--space-10) var(--space-12); border-radius:var(--r-md); font-size:var(--fs-13); line-height:var(--leading-body);
  background:var(--c-surface-2); color:var(--c-text);
  border:var(--line) solid var(--c-border-strong); box-shadow:var(--c-shadow-md, 0 6px 16px -6px rgba(0,0,0,.35));
  animation:toast-in 160ms cubic-bezier(0,0,.2,1); }
.toast.ok { border-color:var(--c-ok); }
.toast.err { border-color:var(--c-err); }
.toast .t-ico { flex:0 0 auto; font-size:var(--fs-13); line-height:var(--leading-body); }
.toast .t-txt { flex:1 1 auto; min-width:0; word-break:break-word; }
.toast .t-x { flex:0 0 auto; background:transparent; border:0; color:var(--c-muted);
  cursor:pointer; font-size:var(--fs-14); line-height:1; padding:var(--space-2) var(--space-4); border-radius:var(--r-xs); }
.toast .t-x:hover { color:var(--c-text-strong); background:var(--c-surface-3); }
@keyframes toast-in { from { opacity:0; transform:translateY(6px); } to { opacity:1; transform:none; } }

/* ⑥ 确认对话框 (替代原生 window.confirm: 可样式化/可 i18n/不阻塞) */
.dlg-wrap { position:fixed; inset:0; z-index:80; display:none;
  align-items:center; justify-content:center; padding:var(--space-16);
  background:rgba(0,0,0,.5); }
.dlg-wrap.on { display:flex; }
.dlg { width:100%; max-width:512px; background:var(--c-surface);
  border:var(--line) solid var(--c-border-strong); border-radius:var(--r-lg);
  box-shadow:var(--c-shadow-lg, 0 18px 40px -18px rgba(0,0,0,.5)); padding:var(--space-18) var(--space-18) var(--space-14);
  animation:dlg-in 160ms cubic-bezier(0,0,.2,1); }
@keyframes dlg-in { from { opacity:0; transform:translateY(8px) scale(.99); } to { opacity:1; transform:none; } }
.dlg h3 { margin:0 0 var(--space-8); font-size:var(--fs-md); color:var(--c-text-strong); }
.dlg .dlg-body { font-size:var(--fs-13); line-height:var(--leading-ui); color:var(--c-text);
  white-space:pre-wrap; word-break:break-word; }
.dlg .dlg-foot { display:flex; justify-content:flex-end; gap:var(--space-8); margin-top:var(--space-16); }
@media (prefers-reduced-motion: reduce) {
  .toast, .dlg { animation:none; }
  .btn, .flt-btn, .wb-tab, .subnav-item, .side-tab, .act-detail, .pend-row { transition:none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   2026-09-12 细节统一 (owner:"统一什么"要说清, 不是空谈架构)
   三条硬规则:
     ① 长文本一律截断 (clamp) —— 卡片不因内容变形
     ② 判定 = 选择, 用中性按钮 + 主色选中态; **不用红绿** (红绿只留给破坏性动作
        与结果徽标) —— 规范: 不靠颜色单独表达状态 (WCAG 1.4.1)
     ③ 所有卡片同一个动作行 .card-acts:左=动作, 右=导航(详情/看原帖),
        按钮 30px 高 / 12px 字 / 8px 间距 —— 三种卡片长得像一家人
   ═══════════════════════════════════════════════════════════════════════════ */

/* ① 截断: 产品名 2 行, 标题 2 行, 正文预览 3 行; 长串强制换行 (overflow-wrap:anywhere) */
.health-card .hc-prod .p { display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
  overflow:hidden; overflow-wrap:anywhere; }
.health-card .hc-prod .m { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.pend-title, .lead .lt { display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
  overflow:hidden; overflow-wrap:anywhere; }
.pend-body, .lead-body { display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical;
  overflow:hidden; overflow-wrap:anywhere; }
.kwmgr td, .sf-desc, .dbody pre.body, .pend-row-hd { overflow-wrap:anywhere; }

/* ② 中性选择按钮 (判定/状态动作用它; 选中 = 主色, 不是绿/红) */
.act { display:inline-flex; align-items:center; justify-content:center; gap:var(--space-4);
  height:30px; padding:0 var(--space-12); border:var(--line) solid var(--c-border-control);
  border-radius:var(--r-sm); background:var(--c-surface-3); color:var(--c-text);
  font-family:var(--font-ui); font-size:var(--fs-12); font-weight:600; cursor:pointer;
  text-decoration:none; white-space:nowrap;
  transition:background-color 150ms ease-in-out, border-color 150ms ease-in-out,
             color 150ms ease-in-out, transform 120ms ease-out; }
.act:hover:not(:disabled) { border-color:var(--c-border-strong); background:var(--c-surface-2); }
.act:not(:disabled):active { transform:translateY(1px); }
.act.on { border-color:var(--c-accent); color:var(--c-accent);
  background:color-mix(in srgb, var(--c-accent) 14%, var(--c-surface-3)); }
.act:disabled { opacity:.4; cursor:not-allowed; }
.act.quiet { background:transparent; border-color:var(--c-border); color:var(--c-muted); }
.act.quiet:hover:not(:disabled) { color:var(--c-text); border-color:var(--c-border-strong); background:var(--c-surface-2); }
/* 仅"破坏性"动作允许红色 (取消订阅/移除词条/剔除线索) */
.act.danger { background:transparent; color:var(--c-err);
  border-color:color-mix(in srgb, var(--c-err) 45%, transparent); }
.act.danger:hover:not(:disabled) { border-color:var(--c-err);
  background:color-mix(in srgb, var(--c-err) 12%, transparent); }

/* ③ 统一动作行: 三种卡片 (待评分/相关线索/回收) 共用 */
.card-acts { display:flex; align-items:center; gap:var(--space-8); flex-wrap:wrap;
  margin-top:var(--space-10); padding-top:var(--space-8); border-top:var(--line) solid var(--c-border); }
.card-acts .nav { margin-left:auto; display:inline-flex; align-items:center; gap:var(--space-8); }
.pend-reason { flex:1 1 160px; min-width:120px; max-width:300px; height:30px; padding:0 var(--space-10);
  font-size:var(--fs-12); border-radius:var(--r-sm); border:var(--line) solid var(--c-border-control);
  background:var(--input-bg); color:var(--fg); font-family:inherit; }
/* 卡片改为单列 (动作不再挤在右侧竖排, 统一进动作行) */
.lead { display:block; }
.lead-side { display:none; }

/* ④ 批量勾选 (2026-09-12 P2, 09-03 §6 定稿「勾选多条批量评」) */
.pend-selwrap { display:inline-flex; align-items:center; flex:0 0 auto; cursor:pointer; }
.pend-sel { width:15px; height:15px; margin:0; accent-color:var(--c-accent); cursor:pointer; }
.pend-row.sel { border-color:var(--c-accent);
  background:color-mix(in srgb, var(--c-accent) 8%, var(--c-surface)); }
.pend-tools { margin-top:var(--space-8); }
.pend-tools .t-mono { font-size:var(--fs-11); }

/* ═══ 2026-09-12 P2: pane 统一骨架 / 空态 / 骨架屏 / 按钮 loading ═══ */
/* ① 统一的 pane 头部 (标题 + 一句说明 + 右端动作/同步提示); .pend-hd 也挂这个类 */
.pane-hd { display:flex; align-items:baseline; gap:var(--space-10); flex-wrap:wrap;
  margin-bottom:var(--space-10); }
.pane-hd b { font-size:var(--fs-14); color:var(--fg-strong); }
.pane-hd .sub { font-size:var(--fs-12); color:var(--muted); line-height:var(--leading-body); }
.pane-hd .nav { margin-left:auto; display:inline-flex; align-items:center; gap:var(--space-8); }
.pane-hd .sync { font-family:var(--font-mono); font-size:var(--fs-11); color:var(--c-faint); }
/* ② 统一空态: 图标 + 标题 + 说明 + (可选)下一步动作 —— 五个 tab 同一形状 */
.empty { border:var(--line) dashed var(--c-border); border-radius:var(--r-card);
  padding:var(--space-24) var(--space-18); text-align:center; background:var(--c-surface-2); }
.empty .empty-ico { font-size:var(--fs-22); color:var(--c-faint); margin-bottom:var(--space-6); }
.empty b { display:block; font-size:var(--fs-14); color:var(--fg-strong); margin-bottom:var(--space-6); }
.empty .empty-body { font-size:var(--fs-12); color:var(--muted); line-height:var(--leading-body);
  max-width:440px; margin:0 auto; }
.empty .empty-act { margin-top:var(--space-12); }
/* ③ 骨架屏 (列表加载中: 行占位 + 微光) */
.sk { display:flex; flex-direction:column; gap:var(--space-8); }
.sk-row { border:var(--line) solid var(--c-border); border-radius:var(--r-card);
  background:var(--c-surface-2); padding:var(--space-12) var(--space-14); }
.sk-line { height:10px; border-radius:var(--r-xs); background:linear-gradient(90deg,
  var(--c-surface-3) 25%, var(--c-surface-2) 37%, var(--c-surface-3) 63%);
  background-size:400% 100%; animation:sk-shimmer 1.4s ease-in-out infinite; }
.sk-line + .sk-line { margin-top:var(--space-8); }
.sk-line.w40 { width:40%; } .sk-line.w70 { width:70%; } .sk-line.w90 { width:90%; }
@keyframes sk-shimmer { 0% { background-position:100% 0; } 100% { background-position:0 0; } }
/* ④ 按钮 loading: busy() 会加 .busy + aria-busy (原实现只改文字, 没有"正在跑"的视觉) */
.btn.busy { position:relative; padding-right:var(--space-32); }
.btn.busy::after { content:""; position:absolute; right:var(--space-10); top:50%;
  width:11px; height:11px; margin-top:-6px; border:2px solid currentColor;
  border-right-color:transparent; border-radius:50%; animation:btn-spin .7s linear infinite; }
@keyframes btn-spin { to { transform:rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  .sk-line { animation:none; }
  .btn.busy::after { animation:none; }
}

/* ⑥ chip 尺寸统一 (2026-09-12 P2 收尾): 元数据/状态 chip 只有一套尺寸
   (原来 .tag 12px/2px10px、.st 11px/1px8px、.hb 11px、.st-kw 10px/0 6px 混用)。
   只统一"形状", 不统一颜色 —— 颜色语义(ok/warn/err/来源色)各自保留。 */
.tag, .st, .hb, .st-kw { height:20px; padding:0 var(--space-8); border-radius:999px;
  font-family:var(--font-mono); font-size:var(--fs-11); line-height:18px;
  display:inline-flex; align-items:center; }
/* 待评分卡片头部的裸文字 chip 也统一到 11px (原 10/12 混用) */
.pend-src, .pend-kw, .pend-kwt { font-size:var(--fs-11); }

/* ⑦ 小控件只有一套尺寸 (2026-09-12 P2 收尾): .btn.sm 对齐 .act (30px)
   —— 原来 .btn.sm ≈27px 与 .act 30px 并存, 同一面板里两种高度。 */
.btn.sm { height:30px; padding:0 var(--space-12); border-radius:var(--r-sm);
  font-size:var(--fs-12); display:inline-flex; align-items:center; justify-content:center; }
