/*
 * WebUI 设计令牌 v1（design-tokens = 1，02 §2）
 * 唯一视觉真相：业务代码（壳与插件）只允许语义层 var(--*)，
 * 原始层仅供本文件内部使用，禁止业务引用（02 §2.1）。
 * 暗色默认，亮色一等公民，双主题正文对比度 ≥ 4.5:1（02 §6）。
 * 本文件由壳在文档级 <link> 注入（02 §5.1），插件不引入任何样式文件。
 */

:root {
  /* ── 原始层（色板，主题无关；仅设计系统内部）── */
  --gray-0: #ffffff;
  --gray-50: #f7f8fa;
  --gray-100: #eef0f4;
  --gray-200: #e2e5ea;
  --gray-300: #c7ccd4;
  --gray-500: #6b7280;
  --gray-600: #4b5260;
  --gray-700: #3a414d;
  --gray-800: #262b34;
  --gray-900: #161a21;
  --gray-950: #0f1115;
  --gray-975: #0a0c0f;

  /* 品牌蓝（跨项目统一色板）：#0099ff 暗底画布强调（链接/图标/激活文字，
     对 #0f1115 = 6.30:1）；#0066cc 实心面基准（白字 5.57:1，双段同过 AA）。
     旧 --blue-500/--blue-700 为零引用死档，已随本次换色清除。 */
  --blue-400: #0099ff;
  --blue-600: #0066cc;
  /* 实心面专用（68 §3.6）：饱和实蓝 + 白字；hover 压深一档（白字 7.08:1）。
     暗色段直接取蓝 600 档（对暗底边界 3.39:1 过 WCAG 1.4.11 UI 3:1） */
  --blue-solid: #0066cc;
  --blue-solid-hover: #0057ad;

  /* 成功绿：暗段 #2ee06e（对暗底 10.80:1）；亮段压深 #197b3d（亮底文字
     5.01:1、白字 5.33:1）。50/950 为实心面对位前景色（浅/深 on-color） */
  --green-400: #2ee06e;
  --green-600: #197b3d;
  --green-50: #f0fdf4;
  --green-950: #052e16;

  /* 警示橙（语义温度高于旧琥珀黄：警告/需立即注意）：暗段 #ff6600（对暗底
     6.44:1、深字 5.33:1）；亮段压深 #bf4d00（亮底文字 4.62:1、浅字 4.62:1）。
     50/950 为实心面对位前景色 */
  --orange-400: #ff6600;
  --orange-600: #bf4d00;
  --orange-50: #fff7ed;
  --orange-950: #431407;

  /* 错误红：暗段 #ff3300（对暗底 5.15:1）；亮段压深 #cc2900（亮底文字
     5.09:1、白字 5.41:1）。950 加深到 #3d0808：暗段实心 danger 钮深字
     4.63:1 过 AA（旧 #450a0a 配新红仅 4.40:1） */
  --red-400: #ff3300;
  --red-600: #cc2900;
  --red-50: #fef2f2;
  --red-950: #3d0808;

  --blue-50: #eff6ff;
  --blue-950: #0a1c3d;

  /* ── 尺度（主题无关，02 §2.2–2.5）── */

  /* 字号 · 后台五档：管理面档位外取值即缺陷 */
  --text-xs: 11px;
  --text-sm: 12px;
  --text-base: 13px;
  --text-lg: 16px;
  --text-xl: 20px;

  /* 字号 · 展示三档（68 §3.5：Hero/营销首屏/大屏指标，仅公开面与展示性标题） */
  --text-display-sm: 24px;
  --text-display-md: 32px;
  --text-display-lg: 44px;

  /* 字号 · 出版物档（68 §3.5：长文正文，仅 .prose-column / MarkdownView prose） */
  --text-prose: 16px;

  /* 行高扩展（后台用 tight/normal；展示标题收紧，长文放松） */
  --leading-display: 1.1;
  --leading-prose: 1.7;

  /* 字距（68 §3.3：英文展示标题收紧，拉丁小标签放宽；中文不收紧） */
  --tracking-tight: -0.02em;
  --tracking-wide: 0.04em;

  /* 长文阅读栏宽（68 §3.5：≤68ch 行长，约 60–70 字符舒适区） */
  --prose-w: 68ch;

  /* ── 内容媒体尺寸档（82 批次2）：固定尺寸媒体（logo/头像/二维码/首屏配图）的
     px 唯一真相。组件只选档位、不写字面像素；默认档取各组件历史现值（零视觉变化）。
     · --media-sm/md/lg：正方形小媒体（头像/标志），md=48 即历史 space-7；
     · --qr-sm/md/lg：二维码，md=72 即历史页脚硬编码值；
     · --media-w-md/lg/xl：首屏配图最大宽，lg=960 即历史 Hero 值。 */
  --media-sm: 40px;
  --media-md: 48px;
  --media-lg: 64px;
  --qr-sm: 56px;
  --qr-md: 72px;
  --qr-lg: 96px;
  --media-w-md: 640px;
  --media-w-lg: 960px;
  --media-w-xl: 1280px;

  /* 站点头部品牌 logo 尺寸（导航 chrome 区，仅令牌化）。
     默认 md 档；sm/md/lg 三档由 SiteNav 根 data-logo-size 切换——高度与最大宽
     成对给出，横版字标（典型 6:1）等比缩放不拉伸。 */
  --nav-brand-logo-h: 34px;
  --nav-brand-logo-maxw: 220px;
  --nav-brand-logo-h-sm: 28px;
  --nav-brand-logo-maxw-sm: 160px;
  --nav-brand-logo-h-md: 34px;
  --nav-brand-logo-maxw-md: 220px;
  --nav-brand-logo-h-lg: 42px;
  --nav-brand-logo-maxw-lg: 280px;

  /* 导航密度档（行内最小高）：compact 紧凑 / cozy 默认 / roomy 舒展。
     由 SiteNav 根 data-density 切换；纵向 padding 另由 padding_y 档独立可调。 */
  --nav-min-h: 64px;
  --nav-min-h-compact: 56px;
  --nav-min-h-cozy: 64px;
  --nav-min-h-roomy: 76px;

  /* 字重 */
  --font-weight-regular: 400;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;
  --font-weight-bold: 700;

  /* 行高 */
  --leading-tight: 1.2;
  --leading-normal: 1.5;

  /* 间距：4px 栅格（02 §2.3 阶梯） */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 24px;
  --space-6: 32px;
  --space-7: 48px;
  --space-8: 64px;

  /* 控件高度阶梯（02 §2.4） */
  --control-xs: 24px;
  --control-sm: 28px;
  --control-md: 32px;
  --control-lg: 40px;

  /* 圆角（68 §3.2 D4：容器与控件统一 6px。--radius 为唯一圆角令牌；
     sm/md/lg 为过渡别名同指 6px——全站旧调用点零改动即视觉收敛，
     新代码禁用别名，调用点分批迁移到 --radius 后再移除别名）。 */
  --radius: 6px;
  --radius-sm: 6px;
  --radius-md: 6px;
  --radius-lg: 6px;
  /* 正圆元件专用（状态点/头像/轮播指示点/时间轴节点/图表圆点）：
     禁止用于徽章/按钮/输入框/开关轨道/chip 等容器——胶囊不是圆角语言（68 §3.2）。 */
  --radius-full: 999px;

  /* 阴影：管理台 UI 层级用边框+背景表达（02 §2.5），--shadow-overlay 仅供弹层；
     --shadow-sm/md 专供访客内容块（站点作者的卡片类块样式槽，55 §2 D4），
     暗色基准（亮段在 [data-theme=light] 覆盖），二者不得混用 */
  --shadow-overlay: 0 8px 24px rgba(0, 0, 0, 0.5);
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
  --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.45);

  /* 边框宽度档（55 §2 D4：块样式槽 border 受控档位；颜色走 --border-* 语义令牌） */
  --border-thin: 1px;
  --border-thick: 2px;

  /* z-index 阶梯：禁止字面量（02 §5.5） */
  --z-dropdown: 100;
  --z-sticky: 200;
  --z-drawer: 300;
  --z-modal: 400;
  --z-toast: 500;

  /* 动效：只做反馈与引导，100–200ms */
  --duration-fast: 100ms;
  --duration-base: 160ms;
  /* 分段控件 thumb 滑动：位移比淡变更重，取档位上限 200ms */
  --duration-seg: 200ms;
  --ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);

  /* 焦点环（键盘可达性单一真相）：仅用于按钮/图标钮/链接/卡片等【无框】可聚焦元素；
     【有框】表单控件（input/textarea/select/密码/搜索/cell-input）聚焦只把 1px 边框变蓝，
     禁止再叠 outline——否则边框+外环形成双线，违背极简。offset 负值内收、正值外放。 */
  --focus-ring: 2px solid var(--accent);
  --focus-offset: 1px;
  /* 链接下划线间隙（文字链接装饰单一真相）：凡文字链接出现下划线（正文常驻或
     卡片/导航/页脚 hover 显现），一律引用本令牌控制下划线与文字的间距，禁止
     浏览器默认贴字下划线。取 3px：中文正文下缘保留清晰呼吸间隙，亮暗双主题同值。 */
  --link-underline-offset: 3px;
  /* 入场 reveal（39 §5）：发布页块级上移淡入一次性显现——host-client
   * IntersectionObserver 后挂 data-reveal 驱动，prefers-reduced-motion 豁免；
   * SSR 直出内容完整在位（动效仅入场呈现不隐内容，07 §5） */
  --motion-reveal-duration: 240ms;
  --motion-reveal-offset: 16px;
  /* 循环呼吸（状态点 pulse 等持续反馈，非过渡动效） */
  --duration-pulse: 1.6s;

  /* 细条高度（顶部进度条 NProgress） */
  --progress-h: 2px;

  /* 品牌面（登录/锁屏）卡片圆角与四角弧光：仅品牌面引用。
     Q-1 管理台零发光/零装饰纪律不适用于品牌面——品牌面靠圆角弧光+发光建立识别，
     但相关颜色/发光令牌（--brand-*）禁止用于管理台数据页。 */
  --brand-radius: 12px;
  --brand-corner-arm: var(--space-6);
  --brand-corner-width: 2px;
  /* 品牌大标题字号：登录/锁屏主标识，比管理台最大展示档 --text-display-lg(44)
     再大一档，仅品牌面引用，不进 --text-* 全站字号阶梯 */
  --brand-title-size: 52px;

  /* 控件容器断点三档（39 §2 冻结）：compact < 480px / regular < 768px / wide ≥ 768px。
   * @container 条件不支持 var()——查询一律用字面量；本组令牌是三档语义常量的
   * 唯一声明处（39 §2「token 化语义常量」），R14 门禁白名单 {480, 768} 与此
   * 对齐防漂移（sdk/gate.mjs 单一真相） */
  --bp-compact: 480px;
  --bp-regular: 768px;

  /* 字体（68 §3.3 F2）：拉丁首位 Inter Variable（自托管 woff2 可变子集，
     /design/fonts/，OFL，swap；仅 latin/latin-ext ≈130KB，见 fonts.css），
     CJK 永远回落系统黑体——禁止内嵌中文字库（原则七 + 极低开销）。 */
  --font-sans:
    'Inter Variable', -apple-system, 'Segoe UI Variable', system-ui,
    'Segoe UI', Roboto, 'Helvetica Neue', Arial,
    'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei UI', 'Microsoft YaHei',
    sans-serif;
  --font-mono:
    ui-monospace, SFMono-Regular, 'Cascadia Code', Consolas,
    'Liberation Mono', monospace;
}

