/* @pv-micro-tokens · 项目设计 token 的逐字副本
   来源：design/tokens.micro.css（Micro v2）
   由 bin/sync-tokens.mjs 提取，**不是手抄**。手抄过一次，就把 --diff-add 的值
   (oklch(0.50 0.13 150)) 误当成 --ok 写了下去，稿子上表现为「一片奇怪的绿」。

   用法三条：
   1. 弱底/浅底一律用 -soft 变体（--brand-soft / --ok-soft / --marker-teal-soft），
      **不要自己给基色配 alpha** —— 项目在暗色模式下用的是另一套 alpha
      （brand-soft 浅色 0.12、暗色 0.20），自配的值在暗色下必然失配。
   2. 行内注释里的对比度实测（✓ / △ / ✗）是判据：标 ✗ 的组合不许当文字色。
   3. 要改值就去改真源再重跑 sync-tokens.mjs；不要手改本文件。 */
:root {
  --shell: rgb(245, 245, 245); /* 外框：body/header/侧栏 = Micro Paper White（原稿 hex f5f5f5，原稿称 page canvas） */
  --canvas: rgb(250, 249, 248); /* 画布：会话主区/抽屉 body。新造暖白桥接档，介于 Paper White 与 Pure White */
  --surface: rgb(255, 255, 255); /* 卡片：回答卡、结果面板、composer 盒 = Micro Pure White（原稿 hex ffffff） */
  --raised: rgb(255, 255, 255); /* 浮层：popover/菜单/sheet。与 surface 同值，靠 --sh-2 区分（同 v1 策略） */
  --hover: rgb(237, 236, 233); /* 悬停底/inline code 底/进度轨。新造：Micro 的 active fill f5f5f5 已被 --shell 占用，故下沉一档 */
  --border: rgba(39, 39, 42, 0.14); /* 强边框：输入框、按钮、次按钮描边（Micro Search Input 的 1px 边） */
  --border-soft: rgba(39, 39, 42, 0.065); /* 弱边框：卡片、分区线。0.065 = Micro Product Card 原稿 alpha */
  --ink: rgb(34, 31, 28); /* 主文字 = Micro Ink Black（原稿 hex 221f1c）。对 surface 16.40 ✓ / canvas 15.59 ✓ / shell 15.04 ✓ / hover 13.88 ✓ */
  --ink-2: rgb(121, 114, 103); /* 次文字 = Micro Stone Gray（原稿 hex 797267）。对 surface 4.76 ✓ / canvas 4.52 ✓ / shell 4.36 △ / hover 4.03 △ / pastel wash 4.22 △ */
  --ink-2-deep: rgb(108, 101, 90); /* 次文字加深版（本项目新增）：Stone Gray 同色相压暗 ~11%，供 shell/hover/wash 底使用。对 surface 5.76 ✓ / shell 5.28 ✓ / hover 4.87 ✓ / mint wash 5.10 ✓ */
  --ink-3: rgb(134, 132, 130);
  --brand: rgb(81, 139, 219); /* Micro Azure Action（原稿 hex 518bdb）。作图形/边框/焦点环对 surface 3.46 △（≥3 满足 WCAG 非文字对比） */
  --brand-ink: oklch(0.545 0.155 255); /* 蓝色文字/链接（沿用 v1 --brand 实测值）。对 surface 5.00 ✓ / canvas 4.76 ✓ / shell 4.59 ✓ */
  --brand-soft: rgba(81, 139, 219, 0.12); /* 品牌弱底：选中背景、用户气泡、running 徽章底 */
  --ok: oklch(0.56 0.14 150); /* 成功绿。对 surface 4.37 △（徽章/大字）；正文级绿用 --diff-add */
  --ok-soft: oklch(0.56 0.14 150 / 11%);
  --warn: oklch(0.66 0.14 80); /* 警示黄。对 surface 3.16 △ / canvas 3.01 △ / shell 2.90 ✗（shell 底禁用，改配 -soft 底） */
  --warn-soft: oklch(0.66 0.14 80 / 12%);
  --danger: oklch(0.56 0.20 25); /* 危险红。对 surface 5.15 ✓ / canvas 4.90 ✓ / shell 4.72 ✓ */
  --danger-soft: oklch(0.56 0.20 25 / 10%);
  --info: oklch(0.55 0.13 235); /* 信息青蓝。对 surface 4.80 ✓ / canvas 4.57 ✓ / shell 4.40 △ */
  --info-soft: oklch(0.55 0.13 235 / 10%);
  --marker-teal: rgb(54, 186, 184); /* Micro Teal Pulse（原稿 hex 36bab8）。对 surface 2.37 ✗ 仅图形/底色 */
  --marker-coral: rgb(237, 109, 104); /* Micro Coral Marker（原稿 hex ed6d68）。对 surface 3.01 △ 仅图形 */
  --marker-amber: rgb(229, 160, 87); /* Micro Amber Marker（原稿 hex e5a057）。对 surface 2.21 ✗ 仅图形/底色 */
  --marker-orchid: rgb(191, 137, 205); /* Micro Orchid Marker（原稿 hex bf89cd）。对 surface 2.74 ✗ 仅图形/底色 */
  --marker-azure: var(--brand); /* Micro Azure 也是 marker 之一；复用 --brand，不另立值 */
  --marker-teal-soft: rgba(54, 186, 184, 0.15); /* Micro Badge 规范：marker 色 0.15 alpha 作底 */
  --marker-coral-soft: rgba(237, 109, 104, 0.15);
  --marker-amber-soft: rgba(229, 160, 87, 0.15);
  --marker-orchid-soft: rgba(191, 137, 205, 0.15);
  --wash-mint: rgb(203, 251, 241); /* Micro Mint Wash（原稿 hex cbfbf1）。--ink 在其上 14.53 ✓，--ink-2 仅 4.22 △ → wash 上正文用 --ink */
  --wash-peach: rgb(248, 235, 216); /* Micro Peach Wash（原稿 hex f8ebd8）。--ink 13.95 ✓ */
  --wash-lavender: rgb(237, 233, 254); /* Micro Lavender Wash（原稿 hex ede9fe）。--ink 13.81 ✓ */
  --wash-teal: rgb(207, 242, 239); /* Micro Teal Mist（原稿 hex cff2ef）。--ink 13.74 ✓ */
  --forest-edge: rgb(26, 58, 18); /* Micro Forest Edge（原稿 hex 1a3a12）。产品截图框线；作文字对白 12.67 ✓ */
  --decor-green: rgb(58, 107, 42); /* Micro Signal Green（原稿 hex 3a6b2a）。装饰绿，对白 6.33 ✓，但原稿禁止用作状态色 */
  --decor-lime: rgb(126, 250, 85); /* Micro Live Lime（原稿 hex 7efa55）。仅作大色块底；--ink 在其上 12.25 ✓，自身作文字 1.34 ✗ */
  --gradient-sky: linear-gradient(to right in oklab, rgb(81, 139, 219) 0%, rgb(54, 186, 184) 100%); /* Micro 招牌渐变。全站唯一允许位置：对外页面 hero 顶部，每页 ≤1 次（DESIGN.md v2 §3.1） */
  --role-techlead: oklch(0.53 0.13 305);
  --role-techlead-soft: oklch(0.53 0.13 305 / 14%);
  --role-dev: oklch(0.53 0.10 200);
  --role-dev-soft: oklch(0.53 0.10 200 / 15%);
  --role-design: oklch(0.55 0.14 345);
  --role-design-soft: oklch(0.55 0.14 345 / 13%);
  --role-research: oklch(0.58 0.12 55);
  --role-research-soft: oklch(0.58 0.12 55 / 15%);
  --role-qa: oklch(0.54 0.12 140);
  --role-qa-soft: oklch(0.54 0.12 140 / 14%);
  --diff-add: oklch(0.50 0.13 150); /* 对 --diff-add-bg 5.11 ✓ */
  --diff-add-bg: oklch(0.56 0.14 150 / 8%);
  --diff-del: oklch(0.52 0.17 25); /* 对 --diff-del-bg 5.32 ✓ */
  --diff-del-bg: oklch(0.56 0.20 25 / 8%);
  --sh-1: 0px 1px 3px rgba(0, 0, 0, 0.1), 0px 1px 2px -1px rgba(0, 0, 0, 0.1); /* 一档 = Micro Default card：回答卡、composer 盒、任务卡 */
  --sh-2: 0px 10px 15px -3px rgba(0, 0, 0, 0.1), 0px 4px 6px -4px rgba(0, 0, 0, 0.1); /* 二档 = Micro Elevated：popover、下拉、浮动面板 */
  --sh-3: 0px 20px 25px -5px rgba(0, 0, 0, 0.1), 0px 8px 10px -6px rgba(0, 0, 0, 0.1); /* 三档 = Micro shadow-xl：抽屉、底部 sheet、对话框 */
  --sh-ring: 0px 0px 0px 1px rgba(39, 39, 42, 0.065); /* Micro Bordered card 的 hairline 环层，可与 --sh-1 叠加 */
  --sh-press: inset 0px -2px 0px 0px rgba(0, 0, 0, 0.2); /* Micro Pressed button：主按钮 :active 用，非常驻 */
  --focus-ring: 0 0 0 2px var(--brand);
  --on-brand: rgb(255, 255, 255); /* 亮色：--ink 实底上的白字，16.40 ✓。注意白字对 --brand 填充仅 3.46 △ → azure 填充上的文字必须 ≥14px/600，故主按钮不用 azure 底 */
  --scrim: oklch(0.10 0.01 286 / 32%); /* 抽屉/sheet 遮罩（沿用 v1） */
  --code-bg: oklch(0.21 0.03 262); /* Markdown 代码块固定暗底（亮暗一致，沿用 v1） */
  --code-ink: oklch(0.93 0.01 262); /* 代码块文字，对 --code-bg ≈13:1 ✓（沿用 v1） */
  --sans: "Inter", -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, sans-serif; /* 正文/UI（Micro haffer 的免费替代：Inter）。用可变字体单文件，@font-face 声明 font-weight: 100 900，故 425/550/650 等非标准档可用；中文回退不变 */
  --display: "Playfair Display", Georgia, "Songti SC", "SimSun", serif; /* 编辑体大标题（Micro perfectlyNineties 的免费替代）。仅对外页面可用，产品 console 与对话区禁用 */
  --mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace; /* 等宽栈（Micro 本身就是系统栈方案，逐字沿用 v1） */
  --fs-12: 12px; /* Label/徽章/section header（= Micro caption） */
  --fs-mono: 12.5px; /* 等宽专用：时间线目标、diff、代码块 */
  --fs-13: 13px; /* 次级信息：时间线、说明文字、次按钮（本项目档，Micro 无） */
  --fs-14: 14px; /* 桌面正文（= Micro body-sm，也是 Micro 产品 UI 的主字号） */
  --fs-15: 15px; /* 区块标题 / 移动端正文（本项目档） */
  --fs-17: 17px; /* 页面标题（本项目档，最高层级，每屏一个） */
  --fs-10: 10px; /* eyebrow（= Micro eyebrow，配 --ls-eyebrow） */
  --fs-16: 16px; /* 对外页面正文（= Micro body） */
  --fs-18: 18px; /* 对外页面副标题（= Micro subheading） */
  --fs-24: 24px; /* 对外页面 H3（= Micro heading-sm） */
  --fs-30: 30px; /* 对外页面 H2（= Micro heading） */
  --fs-48: 48px; /* 对外页面 H1（= Micro heading-lg） */
  --fs-72: 72px; /* 对外页面 hero display（= Micro display） */
  --fs-96: 96px; /* 对外页面品牌字（= Micro hero-mark） */
  --lh-body: 1.6; /* 正文行高（中文混排底线，不得调低） */
  --lh-en: 1.5; /* 对外页面英文段落行高（= Micro body/subheading） */
  --lh-mono: 1.55; /* 等宽行高 */
  --lh-tight: 1.3; /* 紧凑行高：标题、单行标签 */
  --lh-display: 1.0; /* 对外页面 display/hero-mark 行高（= Micro） */
  --ls-caps: 0.1em; /* 全大写字距 = Micro eyebrow 的 1px@10px。高于 v1 的 0.06em 下限，craft 硬规则仍满足 */
  --ls-title: -0.015em; /* 17–18px 标题字距（Micro 的 -0.025em 在 17px 上过紧，取半档） */
  --ls-display: -0.025em; /* 24px+ 无衬线大标题（= Micro haffer「tight -0.025em at 24px+」） */
  --ls-editorial: 0.02em; /* 对外页面编辑体大标题的正字距（= Micro perfectlyNineties 招牌 0.02em，反潮流的开放字距） */
  --fw-body: 400; /* 阅读：正文 */
  --fw-ui: 550; /* 强调：按钮、session 名、任务标题（v1 值保留） */
  --fw-title: 650; /* 宣告：页面/区块标题（v1 值保留） */
  --fw-label: 600; /* 小字补充档：≤12px 的 label/徽章 */
  --fw-display: 700; /* 对外页面 display 标题 */
  --fw-black: 900; /* 对外页面 hero 品牌字（Playfair Display 900） */
  --sp-1: 4px; /* 徽章内距、行间微距 */
  --sp-2: 8px; /* 元素间隙（= Micro element gap） */
  --sp-3: 12px; /* 组件内距：紧凑卡、抽屉行距 */
  --sp-4: 16px; /* 标准内距（= Micro card padding） */
  --sp-5: 20px; /* 区块间距：消息之间 */
  --sp-6: 24px; /* 大区块间距 */
  --sp-8: 32px; /* 章节间距：主区左右留白（= Micro pastel block padding） */
  --sp-40: 40px; /* 以下五档为对外页面节奏尺（= Micro spacing 40/48/64/80/96） */
  --sp-48: 48px;
  --sp-64: 64px; /* = Micro section gap */
  --sp-80: 80px;
  --sp-96: 96px;
  --bubble-pad: 12px 14px;
  --turn-gap: var(--sp-6);
  --r-xs: 4px; /* Micro radius-md：小 chrome 与图标专用。禁用于卡片（参考稿 line 232） */
  --r-sm: 8px; /* Micro buttons / inputs / nav-pills（v1 6px → 8px） */
  --r: 14px; /* Micro small-cards：产品行、消息气泡、回答卡（v1 10px → 14px） */
  --r-lg: 18px; /* Micro large-cards / feature-blocks：桌面外框、大浮层、context graph 节点（v1 14px → 18px） */
  --r-2xl: 28px; /* composer 胶囊感（沿用 wb-ui --wbui-r-xl 原值，结构保真，不属 Micro 卡片尺） */
  --r-full: 9999px; /* Micro pills（v1 999px → 9999px） */
  --page-max: 1200px; /* = Micro page max-width。产品 console 不受此限（超宽屏另有规则） */
  --tap-min: 44px;
  --tap-aa: 24px;
  --z-popover: 20;
  --z-scrim: 30;
  --z-drawer: 40;
  --z-toast: 50;
  --dur-1: 100ms;
  --dur-2: 150ms;
  --dur-3: 250ms;
  --ease-standard: cubic-bezier(0.2, 0, 0, 1);
}

