@vegastack/design-tokens 0.1.0 → 0.4.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/theme.css CHANGED
@@ -5,43 +5,49 @@
5
5
  */
6
6
 
7
7
  :root {
8
+ color-scheme: light;
8
9
  --background: oklch(0.994 0.002 75);
9
10
  --foreground: oklch(0.145 0.003 75);
10
- --card: oklch(0.985 0.003 75);
11
+ --card: oklch(0.994 0.002 75); /** Light cards are PAGE-COLOURED and separated by the alpha hairline alone (surface-ladder decision 2026-09-07, P1): no reference system lifts or sinks a light card. Dark keeps the one-step lift (neutral.900). */
11
12
  --card-foreground: oklch(0.145 0.003 75);
12
- --popover: oklch(0.994 0.002 75);
13
+ --popover: oklch(0.994 0.002 75); /** Every floating surface is the card surface + shadow-overlay; never a lighter or darker rung of its own. */
13
14
  --popover-foreground: oklch(0.145 0.003 75);
15
+ --surface-1: oklch(0.97 0.003 75); /** Surface ladder rung 1 — the REST fill of a filled control (secondary/soft button, kbd, chip, segmented rail, tab-list pill) and the sunken well (code block, skeleton, disabled field, slider/progress track). `secondary` and `muted` are aliases of this rung. */
16
+ --surface-2: oklch(0.945 0.003 75); /** Surface ladder rung 2 — the HOVER step: a transparent row/item/ghost control hovers to it, a rung-1 control hovers to it. `accent` and `sidebar-accent` are aliases. Alpha twin: bg-foreground/(--alpha-hover). */
17
+ --surface-3: oklch(0.922 0.003 75); /** Surface ladder rung 3 — the PRESSED / SELECTED step (active:, data-selected, the active sidebar row, the switch off-track). Alpha twin: bg-foreground/(--alpha-pressed). */
14
18
  --primary: oklch(0.353 0.003 75);
15
19
  --primary-foreground: oklch(0.985 0.003 75);
16
20
  --primary-hover: oklch(0.269 0.003 75);
17
21
  --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
+ --secondary: oklch(0.97 0.003 75); /** ALIAS of surface-1 (kept so shadcn-shaped code keeps compiling). Never retune independently. */
23
+ --secondary-foreground: oklch(0.145 0.003 75); /** ALIAS of foreground — one ink on every neutral rung. */
24
+ --muted: oklch(0.97 0.003 75); /** ALIAS of surface-1 (shadcn name). muted-foreground stays a real text role. */
22
25
  --muted-foreground: oklch(0.439 0.003 75);
23
26
  --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);
27
+ --accent: oklch(0.945 0.003 75); /** ALIAS of surface-2, the hover/highlight rung (shadcn's `accent` — a NEUTRAL, never a hue). Menu/select/command `data-highlighted` rides on it. */
28
+ --accent-foreground: oklch(0.145 0.003 75); /** ALIAS of foreground. */
26
29
  --destructive: oklch(0.505 0.213 27.52);
27
30
  --destructive-foreground: oklch(0.985 0.003 75);
28
31
  --destructive-subtle: oklch(0.949 0.022 24);
29
- --destructive-text: oklch(0.521 0.2 25);
32
+ --destructive-text: oklch(0.496 0.2 25); /** Page-readable red ink (was red.650, L 0.521). Re-tuned -0.025 L on 2026-09-07 so the soft PRESSED rung (`destructive-subtle-active`, fill @12% over subtle) still clears 4.5:1 — at the old ink the soft family sat at the AA edge on hover (4.60:1) and had no room for a pressed step. Every other pair only gains contrast. */
33
+ --destructive-border: oklch(0.505 0.213 27.52); /** Invalid-state border ink, composited at --alpha-tint-border. A DEDICATED role because the fill hue cannot serve both: on the dark ground, destructive at 70% measures 1.92:1, far under the 3:1 WCAG 1.4.11 floor for a non-text UI indicator, and lightening `destructive` itself would drop destructive-foreground on the solid button below 4.5:1. Light keeps the fill hue (4.24:1); dark re-grounds to red.400 (4.00:1). */
30
34
  --success: oklch(0.5 0.16 150);
31
35
  --success-foreground: oklch(0.985 0.003 75);
32
36
  --success-subtle: oklch(0.951 0.051 150);
33
- --success-text: oklch(0.5 0.13 150);
37
+ --success-text: oklch(0.48 0.13 150); /** Page-readable green ink (was green.650, L 0.5); -0.02 L for the soft pressed rung — see destructive-text. */
34
38
  --warning: oklch(0.52 0.145 52);
35
39
  --warning-foreground: oklch(0.985 0.003 75);
36
40
  --warning-subtle: oklch(0.96 0.019 42);
37
- --warning-text: oklch(0.52 0.139 42);
41
+ --warning-text: oklch(0.505 0.139 42); /** Page-readable amber ink (was amber.650, L 0.52); -0.015 L for the soft pressed rung — see destructive-text. */
38
42
  --info: oklch(0.531 0.182 256);
39
43
  --info-foreground: oklch(0.985 0.003 75);
40
44
  --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