/* ── 语义层（业务唯一可用；暗色默认）──
   主题岛支持（66 §2.2）：选择器不限定 :root——任意挂 data-theme 的元素都形成
   主题作用域。设计器画布用包裹元素挂 data-theme 预览站点外观，管理台 chrome
   （在岛外）保持管理员自身主题。自定义属性「自身声明胜继承」，岛内 data-theme
   声明覆盖自文档根继承的主题，与选择器特异性无关；发布页 main 只有 data-site
   无 data-theme，不匹配本段，主题仍由 <html data-theme> 承载，发布链零影响。 */

:root,
[data-theme='dark'] {
  color-scheme: dark;

  --bg-base: var(--gray-950);
  --bg-elevated: var(--gray-900);
  --bg-overlay: #1b2029;
  --bg-sunken: var(--gray-975);
  /* 控件中性悬停面：比行/卡片底再抬一档（行 hover 用 sunken，ghost 按钮/清单项
     hover 用本令牌），保证「在已高亮行内再 hover 按钮」仍有可辨反馈（Q-1 状态完备）。
     命名刻意避开 --bg-hover：该名是各插件域令牌（品牌色），壳控件用通用名会被
     插件子树劫持导致同语义不同外观；--bg-control-hover 为壳保留的纯中性面 */
  --bg-control-hover: var(--gray-800);

  --text-primary: #e8eaed;
  --text-secondary: #a8b0bc;
  --text-tertiary: #7d8590;
  --text-disabled: var(--gray-600);

  --border-subtle: var(--gray-800);
  --border-strong: var(--gray-700);

  /* 主色（68 §3.6 实心面修订）：--accent 专指「实心彩色面」（主按钮/开关/CTA/
     焦点环），暗/亮两段统一饱和实蓝 #0066cc + 纯白字（#fff on #0066cc =
     5.57:1 过 AA），hover 压深到 #0057ad（白字 7.08:1）。画布上的链接/图标/
     激活文字不压在实心面上，另走 --accent-on-canvas（暗段品牌亮蓝，深底 6.30:1）。 */
  --accent: var(--blue-solid);
  --accent-hover: var(--blue-solid-hover);
  --accent-text: var(--gray-0);
  /* 画布强调色（链接/图标/激活文字，直接落在 bg 上，非实心面） */
  --accent-on-canvas: var(--blue-400);

  --status-ok: var(--green-400);
  --on-ok: var(--green-950);
  --status-warn: var(--orange-400);
  --on-warn: var(--orange-950);
  --status-error: var(--red-400);
  --on-error: var(--red-950);
  --status-info: var(--blue-400);
  --on-info: var(--blue-950);

  /* 图表灰阶（02 §2.1）：暗色按平台原始层取值，显著度序 grid < track ≤ center-outer < tick < tick-major */
  --chart-grid: var(--gray-800);
  --chart-track: var(--gray-700);
  --chart-center-outer: var(--gray-700);
  --chart-tick: var(--gray-600);
  --chart-tick-major: var(--gray-500);
  --chart-center-inner: var(--gray-600);

  /* 语法高亮令牌对（02 §2.7，38 §5.2 D-3）：Shiki 物化 class → 令牌映射承载
     （--syntax-* 亮暗成对；代码块底 --bg-sunken，取值对齐 GitHub Dark 实测对比度） */
  --syntax-keyword: #ff7b72;
  --syntax-string: #a5d6ff;
  --syntax-comment: #8b949e;
  --syntax-number: #79c0ff;
  --syntax-function: #d2a8ff;
  --syntax-constant: #79c0ff;
  --syntax-variable: #ffa657;
  --syntax-operator: #ff7b72;
  --syntax-type: #ffa657;
  --syntax-tag: #7ee787;
  --syntax-attr: #79c0ff;

  /* ── 品牌面令牌（仅登录/锁屏等品牌场景；Q-1 管理台数据页禁止引用 --brand-*）──
     赛博科技语言：深海军底 + 中心蓝晕 + 网格暗角 + 发光品牌字 + 四角切角。
     隔离手段：命名前缀 + 不进 ui-kit 通用件；物理切角尺寸走 --brand-corner-cut。 */
  --brand-bg: #070b14;
  --brand-scene-halo: rgba(0, 153, 255, 0.14);
  --brand-scene-vignette: rgba(4, 7, 13, 0.72);
  --brand-grid: rgba(0, 153, 255, 0.05);
  --brand-card-bg: rgba(18, 27, 45, 0.82);
  --brand-card-border: rgba(0, 153, 255, 0.26);
  --brand-corner: #0099ff;
  /* 四角弧光：线尾渐隐到透明 + 外发光（color-mix 从角标色派生，暗色成晕） */
  --brand-corner-fade: color-mix(in srgb, var(--brand-corner) 0%, transparent);
  --brand-corner-glow: 0 0 6px color-mix(in srgb, var(--brand-corner) 70%, transparent);
  --brand-title: #0099ff;
  --brand-title-glow: 0 0 24px rgba(0, 153, 255, 0.55), 0 0 4px rgba(0, 153, 255, 0.4);
  --brand-subtitle: #7d8ea8;
  --brand-footnote: #5b6a82;
  /* 输入框：浅实底深字（赛博登录的利落材质，区别于管理台 sunken 黑洞） */
  --brand-input-bg: #eef2fa;
  --brand-input-color: #14203a;
  --brand-input-placeholder: #5d6b85;
  --brand-input-border: #cdd8ee;
  --brand-input-focus: #0066cc;
  --brand-input-eye: #46557a;
}

