  /* Daily log */
  /* 上下文条：配色沿用 .bs-kpi-card.k4 同一档蓝，不新造颜色 */
  .log-ctx { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; background:#e6f7ff; border:1px solid #91d5ff; color:#0050b3; border-radius:var(--radius-sm); padding:8px 13px; font-size:12.5px; margin-bottom:14px; }
  .log-scope-btns { display:flex; gap:6px; }
  .log-scope-btn { padding:3px 12px; border-radius:14px; border:1px solid #91d5ff; background:#fff; color:#0050b3; cursor:pointer; font-size:11.5px; }
  .log-scope-btn.on { background:var(--brand); border-color:var(--brand); color:#fff; font-weight:600; }
  .log-add-area { background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); padding:16px; margin-bottom:16px; }
  .log-add-area h3 { font-size:14px; color:var(--brand); margin-bottom:12px; }
  /* 折叠表单头：默认收起，点击展开 renderLogFormBody() 主体 */
  .log-add-head { display:flex; align-items:center; justify-content:space-between; cursor:pointer; font-size:13.5px; font-weight:600; color:var(--brand); margin-bottom:12px; }
  .log-add-hint { font-size:11.5px; color:var(--text-subtle); font-weight:400; }
  /* 折叠只切 .open，不重建 DOM——重建会丢掉用户已填的正文与已选分类 */
  .log-add-area.collapsible .log-add-body { display:none; }
  .log-add-area.collapsible.open .log-add-body { display:block; }
  .log-add-area.collapsible:not(.open) .log-add-head { margin-bottom:0; }
  .log-form-row { display:flex; gap:10px; margin-bottom:10px; flex-wrap:wrap; align-items:center; }
  /* select 不在这里再设一遍——会用 shorthand 盖掉 css/base.css 全局 select 规则
     的自定义箭头（padding-right 30px 被这里的 padding:7px 12px 吃掉）。
     date input 不受全局 select 规则影响，样式留在这里。 */
  .log-form-row input[type="date"] { padding:7px 12px; border:1px solid var(--border); border-radius:var(--radius-sm); font-size:13px; outline:none; }
  .log-form-row input:focus { border-color:var(--brand); }
  .log-cat-tags { display:flex; gap:6px; flex-wrap:wrap; }
  .log-cat-tag { padding:3px 10px; border:1px solid var(--border); border-radius:var(--radius-sm); background:var(--surface); color:var(--text-muted); cursor:pointer; font-size:11px; transition:all 0.2s; }
  .log-cat-tag:hover { border-color:var(--brand); color:var(--brand); }
  .log-cat-tag.active { background:var(--brand); border-color:var(--brand); color:#fff; }
  .log-textarea { width:100%; min-height:60px; padding:10px; border:1px solid var(--border); border-radius:var(--radius-sm); font-size:13px; outline:none; resize:vertical; font-family:inherit; margin-bottom:10px; }
  .log-textarea:focus { border-color:var(--brand); }

  .log-timeline { }
  .log-entry { background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); padding:14px 16px; margin-bottom:10px; display:flex; gap:14px; position:relative; box-shadow:var(--shadow-card); }
  .log-entry::before { content:''; position:absolute; left:0; top:14px; bottom:14px; width:3px; border-radius:3px; }
  .log-entry.cat-product::before { background:var(--brand); }
  .log-entry.cat-ad::before { background:var(--brand); }
  .log-entry.cat-service::before { background:var(--ok); }
  .log-entry.cat-data::before { background:var(--week); }
  .log-entry.cat-marketing::before { background:var(--warn); }
  .log-entry.cat-other::before { background:var(--text-subtle); }
  .log-entry.cat-shop::before { background:var(--ok); }
  .log-entry.cat-adopt::before { background:var(--month); }
  .log-date-block { display:flex; flex-direction:column; align-items:center; justify-content:center; min-width:48px; padding:4px 8px; border-radius:var(--radius-sm); background:#f5f5f5; flex-shrink:0; }
  .log-date-block .day { font-size:18px; font-weight:700; color:var(--brand); }
  .log-date-block .month { font-size:10px; color:var(--text-subtle); }
  .log-body { flex:1; min-width:0; }
  .log-head { display:flex; align-items:center; gap:8px; margin-bottom:4px; flex-wrap:wrap; }
  .log-store-name { font-size:13px; font-weight:600; }
  .log-cat-badge { font-size:10px; padding:1px 8px; border-radius:var(--radius-sm); }
  .lcb-product { background:var(--brand-bg); color:var(--brand); }
  .lcb-ad { background:var(--brand-bg); color:var(--brand); }
  .lcb-service { background:var(--ok-bg); color:var(--ok); }
  .lcb-data { background:#f9f0ff; color:var(--week); }
  .lcb-marketing { background:var(--warn-bg); color:var(--warn); }
  .lcb-other { background:#f5f5f5; color:var(--text-muted); }
  .lcb-shop { background:var(--ok-bg); color:var(--ok); }
  .lcb-adopt { background:var(--month-bg); color:var(--month); }
  .log-time { font-size:10px; color:var(--text-subtle); margin-left:auto; }
  .log-content { font-size:13px; line-height:1.7; color:var(--text); white-space:pre-wrap; }
  .log-del { position:absolute; top:10px; right:12px; width:18px; height:18px; border:none; background:transparent; color:var(--text-subtle); cursor:pointer; font-size:14px; opacity:0; }
  .log-entry:hover .log-del { opacity:0.6; }
  .log-del:hover { opacity:1; color:var(--bad); }
  .log-empty { text-align:center; padding:40px; color:var(--text-subtle); font-size:14px; }
  .log-hit-count { font-size:12px; color:var(--text-subtle); margin:8px 0 4px; }
  /* 日期分组分隔条：今天/昨天 + 日期星期 + 一条横线 + 当天条数 */
  .log-daygroup { display:flex; align-items:center; gap:10px; margin:18px 0 10px; }
  .log-daygroup:first-child { margin-top:0; }
  .log-dayhead { font-size:13px; font-weight:700; color:var(--text); }
  .log-daydate { font-size:11.5px; color:var(--text-subtle); }
  .log-dayline { flex:1; height:1px; background:var(--border); }
  .log-daycount { font-size:11.5px; color:var(--text-subtle); }
  /* Operator batch submission form（views/operator-batch.js + operator-entry-row.js +
     operator-import.js）。2026-09-14：截图区从输入框右侧的窄列移到工作内容正下方
     （.op-entry-upload 改为独立一行），新增 Excel 导入入口（.op-import-*）与
     常驻提示条（#opImportSlot 的 .op-import-summary），见 responsive.js 基线
     注释同一次改动。 */
  .op-batch-card { position:relative; background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); padding:20px 24px; margin-bottom:16px; box-shadow:var(--shadow-card); }
  .op-batch-card h3 { font-size:16px; color:var(--brand); margin:0; display:flex; align-items:center; gap:8px; }
  .op-batch-head { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:10px; margin-bottom:16px; }
  .op-batch-head-right { display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
  .op-form-date { display:inline-flex; align-items:center; gap:6px; padding:5px 14px; background:var(--brand-bg); border-radius:16px; font-size:12px; color:var(--brand); font-weight:600; }
  .op-batch-count { font-size:12.5px; color:var(--text-muted); }
  .op-batch-count b { color:var(--brand); font-size:14px; }

  /* 导入入口：下载模板 + 导入 Excel，隐藏的 file input 用 style="display:none"
     内联（与 .op-entry-upload-add 旁的截图 input 同一写法，不用 [hidden]——
     全站没有 [hidden]{display:none} 规则，见 CLAUDE.md「已知边界」）。 */
  .op-import-ctrls { display:flex; align-items:center; gap:8px; padding-left:12px; border-left:1px solid var(--border); }
  .op-link-btn { display:inline-flex; align-items:center; gap:5px; min-height:36px; padding:6px 8px; border:none; background:transparent; color:var(--text-muted); font-size:13px; cursor:pointer; border-radius:var(--radius-sm); text-decoration:none; }
  .op-link-btn:hover { color:var(--brand); background:var(--brand-bg); }
  .op-import-btn { display:inline-flex; align-items:center; gap:6px; min-height:36px; padding:6px 14px; border:1px solid var(--brand-bd); border-radius:var(--radius-sm); background:var(--brand-bg); color:var(--brand); font-size:13px; font-weight:600; cursor:pointer; transition:background .15s, border-color .15s; }
  .op-import-btn:hover:not(:disabled) { background:#dbeafe; border-color:var(--brand); }
  .op-import-btn:disabled { opacity:.5; cursor:not-allowed; }
  .op-import-ctrls svg, .op-link-btn svg { width:16px; height:16px; flex:none; }

  /* 导入结果提示条：#opImportSlot 常驻，内容按导入状态切换（空/进度/摘要） */
  .op-import-summary { display:flex; align-items:flex-start; gap:12px; flex-wrap:wrap; padding:10px 14px; border:1px solid; border-radius:var(--radius-sm); font-size:13px; margin-bottom:12px; }
  .op-import-summary.is-ok { background:var(--ok-bg); border-color:var(--ok-bd); }
  .op-import-summary.is-warn { background:var(--warn-bg); border-color:var(--warn-bd); }
  .op-import-summary.is-busy { background:var(--brand-bg); border-color:var(--brand-bd); color:var(--brand); font-weight:600; align-items:center; }
  .op-import-summary:focus { outline:2px solid var(--brand); outline-offset:2px; }
  .sum-icon { width:20px; height:20px; flex:none; margin-top:1px; }
  .is-ok .sum-icon { color:var(--ok); }
  .is-warn .sum-icon { color:var(--warn); }
  .sum-text { flex:1; min-width:220px; display:grid; gap:2px; }
  .sum-text b { color:var(--ink); }
  .sum-sub { font-size:12px; color:var(--text-muted); }
  .sum-notes { margin:6px 0 0; padding-left:18px; display:grid; gap:2px; font-size:12.5px; color:var(--warn); }
  .sum-pill { font-size:12px; font-weight:600; padding:3px 10px; border-radius:999px; white-space:nowrap; }
  .sum-pill.ok { color:var(--ok); background:#fff; border:1px solid var(--ok-bd); }
  .sum-pill.bad { color:var(--bad); background:#fff; border:1px solid var(--bad-bd); }
  .sum-close { width:32px; height:32px; border:none; background:transparent; color:var(--text-subtle); font-size:18px; cursor:pointer; border-radius:50%; }
  .sum-close:hover { background:rgba(15,23,42,.06); color:var(--ink); }
  /* 复用 base.css 已有的 @keyframes spin，这里只定形状，不重复定义关键帧 */
  .op-import-summary .spinner { width:16px; height:16px; border:2px solid var(--brand-bd); border-top-color:var(--brand); border-radius:50%; animation:spin .8s linear infinite; flex:none; }

  #opEntriesList { display:flex; flex-direction:column; gap:10px; margin-bottom:14px; }
  /* 三行排布：① 序号 · 板块 · 工作内容 · 删除  ② 截图条（对齐工作内容）  ③ 来源行号与错误 */
  .op-entry-row { display:grid; grid-template-columns:26px 140px minmax(0,1fr) 26px; column-gap:12px; row-gap:10px; align-items:start; padding:12px; border:1px solid var(--border); border-radius:var(--radius-sm); background:#fafbfc; }
  .op-entry-row > .op-entry-num { grid-column:1; grid-row:1; }
  .op-entry-row > .op-entry-cat { grid-column:2; grid-row:1; }
  .op-entry-row > .op-entry-content { grid-column:3; grid-row:1; }
  .op-entry-row > .op-entry-del { grid-column:4; grid-row:1; }
  .op-entry-row > .op-entry-upload { grid-column:3; grid-row:2; }
  .op-entry-row > .op-entry-meta { grid-column:2 / 4; grid-row:3; }
  .op-entry-row.has-error { border-color:var(--bad); background:var(--bad-bg); }
  .op-entry-num { width:22px; height:22px; border-radius:50%; background:var(--brand); color:#fff; font-size:11px; font-weight:700; display:flex; align-items:center; justify-content:center; margin-top:6px; }
  .has-error .op-entry-num { background:var(--bad); }
  /* 只加 width，不碰 border/padding/background——那三个交给 base.css 的全局
     select 规则（自定义箭头），见 views/operator.js 头部同一条注释。 */
  .op-entry-cat { width:100%; }
  .op-entry-cat[aria-invalid="true"] { border-color:var(--bad); color:var(--bad); }
  .op-entry-content { width:100%; min-height:56px; padding:8px 10px; border:1px solid var(--border); border-radius:var(--radius-sm); font-size:13.5px; outline:none; resize:vertical; font-family:inherit; line-height:1.6; }
  .op-entry-content:focus { border-color:var(--brand); box-shadow:0 0 0 2px rgba(37,99,235,0.1); }
  .op-entry-content[aria-invalid="true"] { border-color:var(--bad); }

  /* 截图条：缩略图（可删）+ 同尺寸添加方块，56px 正方形，不与输入框争横向空间 */
  .op-entry-upload { display:flex; flex-wrap:wrap; align-items:center; gap:10px; }
  .op-upload-thumb { position:relative; width:56px; height:56px; flex:none; }
  .op-upload-thumb img { display:block; width:100%; height:100%; object-fit:cover; border-radius:var(--radius-sm); border:1px solid var(--border); background:var(--track); }
  .op-upload-thumb-del { position:absolute; top:-8px; right:-8px; width:22px; height:22px; border-radius:50%; border:2px solid var(--surface); background:rgba(15,23,42,.78); color:#fff; font-size:12px; line-height:1; cursor:pointer; display:flex; align-items:center; justify-content:center; }
  .op-upload-thumb-del:hover { background:var(--bad); }
  .op-entry-upload-add { width:56px; height:56px; flex:none; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px; padding:0; border:1px dashed #cbd5e1; border-radius:var(--radius-sm); background:var(--surface); color:var(--text-subtle); font-size:11px; line-height:1.2; cursor:pointer; transition:border-color .15s, background .15s, color .15s; }
  .op-entry-upload-add svg { width:18px; height:18px; margin-bottom:1px; }
  .op-entry-upload-add:hover:not(:disabled) { border-color:var(--brand); background:var(--brand-bg); color:var(--brand); }
  .op-entry-upload-add:disabled { cursor:not-allowed; opacity:.55; }

  .op-entry-del { width:26px; height:26px; border:none; border-radius:50%; background:transparent; color:var(--text-subtle); cursor:pointer; font-size:16px; margin-top:4px; }
  .op-entry-del:hover:not(:disabled) { background:var(--bad-bg); color:var(--bad); }
  .op-entry-del:disabled { opacity:0.3; cursor:not-allowed; }
  .op-entry-meta { display:flex; gap:10px; flex-wrap:wrap; align-items:baseline; font-size:12px; }
  .op-src { color:var(--text-subtle); }
  .op-entry-err { color:var(--bad); font-weight:500; }

  .op-batch-actions { display:flex; align-items:center; gap:12px; }
  .op-batch-actions .op-submit-btn { flex:1; }
  @media (max-width:640px) {
    .op-batch-card { padding:16px; }
    .op-import-ctrls { padding-left:0; border-left:none; width:100%; }
    .op-import-btn { flex:1; justify-content:center; min-height:44px; }
    .op-link-btn { min-height:44px; }
    .op-entry-row { grid-template-columns:26px minmax(0, 1fr) 30px; }
    .op-entry-row > .op-entry-del { grid-column:3; }
    .op-entry-row > .op-entry-content { grid-column:1 / -1; grid-row:2; }
    .op-entry-row > .op-entry-upload { grid-column:1 / -1; grid-row:3; }
    .op-entry-row > .op-entry-meta { grid-column:1 / -1; grid-row:4; }
  }

  /* 拖放导入遮罩：JS 用 style.display 直接切换（同上，不用 [hidden]） */
  .op-drop-overlay { position:absolute; inset:0; border:2px dashed var(--brand); border-radius:var(--radius); background:rgba(239,246,255,.94); flex-direction:column; align-items:center; justify-content:center; gap:6px; color:var(--brand); font-weight:600; z-index:2; pointer-events:none; text-align:center; padding:16px; }
  .op-drop-overlay small { color:var(--text-muted); font-weight:400; }

  .op-submit-btn { padding:12px; border:none; border-radius:var(--radius-sm); background:var(--brand); color:#fff; cursor:pointer; font-size:15px; font-weight:700; transition:all 0.2s; box-shadow:0 2px 8px rgba(37,99,235,0.25); }
  .op-submit-btn:hover { background:var(--brand-hover); transform:translateY(-1px); box-shadow:0 4px 12px rgba(37,99,235,0.35); }
  .op-submit-btn:disabled { background:#ccc; box-shadow:none; cursor:not-allowed; transform:none; }
  @media (prefers-reduced-motion:reduce) {
    .op-import-summary .spinner, .op-import-btn, .op-entry-upload-add { transition:none!important; animation:none!important; }
  }
  /* 待重传队列 */
  .op-retry-card { margin-top:14px; padding-top:14px; border-top:1px dashed var(--border); }
  .op-retry-row { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; padding:8px 10px; border:1px solid var(--warn-bd); background:var(--warn-bg); border-radius:var(--radius-sm); margin-bottom:8px; }
  .op-retry-info { display:flex; align-items:center; gap:8px; flex-wrap:wrap; min-width:0; }
  .op-retry-text { font-size:12.5px; color:var(--text); }
  .op-retry-files { font-size:11.5px; color:var(--warn); font-weight:600; }
  .op-retry-acts { display:flex; gap:6px; flex-shrink:0; }
  .op-history { margin-top:8px; }
  .op-history-title { font-size:14px; font-weight:700; color:var(--text); margin-bottom:12px; display:flex; align-items:center; gap:6px; }
  .op-history-entry { background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); padding:14px 16px; margin-bottom:10px; }
  .op-history-head { display:flex; align-items:center; gap:8px; margin-bottom:8px; flex-wrap:wrap; }
  .op-history-cat { font-size:11px; padding:2px 10px; border-radius:var(--radius-sm); font-weight:600; }
  .op-history-time { font-size:11px; color:var(--text-subtle); margin-left:auto; }
  .op-history-desc { font-size:13px; line-height:1.6; color:var(--text); white-space:pre-wrap; margin-bottom:8px; }
  .op-history-proofs { display:flex; gap:6px; flex-wrap:wrap; }
  .op-history-proof { width:60px; height:60px; border-radius:var(--radius-sm); overflow:hidden; border:1px solid var(--border); cursor:pointer; }
  .op-history-proof img { width:100%; height:100%; object-fit:cover; }
  /* 2026-09-07：管理大屏专属的 .bs-* 规则（KPI 卡组/店铺进度卡/运营对比/动态
     时间线/模块热力矩阵）搬到独立的 css/dashboard.css 了——本文件超过 CLAUDE.md
     0.4 的 300 行文件硬指标，按职责拆分，见 dashboard.css 文件头注释。
     同时删掉了这里原有的"Dashboard tab"死代码块（.dash-grid/.dash-card/
     .dash-table/.dash-bar/.module-heat/.heat-*）——grep 全仓库 public/js 与
     *.html 零引用，是早期原型遗留、已被这里的 .bs-* 大屏取代，按 0.4"改变行为时
     清除死代码"一并删掉，不是本轮拆分本身要求的，顺手清理。 */
  /* ===== 设置页 ===== */
  .set-wrap { max-width:1180px; margin:0 auto; }
  .set-subtabs { display:flex; gap:8px; margin-bottom:20px; background:#eef0f3; padding:5px; border-radius:var(--radius-sm); width:fit-content; }
  .set-subtab { padding:8px 20px; border-radius:var(--radius-sm); font-size:14px; font-weight:600; color:var(--text-muted); cursor:pointer; transition:all .18s; display:flex; align-items:center; gap:6px; }
  .set-subtab:hover { background:rgba(37,99,235,.08); color:var(--brand); }
  .set-subtab.active { background:var(--brand); color:#fff; box-shadow:0 2px 6px rgba(37,99,235,.3); }
  .set-card { background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); padding:22px 24px; margin-bottom:18px; box-shadow:var(--shadow-card); }
  .set-head { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:18px; flex-wrap:wrap; }
  .set-title { font-size:16px; font-weight:700; color:var(--text); display:flex; align-items:center; gap:8px; }
  .set-desc { font-size:12.5px; color:var(--text-subtle); margin-top:4px; font-weight:400; line-height:1.6; }
  .set-btn { background:var(--brand); color:#fff; border:none; padding:8px 16px; border-radius:var(--radius-sm); font-size:13px; font-weight:600; cursor:pointer; display:inline-flex; align-items:center; gap:5px; transition:all .18s; }
  .set-btn:hover { background:var(--brand-hover); transform:translateY(-1px); box-shadow:0 3px 8px rgba(37,99,235,.28); }
  .set-btn.ghost { background:#fff; color:var(--text-muted); border:1px solid var(--border); }
  .set-btn.ghost:hover { color:var(--brand); border-color:var(--brand); background:var(--brand-bg); box-shadow:none; }
  /* 运营人员表 */
  .op-table { width:100%; border-collapse:collapse; font-size:13.5px; }
  .op-table th { text-align:left; font-size:12px; color:var(--text-subtle); font-weight:600; padding:10px 12px; border-bottom:1px solid var(--border); white-space:nowrap; }
  .op-table td { padding:12px; border-bottom:1px solid #f2f2f2; vertical-align:middle; }
  .op-table tr:last-child td { border-bottom:none; }
  .op-table tr.off td { opacity:.5; }
  .op-name-cell { display:flex; align-items:center; gap:10px; }
  .op-av { width:34px; height:34px; border-radius:50%; background:linear-gradient(135deg,var(--brand),var(--brand-hover)); color:#fff; display:flex; align-items:center; justify-content:center; font-weight:700; font-size:14px; flex-shrink:0; }
  .op-av.off { background:#c8c8c8; }
  .op-nm { font-weight:600; color:var(--text); }
  .op-sub { font-size:11.5px; color:var(--text-subtle); }
  .op-badge { display:inline-block; padding:2px 9px; border-radius:var(--radius-sm); font-size:11px; font-weight:600; }
  .op-badge.on { background:#f0f9eb; color:var(--ok); }
  .op-badge.off { background:#f5f5f5; color:var(--text-subtle); }
  /* 账号角色标签：admin/specialist/assistant 三档，见 admin/accounts.js accountRoleKey */
  .role-badge { display:inline-block; padding:2px 9px; border-radius:var(--radius-sm); font-size:11.5px; font-weight:600; }
  .role-badge.admin { background:var(--once-bg); color:var(--once); }
  .role-badge.specialist { background:var(--brand-bg); color:var(--brand-hover); }
  .role-badge.assistant { background:var(--week-bg); color:var(--week); }
  .op-stores-cell { max-width:280px; font-size:12.5px; color:var(--text-muted); line-height:1.7; }
  .op-none { color:var(--text-subtle); font-style:italic; }
  /* 新增/编辑店铺弹窗：运营勾选列表（views/stores.js renderOperatorPicker） */
  .op-picker-group { margin-bottom:10px; }
  .op-picker-group-title { font-size:11.5px; font-weight:700; color:var(--text-subtle); margin-bottom:4px; }
  .op-picker-row { display:flex; align-items:center; gap:8px; padding:6px 4px; border-bottom:1px solid #f5f5f5; cursor:pointer; font-size:13px; }
  .op-picker-row:last-child { border-bottom:none; }
  .op-picker-row.disabled { color:var(--text-subtle); cursor:default; }
  .op-picker-count { margin-left:auto; font-size:11px; color:var(--text-subtle); }
  .op-picker-tag { margin-left:auto; font-size:11px; color:var(--text-subtle); background:#f5f5f5; padding:1px 7px; border-radius:var(--radius-sm); }
  .op-acts { display:flex; gap:6px; flex-wrap:wrap; justify-content:flex-end; }
  .mini-btn { padding:4px 10px; border-radius:var(--radius-sm); font-size:12px; font-weight:600; cursor:pointer; border:1px solid var(--border); background:#fff; color:var(--text-muted); transition:all .15s; white-space:nowrap; }
  .mini-btn:hover { border-color:var(--brand); color:var(--brand); background:var(--brand-bg); }
  .mini-btn.link:hover { border-color:var(--brand); color:var(--brand); background:#f0f8ff; }
  .mini-btn.danger:hover { border-color:var(--bad); color:var(--bad); background:var(--bad-bg); }
  .mini-btn[disabled] { opacity:.45; cursor:not-allowed; pointer-events:none; }
  /* 清单管理 */
  .cl-stats { display:flex; gap:26px; flex-wrap:wrap; padding:14px 18px; background:var(--brand-bg); border:1px solid var(--brand-bd); border-radius:var(--radius-sm); margin-bottom:18px; }
  .cl-stat .v { font-size:20px; font-weight:700; color:var(--brand); line-height:1.2; }
  .cl-stat .k { font-size:11.5px; color:var(--text-muted); margin-top:2px; }
  .cl-mod { border:1px solid var(--border); border-radius:var(--radius); margin-bottom:12px; overflow:hidden; }
  .cl-mod-head { display:flex; align-items:center; gap:10px; padding:13px 16px; background:#fafbfc; cursor:pointer; user-select:none; }
  .cl-mod-head:hover { background:#f5f6f8; }
  .cl-mod-ico { width:24px; height:24px; border-radius:var(--radius-sm); background:var(--brand); color:#fff; display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:700; flex-shrink:0; }
  .cl-mod-name { font-weight:600; font-size:14px; color:var(--text); flex:1; }
  .cl-mod-count { font-size:12px; color:var(--text-subtle); }
  .cl-mod-arrow { color:var(--text-subtle); font-size:12px; transition:transform .2s; }
  .cl-mod.collapsed .cl-mod-arrow { transform:rotate(-90deg); }
  .cl-mod.collapsed .cl-items { display:none; }
  .cl-item { display:flex; align-items:flex-start; gap:12px; padding:11px 16px; border-top:1px solid #f2f2f2; }
  .cl-item:hover { background:#fcfcfd; }
  .cl-item.off { background:#fafafa; }
  .cl-item.off .cl-t { text-decoration:line-through; color:var(--text-subtle); }
  .cl-id { font-family:ui-monospace,Menlo,monospace; font-size:11px; color:var(--text-subtle); background:#f2f3f5; padding:2px 6px; border-radius:var(--radius-sm); flex-shrink:0; margin-top:2px; min-width:34px; text-align:center; }
  .cl-body { flex:1; min-width:0; }
  .cl-t { font-size:13.5px; color:var(--text); font-weight:500; line-height:1.5; }
  .cl-meta { display:flex; gap:6px; align-items:center; margin-top:5px; flex-wrap:wrap; }
  .cl-tag { padding:1px 7px; border-radius:var(--radius-sm); font-size:11px; font-weight:600; }
  .cl-n { font-size:11.5px; color:var(--text-subtle); }
  .cl-acts { display:flex; gap:6px; flex-shrink:0; }
  .cl-edit-row { display:flex; flex-direction:column; gap:8px; flex:1; }
  .cl-input { border:1px solid var(--border); border-radius:var(--radius-sm); padding:7px 10px; font-size:13px; font-family:inherit; width:100%; }
  .cl-input:focus { outline:none; border-color:var(--brand); }
  .cl-edit-meta { display:flex; gap:8px; flex-wrap:wrap; }
  .cl-edit-meta select, .cl-edit-meta input { border:1px solid var(--border); border-radius:var(--radius-sm); padding:6px 9px; font-size:12.5px; font-family:inherit; }
  /* 同 components.css .modal select 那条注释：补回被上面 padding 吃掉的箭头空间。 */
  .cl-edit-meta select { padding-right:30px; }
  .cl-warn { font-size:12.5px; color:var(--text-muted); background:#fffbe6; border:1px solid #ffe58f; border-radius:var(--radius-sm); padding:11px 14px; margin-bottom:16px; line-height:1.7; }