+ --info-text: oklch(0.5 0.171 256); /** Link / informational blue ink (was blue.650, L 0.52); -0.02 L for the soft pressed rung — see destructive-text. */
46
+ --overlay: oklch(0.13 0.002 75 / 0.28); /** Modal scrim — an alpha-composite literal (a translucent wash has no primitive step; alpha is intrinsic to the role). Theme-split: the dark scrim is deeper. */
47
+ --media-scrim: oklch(0.13 0.002 75 / 0.6); /** THEME-INVARIANT media chrome scrim (B4-01): the gradient/backdrop behind controls laid over video or imagery. Always a warm-black alpha, never a theme token, so the chrome reads dark-scrim + light-ink in both themes (`primary` flips with the theme and inverted the chrome in dark). TEXT IS PERMITTED on this scrim: media-foreground clears 5.2:1 on it over a white worst-case backdrop, and tooling/contrast-check.mjs gates the pair at the AA TEXT floor (4.5:1), not the 3:1 non-text floor — so a retune that thins this scrim under AA fails the build rather than silently demoting its labels. */
48
+ --media-scrim-strong: oklch(0.13 0.002 75 / 0.8); /** Theme-invariant strong scrim for opaque media pills (volume popover, time badge) — 11:1 for media-foreground over a white worst case. Use it for any block of media text that needs headroom beyond the soft scrim's ~5.2:1, and for text over unusually bright or busy frames. */
49
+ --media-foreground: oklch(0.985 0.003 75); /** Theme-invariant media chrome ink: the warm off-white used for every icon, label and track drawn over media-scrim or media-scrim-strong. Labels are allowed on EITHER scrim — both are gated at the AA text floor (4.5:1) against this ink over the white worst case. Not overridden in dark on purpose. */
50
+ --input: oklch(0.145 0.003 75 / 0.08); /** ALIAS of border (the alpha hairline). `border` itself is DERIVED by the SD preprocessor: foreground at --alpha-border (D14) so one hairline survives on page, card, well and dark band alike. */
45
51
  --ring: oklch(0.353 0.003 75);
46
52
  --chart-1: oklch(0.546 0.245 262.88);
47
53
  --chart-2: oklch(0.6 0.118 184.7);
@@ -51,14 +57,46 @@
51
57
  --chart-6: oklch(0.505 0.213 27.52);
52
58
  --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
59
  --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);
60
+ --chart-single: oklch(0.145 0.003 75); /** Single-series chart ink (D29): one series is drawn in foreground ink; the categorical chart-1…8 hues start at two series. */
61
+ --brand: oklch(0.6 0.17 148); /** The phosphor-green brand accent, LIGHT half (theme-split per CX-9): MARKER roles (live/AI-state dot, sparkline endpoint, eyebrow highlight, terminal prompt glyph) plus the `cta` Button's faint wash and its accent outline — the one sanctioned button, D17/D18. 3.5:1 on card/background — meaningful glyphs pass WCAG 1.4.11, and it is NOT a text ink: brand LABELS take `brand-text`. Never a headline colour, a full-strength surface, or a decorative wash beyond one radial. */
62
+ --brand-text: oklch(0.46 0.17 148); /** The PAGE-READABLE brand ink, LIGHT half — the same role every chromatic family ships as `<family>-text`. `brand` itself is a 3.5:1 marker and fails WCAG 1.4.3 as a label (measured 3.41:1 for the `cta` Button's mono label over its own faint wash, 2026-09-09), so any brand-coloured TEXT reads through this token instead. Gated at 4.5:1 by contrast-check over background/card/popover/surface-1–3 and over the brand wash at alpha-surface-faint/hover/pressed. */
63
+ --tag-blue: oklch(0.6 0.16 256); /** Tag palette (Attio-teardown Wave 1): 10 chromatic hues x base/subtle/text mirroring the family/family-subtle/family-text shape. base = dots/accents (>=3:1 non-text vs background), subtle = chip fill, text = chip text (>=4.5:1 on subtle AND page). Neutral tags use muted/muted-foreground. AA-validated fail-closed in contrast-check.mjs. */
64
+ --tag-blue-subtle: oklch(0.955 0.02 256);
65
+ --tag-blue-text: oklch(0.51 0.15 256);
66
+ --tag-cyan: oklch(0.6 0.11 226);
67
+ --tag-cyan-subtle: oklch(0.955 0.028 226);
68
+ --tag-cyan-text: oklch(0.51 0.09 226);
69
+ --tag-green: oklch(0.6 0.16 150);
70
+ --tag-green-subtle: oklch(0.955 0.028 150);
71
+ --tag-green-text: oklch(0.51 0.14 150);
72
+ --tag-lime: oklch(0.6 0.13 117);
73
+ --tag-lime-subtle: oklch(0.955 0.028 117);
74
+ --tag-lime-text: oklch(0.51 0.11 117);
75
+ --tag-yellow: oklch(0.6 0.12 86);
76
+ --tag-yellow-subtle: oklch(0.955 0.028 86);
77
+ --tag-yellow-text: oklch(0.51 0.1 86);
78
+ --tag-orange: oklch(0.6 0.15 52);
79
+ --tag-orange-subtle: oklch(0.955 0.02 52);
80
+ --tag-orange-text: oklch(0.51 0.13 52);
81
+ --tag-red: oklch(0.6 0.16 25);
82
+ --tag-red-subtle: oklch(0.955 0.02 25);
83
+ --tag-red-text: oklch(0.51 0.15 25);
84
+ --tag-pink: oklch(0.6 0.16 356);
85
+ --tag-pink-subtle: oklch(0.955 0.02 356);
86
+ --tag-pink-text: oklch(0.51 0.15 356);
87
+ --tag-magenta: oklch(0.6 0.16 323);
88
+ --tag-magenta-subtle: oklch(0.955 0.028 323);
89
+ --tag-magenta-text: oklch(0.51 0.15 323);
90
+ --tag-purple: oklch(0.6 0.16 295);
91
+ --tag-purple-subtle: oklch(0.955 0.02 295);
92
+ --tag-purple-text: oklch(0.51 0.15 295);
93
+ --sidebar: oklch(0.994 0.002 75); /** The sidebar-* family is ALIASES ONLY (B6-01): the rail is a card surface on the ladder, not a second palette. Names kept for shadcn-shaped code. */
94
+ --sidebar-foreground: oklch(0.145 0.003 75);
95
+ --sidebar-primary: oklch(0.353 0.003 75);
58
96
  --sidebar-primary-foreground: oklch(0.985 0.003 75);