[data-theme='light'] {
  color-scheme: light;

  --bg-base: var(--gray-50);
  --bg-elevated: var(--gray-0);
  --bg-overlay: var(--gray-0);
  --bg-sunken: var(--gray-100);
  /* 控件悬停面（亮色）：比行底 sunken(gray-100) 再深一档，行内再 hover 仍可辨。
     命名见暗色段说明：避让插件域令牌 --bg-hover */
  --bg-control-hover: var(--gray-200);

  --text-primary: #1a1d23;
  --text-secondary: var(--gray-600);
  --text-tertiary: var(--gray-500);
  --text-disabled: #9aa1ac;

  --border-subtle: var(--gray-200);
  --border-strong: var(--gray-300);

  /* 68 §3.6：--accent 专指实心面（#fff on #0066cc = 5.57:1），hover 压深
     #0057ad（7.08:1）；画布强调色（链接/图标）亮色用同一实蓝——浅底
     #f7f8fa 上 5.24:1 达标 */
  --accent: var(--blue-600);
  --accent-hover: var(--blue-solid-hover);
  --accent-text: var(--gray-0);
  --accent-on-canvas: var(--blue-600);

  --status-ok: var(--green-600);
  --on-ok: var(--green-50);
  --status-warn: var(--orange-600);
  --on-warn: var(--orange-50);
  --status-error: var(--red-600);
  --on-error: var(--red-50);
  --status-info: var(--blue-600);
  --on-info: var(--blue-50);

  /* 图表灰阶（02 §2.1）：亮色沿用 IGW-S SpeedometerGauge 实测值（设计保真） */
  --chart-grid: #e5e7eb;
  --chart-track: #dce1e8;
  --chart-center-outer: #c8cdd4;
  --chart-tick: #c0c7cf;
  --chart-tick-major: #8893a0;
  --chart-center-inner: #5a6370;

  /* 语法高亮令牌对（02 §2.7 亮色档；取值对齐 GitHub Light 实测对比度，
     代码块底 --bg-sunken=--gray-100） */
  --syntax-keyword: #cf222e;
  --syntax-string: #0a3069;
  --syntax-comment: #59636e;
  --syntax-number: #0550ae;
  --syntax-function: #8250df;
  --syntax-constant: #0550ae;
  --syntax-variable: #953800;
  --syntax-operator: #cf222e;
  --syntax-type: #953800;
  --syntax-tag: #116329;
  --syntax-attr: #0550ae;

  --shadow-overlay: 0 8px 24px rgba(15, 17, 21, 0.12);
  /* 访客内容块轻阴影亮段（55 §2 D4）：浅色低透明黑，避免亮底下显脏 */
  --shadow-sm: 0 1px 2px rgba(15, 17, 21, 0.06), 0 1px 3px rgba(15, 17, 21, 0.04);
  --shadow-md: 0 2px 8px rgba(15, 17, 21, 0.08), 0 1px 3px rgba(15, 17, 21, 0.06);

  /* ── 品牌面令牌（亮色：同一赛博语言的浅化，浅海军底 + 蓝晕 + 白卡切角）── */
  --brand-bg: #e9eef7;
  --brand-scene-halo: rgba(0, 102, 204, 0.10);
  --brand-scene-vignette: rgba(214, 224, 240, 0.6);
  --brand-grid: rgba(0, 102, 204, 0.06);
  --brand-card-bg: rgba(255, 255, 255, 0.92);
  --brand-card-border: rgba(0, 102, 204, 0.22);
  --brand-corner: #0066cc;
  /* 亮底弧光收一档：线尾仍渐隐，外发光更轻避免发脏 */
  --brand-corner-fade: color-mix(in srgb, var(--brand-corner) 0%, transparent);
  --brand-corner-glow: 0 0 5px color-mix(in srgb, var(--brand-corner) 45%, transparent);
  --brand-title: #0066cc;
  --brand-title-glow: 0 0 18px rgba(0, 102, 204, 0.30);
  --brand-subtitle: #56607a;
  --brand-footnote: #8a93a8;
  /* 亮色下输入框用白底深字 + 清晰描边（保持利落，不与白卡混糊） */
  --brand-input-bg: #ffffff;
  --brand-input-color: #14203a;
  --brand-input-placeholder: #8b94ab;
  --brand-input-border: #b9c8e6;
  --brand-input-focus: #0066cc;
  --brand-input-eye: #56607a;
}

