/* =====================================================================
   Rabbit Leads — 全局设计令牌 + 双主题系统（2026-09-25）
   =====================================================================
   架构（加载顺序）：design-system.css(V1.2 基线) → landing.css(官网/认证)
   → cockpit.css(后台组件) → 本文件(最后，语义权威层)。

   职责：
   0. 全局设计令牌（几何/字阶/间距/圆角/投影/图表色）：一套系统约束
      官网与后台 —— 单一科技蓝强调色、8px 间距体系、三级圆角、轻投影。
      历史紫色令牌（--purple/--purple-weak）在此整体重映射到蓝色族，
      旧 CSS 的紫色 var() 引用无需改动即去紫。
   1. 语义化 token 单一来源：:root = 浅色（销售长时办公默认），
      html[data-theme="dark"] = 深色（保留深蓝科技感，页面/卡片分层提亮、
      压迫感与光晕降低、无纯黑）。
   2. 旧 token 桥：--bg/--card/--line/--ink/--muted/--dim/--primary/
      --ok/--bad/--bd/--mut/--pri/--grad/--glow 等历史名全部映射到语义
      token —— 三份旧 CSS 里的 var() 引用无需改动即随主题翻转。
   3. 浅色组件皮肤：cockpit.css 的深色硬编码组件规则在此以
      html[data-theme="light"] 前缀逐族覆盖（本文件后加载 + 更高特异性，
      稳定胜出；深色路径字节级保持 cockpit 现状）。
   4. JS 行内提示卡统一语义类：.callout-info/.callout-warn/.callout-danger/
      .brief-card/.ai-edit/.code-box（替代散落的行内十六进制色）。

   主题切换由 index.html <head> 内联 boot 脚本在任何样式表之前设置
   data-theme（localStorage 按用户持久化，首访跟随系统），不重载页面。
   官网与后台全部随主题切换；注册/找回页（.reg-.fg-）为品牌页固定浅色
   （吉祥物/Logo 不失真约束）。
   对比度：两套状态色对各自卡片底色均 ≥4.5:1（WCAG AA，
   src/tests/test_journey_ui.cjs 双主题断言）。 */

/* ================= 0. 全局设计令牌（两主题通用） =================
   字阶 / 间距 / 圆角 / 图表色 —— 全站唯一来源；新代码一律用令牌。
   主强调色只有一个：科技蓝。图表第 4 色以 indigo-blue 替代旧紫。 */
:root{
  --font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC",
    "Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
  /* 字阶 */
  --text-xs:12px;  --text-sm:13px; --text-md:14px; --text-base:15px;
  --text-lg:17px;  --text-xl:20px; --text-2xl:24px; --text-3xl:30px;
  --text-4xl:clamp(30px,4.2vw,44px);
  /* 8px 间距体系（编号 = px/4） */
  --sp-1:4px; --sp-2:8px;  --sp-3:12px; --sp-4:16px; --sp-5:20px;
  --sp-6:24px; --sp-8:32px; --sp-10:40px; --sp-12:48px; --sp-16:64px;
  /* 圆角三级 + 全圆（桥接旧 --r/--r-s，统一为 16/8） */
  --radius-sm:8px; --radius-md:12px; --radius-lg:16px; --radius-full:999px;
  --r:var(--radius-lg); --r-s:var(--radius-sm);
  /* 图表/数据可视化（顺序即 donut/柱状默认序；第 4 色替代旧紫 #A78BFA） */
  --chart-1:#3D8BFF; --chart-2:#34D399; --chart-3:#F7B84A;
  --chart-4:#5B8CFF; --chart-5:#F97066; --chart-6:#8FA6CC;
  /* 历史紫令牌整体重映射 → 蓝色族（去紫的核心开关） */
  --purple:var(--brand-primary);
  --purple-weak:var(--brand-soft);
}

/* ================= 1. 语义 token — 浅色（默认） =================
   2026-09-30 起对齐《Rabbit Leads Enterprise Intelligence Design System》
   规范值（--page-bg/--surface/--brand… → 本文件语义名，单一来源原地更新，
   不另建第三套体系）。 */