59
- --sidebar-accent: oklch(0.955 0.003 75);
97
+ --sidebar-accent: oklch(0.945 0.003 75); /** ALIAS of surface-2 — the rail's hover rung; the active row sits one rung higher on surface-3 so active+hover still moves (SP-06). */
60
98
  --sidebar-accent-foreground: oklch(0.145 0.003 75);
61
- --sidebar-border: oklch(0.922 0.003 75);
99
+ --sidebar-border: oklch(0.145 0.003 75 / 0.08);
62
100
  --sidebar-ring: oklch(0.353 0.003 75);
63
101
  --radius: 0.75rem;
64
102
  --radius-xs: 0.125rem; /** Micro radius — caret/arrow triangles and other sub-control geometry (was a silent Tailwind fallback, register P1-10). */
@@ -77,33 +115,39 @@
77
115
  --icon-feature: 1.5rem; /** 24px icon — feature/empty-state glyphs (design.md 'feature'). */
78
116
  --sidebar-width: 15rem; /** Expanded sidebar rail width (was a JS constant invisible to design-lint, register P2-13). */
79
117
  --sidebar-width-icon: 3rem; /** Collapsed icon-only rail width. */
118
+ --sidebar-width-mobile: 18rem; /** Width of the sidebar when it renders as an off-canvas sheet below the md breakpoint (was an inline `18rem` fallback, B6-08). */
119
+ --layout-header-height: 3.5rem; /** 56px app-shell header band (was a raw `h-14`, B6-08). Sticky/fixed content below the header offsets by this. */
120
+ --layout-overlay-max-height: calc(100dvh - 16rem); /** The tallest a scrolling overlay body (Command list, Board column, ShortcutOverlay) may grow: the dynamic viewport minus a 16rem chrome allowance. DTCG 2025.10 has no calc expression type, so this dimension is authored as the CSS string it resolves to and passed through verbatim (the same precedent as the `easing` linear() token). */
121
+ --panel-width-sm: 14rem; /** 224px floating panel (compact popover, small menu, single-value date trigger). */
122
+ --panel-width-md: 18rem; /** 288px floating panel — the default Popover, EmojiPicker, checklist card, range date trigger. */
123
+ --panel-width-lg: 20rem; /** 320px floating panel (rich HoverCard previews). */
80
124
  --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);
125
+ --effect-blur-glass: 8px; /** Backdrop blur for chrome that floats over content (the Attachment upload veil). The Button `glass` variant it was introduced for was deleted 2026-09-07 (audit D16). */
81
126
  --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). */
127
+ --z-overlay: 50; /** The 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 are the ONE surface above it, on their own `z-toast` band. */
128
+ --z-toast: 60; /** The toast band, one step above `z-overlay`. A toast is the only surface that must outrank a modal REGARDLESS of mount order — the viewport mounts with the app provider, so DOM order would otherwise put every later-opened dialog on top of it. Within the band the stack counts DOWN from this value by `--toast-index`, so the frontmost toast is the highest. Nothing else may claim this band. */
83
129
  --opacity-dim: 50%; /** Element opacity for disabled controls and dimmed affordances (outside-month days, decorative chevrons). */
84
130
  --opacity-hint-soft: 60%; /** Element opacity for hover-revealed hints (e.g. sort affordance on row hover). */
85
131
  --opacity-hint: 70%; /** Element opacity for resting secondary controls that reach 100% on hover (e.g. alert close). */
86
132
  --opacity-track: 25%; /** Element opacity of the circular progress track ring. */
133
+ --alpha-hover: 7%; /** The alpha twin of surface-2: `bg-<ink>/(--alpha-hover)` composites the hover rung onto ANY backdrop (a kbd inside a hovered row, a chip on a well, a control over media). foreground at 7% over the page measures L 0.943 light / 0.267 dark over card — within 0.003 of the opaque rung. Theme-invariant. */
134
+ --alpha-pressed: 10%; /** The alpha twin of surface-3 (pressed/selected): foreground at 10% measures L 0.921 light / 0.292 dark over card. Theme-invariant. */
135
+ --alpha-border: 8%; /** The hairline alpha (D14): `border` is DERIVED as foreground at this alpha, so one hairline reads on page, card, well and dark band. 8% light (L 0.936, Geist gray-400 territory) / 14% dark (L 0.325 over card). */
87
136
  --alpha-tint-border: 70%; /** Border tint for focus (ring) and error (destructive) borders — design.md's ring/70 pattern. */
88
137
  --alpha-outline-border: 50%; /** Resting border of the outline button family (border-<family>). */
89
138
  --alpha-border-subtle: 20%; /** Alert variant border tint (border-<family>). */
90
- --alpha-border-soft: 30%; /** Toast (sonner) status border tint (border-<family>). */
139
+ --alpha-border-soft: 30%; /** The softer of the two border-tint steps. Introduced for the sonner toast surface; since the Base UI Toast migration (O2) the toast tint uses `alpha-border-subtle` like Alert, so this step currently has NO in-repo caller. Kept because it is published token surface — retiring it is a token-batch decision, not a component one. */
91
140
  --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
141
  --alpha-ink-tint: 10%; /** Neutral pressed/hover ink tint (bg-foreground) — toggle pressed, chip remove hover. */
94
142
  --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
143
  --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
144
  --alpha-wash-faint: 40%; /** Faint neutral wash (bg-muted) — rich-text toolbar. */
101
145
  --alpha-wash: 50%; /** Neutral wash (bg-muted) — card/table footers, ghost dark hover. */
102
146
  --alpha-wash-strong: 60%; /** Stronger neutral wash (bg-muted) — line-tab hover. */
