/* ============================================================================
   tokens-v2.css · 新站共用令牌（index / browse / software）
   ----------------------------------------------------------------------------
   目的：把「靠人工同步的两套变量名」收敛成一个源头。
   接入：页面只需在自身 <style> 之前 <link> 本文件 ——
        下方同时定义了**兼容别名**（--color-* / --bg / --text ...），
        两页一行都不用改即可共用同一批值；之后可逐步改名。

   值来源：designV2.md 的实测对照表。色值一律以 oklch 为准，hex 仅作备注。
   B / C 级为提亮后：只提 L，hue 与 chroma 与原值严格同源
   （browse 早先的 hex 写法 hue 漂了 5.7°，已在此纠正）。

   字重说明（中西文分层，务必看懂）：
   · --display-weight: 900 是给**中文**（Noto Serif SC Black）用的，该档必须在字体 URL 里加载。
   · 西文 Fraunces 刻意**只加载到 700**：CSS 请求 900、而该 web font 最高只有 700 时，
     浏览器按 font matching 规则向下取最接近的可用字重（700），且不会合成加粗。
     于是「西文 700 + 中文 900」自然分层 —— 只需控制字体 URL，不必把中英文拆成不同元素
     （font-weight 是作用在整个元素上的，没法给同一个标题里的两种字体分别设字重）。
   · 陷阱：一旦给 Fraunces 补上 900 的加载，全页西文会立刻一起变重。
   · 小字号的 display 元素（条目名、面板名称）建议在页面里单独压回 700。
   ============================================================================ */

:root {
  /* ---------- 纸与线 ---------- */
  --paper:   oklch(15.0% 0.012 27);   /* #100908 */
  --paper-2: oklch(19.0% 0.014 27);   /* #1A1110 · 卡片 / 浮层 */
  --paper-3: oklch(24.0% 0.016 27);   /* #261C1B */
  --rule:    oklch(30.0% 0.016 27);   /* 发丝线 */
  --rule-2:  oklch(38.0% 0.016 27);   /* 更亮的线 */

  /* ---------- 文字三层 A / B / C（判据：句子=B，词与数字=C） ---------- */
  --ink-a:   oklch(95.0% 0.008 70);   /* #F2EEE9 · 17.08:1 名字与标题 */
  --ink-b:   oklch(81.0% 0.012 40);   /* 11.01:1 要读的句子（原 76% → 9.17:1） */
  --ink-c:   oklch(68.5% 0.014 30);   /* 7.09:1  词与数字（原 62% → 5.37:1） */
  --ink-dim: oklch(86.0% 0.010 50);   /* 次级亮字 */

  /* ---------- 锚点：同一对红，分工不同 ---------- */
  --accent:    oklch(58.0% 0.210 27); /* #DB2C2B 线、块；做小字只有 4.14:1 ✗ */
  --accent-2:  oklch(64.0% 0.210 27); /* #F1453F 实心块与小字（5.32:1 ✓） */
  --accent-ink:oklch(16.0% 0.010 27); /* 红底上的字：配亮红 5.24:1 ✓ */
  --accent-w:  oklch(28.0% 0.070 27);
  --focus:     oklch(64.0% 0.210 27);

  /* ---------- 语义：全站只有 27°(红) 与 155°(绿) 两个色相 ---------- */
  --open:     oklch(80.0% 0.100 155); /* #88D1A2 · 「开源」绿（两页同值，别再调） */
  --open-ink: oklch(18.0% 0.020 155);

  /* ---------- 字体 ---------- */
  /* display = 西文 Fraunces + 中文思源宋体（两者都是衬线，气质接得上）。
     Fraunces 不含中文字形 → 中文自动落到 Noto Serif SC；
     必须先写 Fraunces，否则中文也会走 Noto Serif SC 的拉丁部分（个性弱）。 */
  --font-display: 'Fraunces', 'Noto Serif SC', 'Songti SC', Georgia, serif;
  --font-body:    'IBM Plex Sans', 'PingFang SC', 'Microsoft YaHei', sans-serif;
  --font-mono:    'IBM Plex Mono', 'Consolas', monospace;        /* 与 body 同族 */
  --display-weight: 900;   /* 引用方需在 Google Fonts URL 里一并加载 900 */

  /* ---------- 字阶 1.25 / 间距 4pt / 圆角 2px ---------- */
  --text-xs:0.75rem; --text-sm:0.82rem; --text-base:1rem;
  --text-md:1.25rem; --text-lg:1.5625rem; --text-xl:1.9531rem; --text-2xl:2.4414rem;
  /* 2026-10-20：hero 大标题收一档（桌面 64px → 56px，约 -12%）。
     移动端下限仍是 36px，与旧值一致 —— 减小的是桌面与平板段。 */
  --text-display: clamp(2.25rem, 3.6vw + 0.5rem, 3.5rem);

  --space-3xs:0.25rem; --space-2xs:0.5rem; --space-xs:0.75rem;
  --space-sm:1rem; --space-md:1.5rem; --space-lg:2rem;
  --space-xl:3rem; --space-2xl:4.5rem; --space-3xl:7rem;

  --radius-sm:2px; --radius:2px;
  --ease-out:cubic-bezier(0.16,1,0.3,1);
  --dur-short:150ms; --dur-long:560ms;

  /* ==========================================================================
     兼容别名 —— 两页的旧变量名全部映射到上面
     （接入时零改动；之后可逐步替换为规范名，替换完再删别名）
     ========================================================================== */

  /* index（正式首页）/ index-new（无衬线对照）*/
  --color-paper: var(--paper);
  --color-paper-2: var(--paper-2);
  --color-paper-3: var(--paper-3);
  --color-rule: var(--rule);
  --color-rule-2: var(--rule-2);
  --color-ink: var(--ink-a);
  --color-ink-2: var(--ink-dim);
  --color-muted: var(--ink-b);
  --color-neutral: var(--ink-c);
  --color-accent: var(--accent);
  --color-accent-2: var(--accent-2);
  --color-accent-ink: var(--accent-ink);
  --color-accent-w: var(--accent-w);
  --color-focus: var(--focus);
  --color-open: var(--open);
  --color-open-ink: var(--open-ink);

  /* browse */
  --bg: var(--paper);
  --surface: var(--paper-2);
  --divider: var(--paper-3);
  --hairline: var(--rule);
  --text-strong: var(--ink-a);
  --text: var(--ink-b);
  --text-muted: var(--ink-c);
  --anchor: var(--accent-2);
  --anchor-dark: var(--accent);
  --anchor-light: var(--accent-2);
}