:root{
  color-scheme:light;
  /* 表面 */
  --bg-page:#F2F5FA;            /* 页面背景（浅灰蓝；eds3 微调加深一档，增强与白卡片的 Page/Surface 层级） */
  --bg-surface:#FFFFFF;         /* 卡片 = --surface */
  --bg-subtle:#F8FAFD;          /* 次级浅底 = --surface-subtle */
  --bg-elevated:#FFFFFF;        /* 弹窗/下拉/Toast 悬浮层 */
  --bg-sunken:#F1F4F9;          /* 次级面板/代码块/输入槽 = --surface-sunken */
  --bg-hover:#F5F8FC;           /* 行/条目 hover */
  /* 文字 */
  --text-primary:#172033;       /* 主文字（深蓝黑）= --text-primary */
  --text-secondary:#5B6880;     /* eds3 微调：secondary 可读性增强（保持规范灰蓝相） */     /* 次级文字（灰蓝）= --text-secondary */
  --text-faint:#7E8CA3;         /* eds3 微调：meta/tertiary 可读性增强 */         /* 占位/弱化（非正文）= --text-tertiary */
  --text-on-brand:#FFFFFF;
  /* 边框/阴影（轻量，无发光） */
  --border-default:#E4EAF2;     /* = --border */
  --border-strong:#C9D6E8;
  --line-soft:#EDF1F6;          /* 表格行分隔 = --border-subtle */
  --shadow-card:0 1px 2px rgba(16,24,40,.03),0 4px 12px rgba(16,24,40,.04);
  --shadow-pop:0 12px 34px rgba(16,24,40,.16);
  --shadow-xs:0 1px 2px rgba(16,24,40,.06);
  --shadow-sm:0 2px 8px rgba(16,24,40,.08);
  /* 品牌 */
  --brand-primary:#4475F2;      /* = --brand */
  --brand-primary-hover:#3867DD;/* = --brand-hover */
  --brand-soft:#EDF3FF;         /* 品牌浅底（选中/信息）= --brand-soft */
  /* 状态（文字色均对其 -bg ≥4.5:1） */
  --status-success:#168866;     --status-success-bg:#EAF8F3;  --status-success-border:#BCE7D6;
  --status-warning:#A66A12;     --status-warning-bg:#FFF7E7;  --status-warning-border:#F1DFBC;
  --status-danger:#C0444B;      --status-danger-bg:#FFF0F1;   --status-danger-border:#F5C6C2;
  --status-info:#3569C8;        --status-info-bg:#EDF4FF;     --status-info-border:#C9D9F8;
  /* 组件 */
  --input-bg:#FFFFFF;           --input-border:#D7E1EE;
  --thead-bg:#F2F6FC;
  --scrollbar-thumb:#C7D2E3;    --scrollbar-thumb-hover:#A9B9D1;
  --zebra:rgba(23,32,51,.016);  --row-hover:rgba(68,117,242,.05);
  /* 主题特有 */
  --primary-2:#3867DD;
  --primary-weak:rgba(68,117,242,.10);
  --navy:#0C1322;
  --grad:linear-gradient(135deg,#4475F2 0%,#5D89F7 100%);
  --glow:0 2px 10px rgba(68,117,242,.18);
}

/* ================= 2. 语义 token — 深色 =================
   浅色主题的完整映射（非独立设计）：同名 token 仅调亮度/透明度，
   语义不变。页面 #08111F / 侧栏 #0B1526 / 卡片 #0E1A2E / 次级 #122039 /
   凹陷 #091524，深色分层优先靠背景层级而非阴影。 */
html[data-theme="dark"]{
  color-scheme:dark;
  --bg-page:#08111F;            /* = --page-bg */
  --bg-sidebar:#0B1526;         /* = --sidebar-bg（仅深色需要显式值） */
  --bg-surface:#0E1A2E;         /* = --surface */
  --bg-subtle:#122039;          /* = --surface-subtle */
  --bg-elevated:#122039;        /* 弹窗/下拉/Toast */
  --bg-sunken:#091524;          /* = --surface-sunken */
  --bg-hover:rgba(255,255,255,.04);
  --text-primary:#EDF3FC;
  --text-secondary:#9DADC6;
  --text-faint:#6E809B;
  --border-default:rgba(132,160,200,.14);
  --border-strong:rgba(132,160,200,.26);
  --line-soft:rgba(132,160,200,.08);
  --shadow-card:0 6px 22px rgba(2,8,20,.35);
  --shadow-pop:0 14px 36px rgba(2,8,20,.55);
  --brand-primary:#5D89F7;
  --brand-primary-hover:#78A0FF;
  --brand-soft:rgba(93,137,247,.12);
  --status-success:#34D399;     --status-success-bg:rgba(52,211,153,.12); --status-success-border:rgba(52,211,153,.30);
  --status-warning:#F7C777;     --status-warning-bg:rgba(247,184,74,.12); --status-warning-border:rgba(247,184,74,.30);
  --status-danger:#F49B93;      --status-danger-bg:rgba(249,112,102,.12); --status-danger-border:rgba(249,112,102,.32);
  --status-info:#7FB4FF;        --status-info-bg:rgba(93,137,247,.14);    --status-info-border:rgba(93,137,247,.32);
  --input-bg:rgba(14,26,46,.55); --input-border:rgba(132,160,200,.24);
  --thead-bg:#122039;
  --scrollbar-thumb:rgba(90,150,240,.25); --scrollbar-thumb-hover:rgba(90,150,240,.42);
  --zebra:rgba(255,255,255,.016); --row-hover:rgba(93,137,247,.07);
  --primary-2:#78A0FF;
  --primary-weak:rgba(93,137,247,.12);
  --navy:#081020;
  --grad:linear-gradient(135deg,#4475F2 0%,#5D89F7 100%);
  --glow:0 4px 16px rgba(68,117,242,.22);
  --shadow-xs:0 1px 2px rgba(2,8,20,.40);
  --shadow-sm:0 4px 14px rgba(2,8,20,.38);
  /* 深色紫重映射 → 亮一档的蓝 */
  --purple:#5D89F7;
  --purple-weak:rgba(93,137,247,.14);
  /* 旧 token 桥 — 深色显式覆盖：cockpit.css 的 html[data-theme="dark"]
     兜底块（同特异性 (0,1,1)）仍写死旧深色板（#050B18/#0A1830/#3D8BFF…），
     会压过 ：root 里的桥。此处同名重声明 → 新语义 token，靠加载序胜出，
     旧 var() 消费方（body 背景/内联样式/旧组件）深色下同样走新色板。 */
  --bg:var(--bg-page);
  --card:var(--bg-surface);
  --card-2:var(--bg-elevated);
  --line:var(--border-default);
  --line-2:var(--border-strong);
  --panel-line:var(--border-default);
  --ink:var(--text-primary);
  --muted:var(--text-secondary);
  --dim:var(--text-faint);
  --primary:var(--brand-primary);
  --bd:var(--border-default);
  --mut:var(--text-secondary);
  --pri:var(--brand-primary);
  --ok:var(--status-success);
  --bad:var(--status-danger);
}

/* ================= 3. 旧 token 桥（一次性，随主题自动翻转） ================= */
:root{
  --bg:var(--bg-page);
  --card:var(--bg-surface);
  --card-2:var(--bg-elevated);
  --line:var(--border-default);
  --line-2:var(--border-strong);
  --panel-line:var(--border-default);
  --ink:var(--text-primary);
  --muted:var(--text-secondary);
  --dim:var(--text-faint);
  --primary:var(--brand-primary);
  /* index.html 内联旧桥 */
  --bd:var(--border-default);
  --mut:var(--text-secondary);
  --pri:var(--brand-primary);
  --ok:var(--status-success);
  --bad:var(--status-danger);
}

/* ================= 4. 基础（两主题通用，走 token） ================= */
*{scrollbar-color:var(--scrollbar-thumb) transparent}
*::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb)}
*::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}