/* ── 内容排版层（82：访客内容字号语义层 + 块级排版档）──────────────────────
   背景：公开内容长期借用后台密度字号令牌（--text-base=13px 等），而 Markdown/
   文章走出版物档 --text-prose=16px，同页出现 13/16 分裂。本层把「内容字号」
   从后台密度令牌解耦：
   · 四个内容角色变量（页面标题/分区标题/正文/说明）为正文组件唯一消费入口，
     默认回落到既有展示/出版物令牌——未配置时外观零变化；
   · 站点级：站点设置「字号档位」经 theme.css 在 [data-site] 覆盖角色变量
     （值为令牌引用，px 真相仍只在本文件，后端不写裸 px）；
   · 块级：块样式槽 textScale 在 wrapper 输出 data-text-scale，三档在此一次性
     覆盖「角色变量 + 底层字号令牌」两套——读角色变量的 Markdown/文章与读
     --text-* 的其它内容组件在同一块内等比缩放，无需逐组件改造。
   纯尺寸、主题无关；仅允许出现在访客内容作用域（[data-site] / 块 wrapper），
   管理台 chrome 不在该作用域，永不被抬档。 */
:root {
  /* 内容字号五档（82）：站点「字号档位」的 step(xs/sm/base/lg/xl) → 绝对字号的
     唯一真相。后端 theme.css 只输出 var(--fs-<step>) 引用、绝不写裸 px。
     尺度对齐出版物：12/14/16/20/24——base=16 即历史 --text-prose，xl=24 即
     --text-display-sm，默认角色取值与改造前逐字一致（零视觉变化）。 */
  --fs-xs: 12px;
  --fs-sm: 14px;
  --fs-base: 16px;
  --fs-lg: 20px;
  --fs-xl: 24px;

  --font-role-page-title: var(--fs-xl);
  --font-role-section-title: var(--fs-lg);
  --font-role-body: var(--fs-base);
  --font-role-caption: var(--fs-sm);
}

