/* ===========================================================================
   0. 设计令牌（双层：primitive → semantic）
   =========================================================================== */
:root{
  /* ---- primitive : color ---- */
  --red-700:#C70000;      /* 品牌红：导航选中、Tab 选中、卡片标题、错误块主色 */
  --red-600:#E71618;      /* 角标红：悬浮层数字角标 */
  --red-500:#FF0000;      /* 选中卡片描边（参考图实测为纯红 1px） */
  --red-50:#FFEBEB;       /* 浅红底：选中态背景 */
  --orange-600:#E84A11;   /* 橙红：会话标题「当前会话」、时钟图标 */
  --ink-900:#102334;      /* 主文字 */
  --ink-700:#475460;      /* 次文字 */
  --ink-600:#555F68;      /* 三级文字 / 标签 */
  --ink-400:#64707E;      /* 弱文字 / 占位符（原 #848C9A 对白底仅 3.39，改后 4.83） */
  --gray-300:#D6DBE0;     /* 卡片描边 */
  --gray-250:#CED5DC;     /* 输入框 / 顶栏搜索描边 */
  --gray-200:#E5E8EF;     /* 胶囊描边 */
  --gray-150:#EEF0F2;     /* 卡片内分隔线 */
  --gray-100:#EEF4F9;     /* 面板底色 */
  --gray-50:#F7F9FD;      /* 胶囊 / 折叠条底色 */
  --gray-25:#F8FAFC;      /* 顶栏搜索底色 */
  --page:#F0F4F7;         /* 页面底色 */
  --white:#FFFFFF;
  --green-600:#087A56;    /* 已启用文字 */
  --green-500:#10B981;    /* 已启用圆点 */
  /* ---- primitive : 新增（消除组件层裸 hex）---- */
  --gray-50-hover:#F5F7FA;  /* 面状 hover */
  --gray-60:#F1F4FA;      /* 点状 hover */
  --gray-600:#6E6E6E;     /* 滚动条拇指 hover */
  --gray-500:#8B8B8B;     /* 滚动条拇指（SKILL 列表） */
  --gray-350:#BFC7CF;     /* 卡片类 hover 描边 */
  --gray-325:#C3CAD1;     /* 滚动条拇指（对话区，弱） */
  --gray-275:#B9C0C7;     /* 禁用态文字 / 禁用态圆点 */
  --gray-240:#E2E6EB;     /* 分类下拉描边 */
  --gray-225:#CBD2DA;     /* 胶囊类 hover 描边 */
  --gray-180:#E9EDF0;     /* 头像占位底 */
  --gray-175:#E6EBF0;     /* 旧/新标签底 */
  --gray-120:#E3E8EE;     /* 骨架渐变止 */
  --gray-80:#EEF1F5;      /* 骨架渐变起 */
  --gray-40:#FCFCFC;      /* 滚动条轨道 / 箭头条 */
  --gray-30:#FBFCFD;      /* 分类下拉底 */
  --red-100:#FFDCD2;      /* 错误块描边（软） */
  --red-25:#FFF7F6;       /* 错误块底（软） */
  --amber-25:#FFF6EC;     /* 技能项回填高亮底 */
  --peach-300:#F0A98C;    /* 输入框聚焦描边（暖） */
  --slate-800:#4A5762;    /* 停止态渐变起 */
  --slate-900:#26313D;    /* 停止态渐变止 */
  --olive-600:#8FA82F;    /* 悬浮按钮渐变起 */
  --amber-450:#E8801A;    /* 悬浮按钮渐变中 */
  --rust-800:#E6190C;     /* 悬浮按钮渐变止 */
  --olive-500:#95AB39;    /* 品牌渐变起 */
  --amber-500:#E89215;    /* 品牌渐变中 */
  --rust-600:#E85913;     /* 品牌渐变止 */
  --rust-700:#E82D15;     /* 悬浮按钮渐变止（更深） */

  /* ---- semantic : color ---- */
  --bg-page:var(--page);
  --bg-card:var(--white);
  --bg-panel:var(--gray-100);
  --bg-subtle:var(--gray-50);
  --bg-field:var(--white);
  --bg-field-topbar:var(--gray-25);
  --bg-selected:var(--red-50);

  --text-primary:var(--ink-900);
  --text-secondary:var(--ink-700);
  --text-tertiary:var(--ink-600);
  --text-muted:var(--ink-400);
  --text-brand:var(--red-700);
  --text-brand-warm:var(--orange-600);
  --text-brand-strong:var(--rust-750); /* 仅用于文本（橙作正文对白底仅 3.88；此值 5.18 on #FFF / 4.59 on #F4F1EA）；v1.1 下沉为 primitive */
  --text-on-brand:var(--white);
  --text-success:var(--green-600);

  --border-card:var(--gray-300);
  --border-field:var(--gray-250);
  --border-soft:var(--gray-200);
  --border-divider:var(--gray-150);
  --border-selected:var(--red-500);

  --dot-success:var(--green-500);
  --badge-danger:var(--red-600);

  --focus-ring:var(--orange-600);

  /* ---- semantic : 选中态（全系统唯一口径，2026-10-27 定案）----
     语言 = 浅暖底 + 左侧 2px 强调色条 + 文字加重；不描边、不用红框。
     起源：SKILL 分类下拉的选中项（skillpanel.css .cat-opt[aria-selected]），
     之前 部门卡 / 筛选 chip / 进度档位 / 分类列表 各自用「浅红底 + 红框」，
     同一系统两套选中语言 —— 全部收敛到下面这 4 个令牌。 */
  --bg-active:var(--amber-25);
  --active-bar:var(--amber-500);
  --active-bar-w:var(--dd-accent-w);
  --text-active:var(--text-brand-strong);
  --shadow-active:inset var(--active-bar-w) 0 0 var(--active-bar);

  /* ---- semantic : 空态（四处空态统一度量，2026-10-27）---- */
  --empty-pad-y:var(--sp-12);
  --empty-pad-x:var(--sp-4);

  /* ---- gradient / shadow 快捷引用 ---- */
  --gradient-brand:linear-gradient(135deg,var(--olive-500) 0%,var(--amber-500) 55%,var(--rust-600) 100%);
  --gradient-brand-float:linear-gradient(135deg,var(--olive-600) 0%,var(--amber-450) 55%,var(--rust-800) 100%);
  --gradient-brand-disabled:linear-gradient(135deg,rgba(149,171,57,.50) 0%,rgba(232,146,21,.50) 55%,rgba(232,89,19,.50) 100%);
  --gradient-stop:linear-gradient(135deg,var(--slate-800) 0%,var(--slate-900) 100%);
  --gradient-skeleton:linear-gradient(90deg,var(--skeleton-from) 25%,var(--skeleton-to) 37%,var(--skeleton-from) 63%);
  /* 列表底部渐隐（下拉/长列表「下面还有」提示）：从透明过渡到面板白底 */
  --gradient-fade-bottom:linear-gradient(to bottom,rgba(255,255,255,0) 0%,var(--bg-card) 72%);
  --shadow-focus:0 0 0 3px rgba(232,74,17,.10);

  /* ---- semantic : 交互态（hover / 禁用 / 聚焦）----
     分档规则见 design-system.md §1.4：
       bg-hover        面状容器（面积 > 4000px²）：列表行、大卡片
       bg-hover-strong 点状控件（面积 ≤ 4000px²）：图标按钮、折叠条
       border-hover        基底为 border-card(#D6DBE0) 的组件
       border-hover-soft   基底为 border-soft(#E5E8EF) 的组件
  */
  --bg-hover:var(--gray-50-hover);
  --bg-hover-strong:var(--gray-60);
  --bg-hover-on-panel:rgba(255,255,255,.68);
  --bg-hover-on-panel-soft:rgba(255,255,255,.62);
  --border-hover:var(--gray-350);
  --border-hover-soft:var(--gray-225);
  --text-disabled:var(--gray-275);
  --border-focus-warm:var(--peach-300);

  /* ---- semantic : 头像（2026-10-28 统一口径）----
     成员姓氏字头像与本人照片共用同一圈配色，侧栏 / 顶栏 / 消息三处只改尺寸，不改配色。
     底色用品牌红实底而非浅红：会话里用户气泡本身是浅红（--bg-selected），
     头像若也取浅红，两块同色相邻会糊在一起。 */
  --avatar-bg:var(--red-700);
  --avatar-fg:var(--text-on-brand);
  --avatar-ring:var(--border-soft);
  --avatar-fs:var(--fs-head);
  --avatar-fw:var(--fw-head);
  --avatar-size-sm:30px;   /* 顶栏 · 消息 */
  --avatar-size-md:32px;   /* 侧栏用户卡 */

  /* ---- semantic : 中性补充 ---- */
  --bg-avatar-placeholder:var(--gray-180);
  --bg-field-select:var(--gray-30);
  --border-field-select:var(--gray-240);
  --bg-tag:var(--gray-175);
  --scrim:rgba(16,35,52,.45);
  --bg-toast:rgba(16,35,52,.92);
  --text-on-toast:var(--white);

  /* ---- semantic : 滚动条 ---- */
  --scrollbar-track:var(--gray-40);
  --scrollbar-thumb:var(--gray-500);
  --scrollbar-thumb-hover:var(--gray-600);
  --scrollbar-thumb-subtle:var(--gray-325);

  /* ---- semantic : 加载骨架 ---- */
  --skeleton-from:var(--gray-80);
  --skeleton-to:var(--gray-120);

  /* ---- semantic : 软底（错误 / 品牌暖）---- */
  --bg-danger-soft:var(--red-25);
  --border-danger-soft:var(--red-100);
  --bg-brand-warm-soft:var(--amber-25);
  --ph-bg:#FFF4D6;          /* 待补充占位符底（浅黄） */
  --ph-fg:#7A4B00;          /* 待补充占位符文字（对 #FFF4D6 实测 8.0） */

  /* ---- font : size / weight / line-height ---- */
  --font-cjk:"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei","Noto Sans CJK SC","Source Han Sans SC","Hiragino Sans GB",sans-serif;
  --font-num:"SF Pro Display","Helvetica Neue",Arial,var(--font-cjk);

  --fs-display:18px;  --lh-display:24px;  --fw-display:700;
  --fs-title:14px;    --lh-title:22px;    --fw-title:700;
  --fs-head:13px;     --lh-head:18px;     --fw-head:600;
  --fs-body:12px;     --lh-body:18px;     --fw-body:400;
  --fs-small:11px;    --lh-small:14px;    --fw-small:400;
  --fs-micro:10px;    --lh-micro:14px;    --fw-micro:700;

  /* ---- font : 扩展档（组件层实测需要的 6 档，2026-10-26 定名）---- */
  --fs-nano:9.5px;         /* 时钟按钮红色角标 */
  --fs-tiny:10.5px;        /* 「已启用」状态点文字 */
  --fs-body-lg:13.5px;     /* 导航项选中态、会话标题 */
  --fs-title-sm:15px;      /* 空态主文案「组织 AI 助手」 */
  --fs-title-lg:16px;      /* 顶栏标题「Jily」 */
  --fs-hero-compact:17px;  /* Hero 标题（1280–1439 断点内）*/

  /* ---- font : 会话区正文档（2026-10-31）--------------------------------
     老板要求：**只把"AI 副驾会话卡"里的输入与输出文字放大 20%**，其他一律不动。
     所以必须是独立令牌 —— 直接改 --fs-body / --fs-title 会连带侧栏、按钮、
     表格、技能卡全部变大，那正是"不调整其他地方"要避免的。
     用 calc 挂在原档上：以后原档调整，这里跟着走，不会两处漂移。 */
  --fs-chat-input:calc(var(--fs-title) * 1.2);   /* 14 → 16.8 */
  --lh-chat-input:24px;                          /* 20 → 24，同比 +20% */
  --fs-chat-body:calc(var(--fs-body) * 1.2);     /* 12 → 14.4 */
  --lh-chat-bubble:23px;                         /* 19 → 22.8，取整 23 */
  --lh-chat-answer:25px;                         /* 21 → 25.2，取整 25 */

  /* ---- font : 驾驶舱档（机构经营状态页，2026-10-27）---- */
  --fs-kpi:26px;     --lh-kpi:34px;      /* 四大指标数值 */
  --fs-kpi-sm:20px;  --lh-kpi-sm:26px;   /* 阶段/次级数值 */

  /* ---- 成功态软底（转化率「已达标」chip）---- */
  --green-50:#E9F7F1;
  --green-100:#C8EADB;
  --bg-success-soft:var(--green-50);
  --kpi-accent:var(--red-700);   /* 驾驶舱指标卡左侧色条默认值（页面可逐卡覆盖） */
  --border-success-soft:var(--green-100);

  /* ---- space（4px 主栅格 + 1:1 实测微调值）---- */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px;
  --sp-6:24px; --sp-8:32px; --sp-12:48px; --sp-16:64px; --sp-24:96px;
  --sp-2px:2px;            /* 1:1 微调：导航项间距 */
  --sp-card-pad-x:36px;    /* Hero 左内边距 */
  --sp-main-l:22px;        /* 主内容左内边距 */
  --sp-main-r:20px;        /* 主内容右内边距 */
  --sp-main-t:17px;
  --sp-main-b:20px;
  --sp-col-gap:15px;       /* 会话卡 / SKILL 面板间距 */
  --sp-card-x:18px;        /* 会话卡左右内边距 */

  /* ---- space : 下拉（自建 listbox：SKILL 分类 / 项目领域各自实现，令牌共用）----
     原生 <select> 的展开面板由系统绘制，option 内边距与选中色 CSS 管不到，
     故两个下拉都改成 button + ul[role=listbox]；下面这组是它的度量。 */
  --dd-panel-pad:6px;        /* 面板自身内边距 */
  --dd-opt-pad-y:10px;       /* 选项上下内边距（呼吸空间）*/
  --dd-opt-pad-x:14px;       /* 选项左右内边距（呼吸空间）*/
  --dd-max-h:280px;          /* 面板最大高度，超出可滚动 */
  --dd-max-h-lg:420px;       /* 长列表面板（项目领域 10 项 ≈ 392）：一屏放完，不截半行 */
  --dd-panel-max-w:260px;    /* 面板最大宽度（不超出宿主面板）*/
  --dd-accent-w:2px;         /* 选中项左侧强调色条宽度 */
  --dd-scroll-w:8px;         /* 面板滚动条宽度 */
  --dd-gap:6px;              /* 按钮与面板的垂直间距 */
  --ring-w:2px;              /* 键盘聚焦描边宽度（鼠标操作不出现描边）*/
  --ring-offset:2px;         /* 键盘聚焦描边外扩 */

  /* ---- radius ---- */
  --r-xs:4px; --r-sm:8px; --r-md:10px; --r-lg:12px; --r-float:14px; --r-pill:999px;

  /* ---- 统一度量（2026-10-28 PC 端体检后收敛；此前各页各写一套）---- */
  --row-h:36px;         /* 表格行高：此前 36/36/38 三种并存 */
  --card-pad:16px;      /* 卡片内边距：此前 10/12/13/16 四种并存 */
  --tap-min:24px;
  --collapse-bar-h:48px; /* 折叠条高度（≥44 触控下限） */
  --kb-card-gap:6px;     /* 知识卡内部间隙，比 --sp-2 紧 2px 给标签行腾位置 */       /* 最小点击高度：此前 18px（kb-tab）低于 WCAG 2.5.8 的 24px */

  /* ---- shadow ---- */
  --shadow-card:0 1px 2px rgba(16,35,52,.04);
  --shadow-float:0 6px 16px rgba(232,74,17,.18);
  --shadow-float-glow:0 0 0 5px rgba(232,45,21,.11), 0 5px 16px rgba(232,45,21,.34);
  --shadow-clock:0 4px 12px rgba(16,35,52,.12);
  --shadow-toast:0 8px 24px rgba(16,35,52,.16);

  /* ---- motion ---- */
  --dur-fast:120ms;
  --dur-base:200ms;
  --dur-slow:320ms;
  --ease-out-quart:cubic-bezier(0.25,1,0.5,1);
  --ease-in-out:cubic-bezier(0.4,0,0.2,1);

  /* ===========================================================================
     知识库模块增量（源：design/tokens.knowledge.json v1.1 · 像素君 · 2026-10-27）
     primitive +2 / semantic +22 / font +3 / space +17 / shadow +1 / motion +2
     =========================================================================== */

  /* ---- primitive : 知识库破坏性色 ----
     项目口径「破坏性用橙不用红」。但 --orange-600 #E84A11 白字仅 3.87:1、
     --rust-700 #E82D15 仅 4.36:1，都不够 4.5:1，故单列两档实测达标值。 */
  --rust-750:#C2410C;     /* 破坏性实底 / 待补文字 / 域徽标文字（白字 5.18:1，暖底 4.84:1） */
  --rust-900:#A33309;     /* 上者 hover / active（白字 6.92:1） */

  /* ---- semantic : 知识库（域 / 敏感度 / 可引用 / 状态 / 破坏性）---- */
  --kb-domain-bg:var(--amber-25);        /* 域徽标底：域不是状态，不占红绿语义色 */
  --kb-domain-fg:var(--rust-750);        /* 域徽标文字（4.84:1 on 暖底） */
  --kb-sens-public:var(--green-600);     /* 公开 5.34:1 */
  --kb-sens-internal:var(--rust-750);    /* 内部 5.18:1 */
  --kb-sens-restricted:var(--red-700);   /* 限制 6.12:1（红=禁止外传语义） */
  --kb-cite-allow:var(--ink-700);        /* ai_citable=allow 7.77:1，中性不抢色 */
  --kb-cite-lim:var(--ink-600);          /* internal-only 6.52:1 */
  --kb-cite-deny:var(--ink-400);         /* deny 4.84:1（只在白底用） */
  --kb-cite-note-bg:var(--amber-25);     /* 详情「引用约束」浅底块 */
  --kb-status-done:var(--green-600);     /* 已定稿 5.34:1 */
  --kb-status-draft:var(--ink-600);      /* 拟定 6.52:1：内容完整待审，不报警 */
  --kb-status-todo:var(--rust-750);      /* 待补 5.18:1：内容不完整需动作 */
  --kb-status-todo-dot:var(--orange-600);/* 待补空心圆点描边（图形 3.87:1 ≥3） */
  --kb-edited-dot:var(--orange-600);     /* manualEdited 4px 标记点（3.87:1 ≥3） */
  --kb-danger-solid:var(--rust-750);
  --kb-danger-solid-hover:var(--rust-900);
  --kb-danger-fg:var(--rust-750);
  --kb-code-bg:var(--gray-150);
  --kb-quote-bar:var(--amber-500);
  --kb-toc-active-bg:var(--amber-25);
  --kb-toc-active-bar:var(--amber-500);
  --kb-drawer-bg:var(--white);
  --kb-drawer-head-bg:var(--white);

  /* ---- semantic : 知识库骨架屏 ---- */

  /* ---- font : 知识库三档变体（不新增字号档，只补行高/字重）---- */
  --kb-read:13px;        --kb-read-lh:22px;        --kb-read-fw:400;   /* 抽屉正文 1.69 行高 */
  --kb-row-title:13px;   --kb-row-title-lh:20px;   --kb-row-title-fw:600;
  --kb-meta:11px;        --kb-meta-lh:16px;        --kb-meta-fw:400;

  /* ---- space : 知识库容器度量 ---- */
  --kb-head-h:40px;
  --kb-tool-h:36px;
  --kb-left-w:264px;
  --kb-tree-node-h:30px;
  --kb-tree-leaf-h:26px;
  --kb-prose-w:640px;
  --kb-row-h:56px;
  --kb-card-min-h:140px;
  --kb-input-h:36px;
  --kb-btn-h:32px;
  --kb-chip-h:24px;
  --kb-drawer-w:720px;
  --kb-form-w:880px;
  --kb-toc-max-h:320px;
  --kb-modal-w:440px;
  --kb-editor-h:360px;

  /* ---- shadow / motion / z : 知识库 ---- */
  --kb-drawer-shadow:0 0 40px rgba(16,35,52,.18);
  --kb-drawer-dur:240ms;
  --kb-shimmer:1600ms;
  --z-drawer-overlay:699;
  --z-drawer:700;
  --z-modal:720;
  /* ---- 预览面板（2026-10-28）---- */
  --z-preview:950;
  --pv-w:1120px;          /* 面板宽 */
  --pv-h:88vh;            /* 面板高 */
  --pv-doc-w:760px;       /* 文档正文栏宽（A4 观感） */
  --pv-slide-area:800px;  /* 幻灯片列表栏宽 */
  --pv-tab-w:180px;       /* 工作表标签最大宽 */
  --pv-cell-w:320px;      /* 单元格最大宽（超长省略） */
  --fs-doc:14px;     --lh-doc:26px;
  --fs-doc-h1:22px;  --lh-doc-h1:34px;
  --fs-doc-h2:17px;  --lh-doc-h2:26px;
  --fs-doc-h3:15px;  --lh-doc-h3:22px;
  --z-toast:900;

  /* ===========================================================================
     登录页（2026-10-28 · 按参考图复刻）
     石磨米白左区 + 纯白表单区；按钮为橙→红横向渐变，与系统品牌渐变（含橄榄绿）区分开，
     因为参考图的按钮里没有橄榄绿，硬套 --gradient-brand 会立刻不像。
     =========================================================================== */
  --lg-cream-top:#FFFDF9;      /* 左区渐起（近白） */
  --lg-cream-mid:#FDFAF2;      /* 左区渐中 */
  --lg-cream-bot:#FBF3E6;      /* 左区渐止（暖米） */
  --lg-cream-glow:rgba(255,244,222,.85); /* 右上柔光 */
  --lg-line:#EFE9DD;           /* 左右分栏竖线 / 顶栏横线 */
  --lg-grad-btn:linear-gradient(90deg,#F0862A 0%,#E63A1C 52%,#D91F10 100%);
  --lg-grad-btn-hover:linear-gradient(90deg,#F5943C 0%,#EC4726 52%,#E02615 100%);
  --lg-btn-shadow:0 6px 16px rgba(224,56,24,.22);
  --lg-btn-shadow-hover:0 8px 20px rgba(224,56,24,.30);
  --lg-beta-bg:#FFF0EE;
  --lg-beta-fg:#D92B14;

  /* 字号（登录页专用档，不并入正文档位，避免影响其他页） */
  --lg-fs-eyebrow:15px;
  --lg-fs-title:44px;
  --lg-lh-title:56px;
  --lg-fs-lede:15px;
  --lg-lh-lede:27px;
  --lg-fs-h2:34px;
  --lg-fs-sub:13.5px;
  --lg-fs-label:13px;
  --lg-fs-input:14px;
  --lg-fs-note:12px;
  --lg-fs-brand:14px;
  --lg-fs-person:12.5px;

  /* 度量 */
  --lg-h-top:72px;
  --lg-h-bottom:36px;
  --lg-col-left:65%;
  --lg-pad-bar:48px;
  --lg-w-panel:340px;
  --lg-pad-x:56px;
  --lg-gap-eyebrow:18px;
  --lg-gap-title:16px;
  --lg-gap-lede:44px;
  --lg-rule-w:320px;
  --lg-max-lede:520px;
  --lg-h-field:46px;
  --lg-h-btn:46px;
  --lg-avatar:40px;

  /* ============================================================
     审批消息化 · v2.0 设计规格 §6（2026-10-28）
     42 个令牌：度量 41 + z-index 1。**颜色 0 / 字号 0 / 圆角 0 / 阴影 0**
     —— 全部复用上面的既有语义色，不新增品牌色，不出新字号档。
     口径来源：docs/设计规格_通知中心与审批_2026-10-28.md
     ============================================================ */

  /* ---- ① 顶栏通知面板 ---- */
  --nf-w: 380px;                /* 列表视图宽 */
  --nf-w-detail: 560px;         /* 审批详情视图宽（点待审消息时展开） */
  --nf-h-max: 520px;            /* 面板最大高；详情态高度不重算，只改宽 */
  --nf-offset: 22px;            /* 距铃铛底 = 顶栏内边距14((60-32)/2) + 视觉间距8
                                   ⚠ 顶栏高或铃铛尺寸一变，这里必须同步改 */
  --nf-head-h: 48px;
  --nf-tabs-h: 44px;
  --nf-filter-h: 40px;
  --nf-foot-h: 44px;
  --nf-list-h-max: 336px;       /* 4 整行(4x84)，不露第5行，靠「加载更多」表达还有 */
  --nf-item-min-h: 84px;        /* 12+24+4+14+4+14+12 */
  --nf-item-pad-y: 12px;
  --nf-item-pad-x: 16px;
  --nf-item-gap: 4px;
  --nf-dot: 6px;
  --nf-badge-h: 16px;
  --nf-badge-min-w: 16px;
  --nf-badge-pad-x: 4px;
  --nf-badge-ring: 2px;
  --nf-badge-top: -2px;
  --nf-badge-right: -2px;
  --nf-scroll-w: 6px;
  --nf-detail-act-h: 56px;      /* 详情底部操作条，固定不参与滚动 */
  --nf-detail-body-max: 416px;  /* 520 - 48(头) - 56(操作条) */
  --z-notif: 60;                /* > overlay(4)/chat(5)/项目下拉(20)/侧栏菜单(30)；
                                   < 抽屉覆层699 / 抽屉700 / 弹窗720·800 / toast900 */

  /* ---- 分段控件（①页签、③筛选共用） ---- */
  --seg-track-h: 32px;
  --seg-pad: 2px;
  --seg-item-h: 28px;
  --seg-item-pad-x: 14px;

  /* ---- ③ 审批中心（只读巡检） ---- */
  --ap-row-h: 56px;
  --ap-cell-pad-x: 12px;
  --ap-toolbar-h: 36px;
  --ap-note-h: 88px;
  --ap-modal-w: 480px;
  --ap-stat-min-h: 92px;        /* 统计卡最小高。2026-10-29 视觉重做后为「一体式分段面板」：
                                   92 = 16(上内边) + 16(下内边) + 26(数值) + 14(标签) + 20(口径行)
                                   原 76 属于「四张独立卡」形态，若要回退改回 76 即可。
                                   规格 §4.3：卡高必须由本令牌消费，不许写 calc(--sp-24 - --sp-1) */

  /* ---- ② 知识引用档位 ---- */
  --ct-card-min-h: 60px;
  --ct-note-h: 64px;
  --ct-reason-h: 72px;
  --ct-modal-w: 520px;

  /* ---- ④ 首登改密 ---- */
  --pw-banner-h: 36px;
  --pw-banner-pad-x: 20px;
  --pw-meter-h: 4px;

  /* ---- 通用：类型/状态胶囊 ---- */
  --tag-h: 20px;

  /* ===========================================================================
     视觉重做 v2（2026-10-29 · 像素君）—— 三级纵向节奏 / 仪表化数字 / 卡片对象化
     原则：**只新增，不改既有令牌的值**。既有页面的观感一个像素都不受影响，
     改版只落在 knowledge.css / admin.css 这两份文件里。
     =========================================================================== */

  /* ---- space：补 20 / 40 两档刻度（仍严格落在 4px 栅格上）----
     为什么必须补：原刻度 4/8/12/16/24/32 缺 20，于是「块内的小节间距」只能在
     16 与 24 之间二选一；一旦二选一，全站就退化成均匀 16 —— 这正是
     「改了几 px 老板看不出变化」的根因：不是数值不对，是**级差不存在**。 */
  --sp-5:20px;
  --sp-10:40px;

  /* ---- 三级纵向节奏（语义别名）----
     页面样式只引用这三个，不直接写数字。级别差必须跨档，不允许相邻两级只差 2-4px：
       同一信息组内部（标签↔数值、标题↔摘要）  4      —— 贴死
       同一区块内部（行与行、卡片↔卡片）        12     —— 微松
       区块之间（节与节）                       24     —— 明显断开
       组与组之间（整页最大级差）               40     —— 一眼看出是两件事 */
  --gap-tight:var(--sp-1);    /* 4  */
  --gap-block:var(--sp-6);    /* 24 */
  --gap-group:var(--sp-10);   /* 40 */

  /* ---- 卡片对象化：让白卡像「摆在桌面上的一张卡」，而不是「画在纸上的一格」----
     两层阴影：1px 的接触阴影负责「卡边」，大范围负扩散阴影负责「离桌高度」。
     单层大阴影会糊成一团灰，单层小阴影又看不出浮起。 */
  --card-pad-lg:var(--sp-5);                       /* 知识卡内边距 20（原 16，且被 reset 压成 0） */
  --kb-card-foot-h:36px;                           /* 卡片底栏（元信息带）高度 */
  --pill-h-sm:18px;                                /* 卡内小胶囊统一高度（原 24 撑破 20px 的头部行） */
  --shadow-card-rest:0 1px 2px rgba(16,35,52,.06),0 12px 26px -18px rgba(16,35,52,.34);
  --shadow-card-hover:0 2px 6px rgba(16,35,52,.07),0 20px 38px -20px rgba(16,35,52,.40);
  --shadow-panel:0 1px 2px rgba(16,35,52,.04);     /* 仪表盘面板：只做「贴住」的接触阴影 */

  /* ---- 焦点环（键盘可达性，J-12）----
     ⚠ 历史坑：admin.css 曾引用 --shadow-focus-ring，那个变量只定义在
     increment-engine.html 的内联样式里，本页运行时是**未定义**的 ——
     折叠标题行的键盘焦点环其实一直是空的（浏览器静默丢弃，不报错）。
     v2 改成「outline + offset」两件套：不占布局、不被父级 overflow 裁掉，
     对相邻色的对比度也由 --focus-ring（#E84A11）保证 ≥3:1。
     2026-10-29：原 --ring-w-strong / --focus-ring-offset 与本文件既有的
     --ring-w / --ring-offset 同值同义（都是 2px），合并掉，避免"改一处漏一处"
     导致有的地方 2px、有的地方 3px。 */
}

/* ═══════════════════════════════════════════════════════════════════════════
   全站缩放：已取消 90%，恢复 1:1（2026-10-30 老板要求）
   ---------------------------------------------------------------------------
   历史：2026-10-29 曾加 html{zoom:.9}，让整站"看起来小一号、一屏装更多"。
   2026-10-30 老板要求去掉 —— 理由是不该让界面替用户决定字体大小：
   zoom 和浏览器自身缩放会叠乘（0.9 × 用户 110% = 0.99，观感不可控），
   而且所有 vh 计算都被迫除以 0.9，改一处漏一处就切版面。
   放在 tokens.css 而不是各页面：全站只有两个样式入口 —— index.html 引 base.css
   （base.css 又 @import 本文件），modules/*.html 直接引本文件 —— 所以改这一处，
   除增量引擎（自包含页面，单独加）之外所有页面都生效，不会漏页。
   ⚠ 保留 --zoom 这个变量、值固定为 1：全站有 4 处满屏容器写成
   calc(100vh / var(--zoom, 1))（layout.css 的 .app、admin.css 的 .ad、
   增量引擎的 .shell 与侧栏）。值取 1 时这些计算自动正确，不必回头逐处改；
   将来若要恢复缩放，也只需改这一处。
   ⚠ 只此一处，页面里不要再写 zoom，否则会叠乘。
   ═══════════════════════════════════════════════════════════════════════════ */
html{ zoom: 1; }
/* 2026-10-30：--zoom 固定 1（已取消 90% 缩放）。
   它只服务于 calc(100vh / var(--zoom)) 这类满屏高度补偿，值取 1 时等于不补偿。
   历史：zoom:0.9 会把 vh 一起缩 —— 视口 innerHeight 800 时 100vh 算 800 CSS px，
   元素又被 0.9 缩一次，实际只显示 720 → 整页底部空 80px，面板被切。 */
:root{ --zoom: 1; }
