/* ============================================================================
   tokens-font.css  ·  全站字体令牌的**唯一来源**
   批次：字体系统统一  作者：Engineer(Alex)  日期：2026-11-02
   ----------------------------------------------------------------------------
   为什么单独一个文件：
     · 改造前 --fs-* 在 ds.css 定义、apple.css 又覆盖了 --fs-1，后加载者静默生效，
       同一个 var(--fs-3) 在两处写法下差 1px，没人知道最终是几号字。
     · 字重有 16 种取值（650/620/750/590…），PingFang SC 与微软雅黑只有
       400/500/600/700，中间值靠吸附或合成 → 标题和正文的字重差肉眼分不出来。
   现在：字族 / 字重 / 字号 / 行高 / 字距 只在这里定义，其余 CSS 一律引用。
   加载顺序：必须排在 app.css → ds.css → apple.css → layout.css 之后。
   ============================================================================ */

:root {
  /* ── 字族 ────────────────────────────────────────────────────────────────
     苹果优先，Windows 上 system-ui/Segoe UI 接住拉丁，微软雅黑排在
     sans-serif 之前接住中文（否则 Windows 会把中文丢给 Segoe UI 的兜底字体，
     中英混排字面高度不一致）。 */
  --font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI Variable Text",
               "Segoe UI", system-ui, "PingFang SC", "Hiragino Sans GB",
               "Microsoft YaHei UI", "Microsoft YaHei", "Noto Sans SC", sans-serif;
  --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas,
               "Liberation Mono", monospace;
  --font-num: var(--font-sans);   /* 数字走同一族 + tabular-nums */

  /* ── 字重：只用中文能渲染的四档 ──────────────────────────────────────── */
  --fw-regular: 400;
  --fw-medium: 500;
  --fw-semibold: 600;
  --fw-bold: 700;

  /* ── 字号阶梯：9 档整数，基准 14（后台信息密度高，不放大）────────────── */
  --fs-caption2: 11px;   /* 角标 / 极小标注 */
  --fs-caption:  12px;   /* 辅助说明 / 表格次要 */
  --fs-footnote: 13px;   /* 表单标签 / 紧凑控件 */
  --fs-body:     14px;   /* 正文 / 表格（基准） */
  --fs-callout:  15px;   /* 强调正文 */
  --fs-title3:   17px;   /* 卡片标题 */
  --fs-title2:   20px;   /* 区块标题 */
  --fs-title1:   24px;   /* 页面标题 */
  --fs-display:  28px;   /* KPI 主数字 */

  /* ── 行高：大字紧、小字松（苹果的光学逻辑）──────────────────────────── */
  --lh-caption2: 1.45;
  --lh-caption:  1.45;
  --lh-footnote: 1.5;
  --lh-body:     1.55;
  --lh-callout:  1.5;
  --lh-title3:   1.4;
  --lh-title2:   1.3;
  --lh-title1:   1.25;
  --lh-display:  1.15;

  /* ── 字距：大字负、小字正 ──────────────────────────────────────────── */
  --ls-caption2: 0.01em;
  --ls-caption:  0.01em;
  --ls-footnote: 0;
  --ls-body:     0;
  --ls-callout:  0;
  --ls-title3:   -0.01em;
  --ls-title2:   -0.015em;
  --ls-title1:   -0.02em;
  --ls-display:  -0.025em;

  /* ── 语义组合（直接套用，不用记组合）────────────────────────────────── */
  --type-body:    var(--fw-regular) var(--fs-body)/var(--lh-body) var(--font-sans);
  --type-label:   var(--fw-medium) var(--fs-footnote)/var(--lh-footnote) var(--font-sans);
  --type-heading: var(--fw-semibold) var(--fs-title3)/var(--lh-title3) var(--font-sans);
  --type-title:   var(--fw-semibold) var(--fs-title1)/var(--lh-title1) var(--font-sans);
  --type-num:     var(--fw-semibold) var(--fs-display)/var(--lh-display) var(--font-num);

  /* ── 兼容层 ─────────────────────────────────────────────────────────────
     全站 1,000+ 处 var(--fs-N) 不逐个改，把旧名映射到新阶梯。
     注意 --fs-4 与 --fs-5 都是 14px：改造前 ds 里是 13/14、apple 又抬了 --fs-1，
     口径混乱；统一到 14 是刻意的（后台正文基准）。
     若某处 --fs-5 明显偏小（原本 15px 的大段正文），把那个选择器改成
     var(--fs-callout)，不要回退整条映射。 */
  --fs-1: var(--fs-caption2);
  --fs-2: var(--fs-caption);
  --fs-3: var(--fs-footnote);
  --fs-4: var(--fs-body);
  --fs-5: var(--fs-body);
  --fs-6: var(--fs-callout);
  --fs-7: var(--fs-title3);
  --fs-8: var(--fs-title2);
  --fs-9: var(--fs-display);

  /* ── 字重旧名兼容（历史 CSS 里写过 650 / 620 等，现统一吸附到四档）─────── */
  --fw-1: var(--fw-regular);
  --fw-2: var(--fw-medium);
  --fw-3: var(--fw-semibold);
  --fw-4: var(--fw-bold);
}

/* ============================================================================
   字距例外说明
   ----------------------------------------------------------------------------
   0.04em / 0.06em / 0.2px 这三类只在**全大写英文标签**（如 KPI 角标、表头
   缩写、单位串）上使用，它们的用途是让大写字母串之间不粘连，不属于正文排版
   的行距节奏，因此不并入 0.01 / 0 / -0.01 / -0.02 四档。
   ============================================================================ */

/* ============================================================================
   数字对齐
   ----------------------------------------------------------------------------
   表格数字列、KPI、金额统一等宽数字，避免数字变化时列宽跳动。
   tabular-nums 只改数字字形宽度，对纯文字没有副作用，所以可以放宽范围套用。
   ============================================================================ */
.tbl td, .tbl th,
.tw-tbl td, .tw-tbl th,
.kpi, .kpi .k-val, .kpi .k-foot,
.dr-score-main b, .dr-score-sub b,
.tw-badge, .tw-wd,
.money, .num, [data-num] {
  font-variant-numeric: tabular-nums;
}

/* 页面基础排版兜底（只在组件没显式声明时生效，优先级最低） */
body {
  font-family: var(--font-sans);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  letter-spacing: var(--ls-body);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}
