@vegastack/design-tokens 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/base.css ADDED
@@ -0,0 +1,78 @@
1
+ /* @vegastack/design-tokens/base.css — opt-in base reset (kept separate so consumers aren't forced into it). */
2
+ @layer base {
3
+ * {
4
+ @apply border-border outline-ring/(--alpha-outline-soft);
5
+ }
6
+ body {
7
+ /* `isolate` creates a root stacking context so Base UI portaled popups (Dialog, Popover,
8
+ Tooltip, Select, menus, Sheet) reliably stack above page content — required by Base UI's
9
+ Quick Start ("Set up portals"). Consumers importing base.css get this for free; if you don't
10
+ import base.css, add `isolation: isolate` to your app root yourself. */
11
+ @apply bg-background text-foreground isolate;
12
+ }
13
+ /* a11y: real focus ring (fixes the platform's outline:none defect — requirements §7.5).
14
+ 2px solid neutral outline, offset 1 (hugs the control — reads as a crisp border, not a halo).
15
+ Single source of truth: components carry NO focus ring of their own; this re-skins from `ring`. */
16
+ :focus-visible {
17
+ @apply outline-2 outline-offset-1 outline-ring;
18
+ }
19
+ /* Pointer cursor on every interactive control. Tailwind v4 Preflight no longer sets it and the
20
+ native <button> cursor is an arrow, so without this every button / icon-button / menu item /
21
+ select option / tab / toggle would miss the hand cursor. This is the SINGLE global source of
22
+ truth — components must NOT re-declare `cursor-pointer` locally; only genuinely non-standard
23
+ clickables (a clickable table row, a label tied to a control) or non-pointer cursors
24
+ (`cursor-text`, the select scroll-arrows) set a cursor of their own. */
25
+ button,
26
+ [role='button'],
27
+ [role='tab'],
28
+ [role='switch'],
29
+ [role='checkbox'],
30
+ [role='radio'],
31
+ [role='menuitem'],
32
+ [role='menuitemcheckbox'],
33
+ [role='menuitemradio'],
34
+ [role='option'],
35
+ summary {
36
+ cursor: pointer;
37
+ }
38
+ /* Disabled controls opt out (those that don't already set `pointer-events-none` /
39
+ `cursor-not-allowed`). Higher specificity than the element/role selectors above, so it wins;
40
+ a component's own `disabled:cursor-not-allowed` lives in the later utilities layer and still wins. */
41
+ :disabled,
42
+ [aria-disabled='true'],
43
+ [data-disabled] {
44
+ cursor: default;
45
+ }
46
+ }
47
+
48
+ /* ───────────────────────────────────────────────────────────────────────────────────────────────
49
+ * THE ONE SANCTIONED `!important` EXCEPTION (WCAG 2.1 — reduced-motion accessibility override).
50
+ * Users who set `prefers-reduced-motion: reduce` MUST have animations/transitions neutralized even
51
+ * over component-authored durations; `!important` is the standard, intentional mechanism for this
52
+ * reset (it has to win against any animated rule, including ones defined later or with higher
53
+ * specificity). This is the SOLE place `!important` is permitted in shipped VegaStack CSS — the
54
+ * design-audit contract bans `!important` everywhere else, and `design-lint` (token-css mode)
55
+ * FAILS on any `!important` that is NOT inside this `prefers-reduced-motion: reduce` block. Do not
56
+ * add `!important` to win a specificity fight elsewhere; restructure the selector or token instead.
57
+ * (requirements §7.5 / skills/design-audit.)
58
+ * ──────────────────────────────────────────────────────────────────────────────────────────────*/
59
+ @media (prefers-reduced-motion: reduce) {
60
+ *,
61
+ ::before,
62
+ ::after {
63
+ animation-duration: 0.01ms !important;
64
+ animation-iteration-count: 1 !important;
65
+ transition-duration: 0.01ms !important;
66
+ scroll-behavior: auto !important;
67
+ }
68
+
69
+ /* View Transitions (Phase S): the universal selector above never reaches the
70
+ * ::view-transition-* pseudo-element tree (it lives on the root's snapshot layer,
71
+ * outside normal element matching), so route-change cross-fades/morphs need their
72
+ * own reduced-motion kill switch. */
73
+ ::view-transition-group(*),
74
+ ::view-transition-old(*),
75
+ ::view-transition-new(*) {
76
+ animation: none !important;
77
+ }
78
+ }
package/dist/theme.css ADDED
@@ -0,0 +1,388 @@
1
+ @custom-variant dark (&:where(.dark, .dark *));
2
+
3
+ /**
4
+ * Do not edit directly, this file was auto-generated.
5
+ */
6
+
7
+ :root {
8
+ --background: oklch(0.994 0.002 75);
9
+ --foreground: oklch(0.145 0.003 75);
10
+ --card: oklch(0.985 0.003 75);
11
+ --card-foreground: oklch(0.145 0.003 75);
12
+ --popover: oklch(0.994 0.002 75);
13
+ --popover-foreground: oklch(0.145 0.003 75);
14
+ --primary: oklch(0.353 0.003 75);
15
+ --primary-foreground: oklch(0.985 0.003 75);
16
+ --primary-hover: oklch(0.269 0.003 75);
17
+ --primary-active: oklch(0.236 0.003 75);
18
+ --track: oklch(0.87 0.003 75);
19
+ --secondary: oklch(0.97 0.003 75);
20
+ --secondary-foreground: oklch(0.205 0.003 75);
21
+ --muted: oklch(0.97 0.003 75);
22
+ --muted-foreground: oklch(0.439 0.003 75);
23
+ --muted-foreground-faint: oklch(0.63 0.003 75);
24
+ --accent: oklch(0.97 0.003 75);
25
+ --accent-foreground: oklch(0.205 0.003 75);
26
+ --destructive: oklch(0.505 0.213 27.52);
27
+ --destructive-foreground: oklch(0.985 0.003 75);
28
+ --destructive-subtle: oklch(0.949 0.022 24);
29
+ --destructive-text: oklch(0.521 0.2 25);
30
+ --success: oklch(0.5 0.16 150);
31
+ --success-foreground: oklch(0.985 0.003 75);
32
+ --success-subtle: oklch(0.951 0.051 150);
33
+ --success-text: oklch(0.5 0.13 150);
34
+ --warning: oklch(0.52 0.145 52);
35
+ --warning-foreground: oklch(0.985 0.003 75);
36
+ --warning-subtle: oklch(0.96 0.019 42);
37
+ --warning-text: oklch(0.52 0.139 42);
38
+ --info: oklch(0.531 0.182 256);
39
+ --info-foreground: oklch(0.985 0.003 75);
40
+ --info-subtle: oklch(0.961 0.018 253);
41
+ --info-text: oklch(0.52 0.171 256);
42
+ --overlay: oklch(0.13 0.002 75 / 0.28); /** Modal scrim — the ONE sanctioned alpha-composite literal (a translucent wash has no primitive step; alpha is intrinsic to the role). */
43
+ --border: oklch(0.922 0.003 75);
44
+ --input: oklch(0.922 0.003 75);
45
+ --ring: oklch(0.353 0.003 75);
46
+ --chart-1: oklch(0.546 0.245 262.88);
47
+ --chart-2: oklch(0.6 0.118 184.7);
48
+ --chart-3: oklch(0.398 0.07 227.39);
49
+ --chart-4: oklch(0.646 0.222 41.12);
50
+ --chart-5: oklch(0.645 0.246 16.44);
51
+ --chart-6: oklch(0.505 0.213 27.52);
52
+ --chart-7: oklch(0.6 0.127 104.2); /** Olive (hue 104) — reassigned from green.600, which collided with the brand phosphor hue (CX-9). */
53
+ --chart-8: oklch(0.531 0.182 256);
54
+ --brand: oklch(0.6 0.17 148); /** The phosphor-green brand accent, LIGHT half (theme-split per CX-9): marker roles ONLY (live/AI-state dot, sparkline endpoint, eyebrow highlight, terminal prompt glyph). 3.5:1 on card/background — meaningful glyphs pass WCAG 1.4.11. Never fills, borders-at-rest, headlines, or buttons. */
55
+ --sidebar: oklch(0.985 0.003 75);
56
+ --sidebar-foreground: oklch(0.269 0.003 75);
57
+ --sidebar-primary: oklch(0.145 0.003 75);
58
+ --sidebar-primary-foreground: oklch(0.985 0.003 75);
59
+ --sidebar-accent: oklch(0.955 0.003 75);
60
+ --sidebar-accent-foreground: oklch(0.145 0.003 75);
61
+ --sidebar-border: oklch(0.922 0.003 75);
62
+ --sidebar-ring: oklch(0.353 0.003 75);
63
+ --radius: 0.75rem;
64
+ --radius-xs: 0.125rem; /** Micro radius — caret/arrow triangles and other sub-control geometry (was a silent Tailwind fallback, register P1-10). */
65
+ --radius-sharp: 2px; /** The rationed marketing 'sharp' gesture (audit 17/D18): CTAs, chips, figure frames on marketing surfaces. 2px, not 0 — sharp at a glance, kin to the product scale. */
66
+ --radius-sm: 0.375rem;
67
+ --radius-md: 0.5rem;
68
+ --radius-lg: 0.75rem;
69
+ --size-xs: 1.5rem; /** 24px — the compact control tier (Button xs, icon-only affordances like the password eye). */
70
+ --size-sm: 1.75rem;
71
+ --size-md: 2rem;
72
+ --size-lg: 2.5rem;
73
+ --icon-compact: 0.75rem; /** 12px icon — inside xs controls only (below design.md's named scale; exists for the kept Button xs tier). */
74
+ --icon-inline: 0.875rem; /** 14px icon — inline with body text and sm controls (design.md §Iconography 'inline'). */
75
+ --icon-default: 1rem; /** 16px icon — the default control icon (design.md 'default'). */
76
+ --icon-action: 1.25rem; /** 20px icon — standalone action icons (design.md 'action'). */
77
+ --icon-feature: 1.5rem; /** 24px icon — feature/empty-state glyphs (design.md 'feature'). */
78
+ --sidebar-width: 15rem; /** Expanded sidebar rail width (was a JS constant invisible to design-lint, register P2-13). */
79
+ --sidebar-width-icon: 3rem; /** Collapsed icon-only rail width. */
80
+ --shadow-overlay: 0 4px 14px -4px oklch(0.13 0.002 75 / 0.1), 0 2px 4px -2px oklch(0.13 0.002 75 / 0.06);
81
+ --z-raised: 10; /** Local raise WITHIN a component's own stacking context (focused OTP slot / segmented item, floating label, bubble reactions, select scroll arrows). Never for portaled surfaces. */
82
+ --z-overlay: 50; /** The single portal band: every portaled floating surface (dialog, sheet, popover, menu, select, tooltip, hover-card). Nesting resolves by DOM order — Base UI appends portals to <body>, so a Select inside a Dialog mounts later and stacks above within the same band. Toasts (sonner) are the documented exemption ABOVE this band (library-managed z; a toast must outrank a modal regardless of mount order). */
83
+ --opacity-dim: 50%; /** Element opacity for disabled controls and dimmed affordances (outside-month days, decorative chevrons). */
84
+ --opacity-hint-soft: 60%; /** Element opacity for hover-revealed hints (e.g. sort affordance on row hover). */
85
+ --opacity-hint: 70%; /** Element opacity for resting secondary controls that reach 100% on hover (e.g. alert close). */
86
+ --opacity-track: 25%; /** Element opacity of the circular progress track ring. */
87
+ --alpha-tint-border: 70%; /** Border tint for focus (ring) and error (destructive) borders — design.md's ring/70 pattern. */
88
+ --alpha-outline-border: 50%; /** Resting border of the outline button family (border-<family>). */
89
+ --alpha-border-subtle: 20%; /** Alert variant border tint (border-<family>). */
90
+ --alpha-border-soft: 30%; /** Toast (sonner) status border tint (border-<family>). */
91
+ --alpha-surface-faint: 5%; /** Resting wash of the outline button family (bg-<family>). */
92
+ --alpha-surface-subtle: 10%; /** Hover wash of the outline button family (bg-<family>). */
93
+ --alpha-ink-tint: 10%; /** Neutral pressed/hover ink tint (bg-foreground) — toggle pressed, chip remove hover. */
94
+ --alpha-ink-tint-strong: 15%; /** Hovered pressed-state ink tint (bg-foreground). */
95
+ --alpha-soft-hover: 20%; /** Hover wash of soft (subtle-filled) status surfaces. Theme-split: 30% in dark. */
96
+ --alpha-soft-surface: 10%; /** Resting wash of soft status surfaces (chat destructive bubble). Theme-split: 20% in dark. */
97
+ --alpha-input: 30%; /** Dark-theme input fill tint (bg-input) — see the dark-tint scoping note. */
98
+ --alpha-input-hover: 50%; /** Dark-theme input fill tint on hover (bg-input). */
99
+ --alpha-fill-hover: 80%; /** Hover dim of an interactive solid fill (bg-primary/secondary/muted/accent on chat bubbles, secondary button). */
100
+ --alpha-wash-faint: 40%; /** Faint neutral wash (bg-muted) — rich-text toolbar. */
101
+ --alpha-wash: 50%; /** Neutral wash (bg-muted) — card/table footers, ghost dark hover. */
102
+ --alpha-wash-strong: 60%; /** Stronger neutral wash (bg-muted) — line-tab hover. */
103
+ --alpha-backdrop-soft: 60%; /** Translucent surface backdrop (bg-background) — pill tab list. */
104
+ --alpha-glass: 90%; /** Glass button surface (bg-background + backdrop-blur). */
105
+ --alpha-glass-hover: 95%; /** Glass button surface on hover. */
106
+ --alpha-link-hover: 80%; /** Hovered link text dim (text-info-text) in rendered rich text. */
107
+ --alpha-outline-soft: 50%; /** Soft neutral outline/ring (base outline default, date-picker today ring). */
108
+ --font-family-sans: Geist, sans-serif;
109
+ --font-family-mono: 'Geist Mono', monospace;
110
+ --font-family-serif: Newsreader, serif; /** Serif ACCENT (D17): display emphasis words + pull-quotes only, never running text. Newsreader (opsz axis) until Geist Serif ships. */
111
+ --font-family-display: Geist, sans-serif; /** Display tier face — same family as sans today, split as a token so marketing can retune independently. */
112
+ --font-family-pixel: 'Geist Pixel Square', monospace; /** THE single sanctioned Geist Pixel flourish cut (D17: one deliberate hero use per surface, no more). */
113
+ --duration-fast: 150ms;
114
+ --duration-base: 200ms;
115
+ --duration-slow: 300ms;
116
+ --motion-ease-standard: cubic-bezier(0.2, 0, 0, 1);
117
+ --motion-ease-emphasized: cubic-bezier(0.3, 0, 0, 1);
118
+ --motion-ease-exit: cubic-bezier(0.4, 0, 1, 1);
119
+ --motion-ease-spring: linear(0, 0.5 60%, 1.05 80%, 0.98 90%, 1); /** CSS linear() spring with a very small overshoot — the success-bounce/appear curve for state-feedback micro-interactions (Phase M). Subtle by design: dense dev-tool aesthetic, not playful. */
120
+ --motion-blur: 2px; /** Motion-blur amount for blur-fade entrances (Phase M text/element reveals). */
121
+ --destructive-hover: oklch(0.455 0.213 27.52); /** DERIVED: destructive fill at L-0.05 (hover step). */
122
+ --destructive-active: oklch(0.415 0.213 27.52); /** DERIVED: destructive fill at L-0.09 (active step). */
123
+ --destructive-subtle-hover: oklch(0.91 0.036 20.4); /** DERIVED: destructive fill @7.000000000000001% composited over destructive-subtle (soft-hover surface, AA-gated against destructive-text). */
124
+ --success-hover: oklch(0.45 0.16 150); /** DERIVED: success fill at L-0.05 (hover step). */
125
+ --success-active: oklch(0.41 0.16 150); /** DERIVED: success fill at L-0.09 (active step). */
126
+ --success-subtle-hover: oklch(0.919 0.059 151.1); /** DERIVED: success fill @7.000000000000001% composited over success-subtle (soft-hover surface, AA-gated against success-text). */
127
+ --warning-hover: oklch(0.47 0.145 52); /** DERIVED: warning fill at L-0.05 (hover step). */
128
+ --warning-active: oklch(0.43 0.145 52); /** DERIVED: warning fill at L-0.09 (active step). */
129
+ --warning-subtle-hover: oklch(0.929 0.027 48.8); /** DERIVED: warning fill @7.000000000000001% composited over warning-subtle (soft-hover surface, AA-gated against warning-text). */
130
+ --info-hover: oklch(0.481 0.182 256); /** DERIVED: info fill at L-0.05 (hover step). */
131
+ --info-active: oklch(0.441 0.182 256); /** DERIVED: info fill at L-0.09 (active step). */
132
+ --info-subtle-hover: oklch(0.929 0.03 251.1); /** DERIVED: info fill @7.000000000000001% composited over info-subtle (soft-hover surface, AA-gated against info-text). */
133
+ }
134
+
135
+ /**
136
+ * Do not edit directly, this file was auto-generated.
137
+ */
138
+
139
+ .dark {
140
+ --background: oklch(0.175 0.003 75);
141
+ --foreground: oklch(0.922 0.003 75);
142
+ --card: oklch(0.205 0.003 75);
143
+ --card-foreground: oklch(0.922 0.003 75);
144
+ --popover: oklch(0.205 0.003 75);
145
+ --popover-foreground: oklch(0.922 0.003 75);
146
+ --primary: oklch(0.922 0.003 75);
147
+ --primary-foreground: oklch(0.145 0.003 75);
148
+ --primary-hover: oklch(0.97 0.003 75);
149
+ --primary-active: oklch(0.994 0.002 75);
150
+ --track: oklch(0.439 0.003 75);
151
+ --secondary: oklch(0.269 0.003 75);
152
+ --secondary-foreground: oklch(0.922 0.003 75);
153
+ --muted: oklch(0.269 0.003 75);
154
+ --muted-foreground: oklch(0.66 0.003 75);
155
+ --muted-foreground-faint: oklch(0.559 0.003 75);
156
+ --accent: oklch(0.269 0.003 75);
157
+ --accent-foreground: oklch(0.967 0.003 75);
158
+ --destructive-subtle: oklch(0.275 0.07 25);
159
+ --destructive-text: oklch(0.72 0.16 25);
160
+ --success-subtle: oklch(0.276 0.061 150);
161
+ --success-text: oklch(0.72 0.17 150);
162
+ --warning-subtle: oklch(0.28 0.069 42);
163
+ --warning-text: oklch(0.769 0.188 70.08);
164
+ --info-subtle: oklch(0.275 0.059 255);
165
+ --info-text: oklch(0.72 0.13 256);
166
+ --overlay: oklch(0 0 0 / 0.55);
167
+ --border: oklch(0.269 0.003 75);
168
+ --input: oklch(0.269 0.003 75);
169
+ --ring: oklch(0.922 0.003 75);
170
+ --chart-1: oklch(0.623 0.214 259.81);
171
+ --chart-2: oklch(0.696 0.17 162.48);
172
+ --chart-3: oklch(0.769 0.188 70.08);
173
+ --chart-4: oklch(0.75 0.183 55.93);
174
+ --chart-5: oklch(0.645 0.246 16.44);
175
+ --chart-6: oklch(0.69 0.21 25);
176
+ --chart-7: oklch(0.72 0.15 103.9);
177
+ --chart-8: oklch(0.72 0.13 256);
178
+ --sidebar: oklch(0.145 0.003 75);
179
+ --sidebar-foreground: oklch(0.87 0.003 75);
180
+ --sidebar-primary: oklch(0.922 0.003 75);
181
+ --sidebar-primary-foreground: oklch(0.145 0.003 75);
182
+ --sidebar-accent: oklch(0.205 0.003 75);
183
+ --sidebar-accent-foreground: oklch(0.922 0.003 75);
184
+ --sidebar-border: oklch(0.269 0.003 75);
185
+ --sidebar-ring: oklch(0.922 0.003 75);
186
+ --brand: oklch(0.86 0.21 148); /** The phosphor-green brand accent, DARK half — MK's pick (13.3:1 on the dark canvas). Marker roles only. */
187
+ --alpha-soft-hover: 30%; /** Dark half of the theme-split soft-surface hover wash. */
188
+ --alpha-soft-surface: 20%; /** Dark half of the theme-split soft-surface resting wash. */
189
+ --destructive-subtle-hover: oklch(0.34 0.123 26.3); /** DERIVED: destructive fill @30% composited over destructive-subtle (soft-hover surface, AA-gated against destructive-text). */
190
+ --success-subtle-hover: oklch(0.348 0.092 148.9); /** DERIVED: success fill @30% composited over success-subtle (soft-hover surface, AA-gated against success-text). */
191
+ --warning-subtle-hover: oklch(0.356 0.093 46.6); /** DERIVED: warning fill @30% composited over warning-subtle (soft-hover surface, AA-gated against warning-text). */
192
+ --info-subtle-hover: oklch(0.354 0.101 254.3); /** DERIVED: info fill @30% composited over info-subtle (soft-hover surface, AA-gated against info-text). */
193
+ }
194
+
195
+ /* Two-layer type scale (T1): both ladders + the active binding (product by default). */
196
+ :root {
197
+ --type-product-xs: 0.6875rem;
198
+ --type-product-xs--line-height: calc(16 / 11);
199
+ --type-product-sm: 0.75rem;
200
+ --type-product-sm--line-height: calc(16 / 12);
201
+ --type-product-base: 0.875rem;
202
+ --type-product-base--line-height: calc(21 / 14);
203
+ --type-product-lg: 1rem;
204
+ --type-product-lg--line-height: calc(24 / 16);
205
+ --type-product-xl: 1.125rem;
206
+ --type-product-xl--line-height: calc(26 / 18);
207
+ --type-product-2xl: 1.25rem;
208
+ --type-product-2xl--line-height: calc(28 / 20);
209
+ --type-product-3xl: 1.5rem;
210
+ --type-product-3xl--line-height: calc(32 / 24);
211
+ --type-doc-xs: 0.75rem;
212
+ --type-doc-xs--line-height: calc(1 / 0.75);
213
+ --type-doc-sm: 0.875rem;
214
+ --type-doc-sm--line-height: calc(1.25 / 0.875);
215
+ --type-doc-base: 1rem;
216
+ --type-doc-base--line-height: calc(1.5 / 1);
217
+ --type-doc-lg: 1.125rem;
218
+ --type-doc-lg--line-height: calc(1.75 / 1.125);
219
+ --type-doc-xl: 1.25rem;
220
+ --type-doc-xl--line-height: calc(1.75 / 1.25);
221
+ --type-doc-2xl: 1.5rem;
222
+ --type-doc-2xl--line-height: calc(2 / 1.5);
223
+ --type-doc-3xl: 1.875rem;
224
+ --type-doc-3xl--line-height: calc(2.25 / 1.875);
225
+ --type-xs: var(--type-product-xs);
226
+ --type-xs--line-height: var(--type-product-xs--line-height);
227
+ --type-sm: var(--type-product-sm);
228
+ --type-sm--line-height: var(--type-product-sm--line-height);
229
+ --type-base: var(--type-product-base);
230
+ --type-base--line-height: var(--type-product-base--line-height);
231
+ --type-lg: var(--type-product-lg);
232
+ --type-lg--line-height: var(--type-product-lg--line-height);
233
+ --type-xl: var(--type-product-xl);
234
+ --type-xl--line-height: var(--type-product-xl--line-height);
235
+ --type-2xl: var(--type-product-2xl);
236
+ --type-2xl--line-height: var(--type-product-2xl--line-height);
237
+ --type-3xl: var(--type-product-3xl);
238
+ --type-3xl--line-height: var(--type-product-3xl--line-height);
239
+ }
240
+
241
+ @theme inline {
242
+ --color-background: var(--background);
243
+ --color-foreground: var(--foreground);
244
+ --color-card: var(--card);
245
+ --color-card-foreground: var(--card-foreground);
246
+ --color-popover: var(--popover);
247
+ --color-popover-foreground: var(--popover-foreground);
248
+ --color-primary: var(--primary);
249
+ --color-primary-foreground: var(--primary-foreground);
250
+ --color-primary-hover: var(--primary-hover);
251
+ --color-primary-active: var(--primary-active);
252
+ --color-track: var(--track);
253
+ --color-secondary: var(--secondary);
254
+ --color-secondary-foreground: var(--secondary-foreground);
255
+ --color-muted: var(--muted);
256
+ --color-muted-foreground: var(--muted-foreground);
257
+ --color-muted-foreground-faint: var(--muted-foreground-faint);
258
+ --color-accent: var(--accent);
259
+ --color-accent-foreground: var(--accent-foreground);
260
+ --color-destructive: var(--destructive);
261
+ --color-destructive-foreground: var(--destructive-foreground);
262
+ --color-destructive-subtle: var(--destructive-subtle);
263
+ --color-destructive-text: var(--destructive-text);
264
+ --color-success: var(--success);
265
+ --color-success-foreground: var(--success-foreground);
266
+ --color-success-subtle: var(--success-subtle);
267
+ --color-success-text: var(--success-text);
268
+ --color-warning: var(--warning);
269
+ --color-warning-foreground: var(--warning-foreground);
270
+ --color-warning-subtle: var(--warning-subtle);
271
+ --color-warning-text: var(--warning-text);
272
+ --color-info: var(--info);
273
+ --color-info-foreground: var(--info-foreground);
274
+ --color-info-subtle: var(--info-subtle);
275
+ --color-info-text: var(--info-text);
276
+ --color-overlay: var(--overlay);
277
+ --color-border: var(--border);
278
+ --color-input: var(--input);
279
+ --color-ring: var(--ring);
280
+ --color-chart-1: var(--chart-1);
281
+ --color-chart-2: var(--chart-2);
282
+ --color-chart-3: var(--chart-3);
283
+ --color-chart-4: var(--chart-4);
284
+ --color-chart-5: var(--chart-5);
285
+ --color-chart-6: var(--chart-6);
286
+ --color-chart-7: var(--chart-7);
287
+ --color-chart-8: var(--chart-8);
288
+ --color-brand: var(--brand);
289
+ --color-sidebar: var(--sidebar);
290
+ --color-sidebar-foreground: var(--sidebar-foreground);
291
+ --color-sidebar-primary: var(--sidebar-primary);
292
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
293
+ --color-sidebar-accent: var(--sidebar-accent);
294
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
295
+ --color-sidebar-border: var(--sidebar-border);
296
+ --color-sidebar-ring: var(--sidebar-ring);
297
+ --color-destructive-hover: var(--destructive-hover);
298
+ --color-destructive-active: var(--destructive-active);
299
+ --color-destructive-subtle-hover: var(--destructive-subtle-hover);
300
+ --color-success-hover: var(--success-hover);
301
+ --color-success-active: var(--success-active);
302
+ --color-success-subtle-hover: var(--success-subtle-hover);
303
+ --color-warning-hover: var(--warning-hover);
304
+ --color-warning-active: var(--warning-active);
305
+ --color-warning-subtle-hover: var(--warning-subtle-hover);
306
+ --color-info-hover: var(--info-hover);
307
+ --color-info-active: var(--info-active);
308
+ --color-info-subtle-hover: var(--info-subtle-hover);
309
+ /* text-* remap — utilities resolve through the scoped --type-* binding (CX-6) */
310
+ --text-xs: var(--type-xs);
311
+ --text-xs--line-height: var(--type-xs--line-height);
312
+ --text-sm: var(--type-sm);
313
+ --text-sm--line-height: var(--type-sm--line-height);
314
+ --text-base: var(--type-base);
315
+ --text-base--line-height: var(--type-base--line-height);
316
+ --text-lg: var(--type-lg);
317
+ --text-lg--line-height: var(--type-lg--line-height);
318
+ --text-xl: var(--type-xl);
319
+ --text-xl--line-height: var(--type-xl--line-height);
320
+ --text-2xl: var(--type-2xl);
321
+ --text-2xl--line-height: var(--type-2xl--line-height);
322
+ --text-3xl: var(--type-3xl);
323
+ --text-3xl--line-height: var(--type-3xl--line-height);
324
+ --radius-xs: var(--radius-xs);
325
+ --radius-sharp: var(--radius-sharp);
326
+ --radius-sm: var(--radius-sm);
327
+ --radius-md: var(--radius-md);
328
+ --radius-lg: var(--radius-lg);
329
+ --shadow-overlay: var(--shadow-overlay);
330
+ --text-display-sm: 2rem;
331
+ --text-display-sm--line-height: 2.25rem;
332
+ --text-display-sm--font-weight: 400;
333
+ --text-display-sm--letter-spacing: -0.04em;
334
+ --text-display-md: 2.5rem;
335
+ --text-display-md--line-height: 2.75rem;
336
+ --text-display-md--font-weight: 400;
337
+ --text-display-md--letter-spacing: -0.045em;
338
+ --text-display-lg: 3.5rem;
339
+ --text-display-lg--line-height: 3.75rem;
340
+ --text-display-lg--font-weight: 400;
341
+ --text-display-lg--letter-spacing: -0.05em;
342
+ --text-display-xl: 4.5rem;
343
+ --text-display-xl--line-height: 4.75rem;
344
+ --text-display-xl--font-weight: 400;
345
+ --text-display-xl--letter-spacing: -0.06em;
346
+ --text-h1: 1.5rem;
347
+ --text-h1--line-height: 2rem;
348
+ --text-h1--font-weight: 400;
349
+ --text-h1--letter-spacing: -0.02em;
350
+ --text-h2: 1.25rem;
351
+ --text-h2--line-height: 1.75rem;
352
+ --text-h2--font-weight: 400;
353
+ --text-h2--letter-spacing: -0.015em;
354
+ --text-h3: 1.125rem;
355
+ --text-h3--line-height: 1.5rem;
356
+ --text-h3--font-weight: 400;
357
+ --text-h3--letter-spacing: -0.01em;
358
+ --text-h4: 1rem;
359
+ --text-h4--line-height: 1.375rem;
360
+ --text-h4--font-weight: 500;
361
+ --text-label: 0.875rem;
362
+ --text-label--line-height: 1.25rem;
363
+ --text-label--font-weight: 500;
364
+ --text-label-sm: 0.75rem;
365
+ --text-label-sm--line-height: 1rem;
366
+ --text-label-sm--font-weight: 500;
367
+ --text-code: 0.8125rem;
368
+ --text-code--line-height: 1.25rem;
369
+ --text-code--font-weight: 400;
370
+ --text-code-sm: 0.75rem;
371
+ --text-code-sm--line-height: 1rem;
372
+ --text-code-sm--font-weight: 400;
373
+ --text-mono-label: 0.75rem;
374
+ --text-mono-label--line-height: 1rem;
375
+ --text-mono-label--font-weight: 400;
376
+ --text-mono-label--letter-spacing: 0.05em;
377
+ --font-sans: var(--font-family-sans);
378
+ --font-mono: var(--font-family-mono);
379
+ --font-serif: var(--font-family-serif);
380
+ --ease-standard: var(--motion-ease-standard);
381
+ --ease-emphasized: var(--motion-ease-emphasized);
382
+ --ease-exit: var(--motion-ease-exit);
383
+ --ease-spring: var(--motion-ease-spring);
384
+ --blur-motion: var(--motion-blur);
385
+ --transition-duration-fast: var(--duration-fast);
386
+ --transition-duration-base: var(--duration-base);
387
+ --transition-duration-slow: var(--duration-slow);
388
+ }