/* AUTO-GENERATED. DO NOT EDIT.
 * Source: design-system/design-tokens.json
 * Generator: scripts/gen-tokens.mjs
 * Regenerate: npm run gen:tokens
 *
 * 改动请改 JSON。直接改本文件会在 `npm run gate` 时被覆盖并 fail。
 * 
 * 建模缺口（见 scripts/gen-tokens.mjs 的 OVERRIDES 注释）：
 *   1. shadow.raised 在深色模式应为 none —— JSON 无法表达 light/dark 双值，已在下面硬处理
 *   2. focus.ring 硬编码 A-health accent —— 切换到其他 accent 族时焦点环颜色不会跟随
 */

/* ============================================================
  路径式 canonical 变量 —— 一个 token 一个变量，永不重名
  命名规则：color.light.bg → --color-light-bg
  ============================================================ */
:root {

  /* color */
  --color-light-bg: #F4F6F5; /* Page background. Never pure white — #FFF is reserved for raised surfaces. */
  --color-light-surface: #FFFFFF; /* Cards, sheets, inputs at rest. */
  --color-light-surface-warm: #EDF1EF; /* Tertiary surface: inline code, quiet blocks, track backgrounds. */
  --color-light-fg: #141A18; /* Primary text. 16.25:1 on bg, 17.64:1 on surface. */
  --color-light-fg-2: #2E3835; /* Secondary text: body copy in long-form. 11.16:1 / 12.12:1. */
  --color-light-muted: #556360; /* Tertiary text: captions, helper, de-emphasised labels. 5.79:1 / 6.29:1. */
  --color-light-meta: #63716E; /* Quaternary: timestamps, counts. 4.70:1 / 5.10:1 — the floor. Do not lighten. */
  --color-light-border: #D9DFDC; /* Decorative dividers only. 1.35:1 — MUST NOT convey state. */
  --color-light-border-soft: #E8EDEB; /* Row separators inside a container. Prefer divide-y over nesting borders. */
  --color-light-border-strong: #7E8C88; /* Any border that conveys state (input, checkbox, selected chip). 3.50:1 meets WCAG 1.4.11. */
  --color-light-accent: var(--accent); /* Exactly one accent per project. See color.accentFamilies. */
  --color-light-accent-on: #FFFFFF; /* Foreground on accent fill. Contrast verified per family. */
  --color-light-accent-tint: var(--accent-tint); /* Low-emphasis accent wash. Accent text on tint meets 5.18:1 minimum. */
  --color-light-accent-hover: var(--accent-hover); /* Hard-coded hex, not a mix function — RN has no color-mix(). */
  --color-light-accent-active: var(--accent-active);
  --color-light-success: #14663A; /* 7.02:1 on white. */
  --color-light-warn: #7A5100; /* 6.99:1 on white. Amber reads as caution, not error. */
  --color-light-danger: #A8251C; /* 7.13:1 on white. ONLY for real errors — never for 'you fell behind'. */
  --color-light-info: #1B4F8A; /* 8.29:1 on white. */
  --color-dark-bg: #0B0F0E; /* Not pure black: OLED smear on scroll + shadows stop reading. */
  --color-dark-surface: #141A18;
  --color-dark-surface-warm: #1C2422; /* Layering is by brightness step, not shadow. */
  --color-dark-surface-tint: #1B2624; /* Accent-tinted block in dark theme. */
  --color-dark-fg: #ECF1EF; /* Not pure white: 16.89:1 / 15.45:1 and no halation on OLED. */
  --color-dark-fg-2: #C6D0CC; /* 12.21:1 / 11.17:1. */
  --color-dark-muted: #93A19C; /* 7.18:1 / 6.57:1. */
  --color-dark-meta: #84928E; /* 5.95:1 / 5.44:1. */
  --color-dark-border: #2A3330; /* Decorative only. */
  --color-dark-border-soft: #1F2926;
  --color-dark-border-strong: #606C68; /* 3.23:1 on surface — meets 3:1 for stateful borders. */
  --color-dark-accent: var(--accent); /* Re-picked for luminance, not a lightened version of the light value. */
  --color-dark-accent-on: #08110F; /* Dark ink on a bright accent. 8.89:1+ across all families. */
  --color-dark-accent-tint: var(--accent-tint);
  --color-dark-accent-hover: var(--accent-hover);
  --color-dark-accent-active: var(--accent-active);
  --color-dark-success: #5FD08A; /* 9.13:1 on surface. */
  --color-dark-warn: #F0B74E; /* 9.73:1. */
  --color-dark-danger: #FF8A80; /* 7.73:1. */
  --color-dark-info: #7FB6F0; /* 8.27:1. */
  --color-accent-families-a-health-light-accent: #0E6E62;
  --color-accent-families-a-health-light-accent-tint: #E4EFEC;
  --color-accent-families-a-health-light-accent-hover: #0B5A50;
  --color-accent-families-a-health-light-accent-active: #094A42;
  --color-accent-families-a-health-dark-accent: #4FC3AF;
  --color-accent-families-a-health-dark-accent-tint: #1B2624;
  --color-accent-families-a-health-dark-accent-hover: #63CBB8;
  --color-accent-families-a-health-dark-accent-active: #78D3C2;
  --color-accent-families-b-pet-light-accent: #9C4A1E;
  --color-accent-families-b-pet-light-accent-tint: #F7E9E0;
  --color-accent-families-b-pet-light-accent-hover: #853D17;
  --color-accent-families-b-pet-light-accent-active: #6E3212;
  --color-accent-families-b-pet-dark-accent: #F0A277;
  --color-accent-families-b-pet-dark-accent-tint: #2A1D16;
  --color-accent-families-b-pet-dark-accent-hover: #F4B591;
  --color-accent-families-b-pet-dark-accent-active: #F8C8AB;
  --color-accent-families-c-care-light-accent: #1F4470;
  --color-accent-families-c-care-light-accent-tint: #E5ECF4;
  --color-accent-families-c-care-light-accent-hover: #19375C;
  --color-accent-families-c-care-light-accent-active: #132B48;
  --color-accent-families-c-care-dark-accent: #8FB4E0;
  --color-accent-families-c-care-dark-accent-tint: #182331;
  --color-accent-families-c-care-dark-accent-hover: #A5C4E8;
  --color-accent-families-c-care-dark-accent-active: #BBD4EF;
  --color-accent-families-d-finance-light-accent: #1D5B3F;
  --color-accent-families-d-finance-light-accent-tint: #E3EFE9;
  --color-accent-families-d-finance-light-accent-hover: #174A33;
  --color-accent-families-d-finance-light-accent-active: #113927;
  --color-accent-families-d-finance-dark-accent: #7FCFA6;
  --color-accent-families-d-finance-dark-accent-tint: #16241C;
  --color-accent-families-d-finance-dark-accent-hover: #97DBB8;
  --color-accent-families-d-finance-dark-accent-active: #AFE7CA;
  --color-accent-families-e-learn-light-accent: #7A5100;
  --color-accent-families-e-learn-light-accent-tint: #F6EDDC;
  --color-accent-families-e-learn-light-accent-hover: #644200;
  --color-accent-families-e-learn-light-accent-active: #4E3300;
  --color-accent-families-e-learn-dark-accent: #E0B552;
  --color-accent-families-e-learn-dark-accent-tint: #2A2318;
  --color-accent-families-e-learn-dark-accent-hover: #E8C472;
  --color-accent-families-e-learn-dark-accent-active: #F0D392;
  --color-accent-families-f-neutral-light-accent: #3C4441;
  --color-accent-families-f-neutral-light-accent-tint: #EAEDEB;
  --color-accent-families-f-neutral-light-accent-hover: #2F3634;
  --color-accent-families-f-neutral-light-accent-active: #232827;
  --color-accent-families-f-neutral-dark-accent: #A9B5B1;
  --color-accent-families-f-neutral-dark-accent-tint: #1E2422;
  --color-accent-families-f-neutral-dark-accent-hover: #BDC7C4;
  --color-accent-families-f-neutral-dark-accent-active: #D1D9D7;
  --color-chart-light-series-1: #0E6E62;
  --color-chart-light-series-2: #A85A28;
  --color-chart-light-series-3: #2F6DA8;
  --color-chart-light-series-4: #5E7333;
  --color-chart-light-series-5: #8A6A18;
  --color-chart-light-series-6: #5B6570;
  --color-chart-light-series-7: #8C4A6B;
  --color-chart-light-series-8: #2A7A78;
  --color-chart-dark-series-1: #4FC3AF;
  --color-chart-dark-series-2: #E09A63;
  --color-chart-dark-series-3: #8FB4E0;
  --color-chart-dark-series-4: #AFC77A;
  --color-chart-dark-series-5: #E0B552;
  --color-chart-dark-series-6: #9AA5A0;
  --color-chart-dark-series-7: #DB9BB8;
  --color-chart-dark-series-8: #63CBB8;

  /* font */
  --font-family-display: Onest, -apple-system, 'Segoe UI', sans-serif;
  --font-family-body: Onest, -apple-system, 'Segoe UI', sans-serif;
  --font-family-mono: 'Roboto Mono', ui-monospace, 'SF Mono', monospace;
  --font-family-fallback-multiscript: 'Source Sans 3', 'Noto Sans', sans-serif;
  --font-size-xs: 11px;
  --font-size-sm: 13px;
  --font-size-md: 15px; /* Body baseline on mobile. Larger than web because thumb-distance reading. */
  --font-size-lg: 17px;
  --font-size-xl: 20px;
  --font-size-2xl: 24px;
  --font-size-3xl: 32px;
  --font-size-4xl: 44px;
  --font-size-display: clamp(44px, 14vw, 72px); /* The one result number. Deliberately outside the 8-step scale: it must survive being filmed on a phone. */
  --font-weight-read: 400;
  --font-weight-emphasize: 510; /* Non-round on purpose — forces implementers to look the token up instead of typing 'bold'. */
  --font-weight-announce: 590; /* Ceiling. 700+ on display sizes reads lumpy on mobile. */
  --font-leading-body: 1.55;
  --font-leading-tight: 1.25;
  --font-leading-display: 1.05;
  --font-tracking-body: 0em;
  --font-tracking-small: 0.01em;
  --font-tracking-all-caps: 0.06em; /* Mandatory. Without it, uppercase labels collide. */
  --font-tracking-heading: -0.01em;
  --font-tracking-display: -0.02em;

  /* space */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 20px;
  --space-6: 24px;
  --space-8: 32px;
  --space-10: 40px;
  --space-12: 48px;
  --space-16: 64px;
  --space-20: 80px;

  /* radius */
  --radius-xs: 6px;
  --radius-sm: 10px; /* Buttons, inputs, chips. */
  --radius-md: 14px; /* Cards. Ceiling — 24px+ is the 'over-rounded AI' tell. */
  --radius-lg: 20px; /* Sheet top corners only. */
  --radius-pill: 9999px; /* Switches and segmented controls only. Not for cards. */

  /* shadow */
  --shadow-flat: none;
  --shadow-ring: 0 0 0 1px rgba(217,223,220,1); /* Default separation is a border, not a shadow. */
  --shadow-raised: 0 1px 2px rgba(11,15,14,0.05), 0 4px 10px rgba(11,15,14,0.06); /* Floating layers only. Shadow carries a green cast, not pure black. NEVER combine a 1px border with a >=16px blur on the same element (ghost card). */

  /* motion */
  --motion-duration-instant: 100ms;
  --motion-duration-fast: 150ms; /* The cross-system convergence value. Default for hover/state. */
  --motion-duration-base: 200ms;
  --motion-duration-screen: 280ms;
  --motion-easing-standard: cubic-bezier(0.2, 0, 0, 1);
  --motion-easing-enter: cubic-bezier(0, 0, 0.2, 1);
  --motion-easing-exit: cubic-bezier(0.4, 0, 1, 1);

  /* size */
  --size-touch-target-min: 44px; /* WCAG 2.5.5. Buttons are 52px so the padding-inclusive hit area clears it. */
  --size-control-height: 52px;
  --size-control-height-sm: 44px;
  --size-container-max: 1080px;
  --size-reading-measure: 680px; /* Long-form legal/help pages. Not 1080 — prose needs a narrower column. */
  --size-border-hairline: 1px;
  --size-border-stateful: 1.5px; /* Stateful borders are thicker so the 3:1 contrast reads at small sizes. */
  --size-focus-ring-width: 3px;
  --size-focus-ring-offset: 1.5px;

  /* focus */
  --focus-ring: 0 0 0 3px var(--focus-ring-halo), 0 0 0 1.5px var(--accent); /* Two-part: a translucent halo plus a solid inner ring, so it survives on any background. Never remove outline without replacing it. */

  /* icon */
  --icon-library: lucide; /* Single library, lockfile-pinned, no caret range. Upgrade only with a visual regression pass. */
  --icon-size-inline: 16px; /* Inside --text-sm runs. */
  --icon-size-control: 20px; /* Inside buttons, list chevrons. */
  --icon-size-standalone: 24px; /* Empty states, section markers. */
  --icon-stroke-width: 2;
  --icon-grid: 24px;
}

