@nebutra/design-tokens 2.0.0 → 3.0.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/build/css/dark.css +121 -50
- package/build/css/light.css +118 -47
- package/build/css/styles.generated.css +396 -140
- package/build/css/theme-inline.css +75 -8
- package/build/tailwind/dark.preset.cjs +121 -50
- package/build/tailwind/light.preset.cjs +118 -47
- package/build/ts/dark.d.ts +89 -2
- package/build/ts/dark.js +121 -50
- package/build/ts/light.d.ts +89 -3
- package/build/ts/light.js +118 -47
- package/package.json +1 -1
- package/style-dictionary.config.mjs +77 -9
- package/tokens/core.json +367 -17
- package/tokens/themes/dark.json +31 -29
- package/tokens/themes/light.json +26 -25
package/build/ts/dark.d.ts
CHANGED
|
@@ -112,8 +112,93 @@ export const TrackingDisplay: string;
|
|
|
112
112
|
export const TrackingHeading: string;
|
|
113
113
|
/** Body emphasis */
|
|
114
114
|
export const TrackingTight: string;
|
|
115
|
+
/** Uppercase micro-labels. 0.07em is Vercel's measured eyebrow value (0.071em); open tracking keeps small caps legible. */
|
|
116
|
+
export const TrackingLabel: string;
|
|
115
117
|
export const LeadingDisplay: string;
|
|
116
118
|
export const LeadingHeading: string;
|
|
119
|
+
export const Type2xsSize: string;
|
|
120
|
+
export const Type2xsLeading: string;
|
|
121
|
+
export const Type2xsTracking: string;
|
|
122
|
+
export const TypeXsSize: string;
|
|
123
|
+
export const TypeXsLeading: string;
|
|
124
|
+
export const TypeXsTracking: string;
|
|
125
|
+
export const TypeUiSize: string;
|
|
126
|
+
export const TypeUiLeading: string;
|
|
127
|
+
export const TypeUiTracking: string;
|
|
128
|
+
export const TypeSmSize: string;
|
|
129
|
+
export const TypeSmLeading: string;
|
|
130
|
+
export const TypeSmTracking: string;
|
|
131
|
+
export const TypeBaseSize: string;
|
|
132
|
+
export const TypeBaseLeading: string;
|
|
133
|
+
export const TypeBaseTracking: string;
|
|
134
|
+
export const TypeLgSize: string;
|
|
135
|
+
export const TypeLgLeading: string;
|
|
136
|
+
export const TypeLgTracking: string;
|
|
137
|
+
export const TypeXlSize: string;
|
|
138
|
+
export const TypeXlLeading: string;
|
|
139
|
+
export const TypeXlTracking: string;
|
|
140
|
+
export const Type2xlSize: string;
|
|
141
|
+
export const Type2xlLeading: string;
|
|
142
|
+
export const Type2xlTracking: string;
|
|
143
|
+
export const Type3xlSize: string;
|
|
144
|
+
export const Type3xlLeading: string;
|
|
145
|
+
export const Type3xlTracking: string;
|
|
146
|
+
export const Type4xlSize: string;
|
|
147
|
+
export const Type4xlLeading: string;
|
|
148
|
+
export const Type4xlTracking: string;
|
|
149
|
+
export const Type5xlSize: string;
|
|
150
|
+
export const Type5xlLeading: string;
|
|
151
|
+
export const Type5xlTracking: string;
|
|
152
|
+
export const Type6xlSize: string;
|
|
153
|
+
export const Type6xlLeading: string;
|
|
154
|
+
export const Type6xlTracking: string;
|
|
155
|
+
export const Type7xlSize: string;
|
|
156
|
+
export const Type7xlLeading: string;
|
|
157
|
+
export const Type7xlTracking: string;
|
|
158
|
+
export const Type8xlSize: string;
|
|
159
|
+
export const Type8xlLeading: string;
|
|
160
|
+
export const Type8xlTracking: string;
|
|
161
|
+
export const Type9xlSize: string;
|
|
162
|
+
export const Type9xlLeading: string;
|
|
163
|
+
export const Type9xlTracking: string;
|
|
164
|
+
export const TypeDisplaySize: string;
|
|
165
|
+
export const TypeDisplayLeading: string;
|
|
166
|
+
export const TypeDisplayTracking: string;
|
|
167
|
+
export const TypeBodySize: string;
|
|
168
|
+
export const TypeBodyLeading: string;
|
|
169
|
+
export const TypeBodyTracking: string;
|
|
170
|
+
export const TypeLabelSize: string;
|
|
171
|
+
export const TypeLabelLeading: string;
|
|
172
|
+
export const TypeLabelTracking: string;
|
|
173
|
+
export const TypeMetaSize: string;
|
|
174
|
+
export const TypeMetaLeading: string;
|
|
175
|
+
export const TypeMetaTracking: string;
|
|
176
|
+
/** Within a component: an element lifted over its siblings. */
|
|
177
|
+
export const LayerRaised: string;
|
|
178
|
+
/** Sticky headers and table heads. */
|
|
179
|
+
export const LayerSticky: string;
|
|
180
|
+
/** Floating toolbars and canvas chrome anchored to content. */
|
|
181
|
+
export const LayerFloating: string;
|
|
182
|
+
/** App navigation and the shell's top bar. */
|
|
183
|
+
export const LayerNav: string;
|
|
184
|
+
/** Mobile navigation drawers and their toggles. */
|
|
185
|
+
export const LayerDrawer: string;
|
|
186
|
+
/** Page-level banners: cookie consent, announcements. */
|
|
187
|
+
export const LayerBanner: string;
|
|
188
|
+
/** The skip link — above page chrome whenever it is focused. */
|
|
189
|
+
export const LayerSkipLink: string;
|
|
190
|
+
/** App-owned floating panels that are not overlays (locale switcher, search flyouts). */
|
|
191
|
+
export const LayerPanel: string;
|
|
192
|
+
/** Overlay tier. Mirrors overlayZIndex in @nebutra/ui; a test keeps them equal. */
|
|
193
|
+
export const LayerBackdrop: string;
|
|
194
|
+
/** Dialogs and sheets. */
|
|
195
|
+
export const LayerModal: string;
|
|
196
|
+
/** Popovers, menus, selects. */
|
|
197
|
+
export const LayerPopover: string;
|
|
198
|
+
/** Tooltips. */
|
|
199
|
+
export const LayerTooltip: string;
|
|
200
|
+
/** Developer and debug surfaces only — never product UI. */
|
|
201
|
+
export const LayerDevtools: string;
|
|
117
202
|
/** Hairline override — more visible on dark background */
|
|
118
203
|
export const RingHairline: string;
|
|
119
204
|
/** Dark-mode faint overlay (6% white) — inverted from light */
|
|
@@ -234,13 +319,14 @@ export const ScaleCyan11: string;
|
|
|
234
319
|
export const ScaleCyan12: string;
|
|
235
320
|
/** Label ink for the bright fill tier. Absolute near-black, identical in both modes. 10.35:1 on step 9, 11.34:1 on step 10. */
|
|
236
321
|
export const ScaleCyanContrast: string;
|
|
322
|
+
/** House canvas. Light is gray-50 under white cards (two-surface layering, as Vercel #fafafa/#fff); dark is OKLCH L 0.16, inside the near-black band every reference measures (Linear L 0.14, Raycast #040506). */
|
|
237
323
|
export const ShadcnBackground: string;
|
|
238
324
|
export const ShadcnForeground: string;
|
|
239
325
|
export const ShadcnCard: string;
|
|
240
326
|
export const ShadcnCardForeground: string;
|
|
241
327
|
export const ShadcnPopover: string;
|
|
242
328
|
export const ShadcnPopoverForeground: string;
|
|
243
|
-
/**
|
|
329
|
+
/** House action fill = ink, not blue (owner decision 2026-09-24). Every measured reference ships a solid near-black primary (Vercel #171717, Figma #000) and keeps its one saturated hue for a single signal. Blue now lives on --ring (focus, selection) only. */
|
|
244
330
|
export const ShadcnPrimary: string;
|
|
245
331
|
/** White, matching light mode and matching --blue-contrast. It was near-black (222 14% 9%) when --primary was a LIGHT fill at L* 68.3, where dark ink read 6.20:1. Once --primary became a deep fill at L* 55.9 the pairing inverted and measured 3.74:1, below AA — the fill moved and the ink did not. The deep-fill tier takes white in both modes; --blue-contrast says the same thing, and they must agree because --primary and --blue-9 are now the same value. */
|
|
246
332
|
export const ShadcnPrimaryForeground: string;
|
|
@@ -266,10 +352,11 @@ export const ShadcnInfo: string;
|
|
|
266
352
|
export const ShadcnInfoForeground: string;
|
|
267
353
|
export const ShadcnBorder: string;
|
|
268
354
|
export const ShadcnInput: string;
|
|
269
|
-
/** Focus
|
|
355
|
+
/** The House blue. Focus rings, selection and links — the one saturated hue on a product screen. #2e65ee light / #6b93f5 dark. */
|
|
270
356
|
export const ShadcnRing: string;
|
|
271
357
|
export const ShadcnSidebar: string;
|
|
272
358
|
export const ShadcnSidebarForeground: string;
|
|
359
|
+
/** Current-page accent in the sidebar. = blue-11 (#89aaee, L* 74.0, C 0.106), the ramp's measured secondary-text tier on dark (8.62:1 on step 1). Was 228 95% 72% — 95% chroma sat outside every measured band and matched no ramp step. */
|
|
273
360
|
export const ShadcnSidebarPrimary: string;
|
|
274
361
|
export const ShadcnSidebarPrimaryForeground: string;
|
|
275
362
|
export const ShadcnSidebarAccent: string;
|
package/build/ts/dark.js
CHANGED
|
@@ -24,17 +24,17 @@ export const ColorNebutraCyan700 = "#07a183";
|
|
|
24
24
|
export const ColorNebutraCyan800 = "#057963";
|
|
25
25
|
export const ColorNebutraCyan900 = "#035143";
|
|
26
26
|
export const ColorNebutraCyan950 = "#012923";
|
|
27
|
-
export const ColorNebutraNeutral50 = "#
|
|
28
|
-
export const ColorNebutraNeutral100 = "#
|
|
29
|
-
export const ColorNebutraNeutral200 = "#
|
|
30
|
-
export const ColorNebutraNeutral300 = "#
|
|
31
|
-
export const ColorNebutraNeutral400 = "#
|
|
32
|
-
export const ColorNebutraNeutral500 = "#
|
|
33
|
-
export const ColorNebutraNeutral600 = "#
|
|
34
|
-
export const ColorNebutraNeutral700 = "#
|
|
35
|
-
export const ColorNebutraNeutral800 = "#
|
|
36
|
-
export const ColorNebutraNeutral900 = "#
|
|
37
|
-
export const ColorNebutraNeutral950 = "#
|
|
27
|
+
export const ColorNebutraNeutral50 = "#f9fafb";
|
|
28
|
+
export const ColorNebutraNeutral100 = "#f3f4f6";
|
|
29
|
+
export const ColorNebutraNeutral200 = "#e4e5e8";
|
|
30
|
+
export const ColorNebutraNeutral300 = "#d2d4d8";
|
|
31
|
+
export const ColorNebutraNeutral400 = "#9fa1a5";
|
|
32
|
+
export const ColorNebutraNeutral500 = "#717377";
|
|
33
|
+
export const ColorNebutraNeutral600 = "#515357";
|
|
34
|
+
export const ColorNebutraNeutral700 = "#3f4044";
|
|
35
|
+
export const ColorNebutraNeutral800 = "#26272a";
|
|
36
|
+
export const ColorNebutraNeutral900 = "#18191c";
|
|
37
|
+
export const ColorNebutraNeutral950 = "#0b0c0d";
|
|
38
38
|
export const ColorNebutraGray50 = "#fafafa";
|
|
39
39
|
export const ColorNebutraGray100 = "#f5f5f5";
|
|
40
40
|
export const ColorNebutraGray200 = "#e5e5e5";
|
|
@@ -82,18 +82,89 @@ export const EasingSpring = "cubic-bezier(0.175, 0.885, 0.32, 1.275)";
|
|
|
82
82
|
export const TrackingDisplay = "-0.04em"; // Hero H1
|
|
83
83
|
export const TrackingHeading = "-0.03em"; // Section H2/H3
|
|
84
84
|
export const TrackingTight = "-0.015em"; // Body emphasis
|
|
85
|
+
export const TrackingLabel = "0.07em"; // Uppercase micro-labels. 0.07em is Vercel's measured eyebrow value (0.071em); open tracking keeps small caps legible.
|
|
85
86
|
export const LeadingDisplay = "1.05";
|
|
86
87
|
export const LeadingHeading = "1.15";
|
|
88
|
+
export const Type2xsSize = "0.6875rem";
|
|
89
|
+
export const Type2xsLeading = "1.45";
|
|
90
|
+
export const Type2xsTracking = "0.01em";
|
|
91
|
+
export const TypeXsSize = "0.75rem";
|
|
92
|
+
export const TypeXsLeading = "1.4";
|
|
93
|
+
export const TypeXsTracking = "0.005em";
|
|
94
|
+
export const TypeUiSize = "0.8125rem";
|
|
95
|
+
export const TypeUiLeading = "1.45";
|
|
96
|
+
export const TypeUiTracking = "0em";
|
|
97
|
+
export const TypeSmSize = "0.875rem";
|
|
98
|
+
export const TypeSmLeading = "1.5";
|
|
99
|
+
export const TypeSmTracking = "0em";
|
|
100
|
+
export const TypeBaseSize = "1rem";
|
|
101
|
+
export const TypeBaseLeading = "1.6";
|
|
102
|
+
export const TypeBaseTracking = "-0.005em";
|
|
103
|
+
export const TypeLgSize = "1.125rem";
|
|
104
|
+
export const TypeLgLeading = "1.55";
|
|
105
|
+
export const TypeLgTracking = "-0.01em";
|
|
106
|
+
export const TypeXlSize = "1.25rem";
|
|
107
|
+
export const TypeXlLeading = "1.45";
|
|
108
|
+
export const TypeXlTracking = "-0.012em";
|
|
109
|
+
export const Type2xlSize = "1.5rem";
|
|
110
|
+
export const Type2xlLeading = "1.33";
|
|
111
|
+
export const Type2xlTracking = "-0.015em";
|
|
112
|
+
export const Type3xlSize = "1.875rem";
|
|
113
|
+
export const Type3xlLeading = "1.25";
|
|
114
|
+
export const Type3xlTracking = "-0.02em";
|
|
115
|
+
export const Type4xlSize = "2.25rem";
|
|
116
|
+
export const Type4xlLeading = "1.15";
|
|
117
|
+
export const Type4xlTracking = "-0.022em";
|
|
118
|
+
export const Type5xlSize = "3rem";
|
|
119
|
+
export const Type5xlLeading = "1.08";
|
|
120
|
+
export const Type5xlTracking = "-0.028em";
|
|
121
|
+
export const Type6xlSize = "3.75rem";
|
|
122
|
+
export const Type6xlLeading = "1.04";
|
|
123
|
+
export const Type6xlTracking = "-0.032em";
|
|
124
|
+
export const Type7xlSize = "4.5rem";
|
|
125
|
+
export const Type7xlLeading = "1";
|
|
126
|
+
export const Type7xlTracking = "-0.035em";
|
|
127
|
+
export const Type8xlSize = "6rem";
|
|
128
|
+
export const Type8xlLeading = "1";
|
|
129
|
+
export const Type8xlTracking = "-0.04em";
|
|
130
|
+
export const Type9xlSize = "8rem";
|
|
131
|
+
export const Type9xlLeading = "1";
|
|
132
|
+
export const Type9xlTracking = "-0.045em";
|
|
133
|
+
export const TypeDisplaySize = "1.25rem";
|
|
134
|
+
export const TypeDisplayLeading = "1.45";
|
|
135
|
+
export const TypeDisplayTracking = "-0.012em";
|
|
136
|
+
export const TypeBodySize = "0.875rem";
|
|
137
|
+
export const TypeBodyLeading = "1.5";
|
|
138
|
+
export const TypeBodyTracking = "0em";
|
|
139
|
+
export const TypeLabelSize = "0.75rem";
|
|
140
|
+
export const TypeLabelLeading = "1.4";
|
|
141
|
+
export const TypeLabelTracking = "0.005em";
|
|
142
|
+
export const TypeMetaSize = "0.6875rem";
|
|
143
|
+
export const TypeMetaLeading = "1.45";
|
|
144
|
+
export const TypeMetaTracking = "0.01em";
|
|
145
|
+
export const LayerRaised = "10"; // Within a component: an element lifted over its siblings.
|
|
146
|
+
export const LayerSticky = "20"; // Sticky headers and table heads.
|
|
147
|
+
export const LayerFloating = "30"; // Floating toolbars and canvas chrome anchored to content.
|
|
148
|
+
export const LayerNav = "40"; // App navigation and the shell's top bar.
|
|
149
|
+
export const LayerDrawer = "60"; // Mobile navigation drawers and their toggles.
|
|
150
|
+
export const LayerBanner = "90"; // Page-level banners: cookie consent, announcements.
|
|
151
|
+
export const LayerSkipLink = "100"; // The skip link — above page chrome whenever it is focused.
|
|
152
|
+
export const LayerPanel = "200"; // App-owned floating panels that are not overlays (locale switcher, search flyouts).
|
|
153
|
+
export const LayerBackdrop = "1040"; // Overlay tier. Mirrors overlayZIndex in @nebutra/ui; a test keeps them equal.
|
|
154
|
+
export const LayerModal = "1050"; // Dialogs and sheets.
|
|
155
|
+
export const LayerPopover = "1060"; // Popovers, menus, selects.
|
|
156
|
+
export const LayerTooltip = "1070"; // Tooltips.
|
|
157
|
+
export const LayerDevtools = "9999"; // Developer and debug surfaces only — never product UI.
|
|
87
158
|
export const RingHairline = "inset 0 0 0 1px rgb(255 255 255 / 0.06)"; // Hairline override — more visible on dark background
|
|
88
159
|
export const OverlayFaint = "rgb(255 255 255 / 0.06)"; // Dark-mode faint overlay (6% white) — inverted from light
|
|
89
160
|
export const FontFamilySans =
|
|
90
|
-
'var(--font-geist-sans), "Geist", var(--font-
|
|
161
|
+
'var(--font-geist-sans), "Geist", var(--font-misans, "MiSans"), "PingFang SC", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, system-ui, sans-serif';
|
|
91
162
|
export const FontFamilyCn =
|
|
92
|
-
'var(--font-geist-sans), "Geist", var(--font-
|
|
163
|
+
'var(--font-geist-sans), "Geist", var(--font-misans, "MiSans"), "PingFang SC", "Microsoft YaHei", sans-serif'; // CJK-locale stack — same order as sans, minus the Latin-only system faces
|
|
93
164
|
export const FontFamilyDisplay =
|
|
94
|
-
'var(--font-
|
|
165
|
+
'var(--font-dm-sans), "DM Sans", var(--font-misans, "MiSans"), "PingFang SC", sans-serif';
|
|
95
166
|
export const FontFamilyHeading =
|
|
96
|
-
'var(--font-
|
|
167
|
+
'var(--font-dm-sans), "DM Sans", var(--font-misans, "MiSans"), "PingFang SC", sans-serif';
|
|
97
168
|
export const FontFamilyMono =
|
|
98
169
|
'var(--font-geist-mono), "Geist Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace';
|
|
99
170
|
export const TransitionDefault = {
|
|
@@ -127,18 +198,18 @@ export const MotionDurationFlow = "200ms";
|
|
|
127
198
|
export const MotionDurationReveal = "300ms";
|
|
128
199
|
export const MotionDurationCinematic = "500ms";
|
|
129
200
|
export const FocusRingDefault = "0 0 0 2px hsl(var(--ring) / 0.4)"; // Single-layer translucent focus ring (2026 pattern). Legacy box-shadow consumers stay compatible; modern surfaces should prefer the global :focus-visible outline rule in static/base.css.
|
|
130
|
-
export const ScaleNeutral1 = "#
|
|
131
|
-
export const ScaleNeutral2 = "#
|
|
132
|
-
export const ScaleNeutral3 = "#
|
|
133
|
-
export const ScaleNeutral4 = "#
|
|
134
|
-
export const ScaleNeutral5 = "#
|
|
201
|
+
export const ScaleNeutral1 = "#0b0c0d";
|
|
202
|
+
export const ScaleNeutral2 = "#18191c";
|
|
203
|
+
export const ScaleNeutral3 = "#26272a";
|
|
204
|
+
export const ScaleNeutral4 = "#3f4044";
|
|
205
|
+
export const ScaleNeutral5 = "#515357";
|
|
135
206
|
export const ScaleNeutral6 = "#666666"; // subtle border — DERIVED: OKLab lerp step5 → step9 at t=0.25, chroma forced to 0. The achromatic result is deliberate and preserves the documented intent of color.nebutra-gray ('used where blue undertone clashes — primarily dark-mode borders, dividers, elevation hairlines'). What was broken was the LIGHTNESS: gray-900/800/700 are darker than the slate background tier they sit above, so the border read as a hole rather than a hairline.
|
|
136
|
-
export const ScaleNeutral7 = "#
|
|
207
|
+
export const ScaleNeutral7 = "#797979"; // default border — DERIVED: OKLab lerp step5 → step9 at t=0.50, chroma 0.
|
|
137
208
|
export const ScaleNeutral8 = "#8d8d8d"; // hovered border — DERIVED: OKLab lerp step5 → step9 at t=0.75, chroma 0.
|
|
138
|
-
export const ScaleNeutral9 = "#
|
|
139
|
-
export const ScaleNeutral10 = "#
|
|
140
|
-
export const ScaleNeutral11 = "#
|
|
141
|
-
export const ScaleNeutral12 = "#
|
|
209
|
+
export const ScaleNeutral9 = "#9fa1a5";
|
|
210
|
+
export const ScaleNeutral10 = "#d2d4d8";
|
|
211
|
+
export const ScaleNeutral11 = "#e4e5e8";
|
|
212
|
+
export const ScaleNeutral12 = "#f9fafb";
|
|
142
213
|
export const ScaleBlue1 = "#030815"; // app tint — L* 13.59, C 0.031, hue 264.
|
|
143
214
|
export const ScaleBlue2 = "#060f25"; // subtle background — L* 17.43, C 0.048.
|
|
144
215
|
export const ScaleBlue3 = "#09183b"; // component background default — L* 22.04, C 0.071.
|
|
@@ -165,20 +236,20 @@ export const ScaleCyan10 = "#5af8ce"; // solid fill hover — L* 88.53, C 0.145,
|
|
|
165
236
|
export const ScaleCyan11 = "#90fbdb"; // secondary text — L* 91.46, C 0.110. 15.68:1 on step 1.
|
|
166
237
|
export const ScaleCyan12 = "#bdfde8"; // primary text — L* 94.54, C 0.070. 16.95:1 on step 1.
|
|
167
238
|
export const ScaleCyanContrast = "#0d2b25"; // Label ink for the bright fill tier. Absolute near-black, identical in both modes. 10.35:1 on step 9, 11.34:1 on step 10.
|
|
168
|
-
export const ShadcnBackground = "
|
|
169
|
-
export const ShadcnForeground = "
|
|
170
|
-
export const ShadcnCard = "
|
|
171
|
-
export const ShadcnCardForeground = "
|
|
172
|
-
export const ShadcnPopover = "
|
|
173
|
-
export const ShadcnPopoverForeground = "
|
|
174
|
-
export const ShadcnPrimary = "
|
|
175
|
-
export const ShadcnPrimaryForeground = "
|
|
176
|
-
export const ShadcnSecondary = "
|
|
177
|
-
export const ShadcnSecondaryForeground = "
|
|
178
|
-
export const ShadcnMuted = "
|
|
179
|
-
export const ShadcnMutedForeground = "
|
|
180
|
-
export const ShadcnAccent = "
|
|
181
|
-
export const ShadcnAccentForeground = "228
|
|
239
|
+
export const ShadcnBackground = "220 11.1% 5.3%"; // House canvas. Light is gray-50 under white cards (two-surface layering, as Vercel #fafafa/#fff); dark is OKLCH L 0.16, inside the near-black band every reference measures (Linear L 0.14, Raycast #040506).
|
|
240
|
+
export const ShadcnForeground = "228 23.8% 95.9%";
|
|
241
|
+
export const ShadcnCard = "220 7.3% 8%";
|
|
242
|
+
export const ShadcnCardForeground = "228 23.8% 95.9%";
|
|
243
|
+
export const ShadcnPopover = "225 7.7% 10.2%";
|
|
244
|
+
export const ShadcnPopoverForeground = "228 23.8% 95.9%";
|
|
245
|
+
export const ShadcnPrimary = "228 23.8% 95.9%"; // House action fill = ink, not blue (owner decision 2026-09-24). Every measured reference ships a solid near-black primary (Vercel #171717, Figma #000) and keeps its one saturated hue for a single signal. Blue now lives on --ring (focus, selection) only.
|
|
246
|
+
export const ShadcnPrimaryForeground = "220 11.1% 5.3%"; // White, matching light mode and matching --blue-contrast. It was near-black (222 14% 9%) when --primary was a LIGHT fill at L* 68.3, where dark ink read 6.20:1. Once --primary became a deep fill at L* 55.9 the pairing inverted and measured 3.74:1, below AA — the fill moved and the ink did not. The deep-fill tier takes white in both modes; --blue-contrast says the same thing, and they must agree because --primary and --blue-9 are now the same value.
|
|
247
|
+
export const ShadcnSecondary = "225 6.2% 12.5%";
|
|
248
|
+
export const ShadcnSecondaryForeground = "228 23.8% 95.9%";
|
|
249
|
+
export const ShadcnMuted = "225 6.2% 12.5%";
|
|
250
|
+
export const ShadcnMutedForeground = "228 2.6% 62.5%";
|
|
251
|
+
export const ShadcnAccent = "225 6.2% 12.5%";
|
|
252
|
+
export const ShadcnAccentForeground = "228 23.8% 95.9%";
|
|
182
253
|
export const ShadcnDestructive = "0 63% 38%";
|
|
183
254
|
export const ShadcnDestructiveForeground = "210 18% 96%";
|
|
184
255
|
export const ShadcnDestructiveStrong = "0 80% 66%"; // Red as FOREGROUND on a dark surface. --destructive (0 63% 38%) is 2.15:1 on --card here — a fill only. Lightened to 5.18:1 on --card / 5.61:1 on --neutral-1, which sits alongside the light-mode 5.42:1 so red reads with the same weight in both themes. Use --destructive for fills with --destructive-foreground on top; use this for red text and icons.
|
|
@@ -190,17 +261,17 @@ export const ShadcnWarningForeground = "222 14% 9%";
|
|
|
190
261
|
export const ShadcnWarningStrong = "38 80% 52%"; // Amber as foreground on a dark surface. Unlike light mode this needs no adjustment — 38 80% 52% is already 7.98:1 against --neutral-1 — so it deliberately equals --warning. The token exists in both themes so consumers can reference one name.
|
|
191
262
|
export const ShadcnInfo = "228 95% 72%";
|
|
192
263
|
export const ShadcnInfoForeground = "222 14% 9%";
|
|
193
|
-
export const ShadcnBorder = "220
|
|
194
|
-
export const ShadcnInput = "220
|
|
195
|
-
export const ShadcnRing = "
|
|
196
|
-
export const ShadcnSidebar = "
|
|
197
|
-
export const ShadcnSidebarForeground = "
|
|
198
|
-
export const ShadcnSidebarPrimary = "228 95% 72%
|
|
199
|
-
export const ShadcnSidebarPrimaryForeground = "
|
|
200
|
-
export const ShadcnSidebarAccent = "
|
|
201
|
-
export const ShadcnSidebarAccentForeground = "228
|
|
202
|
-
export const ShadcnSidebarBorder = "
|
|
203
|
-
export const ShadcnSidebarRing = "
|
|
264
|
+
export const ShadcnBorder = "220 3.6% 16.3%";
|
|
265
|
+
export const ShadcnInput = "220 3.6% 16.3%";
|
|
266
|
+
export const ShadcnRing = "222.6 87.3% 69%"; // The House blue. Focus rings, selection and links — the one saturated hue on a product screen. #2e65ee light / #6b93f5 dark.
|
|
267
|
+
export const ShadcnSidebar = "220 11.1% 5.3%";
|
|
268
|
+
export const ShadcnSidebarForeground = "228 23.8% 95.9%";
|
|
269
|
+
export const ShadcnSidebarPrimary = "228 23.8% 95.9%"; // Current-page accent in the sidebar. = blue-11 (#89aaee, L* 74.0, C 0.106), the ramp's measured secondary-text tier on dark (8.62:1 on step 1). Was 228 95% 72% — 95% chroma sat outside every measured band and matched no ramp step.
|
|
270
|
+
export const ShadcnSidebarPrimaryForeground = "220 11.1% 5.3%";
|
|
271
|
+
export const ShadcnSidebarAccent = "225 6.2% 12.5%";
|
|
272
|
+
export const ShadcnSidebarAccentForeground = "228 23.8% 95.9%";
|
|
273
|
+
export const ShadcnSidebarBorder = "225 6.2% 12.5%";
|
|
274
|
+
export const ShadcnSidebarRing = "222.6 87.3% 69%";
|
|
204
275
|
export const ShadcnChart1 = "228 95% 67%";
|
|
205
276
|
export const ShadcnChart2 = "168 96% 54%";
|
|
206
277
|
export const ShadcnChart3 = "228 100% 82%";
|
package/build/ts/light.d.ts
CHANGED
|
@@ -112,8 +112,93 @@ export const TrackingDisplay: string;
|
|
|
112
112
|
export const TrackingHeading: string;
|
|
113
113
|
/** Body emphasis */
|
|
114
114
|
export const TrackingTight: string;
|
|
115
|
+
/** Uppercase micro-labels. 0.07em is Vercel's measured eyebrow value (0.071em); open tracking keeps small caps legible. */
|
|
116
|
+
export const TrackingLabel: string;
|
|
115
117
|
export const LeadingDisplay: string;
|
|
116
118
|
export const LeadingHeading: string;
|
|
119
|
+
export const Type2xsSize: string;
|
|
120
|
+
export const Type2xsLeading: string;
|
|
121
|
+
export const Type2xsTracking: string;
|
|
122
|
+
export const TypeXsSize: string;
|
|
123
|
+
export const TypeXsLeading: string;
|
|
124
|
+
export const TypeXsTracking: string;
|
|
125
|
+
export const TypeUiSize: string;
|
|
126
|
+
export const TypeUiLeading: string;
|
|
127
|
+
export const TypeUiTracking: string;
|
|
128
|
+
export const TypeSmSize: string;
|
|
129
|
+
export const TypeSmLeading: string;
|
|
130
|
+
export const TypeSmTracking: string;
|
|
131
|
+
export const TypeBaseSize: string;
|
|
132
|
+
export const TypeBaseLeading: string;
|
|
133
|
+
export const TypeBaseTracking: string;
|
|
134
|
+
export const TypeLgSize: string;
|
|
135
|
+
export const TypeLgLeading: string;
|
|
136
|
+
export const TypeLgTracking: string;
|
|
137
|
+
export const TypeXlSize: string;
|
|
138
|
+
export const TypeXlLeading: string;
|
|
139
|
+
export const TypeXlTracking: string;
|
|
140
|
+
export const Type2xlSize: string;
|
|
141
|
+
export const Type2xlLeading: string;
|
|
142
|
+
export const Type2xlTracking: string;
|
|
143
|
+
export const Type3xlSize: string;
|
|
144
|
+
export const Type3xlLeading: string;
|
|
145
|
+
export const Type3xlTracking: string;
|
|
146
|
+
export const Type4xlSize: string;
|
|
147
|
+
export const Type4xlLeading: string;
|
|
148
|
+
export const Type4xlTracking: string;
|
|
149
|
+
export const Type5xlSize: string;
|
|
150
|
+
export const Type5xlLeading: string;
|
|
151
|
+
export const Type5xlTracking: string;
|
|
152
|
+
export const Type6xlSize: string;
|
|
153
|
+
export const Type6xlLeading: string;
|
|
154
|
+
export const Type6xlTracking: string;
|
|
155
|
+
export const Type7xlSize: string;
|
|
156
|
+
export const Type7xlLeading: string;
|
|
157
|
+
export const Type7xlTracking: string;
|
|
158
|
+
export const Type8xlSize: string;
|
|
159
|
+
export const Type8xlLeading: string;
|
|
160
|
+
export const Type8xlTracking: string;
|
|
161
|
+
export const Type9xlSize: string;
|
|
162
|
+
export const Type9xlLeading: string;
|
|
163
|
+
export const Type9xlTracking: string;
|
|
164
|
+
export const TypeDisplaySize: string;
|
|
165
|
+
export const TypeDisplayLeading: string;
|
|
166
|
+
export const TypeDisplayTracking: string;
|
|
167
|
+
export const TypeBodySize: string;
|
|
168
|
+
export const TypeBodyLeading: string;
|
|
169
|
+
export const TypeBodyTracking: string;
|
|
170
|
+
export const TypeLabelSize: string;
|
|
171
|
+
export const TypeLabelLeading: string;
|
|
172
|
+
export const TypeLabelTracking: string;
|
|
173
|
+
export const TypeMetaSize: string;
|
|
174
|
+
export const TypeMetaLeading: string;
|
|
175
|
+
export const TypeMetaTracking: string;
|
|
176
|
+
/** Within a component: an element lifted over its siblings. */
|
|
177
|
+
export const LayerRaised: string;
|
|
178
|
+
/** Sticky headers and table heads. */
|
|
179
|
+
export const LayerSticky: string;
|
|
180
|
+
/** Floating toolbars and canvas chrome anchored to content. */
|
|
181
|
+
export const LayerFloating: string;
|
|
182
|
+
/** App navigation and the shell's top bar. */
|
|
183
|
+
export const LayerNav: string;
|
|
184
|
+
/** Mobile navigation drawers and their toggles. */
|
|
185
|
+
export const LayerDrawer: string;
|
|
186
|
+
/** Page-level banners: cookie consent, announcements. */
|
|
187
|
+
export const LayerBanner: string;
|
|
188
|
+
/** The skip link — above page chrome whenever it is focused. */
|
|
189
|
+
export const LayerSkipLink: string;
|
|
190
|
+
/** App-owned floating panels that are not overlays (locale switcher, search flyouts). */
|
|
191
|
+
export const LayerPanel: string;
|
|
192
|
+
/** Overlay tier. Mirrors overlayZIndex in @nebutra/ui; a test keeps them equal. */
|
|
193
|
+
export const LayerBackdrop: string;
|
|
194
|
+
/** Dialogs and sheets. */
|
|
195
|
+
export const LayerModal: string;
|
|
196
|
+
/** Popovers, menus, selects. */
|
|
197
|
+
export const LayerPopover: string;
|
|
198
|
+
/** Tooltips. */
|
|
199
|
+
export const LayerTooltip: string;
|
|
200
|
+
/** Developer and debug surfaces only — never product UI. */
|
|
201
|
+
export const LayerDevtools: string;
|
|
117
202
|
/** Etched-glass hairline (light mode value, dark mode override in themes/dark.json) */
|
|
118
203
|
export const RingHairline: string;
|
|
119
204
|
/** Light-mode faint overlay (6% black) */
|
|
@@ -243,14 +328,14 @@ export const ScaleCyan11: string;
|
|
|
243
328
|
export const ScaleCyan12: string;
|
|
244
329
|
/** Label ink for the bright fill tier. Absolute near-black, identical in both modes, carrying a trace of the scale hue. A bright fill needs an explicit dark ink; comparing white against the scale's own step 12 picks white in dark mode, where step 12 is light, and measures 1.52:1. 10.35:1 on step 9, 9.40:1 on step 10. */
|
|
245
330
|
export const ScaleCyanContrast: string;
|
|
246
|
-
/**
|
|
331
|
+
/** House canvas. Light is gray-50 under white cards (two-surface layering, as Vercel #fafafa/#fff); dark is OKLCH L 0.16, inside the near-black band every reference measures (Linear L 0.14, Raycast #040506). */
|
|
247
332
|
export const ShadcnBackground: string;
|
|
248
333
|
export const ShadcnForeground: string;
|
|
249
334
|
export const ShadcnCard: string;
|
|
250
335
|
export const ShadcnCardForeground: string;
|
|
251
336
|
export const ShadcnPopover: string;
|
|
252
337
|
export const ShadcnPopoverForeground: string;
|
|
253
|
-
/**
|
|
338
|
+
/** House action fill = ink, not blue (owner decision 2026-09-24). Every measured reference ships a solid near-black primary (Vercel #171717, Figma #000) and keeps its one saturated hue for a single signal. Blue now lives on --ring (focus, selection) only. */
|
|
254
339
|
export const ShadcnPrimary: string;
|
|
255
340
|
export const ShadcnPrimaryForeground: string;
|
|
256
341
|
export const ShadcnSecondary: string;
|
|
@@ -276,10 +361,11 @@ export const ShadcnInfo: string;
|
|
|
276
361
|
export const ShadcnInfoForeground: string;
|
|
277
362
|
export const ShadcnBorder: string;
|
|
278
363
|
export const ShadcnInput: string;
|
|
279
|
-
/**
|
|
364
|
+
/** The House blue. Focus rings, selection and links — the one saturated hue on a product screen. #2e65ee light / #6b93f5 dark. */
|
|
280
365
|
export const ShadcnRing: string;
|
|
281
366
|
export const ShadcnSidebar: string;
|
|
282
367
|
export const ShadcnSidebarForeground: string;
|
|
368
|
+
/** Current-page accent in the sidebar (icon tint + edge). Same value as --primary: the sidebar carried the superseded 228 85% 56% (#2f56ee, C 0.232), which the action-blue measurement trimmed to C 0.215. */
|
|
283
369
|
export const ShadcnSidebarPrimary: string;
|
|
284
370
|
export const ShadcnSidebarPrimaryForeground: string;
|
|
285
371
|
export const ShadcnSidebarAccent: string;
|