/* 块级排版档共五档（82）：极小 tiny 12 / 紧凑 compact 14 / 标准 normal 16 /
   大字 large 18 / 超大 xlarge 20（正文角色值）。每档同时覆盖「角色变量 + 底层
   字号令牌」，保证块内读任一令牌的文字件统一等比缩放，层级比例保持一致。
   单调递增铁律：各档正文角色值 tiny<compact<normal<large<xlarge，
   任一副角色（标题/说明/展示）同样单调，禁止档位倒挂。 */

/* 极小档：正文 12，超密集技术文档/宽表（说明不再下探，与正文同 12 保可读下限） */
[data-text-scale='tiny'] {
  --text-xs: 11px;
  --text-sm: 12px;
  --text-base: 12px;
  --text-lg: 14px;
  --text-xl: 16px;
  --text-display-sm: 18px;
  --text-display-md: 24px;
  --text-display-lg: 32px;
  --text-prose: 12px;
  --font-role-page-title: 18px;
  --font-role-section-title: 16px;
  --font-role-body: 12px;
  --font-role-caption: 12px;
}

/* 紧凑档：正文 14（文档/密集型，解决“正文太大”）。
   同时覆盖角色变量与底层字号令牌，保证块内所有文字件统一收窄。 */
[data-text-scale='compact'] {
  --text-xs: 11px;
  --text-sm: 12px;
  --text-base: 14px;
  --text-lg: 16px;
  --text-xl: 18px;
  --text-display-sm: 20px;
  --text-display-md: 26px;
  --text-display-lg: 34px;
  --text-prose: 14px;
  --font-role-page-title: 20px;
  --font-role-section-title: 18px;
  --font-role-body: 14px;
  --font-role-caption: 12px;
}