/* 深色模式：仅覆盖路径式中带 -light- 的项，以及 OVERRIDES 里声明的例外 */
@media (prefers-color-scheme: dark) {
  :root {
    --color-dark-bg: #0B0F0E;
    --color-dark-surface: #141A18;
    --color-dark-surface-warm: #1C2422;
    --color-dark-surface-tint: #1B2624;
    --color-dark-fg: #ECF1EF;
    --color-dark-fg-2: #C6D0CC;
    --color-dark-muted: #93A19C;
    --color-dark-meta: #84928E;
    --color-dark-border: #2A3330;
    --color-dark-border-soft: #1F2926;
    --color-dark-border-strong: #606C68;
    --color-dark-accent: var(--accent);
    --color-dark-accent-on: #08110F;
    --color-dark-accent-tint: var(--accent-tint);
    --color-dark-accent-hover: var(--accent-hover);
    --color-dark-accent-active: var(--accent-active);
    --color-dark-success: #5FD08A;
    --color-dark-warn: #F0B74E;
    --color-dark-danger: #FF8A80;
    --color-dark-info: #7FB6F0;

    --shadow-raised: none; /* 见文件头建模缺口 1 */
  }
}

/* 默认 accent 族：F-neutral（中性）。运行时可用 [data-family] 覆盖 */
:root {
  --accent: #3C4441;
  --accent-tint: #EAEDEB;
  --accent-hover: #2F3634;
  --accent-active: #232827;
  --focus-ring-halo: rgba(60,68,65,0.45);
}