103
147
  --alpha-backdrop-soft: 60%; /** Translucent surface backdrop (bg-background) — pill tab list. */
104
148
  --alpha-glass: 90%; /** Glass button surface (bg-background + backdrop-blur). */
105
149
  --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. */
150
+ --alpha-link-hover: 88%; /** Hovered link text dim, applied to a `<family>-text` ink in rendered rich text and on the `link` Button. 88%, not 80%: at 80% the light composites measured 4.03–4.11:1 for success/info/warning (2026-09-09) — a hover state that drops the link below WCAG 1.4.3 AA. contrast-check gates the composite, not just the solid ink. */
107
151
  --alpha-outline-soft: 50%; /** Soft neutral outline/ring (base outline default, date-picker today ring). */
108
152
  --font-family-sans: Geist, sans-serif;
109
153
  --font-family-mono: 'Geist Mono', monospace;
@@ -113,23 +157,29 @@
113
157
  --duration-fast: 150ms;
114
158
  --duration-base: 200ms;
115
159
  --duration-slow: 300ms;
160
+ --duration-indeterminate: 1200ms; /** 1200ms — the loop cadence of the ONE sanctioned looping utility, `motion-indeterminate` (an indeterminate Progress sweep; audit M-06). Not an interaction duration: interactions use fast/base/slow. */
116
161
  --motion-ease-standard: cubic-bezier(0.2, 0, 0, 1);
117
162
  --motion-ease-emphasized: cubic-bezier(0.3, 0, 0, 1);
118
163
  --motion-ease-exit: cubic-bezier(0.4, 0, 1, 1);
119
164
  --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
165
  --motion-blur: 2px; /** Motion-blur amount for blur-fade entrances (Phase M text/element reveals). */
166
+ --border: oklch(0.145 0.003 75 / 0.08); /** DERIVED: foreground at 8% (alpha-border) — the one alpha hairline (D14). */
121
167
  --destructive-hover: oklch(0.455 0.213 27.52); /** DERIVED: destructive fill at L-0.05 (hover step). */
122
168
  --destructive-active: oklch(0.415 0.213 27.52); /** DERIVED: destructive fill at L-0.09 (active step). */
123
169
  --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). */
170
+ --destructive-subtle-active: oklch(0.883 0.046 19.3); /** DERIVED: destructive fill @12% composited over destructive-subtle (soft-pressed surface, AA-gated against destructive-text). */
124
171
  --success-hover: oklch(0.45 0.16 150); /** DERIVED: success fill at L-0.05 (hover step). */
125
172
  --success-active: oklch(0.41 0.16 150); /** DERIVED: success fill at L-0.09 (active step). */
126
173
  --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). */
174
+ --success-subtle-active: oklch(0.896 0.065 151.7); /** DERIVED: success fill @12% composited over success-subtle (soft-pressed surface, AA-gated against success-text). */
127
175
  --warning-hover: oklch(0.47 0.145 52); /** DERIVED: warning fill at L-0.05 (hover step). */
128
176
  --warning-active: oklch(0.43 0.145 52); /** DERIVED: warning fill at L-0.09 (active step). */
129
177
  --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). */
178
+ --warning-subtle-active: oklch(0.906 0.034 51.5); /** DERIVED: warning fill @12% composited over warning-subtle (soft-pressed surface, AA-gated against warning-text). */
130
179
  --info-hover: oklch(0.481 0.182 256); /** DERIVED: info fill at L-0.05 (hover step). */
131
180
  --info-active: oklch(0.441 0.182 256); /** DERIVED: info fill at L-0.09 (active step). */
132
181
  --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). */
182
+ --info-subtle-active: oklch(0.906 0.038 250.5); /** DERIVED: info fill @12% composited over info-subtle (soft-pressed surface, AA-gated against info-text). */
133
183
  }
134
184
 
135
185
  /**
@@ -137,6 +187,7 @@
137
187
  */
138
188
 
