/* 由 build_tokens.py 从 tokens.json 生成，请勿手改 */
:root {
  --font-serif: 'Noto Serif SC', 'Songti SC', 'STSong', serif;
  --font-sans: 'PingFang SC', 'HarmonyOS Sans SC', 'Noto Sans SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
  --font-numeral: 'Cormorant Garamond', 'Didot', 'Bodoni 72', 'Noto Serif SC', serif;
  --font-display-ui: 'PingFang SC', 'HarmonyOS Sans SC', 'Noto Sans SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
  --font-numeral-ui: 'DIN Alternate', 'Helvetica Neue', 'PingFang SC', 'Noto Sans SC', sans-serif;
  --font-mono: 'SF Mono', 'Menlo', 'Consolas', 'Noto Sans Mono CJK SC', monospace;
  --size-xs: calc(0.75rem * var(--font-scale));
  --size-sm: calc(0.8125rem * var(--font-scale));
  --size-md: calc(0.875rem * var(--font-scale));
  --size-lg: calc(1rem * var(--font-scale));
  --size-xl: calc(1.125rem * var(--font-scale));
  --size-2xl: calc(1.375rem * var(--font-scale));
  --size-3xl: calc(1.75rem * var(--font-scale));
  --size-4xl: calc(2.25rem * var(--font-scale));
  --size-5xl: calc(3.25rem * var(--font-scale));
  --weight-light: 300;
  --weight-regular: 400;
  --weight-medium: 500;
  --leading-tight: 1.25;
  --leading-normal: 1.6;
  --leading-relaxed: 1.85;
  --tracking-normal: 0;
  --tracking-wide: 0.04em;
  --tracking-eyebrow: 0.2em;
  --space-0: 0;
  --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;
  --radius-sm: 8px;
  --radius-md: 14px;
  --radius-lg: 20px;
  --radius-xl: 28px;
  --radius-pill: 999px;
  --duration-fast: 150ms;
  --duration-normal: 250ms;
  --duration-slow: 450ms;
  --easing-standard: cubic-bezier(.2,.7,.2,1);
  --touch-min: 44px;
  --font-scale-standard: 1;
  --font-scale-large: 1.15;
  --breakpoint-desktop: 768px;
  --font-scale: 1;
}
[data-font="standard"] { --font-scale: 1; }
[data-font="large"] { --font-scale: 1.15; }
:root, [data-theme] {
  --c-button-height: 44px;
  --c-button-height-sm: var(--touch-min);
  --c-icon-button: var(--touch-min);
  --c-button-radius: var(--radius-pill);
  --c-button-primary-bg: var(--text-primary);
  --c-button-primary-fg: var(--bg-canvas);
  --c-button-accent-bg: var(--accent);
  --c-button-accent-fg: var(--text-on-accent);
  --c-button-outline-border: var(--border-strong);
  --c-card-radius: var(--radius-lg);
  --c-card-padding: var(--space-5);
  --c-card-bg: var(--surface-card);
  --c-card-shadow: var(--shadow-card);
  --c-tag-radius: var(--radius-pill);
  --c-input-height: 48px;
  --c-input-radius: var(--radius-md);
  --c-input-bg: var(--bg-canvas);
  --c-nav-bottom-height: 68px;
  --c-nav-bottom-radius: 26px;
  --c-quote-bg: var(--bg-canvas);
  --c-quote-border: var(--line-accent);
  --c-tag-weight: var(--weight-medium);
}
[data-theme="gallery"], :root:not([data-theme]) {
  color-scheme: light;
  --bg-canvas: #F5F4F1;
  --bg-subtle: #EAE8E3;
  --surface-card: #FFFFFF;
  --surface-raised: #FFFFFF;
  --surface-inverse: #171716;
  --on-inverse: #F2F0EB;
  --on-inverse-muted: #B5B2AB;
  --inverse-accent: #DDB57E;
  --text-primary: #1B1B1A;
  --text-secondary: #5E5C58;
  --text-tertiary: #696763;
  --text-on-accent: #FFFFFF;
  --border-hairline: #E2DED6;
  --border-strong: #CFC9BE;
  --line-accent: #C2A37A;
  --accent: #92633A;
  --accent-soft: #EDD6BE;
  --accent-ink: #6A4423;
  --success: #4E7D4A;
  --success-soft: #D2E8C9;
  --warning: #B07418;
  --warning-soft: #F6DEAE;
  --danger: #B04A36;
  --danger-soft: #F5CDC1;
  --info: #3F6E8E;
  --info-soft: #C9DFEE;
  --success-ink: #41693E;
  --warning-ink: #835611;
  --danger-ink: #943E2D;
  --info-ink: #38617E;
  --focus-ring: rgba(146,99,58,.35);
  --overlay: rgba(20,18,16,.45);
  --shadow-card: 0 1px 0 rgba(255,255,255,.9) inset, 0 16px 36px -24px rgba(40,30,20,.28);
  --shadow-float: 0 18px 40px -18px rgba(40,30,20,.35);
  --skeleton: #ECE9E3;
  --live-bg: #F5F4F1;
  --live-surface: #FFFFFF;
  --live-border: #C2A37A;
  --live-text: #1B1B1A;
  --live-text-muted: #5E5C58;
  --live-accent: #6A4423;
  --hint-activity: #6A4423;
  --hint-concern: #3D4F9A;
  --hint-competitor: #7A3F87;
  --hint-budget: #16686F;
  --hint-health: #942D3E;
  --hint-companion: #3F6A2A;
  --chart-1: #92633A;
  --chart-2: #1F7A80;
  --chart-3: #4B5BA8;
  --chart-4: #B5583A;
  --chart-5: #4F7F3C;
  --chart-6: #87498F;
  --chart-muted: #8C877D;
  --chart-grid: #ECE8E0;
  --chart-seq-1: #F4EDE3;
  --chart-seq-2: #E8D5BC;
  --chart-seq-3: #D2B187;
  --chart-seq-4: #B08455;
  --chart-seq-5: #7C5428;
  --chart-glow: rgba(146,99,58,.18);
  --fill-muted: #F5F4F1;
  --fill-strong: #EDEAE4;
}
[data-theme="noir"] {
  color-scheme: dark;
  --bg-canvas: #0B0A09;
  --bg-subtle: #1A1715;
  --surface-card: #29241F;
  --surface-raised: #36302B;
  --surface-inverse: #45352A;
  --on-inverse: #F1EBE3;
  --on-inverse-muted: #C9BBAC;
  --inverse-accent: #EEC88E;
  --text-primary: #F1EBE3;
  --text-secondary: #B5ABA1;
  --text-tertiary: #A09992;
  --text-on-accent: #1A1714;
  --border-hairline: #433B35;
  --border-strong: #62564B;
  --line-accent: #A0814F;
  --accent: #DCAE6F;
  --accent-soft: #4A3720;
  --accent-ink: #EEC88E;
  --success: #8FC47F;
  --success-soft: #243A1F;
  --warning: #E8AE4C;
  --warning-soft: #48351A;
  --danger: #EE8A71;
  --danger-soft: #4C2820;
  --info: #8CBFE3;
  --info-soft: #1C3648;
  --success-ink: #8FC47F;
  --warning-ink: #E8AE4C;
  --danger-ink: #EE8A71;
  --info-ink: #8CBFE3;
  --focus-ring: rgba(220,174,111,.4);
  --overlay: rgba(0,0,0,.6);
  --shadow-card: 0 1px 0 rgba(255,255,255,.05) inset, 0 0 0 1px rgba(255,255,255,.02), 0 18px 40px -24px rgba(0,0,0,.8);
  --shadow-float: 0 18px 40px -18px rgba(0,0,0,.8);
  --skeleton: #332D29;
  --live-bg: #0B0A09;
  --live-surface: #29241F;
  --live-border: #A0814F;
  --live-text: #F1EBE3;
  --live-text-muted: #C9BBAC;
  --live-accent: #EEC88E;
  --hint-activity: #EEC88E;
  --hint-concern: #A9B6F2;
  --hint-competitor: #D9A6E6;
  --hint-budget: #74CFD4;
  --hint-health: #EE7186;
  --hint-companion: #A6CF7C;
  --chart-1: #DCAE6F;
  --chart-2: #6CCBC9;
  --chart-3: #9AA8F0;
  --chart-4: #EE8A71;
  --chart-5: #9DCB7F;
  --chart-6: #D3A0E0;
  --chart-muted: #8E857B;
  --chart-grid: #3A332D;
  --chart-seq-1: #332C26;
  --chart-seq-2: #5A4630;
  --chart-seq-3: #8C6A40;
  --chart-seq-4: #C2914F;
  --chart-seq-5: #EEC88E;
  --chart-glow: rgba(220,174,111,.28);
  --fill-muted: #302A25;
  --fill-strong: #36302B;
}
[data-theme="ivory"] {
  color-scheme: light;
  --bg-canvas: #F6F2EC;
  --bg-subtle: #ECE5DB;
  --surface-card: #FCFAF7;
  --surface-raised: #FFFFFF;
  --surface-inverse: #221B17;
  --on-inverse: #F1E8DE;
  --on-inverse-muted: #C5B8AC;
  --inverse-accent: #D9BB9E;
  --text-primary: #2A211C;
  --text-secondary: #6B5F57;
  --text-tertiary: #93857A;
  --text-on-accent: #FFFFFF;
  --border-hairline: #E6DDD1;
  --border-strong: #D4C7B6;
  --line-accent: #CBA471;
  --accent: #AD5F45;
  --accent-soft: #F0D2C3;
  --accent-ink: #86412B;
  --success: #4E7D4A;
  --success-soft: #D2E8C9;
  --warning: #B07418;
  --warning-soft: #F6DEAE;
  --danger: #B04A36;
  --danger-soft: #F5CDC1;
  --info: #3F6E8E;
  --info-soft: #C9DFEE;
  --focus-ring: rgba(162,107,87,.35);
  --overlay: rgba(30,20,15,.45);
  --shadow-card: 0 1px 0 rgba(255,255,255,.85) inset, 0 18px 40px -24px rgba(70,48,36,.26);
  --shadow-float: 0 18px 40px -18px rgba(70,48,36,.35);
  --skeleton: #EEE7DD;
}
[data-theme="sage"] {
  color-scheme: light;
  --bg-canvas: #F2F2EC;
  --bg-subtle: #E5E7DD;
  --surface-card: #FAFAF6;
  --surface-raised: #FFFFFF;
  --surface-inverse: #1C221D;
  --on-inverse: #EEF0E8;
  --on-inverse-muted: #B6BDB0;
  --inverse-accent: #CAB98F;
  --text-primary: #232A24;
  --text-secondary: #596258;
  --text-tertiary: #838A80;
  --text-on-accent: #FFFFFF;
  --border-hairline: #DFE2D7;
  --border-strong: #C9CDBF;
  --line-accent: #B4A27C;
  --accent: #4F7448;
  --accent-soft: #D0E3C8;
  --accent-ink: #3B5935;
  --success: #4F7448;
  --success-soft: #D0E3C8;
  --warning: #B07418;
  --warning-soft: #F6DEAE;
  --danger: #B04A36;
  --danger-soft: #F5CDC1;
  --info: #3F6E8E;
  --info-soft: #C9DFEE;
  --focus-ring: rgba(95,115,90,.35);
  --overlay: rgba(20,25,20,.45);
  --shadow-card: 0 1px 0 rgba(255,255,255,.85) inset, 0 18px 40px -24px rgba(35,45,36,.22);
  --shadow-float: 0 18px 40px -18px rgba(35,45,36,.32);
  --skeleton: #E9EBE3;
}
[data-theme="porcelain"] {
  color-scheme: light;
  --bg-canvas: #F0F2F3;
  --bg-subtle: #E2E7E9;
  --surface-card: #FBFCFC;
  --surface-raised: #FFFFFF;
  --surface-inverse: #172028;
  --on-inverse: #ECF1F4;
  --on-inverse-muted: #ACB9C2;
  --inverse-accent: #B7CCDA;
  --text-primary: #1E2830;
  --text-secondary: #54616B;
  --text-tertiary: #7E8A93;
  --text-on-accent: #FFFFFF;
  --border-hairline: #DCE2E5;
  --border-strong: #C3CDD3;
  --line-accent: #9FB3C2;
  --accent: #3C6B8C;
  --accent-soft: #C9DCEB;
  --accent-ink: #2B5070;
  --success: #4E7D4A;
  --success-soft: #D2E8C9;
  --warning: #B07418;
  --warning-soft: #F6DEAE;
  --danger: #B04A36;
  --danger-soft: #F5CDC1;
  --info: #3F6E8E;
  --info-soft: #C9DFEE;
  --focus-ring: rgba(79,107,126,.35);
  --overlay: rgba(15,22,28,.45);
  --shadow-card: 0 1px 0 rgba(255,255,255,.85) inset, 0 18px 40px -24px rgba(30,40,48,.2);
  --shadow-float: 0 18px 40px -18px rgba(30,40,48,.3);
  --skeleton: #E5E9EB;
}
[data-theme="terracotta"] {
  color-scheme: light;
  --bg-canvas: #F4EEE6;
  --bg-subtle: #EADFD2;
  --surface-card: #FCF9F4;
  --surface-raised: #FFFFFF;
  --surface-inverse: #2A1E18;
  --on-inverse: #F5EADF;
  --on-inverse-muted: #CBB7A6;
  --inverse-accent: #E0B28D;
  --text-primary: #2D221D;
  --text-secondary: #69594F;
  --text-tertiary: #958375;
  --text-on-accent: #FFFFFF;
  --border-hairline: #E8DCCD;
  --border-strong: #D6C3AC;
  --line-accent: #CFA068;
  --accent: #B4532E;
  --accent-soft: #F2CDB4;
  --accent-ink: #8C3B1F;
  --success: #4E7D4A;
  --success-soft: #D2E8C9;
  --warning: #B07418;
  --warning-soft: #F6DEAE;
  --danger: #B04A36;
  --danger-soft: #F5CDC1;
  --info: #3F6E8E;
  --info-soft: #C9DFEE;
  --focus-ring: rgba(162,87,58,.35);
  --overlay: rgba(40,22,14,.45);
  --shadow-card: 0 1px 0 rgba(255,255,255,.85) inset, 0 18px 40px -24px rgba(80,46,28,.26);
  --shadow-float: 0 18px 40px -18px rgba(80,46,28,.35);
  --skeleton: #EDE4D8;
}