@media (prefers-color-scheme: dark) {
  :root {
    --accent: #A9B5B1;
    --accent-tint: #1E2422;
    --accent-hover: #BDC7C4;
    --accent-active: #D1D9D7;
    --focus-ring-halo: rgba(169,181,177,0.45);
  }
}

/* ============================================================ */
  accent 色系 —— 全部 6 套，由运行时通过 [data-family] 选择
  默认（无 data-family 时）用 F-neutral，中性无品类信号
  ============================================================ */

/* A-health — Deep teal */
[data-family="a-health"] {
  --accent: #0E6E62;
  --accent-tint: #E4EFEC;
  --accent-hover: #0B5A50;
  --accent-active: #094A42;
  --focus-ring-halo: rgba(14,110,98,0.45);
}

@media (prefers-color-scheme: dark) {
  [data-family="a-health"] {
    --accent: #4FC3AF;
    --accent-tint: #1B2624;
    --accent-hover: #63CBB8;
    --accent-active: #78D3C2;
    --focus-ring-halo: rgba(79,195,175,0.45);
  }
}

/* B-pet — Clay */
[data-family="b-pet"] {
  --accent: #9C4A1E;
  --accent-tint: #F7E9E0;
  --accent-hover: #853D17;
  --accent-active: #6E3212;
  --focus-ring-halo: rgba(156,74,30,0.45);
}