139
189
  .dark {
190
+ color-scheme: dark;
140
191
  --background: oklch(0.175 0.003 75);
141
192
  --foreground: oklch(0.922 0.003 75);
142
193
  --card: oklch(0.205 0.003 75);
@@ -147,25 +198,27 @@
147
198
  --primary-foreground: oklch(0.145 0.003 75);
148
199
  --primary-hover: oklch(0.97 0.003 75);
149
200
  --primary-active: oklch(0.994 0.002 75);
150
- --track: oklch(0.439 0.003 75);
151
- --secondary: oklch(0.269 0.003 75);
201
+ --surface-1: oklch(0.236 0.003 75); /** Dark ladder: card 0.205 -> surface-1 0.236 -> surface-2 0.269 -> surface-3 0.29 (lighter = higher, ~0.03 L per rung, the Radix/Linear dark step). */
202
+ --surface-2: oklch(0.269 0.003 75);
203
+ --surface-3: oklch(0.29 0.003 75);
204
+ --secondary: oklch(0.236 0.003 75);
152
205
  --secondary-foreground: oklch(0.922 0.003 75);
153
- --muted: oklch(0.269 0.003 75);
206
+ --muted: oklch(0.236 0.003 75);
154
207
  --muted-foreground: oklch(0.66 0.003 75);
155
208
  --muted-foreground-faint: oklch(0.559 0.003 75);
156
209
  --accent: oklch(0.269 0.003 75);
157
- --accent-foreground: oklch(0.967 0.003 75);
210
+ --accent-foreground: oklch(0.922 0.003 75);
158
211
  --destructive-subtle: oklch(0.275 0.07 25);
159
- --destructive-text: oklch(0.72 0.16 25);
212
+ --destructive-text: oklch(0.74 0.16 25); /** Dark red ink (was red.400, L 0.72); +0.02 L so the soft pressed rung (fill @40% over subtle) clears 4.5:1 — see the light destructive-text note. */
213
+ --destructive-border: oklch(0.72 0.16 25); /** Dark-ground invalid-state border ink. red.400 at --alpha-tint-border measures 4.00:1 on background and 3.86:1 on card, clearing the 3:1 WCAG 1.4.11 floor the shared destructive fill misses (1.92:1). */
160
214
  --success-subtle: oklch(0.276 0.061 150);
161
- --success-text: oklch(0.72 0.17 150);
215
+ --success-text: oklch(0.74 0.17 150); /** Dark green ink (was green.500, L 0.72); +0.02 L for the soft pressed rung. */
162
216
  --warning-subtle: oklch(0.28 0.069 42);
163
217
  --warning-text: oklch(0.769 0.188 70.08);
164
218
  --info-subtle: oklch(0.275 0.059 255);
165
- --info-text: oklch(0.72 0.13 256);
219
+ --info-text: oklch(0.76 0.13 256); /** Dark link / informational blue ink (was blue.400, L 0.72); +0.04 L for the soft pressed rung — blue had the least headroom (4.50:1 at hover). */
166
220
  --overlay: oklch(0 0 0 / 0.55);
167
- --border: oklch(0.269 0.003 75);
168
- --input: oklch(0.269 0.003 75);
221
+ --input: oklch(0.922 0.003 75 / 0.14);
169
222
  --ring: oklch(0.922 0.003 75);
170
223
  --chart-1: oklch(0.623 0.214 259.81);
171
224
  --chart-2: oklch(0.696 0.17 162.48);
@@ -175,21 +228,158 @@
175
228
  --chart-6: oklch(0.69 0.21 25);
176
229
  --chart-7: oklch(0.72 0.15 103.9);
177
230
  --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);
231
+ --chart-single: oklch(0.922 0.003 75); /** Repeated here on purpose: an alias is resolved per run, so a light-only alias would leak the LIGHT ink into `.dark` through the cascade (the contrast gate caught exactly that). */
232
+ --tag-blue: oklch(0.72 0.14 256);
233
+ --tag-blue-subtle: oklch(0.275 0.05 256);
234
+ --tag-blue-text: oklch(0.75 0.13 256);
235
+ --tag-cyan: oklch(0.72 0.13 226);
236
+ --tag-cyan-subtle: oklch(0.275 0.05 226);
237
+ --tag-cyan-text: oklch(0.75 0.13 226);
238
+ --tag-green: oklch(0.72 0.15 150);
239
+ --tag-green-subtle: oklch(0.275 0.05 150);
240
+ --tag-green-text: oklch(0.75 0.13 150);
241
+ --tag-lime: oklch(0.72 0.15 117);
242
+ --tag-lime-subtle: oklch(0.275 0.05 117);
243
+ --tag-lime-text: oklch(0.75 0.13 117);
244
+ --tag-yellow: oklch(0.72 0.14 86);
245
+ --tag-yellow-subtle: oklch(0.275 0.05 86);
246
+ --tag-yellow-text: oklch(0.75 0.13 86);
247
+ --tag-orange: oklch(0.72 0.15 52);
248
+ --tag-orange-subtle: oklch(0.275 0.05 52);
249
+ --tag-orange-text: oklch(0.75 0.13 52);
250
+ --tag-red: oklch(0.72 0.15 25);
251
+ --tag-red-subtle: oklch(0.275 0.05 25);
252
+ --tag-red-text: oklch(0.75 0.13 25);
253
+ --tag-pink: oklch(0.72 0.15 356);
254
+ --tag-pink-subtle: oklch(0.275 0.05 356);
255
+ --tag-pink-text: oklch(0.75 0.13 356);
256
+ --tag-magenta: oklch(0.72 0.15 323);
257
+ --tag-magenta-subtle: oklch(0.275 0.05 323);
258
+ --tag-magenta-text: oklch(0.75 0.13 323);
259
+ --tag-purple: oklch(0.72 0.15 295);
260
+ --tag-purple-subtle: oklch(0.275 0.05 295);
261
+ --tag-purple-text: oklch(0.75 0.13 295);
262
+ --sidebar: oklch(0.205 0.003 75);
263
+ --sidebar-foreground: oklch(0.922 0.003 75);
180
264
  --sidebar-primary: oklch(0.922 0.003 75);
181
265
  --sidebar-primary-foreground: oklch(0.145 0.003 75);
182
- --sidebar-accent: oklch(0.205 0.003 75);
266
+ --sidebar-accent: oklch(0.269 0.003 75);
183
267
  --sidebar-accent-foreground: oklch(0.922 0.003 75);
184
- --sidebar-border: oklch(0.269 0.003 75);
268
+ --sidebar-border: oklch(0.922 0.003 75 / 0.14);
185
269
  --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. */
270
+ --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 plus the `cta` Button's wash/outline. */
271
+ --brand-text: oklch(0.86 0.21 148); /** The page-readable brand ink, DARK half. On the dark and marketing grounds the marker value already measures 12.2:1 as a label, so brand-text and brand carry the SAME value here — the split exists because the light half cannot. */
272
+ --alpha-border: 14%; /** Dark half of the hairline alpha (D14): near-white ink needs more alpha than near-black to read as a line — foreground at 14% over card measures L 0.325, over the page 0.302. */
273
+ --shadow-overlay: 0 8px 28px -6px oklch(0 0 0 / 0.48), 0 2px 8px -2px oklch(0 0 0 / 0.4); /** DARK overlay shadow, strengthened (Wave 1 — Attio-calibrated): the old single 24px layer was near-invisible on the dark canvas; this two-layer ramp restores the floating cue while staying below Attio's 88px maximal ramp. */
274
+ --border: oklch(0.922 0.003 75 / 0.14); /** DERIVED: foreground at 14% (alpha-border) — the one alpha hairline (D14). */
189
275
  --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). */
