/* ════════════════════════════════════════════════════════════
   朝乾夕惕 · 全局样式（原生 CSS 变量，无框架）
   版本：v1.1（2026-09-01）
   ════════════════════════════════════════════════════════════ */

/* ════════════════════════════════════════════════════════════
   P6（2026-09-16）· 主题层
   ------------------------------------------------------------
   结构：
     :root, [data-theme="dark"]  ← 默认主题 = **深色**（Kyle 2026-09-16 拍板 B 档「标准」）
     [data-theme="light"]        ← 第二个主题 = 浅色（**保留，不删除**）
   ⭐ 浅色不是"要删掉的旧东西"，而是"另一个主题"：
      · 它既是**回退能力**（深色某处不可用 → 切一下就能对照）
      · 也是 Kyle「换皮肤」愿景的**地基**（判据 #6 就是验它不崩）
   ⭐ 默认值放在 `:root` 而不是 `[data-theme="dark"]`：
     即使 data-theme 属性因任何原因缺失，应用**仍然是深色**（不依赖 JS、无白闪）。
     同时显式提供 `[data-theme="dark"]` 选择器 —— 两处共用同一块，**没有第二份副本**。

   ⚠️ 三条语义角色是本次**新拆出来**的，不是笔误：
     1) --c-accent（深底上作**文字/图标/描边**，要够亮）
        vs --c-accent-solid（**按钮填充底**，其上放白字，要够暗）
        —— 实测：亮到能当文字读的蓝，白字压上去只有 3.16~3.45:1，**不过 WCAG AA 4.5**。
           一个值做不到同时干这两件事（见 06_诊断\P6_样板\一页说明.md §三 发现 1）。
     2) --c-surface（卡片）vs --c-inset（卡内凹陷块）
        —— 浅色里两者方向相反（卡白、凹陷更灰）；深色里必须**反过来**（卡亮、凹陷更暗）
           才能保住"凹陷"这个语义。用同一个变量会在深色下变成"凸起"。
     3) --c-on-status（状态色块上的字）
        —— 浅色状态色深 ⇒ 配白字；深色状态色亮 ⇒ 必须配**深字**。这是方向反转，不是换色号。
     4) --tone-*（5 个语气族 × 底色/描边/字色）
        —— 原样式里散着 ~30 个一次性淡色（#fdecea / #fff7e6 / #f4fbf6 / #f6f4fc …），
           本质是"红/黄/绿/紫/蓝 五个语气"的浅底变体。收成token 才能换主题（判据 #2）。

   浅色块的值 = **开工前 :root 的原值逐字保留**（可复核，见 06_诊断\P6_证据）。
   ════════════════════════════════════════════════════════════ */
:root, [data-theme="dark"] {
  color-scheme: dark;

  /* ── 表面层级（深色 UI 的抬升 = 更亮，与浅色相反）── */
  --c-bg:          #10192b;   /* 页面底 */
  --c-surface:     #1a2540;   /* 卡片 / 面板（**= 应用母品牌 navy**，与 P3 工作台一脉相承）*/
  --c-surface-2:   #243158;   /* 卡内抬升层（= 原 --navy-2）*/
  --c-inset:       #16223a;   /* 卡内凹陷层（比卡片更深 —— 保住"凹陷"语义）*/
  --c-chrome:      #0c1424;   /* 顶栏 / 底部栏 / 侧栏（**比页面更深**，与参考实现层级一致）*/
  --c-chrome-2:    #16223a;   /* chrome 上的次级块 */

  /* ── 线条 ── */
  --c-line:        #35456e;
  --c-line-strong: #3d4a6d;

  /* ── 文字 ── */
  --c-text:        #e8ecf5;
  --c-text-2:      #9aa7c2;
  --c-text-3:      #8494b2;   /* 提示文字：12px 小字也过严格 4.5:1（4.96:1）*/
  --c-text-dim:    #6b7893;   /* 占位符 / 失效态 */
  --c-text-on-chrome: #e8ecf5;

  /* ── 强调（拆成两个角色，见上）── */
  --c-accent:         #6b9dff;
  --c-accent-solid:   #2a5bd7;
  --c-accent-solid-2: #2550c0;   /* 按下 / hover 的第二档（原 --navy-2 的角色）*/
  --c-accent-soft:    #1e2d4f;
  --c-text-on-accent: #ffffff;
  --c-link:           #8ab4ff;
  --c-hover:          rgba(255, 255, 255, .06);
  --c-overlay:        rgba(4, 8, 16, .72);
  --c-focus-ring:     rgba(107, 157, 255, .45);

  /* ── 状态色（**深底上必须提亮**：原 #d93026 在白底好看，深底上偏暗）── */
  --s-p0:     #ff6b5e;
  --s-p1:     #f2b13c;
  --s-p2:     #8b98ad;
  --s-done:   #48c17f;
  --c-on-status: #14181f;   /* 亮色状态块上放**深字**（方向反转，见上）*/

  /* ── 日课能量档 ── */
  --energy-hi:  #48c17f;
  --energy-mid: #f2b13c;
  --energy-lo:  #ff6b5e;

  /* ── 日历类别色（白底好看的色相在深底上普遍偏暗 ⇒ 逐个提亮）── */
  --cat-work:     #4f86f7;
  --cat-family:   #f28cb0;
  --cat-personal: #9b86f5;
  --cat-health:   #48c17f;
  --cat-client:   #f0a04b;

  /* ── 语气族（红 / 黄 / 绿 / 紫 / 蓝 / 灰）——
      替代原来散落的一次性淡色，是"零硬编码"的关键（判据 #2）── */
  --tone-red-bg:     #3a1d1d;
  --tone-red-line:   #7a3630;
  --tone-red-text:   #ff9f95;
  --tone-amber-bg:   #3a2c12;
  --tone-amber-line: #7a5c22;
  --tone-amber-text: #f5c26b;
  --tone-green-bg:   #16301f;
  --tone-green-line: #2f6141;
  --tone-green-text: #6fd39a;
  --tone-violet-bg:  #241f3d;
  --tone-violet-line:#453a75;
  --tone-violet-text:#b3a0f5;
  --tone-blue-bg:    #16243f;
  --tone-blue-line:  #2f4a7a;
  --tone-blue-text:  #8ab4ff;
  --tone-grey-bg:    #1f2735;
  --tone-grey-line:  #33405a;
  --tone-grey-text:  #9aa7c2;

  /* ── 阴影：**重做**。原来的 rgba 黑在深底上会"看不见或发灰" ⇒ 更深 + 靠描边兜底 ── */
  --c-shadow:    0 1px 2px rgba(0, 0, 0, .45);
  --c-shadow-lg: 0 8px 28px rgba(0, 0, 0, .55);

  /* ── 布局（**与主题无关**，两个主题共用；--max-w 手机值一字未改）── */
  --radius: 10px;
  --radius-sm: 6px;
  --topbar-h: 52px;
  --tabbar-h: 58px;
  --sidebar-w: 248px;
  --gap: 12px;
  --max-w: 640px;
}

/* ── 主题二：浅色（值 = 开工前 :root 原值逐字保留）────────────────
   ⚠️ 保留它不是"留着旧代码"，而是：① 回退能力 ② 皮肤系统地基（判据 #6）*/
[data-theme="light"] {
  color-scheme: light;

  --c-bg:          #f5f6f9;
  --c-surface:     #ffffff;
  --c-surface-2:   #fafbfd;
  --c-inset:       #f5f6f9;
  --c-chrome:      #1a2540;
  --c-chrome-2:    #243158;

  --c-line:        #e4e7ee;
  --c-line-strong: #d5dae5;

  --c-text:        #1a1f2e;
  --c-text-2:      #5a6478;
  --c-text-3:      #98a1b3;
  --c-text-dim:    #a5adba;
  --c-text-on-chrome: #ffffff;

  --c-accent:         #2f6df6;
  --c-accent-solid:   #2f6df6;
  --c-accent-solid-2: #243158;   /* = 原 --navy-2（浅色主题按下态逐像素不变）*/
  --c-accent-soft:    #e8effe;
  --c-text-on-accent: #ffffff;
  --c-link:           #2f6df6;
  --c-hover:          rgba(0, 0, 0, .05);
  --c-overlay:        rgba(20, 26, 44, .5);
  --c-focus-ring:     rgba(47, 109, 246, .18);

  --s-p0:     #d93026;
  --s-p1:     #e8a33d;
  --s-p2:     #98a1b3;
  --s-done:   #2e9e5b;
  --c-on-status: #ffffff;

  --energy-hi:  #2e9e5b;
  --energy-mid: #e8a33d;
  --energy-lo:  #d93026;

  --cat-work:     #2f6df6;
  --cat-family:   #e8739a;
  --cat-personal: #6c5ce7;
  --cat-health:   #2e9e5b;
  --cat-client:   #e8913d;

  --tone-red-bg:     #fdecea;
  --tone-red-line:   #f5b5ae;
  --tone-red-text:   #d93026;
  --tone-amber-bg:   #fff7e6;
  --tone-amber-line: #ffd591;
  --tone-amber-text: #b54708;
  --tone-green-bg:   #f4fbf6;
  --tone-green-line: #cfe3d6;
  --tone-green-text: #2c7a44;
  --tone-violet-bg:  #f6f4fc;
  --tone-violet-line:#d9d2ee;
  --tone-violet-text:#5c4b9a;
  --tone-blue-bg:    #fbfcff;
  --tone-blue-line:  #e8effe;
  --tone-blue-text:  #2f6df6;
  --tone-grey-bg:    #f0f1f5;
  --tone-grey-line:  #e4e7ee;
  --tone-grey-text:  #5a6478;

  --c-shadow:    0 1px 3px rgba(20, 26, 44, 0.08);
  --c-shadow-lg: 0 6px 24px rgba(20, 26, 44, 0.12);
}

* { box-sizing: border-box; margin: 0; padding: 0; }

html, body { height: 100%; }

body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif;
  background: var(--c-bg);
  color: var(--c-text);
  font-size: 15px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
}

.hidden { display: none !important; }

/* ── 通用控件 ─────────────────────────────── */
button { font-family: inherit; cursor: pointer; border: none; background: none; color: inherit; }
input, textarea, select { font-family: inherit; font-size: 15px; color: var(--c-text); }
input::placeholder, textarea::placeholder { color: var(--c-text-3); }

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 9px 16px; border-radius: var(--radius-sm);
  font-size: 14px; font-weight: 500; line-height: 1.2;
  transition: background 0.15s, opacity 0.15s; white-space: nowrap;
}
.btn:disabled { opacity: 0.5; cursor: not-allowed; }
.btn-primary { background: var(--c-accent-solid); color: var(--c-text-on-accent); }
.btn-primary:active { background: var(--c-accent-solid-2); }
.btn-ghost { background: transparent; color: var(--c-text-2); }
.btn-ghost:active { background: var(--c-hover); }
.btn-outline { background: var(--c-surface); color: var(--c-text); border: 1px solid var(--c-line); }
.btn-danger { background: var(--c-surface); color: var(--s-p0); border: 1px solid var(--tone-red-line); }
.btn-sm { padding: 5px 10px; font-size: 13px; }
.btn-block { width: 100%; }

.field { display: block; margin-bottom: 14px; }
.field > span { display: block; font-size: 13px; color: var(--c-text-2); margin-bottom: 5px; font-weight: 500; }
.field input, .field textarea, .field select {
  width: 100%; padding: 10px 12px; border: 1px solid var(--c-line);
  border-radius: var(--radius-sm); background: var(--c-surface); color: var(--c-text); outline: none;
}
.field input:focus, .field textarea:focus, .field select:focus { border-color: var(--c-accent); }

/* ── 提示条 ─────────────────────────────── */
.toast {
  position: fixed; left: 50%; bottom: calc(var(--tabbar-h) + 16px);
  transform: translateX(-50%); z-index: 100;
  background: var(--c-surface-2); color: var(--c-text); border: 1px solid var(--c-line); padding: 10px 18px;
  border-radius: 20px; font-size: 14px; max-width: 90vw;
  box-shadow: var(--c-shadow-lg); animation: toast-in 0.2s ease;
}
.toast.toast-error { background: var(--s-p0); }
@keyframes toast-in { from { opacity: 0; transform: translate(-50%, 8px); } to { opacity: 1; transform: translate(-50%, 0); } }

/* ── 登录页 ─────────────────────────────── */
.login-view {
  min-height: 100vh; display: flex; align-items: center; justify-content: center;
    padding: 24px; background: linear-gradient(160deg, var(--c-chrome) 0%, var(--c-chrome-2) 100%);
}
.login-card {
  width: 100%; max-width: 360px; background: var(--c-surface);
  border-radius: var(--radius); padding: 32px 28px; box-shadow: var(--c-shadow-lg);
}
.login-logo { font-size: 28px; font-weight: 700; color: var(--c-text); letter-spacing: 2px; text-align: center; }
.login-sub { text-align: center; color: var(--c-text-2); font-size: 13px; margin: 6px 0 24px; }
.login-hint { margin-top: 16px; text-align: center; font-size: 12px; color: var(--c-text-3); }
.error-text { color: var(--s-p0); font-size: 13px; margin-bottom: 10px; }

/* ── 应用壳 ─────────────────────────────── */
.app-view { max-width: var(--max-w); margin: 0 auto; min-height: 100vh; display: flex; flex-direction: column; }

.topbar {
  position: sticky; top: 0; z-index: 20;
  height: var(--topbar-h); display: flex; align-items: center; justify-content: space-between;
  padding: 0 16px; background: var(--c-chrome); color: var(--c-text-on-chrome); border-bottom: 1px solid var(--c-line);
}
.topbar-brand { font-size: 16px; font-weight: 600; }
.topbar-actions .btn-ghost { color: var(--c-text-on-chrome); opacity: .85; font-size: 13px; padding: 6px 10px; }

.main { flex: 1; padding: var(--gap); padding-bottom: calc(var(--tabbar-h) + 20px); }

.tabbar {
  position: fixed; left: 50%; transform: translateX(-50%);
  bottom: 0; width: 100%; max-width: var(--max-w);
  height: var(--tabbar-h); display: flex; background: var(--c-chrome);
  border-top: 1px solid var(--c-line); z-index: 20;
  padding-bottom: env(safe-area-inset-bottom);
}
.tab-btn {
  flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 2px; font-size: 11px; color: var(--c-text-2);
}
/* P6：图标由 background-image 改为 **mask-image + currentColor**。
   原因：data-URI 里写着 stroke='%235a6478' 这类**硬编码颜色**，换主题时不会跟着变
   —— 深色顶栏上那些灰蓝描边会糊掉。mask 只取 SVG 的 alpha 通道，
   于是图标颜色 = 当前文字色（currentColor），**两个主题自动都对**，且不再有硬编码色值。
   代价（**有意**，见 P6 红绿表「有意变更」）：梦想页的"彩虹"三色图标变成随主题的单色。 */