@media (prefers-color-scheme: dark) {
  [data-family="b-pet"] {
    --accent: #F0A277;
    --accent-tint: #2A1D16;
    --accent-hover: #F4B591;
    --accent-active: #F8C8AB;
    --focus-ring-halo: rgba(240,162,119,0.45);
  }
}

/* C-care — Ink blue */
[data-family="c-care"] {
  --accent: #1F4470;
  --accent-tint: #E5ECF4;
  --accent-hover: #19375C;
  --accent-active: #132B48;
  --focus-ring-halo: rgba(31,68,112,0.45);
}

@media (prefers-color-scheme: dark) {
  [data-family="c-care"] {
    --accent: #8FB4E0;
    --accent-tint: #182331;
    --accent-hover: #A5C4E8;
    --accent-active: #BBD4EF;
    --focus-ring-halo: rgba(143,180,224,0.45);
  }
}

/* D-finance — Forest */
[data-family="d-finance"] {
  --accent: #1D5B3F;
  --accent-tint: #E3EFE9;
  --accent-hover: #174A33;
  --accent-active: #113927;
  --focus-ring-halo: rgba(29,91,63,0.45);
}

@media (prefers-color-scheme: dark) {
  [data-family="d-finance"] {
    --accent: #7FCFA6;
    --accent-tint: #16241C;
    --accent-hover: #97DBB8;
    --accent-active: #AFE7CA;
    --focus-ring-halo: rgba(127,207,166,0.45);
  }
}