276
+ --destructive-subtle-active: oklch(0.364 0.137 26.9); /** DERIVED: destructive fill @40% composited over destructive-subtle (soft-pressed surface, AA-gated against destructive-text). */
190
277
  --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). */
278
+ --success-subtle-active: oklch(0.371 0.101 148.5); /** DERIVED: success fill @40% composited over success-subtle (soft-pressed surface, AA-gated against success-text). */
191
279
  --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). */
280
+ --warning-subtle-active: oklch(0.381 0.1 47.3); /** DERIVED: warning fill @40% composited over warning-subtle (soft-pressed surface, AA-gated against warning-text). */
192
281
  --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). */
282
+ --info-subtle-active: oklch(0.38 0.114 254.5); /** DERIVED: info fill @40% composited over info-subtle (soft-pressed surface, AA-gated against info-text). */
283
+ }
284
+
285
+ /**
286
+ * Do not edit directly, this file was auto-generated.
287
+ */
288
+
289
+ .vs-marketing {
290
+ color-scheme: dark;
291
+ --background: oklch(0.175 0.003 75);
292
+ --foreground: oklch(0.922 0.003 75);
293
+ --card: oklch(0.205 0.003 75);
294
+ --card-foreground: oklch(0.922 0.003 75);
295
+ --popover: oklch(0.205 0.003 75);
296
+ --popover-foreground: oklch(0.922 0.003 75);
297
+ --primary: oklch(0.922 0.003 75);
298
+ --primary-foreground: oklch(0.145 0.003 75);
299
+ --primary-hover: oklch(0.97 0.003 75);
300
+ --primary-active: oklch(0.994 0.002 75);
301
+ --surface-1: oklch(0.236 0.003 75); /** Dark ladder: card 0.205 -> surface-1 0.236 -> surface-2 0.269 -> surface-3 0.29 (lighter = higher, ~0.03 L per rung, the Radix/Linear dark step). */
302
+ --surface-2: oklch(0.269 0.003 75);
303
+ --surface-3: oklch(0.29 0.003 75);
304
+ --secondary: oklch(0.236 0.003 75);
305
+ --secondary-foreground: oklch(0.922 0.003 75);
306
+ --muted: oklch(0.236 0.003 75);
307
+ --muted-foreground: oklch(0.66 0.003 75);
308
+ --muted-foreground-faint: oklch(0.559 0.003 75);
309
+ --accent: oklch(0.269 0.003 75);
310
+ --accent-foreground: oklch(0.922 0.003 75);
311
+ --destructive-subtle: oklch(0.275 0.07 25);
312
+ --destructive-text: oklch(0.74 0.16 25); /** Dark red ink (was red.400, L 0.72); +0.02 L so the soft pressed rung (fill @40% over subtle) clears 4.5:1 — see the light destructive-text note. */
313
+ --destructive-border: oklch(0.72 0.16 25); /** Dark-ground invalid-state border ink. red.400 at --alpha-tint-border measures 4.00:1 on background and 3.86:1 on card, clearing the 3:1 WCAG 1.4.11 floor the shared destructive fill misses (1.92:1). */
314
+ --success-subtle: oklch(0.276 0.061 150);
315
+ --success-text: oklch(0.74 0.17 150); /** Dark green ink (was green.500, L 0.72); +0.02 L for the soft pressed rung. */
316
+ --warning-subtle: oklch(0.28 0.069 42);
317
+ --warning-text: oklch(0.769 0.188 70.08);
318
+ --info-subtle: oklch(0.275 0.059 255);
319
+ --info-text: oklch(0.76 0.13 256); /** Dark link / informational blue ink (was blue.400, L 0.72); +0.04 L for the soft pressed rung — blue had the least headroom (4.50:1 at hover). */
320
+ --overlay: oklch(0 0 0 / 0.55);
321
+ --input: oklch(0.922 0.003 75 / 0.14);
322
+ --ring: oklch(0.922 0.003 75);
323
+ --chart-1: oklch(0.623 0.214 259.81);
324
+ --chart-2: oklch(0.696 0.17 162.48);
325
+ --chart-3: oklch(0.769 0.188 70.08);
326
+ --chart-4: oklch(0.75 0.183 55.93);
327
+ --chart-5: oklch(0.645 0.246 16.44);
328
+ --chart-6: oklch(0.69 0.21 25);
329
+ --chart-7: oklch(0.72 0.15 103.9);
330
+ --chart-8: oklch(0.72 0.13 256);
331
+ --chart-single: oklch(0.922 0.003 75); /** Repeated here on purpose: an alias is resolved per run, so a light-only alias would leak the LIGHT ink into `.dark` through the cascade (the contrast gate caught exactly that). */
332
+ --tag-blue: oklch(0.72 0.14 256);
333
+ --tag-blue-subtle: oklch(0.275 0.05 256);
334
+ --tag-blue-text: oklch(0.75 0.13 256);
335
+ --tag-cyan: oklch(0.72 0.13 226);
336
+ --tag-cyan-subtle: oklch(0.275 0.05 226);
337
+ --tag-cyan-text: oklch(0.75 0.13 226);
338
+ --tag-green: oklch(0.72 0.15 150);
339
+ --tag-green-subtle: oklch(0.275 0.05 150);
340
+ --tag-green-text: oklch(0.75 0.13 150);
341
+ --tag-lime: oklch(0.72 0.15 117);
342
+ --tag-lime-subtle: oklch(0.275 0.05 117);
343
+ --tag-lime-text: oklch(0.75 0.13 117);
344
+ --tag-yellow: oklch(0.72 0.14 86);
345
+ --tag-yellow-subtle: oklch(0.275 0.05 86);
346
+ --tag-yellow-text: oklch(0.75 0.13 86);
347
+ --tag-orange: oklch(0.72 0.15 52);
348
+ --tag-orange-subtle: oklch(0.275 0.05 52);
349
+ --tag-orange-text: oklch(0.75 0.13 52);
350
+ --tag-red: oklch(0.72 0.15 25);
351
+ --tag-red-subtle: oklch(0.275 0.05 25);
352
+ --tag-red-text: oklch(0.75 0.13 25);
353
+ --tag-pink: oklch(0.72 0.15 356);
354
+ --tag-pink-subtle: oklch(0.275 0.05 356);
355
+ --tag-pink-text: oklch(0.75 0.13 356);
356
+ --tag-magenta: oklch(0.72 0.15 323);
357
+ --tag-magenta-subtle: oklch(0.275 0.05 323);
358
+ --tag-magenta-text: oklch(0.75 0.13 323);
359
+ --tag-purple: oklch(0.72 0.15 295);
360
+ --tag-purple-subtle: oklch(0.275 0.05 295);
361
+ --tag-purple-text: oklch(0.75 0.13 295);
362
+ --sidebar: oklch(0.205 0.003 75);
363
+ --sidebar-foreground: oklch(0.922 0.003 75);
364
+ --sidebar-primary: oklch(0.922 0.003 75);
365
+ --sidebar-primary-foreground: oklch(0.145 0.003 75);
366
+ --sidebar-accent: oklch(0.269 0.003 75);
367
+ --sidebar-accent-foreground: oklch(0.922 0.003 75);
368
+ --sidebar-border: oklch(0.922 0.003 75 / 0.14);
369
+ --sidebar-ring: oklch(0.922 0.003 75);
370
+ --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 plus the `cta` Button's wash/outline. */
371
+ --brand-text: oklch(0.86 0.21 148); /** The page-readable brand ink, DARK half. On the dark and marketing grounds the marker value already measures 12.2:1 as a label, so brand-text and brand carry the SAME value here — the split exists because the light half cannot. */
372
+ --alpha-border: 14%; /** Dark half of the hairline alpha (D14): near-white ink needs more alpha than near-black to read as a line — foreground at 14% over card measures L 0.325, over the page 0.302. */
373
+ --shadow-overlay: 0 8px 28px -6px oklch(0 0 0 / 0.48), 0 2px 8px -2px oklch(0 0 0 / 0.4); /** DARK overlay shadow, strengthened (Wave 1 — Attio-calibrated): the old single 24px layer was near-invisible on the dark canvas; this two-layer ramp restores the floating cue while staying below Attio's 88px maximal ramp. */
374
+ --border: oklch(0.922 0.003 75 / 0.14); /** DERIVED: foreground at 14% (alpha-border) — the one alpha hairline (D14). */
375
+ --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). */
376
+ --destructive-subtle-active: oklch(0.364 0.137 26.9); /** DERIVED: destructive fill @40% composited over destructive-subtle (soft-pressed surface, AA-gated against destructive-text). */
377
+ --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). */
378
+ --success-subtle-active: oklch(0.371 0.101 148.5); /** DERIVED: success fill @40% composited over success-subtle (soft-pressed surface, AA-gated against success-text). */
379
+ --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). */
380
+ --warning-subtle-active: oklch(0.381 0.1 47.3); /** DERIVED: warning fill @40% composited over warning-subtle (soft-pressed surface, AA-gated against warning-text). */
381
+ --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). */
382
+ --info-subtle-active: oklch(0.38 0.114 254.5); /** DERIVED: info fill @40% composited over info-subtle (soft-pressed surface, AA-gated against info-text). */
193
383
  }