/* ================= 5. 浅色组件皮肤 =================
   覆盖 cockpit.css 深色硬编码规则；选择器加 html[data-theme="light"]
   前缀（特异性+加载序双保险），深色路径不经过这些规则。 */
html[data-theme="light"] body{background:var(--bg-page)}

/* ---- 外壳：侧栏 / 顶栏 ---- */
html[data-theme="light"] .sidebar{
  background:#FFFFFF;border-right:1px solid var(--border-default)}
html[data-theme="light"] .sidebar .brand{border-bottom-color:var(--border-default)}
html[data-theme="light"] #sidebar nav a{color:var(--text-secondary)}
html[data-theme="light"] #sidebar nav a .ic{color:var(--text-faint)}
html[data-theme="light"] #sidebar nav a:hover{background:var(--bg-hover);color:var(--text-primary)}
html[data-theme="light"] #sidebar nav a:hover .ic{color:var(--brand-primary)}
/* 选中态（Enterprise 规范）：brand-soft 底 + 品牌字/图标，
   两主题同构（token 自翻转），不再用高饱和整块渐变按钮。 */
html[data-theme="light"] #sidebar nav a.on{
  background:var(--brand-soft);color:var(--brand-primary);box-shadow:none}
html[data-theme="light"] #sidebar nav a.on .ic,
html[data-theme="light"] #sidebar a.on .nl b{color:var(--brand-primary)}
html[data-theme="light"] #sidebar a.on .nl i{color:var(--text-secondary)}
html[data-theme="light"] #sidebar a:hover .nl i{color:var(--text-secondary)}
html[data-theme="light"] .promo{
  background:#F7FAFF;border-color:var(--border-default)}
html[data-theme="light"] .promo:hover{border-color:var(--border-strong)}
html[data-theme="light"] .sb-t:hover{color:var(--brand-primary)}
html[data-theme="light"] .sb-t{color:var(--text-secondary)}
html[data-theme="light"] .sb-mascot{filter:none;opacity:.92;width:118px}
html[data-theme="light"] .sb-mascot{filter:none}
html[data-theme="light"] .topbar{
  background:rgba(255,255,255,.88);border-bottom-color:var(--border-default)}
html[data-theme="light"] .credits-chip{
  background:var(--brand-soft);border-color:#C9D9F8;color:var(--brand-primary-hover)}

/* 顶栏筛选 chip / 铃 / 主题切换（#tb-theme 复用 .tb-bell 壳） */
html[data-theme="light"] .tbf{background:#FFFFFF}
html[data-theme="light"] .tbf svg{color:var(--brand-primary)}
html[data-theme="light"] .tbf:hover,
html[data-theme="light"] .tb-bell:hover{border-color:var(--brand-primary)}
html[data-theme="light"] .tb-bell{background:#FFFFFF}
html[data-theme="light"] .tbf-menu{
  background:var(--bg-elevated);box-shadow:var(--shadow-pop)}
html[data-theme="light"] .oc-search{background:#FFFFFF}

/* 全局搜索框 */
html[data-theme="light"] .gsearch input{
  background:#FFFFFF;border-color:#D9E2EF;color:var(--text-primary)}
html[data-theme="light"] .gsearch input::placeholder{color:var(--text-faint)}
html[data-theme="light"] .gsearch input:focus{box-shadow:0 0 0 3px var(--primary-weak)}

/* ---- 卡片 / 表格 / 行 ---- */
html[data-theme="light"] .card{box-shadow:var(--shadow-card)}
html[data-theme="light"] td{border-bottom-color:var(--line-soft)}
html[data-theme="light"] tr.click:hover,tr.click:hover td{background:var(--row-hover)}
html[data-theme="light"] .rows .row-item{border-bottom-color:var(--line-soft)}
html[data-theme="light"] .rows .row-item:hover{background:var(--bg-hover)}
html[data-theme="light"] #l-table thead th,
html[data-theme="light"] #v-results thead th{background:var(--thead-bg)}
html[data-theme="light"] #l-table tbody td b{color:var(--text-primary)}
html[data-theme="light"] :where(#l-table tbody tr:nth-child(even):not(.sel):not(:hover)) td{background:var(--zebra)}
html[data-theme="light"] #l-bulkbar:not(.hidden){
  background:linear-gradient(90deg,var(--brand-soft),rgba(53,109,255,.02));
  border-color:#B9CFFB}
html[data-theme="light"] .ov-table td{border-bottom-color:var(--line-soft)}
html[data-theme="light"] .ov-table tr:hover td{background:var(--row-hover)}
html[data-theme="light"] #r-detail{background:var(--bg-sunken)}
html[data-theme="light"] .kind-row{border-bottom-color:var(--line-soft)}
html[data-theme="light"] .fu-row{border-bottom-color:var(--line-soft)}
html[data-theme="light"] .act-row{border-bottom-color:#EEF2F8}

/* ---- 输入 / 按钮 / Toast / 下拉 option ---- */
html[data-theme="light"] input,
html[data-theme="light"] select,
html[data-theme="light"] textarea{
  background:var(--input-bg);border-color:var(--input-border);color:var(--text-primary)}
html[data-theme="light"] input::placeholder,
html[data-theme="light"] textarea::placeholder{color:var(--text-faint)}
html[data-theme="light"] input:focus,
html[data-theme="light"] select:focus,
html[data-theme="light"] textarea:focus{box-shadow:0 0 0 3px var(--primary-weak)}
html[data-theme="light"] select option{background:#FFFFFF;color:#14213D}
html[data-theme="light"] select.l-state{background:var(--input-bg);border-color:var(--input-border);color:var(--text-primary)}
html[data-theme="light"] .sec,html[data-theme="light"] button.sec,
html[data-theme="light"] .adm-sm.sec{
  background:#FFFFFF;border-color:#D9E2EF;color:#33415C}
html[data-theme="light"] .sec:hover,html[data-theme="light"] button.sec:hover{
  border-color:var(--border-strong);color:var(--text-primary);background:var(--bg-hover)}
html[data-theme="light"] .mini-btn{
  background:#FFFFFF;border-color:#D9E2EF;color:#33415C}
html[data-theme="light"] .mini-btn:hover{
  border-color:var(--border-strong);color:var(--text-primary);background:var(--bg-hover)}
html[data-theme="light"] .toast{
  background:var(--bg-elevated);border-color:var(--border-strong);
  color:var(--text-primary);box-shadow:var(--shadow-pop)}
html[data-theme="light"] .toast.err{border-color:var(--status-danger-border)}
html[data-theme="light"] .num-input{background:#FFFFFF;border-color:#D9E2EF;color:var(--text-primary)}
html[data-theme="light"] .chips .chip{
  background:#FFFFFF;border-color:#D9E2EF;color:var(--text-secondary)}
html[data-theme="light"] .chips .chip:hover{border-color:var(--border-strong);color:var(--text-primary)}
html[data-theme="light"] .chips .chip.sel{background:var(--grad);border-color:transparent;color:var(--text-on-brand)}

/* ---- 徽章/状态族（浅色 pastel 底 + 可读深字） ---- */
html[data-theme="light"] .tag{background:var(--brand-soft);border-color:#C9D9F8;color:var(--brand-primary-hover)}
html[data-theme="light"] .tbadge.running{background:var(--status-info-bg);color:var(--status-info);border-color:var(--status-info-border)}
html[data-theme="light"] .tbadge.done{background:var(--status-success-bg);color:var(--status-success);border-color:var(--status-success-border)}
html[data-theme="light"] .tbadge.partial,
html[data-theme="light"] .tbadge.review{background:var(--status-warning-bg);color:var(--status-warning);border-color:var(--status-warning-border)}
html[data-theme="light"] .tbadge.paused,
html[data-theme="light"] .tbadge.cancelled,
html[data-theme="light"] .tbadge.empty{background:#EEF2F7;color:var(--text-secondary);border-color:#DDE5EF}
html[data-theme="light"] .tbadge.failed{background:var(--status-danger-bg);color:var(--status-danger);border-color:var(--status-danger-border)}
html[data-theme="light"] .badge{background:#EEF2F7;color:var(--text-secondary)}
html[data-theme="light"] .badge.new,
html[data-theme="light"] .badge.ok{background:var(--status-success-bg);color:var(--status-success)}
html[data-theme="light"] .badge.old{background:#EEF2F7;color:var(--text-secondary)}
html[data-theme="light"] .badge.no{background:var(--status-danger-bg);color:var(--status-danger)}
html[data-theme="light"] .stage{background:#EEF2F7;color:var(--text-secondary);border:1px solid #DDE5EF}
html[data-theme="light"] .stage.done{background:var(--status-success-bg);color:var(--status-success)}
html[data-theme="light"] .stage.run{background:var(--status-info-bg);color:var(--status-info)}
html[data-theme="light"] .stage.skipped{background:#F1F5FA;color:var(--text-faint)}
html[data-theme="light"] .grade.g-a{background:var(--status-success-bg);color:var(--status-success);border-color:var(--status-success-border)}
html[data-theme="light"] .grade.g-b{background:var(--status-info-bg);color:var(--status-info);border-color:var(--status-info-border)}
html[data-theme="light"] .grade.g-c{background:var(--status-warning-bg);color:var(--status-warning);border-color:var(--status-warning-border)}
html[data-theme="light"] .grade.g-d{background:#EEF2F7;color:var(--text-secondary);border-color:#DDE5EF}
html[data-theme="light"] .stag.hot{background:var(--status-danger-bg);color:var(--status-danger);border-color:var(--status-danger-border)}
html[data-theme="light"] .stag.wait{background:var(--status-warning-bg);color:var(--status-warning);border-color:var(--status-warning-border)}
html[data-theme="light"] .stag.go,
html[data-theme="light"] .stag.ok{background:var(--status-success-bg);color:var(--status-success);border-color:var(--status-success-border)}
html[data-theme="light"] .stag.dim{background:#EEF2F7;color:var(--text-secondary);border-color:#DDE5EF}
html[data-theme="light"] .stag.run{background:var(--status-info-bg);color:var(--status-info);border-color:var(--status-info-border)}
html[data-theme="light"] .triage-count{background:#FFFFFF;border-color:var(--border-default)}
html[data-theme="light"] .triage-count b{color:var(--text-primary)}
html[data-theme="light"] .triage-count span{color:var(--text-secondary)}
html[data-theme="light"] .triage-count.tc-ok,
html[data-theme="light"] .triage-count.verified{background:var(--status-success-bg);border-color:var(--status-success-border)}
html[data-theme="light"] .triage-count.tc-partial,
html[data-theme="light"] .triage-count.pending{background:var(--status-warning-bg);border-color:var(--status-warning-border)}
html[data-theme="light"] .triage-count.tc-bad,
html[data-theme="light"] .triage-count.rejected{background:var(--status-danger-bg);border-color:var(--status-danger-border)}

/* ---- 搜索旅程（j-*）+ 最近活动（#j-acts）----
   浅色：白卡 + 深字；状态色走状态 token（对白卡全部 ≥4.5:1） */
html[data-theme="light"] .j-cap{color:var(--text-primary)}
html[data-theme="light"] .j-net{background:#FFFFFF;border:1px solid var(--border-default)}
html[data-theme="light"] .j-net.warn{background:var(--status-warning-bg);border-color:var(--status-warning-border);color:var(--status-warning)}
html[data-theme="light"] .j-net.bad{background:var(--status-danger-bg);border-color:var(--status-danger-border);color:var(--status-danger)}
html[data-theme="light"] .j-banner{background:#FFFFFF;border:1px solid var(--border-default)}
html[data-theme="light"] .j-banner.ok{background:var(--status-success-bg);border-color:var(--status-success-border)}
html[data-theme="light"] .j-banner.bad{background:var(--status-danger-bg);border-color:var(--status-danger-border)}
html[data-theme="light"] .j-banner.warn{background:var(--status-warning-bg);border-color:var(--status-warning-border)}
html[data-theme="light"] .j-res{background:#FFFFFF;border:1px solid var(--border-default)}
html[data-theme="light"] .j-res:hover{border-color:var(--border-strong);background:var(--bg-hover)}
html[data-theme="light"] #f-journey .j-head h1{color:var(--text-primary)}
html[data-theme="light"] #f-journey .j-num{color:var(--text-primary);text-shadow:none}
html[data-theme="light"] #j-elapsed{
  background:var(--brand-soft);border-color:#C9D9F8;color:var(--brand-primary-hover)}
html[data-theme="light"] .j-acts{background:#FFFFFF;border:1px solid var(--border-default)}
html[data-theme="light"] .j-acts li{border-bottom-color:var(--line-soft)}
html[data-theme="light"] .j-acts li b{color:var(--text-primary)}
html[data-theme="light"] .a-run{color:var(--status-info)}
html[data-theme="light"] .a-warn{color:var(--status-warning)}
html[data-theme="light"] .j-acts details summary:hover{color:var(--brand-primary-hover)}
html[data-theme="light"] .j-acts .mini-btn{
  background:var(--brand-soft);border:1px solid #C9D9F8;color:var(--brand-primary-hover)}
html[data-theme="light"] .j-acts .mini-btn:hover{background:#DCE7FD}

/* ---- 草稿 / 复核 / 跟进 / 会员卡 ---- */
html[data-theme="light"] .draftbox{background:var(--bg-sunken);border-color:var(--border-default);color:var(--text-primary)}
html[data-theme="light"] .review-grid .review-field{background:var(--bg-sunken);border-color:var(--border-default)}
html[data-theme="light"] .review-field .rf-k{color:var(--text-faint)}
html[data-theme="light"] .review-field .rf-v{color:var(--text-primary)}
html[data-theme="light"] .review-evidence{background:#FAFCFE;border-color:var(--border-default)}
html[data-theme="light"] .review-evidence a{color:var(--brand-primary-hover)}
html[data-theme="light"] .fu-hist{background:var(--bg-sunken);border-color:var(--border-default)}
html[data-theme="light"] .mbr{background:linear-gradient(160deg,#EDF3FE,#FFFFFF);border-color:var(--border-default)}
html[data-theme="light"] .mbr .up{background:var(--brand-soft);border-color:#C9D9F8;color:var(--brand-primary-hover)}
html[data-theme="light"] .mbr .up:hover{border-color:var(--brand-primary);color:var(--brand-primary)}

/* JS 行内提示卡（#ai-out/#fu-out div[style] 深色 !important 的浅色镜像 + 语义类） */
html[data-theme="light"] #ai-out div[style],
html[data-theme="light"] #fu-out div[style]{
  background:var(--brand-soft)!important;border:1px solid #C9D9F8!important;color:var(--text-primary)!important}
html[data-theme="light"] #ai-out div[style] .small,
html[data-theme="light"] #fu-out div[style] .small{color:var(--text-secondary)!important}
html[data-theme="light"] .card pre[style],
html[data-theme="light"] #adm-panel pre[style]{
  background:var(--bg-sunken)!important;color:var(--text-primary)!important;border:1px solid var(--border-default)}

/* ---- 用户管理（V6 深蓝层次的浅色对应） ---- */
html[data-theme="light"] #v-adminusers .adm-inp,
html[data-theme="light"] .mroot .adm-inp{
  background:#FFFFFF;border:1px solid var(--input-border);color:var(--text-primary)}
html[data-theme="light"] #v-adminusers .tbl-sm th,
html[data-theme="light"] #v-adminusers .tbl-sm td,
html[data-theme="light"] .mroot .tbl-sm th,
html[data-theme="light"] .mroot .tbl-sm td{border-bottom-color:var(--line-soft)}
html[data-theme="light"] #v-adminusers .tbl-sm thead th,
html[data-theme="light"] .mroot .tbl-sm thead th{
  background:var(--thead-bg);color:var(--text-secondary)}
html[data-theme="light"] :where(#v-adminusers .tbl-sm tbody tr:nth-child(even)) td{background:var(--zebra)}
html[data-theme="light"] #v-adminusers .tbl-sm tbody tr:hover td{background:var(--row-hover)}
html[data-theme="light"] #v-adminusers .tbl-sm td b,
html[data-theme="light"] .mroot .tbl-sm td b{color:var(--text-primary)}
html[data-theme="light"] .tag.ro-super{background:#14213D;border-color:#14213D;color:#FFFFFF}
html[data-theme="light"] .tag.ro-owner{background:var(--brand-soft);border-color:#C9D9F8;color:var(--brand-primary-hover)}
html[data-theme="light"] .tag.ro-member{background:#EEF2F7;border-color:#DDE5EF;color:var(--text-secondary)}
html[data-theme="light"] #v-adminusers .adm-sm.warn,
html[data-theme="light"] .mroot .adm-sm.warn{
  background:var(--status-danger-bg);border:1px solid var(--status-danger-border);color:var(--status-danger)}
html[data-theme="light"] #v-adminusers .adm-sm.warn:hover,
html[data-theme="light"] .mroot .adm-sm.warn:hover{
  background:#FBDCDC;border-color:var(--status-danger);color:var(--status-danger)}

/* ---- Overview 驾驶舱 ---- */
html[data-theme="light"] .ov-hero{
  background:linear-gradient(120deg,#EAF1FE 0%,#F6F9FE 55%,#E6EEFB 100%);
  border-color:#D5E2F5}
html[data-theme="light"] .ov-hero::before{opacity:0}
html[data-theme="light"] .ov-hero::after{background:none}
html[data-theme="light"] .ov-hero h2{color:var(--text-primary)}
html[data-theme="light"] .ov-hero h2 em{background:none;color:var(--brand-primary)}
html[data-theme="light"] .oh-eyebrow{color:var(--brand-primary-hover)}
html[data-theme="light"] .oh-art-tx b{color:var(--text-primary);text-shadow:none}
html[data-theme="light"] .oh-art-tx i{color:var(--text-secondary)}
html[data-theme="light"] .oh-chips span{background:#FFFFFF}
html[data-theme="light"] .ov-kpi .ok-num{color:var(--text-primary)}
html[data-theme="light"] .ov-card .oc-head .oc-more{color:var(--brand-primary-hover)}
html[data-theme="light"] .ov-card .oc-head .oc-more:hover{color:var(--brand-primary)}
html[data-theme="light"] .pstep{background:#F7FAFD}
html[data-theme="light"] .pstep.ps-soon{background:transparent}
html[data-theme="light"] .ps-num{background:var(--brand-soft);border-color:#C9D9F8;color:var(--brand-primary-hover)}
html[data-theme="light"] .rail-card .rc-ic{background:var(--brand-soft)}
html[data-theme="light"] .cred-big{color:var(--text-primary)}
html[data-theme="light"] .ai-card{background:linear-gradient(160deg,#F3F7FF,#FFFFFF);border-color:var(--border-default)}
html[data-theme="light"] .ai-card .ai-bubble{
  background:var(--bg-sunken);border-color:var(--border-default);color:var(--text-primary)}
html[data-theme="light"] .ai-card .ai-m-bot{
  background:var(--bg-sunken);border-color:var(--border-default);color:var(--text-primary)}
html[data-theme="light"] .ai-card .ai-m-bot .ai-m-err{color:var(--status-danger)}
html[data-theme="light"] .ai-card .ai-inp{background:#FFFFFF;border-color:var(--input-border);color:var(--text-primary)}
html[data-theme="light"] .ai-card .ai-ref{background:var(--brand-soft);border-color:#C9D9F8;color:var(--brand-primary-hover)}
html[data-theme="light"] .ai-card .ai-ref:hover{background:#DCE7FD;color:var(--brand-primary)}
html[data-theme="light"] .ai-card .ai-ref.task{background:#EEF2F7;border-color:#DDE5EF;color:var(--text-secondary)}
html[data-theme="light"] .qa-btn{background:#FFFFFF}
html[data-theme="light"] .qa-btn i{color:var(--brand-primary)}
html[data-theme="light"] .soon-card h2{color:var(--text-primary)}
html[data-theme="light"] .soon-card h2 em{background:none;color:var(--brand-primary)}
/* 非 Overview 页顶部不再有装饰光带（地球横幅已移除，2026-09-25） */

/* Overview 数据小组件 */
html[data-theme="light"] .sc-pill.sb-hi{background:var(--status-success-bg);color:var(--status-success);border-color:var(--status-success-border)}
html[data-theme="light"] .sc-pill.sb-md{background:var(--status-info-bg);color:var(--status-info);border-color:var(--status-info-border)}
html[data-theme="light"] .sc-pill.sb-lo{background:var(--status-warning-bg);color:var(--status-warning);border-color:var(--status-warning-border)}
html[data-theme="light"] .ev-chip{background:var(--brand-soft);border-color:#C9D9F8;color:var(--brand-primary-hover)}
html[data-theme="light"] .ev-chip.ev-more{background:#F1F5FA;border-color:var(--border-default);color:var(--text-faint)}
html[data-theme="light"] .intent.it-hi{color:var(--status-danger)}
html[data-theme="light"] .intent.it-md{color:var(--status-warning)}
html[data-theme="light"] .st-chip{background:#FFFFFF}
html[data-theme="light"] .bar-track{background:#E9EEF5}
html[data-theme="light"] .ins-card{background:#FAFCFE}
html[data-theme="light"] .fail-hint,
html[data-theme="light"] .psm-fail{color:var(--status-danger)}
html[data-theme="light"] .l-bhv.on{border-color:var(--brand-primary);color:var(--brand-primary-hover);background:var(--brand-soft)}
html[data-theme="light"] .qual-pill{background:#EEF2F7;color:var(--text-secondary)}
html[data-theme="light"] .qual-pill.ok{background:var(--status-success-bg);color:var(--status-success)}
html[data-theme="light"] .qual-pill.warn{background:var(--status-warning-bg);color:var(--status-warning)}
html[data-theme="light"] .qual-pill.no{background:var(--status-danger-bg);color:var(--status-danger)}
html[data-theme="light"] .tagchip.tg-red{background:var(--status-danger-bg);color:var(--status-danger);border-color:var(--status-danger-border)}
html[data-theme="light"] .tagchip.tg-amber{background:var(--status-warning-bg);color:var(--status-warning);border-color:var(--status-warning-border)}
html[data-theme="light"] .tagchip.tg-gray{background:#EEF2F7;color:var(--text-secondary);border-color:#DDE5EF}
html[data-theme="light"] .tagchip.tg-blue{background:var(--brand-soft);color:var(--brand-primary-hover);border-color:#C9D9F8}

/* ---- 深色微调：降低大面积硬编码残件的亮度差（与提亮后的表面分层一致） ---- */
html[data-theme="dark"] .sidebar{background:var(--bg-sidebar,#0B1526)}
html[data-theme="dark"] .topbar{background:rgba(7,16,33,.84)}
html[data-theme="dark"] #l-table thead th,
html[data-theme="dark"] #v-results thead th{background:var(--thead-bg)}
html[data-theme="dark"] #v-adminusers .tbl-sm thead th,
html[data-theme="dark"] .mroot .tbl-sm thead th{background:var(--thead-bg)}
html[data-theme="dark"] .tbf-menu{background:var(--bg-elevated)}
html[data-theme="dark"] select option{background:var(--bg-elevated)}
html[data-theme="dark"] .card{box-shadow:var(--shadow-card)}

/* ================= 6. 语义提示卡类（替代 JS 行内十六进制色） =================
   两主题经 token 自适配；#ai-out/#fu-out 旧 div[style] 深色/浅色镜像规则
   不命中无 style 属性的元素，本类即为唯一权威。 */
.callout{border-radius:8px;padding:12px;border:1px solid var(--border-default);
  background:var(--bg-sunken);color:var(--text-primary)}
.callout .small{color:var(--text-secondary)}
.callout-info{background:var(--status-info-bg);border-color:var(--status-info-border)}
.callout-warn{background:var(--status-warning-bg);border-color:var(--status-warning-border);color:var(--text-primary)}
.callout-danger{background:var(--status-danger-bg);border-color:var(--status-danger-border);color:var(--status-danger)}
.callout-sm{padding:6px 10px;margin-bottom:8px;border-radius:6px}
/* callout/卡片内部结构（替代行内 style，避免 #ai-out/#fu-out div[style] 镜像规则命中） */
.callout .co-hl{font-weight:600}
.callout .co-msg{margin-top:4px}
.callout .co-mt{margin-top:6px}
.callout .co-acts{margin-top:10px;display:flex;gap:8px;flex-wrap:wrap}
.brief-card{background:var(--bg-sunken);border:1px solid var(--border-default);border-radius:8px;padding:12px;color:var(--text-primary)}
.brief-card .bc-row{margin-bottom:6px}
.brief-card .bc-sec{margin-top:8px}
.ai-edit{margin-top:10px}
.code-box{white-space:pre-wrap;font-size:12px;background:var(--bg-sunken);
  color:var(--text-primary);padding:8px;border-radius:6px;border:1px solid var(--border-default)}

/* ================= 7. 主题切换按钮（顶栏，复用 .tb-bell 壳） =================
   浅色显月亮（点击切深色），深色显太阳（点击切浅色） */
#tb-theme .ic-sun{display:none}
#tb-theme .ic-moon{display:block}
html[data-theme="dark"] #tb-theme .ic-sun{display:block}
html[data-theme="dark"] #tb-theme .ic-moon{display:none}