/* 标准阅读档：正文 16，内容字号整体脱离后台 13px 密度档（主动选用即与出版物对齐） */
[data-text-scale='normal'] {
  --text-xs: 13px;
  --text-sm: 14px;
  --text-base: 16px;
  --text-lg: 18px;
  --text-xl: 20px;
  --text-display-sm: 24px;
  --text-display-md: 30px;
  --text-display-lg: 40px;
  --text-prose: 16px;
  --font-role-page-title: 24px;
  --font-role-section-title: 20px;
  --font-role-body: 16px;
  --font-role-caption: 14px;
}

/* 大字档：正文 18，适老化/大屏阅读（标题阶梯同步放大，保持比例） */
[data-text-scale='large'] {
  --text-xs: 14px;
  --text-sm: 16px;
  --text-base: 18px;
  --text-lg: 20px;
  --text-xl: 24px;
  --text-display-sm: 28px;
  --text-display-md: 34px;
  --text-display-lg: 44px;
  --text-prose: 18px;
  --font-role-page-title: 28px;
  --font-role-section-title: 24px;
  --font-role-body: 18px;
  --font-role-caption: 16px;
}

/* 超大档：正文 20，大屏展示/高可读诉求（标题阶梯同步放大，保持比例） */
[data-text-scale='xlarge'] {
  --text-xs: 16px;
  --text-sm: 18px;
  --text-base: 20px;
  --text-lg: 22px;
  --text-xl: 26px;
  --text-display-sm: 32px;
  --text-display-md: 38px;
  --text-display-lg: 48px;
  --text-prose: 20px;
  --font-role-page-title: 32px;
  --font-role-section-title: 26px;
  --font-role-body: 20px;
  --font-role-caption: 18px;
}

/* ── 壳布局尺寸（系统内部令牌，02 §3.4 导航布局）── */
:root {
  --topbar-height: 48px;
  --nav-width: 220px;
  /* v4.0 驾驶舱：一级图标导轨宽（系统轨；二级上下文侧栏仍用 --nav-width） */
  --rail-width: 56px;
  /* 发布页内容宽（49 §D-2 所见即所得单一真相）：#host-root 与设计器画布
     同令牌限宽居中——容器查询 @container 三档（768/480）两态同宽同档；
     全宽（full-bleed）诉求由样式槽档位扩展承载，不另开口 */
  --page-w: 1040px;
}