/* E-learn — Amber */
[data-family="e-learn"] {
  --accent: #7A5100;
  --accent-tint: #F6EDDC;
  --accent-hover: #644200;
  --accent-active: #4E3300;
  --focus-ring-halo: rgba(122,81,0,0.45);
}

@media (prefers-color-scheme: dark) {
  [data-family="e-learn"] {
    --accent: #E0B552;
    --accent-tint: #2A2318;
    --accent-hover: #E8C472;
    --accent-active: #F0D392;
    --focus-ring-halo: rgba(224,181,82,0.45);
  }
}

/* F-neutral — Graphite */
[data-family="f-neutral"] {
  --accent: #3C4441;
  --accent-tint: #EAEDEB;
  --accent-hover: #2F3634;
  --accent-active: #232827;
  --focus-ring-halo: rgba(60,68,65,0.45);
}

@media (prefers-color-scheme: dark) {
  [data-family="f-neutral"] {
    --accent: #A9B5B1;
    --accent-tint: #1E2422;
    --accent-hover: #BDC7C4;
    --accent-active: #D1D9D7;
    --focus-ring-halo: rgba(169,181,177,0.45);
  }
}

/* 默认族：F-neutral */
:root {
  --accent: #3C4441;
  --accent-tint: #EAEDEB;
  --accent-hover: #2F3634;
  --accent-active: #232827;
}

@media (prefers-color-scheme: dark) {
  :root {
    --accent: #A9B5B1;
    --accent-tint: #1E2422;
    --accent-hover: #BDC7C4;
    --accent-active: #D1D9D7;
  }
}

/* ============================================================
  语义别名 —— 指向路径式，供已交付页面使用
  :root 指向 light，dark 媒体查询里重指 dark
  ============================================================ */
:root {
  --bg: var(--color-light-bg);
  --surface: var(--color-light-surface);
  --surface-warm: var(--color-light-surface-warm);
  --fg: var(--color-light-fg);
  --fg-2: var(--color-light-fg-2);
  --muted: var(--color-light-muted);
  --meta: var(--color-light-meta);
  --border: var(--color-light-border);
  --border-soft: var(--color-light-border-soft);
  --border-strong: var(--color-light-border-strong);
  --accent-on: var(--color-light-accent-on);
  --success: var(--color-light-success);
  --warn: var(--color-light-warn);
  --danger: var(--color-light-danger);
  --info: var(--color-light-info);

  /* 尺寸与动效（不随主题变） */
  --text-xs: var(--font-size-xs);
  --text-sm: var(--font-size-sm);
  --text-md: var(--font-size-md);
  --text-lg: var(--font-size-lg);
  --text-xl: var(--font-size-xl);
  --text-2xl: var(--font-size-2xl);
  --text-3xl: var(--font-size-3xl);
  --text-4xl: var(--font-size-4xl);
  --text-display: var(--font-size-display);
  --font-body: var(--font-family-body);
  --font-display: var(--font-family-display);
  --font-mono: var(--font-family-mono);
  --elev-ring: var(--shadow-ring);
  --elev-raised: var(--shadow-raised);
  --ease-standard: var(--motion-easing-standard);
  --ease-enter: var(--motion-easing-enter);
  --ease-exit: var(--motion-easing-exit);
  --motion-fast: var(--motion-duration-fast);
  --motion-base: var(--motion-duration-base);
  --container: var(--size-container-max);
  --focus-ring-width: var(--size-focus-ring-width);
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg: var(--color-dark-bg);
    --surface: var(--color-dark-surface);
    --surface-warm: var(--color-dark-surface-warm);
    --fg: var(--color-dark-fg);
    --fg-2: var(--color-dark-fg-2);
    --muted: var(--color-dark-muted);
    --meta: var(--color-dark-meta);
    --border: var(--color-dark-border);
    --border-soft: var(--color-dark-border-soft);
    --border-strong: var(--color-dark-border-strong);
    --accent-on: var(--color-dark-accent-on);
    --success: var(--color-dark-success);
    --warn: var(--color-dark-warn);
    --danger: var(--color-dark-danger);
    --info: var(--color-dark-info);
  }
}