194
384
 
195
385
  /* Two-layer type scale (T1): both ladders + the active binding (product by default). */
@@ -245,11 +435,13 @@
245
435
  --color-card-foreground: var(--card-foreground);
246
436
  --color-popover: var(--popover);
247
437
  --color-popover-foreground: var(--popover-foreground);
438
+ --color-surface-1: var(--surface-1);
439
+ --color-surface-2: var(--surface-2);
440
+ --color-surface-3: var(--surface-3);
248
441
  --color-primary: var(--primary);
249
442
  --color-primary-foreground: var(--primary-foreground);
250
443
  --color-primary-hover: var(--primary-hover);
251
444
  --color-primary-active: var(--primary-active);
252
- --color-track: var(--track);
253
445
  --color-secondary: var(--secondary);
254
446
  --color-secondary-foreground: var(--secondary-foreground);
255
447
  --color-muted: var(--muted);
@@ -261,6 +453,7 @@
261
453
  --color-destructive-foreground: var(--destructive-foreground);
262
454
  --color-destructive-subtle: var(--destructive-subtle);
263
455
  --color-destructive-text: var(--destructive-text);
456
+ --color-destructive-border: var(--destructive-border);
264
457
  --color-success: var(--success);
265
458
  --color-success-foreground: var(--success-foreground);
266
459
  --color-success-subtle: var(--success-subtle);
@@ -274,7 +467,9 @@
274
467
  --color-info-subtle: var(--info-subtle);
275
468
  --color-info-text: var(--info-text);
276
469
  --color-overlay: var(--overlay);
277
- --color-border: var(--border);
470
+ --color-media-scrim: var(--media-scrim);
471
+ --color-media-scrim-strong: var(--media-scrim-strong);
472
+ --color-media-foreground: var(--media-foreground);
278
473
  --color-input: var(--input);
279
474
  --color-ring: var(--ring);
280
475
  --color-chart-1: var(--chart-1);
@@ -285,7 +480,39 @@
285
480
  --color-chart-6: var(--chart-6);