/* 暗色（取自真源的 :root[data-theme="dark"]）—— 只覆盖颜色与阴影，条数必然远少于浅色 */
:root[data-theme="dark"] {
  --shell: rgb(24, 22, 20);
  --canvas: rgb(29, 27, 24);
  --surface: rgb(34, 31, 28);
  --raised: rgb(42, 39, 35);
  --hover: rgb(52, 48, 44);
  --border: rgba(245, 245, 245, 0.10);
  --border-soft: rgba(245, 245, 245, 0.06);
  --ink: rgb(245, 245, 245);
  --ink-2: rgb(176, 168, 156);
  --ink-2-deep: rgb(176, 168, 156);
  --ink-3: rgb(140, 138, 136);
  --brand: rgb(81, 139, 219);
  --brand-ink: rgb(122, 173, 235);
  --brand-soft: rgba(81, 139, 219, 0.20);
  --ok: oklch(0.68 0.13 150);
  --ok-soft: oklch(0.68 0.13 150 / 16%);
  --warn: oklch(0.72 0.13 80);
  --warn-soft: oklch(0.72 0.13 80 / 16%);
  --danger: oklch(0.68 0.17 25);
  --danger-soft: oklch(0.68 0.17 25 / 16%);
  --info: oklch(0.68 0.12 235);
  --info-soft: oklch(0.68 0.12 235 / 16%);
  --marker-teal: rgb(54, 186, 184);
  --marker-coral: rgb(237, 109, 104);
  --marker-amber: rgb(229, 160, 87);
  --marker-orchid: rgb(191, 137, 205);
  --marker-teal-soft: rgba(54, 186, 184, 0.20);
  --marker-coral-soft: rgba(237, 109, 104, 0.20);
  --marker-amber-soft: rgba(229, 160, 87, 0.20);
  --marker-orchid-soft: rgba(191, 137, 205, 0.20);
  --wash-mint: rgba(54, 186, 184, 0.12);
  --wash-peach: rgba(229, 160, 87, 0.12);
  --wash-lavender: rgba(191, 137, 205, 0.12);
  --wash-teal: rgba(54, 186, 184, 0.09);
  --forest-edge: rgb(58, 107, 42);
  --decor-green: rgb(58, 107, 42);
  --decor-lime: rgb(126, 250, 85);
  --gradient-sky: linear-gradient(to right in oklab, rgb(45, 82, 133) 0%, rgb(31, 110, 109) 100%);
  --role-techlead: oklch(0.70 0.13 305);
  --role-techlead-soft: oklch(0.70 0.13 305 / 20%);
  --role-dev: oklch(0.70 0.10 200);
  --role-dev-soft: oklch(0.70 0.10 200 / 20%);
  --role-design: oklch(0.72 0.13 345);
  --role-design-soft: oklch(0.72 0.13 345 / 18%);
  --role-research: oklch(0.74 0.12 55);
  --role-research-soft: oklch(0.74 0.12 55 / 20%);
  --role-qa: oklch(0.70 0.12 140);
  --role-qa-soft: oklch(0.70 0.12 140 / 18%);
  --diff-add: oklch(0.72 0.13 150);
  --diff-add-bg: oklch(0.68 0.13 150 / 12%);
  --diff-del: oklch(0.72 0.15 25);
  --diff-del-bg: oklch(0.68 0.17 25 / 12%);
  --sh-1: 0 1px 2px rgba(0, 0, 0, 0.5);
  --sh-2: 0 10px 15px -3px rgba(0, 0, 0, 0.55), 0 4px 6px -4px rgba(0, 0, 0, 0.4);
  --sh-3: 0 20px 25px -5px rgba(0, 0, 0, 0.6), 0 8px 10px -6px rgba(0, 0, 0, 0.45);
  --sh-ring: 0px 0px 0px 1px rgba(245, 245, 245, 0.08);
  --sh-press: inset 0px -2px 0px 0px rgba(0, 0, 0, 0.35);
  --focus-ring: 0 0 0 2px var(--brand-ink);
  --on-brand: rgb(34, 31, 28);
}