.tab-btn::before {
  content: ""; width: 22px; height: 22px; border-radius: 7px;
  background-color: currentColor;
  -webkit-mask-size: contain; mask-size: contain;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  opacity: 0.75;
}
.tab-btn[data-tab="#/"]::before      { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235a6478' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M3 12h4l2-7 4 14 2-7h6'/%3E%3C/svg%3E"); }
.tab-btn[data-tab="#/dreams"]::before  { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M2 17a10 10 0 0 1 20 0' stroke='%23d93026'/%3E%3Cpath d='M5 17a7 7 0 0 1 14 0' stroke='%23e8a33d'/%3E%3Cpath d='M8 17a4 4 0 0 1 8 0' stroke='%232e9e5b'/%3E%3C/svg%3E"); }
.tab-btn[data-tab="#/lists"]::before   { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235a6478' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M9 6h11M9 12h11M9 18h11M4 6h.01M4 12h.01M4 18h.01'/%3E%3C/svg%3E"); }
.tab-btn[data-tab="#/rinke"]::before   { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235a6478' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M12 3v2M12 19v2M3 12h2M19 12h2M5.6 5.6l1.4 1.4M17 17l1.4 1.4M17 7l1.4-1.4M5.6 18.4L7 17'/%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3C/svg%3E"); }
.tab-btn[data-tab="#/calendar"]::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235a6478' stroke-width='2' stroke-linecap='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cpath d='M8 3v4M16 3v4M3 9h18'/%3E%3C/svg%3E"); }
/* ⚠️ 【P9-2 有意删除】`.tab-btn[data-tab="#/persona"]::before` 的图标规则已随
   分身导航项一起移除（那个目的地不存在了，留着只会是"指向不存在元素"的又一处债务）。 */
/* P3：工作台板块图标（沿用同款 24×24 stroke 风格，不引图标库）—— 仪表盘/表盘 */
.tab-btn[data-tab="#/workbench"]::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235a6478' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M3.5 18a9 9 0 1 1 17 0'/%3E%3Cpath d='M12 18l3.5-5.5'/%3E%3Cpath d='M3.5 18h17'/%3E%3C/svg%3E"); }

.tab-btn.active { color: var(--c-accent); font-weight: 600; }
.tab-btn.active::before { opacity: 1; stroke: var(--c-accent); }

/* ══════════════════════ P9 ·「道术器用」四组导航 ══════════════════════
   为什么仍然是**同一份 DOM**：`nav.tabbar#tabbar` 是唯一导航（P6 的设计决定）。
   P9 只在它**内部**加了分组容器 `.tab-group > (.tab-group-btn + .tab-sub)`，
   没有新建第二个 nav —— 所以手机端自动也能到达「器」层的 3 个新模块。

   ⚠️ 组按钮是**纯文字**（道/术/器/用），必须把 P6 的图标 mask 关掉：
      `.tab-btn::before` 默认是一个 22px 的方块（background-color: currentColor +
      mask-image 由 `[data-tab="…"]` 提供）。组按钮没有 data-tab ⇒ 没有 mask ⇒
      会渲染成一坨实心方块。所以下面第一条规则就是把它 display:none。 */
.tab-btn[data-group-btn]::before { display: none; }
.tab-group-btn {
  letter-spacing: 2px; font-weight: 650; font-size: 13px;
  color: var(--c-text-on-chrome);
}
.tab-group-btn::after {
  /* 展开指示小三角（纯 CSS，不引图标库；颜色随 currentColor） */
  content: ""; width: 0; height: 0; margin-top: 3px;
  border-left: 4px solid transparent; border-right: 4px solid transparent;
  border-top: 5px solid currentColor; opacity: .55;
  transition: transform .15s ease;
}
.tab-group.open > .tab-group-btn::after { transform: rotate(180deg); }
.tab-group-btn.active { color: var(--c-accent); font-weight: 700; }

.tab-group { flex: 1; display: flex; flex-direction: column; position: relative; min-width: 0; }
.tab-group > .tab-group-btn { flex: 1; }

/* ── 手机端（≤1023px）：子菜单 = **弹出层**（不是横向排开，避免横滚） ── */
.tab-sub {
  position: absolute; bottom: calc(100% + 8px); left: 0;
  display: none; flex-direction: column; gap: 2px;
  min-width: 136px; max-width: calc(100vw - 20px);
  padding: 6px; border-radius: 12px;
  background: var(--c-surface); border: 1px solid var(--c-line);
  box-shadow: var(--c-shadow); z-index: 25;
}
.tab-group.open > .tab-sub { display: flex; }
.tab-sub-btn {
  flex: none; flex-direction: row; justify-content: flex-start;
  gap: 8px; min-height: 40px; padding: 8px 10px; border-radius: 8px;
  font-size: 13.5px; color: var(--c-text); white-space: nowrap;
}
.tab-sub-btn.active { background: var(--c-accent-solid); color: var(--c-text-on-accent); }
.tab-ico { font-size: 15px; line-height: 1; }
/* 由 wb_modules（数据）渲染出来的模块项：用**数据里的 icon**，不用 CSS mask */
.tab-mod-btn::before { display: none; }
/* 读不到模块清单时的**显式错误态**（E25：不许留白让人以为「器层本来就没东西」） */
.tab-sub-empty {
  padding: 8px 10px; font-size: 12.5px; color: var(--c-text-2); white-space: normal;
  max-width: 220px; line-height: 1.5;
}
.tab-sub-note { color: var(--c-text-3); font-size: 11.5px; }
.tab-sub-retry { margin-top: 6px; }
/* ⚠️ 【P9-2 有意删除】`.tab-group-solo` / `.tab-solo-btn`（那个"四组之后的独立分身项"）的样式
   已随导航项一起移除；桌面端媒体查询里的同款规则也已删。
   ⇒ 导航现在**恰好 4 组、4 个组按钮、0 个独立项**（判据 28.1 / 29.6 已按新应然改写）。 */

/* ── 卡片与通用区块 ─────────────────────── */
.card {
  background: var(--c-surface); border-radius: var(--radius); border: 1px solid var(--c-line);
  padding: 14px; box-shadow: var(--c-shadow); margin-bottom: var(--gap);
}
.card-title { font-size: 15px; font-weight: 600; margin-bottom: 10px; display: flex; align-items: center; justify-content: space-between; }
.section-title { font-size: 14px; font-weight: 600; color: var(--c-text-2); margin: 16px 0 8px; }

.empty-hint { color: var(--c-text-3); font-size: 13px; padding: 12px 0; text-align: center; }

/* ── 今日看板 ─────────────────────────────── */
.board-grid { display: flex; flex-direction: column; gap: var(--gap); }
.board-section-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.board-section-head h3 { font-size: 14px; font-weight: 600; color: var(--c-text-2); }
.board-section-head .link { font-size: 12px; color: var(--c-accent); }

.today-list { list-style: none; }
.today-list li {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 4px; border-bottom: 1px solid var(--c-line);
}
.today-list li:last-child { border-bottom: none; }

.priority-badge {
  flex: none; width: 22px; height: 22px; border-radius: 6px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 600; color: var(--c-on-status);
}
.priority-badge.p0 { background: var(--s-p0); }
.priority-badge.p1 { background: var(--s-p1); }
.priority-badge.p2 { background: var(--s-p2); }

.today-task-title { flex: 1; font-size: 14px; }
.today-task-title.done-text { text-decoration: line-through; color: var(--c-text-3); }

.checkbox {
  flex: none; width: 20px; height: 20px; border-radius: 50%;
  border: 2px solid var(--c-line); background: var(--c-surface); position: relative;
  transition: all 0.15s;
}
.checkbox.checked { background: var(--s-done); border-color: var(--s-done); }
.checkbox.checked::after {
  content: ""; position: absolute; left: 6px; top: 2.5px;
  width: 5px; height: 9px; border: solid var(--c-text-on-accent); border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

.event-item { display: flex; align-items: center; gap: 10px; padding: 9px 4px; border-bottom: 1px solid var(--c-line); }
.event-item:last-child { border-bottom: none; }
.event-time { flex: none; font-size: 13px; font-weight: 600; color: var(--c-text-2); width: 52px; }
.event-title { flex: 1; font-size: 14px; }
.event-cat { flex: none; font-size: 11px; color: var(--c-on-status); border-radius: 10px; padding: 2px 8px; }
.event-cat.work { background: var(--cat-work); }
.event-cat.family { background: var(--cat-family); }
.event-cat.personal { background: var(--cat-personal); }
.event-cat.health { background: var(--cat-health); }
.event-cat.client { background: var(--cat-client); }

.entry-status-card { display: flex; gap: 10px; }
.entry-status {
  flex: 1; border: 1px solid var(--c-line); border-radius: var(--radius);
  padding: 12px; background: var(--c-surface); text-align: left;
}
.entry-status .es-label { font-size: 13px; font-weight: 600; color: var(--c-text-2); }
.entry-status .es-state { font-size: 12px; color: var(--c-text-3); margin-top: 2px; }
.entry-status.done { border-color: var(--s-done); background: var(--tone-green-bg); }
.entry-status.done .es-state { color: var(--s-done); }

.quick-actions { display: flex; gap: 8px; }
.quick-actions .btn { flex: 1; }

/* ── 清单（四级树） ─────────────────────── */
/* Wave 3F：删除 .domain-tabs / .domain-tab —— ABCD 域 tab 早在 v1.5 就被季度目标导航 .q-tab 取代，
 * 全仓（js/index.html/css）已无任何引用，留着就是死规则。 */

/* ── 清单页 v1.5 · 季度目标导航（澳洲财年当季 tab，替代 ABCD 域 tab） ── */
.q-tabs { display: flex; align-items: center; gap: 6px; margin-bottom: 12px; flex-wrap: wrap; }
.q-tab {
  display: inline-flex; align-items: center; gap: 5px; max-width: 100%;
  padding: 6px 12px; border-radius: 16px; font-size: 13px;
  background: var(--c-surface-2); border: 1px solid var(--c-line); color: var(--c-text-2); cursor: pointer;
}
.q-tab .q-ic { flex: none; font-size: 13px; line-height: 1; }
.q-tab .q-tx { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* P6：拆掉 max-width:170px 硬截断（判据 #10）—— 桌面下不再出省略号；
   窄屏仍靠 .q-tabs 的 flex-wrap 换行，不产生横向滚动。 */
.q-tab .q-q {
  flex: none; font-size: 10px; font-weight: 700; line-height: 1.6;
  background: var(--c-accent-soft); color: var(--c-accent); border-radius: 8px; padding: 0 6px;
}
.q-tab.active { background: var(--c-accent-solid); color: var(--c-text-on-accent); border-color: var(--c-accent-solid); }
.q-tab.active .q-q { background: var(--c-hover); color: var(--c-text-on-accent); }
.g-strat-free { background: var(--tone-grey-bg) !important; color: var(--tone-grey-text) !important; border-color: var(--tone-grey-line) !important; }

.tree-goal { border: 1px solid var(--c-line); border-radius: var(--radius); background: var(--c-surface); margin-bottom: var(--gap); overflow: hidden; }
.tree-goal-head {
  display: flex; align-items: center; gap: 8px; padding: 12px 14px;
  background: var(--c-surface-2); color: var(--c-text); cursor: pointer;
}
/* Wave 3F：删除 .g-domain（目标卡域字母徽标已移除，改用 🗂 战略归属标签），全仓无引用 */
.tree-goal-head .g-title { flex: 1; font-weight: 600; font-size: 15px; }
.tree-goal-head .g-status { font-size: 11px; padding: 2px 8px; border-radius: 10px; background: var(--c-hover); }
.tree-goal-body { padding: 8px 12px; }

.tree-project { margin: 6px 0; border: 1px solid var(--c-line); border-radius: var(--radius-sm); }
.tree-project-head {
  display: flex; align-items: center; gap: 8px; padding: 10px 12px;
  background: var(--c-accent-soft); cursor: pointer; border-radius: var(--radius-sm);
}
.tree-project-head .p-title { flex: 1; font-weight: 600; font-size: 14px; }
.tree-project-head .p-deadline { font-size: 12px; color: var(--c-text-2); }
.tree-project-body { padding: 6px 10px; }

.tree-list { margin: 6px 0; }
.tree-list-head {
  display: flex; align-items: center; gap: 8px; padding: 8px 10px; cursor: pointer;
  border-radius: var(--radius-sm);
}
.tree-list-head:hover { background: var(--c-bg); }
.tree-list-head .l-title { flex: 1; font-weight: 500; font-size: 14px; }
.tree-list-body { padding: 2px 6px 6px; }

.tree-task {
  display: flex; align-items: center; gap: 8px; padding: 7px 8px;
  border-radius: var(--radius-sm);
}
.tree-task:hover { background: var(--c-bg); }
.tree-task .t-title { flex: 1; font-size: 14px; }
.tree-task .t-title.done-text { text-decoration: line-through; color: var(--c-text-3); }
.tree-task .t-deadline { font-size: 12px; color: var(--c-text-3); flex: none; }
/* Wave 3F：任务行不再显示 ABCD 域记号；看板「今日待办」行改显示「所属清单」，用 .t-belong 呈现 */
.t-belong { flex: none; font-size: 11px; color: var(--c-text-3); border: 1px solid var(--c-line); border-radius: 8px; padding: 0 6px; }

.row-actions { display: flex; gap: 4px; flex: none; }
.row-actions .btn { padding: 3px 7px; font-size: 12px; }

/* 折叠（v1.6）：head 收起态隐藏相邻 body —— 逐层独立（目标→项目→清单）
 * 旧规则 .collapsed .tree-project-body 是祖先包裹语义，而 collapsed 加在 head（body 兄弟）上，永远匹配不到 → 点击折叠从未生效；现改为相邻兄弟选择器（同梦想版 .d-*-head.d-collapsed + .d-*-body 写法） */
.tree-goal-head.collapsed + .tree-goal-body,
.tree-project-head.collapsed + .tree-project-body,
.tree-list-head.collapsed + .tree-list-body { display: none; }
/* 开合指示 caret：展开 ▾ / 收起 ▸（rotate -90deg） */
.tc {
  flex: none; width: 14px; text-align: center; font-size: 11px;
  color: inherit; opacity: .85; display: inline-block;
  transition: transform .15s ease;
}
.tree-goal-head.collapsed .tc,
.tree-project-head.collapsed .tc,
.tree-list-head.collapsed .tc { transform: rotate(-90deg); }
/* 清单工具栏（v1.6：新增目标 + 全开/收起） */
.list-toolbar { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; flex-wrap: wrap; }
.list-toolbar .lt-spacer { flex: 1; }

/* ── 日课 ─────────────────────────────── */
.rinke-tabs { display: flex; gap: 6px; margin-bottom: 14px; }
.rinke-tab {
  flex: 1; padding: 9px 0; text-align: center; font-size: 14px; font-weight: 500;
  background: var(--c-surface-2); border: 1px solid var(--c-line); border-radius: var(--radius-sm);
  color: var(--c-text-2);
}
.rinke-tab.active { background: var(--c-accent-solid); color: var(--c-text-on-accent); border-color: var(--c-accent-solid); }

.rinke-form .field textarea { min-height: 96px; resize: vertical; }
.scale-row { display: flex; gap: 16px; margin-bottom: 14px; }
.scale { flex: 1; }
.scale > span { display: block; font-size: 13px; color: var(--c-text-2); margin-bottom: 6px; font-weight: 500; }
.scale input[type="range"] { width: 100%; accent-color: var(--c-accent); }
.scale-val { font-size: 12px; color: var(--c-text-2); margin-top: 2px; }

.rinke-history { list-style: none; }
.rinke-history li { display: flex; justify-content: space-between; align-items: center; padding: 10px 4px; border-bottom: 1px solid var(--c-line); }
.rinke-history li:last-child { border-bottom: none; }
.rinke-history .rh-date { font-size: 14px; font-weight: 500; }
.rinke-history .rh-type { font-size: 12px; color: var(--c-text-3); }
.rinke-history .rh-preview { font-size: 12px; color: var(--c-text-2); flex: 1; text-align: right; margin: 0 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ── 日历 ─────────────────────────────── */
.cal-nav { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.cal-nav .cal-week-label { font-size: 15px; font-weight: 600; }
.cal-nav .cal-nav-btns { display: flex; gap: 6px; }

.cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; margin-bottom: 10px; }
.cal-day-head { text-align: center; font-size: 11px; color: var(--c-text-2); padding: 4px 0; }
.cal-day {
  min-height: 56px; background: var(--c-surface); border: 1px solid var(--c-line);
  border-radius: var(--radius-sm); padding: 3px; position: relative; cursor: pointer;
}
.cal-day.today { border-color: var(--c-accent); background: var(--c-accent-soft); }
.cal-day .cal-day-num { font-size: 12px; font-weight: 600; color: var(--c-text-2); }
.cal-day .cal-day-count { position: absolute; top: 3px; right: 5px; font-size: 10px; color: var(--c-text-3); }
.cal-day .cal-day-dots { position: absolute; bottom: 3px; left: 3px; display: flex; gap: 2px; }
.cal-day .cal-day-dots .dot { width: 5px; height: 5px; border-radius: 50%; }

.cal-day-detail { margin-top: 8px; }
.cal-event {
  display: flex; align-items: center; gap: 8px; padding: 8px 4px;
  border-bottom: 1px solid var(--c-line); cursor: pointer;
}
.cal-event:last-child { border-bottom: none; }
.cal-event .ce-color { flex: none; width: 4px; align-self: stretch; border-radius: 2px; }

.modal-backdrop {
    position: fixed; inset: 0; background: var(--c-overlay);
  display: flex; align-items: center; justify-content: center; z-index: 50; padding: 20px;
}
.modal {
  width: 100%; max-width: 420px; background: var(--c-surface); border-radius: var(--radius);
  padding: 20px; box-shadow: var(--c-shadow-lg); max-height: 88vh; overflow-y: auto;
}
.modal h3 { font-size: 16px; font-weight: 600; margin-bottom: 14px; }
.modal-actions { display: flex; gap: 8px; margin-top: 8px; justify-content: flex-end; }

/* ⚠️ 【P9-2 有意删除】原先这里是「分身页」的一整段样式：
   `.persona-card / .persona-head / .persona-avatar / .persona-name / .persona-type /
    .persona-role / .persona-cap-title / .persona-caps / .persona-profile / .ai-params-note /
    .persona-check / .ai-panel / .ai-offline-note / .cap-block / .cap-title / .cap-desc /
    .ai-offline-tag / .persona-ask / .ask-thread / .ask-empty / .ask-msg / .ask-user / .ask-bot /
    .ask-err / .ask-input-row / .cap-chips / .cap-chip / .cap-forms`
   它们只服务那个已经不存在的页面（本段实测：`js/` 里对这些类名的引用数 = 0）。
   ⚠️ **保留**下面这些**仍在用**的能力基建：`.cap-inline / .cap-form / .ai-busy /
      .ai-result-title / .ai-text / .ai-error / .ai-sub / .ai-task-list / .ai-deadline /
      .ai-stats / .email-block / .email-subject / .email-body`
      —— 它们现在服务于**各页就地的 AI 能力**（代写邮件在今日 · 调度建议在日课 ·
      目标梳理在清单页与工作台 · 周计划在日历）。 */

/* ── 分身 · Wave 2.5 AI 面板（**只保留仍在用的那几条**） ─────────── */
.ai-sub { font-size: 12px; color: var(--c-text-3); margin-bottom: 8px; }
.cap-inline { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
.cap-inline input[type="date"], .cap-inline select { font-size: 13px; padding: 6px 8px; border: 1px solid var(--c-line); border-radius: var(--radius-sm); background: var(--c-surface); color: var(--c-text); }
.cap-inline textarea { width: 100%; font-size: 13px; padding: 8px; border: 1px solid var(--c-line); border-radius: var(--radius-sm); resize: vertical; }
.ai-busy { font-size: 12px; color: var(--c-accent); }
.btn:disabled { opacity: .45; cursor: not-allowed; }
.ai-result-title { font-size: 13px; font-weight: 600; color: var(--c-accent); margin-bottom: 8px; }
.ai-text { font-size: 13px; line-height: 1.7; background: var(--c-bg); border-radius: var(--radius-sm); padding: 10px; white-space: normal; }
.ai-error { font-size: 13px; color: var(--tone-red-text); background: var(--tone-red-bg); border: 1px solid var(--tone-red-line); border-radius: var(--radius-sm); padding: 10px; }
.ai-task-list { list-style: none; }
.ai-task-list li { font-size: 13px; padding: 5px 0; display: flex; align-items: center; gap: 8px; }
.ai-deadline { font-size: 12px; color: var(--c-text-3); }
.ai-stats { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
.ai-stats span { font-size: 12px; background: var(--c-accent-soft); color: var(--c-accent); padding: 3px 10px; border-radius: 12px; }

/* ── P9-2 · 各页「就地能力」的基建（**.cap-form / .email-* 从分身页搬过来，一份实现**） ── */
.cap-form { border-top: 1px solid var(--c-line); margin-top: 12px; padding-top: 12px; }
.cap-form .field { margin-bottom: 8px; }
.cap-form textarea { width: 100%; font-size: 13px; padding: 8px; border: 1px solid var(--c-line); border-radius: var(--radius-sm); resize: vertical; }

.email-block { background: var(--c-bg); border: 1px solid var(--c-line); border-radius: var(--radius-sm); padding: 12px; }
.email-subject { font-size: 13px; font-weight: 600; color: var(--c-text); margin-bottom: 8px; word-break: break-word; }
.email-body { font-family: inherit; font-size: 13px; line-height: 1.7; white-space: pre-wrap; word-break: break-word; margin: 0; color: var(--c-text); }

/* ── P9-2 ·「目标梳理」就地面板（js/clarify.js；清单页目标卡 + 工作台疑难池共用） ──
   ⚠️ **不是**一个页面：它是宿主 DOM 里的一小块，所以只给边框/间距，不占位（空时 display:none）。 */
.cl-zone { margin-top: 8px; }
.cl-zone:empty { display: none; }
.cl-panel {
  border: 1px solid var(--c-line); border-left: 3px solid var(--c-accent);
  border-radius: var(--radius-sm); background: var(--c-bg); padding: 10px 12px; margin-top: 6px;
}
.cl-head { display: flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 600; color: var(--c-text-2); margin-bottom: 8px; }
.cl-head .cl-close { margin-left: auto; }
.cl-panel .field textarea { width: 100%; font-size: 13px; padding: 8px; border: 1px solid var(--c-line); border-radius: var(--radius-sm); resize: vertical; }
.cl-done { color: var(--s-done); }
/* 周计划 / 代写邮件两张就地卡：沿用既有卡片与提示样式，只补一个间距归零的头部计数 */
.cal-weekly .wb-count, .board-comm .wb-count { font-size: 12px; color: var(--c-text-3); }

/* ── 响应式：桌面 ─────────────────────────────── */
@media (min-width: 768px) {
  .topbar { border-radius: 0 0 10px 10px; }
    .tabbar { border-radius: 12px 12px 0 0; box-shadow: var(--c-shadow); }
  .cal-day { min-height: 72px; }
}

/* ── 游离区 + 拖拽归位（v1.2） ─────────────────── */
.tree-goal.tree-orphan { border-style: dashed; background: var(--tone-blue-bg); }
.tree-goal.tree-orphan .tree-goal-head { background: var(--c-text-2); }
.tree-goal.tree-orphan .tree-goal-head .g-title { font-weight: 600; }
.tree-project-head[draggable="true"], .tree-task[draggable="true"] { cursor: grab; }
.tree-project-head[draggable="true"]:active, .tree-task[draggable="true"]:active { cursor: grabbing; }
.drag-over { outline: 2px dashed var(--c-accent); outline-offset: -2px; background: var(--c-accent-soft) !important; }

/* ── 梦想版战略层（v1.3） ─────────────────── */
.dream-sub { font-size: 12px; color: var(--c-text-2); margin: 2px 0 10px; }
.dir-chips { display: flex; gap: 6px; overflow-x: auto; padding: 2px 0 10px; scrollbar-width: none; }
.dir-chips::-webkit-scrollbar { display: none; }
.dir-chip { flex: none; padding: 6px 12px; border-radius: 999px; border: 1px solid var(--c-line); background: var(--c-surface-2); color: var(--c-text-2); font-size: 13px; cursor: pointer; }
.dir-chip.active { background: var(--c-accent-solid); border-color: var(--c-accent-solid); color: var(--c-text-on-accent); font-weight: 600; }
.d-dir { margin-bottom: 14px; }
.d-dir-head { display: flex; align-items: center; gap: 8px; padding: 10px 14px; background: var(--c-surface-2); border-radius: var(--radius) var(--radius) 0 0; color: var(--c-text); }
.d-dir-icon { font-size: 18px; }
.d-dir-name { font-size: 15px; font-weight: 700; flex: 1; }
.d-dir-body { background: var(--c-surface); border: 1px solid var(--c-line); border-top: none; border-radius: 0 0 var(--radius) var(--radius); padding: 8px; }
.d-card { border: 1px solid var(--c-line); border-radius: var(--radius-sm); margin: 8px 0; background: var(--c-surface); }
.d-card.d-dormant { opacity: .58; filter: saturate(.45); }
.d-card-head { display: flex; align-items: center; gap: 8px; padding: 8px 10px; background: var(--c-accent-soft); border-radius: var(--radius-sm) var(--radius-sm) 0 0; flex-wrap: wrap; }
.d-card.d-dormant .d-card-head { background: var(--tone-grey-bg); }
.d-title { font-weight: 600; font-size: 14px; flex: 1; min-width: 120px; }
.d-card.d-dormant .d-title { color: var(--c-text-2); }
.d-badge { flex: none; font-size: 11px; padding: 2px 8px; border-radius: 999px; background: var(--c-accent-solid); color: var(--c-text-on-accent); }
.d-badge.ms { background: var(--s-p1); color: var(--c-on-status); }
.d-badge.ms.ok { background: var(--s-done); color: var(--c-on-status); }
.d-badge-dim { background: var(--s-p2); color: var(--c-on-status); }
.d-note { font-size: 12.5px; color: var(--c-text-2); padding: 6px 10px 2px; white-space: normal; }
.d-note.dim { color: var(--c-text-dim); }
.d-card-body { padding: 4px 10px 10px; }
.d-sub-label { font-size: 11px; font-weight: 600; color: var(--c-text-2); margin: 8px 0 4px; letter-spacing: .5px; }
.d-addrow { margin-top: 6px; }
.form-hint { font-size: 12px; color: var(--c-text-2); margin-top: 6px; }
/* 里程碑行 */
.d-ms { border: 1px solid var(--c-line); border-radius: var(--radius-sm); margin: 6px 0; background: var(--c-inset); }
.d-ms-head { display: flex; align-items: center; gap: 8px; padding: 8px 10px; cursor: pointer; flex-wrap: wrap; }
.d-ms-title { font-weight: 500; font-size: 13.5px; flex: 1; min-width: 120px; }
.d-ms-body { padding: 2px 10px 8px; border-top: 1px dashed var(--c-line); }
/* 折叠：head.d-collapsed 隐藏相邻 body */
.d-ms-head.d-collapsed + .d-ms-body, .d-ag-head.d-collapsed + .d-ag-body, .d-card-head.d-collapsed + .d-card-body { display: none; }
/* 年度目标 */
.d-year { margin: 6px 0; }
.d-year-label { font-size: 11px; font-weight: 700; color: var(--c-text-2); margin: 4px 0 2px; }
.d-ag { border: 1px solid var(--c-line); border-radius: var(--radius-sm); margin: 4px 0; background: var(--c-surface); }
.d-ag-head { display: flex; align-items: center; gap: 8px; padding: 7px 10px; cursor: pointer; flex-wrap: wrap; }
.d-ag-title { font-size: 13px; flex: 1; min-width: 110px; }
.d-ag-meta { font-size: 11px; color: var(--s-done); flex: none; }
.d-ag-body { padding: 2px 8px 8px; border-top: 1px dashed var(--c-line); }
/* 季度槽 */
.d-q { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border: 1px solid var(--c-line); border-radius: var(--radius-sm); margin: 4px 0; flex-wrap: wrap; }
.d-q.d-q-done { background: var(--tone-green-bg); border-color: var(--tone-green-line); }
.d-q-tag { flex: none; font-size: 11px; font-weight: 700; color: var(--c-accent); background: var(--c-accent-soft); padding: 2px 7px; border-radius: 6px; }
.d-q-text { flex: 1; font-size: 13px; min-width: 100px; }
.d-q-text i { color: var(--c-text-dim); font-style: normal; }
.d-q-goals { display: flex; flex-wrap: wrap; gap: 4px; width: 100%; }
.d-goal-chip { font-size: 11.5px; background: var(--tone-grey-bg); border: 1px solid var(--c-line); border-radius: 999px; padding: 2px 6px 2px 9px; color: var(--c-text); display: inline-flex; align-items: center; gap: 4px; }
.d-goal-x { border: none; background: transparent; color: var(--c-text-2); cursor: pointer; font-size: 13px; padding: 0 2px; line-height: 1; }
.d-goal-x:hover { color: var(--s-p0); }
/* 清单目标卡：战略归属标签 */
.g-strat { flex: none; font-size: 11px; color: var(--tone-amber-text); background: var(--tone-amber-bg); border: 1px solid var(--tone-amber-line); border-radius: 6px; padding: 2px 6px; }

/* ── 梦想版 v1.4 · 两段式视图（汇总 + 分支） ── */
/* 汇总页：方向卡（整块可点）+ 统计摘要 */
.dream-summary { display: flex; flex-direction: column; gap: 10px; margin-top: 6px; }
.d-dir-summary { display: flex; align-items: center; gap: 14px; padding: 14px 14px; background: var(--c-surface); border: 1px solid var(--c-line); border-radius: var(--radius); box-shadow: var(--c-shadow); cursor: pointer; transition: transform .12s, box-shadow .12s, border-color .12s; user-select: none; -webkit-tap-highlight-color: var(--c-focus-ring); }
.d-dir-summary:hover { border-color: var(--c-accent); }
.d-dir-summary:active { transform: scale(.98); background: var(--c-bg); }
.d-dir-summary:focus { outline: none; border-color: var(--c-accent); box-shadow: 0 0 0 3px var(--c-accent-soft); }
.d-dir-summary .icon { flex: none; width: 44px; height: 44px; border-radius: 12px; background: var(--c-accent-soft); color: var(--c-accent); display: flex; align-items: center; justify-content: center; font-size: 22px; }
.d-dir-summary .meta { flex: 1; min-width: 0; }
.d-dir-summary .name { font-size: 15px; font-weight: 700; color: var(--c-text); margin-bottom: 6px; }
.d-dir-summary .stats { display: flex; flex-wrap: wrap; gap: 6px; }
.d-dir-summary .stat { font-size: 11px; color: var(--c-text-2); background: var(--c-bg); border: 1px solid var(--c-line); border-radius: 999px; padding: 2px 8px; }
.d-dir-summary .stat strong { color: var(--c-text); font-weight: 700; margin-right: 3px; }
.d-dir-summary .stat.dim { opacity: .75; }
.d-dir-summary .d-arrow { flex: none; font-size: 24px; color: var(--c-text-3); padding: 0 4px; }
.dream-foot { font-size: 12px; color: var(--c-text-3); margin-top: 14px; text-align: center; }

/* 分支页：面包屑 + 返回 + 顶部 + 新增梦想 */
.d-detail-head { display: flex; align-items: center; gap: 10px; padding: 6px 2px 14px; flex-wrap: wrap; }
.d-back { background: transparent; border: 1px solid var(--c-line); border-radius: 999px; padding: 5px 12px; font-size: 13px; color: var(--c-text-2); cursor: pointer; transition: background .12s; }
.d-back:hover { background: var(--c-bg); color: var(--c-text); }
.d-back:active { background: var(--c-accent-soft); color: var(--c-accent); }
.d-crumb { font-size: 13px; color: var(--c-text-2); }
.d-crumb .crumb-dir { font-size: 16px; font-weight: 700; color: var(--c-text); margin-left: 4px; }
.d-spacer { flex: 1; min-width: 8px; }
.d-add-dream-top { background: var(--c-accent-solid); color: var(--c-text-on-accent); padding: 9px 18px; border-radius: var(--radius-sm); font-size: 14px; font-weight: 600; box-shadow: var(--c-shadow); transition: background .12s, transform .12s; }
.d-add-dream-top:hover { background: var(--c-accent-solid-2); }
.d-add-dream-top:active { transform: scale(.97); }
.d-detail-body { margin-top: 4px; }

/* 梦想卡：彩虹角标（与方向 emoji 风格统一；放弃态同步灰化） */
.d-dream-icon { flex: none; font-size: 16px; line-height: 1; margin-right: 2px; opacity: .9; }
.d-card.d-dormant .d-dream-icon { opacity: .45; filter: grayscale(.4); }

/* ════════════════════════════════════════════════════════════
   优化 P0（2026-09-09）：看板逾期分组 / 快速加任务 / 头部计数
   ════════════════════════════════════════════════════════════ */

/* ── P0-1 逾期未完成分组（红系卡片，置于今日待办上方） ── */
.card-overdue { border-color: var(--tone-red-line); background: var(--tone-red-bg); }
.card-overdue .board-section-head h3 { color: var(--s-p0); }
.ov-dot {
  display: inline-block; width: 8px; height: 8px; border-radius: 50%;
  background: var(--s-p0); margin-right: 6px; vertical-align: 1px;
}
.today-list li.board-row-overdue {
  background: var(--tone-red-bg); border-radius: 6px; margin: 4px 0; padding: 5px 8px;
  border-bottom: 1px solid var(--tone-red-line);
}
.today-list li.board-row-overdue:last-child { border-bottom: none; }
.board-row-overdue .today-task-title { color: var(--tone-red-text); font-weight: 500; }
.overdue-date { flex: none; font-size: 11px; font-weight: 600; color: var(--s-p0); white-space: nowrap; }
.overdue-pill { flex: none; font-size: 11px; color: var(--c-on-status); background: var(--s-p0); border-radius: 10px; padding: 1px 8px; line-height: 1.6; white-space: nowrap; }

/* ── P0-1 今日待办头部计数「今日 N · 逾期 M」 ── */
.board-count { flex: none; font-size: 12px; color: var(--c-text-3); white-space: nowrap; }
.board-count .cnt { font-weight: 600; color: var(--c-text); }
.board-count .cnt.over { color: var(--s-p0); }

/* ── P0-3 快速加任务按钮 + 头部换行（窄屏自动折行，标题一行、操作区一行） ── */
.board-section-head { flex-wrap: wrap; row-gap: 6px; }
.board-head-spacer { flex: 1; }
.board-section-head .btn.btn-primary.btn-sm { padding: 5px 12px; }

/* ── 窄屏：任务标题允许收缩折行（避免被日期/逾期徽标挤出屏幕） ── */
.today-list li .today-task-title { min-width: 0; overflow-wrap: anywhere; }

/* ════════════════════════════════════════════════════════════
   优化 P1（2026-09-09）：今日三件事卡 + 统一确认弹窗
   ════════════════════════════════════════════════════════════ */

/* P1-2 统一确认弹窗正文（保留换行） */
.confirm-body { white-space: pre-line; line-height: 1.6; font-size: 14px; color: var(--c-text); }

/* P1-1 今日三件事（AI 调度）卡 */
.ai-daily-brief .brief-list { list-style: none; margin: 2px 0 4px; }
.ai-daily-brief .brief-item { padding: 9px 4px; border-bottom: 1px solid var(--c-line); }
.ai-daily-brief .brief-item:last-child { border-bottom: none; }
.brief-item-head { display: flex; align-items: baseline; gap: 8px; }
.brief-idx {
  flex: none; width: 20px; height: 20px; border-radius: 50%;
  background: var(--c-accent-soft); color: var(--c-accent); font-weight: 700; font-size: 12px;
  display: inline-flex; align-items: center; justify-content: center;
}
.brief-title { flex: 1; font-size: 14px; font-weight: 500; min-width: 0; overflow-wrap: anywhere; }
.brief-time { flex: none; font-size: 12px; color: var(--c-text-2); background: var(--c-bg); border: 1px solid var(--c-line); border-radius: 999px; padding: 1px 8px; white-space: nowrap; }
.brief-reason { margin: 4px 0 0 28px; font-size: 12.5px; color: var(--c-text-2); }
.brief-reason summary { cursor: pointer; color: var(--c-text-3); font-size: 12px; user-select: none; }
.brief-note { margin: 6px 4px 2px; font-size: 12.5px; color: var(--c-text-2); line-height: 1.6; }
.ai-brief-muted { color: var(--c-text-3); }

/* ════════════════════════════════════════════════════════════
   优化 P2（2026-09-09）：日历月视图 + 日课历史搜索分页
   ════════════════════════════════════════════════════════════ */

/* P2-1 日历：视图切换 + 月历网格 */
.cal-nav-right { display: flex; align-items: center; gap: 6px; }
.cal-view-toggle { display: inline-flex; gap: 2px; border: 1px solid var(--c-line); border-radius: var(--radius-sm); padding: 2px; background: var(--c-surface-2); }
.cal-view-toggle .btn { border: none; background: transparent; }
.cal-view-toggle .btn.active { background: var(--c-accent-solid); color: var(--c-text-on-accent); }
.cal-grid-month .cal-day { min-height: 64px; align-items: flex-start; justify-content: flex-start; }
.cal-day.cal-day-m.out { opacity: .38; background: var(--c-inset); }

/* P2-2 日课历史：搜索框 + 分页脚 */
.rinke-history-search { margin-bottom: 8px; }
.rinke-search-input { width: 100%; padding: 8px 12px; border: 1px solid var(--c-line); border-radius: var(--radius-sm); background: var(--c-surface); color: var(--c-text); font-size: 14px; outline: none; }
.rinke-search-input:focus { border-color: var(--c-accent); }
.rinke-history-foot { display: flex; align-items: center; justify-content: space-between; margin-top: 8px; }
.rh-total { font-size: 12px; color: var(--c-text-3); }

/* ════════════════════════════════════════════════════════════
   优化 Wave 3A（2026-09-09）：全局当前分身 + AI 场景嵌入样式
   ════════════════════════════════════════════════════════════ */

/* rinke 页 AI 摘要结果卡 / todo 页拆解提示共用 */
.ai-summary-card { margin-bottom: var(--gap); }
.ai-summary-card .ai-busy { font-size: 13px; color: var(--c-text-3); }

/* ⚠️ 【P9-2 有意删除】`.persona-card .persona-check.current`（分身卡上的「当前分身」徽标变体）
   随分身页一起移除。设置面板里的分身选择用的是 `.settings-persona .sp-cur`，与它无关。 */

/* ════════════════════════════════════════════════════════════
   优化 Wave 3B（2026-09-10）：数据体检器 + 一键归位
   入口：顶栏「🩺 体检」→ #/health
   ════════════════════════════════════════════════════════════ */

/* 头部：总览计数 + 操作 */
.health-head { margin-bottom: var(--gap); }
.health-title { font-size: 15px; font-weight: 600; margin-bottom: 8px; }
.health-counts { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
.hc { font-size: 12px; padding: 3px 9px; border-radius: 999px; border: 1px solid var(--c-line); background: var(--c-bg); color: var(--c-text-2); }
.hc-block { border-color: var(--tone-red-line); background: var(--tone-red-bg); color: var(--s-p0); }
.hc-warn { border-color: var(--tone-amber-line); background: var(--tone-amber-bg); color: var(--tone-amber-text); }
.hc-ok { border-color: var(--tone-green-line); background: var(--tone-green-bg); color: var(--tone-green-text); }
.hc-total { background: var(--c-surface-2); color: var(--c-text); }
.health-actions { display: flex; gap: 8px; margin-bottom: 8px; }
.health-note { font-size: 12.5px; color: var(--c-text-3); line-height: 1.65; }

/* 分组 */
.health-group { margin-bottom: var(--gap); }
.hg-head { font-size: 13px; font-weight: 600; color: var(--c-text-2); margin: 0 2px 8px; }
.hg-block .hg-head { color: var(--s-p0); }

/* 规则卡 */
.health-rule { margin-bottom: 10px; }
.health-rule.block { border-left: 3px solid var(--s-p0); }
.health-rule.warn { border-left: 3px solid var(--s-p1); }
.health-rule.ok { border-left: 3px solid var(--s-done); padding: 10px 14px; }
.hr-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.hr-id { font-size: 11px; font-weight: 700; color: var(--c-text-3); background: var(--c-bg); border-radius: 4px; padding: 1px 5px; }
.hr-title { font-size: 14px; font-weight: 600; }
.hr-count { font-size: 12px; border-radius: 999px; padding: 1px 8px; background: var(--c-bg); color: var(--c-text-2); }
.hr-count.block { background: var(--tone-red-bg); color: var(--tone-red-text); }
.hr-count.warn { background: var(--tone-amber-bg); color: var(--tone-amber-text); }
.hr-count.ok { background: var(--tone-green-bg); color: var(--tone-green-text); }
.hr-goto { margin-left: auto; }
.hr-desc { font-size: 12.5px; color: var(--c-text-3); margin: 6px 0 0; line-height: 1.6; }
.hr-items { margin-top: 8px; }

/* 单条 */
.health-item { border-top: 1px solid var(--c-line); padding: 9px 0; }
.health-item:first-child { border-top: none; }
.hi-main { min-width: 0; }
.hi-label { font-size: 13.5px; font-weight: 500; overflow-wrap: anywhere; }
.hi-detail { font-size: 12px; color: var(--c-text-3); margin-top: 2px; overflow-wrap: anywhere; line-height: 1.55; }
.hi-fix { display: flex; align-items: center; gap: 6px; margin-top: 7px; flex-wrap: wrap; }
.hi-select, .hi-input {
  flex: 1; min-width: 0; padding: 6px 8px; font-size: 13px;
  border: 1px solid var(--c-line); border-radius: var(--radius-sm);
  background: var(--c-surface); color: var(--c-text); outline: none;
}
.hi-select:focus, .hi-input:focus { border-color: var(--c-accent); }
.hi-hint { flex: none; font-size: 11.5px; color: var(--c-text-3); }

/* 顶栏体检按钮与登出并排时的间距 */
.topbar-actions { display: flex; align-items: center; gap: 2px; }

/* ════════════════════════════════════════════════════════════
   优化 Wave 3C（2026-09-10）：动态调度内核
   能量 40 + 目标 40 + 紧急 15 + 情境 5 —— 四维得分可复核
   ════════════════════════════════════════════════════════════ */

/* 三件事卡：能量档 / 情境 / 候选数 / 权重 元信息条 */
.brief-meta { display: flex; flex-wrap: wrap; gap: 6px; margin: 2px 0 8px; }
.brief-meta span { font-size: 11.5px; border-radius: 999px; padding: 2px 8px; border: 1px solid var(--c-line); background: var(--c-bg); color: var(--c-text-2); }
.brief-energy { border-color: var(--tone-green-line); background: var(--tone-green-bg); color: var(--tone-green-text); }
.brief-energy.warn { border-color: var(--tone-amber-line); background: var(--tone-amber-bg); color: var(--tone-amber-text); }
.brief-ctx { border-color: var(--c-accent-soft); color: var(--c-accent); }
.brief-weights { color: var(--c-text-3); }

/* 四维得分小标签（每条三件事都有，可展开复核理由） */
.brief-scores { display: flex; flex-wrap: wrap; gap: 5px; margin: 5px 0 0 28px; }
.score-chip { font-size: 11px; border-radius: 4px; padding: 1px 6px; background: var(--c-bg); border: 1px solid var(--c-line); color: var(--c-text-2); }
.score-chip.sc-energy { border-color: var(--tone-green-line); color: var(--tone-green-text); }
.score-chip.sc-goal { border-color: var(--c-accent-soft); color: var(--c-accent); }
.score-chip.sc-urgency { border-color: var(--tone-red-line); color: var(--tone-red-text); }
.score-chip.sc-context { border-color: var(--tone-violet-line); color: var(--tone-violet-text); }
.score-total { font-size: 11px; font-weight: 700; border-radius: 4px; padding: 1px 7px; background: var(--c-accent-solid); color: var(--c-text-on-accent); }

/* 理由展开区：逐维理由 + 合计 */
.brief-reason .brief-reason-body { margin-top: 4px; }
.br-line { font-size: 12px; color: var(--c-text-2); line-height: 1.6; }
.br-line b { color: var(--c-text); font-weight: 600; }
.br-total { font-size: 11.5px; color: var(--c-text-3); margin-top: 4px; }

/* 清单页：委托 AI 分区 + 任务行徽标 */
.delegate-zone { border-color: var(--c-accent-soft); }
.delegate-zone .tree-goal-head { background: var(--tone-blue-bg); }
.delegate-task { padding-left: 2px; }
.delegate-pill { flex: none; font-size: 11px; border-radius: 4px; padding: 1px 6px; background: var(--c-accent-soft); color: var(--c-accent); }
.delegate-pill.human { background: var(--tone-violet-bg); color: var(--tone-violet-text); }
.tag-energy { flex: none; font-size: 11px; border-radius: 4px; padding: 1px 5px; background: var(--tone-green-bg); border: 1px solid var(--tone-green-line); color: var(--tone-green-text); }
.tag-context { flex: none; font-size: 11px; border-radius: 4px; padding: 1px 5px; background: var(--tone-violet-bg); border: 1px solid var(--tone-violet-line); color: var(--tone-violet-text); }
.t-path { flex: none; font-size: 11px; color: var(--c-text-3); }

/* 看板：委托 AI 分组卡 */
.card-delegated { border-color: var(--c-accent-soft); background: var(--tone-blue-bg); }
.card-delegated .board-section-head h3 { color: var(--c-accent); }
.board-row-delegated { display: flex; align-items: center; gap: 8px; }
.board-row-delegated .today-task-title { flex: 1; min-width: 0; }


/* ═══════════ Wave 3D：同步状态条 + 同步面板 ═══════════ */
/* 顶栏下一条窄条：在线/离线 · 最近同步 · 待同步/冲突（点击展开面板） */
.sync-bar {
  display: flex; align-items: center; gap: 6px;
  padding: 5px 12px; font-size: 12px;
  background: var(--c-chrome-2); color: var(--c-text-2);
  border-bottom: 1px solid var(--c-line);
  min-height: 30px; flex-wrap: nowrap; overflow: hidden;
}
.sync-bar.offline { background: var(--tone-amber-bg); color: var(--tone-amber-text); border-bottom-color: var(--tone-amber-line); }
.sync-dot {
  display: inline-flex; align-items: center; gap: 5px;
  background: transparent; border: 0; padding: 0;
  font: inherit; color: inherit; cursor: pointer; white-space: nowrap;
}
.sync-dot .dot {
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--s-done); flex: none;
}
.sync-bar.offline .sync-dot .dot { background: var(--s-p1); }
.sync-sep { color: var(--c-text-3); flex: none; }
.sync-last { color: var(--c-text-3); white-space: nowrap; }
.sync-spacer { flex: 1; min-width: 4px; }
.sync-chip {
  flex: none; border: 1px solid var(--c-line); background: var(--c-surface);
  border-radius: 999px; padding: 1px 9px; font: inherit; font-size: 11.5px;
  color: var(--c-text-2); cursor: pointer; white-space: nowrap;
}
.sync-chip.ok { color: var(--tone-green-text); border-color: var(--tone-green-line); background: var(--tone-green-bg); cursor: default; }
.sync-chip.warn { color: var(--tone-amber-text); border-color: var(--tone-amber-line); background: var(--tone-amber-bg); }
.sync-chip.danger { color: var(--tone-red-text); border-color: var(--tone-red-line); background: var(--tone-red-bg); }

/* 同步面板（复用 .modal-backdrop 的遮罩） */
.sync-modal { max-width: 480px; }
.sync-modal-body { max-height: 60vh; overflow-y: auto; }
.sync-modal-head { display: flex; flex-direction: column; gap: 3px; margin-bottom: 10px; font-size: 14px; font-weight: 600; }
.sync-warn { font-size: 12px; font-weight: 400; color: var(--tone-amber-text); }
.sync-modal-note { font-size: 12px; color: var(--c-text-2); line-height: 1.6; background: var(--c-bg); border-radius: var(--radius-sm); padding: 8px 10px; margin-top: 8px; }
.sync-modal-foot { display: flex; gap: 8px; margin-top: 12px; }
.sync-list { list-style: none; margin: 0; padding: 0; }
.sync-list li { display: flex; align-items: flex-start; gap: 8px; padding: 8px 0; border-bottom: 1px solid var(--c-line); }
.sync-list li:last-child { border-bottom: 0; }
.sync-li-main { flex: 1; min-width: 0; font-size: 13px; }
.sync-li-main b { font-weight: 600; }
.sync-li-meta { display: block; font-size: 11.5px; color: var(--c-text-3); margin-top: 2px; }
.sync-li-err { font-size: 11.5px; color: var(--s-p0); margin-top: 3px; word-break: break-word; }
.sync-li-alt { font-size: 11.5px; color: var(--c-text-3); margin-top: 2px; word-break: break-word; }
.sync-li-acts { display: flex; flex-direction: column; gap: 5px; flex: none; }
.sync-kv { list-style: none; margin: 0; padding: 0; font-size: 13px; }
.sync-kv li { display: flex; justify-content: space-between; gap: 12px; padding: 7px 0; border-bottom: 1px solid var(--c-line); }
.sync-kv li span { color: var(--c-text-2); }
.sync-kv li b { font-weight: 600; }

/* 离线空态：无缓存时明确说明，不白屏 */
.offline-empty { text-align: center; padding: 28px 16px; color: var(--c-text-2); font-size: 13px; line-height: 1.7; }
.offline-empty .oe-title { font-size: 15px; font-weight: 600; color: var(--c-text); margin-bottom: 6px; }
.offline-empty .oe-hint { color: var(--c-text-3); font-size: 12px; margin-top: 6px; }

/* ════════════════════════════════════════════════════════════
   P3（2026-09-15）：工作台板块 · 深色仪表盘（决策 D17）
   作用域：**只有** .workbench 这一个类（= #view-workbench）。
   其余 5 个 Tab 的浅色变量一个字未动 —— 判据 #3 会对比变量快照。
   配色：用**应用自己的 navy 打底**（#1a2540），不照搬参考实现的工作台配色（D17 明确）。
   状态色**沿用应用既有变量**（--p0 / --p1 / --done），不新造色号。
   ════════════════════════════════════════════════════════════ */

.workbench {

  background: var(--c-bg);
  color: var(--c-text);
  font-family: inherit;
  /* 仪表盘需要横向空间：向 .main 的留白里"出血"，两侧铺满应用壳 */
  margin-top: calc(-1 * var(--gap));
  margin-left: calc(-1 * var(--gap));
  margin-right: calc(-1 * var(--gap));
  padding: var(--gap);
  padding-bottom: 4px;
  border-radius: 0 0 var(--radius) var(--radius);
}
/* ── P6 §4.4：宽度机制**只保留一套** ──
   P3 当年用 `.app-view.wb-wide`（app.js 在切到工作台时加类）+ `#view-workbench{1120px}`
   两处来"只给工作台放宽"。P6 起桌面宽度由 `@media (min-width:1024px)` 统一接管：
     · 手机 / 平板（≤1023px）→ 下面这条 `--max-w`(640px) 继续生效，**与开工前逐像素相同**；
     · 桌面（≥1024px）→ 文件末尾的断点块把约束解除。
   ⇒ `wb-wide` 类与 `#view-workbench{1120px}` 已**删除**（两套宽度机制并存会互相打架）。 */
.main > .view { max-width: var(--max-w); margin-left: auto; margin-right: auto; }

.workbench .wb-dim { color: var(--c-text-2); opacity: .75; }
.workbench .wb-red-text { color: var(--s-p0); }
.workbench .wb-yellow-text { color: var(--s-p1); }
.workbench .wb-green-text { color: var(--s-done); }

/* ── 数据新鲜度条（明示滞后，不假装实时）── */
.wb-stale {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px;
  padding: 7px 11px; margin-bottom: var(--gap);
  background: var(--c-surface); border: 1px solid var(--c-line);
  border-radius: var(--radius-sm); font-size: 12.5px; color: var(--c-text-2);
}
.wb-stale-dot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--s-done); }
.wb-stale.wb-stale-warn { border-color: var(--s-p1); color: var(--c-text); }
.wb-stale.wb-stale-warn .wb-stale-dot { background: var(--s-p1); }
.wb-stale.wb-stale-bad { border-color: var(--s-p0); color: var(--c-text); }
.wb-stale.wb-stale-bad .wb-stale-dot { background: var(--s-p0); }
.wb-stale b { color: var(--c-text); }
.wb-stale-note { color: var(--c-text-2); }
.wb-stale-bad-text { color: var(--s-p0); font-weight: 600; }
.wb-stale-sp { flex: 1; min-width: 4px; }

/* ── 卡片 ── */
.wb-card {
  background: var(--c-surface); border: 1px solid var(--c-line);
  border-radius: var(--radius); padding: 13px; margin-bottom: var(--gap);
}
.wb-card-action { border-color: var(--c-line-strong); box-shadow: 0 0 0 1px var(--c-focus-ring); }
.wb-card-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.wb-card-head h3 { font-size: 14px; font-weight: 600; color: var(--c-text); }
.wb-count {
  font-size: 12px; border-radius: 999px; padding: 1px 9px;
  background: var(--c-surface-2); color: var(--c-text-2); border: 1px solid var(--c-line);
}
.wb-count.wb-red { background: var(--tone-red-bg); color: var(--tone-red-text); border-color: var(--tone-red-line); }
.wb-count.wb-yellow { background: var(--tone-amber-bg); color: var(--tone-amber-text); border-color: var(--tone-amber-line); }
.wb-count.wb-green { background: var(--tone-green-bg); color: var(--tone-green-text); border-color: var(--tone-green-line); }
.wb-empty { color: var(--c-text-2); font-size: 13px; padding: 10px 0; }
.wb-note { font-size: 12px; line-height: 1.65; color: var(--c-text-2); margin-bottom: 8px; }
.wb-note b { color: var(--c-text); }
.wb-note code { background: var(--c-surface-2); border-radius: 4px; padding: 0 4px; font-size: 11.5px; }
.wb-note-warn { border-left: 2px solid var(--s-p1); padding-left: 8px; color: var(--c-text); }

/* ── 双轨灯带 ── */
.wb-dual { display: flex; gap: 12px; align-items: stretch; flex-wrap: wrap; }
.wb-dual-main { flex: 1 1 220px; min-width: 0; }
.wb-dual-side {
  flex: 0 1 240px; min-width: 0; padding-left: 12px;
  border-left: 1px solid var(--c-line);
}
.wb-dual-label { font-size: 12px; color: var(--c-text-2); margin-bottom: 2px; }
.wb-dual-num { font-size: 44px; font-weight: 700; line-height: 1.05; letter-spacing: -.02em; }
.wb-dual-num-sm { font-size: 26px; font-weight: 600; line-height: 1.1; color: var(--c-text); }
.wb-dual-sub { font-size: 12px; color: var(--c-text-2); margin-top: 4px; line-height: 1.55; }
.wb-inv {
  margin-top: 10px; font-size: 12px; border-radius: var(--radius-sm);
  padding: 5px 9px; border: 1px solid var(--c-line); background: var(--c-surface-2);
}
.wb-inv.wb-green { color: var(--tone-green-text); border-color: var(--tone-green-line); }
.wb-inv.wb-red { color: var(--s-p0); border-color: var(--s-p0); }

/* ── 14 盏灯格 ── */
.wb-lamps { display: grid; grid-template-columns: repeat(auto-fill, minmax(132px, 1fr)); gap: 7px; margin-top: 11px; }
.wb-lamp {
  border: 1px solid var(--c-line); border-left-width: 3px; border-radius: var(--radius-sm);
  padding: 7px 9px; background: var(--c-surface-2); min-width: 0;
}
.wb-lamp.wb-red { border-left-color: var(--s-p0); }
.wb-lamp.wb-yellow { border-left-color: var(--s-p1); }
.wb-lamp.wb-green { border-left-color: var(--s-done); }
.wb-lamp-head { display: flex; align-items: center; justify-content: space-between; gap: 4px; }
.wb-lamp-head b { font-size: 12px; color: var(--c-text); }
.wb-lamp-sev { font-size: 10.5px; color: var(--c-text-2); }
.wb-lamp.wb-red .wb-lamp-sev { color: var(--s-p0); }
.wb-lamp.wb-yellow .wb-lamp-sev { color: var(--s-p1); }
.wb-lamp-name { font-size: 12px; color: var(--c-text); margin-top: 1px; overflow-wrap: anywhere; }
.wb-lamp-cnt { font-size: 20px; font-weight: 700; line-height: 1.2; color: var(--c-text); }
.wb-lamp-extra { font-size: 10.5px; color: var(--c-text-2); line-height: 1.45; }
.wb-lamp-input { font-size: 10.5px; color: var(--s-p1); margin-top: 2px; }

/* ── 主行动区（每条带三个出口）── */
.wb-actions { display: flex; flex-direction: column; gap: 8px; }
.wb-action-row {
  border: 1px solid var(--c-line); border-left: 3px solid var(--s-p0);
  border-radius: var(--radius-sm); padding: 9px 10px; background: var(--c-surface-2);
}
.wb-ar-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 13px; }
.wb-code { font-size: 11.5px; color: var(--c-text-2); font-variant-numeric: tabular-nums; }
.wb-title { color: var(--c-text); font-weight: 500; min-width: 0; overflow-wrap: anywhere; }
.wb-proj { font-size: 11.5px; color: var(--c-text-2); }
.wb-ov { font-size: 12px; color: var(--s-p0); font-weight: 600; }
.wb-defer, .wb-dl { font-size: 11.5px; color: var(--c-text-2); }
.wb-ar-form { display: flex; gap: 6px; margin-top: 8px; flex-wrap: wrap; align-items: center; }
.wb-in {
  flex: 1 1 200px; min-width: 0; padding: 7px 9px; font-size: 13px;
  border: 1px solid var(--c-line); border-radius: var(--radius-sm);
  background: var(--c-bg); color: var(--c-text); outline: none;
}
.wb-in::placeholder { color: var(--c-text-dim); }
.wb-in:focus { border-color: var(--c-accent); }
.wb-in-date { flex: 0 0 140px; }
.wb-ar-btns { display: flex; gap: 6px; flex: none; }
.wb-hint { font-size: 11.5px; color: var(--c-text-2); margin-top: 5px; }
.wb-hint-red { color: var(--s-p0); }

/* 深色作用域内的按钮（沿用 .btn 的形状，只改配色） */
.workbench .wb-btn {
  background: var(--c-surface-2); color: var(--c-text);
  border: 1px solid var(--c-line); font-weight: 500;
}
.workbench .wb-btn:active { background: var(--c-bg); }
.workbench .wb-btn:disabled { opacity: .4; cursor: not-allowed; }
.workbench .wb-btn-warn { color: var(--s-p1); border-color: var(--s-p1); }
.workbench .wb-btn-accent { color: var(--c-text-on-accent); background: var(--c-accent-solid); border-color: var(--c-accent-solid); }
.workbench .wb-btn-ok { color: var(--s-done); border-color: var(--s-done); }

/* ── 通用行（建议补勾 / 产物缺失）── */
.wb-rows { display: flex; flex-direction: column; }
.wb-row {
  display: flex; align-items: center; gap: 9px; flex-wrap: wrap;
  padding: 8px 0; border-top: 1px solid var(--c-line); font-size: 13px;
}
.wb-row:first-child { border-top: none; }
.wb-path {
  font-size: 11.5px; color: var(--c-text-2); max-width: 320px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.wb-time { font-size: 11.5px; color: var(--c-text-2); white-space: nowrap; }

/* ── 疑难杂症 ── */
.wb-hc-row {
  border: 1px solid var(--c-line); border-left: 3px solid var(--c-line);
  border-radius: var(--radius-sm); padding: 9px 10px; margin-bottom: 7px; background: var(--c-surface-2);
}
.wb-hc-row.wb-hc-stale { border-left-color: var(--s-p0); border-color: var(--tone-red-line); }
.wb-hc-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 13px; }
.wb-hc-form { display: flex; gap: 6px; margin-top: 8px; flex-wrap: wrap; align-items: center; }
.wb-badge {
  font-size: 11px; border-radius: 999px; padding: 1px 8px;
  background: var(--c-bg); color: var(--c-text-2); border: 1px solid var(--c-line);
}
.wb-badge-warn { font-size: 11px; border-radius: 999px; padding: 1px 8px; color: var(--s-p1); border: 1px solid var(--s-p1); }
.wb-badge-red { font-size: 11px; border-radius: 999px; padding: 1px 8px; color: var(--s-p0); border: 1px solid var(--s-p0); }
.wb-badge-focus { font-size: 11px; border-radius: 999px; padding: 1px 8px; color: var(--c-text-on-accent); background: var(--c-accent-solid); }

/* ── 全部事业任务（表格）── */
.wb-filter { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 9px; }
.wb-fbtn {
  font-size: 11.5px; padding: 3px 9px; border-radius: 999px; cursor: pointer;
  background: var(--c-surface-2); color: var(--c-text-2); border: 1px solid var(--c-line);
}
.wb-fbtn.active { background: var(--c-accent-solid); color: var(--c-text-on-accent); border-color: var(--c-accent-solid); font-weight: 600; }
.wb-tablewrap { overflow-x: auto; }
.wb-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.wb-table th {
  text-align: left; font-weight: 600; color: var(--c-text-2); font-size: 11.5px;
  padding: 6px 8px; border-bottom: 1px solid var(--c-line); white-space: nowrap;
}
.wb-table td { padding: 6px 8px; border-bottom: 1px solid var(--c-line); color: var(--c-text); vertical-align: top; }
.wb-table tbody tr:last-child td { border-bottom: none; }
.wb-td-code { font-variant-numeric: tabular-nums; color: var(--c-text-2); white-space: nowrap; }
.wb-td-title { min-width: 140px; overflow-wrap: anywhere; }
.wb-td-date { white-space: nowrap; color: var(--c-text-2); }
.wb-td-num { text-align: right; font-variant-numeric: tabular-nums; }
.wb-td-lamps { white-space: nowrap; }
.wb-pri { font-size: 11px; border-radius: 4px; padding: 1px 5px; color: var(--c-on-status); }
.wb-pri-p0 { background: var(--s-p0); }
.wb-pri-p1 { background: var(--s-p1); }
.wb-pri-p2 { background: var(--s-p2); }
.wb-lamp-tag {
  font-size: 10.5px; border-radius: 4px; padding: 1px 4px; margin-right: 3px;
  background: var(--c-surface-2); border: 1px solid var(--c-line); color: var(--c-text-2);
}

/* ── 窄屏：工作台退化为单列；表格转卡片（保证**页面**无横向滚动）── */
@media (max-width: 700px) {
  .wb-dual-side { flex: 1 1 100%; padding-left: 0; border-left: none; border-top: 1px solid var(--c-line); padding-top: 9px; }
  .wb-dual-num { font-size: 38px; }
  .wb-lamps { grid-template-columns: repeat(auto-fill, minmax(112px, 1fr)); }
  .wb-in, .wb-in-date { flex: 1 1 100%; }
  .wb-ar-btns { width: 100%; }
  .wb-ar-btns .btn { flex: 1; }
  .wb-hc-form .wb-btn { flex: 1 1 auto; }
  .wb-tablewrap { overflow-x: visible; }
  .wb-table, .wb-table tbody, .wb-table tr, .wb-table td { display: block; width: 100%; }
  .wb-table thead { display: none; }
  .wb-table tr {
    border: 1px solid var(--c-line); border-radius: var(--radius-sm);
    padding: 7px 9px; margin-bottom: 7px; background: var(--c-surface-2);
  }
  .wb-table td { border: none; padding: 2px 0; display: flex; gap: 8px; }
  .wb-table td::before {
    content: attr(data-label); flex: none; width: 76px;
    color: var(--c-text-2); font-size: 11.5px;
  }
  .wb-td-num { text-align: left; }
}

/* ════════════════════════════════════════════════════════════════════
   P4 · 候选（提名）界面（js/proposal-ui.js）+ 工作台候选深链计数
   —— 只在文件末尾追加，不改上面任何既有规则，更不动 :root 变量。
   ════════════════════════════════════════════════════════════════════ */

/* 候选屏比普通弹窗宽：一张卡要同时放「原文 / 标题 / 决策」三块 */
.pu-modal { max-width: 760px; }

.pu-head { margin-bottom: 12px; }
.pu-sub { font-size: 12.5px; color: var(--c-text-2); margin-top: 2px; }
.pu-note { font-size: 12px; line-height: 1.65; color: var(--c-text-2); margin-top: 6px; }
.pu-note b { color: var(--c-text); }
.pu-note code, .pu-note-warn code {
  background: var(--c-bg); border-radius: 4px; padding: 0 4px; font-size: 11.5px;
}
.pu-note-warn {
  font-size: 12px; line-height: 1.65; color: var(--tone-amber-text); background: var(--tone-amber-bg);
  border: 1px solid var(--tone-amber-line); border-radius: var(--radius-sm); padding: 7px 9px; margin-top: 8px;
}
.pu-note-warn b { color: var(--tone-amber-text); }

.pu-body { max-height: 58vh; overflow-y: auto; }

.pu-card {
  border: 1px solid var(--c-line); border-radius: var(--radius);
  background: var(--c-surface); padding: 11px 12px; margin-bottom: var(--gap);
}
/* 看过的那条留个视觉痕迹：一眼能看出「还剩哪几条没看」 */
.pu-card.pu-seen { border-color: var(--c-accent-soft); background: var(--tone-blue-bg); }
.pu-card-head { cursor: pointer; }
.pu-src { font-size: 12px; color: var(--c-text-2); }
.pu-src b { color: var(--c-text); }
.pu-quote {
  font-size: 13px; line-height: 1.6; margin-top: 4px; color: var(--c-text);
  background: var(--c-bg); border-radius: var(--radius-sm); padding: 7px 9px;
  overflow-wrap: anywhere;
}
.pu-open { font-size: 11.5px; color: var(--c-accent); margin-top: 4px; }
.pu-seen-tag, .pu-todo-tag {
  display: inline-block; font-size: 10.5px; border-radius: 999px;
  padding: 1px 7px; margin-left: 6px; vertical-align: 1px;
}
.pu-seen-tag { background: var(--c-accent-soft); color: var(--c-accent); }
.pu-todo-tag { background: var(--tone-amber-bg); color: var(--tone-amber-text); }

.pu-ctx { margin-top: 8px; border-left: 2px solid var(--c-line); padding-left: 9px; }
.pu-ctx-h { font-size: 11.5px; color: var(--c-text-3); margin-bottom: 4px; }
.pu-pre {
  margin: 0; font-size: 12px; line-height: 1.6; white-space: pre-wrap;
  overflow-wrap: anywhere; color: var(--c-text-2);
}
.pu-pre span { display: block; }
.pu-pre span.pu-hit { color: var(--c-text); background: var(--c-accent-soft); border-radius: 3px; }

.pu-fields { margin-top: 10px; border-top: 1px solid var(--c-line); padding-top: 10px; }
.pu-ro { margin-bottom: 10px; }
.pu-label { font-size: 12px; color: var(--c-text-2); margin-bottom: 4px; }
.pu-title {
  font-size: 14px; font-weight: 600; line-height: 1.5; color: var(--c-text);
  overflow-wrap: anywhere;
}
.pu-meta { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
.pu-chip {
  font-size: 11.5px; background: var(--c-bg); border: 1px solid var(--c-line);
  border-radius: 12px; padding: 3px 9px; color: var(--c-text-2);
}
.pu-actions { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }

.pu-foot { border-top: 1px solid var(--c-line); margin-top: 12px; padding-top: 10px; }
.pu-foot-note { font-size: 12px; line-height: 1.6; color: var(--c-text-2); }
.pu-foot-note b { color: var(--c-text); }

.pu-list { display: flex; flex-direction: column; }
.pu-row {
  border: 1px solid var(--c-line); border-radius: var(--radius-sm);
  padding: 9px 10px; margin-bottom: 8px; background: var(--c-surface);
}
.pu-row-title { font-size: 13px; font-weight: 600; margin-bottom: 6px; overflow-wrap: anywhere; }
.pu-row-in {
  width: 100%; font-size: 13px; padding: 7px 9px; border: 1px solid var(--c-line);
  border-radius: var(--radius-sm); background: var(--c-surface); color: var(--c-text);
}
.pu-row-in:focus { border-color: var(--c-accent); outline: none; }
.pu-row-err { font-size: 11.5px; color: var(--s-p0); margin-top: 4px; }

/* 工作台里的深链：暗底上默认链接色几乎看不见，给它一个可读的颜色 */
.workbench .wb-deeplink { font-size: 13px; }
.workbench .wb-deeplink a { color: var(--c-link); text-decoration: underline; }

/* ════════════════════════════════════════════════════════════════════
   P5 · 实时与留痕（js/workbench.js 的 #wb-snapshot 填真数据 +
   跨天读数 W2c/W7c/W19c/W22/W23）
   —— 与前几段一样：**只在文件末尾追加**，不改上面任何既有规则，
      更不动 :root 变量（P3 的深色作用域判据会验这一点）。
   ════════════════════════════════════════════════════════════════════ */

/* 快照 ↔ 当下 的逐项对照小表 */
.wb-snap-table { margin-top: 8px; }
.wb-snap-row {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 5px 0; border-top: 1px solid var(--c-line); font-size: 12.5px;
}
.wb-snap-row:first-child { border-top: none; }
.wb-snap-k { flex: 1 1 150px; color: var(--c-text-2); }
.wb-snap-a, .wb-snap-b { font-variant-numeric: tabular-nums; white-space: nowrap; }
.wb-snap-e { font-size: 11.5px; color: var(--c-text-2); white-space: nowrap; }

/* 跨天读数：一行一条读数 + 其命中项 */
.wb-lights { display: flex; flex-direction: column; margin-top: 8px; }
.wb-lrow {
  display: flex; align-items: center; gap: 9px; flex-wrap: wrap;
  padding: 7px 9px; border: 1px solid var(--c-line); border-left-width: 3px;
  border-radius: var(--radius-sm); margin-bottom: 6px; background: var(--c-surface-2);
  font-size: 13px;
}
.wb-lrow.wb-sev-red { border-left-color: var(--s-p0); }
.wb-lrow.wb-sev-yellow { border-left-color: var(--s-p1); }
.wb-lrow.wb-sev-green { border-left-color: var(--c-line); }
.wb-lid { font-size: 11px; color: var(--c-text-2); font-variant-numeric: tabular-nums; min-width: 34px; }
.wb-lname { flex: 1 1 140px; color: var(--c-text); }
.wb-lcount { font-variant-numeric: tabular-nums; font-weight: 600; min-width: 22px; text-align: right; }
.wb-lthr, .wb-lin { font-size: 11.5px; color: var(--c-text-2); white-space: nowrap; }
.wb-litems { margin: -2px 0 8px 12px; }
.wb-litem { font-size: 11.5px; color: var(--c-text-2); padding: 2px 0; overflow-wrap: anywhere; }
.wb-litem code {
  background: var(--c-bg); border: 1px solid var(--c-line);
  border-radius: 4px; padding: 0 4px; color: var(--c-text);
}

/* 窄屏：读数行的门槛/输入面换行，仍不产生横向滚动 */
@media (max-width: 700px) {
  .wb-snap-k { flex: 1 1 100%; }
  .wb-lname { flex: 1 1 100%; }
  .wb-lthr, .wb-lin { flex: 1 1 auto; }
}

/* ════════════════════════════════════════════════════════════════════
   P6（2026-09-16）· 桌面适配（§四）+ 工作台仪表化（§五）

   ⚠️ 层叠顺序铁律：本块**必须留在文件最末尾**，且内部按「基础规则 → 响应式覆盖」排列。
      参考实现（_工作台方案\90_工具\template.html 第 335–339 行）记录过自己踩的坑：
      它的 KPI/多列基础规则写在末尾，而覆盖规则写在**之前** ⇒ 被基础规则反盖，
      「曾把 6 张 KPI 卡挤成竖排单字」。本块不重蹈：基础在前，覆盖在后。
   ════════════════════════════════════════════════════════════════════ */

/* ── §五-1 KPI 指标卡阵列（基础：**移动优先** = 2×2）──
   数值来自 workbench.js 的 renderKpis()，只读已有数据源（lights_primary / lights_total / W20 / W18）。 */
.wb-kpis { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-bottom: var(--gap); }
.wb-kpi {
  position: relative; overflow: hidden; min-width: 0;
  padding: 11px 12px 10px; background: var(--c-surface);
  border: 1px solid var(--c-line); border-radius: var(--radius);
}
.wb-kpi::after { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--c-line); }
.wb-kpi.wb-kpi-red::after { background: var(--s-p0); }
.wb-kpi.wb-kpi-amber::after { background: var(--s-p1); }
.wb-kpi.wb-kpi-green::after { background: var(--s-done); }
.wb-kpi-lab { font-size: 11.5px; color: var(--c-text-2); overflow-wrap: anywhere; }
.wb-kpi-num {
  font-size: 26px; font-weight: 700; line-height: 1.05; margin-top: 4px;
  font-variant-numeric: tabular-nums; color: var(--c-text);
}
.wb-kpi.wb-kpi-red .wb-kpi-num { color: var(--s-p0); }
.wb-kpi.wb-kpi-amber .wb-kpi-num { color: var(--s-p1); }
.wb-kpi.wb-kpi-green .wb-kpi-num { color: var(--s-done); }
.wb-kpi-sub { font-size: 11px; color: var(--c-text-3); margin-top: 4px; line-height: 1.45; overflow-wrap: anywhere; }
.wb-kpi-bar { height: 4px; border-radius: 2px; background: var(--c-surface-2); margin-top: 8px; overflow: hidden; }
.wb-kpi-bar i { display: block; height: 100%; border-radius: 2px; }

/* ── §五-2 工作台多列 ──
   ⚠️⚠️ P6-补（2026-09-16 · Kyle 反馈「很多留空的地方，界面没有对齐，怪怪的」）：
   第一版用的是「`#wb-root` 上显式 `grid-column` + 自动放置」。**那是错的** ——
   实测（Chrome 量 1920）左右栏交替出现 **259px / 316px 的空洞**：
     行A 左=undisposed(259)  右=**空**        行B 左=suggest(147) 右=missing(187)
     行C 左=**空**           右=hardcases(316) 行D 左=matrix(250)  右=snapshot(283)
   根因：grid 自动放置（sparse）遇到「显式指定列」的项时**跳过不回填**，
   于是短项永远配不上长项，两栏也永远顶部错位。**≈575px 的死区**就是这么来的。
   ⇒ 改为**独立列容器**：`.wb-cols` 是一行两列网格，`.wb-col` 是列内竖向 flex 堆叠。
      每列各自堆叠 ⇒ 列高互不耦合 ⇒ 无死区、两栏顶部对齐。
      （这与参考实现的 `.dash-grid` 两栏做法同源。） */
.wb-cols { display: flex; flex-direction: column; gap: var(--gap); }
.wb-col { display: flex; flex-direction: column; gap: var(--gap); min-width: 0; }
/* 根容器不再用 grid：改为竖向 flex + gap，间距只由 gap 负责（卡片不再自带 margin）*/
#wb-root { display: flex; flex-direction: column; gap: var(--gap); }
#wb-root .wb-card { margin-bottom: 0; }
#wb-root .wb-stale { margin-bottom: 0; }
#wb-root .wb-kpis { margin-bottom: 0; }
#wb-root > div, .wb-col > div { min-width: 0; }

/* ── §五-1b 图表区：圆环 + 图例 + 横条（借参考实现 #dash 的三件套）── */
.wb-charts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--gap); }
.wb-chart {
  background: var(--c-surface); border: 1px solid var(--c-line);
  border-radius: var(--radius); padding: 12px 13px; min-width: 0;
}
.wb-chart-h { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; }
.wb-chart-h b { font-size: 13.5px; color: var(--c-text); }
.wb-chart-h span { font-size: 11.5px; color: var(--c-text-3); }
.wb-chart-empty { font-size: 12.5px; color: var(--c-text-3); padding: 14px 0; line-height: 1.6; }

.wb-donut { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.wb-donut-wrap { position: relative; width: 132px; height: 132px; flex: 0 0 132px; }
.wb-donut svg { width: 100%; height: 100%; display: block; transform: rotate(-90deg); }
/* 段与段之间留一道底色缝，避免相邻两段糊在一起 */
.wb-arc { transition: opacity .15s; }
.wb-arc:hover { opacity: .82; }
.wb-donut-mid {
  position: absolute; inset: 0; display: flex; flex-direction: column;
  align-items: center; justify-content: center; pointer-events: none;
}
.wb-donut-mid b { font-size: 26px; font-weight: 700; line-height: 1; color: var(--c-text); font-variant-numeric: tabular-nums; }
.wb-donut-mid span { font-size: 11px; color: var(--c-text-3); margin-top: 3px; }

.wb-legend { display: flex; flex-direction: column; gap: 7px; flex: 1; min-width: 132px; }
.wb-lg-row { display: flex; align-items: center; gap: 8px; font-size: 12.5px; }
.wb-lg-sw { width: 10px; height: 10px; border-radius: 3px; flex: 0 0 10px; }
.wb-lg-lab { color: var(--c-text-2); min-width: 0; overflow-wrap: anywhere; }
.wb-lg-n { margin-left: auto; color: var(--c-text); font-variant-numeric: tabular-nums; font-weight: 600; }
.wb-lg-p { color: var(--c-text-3); font-size: 11px; min-width: 34px; text-align: right; font-variant-numeric: tabular-nums; }

.wb-bars { display: flex; flex-direction: column; gap: 9px; }
.wb-bar-row { display: grid; grid-template-columns: minmax(96px, 1.15fr) minmax(60px, 1fr) 34px; gap: 9px; align-items: center; font-size: 12px; }
.wb-bar-lab { color: var(--c-text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.wb-bar-track { height: 10px; border-radius: 5px; background: var(--c-surface-2); overflow: hidden; }
.wb-bar-fill { display: block; height: 100%; border-radius: 5px; }
.wb-bar-num { text-align: right; color: var(--c-text); font-variant-numeric: tabular-nums; font-weight: 600; }

/* ── §五-3 表格密度：sticky 表头（P3 已有紧凑行高与数字右对齐，这里只补表头吸附）── */
.wb-table th { position: sticky; top: 0; z-index: 2; background: var(--c-surface); }

/* ── §四 侧栏品牌块：只在桌面断点里出现（手机端底部标签栏放不下）── */
.tabbar-brand { display: none; }

/* ── §四-3 密度：清单/看板列表行收紧（Kyle 选「紧凑 −30%」，Chrome 实测 214px → 149px）──
   ⚠️ 触摸底线：手机端（≤700px）行内小按钮仍 ≥44px —— 见本块末尾的窄屏覆盖。 */
.today-list li { padding: 5px 8px; font-size: 13px; line-height: 1.35; }
.event-item { padding: 5px 8px; font-size: 13px; line-height: 1.35; }
.tree-task { padding: 5px 8px; font-size: 13px; }
.tree-project-head { padding: 8px 10px; }
.tree-list-head { padding: 6px 8px; }
.d-ms-head, .d-ag-head { padding: 6px 10px; }

/* ════════════════════════════════════════════════════════════════════
   P7（2026-09-16）· 工作台指标看板：KPI 阵列扩容 + 柱状图 + 三种「空」
   --------------------------------------------------------------------
   ⚠️ 三条硬约束（P6 已立，本段不得破）
     1. **零硬编码颜色**：本块只用主题变量（色板前缀 `--c-` / 状态前缀 `--s-` / 语气前缀 `--tone-`）
        与 `transparent`；**不得**出现字面色号，也不得出现 rgb 半透明函数。
        （⚠️ 写说明时也别把 `var(` 与「带星号的变量名」拼在一起 —— 判据 24.5 会把它当成
          **未定义变量引用**判红，而这个判断同样**不剥注释**。本块两处乌龙都栽在这上面。）
     2. **层叠顺序**：本块是**基础规则**，必须排在下面的 §四 桌面断点**之前**
        （同优先级下后出现者胜出 —— 参考实现踩过「把覆盖规则写在基础之前、被反盖」的坑）。
        响应式覆盖统一写进既有断点块里，不在此另开 @media。
     3. **不引外部图形**：柱状一律用 div 高度百分比（不引任何图表库 / 不引外部图片）。
   ════════════════════════════════════════════════════════════════════ */

/* ── §P7-1 KPI 阵列的 3 列 / 4 列变体（与 .wb-kpis 的 2 列移动优先口径一致）── */
.wb-kpis-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.wb-kpis-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
/* 「无数据」与「0」必须长得不一样：0 是正常数字（用正文色），无数据是**缺样本**（弱化 + 斜体感） */
.wb-kpi-nodata {
  font-size: 15px; font-weight: 600; color: var(--c-text-3);
  border: 1px dashed var(--c-line-strong); border-radius: 6px; padding: 1px 8px; display: inline-block;
}

/* ── §P7-2 图表区的 2 列变体（营业额/CRM 用两块并排，不挤成三栏）── */
.wb-charts-2 { grid-template-columns: repeat(1, minmax(0, 1fr)); }

/* ── §P7-3 柱状图（手写 div 高度，零库零外链）──
   为什么用 div 而不是 SVG：柱状只需要「高度 + 数值标签」，div + 百分比高度更简单，
   而且天然跟随字体与主题变量；圆环那种非矩形路径才必须用 SVG。
   ⚠️ **必须有数值标签**：光看柱子看不出数（P7 主 PROMPT §三）。 */
.wb-rev-panel { min-width: 0; }
.wb-rev-bars {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px; align-items: end; padding: 6px 0 2px;
}
.wb-rev-col { display: flex; flex-direction: column; align-items: center; min-width: 0; }
.wb-rev-v {
  font-size: 14px; font-weight: 700; color: var(--c-text);
  font-variant-numeric: tabular-nums; margin-bottom: 5px; white-space: nowrap;
}
.wb-rev-track {
  width: 100%; max-width: 76px; height: 96px; border-radius: 6px;
  background: var(--c-surface-2); display: flex; align-items: flex-end; overflow: hidden;
}
.wb-rev-fill { display: block; width: 100%; border-radius: 6px; background: var(--c-accent-solid); }
/* 0 的柱子画一条"贴底线"而不是画成空 —— 空柱与「读不到」在视觉上必须能区分 */
.wb-rev-fill-zero { height: 2px !important; background: var(--c-line-strong); }
.wb-rev-lab { font-size: 12px; color: var(--c-text-2); margin-top: 6px; }
.wb-rev-sub { font-size: 11px; color: var(--c-text-3); margin-top: 2px; text-align: center; line-height: 1.4; overflow-wrap: anywhere; }
.wb-rev-sub-zero { color: var(--c-text-2); }

/* ── §P7-4 三种「空」的样式（文案在 js 里，这里只做视觉分层）──
   ① 数据源不可用 = 红边（**要动手**）② 已接通但暂无数据 = 中性虚线（**等数据**）
   ③ 本期 0 = 弱化说明（**正常**）—— 三者一眼可分，不许糊成同一种「0」。 */
.wb-rev-empty {
  border: 1px solid var(--c-line); border-radius: var(--radius);
  padding: 10px 12px; margin: 8px 0; display: flex; flex-direction: column; gap: 4px;
  font-size: 12.5px; line-height: 1.6; color: var(--c-text-2);
}
.wb-rev-empty b { font-size: 13px; }
.wb-rev-empty-nosrc { border-color: var(--s-p0); border-left-width: 3px; }
.wb-rev-empty-nosrc b { color: var(--s-p0); }
.wb-rev-empty-idle { border-style: dashed; border-color: var(--c-line-strong); }
.wb-rev-empty-idle b { color: var(--c-text); }
.wb-rev-empty-zero { border-color: var(--c-line); background: var(--c-inset); }
.wb-rev-empty-zero b { color: var(--c-text-3); }

/* ── §P7-5 口径脚注（图上**必须**标 Ex GST + 状态门槛 + 数据源）── */
.wb-rev-foot {
  display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center;
  margin-top: 10px; padding-top: 8px; border-top: 1px solid var(--c-line);
  font-size: 11px; color: var(--c-text-3); line-height: 1.6;
}
.wb-rev-foot b { color: var(--c-text-2); }
.wb-rev-chip {
  border: 1px solid var(--c-line-strong); border-radius: 999px;
  padding: 0 8px; color: var(--c-text); font-weight: 600;
}
.wb-rev-warn { color: var(--s-p1); }
.wb-rev-srcnote { margin-top: 10px; }
.wb-rev-cav { margin: 6px 0 0 16px; padding: 0; }
.wb-rev-cav li { margin-bottom: 3px; }

/* ── §P7-6 「记营业额」表单（**静态 DOM**，只有状态行由 JS 重画）──
   ⚠️ 不要把这些字段挪进 JS 渲染的容器：一次 refresh 就会把正在输入的金额抹掉
      （P3「记一条」踩过同样的坑，那次的解法就是把表单做成静态 DOM）。 */
.wb-rev-form { margin-bottom: 0; }
.wb-rev-fields { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; }
.wb-rev-f { display: flex; flex-direction: column; gap: 3px; font-size: 11px; color: var(--c-text-2); min-width: 0; }
.wb-rev-f-grow { flex: 1 1 180px; }
.wb-rev-f select, .wb-rev-f input {
  background: var(--c-inset); color: var(--c-text);
  border: 1px solid var(--c-line); border-radius: 6px;
  padding: 6px 8px; font-size: 13px; min-height: 34px;
}
.wb-rev-f input::placeholder { color: var(--c-text-dim); }
.wb-rev-key { font-size: 14px; color: var(--c-text); padding: 6px 0; font-variant-numeric: tabular-nums; }
.wb-rev-note-line { display: flex; flex-direction: column; gap: 3px; margin-top: 8px; }
.wb-rev-flash { font-size: 12.5px; color: var(--s-done); }
.wb-rev-flash-err { color: var(--s-p0); }
.wb-rev-dim { font-size: 11px; color: var(--c-text-3); }
#wb-rev-form-status { display: flex; flex-direction: column; gap: 3px; margin-top: 8px; }

/* ══════════════════════ §四 桌面断点 ══════════════════════ */

/* 1024–1439px：侧栏 + 主区，主区铺满可用宽度（解除 640px 锁） */
@media (min-width: 1024px) {
  /* ⭐ DOM 顺序一个字不动：`.tabbar` 在 HTML 里仍排在最后，
     靠 grid 显式放置把它搬到第 1 列 ⇒ 路由委托监听、首屏 8 个 id 的顺序断言**都不受影响**。 */
  .app-view {
    max-width: none; margin: 0; min-height: 100vh;
    display: grid;
    grid-template-columns: var(--sidebar-w) minmax(0, 1fr);
    grid-template-rows: auto auto 1fr;
    align-items: start;
  }
  /* 底部标签栏 → 左侧栏（同一份 DOM，不新建第二套导航） */
  .tabbar {
    grid-column: 1; grid-row: 1 / -1;
    position: sticky; top: 0; bottom: auto; left: auto; transform: none;
    width: var(--sidebar-w); max-width: none; height: 100vh;
    flex-direction: column; align-items: stretch; gap: 2px;
    padding: 0 10px 16px; border-top: none; border-right: 1px solid var(--c-line);
    background: var(--c-chrome); overflow-y: auto;
  }
  .tabbar-brand {
    display: block; padding: 20px 8px 15px; margin-bottom: 10px;
    border-bottom: 1px solid var(--c-line);
    font-size: 16px; font-weight: 650; color: var(--c-text); letter-spacing: 1px;
  }
  .tabbar-brand span { display: block; margin-top: 6px; font-size: 12px; font-weight: 400; color: var(--c-text-3); letter-spacing: 0; }
  /* 标签项：由「竖排图标+文字」改为「横排图标+文字」（触摸底线 44px 保持） */
  .tab-btn {
    flex: none; flex-direction: row; justify-content: flex-start;
    gap: 10px; min-height: 44px; padding: 9px 12px; border-radius: 9px;
    font-size: 14.5px; font-weight: 500; color: var(--c-text-2); text-align: left;
  }
  .tab-btn::before { width: 18px; height: 18px; border-radius: 5px; flex: none; }
  .tab-btn:hover { background: var(--c-surface-2); color: var(--c-text); }
  .tab-btn.active { background: var(--c-accent-solid); color: var(--c-text-on-accent); font-weight: 600; }
  .tab-btn.active::before { opacity: 1; }

  /* ⭐ P9：侧栏里的「道术器用」四组。
     桌面端子菜单**内联展开**（不是弹出层）—— Kyle：「点开每个字，会展开对应的内容下拉菜单」。
     ⚠️ 仍然同一份 DOM：只是 `.tab-sub` 从 absolute 改成 static。 */
  .tab-group { flex: none; display: block; position: static; }
  .tab-group > .tab-group-btn {
    flex: none; flex-direction: row; justify-content: space-between;
  }
  .tab-group-btn { font-size: 15px; padding: 10px 12px; }
  .tab-group-btn::after { margin-top: 0; }
  .tab-sub {
    position: static; display: none; min-width: 0; max-width: none;
    margin: 2px 0 4px 10px; padding: 2px 0 2px 8px;
    border: none; border-left: 1px solid var(--c-line); border-radius: 0;
    background: transparent; box-shadow: none;
  }
  .tab-group.open > .tab-sub { display: flex; }
  .tab-sub-btn { min-height: 38px; font-size: 13.5px; padding: 8px 10px; }
  /* ⚠️ 【P9-2 有意删除】桌面端这里原先还有 `.tab-group-solo` 的两行
     （把独立分身项在侧栏里做成一条带分隔线的项）。导航项已移除，规则一并删除。 */

  /* 顶栏 / 同步条 / 主区 → 第 2 列 */
  .topbar { grid-column: 2; grid-row: 1; position: sticky; top: 0; z-index: 20; border-radius: 0; }
  .sync-bar { grid-column: 2; grid-row: 2; }
  .main { grid-column: 2; grid-row: 3; padding: 20px 28px 48px; }

  /* ⭐ 宽度放开：**不改** :root 的 --max-w（那是手机端的值），只在断点里解除约束 */
  .main > .view, #view-workbench { max-width: none; margin-left: 0; margin-right: 0; }

  /* §四-3 桌面下不再需要"截断兜底"：标题允许占满整行 */
  .q-tab .q-tx { max-width: none; white-space: normal; }
  .d-goal-chip, .g-strat { white-space: normal; }

  /* §五-2 工作台多列：**独立列容器**（见本块顶部 .wb-cols 的说明）。
     ⚠️ 这里**不再**给 #wb-undisposed 等给"显式 grid-column" —— 那条路会留死区。*/
  .wb-cols { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr); gap: var(--gap); align-items: start; }
  .wb-cols-flip { grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr); }
  /* 工作台的"出血"负边距是为 640px 窄壳设计的；桌面主区已很宽，去掉它 */
  .workbench { margin-left: 0; margin-right: 0; padding: 0; border-radius: 0; }
  .wb-kpis { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
  .wb-kpi-num { font-size: 30px; }
  .wb-charts { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  /* P7：3 列 / 4 列 KPI 阵列在桌面上才展开；营业额与 CRM 的两块图表并排 */
  .wb-kpis-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .wb-kpis-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .wb-charts-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .wb-rev-track { height: 128px; max-width: 96px; }
  .wb-rev-v { font-size: 16px; }
}

/* ≥1440px：主区仍有上限（避免 4K 上超长行），但**远大于** 640px */
@media (min-width: 1440px) {
  .main > .view, #view-workbench { max-width: 1560px; margin-left: auto; margin-right: auto; }
  .wb-cols { grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr); }
  .wb-cols-flip { grid-template-columns: minmax(0, 1.9fr) minmax(0, 1fr); }
  /* 图表区在超宽屏给圆环更多呼吸空间 */
  .wb-donut-wrap { width: 148px; height: 148px; flex: 0 0 148px; }
}

/* 1024–1439px：图表区容不下三栏并排 ⇒ 两栏（第三块通栏）*/
@media (min-width: 1024px) and (max-width: 1439px) {
  .wb-charts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .wb-charts > .wb-chart:last-child { grid-column: 1 / -1; }
}

/* 701–1023px：仍用底部标签栏（平板 / 窄桌面），主区照旧 640px 居中 —— 与开工前一致 */
@media (min-width: 701px) and (max-width: 1023px) {
  .topbar { border-radius: 0 0 10px 10px; }
  .tabbar { border-radius: 12px 12px 0 0; box-shadow: var(--c-shadow); }
}

/* ≤700px：手机 —— **布局/交互与开工前逐项一致**（只有颜色按新主题变）。
   这里把本块前面收紧的密度**在触摸区上放回去**，守住 44px 底线。 */
@media (max-width: 700px) {
  .today-list li { padding: 10px 4px; font-size: 14px; line-height: 1.55; }
  .event-item { padding: 9px 4px; font-size: 14px; line-height: 1.55; }
  .tree-task { padding: 7px 8px; font-size: 14px; }
  .tree-project-head { padding: 10px 12px; }
  .tree-list-head { padding: 8px 10px; }
  .wb-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .wb-kpi-num { font-size: 24px; }
  .wb-kpi { padding: 9px 10px 8px; }
  .wb-kpi-lab, .wb-kpi-sub { font-size: 10.5px; }
  /* 图表区在手机上也单列；圆环居中、图例铺满 */
  .wb-charts { grid-template-columns: 1fr; }
  .wb-donut { gap: 12px; }
  .wb-donut-wrap { width: 116px; height: 116px; flex: 0 0 116px; }
  .wb-donut-mid b { font-size: 22px; }
  /* P7：柱状在手机上保持一排三列（三根柱本来就窄），但把高度与字号收一点；
     表单字段在窄屏自动折行（flex-wrap 已在基础规则里），触摸底线 44px 由 .wb-rev-f input 的 min-height 兜底。 */
  .wb-rev-track { height: 84px; }
  .wb-rev-v { font-size: 12.5px; }
  .wb-rev-f { flex: 1 1 100%; }
  .wb-rev-f select, .wb-rev-f input { min-height: 44px; }
  .wb-rev-bars { gap: 6px; }
  .wb-bar-row { grid-template-columns: minmax(84px, 1fr) minmax(48px, 1fr) 30px; font-size: 11.5px; }
  .wb-table th { position: static; }
  .row-actions .btn { min-height: 44px; padding: 5px 10px; }
  .btn-sm { min-height: 44px; }
}

/* ════════════════════════════════════════════════════════════
   P8（2026-09-16）· 设置面板 + 忘记密码 / 设新密码 + 今日页的体检入口
   ------------------------------------------------------------
   ⚠️ 三条纪律（判据 #16 直接读这一段）：
     1. **零硬编码颜色** —— 本段只用 `var(--…)` token，一个 `#hex` 都不出现。
        这样它**自动**跟着主题层走（深色/浅色两套值都不用改这一块）。
     2. **不动 `:root`** —— 上面 35–120 行的主题变量一个字未改（P6 判据的延续）；
        语言层只管文字，**不碰颜色**。
     3. **零新外链** —— 全部是原生 CSS，没有引任何库/字体/CDN。
   ════════════════════════════════════════════════════════════ */

/* ── 顶栏齿轮（P8：顶栏唯一的按钮；登出/体检都已搬走）── */
.topbar-gear {
  font-size: 17px;
  line-height: 1;
  padding: 6px 9px;
  border-radius: var(--radius-sm);
}
.topbar-gear:active { background: var(--c-hover); }

/* ── 设置面板（模态抽屉：关闭后回到原页，不改 hash、不丢当前 Tab）── */
.settings-modal { max-width: 520px; }
.settings-head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 8px; margin-bottom: 12px;
}
.settings-head h3 { margin: 0; }
.settings-x { flex: none; }
.settings-body { display: flex; flex-direction: column; gap: 14px; }

.settings-group {
  border: 1px solid var(--c-line);
  border-radius: var(--radius);
  background: var(--c-inset);
  padding: 12px;
}
.settings-group-h {
  font-size: 13px; font-weight: 600; color: var(--c-text-2);
  letter-spacing: .04em; margin-bottom: 8px;
}
.settings-row {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 10px; padding: 4px 0; font-size: 13px;
}
.settings-k { color: var(--c-text-2); flex: none; }
.settings-v { color: var(--c-text); text-align: right; word-break: break-all; }
.settings-v.mono, .sp-key.mono, .settings-row .mono {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 12px;
}
.settings-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.settings-note {
  margin-top: 8px; padding: 8px 10px; font-size: 12px; line-height: 1.6;
  color: var(--c-text-2);
  background: var(--tone-amber-bg);
  border: 1px solid var(--tone-amber-line);
  border-radius: var(--radius-sm);
}
.settings-form { margin-top: 4px; }

/* ── 分身选择（设置内）。⭐ 只是 personas.js 唯一写入口的**另一个入口**，
      不另存一份真相；所以这里只有按钮，没有任何写库逻辑。 ── */
.settings-personas { display: flex; flex-direction: column; gap: 8px; }
.settings-persona {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  width: 100%; text-align: left; cursor: pointer;
  padding: 10px 12px;
  border: 1px solid var(--c-line);
  border-radius: var(--radius-sm);
  background: var(--c-surface);
  color: var(--c-text);
  font: inherit; font-size: 14px;
}
.settings-persona.selected { border-color: var(--c-accent); background: var(--c-accent-soft); }
.settings-persona .sp-name { font-weight: 600; }
.settings-persona .sp-key { color: var(--c-text-3); }
.settings-persona .sp-cur { margin-left: auto; color: var(--c-accent); font-size: 12px; }

/* ── 语言切换 ── */
.settings-langs { display: flex; gap: 8px; }
.settings-lang {
  flex: 1 1 0; cursor: pointer;
  padding: 9px 10px;
  border: 1px solid var(--c-line);
  border-radius: var(--radius-sm);
  background: var(--c-surface);
  color: var(--c-text);
  font: inherit; font-size: 14px;
}
.settings-lang.selected { border-color: var(--c-accent); background: var(--c-accent-soft); color: var(--c-text); }

/* ── 登录页「忘记密码」（P8 · L11）── */
.login-forgot { margin-top: 12px; text-align: center; }
.link-btn {
  background: none; border: 0; padding: 4px 6px; cursor: pointer;
  color: var(--c-link); font: inherit; font-size: 13px; text-decoration: underline;
}
.login-forgot .form-hint { margin-top: 2px; }

/* ── 设新密码（recovery）页内的按钮间距 ── */
#recovery-view .btn-block + .btn-block { margin-top: 8px; }
#recovery-view .settings-row { margin: 8px 0 12px; }

/* ── 今日看板「工具」卡（体检入口的新家）── */
.board-tools .cap-inline { margin-bottom: 2px; }

/* 桌面端（≥1024px）：设置面板给到更舒服的宽度与内边距 */
@media (min-width: 1024px) {
  .settings-modal { max-width: 560px; padding: 24px; }
}

/* ══════════════════════ P9 ·「器」层参数化线页（#/line/<code>） ══════════════════════
   线页 = 「器」层的第 N 个实例。工作台是第 1 个（direction_code = 4），但它有自己的
   固定 DOM（P3 建的 #wb-*），所以线页只**复用渲染器**（Workbench.lampsHtml），
   容器用下面这一套 #line-*。css 变量全部沿用既有主题层 —— **零新硬编码颜色**。 */

#line-root { display: flex; flex-direction: column; gap: var(--gap); }

/* ── 抬头：模块名 + 方向 + 本线梦想 ── */
.line-head-top { display: flex; align-items: center; gap: 12px; }
.line-head-ico { font-size: 30px; line-height: 1; flex: none; }
.line-head-name { margin: 0; font-size: 20px; font-weight: 650; color: var(--c-text); }
.line-head-sub { margin-top: 4px; font-size: 12.5px; color: var(--c-text-3); }
.line-head-sub code { color: var(--c-text-2); }
.line-dreams { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 14px; }
.line-dreams-k { font-size: 12.5px; color: var(--c-text-3); }
.line-dream {
  display: inline-flex; align-items: baseline; gap: 6px;
  padding: 5px 10px; border-radius: 999px;
  background: var(--c-surface-2); border: 1px solid var(--c-line);
  font-size: 13px; color: var(--c-text);
}
.line-dream em { font-style: normal; font-size: 11px; color: var(--c-text-3); }
.line-dream-dormant { border-style: dashed; }
.line-dream-dormant em { color: var(--s-p1); }
.line-dream-empty { font-size: 13px; color: var(--c-text-3); }

/* ── 链路阶梯：逐层计数，0 的那一层醒目 ── */
.line-ladder {
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px;
  margin: 10px 0 14px;
}
.line-step {
  min-width: 62px; padding: 7px 8px; border-radius: 9px; text-align: center;
  background: var(--c-surface-2); border: 1px solid var(--c-line);
}
.line-step-n { font-size: 17px; font-weight: 650; color: var(--c-text); }
.line-step-cn { margin-top: 2px; font-size: 11.5px; color: var(--c-text-3); }
.line-step-zero { border-color: var(--s-p0); }
.line-step-zero .line-step-n { color: var(--s-p0); }
.line-arrow { color: var(--c-text-3); font-size: 14px; }

/* ── 三种链路状态：**文案与底色都不同**，一眼分得开（P9 §2.2 第 2 条 / 判据 #9） ── */
.line-state { padding: 12px 14px; border-radius: 10px; border: 1px solid var(--c-line); margin-bottom: 10px; }
.line-state-t { font-size: 14.5px; font-weight: 650; margin-bottom: 6px; }
.line-state-b { font-size: 13px; line-height: 1.7; color: var(--c-text-2); }
.line-state-empty  { border-left: 4px solid var(--s-p0); background: var(--c-surface-2); }
.line-state-empty .line-state-t { color: var(--s-p0); }
.line-state-broken { border-left: 4px solid var(--s-p1); background: var(--c-surface-2); }
.line-state-broken .line-state-t { color: var(--s-p1); }
.line-state-ok     { border-left: 4px solid var(--s-done); background: var(--c-surface-2); }
.line-state-ok .line-state-t { color: var(--s-done); }

/* ── 本线处置与疑难池 ── */
.line-pool { display: flex; flex-direction: column; gap: 4px; margin: 8px 0; }
.line-pool-row {
  display: grid; grid-template-columns: 62px minmax(0, 1fr) minmax(0, 1.2fr) auto;
  gap: 8px; align-items: center; padding: 7px 9px; border-radius: 8px;
  background: var(--c-surface-2); font-size: 12.5px; color: var(--c-text-2);
}
.line-pool-mine { border-left: 3px solid var(--c-accent); }
.line-pool-act { font-weight: 650; color: var(--c-text); }
.line-pool-task, .line-pool-reason { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.line-pool-time { color: var(--c-text-3); }
.line-pool-none { font-size: 13px; color: var(--c-text-3); padding: 6px 2px; }

/* ── 诚实标注块 ── */
.line-honesty { font-size: 12.5px; color: var(--c-text-3); }
.line-honesty .wb-note { margin: 0; line-height: 1.75; }

@media (max-width: 700px) {
  .line-step { min-width: 52px; padding: 6px; }
  .line-step-n { font-size: 15px; }
  .line-pool-row { grid-template-columns: 52px minmax(0, 1fr); row-gap: 2px; }
  .line-pool-reason, .line-pool-time { grid-column: 2; }
}