286
481
  --color-chart-7: var(--chart-7);
287
482
  --color-chart-8: var(--chart-8);
483
+ --color-chart-single: var(--chart-single);
288
484
  --color-brand: var(--brand);
485
+ --color-brand-text: var(--brand-text);
486
+ --color-tag-blue: var(--tag-blue);
487
+ --color-tag-blue-subtle: var(--tag-blue-subtle);
488
+ --color-tag-blue-text: var(--tag-blue-text);
489
+ --color-tag-cyan: var(--tag-cyan);
490
+ --color-tag-cyan-subtle: var(--tag-cyan-subtle);
491
+ --color-tag-cyan-text: var(--tag-cyan-text);
492
+ --color-tag-green: var(--tag-green);
493
+ --color-tag-green-subtle: var(--tag-green-subtle);
494
+ --color-tag-green-text: var(--tag-green-text);
495
+ --color-tag-lime: var(--tag-lime);
496
+ --color-tag-lime-subtle: var(--tag-lime-subtle);
497
+ --color-tag-lime-text: var(--tag-lime-text);
498
+ --color-tag-yellow: var(--tag-yellow);
499
+ --color-tag-yellow-subtle: var(--tag-yellow-subtle);
500
+ --color-tag-yellow-text: var(--tag-yellow-text);
501
+ --color-tag-orange: var(--tag-orange);
502
+ --color-tag-orange-subtle: var(--tag-orange-subtle);
503
+ --color-tag-orange-text: var(--tag-orange-text);
504
+ --color-tag-red: var(--tag-red);
505
+ --color-tag-red-subtle: var(--tag-red-subtle);
506
+ --color-tag-red-text: var(--tag-red-text);
507
+ --color-tag-pink: var(--tag-pink);
508
+ --color-tag-pink-subtle: var(--tag-pink-subtle);
509
+ --color-tag-pink-text: var(--tag-pink-text);
510
+ --color-tag-magenta: var(--tag-magenta);
511
+ --color-tag-magenta-subtle: var(--tag-magenta-subtle);
512
+ --color-tag-magenta-text: var(--tag-magenta-text);
513
+ --color-tag-purple: var(--tag-purple);
514
+ --color-tag-purple-subtle: var(--tag-purple-subtle);
515
+ --color-tag-purple-text: var(--tag-purple-text);
289
516
  --color-sidebar: var(--sidebar);
290
517
  --color-sidebar-foreground: var(--sidebar-foreground);
291
518
  --color-sidebar-primary: var(--sidebar-primary);
@@ -294,18 +521,23 @@
294
521
  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
295
522
  --color-sidebar-border: var(--sidebar-border);
296
523
  --color-sidebar-ring: var(--sidebar-ring);
524
+ --color-border: var(--border);
297
525
  --color-destructive-hover: var(--destructive-hover);
298
526
  --color-destructive-active: var(--destructive-active);
299
527
  --color-destructive-subtle-hover: var(--destructive-subtle-hover);
528
+ --color-destructive-subtle-active: var(--destructive-subtle-active);
300
529
  --color-success-hover: var(--success-hover);
301
530
  --color-success-active: var(--success-active);
302
531
  --color-success-subtle-hover: var(--success-subtle-hover);
532
+ --color-success-subtle-active: var(--success-subtle-active);
303
533
  --color-warning-hover: var(--warning-hover);
304
534
  --color-warning-active: var(--warning-active);
305
535
  --color-warning-subtle-hover: var(--warning-subtle-hover);
536
+ --color-warning-subtle-active: var(--warning-subtle-active);
306
537
  --color-info-hover: var(--info-hover);
307
538
  --color-info-active: var(--info-active);
308
539
  --color-info-subtle-hover: var(--info-subtle-hover);
540
+ --color-info-subtle-active: var(--info-subtle-active);
309
541
  /* text-* remap — utilities resolve through the scoped --type-* binding (CX-6) */
310
542
  --text-xs: var(--type-xs);
311
543
  --text-xs--line-height: var(--type-xs--line-height);
@@ -327,6 +559,7 @@
327
559
  --radius-md: var(--radius-md);
328
560
  --radius-lg: var(--radius-lg);
329
561
  --shadow-overlay: var(--shadow-overlay);
562
+ --blur-glass: var(--effect-blur-glass);
330
563
  --text-display-sm: 2rem;
331
564
  --text-display-sm--line-height: 2.25rem;
332
565
  --text-display-sm--font-weight: 400;
@@ -361,9 +594,15 @@
361
594
  --text-label: 0.875rem;
362
595
  --text-label--line-height: 1.25rem;
363
596
  --text-label--font-weight: 500;
597
+ --text-label--letter-spacing: -0.01em;
598
+ --text-strong: 0.875rem;
599
+ --text-strong--line-height: 1.25rem;
600
+ --text-strong--font-weight: 600;
601
+ --text-strong--letter-spacing: -0.01em;
364
602
  --text-label-sm: 0.75rem;
365
603
  --text-label-sm--line-height: 1rem;
366
604
  --text-label-sm--font-weight: 500;
605
+ --text-label-sm--letter-spacing: -0.01em;
367
606
  --text-code: 0.8125rem;
368
607
  --text-code--line-height: 1.25rem;
369
608
  --text-code--font-weight: 400;
@@ -377,6 +616,8 @@
377
616
  --font-sans: var(--font-family-sans);
378
617
  --font-mono: var(--font-family-mono);
379
618
  --font-serif: var(--font-family-serif);
619
+ --font-display: var(--font-family-display);
620
+ --font-pixel: var(--font-family-pixel);
380
621
  --ease-standard: var(--motion-ease-standard);
381
622
  --ease-emphasized: var(--motion-ease-emphasized);
382
623
  --ease-exit: var(--motion-ease-exit);