@nebutra/design-tokens 0.1.2 → 2.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.
@@ -3,7 +3,11 @@
3
3
  "$description": "Light mode theme — 12-step functional scales (Geist-style) + shadcn HSL semantics + Geist DS scale + elevation. Mirrors :root in @nebutra/tokens/styles.css.",
4
4
  "scale": {
5
5
  "neutral": {
6
- "1": { "$value": "{color.white}", "$type": "color", "$description": "app background" },
6
+ "1": {
7
+ "$value": "{color.white}",
8
+ "$type": "color",
9
+ "$description": "app background"
10
+ },
7
11
  "2": {
8
12
  "$value": "{color.nebutra-neutral.50}",
9
13
  "$type": "color",
@@ -25,19 +29,37 @@
25
29
  "$description": "component bg active"
26
30
  },
27
31
  "6": {
28
- "$value": "{color.nebutra-neutral.200}",
32
+ "$value": "{scale.neutral.5}",
29
33
  "$type": "color",
30
- "$description": "subtle border"
34
+ "$description": "subtle border — DERIVED at build time (scripts/derive-border-tier.mjs): OKLab lerp step5 → step9 at t=0.25. The $value here is a placeholder anchor only; the preprocessor overwrites it.",
35
+ "$extensions": {
36
+ "com.nebutra.derive": {
37
+ "space": "oklab",
38
+ "tier": "border"
39
+ }
40
+ }
31
41
  },
32
42
  "7": {
33
- "$value": "{color.nebutra-neutral.300}",
43
+ "$value": "{scale.neutral.5}",
34
44
  "$type": "color",
35
- "$description": "default border"
45
+ "$description": "default border — DERIVED: OKLab lerp step5 → step9 at t=0.50.",
46
+ "$extensions": {
47
+ "com.nebutra.derive": {
48
+ "space": "oklab",
49
+ "tier": "border"
50
+ }
51
+ }
36
52
  },
37
53
  "8": {
38
- "$value": "{color.nebutra-neutral.400}",
54
+ "$value": "{scale.neutral.5}",
39
55
  "$type": "color",
40
- "$description": "hovered border"
56
+ "$description": "hovered border — DERIVED: OKLab lerp step5 → step9 at t=0.75.",
57
+ "$extensions": {
58
+ "com.nebutra.derive": {
59
+ "space": "oklab",
60
+ "tier": "border"
61
+ }
62
+ }
41
63
  },
42
64
  "9": {
43
65
  "$value": "{color.nebutra-neutral.500}",
@@ -61,36 +83,174 @@
61
83
  }
62
84
  },
63
85
  "blue": {
64
- "1": { "$value": "{color.nebutra-blue.50}", "$type": "color" },
65
- "2": { "$value": "{color.nebutra-blue.100}", "$type": "color" },
66
- "3": { "$value": "{color.nebutra-blue.200}", "$type": "color" },
67
- "4": { "$value": "{color.nebutra-blue.300}", "$type": "color" },
68
- "5": { "$value": "{color.nebutra-blue.400}", "$type": "color" },
69
- "6": { "$value": "{color.nebutra-blue.200}", "$type": "color" },
70
- "7": { "$value": "{color.nebutra-blue.300}", "$type": "color" },
71
- "8": { "$value": "{color.nebutra-blue.400}", "$type": "color" },
86
+ "1": {
87
+ "$value": "#fafcfe",
88
+ "$type": "color",
89
+ "$description": "app tint — L* 99.01, C 0.003, hue 264. Radix blue-1 sits at L* 99.31 C 0.003."
90
+ },
91
+ "2": {
92
+ "$value": "#f2f6fd",
93
+ "$type": "color",
94
+ "$description": "subtle background — L* 97.21, C 0.010."
95
+ },
96
+ "3": {
97
+ "$value": "#e7eefc",
98
+ "$type": "color",
99
+ "$description": "component background default — L* 94.79, C 0.020."
100
+ },
101
+ "4": {
102
+ "$value": "#d8e4fb",
103
+ "$type": "color",
104
+ "$description": "component background hover — L* 91.69, C 0.034."
105
+ },
106
+ "5": {
107
+ "$value": "#c6d7fa",
108
+ "$type": "color",
109
+ "$description": "component background active — L* 87.77, C 0.052. Anchor for the derived border tier."
110
+ },
111
+ "6": {
112
+ "$value": "{scale.blue.5}",
113
+ "$type": "color",
114
+ "$description": "subtle border — DERIVED at build time (scripts/derive-border-tier.mjs): OKLab lerp of step 5 toward step9 (deep scale, span 32.3 L*) at t=0.25. The value here is a placeholder anchor only; the preprocessor overwrites it. Lands at L* 79.61, C 0.093.",
115
+ "$extensions": {
116
+ "com.nebutra.derive": {
117
+ "space": "oklab",
118
+ "tier": "border"
119
+ }
120
+ }
121
+ },
122
+ "7": {
123
+ "$value": "{scale.blue.5}",
124
+ "$type": "color",
125
+ "$description": "default border — DERIVED at build time (scripts/derive-border-tier.mjs): OKLab lerp of step 5 toward step9 (deep scale, span 32.3 L*) at t=0.50. The value here is a placeholder anchor only; the preprocessor overwrites it. Lands at L* 71.63, C 0.134.",
126
+ "$extensions": {
127
+ "com.nebutra.derive": {
128
+ "space": "oklab",
129
+ "tier": "border"
130
+ }
131
+ }
132
+ },
133
+ "8": {
134
+ "$value": "{scale.blue.5}",
135
+ "$type": "color",
136
+ "$description": "hovered border — DERIVED at build time (scripts/derive-border-tier.mjs): OKLab lerp of step 5 toward step9 (deep scale, span 32.3 L*) at t=0.75. The value here is a placeholder anchor only; the preprocessor overwrites it. Lands at L* 63.47, C 0.175.",
137
+ "$extensions": {
138
+ "com.nebutra.derive": {
139
+ "space": "oklab",
140
+ "tier": "border"
141
+ }
142
+ }
143
+ },
72
144
  "9": {
73
- "$value": "{color.nebutra-blue.500}",
145
+ "$value": "#2e65ee",
146
+ "$type": "color",
147
+ "$description": "solid fill — L* 55.50, C 0.215, hue 264.0. White label 4.99:1, inside the 4.7-5.4 band comparable products ship. Same value as shadcn --primary so the deep solid fill has one source, not two. The VI hex #0033FE (C 0.290, L* 48.4) stays the identity token --brand-primary and is deliberately NOT pinned into this ramp slot: pinning it left steps 6-9 only 3.5 L* apart with chroma climbing to 0.290."
148
+ },
149
+ "10": {
150
+ "$value": "#2253d4",
151
+ "$type": "color",
152
+ "$description": "solid fill hover — L* 49.52, C 0.205. White label 6.45:1."
153
+ },
154
+ "11": {
155
+ "$value": "#1740ad",
74
156
  "$type": "color",
75
- "$description": "solid fill — main brand"
157
+ "$description": "secondary text — L* 42.04, C 0.180. 8.60:1 on step 1."
76
158
  },
77
- "10": { "$value": "{color.nebutra-blue.600}", "$type": "color" },
78
- "11": { "$value": "{color.nebutra-blue.700}", "$type": "color" },
79
- "12": { "$value": "{color.nebutra-blue.900}", "$type": "color" }
159
+ "12": {
160
+ "$value": "#031654",
161
+ "$type": "color",
162
+ "$description": "primary text — L* 23.91, C 0.115. 16.38:1 on step 1."
163
+ },
164
+ "contrast": {
165
+ "$value": "#ffffff",
166
+ "$type": "color",
167
+ "$description": "Label ink for the solid fill tier. Absolute value, identical in both modes: a deep fill always takes white, never the scale's own step 12, which is light in dark mode. 4.99:1 on step 9, 6.45:1 on step 10."
168
+ }
80
169
  },
81
170
  "cyan": {
82
- "1": { "$value": "{color.nebutra-cyan.50}", "$type": "color" },
83
- "2": { "$value": "{color.nebutra-cyan.100}", "$type": "color" },
84
- "3": { "$value": "{color.nebutra-cyan.200}", "$type": "color" },
85
- "4": { "$value": "{color.nebutra-cyan.300}", "$type": "color" },
86
- "5": { "$value": "{color.nebutra-cyan.400}", "$type": "color" },
87
- "6": { "$value": "{color.nebutra-cyan.200}", "$type": "color" },
88
- "7": { "$value": "{color.nebutra-cyan.300}", "$type": "color" },
89
- "8": { "$value": "{color.nebutra-cyan.400}", "$type": "color" },
90
- "9": { "$value": "{color.nebutra-cyan.500}", "$type": "color" },
91
- "10": { "$value": "{color.nebutra-cyan.600}", "$type": "color" },
92
- "11": { "$value": "{color.nebutra-cyan.700}", "$type": "color" },
93
- "12": { "$value": "{color.nebutra-cyan.900}", "$type": "color" }
171
+ "1": {
172
+ "$value": "#f9fdfb",
173
+ "$type": "color",
174
+ "$description": "app tint — L* 99.05, C 0.005, hue 172."
175
+ },
176
+ "2": {
177
+ "$value": "#effbf7",
178
+ "$type": "color",
179
+ "$description": "subtle background — L* 97.81, C 0.014."
180
+ },
181
+ "3": {
182
+ "$value": "#daf9ee",
183
+ "$type": "color",
184
+ "$description": "component background default — L* 95.68, C 0.035."
185
+ },
186
+ "4": {
187
+ "$value": "#c3f6e4",
188
+ "$type": "color",
189
+ "$description": "component background hover — L* 93.29, C 0.058."
190
+ },
191
+ "5": {
192
+ "$value": "#a3f2d8",
193
+ "$type": "color",
194
+ "$description": "component background active — L* 90.27, C 0.086. Anchor for the derived border tier."
195
+ },
196
+ "6": {
197
+ "$value": "{scale.cyan.5}",
198
+ "$type": "color",
199
+ "$description": "subtle border — DERIVED at build time (scripts/derive-border-tier.mjs): OKLab lerp of step 5 toward step10 (bright scale: |L9-L5| = 4.9 L* < 6.0, so the tier continues toward step 10) at t=0.25. The value here is a placeholder anchor only; the preprocessor overwrites it. Lands at L* 88.38, C 0.102.",
200
+ "$extensions": {
201
+ "com.nebutra.derive": {
202
+ "space": "oklab",
203
+ "tier": "border"
204
+ }
205
+ }
206
+ },
207
+ "7": {
208
+ "$value": "{scale.cyan.5}",
209
+ "$type": "color",
210
+ "$description": "default border — DERIVED at build time (scripts/derive-border-tier.mjs): OKLab lerp of step 5 toward step10 (bright scale: |L9-L5| = 4.9 L* < 6.0, so the tier continues toward step 10) at t=0.50. The value here is a placeholder anchor only; the preprocessor overwrites it. Lands at L* 86.50, C 0.119.",
211
+ "$extensions": {
212
+ "com.nebutra.derive": {
213
+ "space": "oklab",
214
+ "tier": "border"
215
+ }
216
+ }
217
+ },
218
+ "8": {
219
+ "$value": "{scale.cyan.5}",
220
+ "$type": "color",
221
+ "$description": "hovered border — DERIVED at build time (scripts/derive-border-tier.mjs): OKLab lerp of step 5 toward step10 (bright scale: |L9-L5| = 4.9 L* < 6.0, so the tier continues toward step 10) at t=0.75. The value here is a placeholder anchor only; the preprocessor overwrites it. Lands at L* 84.42, C 0.134.",
222
+ "$extensions": {
223
+ "com.nebutra.derive": {
224
+ "space": "oklab",
225
+ "tier": "border"
226
+ }
227
+ }
228
+ },
229
+ "9": {
230
+ "$value": "#0bf1c3",
231
+ "$type": "color",
232
+ "$description": "solid fill — bright scale, so the fill is LIGHT and takes dark ink: L* 85.41, C 0.164, hue 172.1. Ink 10.35:1 against --cyan-contrast. Step 9 legitimately sits above step 8 on a bright scale, exactly as Radix mint does (8 at L* 72.2, 9 at L* 87.0)."
233
+ },
234
+ "10": {
235
+ "$value": "#33e5bb",
236
+ "$type": "color",
237
+ "$description": "solid fill hover — L* 82.61, C 0.150. 2.80 L* below step 9, matching Radix mint's own 2.95 L* step9-to-step10 drop, so hovering the bright fill deepens it slightly instead of collapsing past its own border tier. The previous value was 10.87 L* below step 9 and landed DARKER than step 8. Ink 9.40:1."
238
+ },
239
+ "11": {
240
+ "$value": "#027a61",
241
+ "$type": "color",
242
+ "$description": "secondary text — L* 51.64, C 0.100. 5.17:1 on step 1."
243
+ },
244
+ "12": {
245
+ "$value": "#004133",
246
+ "$type": "color",
247
+ "$description": "primary text — L* 33.45, C 0.065. 11.35:1 on step 1."
248
+ },
249
+ "contrast": {
250
+ "$value": "#0d2b25",
251
+ "$type": "color",
252
+ "$description": "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."
253
+ }
94
254
  }
95
255
  },
96
256
  "shadcn": {
@@ -99,121 +259,330 @@
99
259
  "$type": "string",
100
260
  "$description": "HSL channel triple — consume via hsl(var(--background))"
101
261
  },
102
- "foreground": { "$value": "222 47% 11%", "$type": "string" },
103
- "card": { "$value": "0 0% 100%", "$type": "string" },
104
- "card-foreground": { "$value": "222 47% 11%", "$type": "string" },
105
- "popover": { "$value": "0 0% 100%", "$type": "string" },
106
- "popover-foreground": { "$value": "222 47% 11%", "$type": "string" },
262
+ "foreground": {
263
+ "$value": "222 47% 11%",
264
+ "$type": "string"
265
+ },
266
+ "card": {
267
+ "$value": "0 0% 100%",
268
+ "$type": "string"
269
+ },
270
+ "card-foreground": {
271
+ "$value": "222 47% 11%",
272
+ "$type": "string"
273
+ },
274
+ "popover": {
275
+ "$value": "0 0% 100%",
276
+ "$type": "string"
277
+ },
278
+ "popover-foreground": {
279
+ "$value": "222 47% 11%",
280
+ "$type": "string"
281
+ },
107
282
  "primary": {
108
- "$value": "228 85% 56%",
283
+ "$value": "222.8 85% 55.7%",
109
284
  "$type": "string",
110
- "$description": "Softer brand blue #254bfa"
111
- },
112
- "primary-foreground": { "$value": "0 0% 100%", "$type": "string" },
113
- "secondary": { "$value": "210 40% 96%", "$type": "string" },
114
- "secondary-foreground": { "$value": "222 47% 11%", "$type": "string" },
115
- "muted": { "$value": "210 40% 96%", "$type": "string" },
116
- "muted-foreground": { "$value": "215 25% 45%", "$type": "string" },
117
- "accent": { "$value": "228 100% 97%", "$type": "string" },
285
+ "$description": "Product action blue. Derived, not borrowed: hue 264 is the VI hue, L* and C were chosen inside the band the industry actually ships (measured OKLCH C 0.167-0.235, L* 54-67 across Vercel, Stripe, Linear, GitHub, Tailwind, Radix, Figma, Notion). #2e65ee = L*55.5 C0.215, white label 4.99:1. The previous 228 85% 56% (#2f56ee, C0.232) also passed at 5.70:1 — this trims it to the middle of the band rather than its top edge. The VI lock --blue-9 (#0033FE, C0.290) is 23% above anything in that band and must never surface on a component."
286
+ },
287
+ "primary-foreground": {
288
+ "$value": "0 0% 100%",
289
+ "$type": "string"
290
+ },
291
+ "secondary": {
292
+ "$value": "210 40% 96%",
293
+ "$type": "string"
294
+ },
295
+ "secondary-foreground": {
296
+ "$value": "222 47% 11%",
297
+ "$type": "string"
298
+ },
299
+ "muted": {
300
+ "$value": "210 40% 96%",
301
+ "$type": "string"
302
+ },
303
+ "muted-foreground": {
304
+ "$value": "215 25% 45%",
305
+ "$type": "string"
306
+ },
307
+ "accent": {
308
+ "$value": "228 100% 97%",
309
+ "$type": "string"
310
+ },
118
311
  "accent-foreground": {
119
312
  "$value": "228 85% 56%",
120
313
  "$type": "string",
121
314
  "$description": "Softer brand blue — desaturated to match --primary, avoids 100% saturation glare on focus/accent"
122
315
  },
123
- "destructive": { "$value": "0 84% 45%", "$type": "string" },
124
- "destructive-foreground": { "$value": "0 0% 100%", "$type": "string" },
125
- "success": { "$value": "142 71% 29%", "$type": "string" },
126
- "success-foreground": { "$value": "0 0% 100%", "$type": "string" },
127
- "warning": { "$value": "38 92% 50%", "$type": "string" },
128
- "warning-foreground": { "$value": "222 47% 11%", "$type": "string" },
129
- "info": { "$value": "228 85% 56%", "$type": "string" },
130
- "info-foreground": { "$value": "0 0% 100%", "$type": "string" },
131
- "border": { "$value": "240 5.9% 90%", "$type": "string" },
132
- "input": { "$value": "240 5.9% 90%", "$type": "string" },
316
+ "destructive": {
317
+ "$value": "0 84% 45%",
318
+ "$type": "string"
319
+ },
320
+ "destructive-foreground": {
321
+ "$value": "0 0% 100%",
322
+ "$type": "string"
323
+ },
324
+ "destructive-strong": {
325
+ "$value": "0 84% 45%",
326
+ "$type": "string",
327
+ "$description": "Red as FOREGROUND. In light mode --destructive already passes (5.42:1 on white), so this equals it; the token exists so consumers reference one name across themes. In DARK, --destructive is 0 63% 38% = 2.15:1 on --card, unreadable as text — see dark.json. Mirrors --warning-strong."
328
+ },
329
+ "success": {
330
+ "$value": "142 71% 29%",
331
+ "$type": "string"
332
+ },
333
+ "success-foreground": {
334
+ "$value": "0 0% 100%",
335
+ "$type": "string"
336
+ },
337
+ "success-strong": {
338
+ "$value": "142 71% 27%",
339
+ "$type": "string",
340
+ "$description": "Green as FOREGROUND. --success (142 71% 29%) is 5.15:1 on white but only 4.49:1 as ink on its own 10% tint — one hundredth under AA, which is where badge green-subtle sat. Darkened two points: 5.71:1 on white, 4.99:1 on the tint, alongside --warning-strong (5.40) and --destructive-strong (5.42) so the three status foregrounds read with the same weight. Completes the trio; use --success for fills with --success-foreground on top."
341
+ },
342
+ "warning": {
343
+ "$value": "38 92% 50%",
344
+ "$type": "string"
345
+ },
346
+ "warning-foreground": {
347
+ "$value": "222 47% 11%",
348
+ "$type": "string"
349
+ },
350
+ "warning-strong": {
351
+ "$value": "38 92% 30%",
352
+ "$type": "string",
353
+ "$description": "Amber as FOREGROUND on a light surface. --warning is a fill: at 38 92% 50% it is 2.04:1 against --neutral-2, so it is unreadable as text or as an icon stroke. This darkened step is 5.17:1, which sits between --success (4.92) and --destructive (5.19) so the three status colours read with the same weight. Use --warning for fills with --warning-foreground on top; use this for amber text and icons. Destructive and success need no equivalent — they already pass AA as foreground."
354
+ },
355
+ "info": {
356
+ "$value": "228 85% 56%",
357
+ "$type": "string"
358
+ },
359
+ "info-foreground": {
360
+ "$value": "0 0% 100%",
361
+ "$type": "string"
362
+ },
363
+ "border": {
364
+ "$value": "240 5.9% 90%",
365
+ "$type": "string"
366
+ },
367
+ "input": {
368
+ "$value": "240 5.9% 90%",
369
+ "$type": "string"
370
+ },
133
371
  "ring": {
134
372
  "$value": "222 47% 11%",
135
373
  "$type": "string",
136
374
  "$description": "Focus ring — neutral foreground (Vercel/Linear/Cursor 2026 pattern). Brand blue is reserved for selected/active states; focus indication is chrome and stays neutral. Consumed by global :focus-visible outline as hsl(var(--ring) / 0.5)."
137
375
  },
138
- "sidebar": { "$value": "210 40% 98%", "$type": "string" },
139
- "sidebar-foreground": { "$value": "215 25% 27%", "$type": "string" },
140
- "sidebar-primary": { "$value": "228 85% 56%", "$type": "string" },
141
- "sidebar-primary-foreground": { "$value": "0 0% 100%", "$type": "string" },
142
- "sidebar-accent": { "$value": "228 100% 97%", "$type": "string" },
143
- "sidebar-accent-foreground": { "$value": "228 85% 56%", "$type": "string" },
144
- "sidebar-border": { "$value": "214 32% 91%", "$type": "string" },
145
- "sidebar-ring": { "$value": "228 85% 56%", "$type": "string" },
146
- "chart-1": { "$value": "228 100% 50%", "$type": "string" },
147
- "chart-2": { "$value": "168 91% 49%", "$type": "string" },
148
- "chart-3": { "$value": "263 70% 66%", "$type": "string" },
149
- "chart-4": { "$value": "168 91% 70%", "$type": "string" },
150
- "chart-5": { "$value": "228 100% 35%", "$type": "string" }
376
+ "sidebar": {
377
+ "$value": "210 40% 98%",
378
+ "$type": "string"
379
+ },
380
+ "sidebar-foreground": {
381
+ "$value": "215 25% 27%",
382
+ "$type": "string"
383
+ },
384
+ "sidebar-primary": {
385
+ "$value": "228 85% 56%",
386
+ "$type": "string"
387
+ },
388
+ "sidebar-primary-foreground": {
389
+ "$value": "0 0% 100%",
390
+ "$type": "string"
391
+ },
392
+ "sidebar-accent": {
393
+ "$value": "228 100% 97%",
394
+ "$type": "string"
395
+ },
396
+ "sidebar-accent-foreground": {
397
+ "$value": "228 85% 56%",
398
+ "$type": "string"
399
+ },
400
+ "sidebar-border": {
401
+ "$value": "214 32% 91%",
402
+ "$type": "string"
403
+ },
404
+ "sidebar-ring": {
405
+ "$value": "228 85% 56%",
406
+ "$type": "string"
407
+ },
408
+ "chart-1": {
409
+ "$value": "228 100% 50%",
410
+ "$type": "string"
411
+ },
412
+ "chart-2": {
413
+ "$value": "168 91% 49%",
414
+ "$type": "string"
415
+ },
416
+ "chart-3": {
417
+ "$value": "263 70% 66%",
418
+ "$type": "string"
419
+ },
420
+ "chart-4": {
421
+ "$value": "168 91% 70%",
422
+ "$type": "string"
423
+ },
424
+ "chart-5": {
425
+ "$value": "228 100% 35%",
426
+ "$type": "string"
427
+ }
151
428
  },
152
429
  "ds": {
153
430
  "$description": "Geist Design System color scale. sRGB hsla() fallbacks for legacy engines; oklch() overrides emitted via @supports wrapper for ds-gray-*.",
154
- "blue-200": { "$value": "oklch(96.29% 0.0195 250.59)", "$type": "color" },
155
- "blue-700": { "$value": "oklch(57.61% 0.2508 258.23)", "$type": "color" },
156
- "blue-900": { "$value": "oklch(53.18% 0.2399 256.9900584162342)", "$type": "color" },
157
- "red-200": { "$value": "oklch(95.41% 0.0299 14.252646656611997)", "$type": "color" },
158
- "red-700": { "$value": "oklch(62.56% 0.2524 23.03)", "$type": "color" },
159
- "red-900": { "$value": "oklch(54.99% 0.232 25.29)", "$type": "color" },
160
- "amber-200": { "$value": "oklch(96.81% 0.0495 90.24227879900472)", "$type": "color" },
161
- "amber-700": { "$value": "oklch(81.87% 0.1969 76.46)", "$type": "color" },
162
- "amber-900": { "$value": "oklch(52.79% 0.1496 54.65)", "$type": "color" },
163
- "green-200": { "$value": "oklch(96.92% 0.037 147.15)", "$type": "color" },
164
- "green-700": { "$value": "oklch(64.58% 0.1746 147.27)", "$type": "color" },
165
- "green-900": { "$value": "oklch(51.75% 0.1453 147.65)", "$type": "color" },
166
- "teal-300": { "$value": "oklch(94.92% 0.0478 182.07)", "$type": "color" },
167
- "teal-700": { "$value": "oklch(64.92% 0.1572 181.95)", "$type": "color" },
168
- "teal-900": { "$value": "oklch(52.08% 0.1251 182.93)", "$type": "color" },
169
- "purple-200": { "$value": "oklch(96.73% 0.0228 309.8)", "$type": "color" },
170
- "purple-700": { "$value": "oklch(55.5% 0.3008 306.12)", "$type": "color" },
171
- "purple-900": { "$value": "oklch(47.18% 0.2579 304)", "$type": "color" },
172
- "pink-300": { "$value": "oklch(93.83% 0.0451 356.29)", "$type": "color" },
173
- "pink-700": { "$value": "oklch(63.52% 0.238 1.01)", "$type": "color" },
174
- "pink-900": { "$value": "oklch(53.5% 0.2058 2.84)", "$type": "color" },
431
+ "blue-200": {
432
+ "$value": "oklch(96.29% 0.0195 250.59)",
433
+ "$type": "color"
434
+ },
435
+ "blue-700": {
436
+ "$value": "oklch(57.61% 0.2508 258.23)",
437
+ "$type": "color"
438
+ },
439
+ "blue-900": {
440
+ "$value": "oklch(53.18% 0.2399 256.9900584162342)",
441
+ "$type": "color"
442
+ },
443
+ "red-200": {
444
+ "$value": "oklch(95.41% 0.0299 14.252646656611997)",
445
+ "$type": "color"
446
+ },
447
+ "red-700": {
448
+ "$value": "oklch(62.56% 0.2524 23.03)",
449
+ "$type": "color"
450
+ },
451
+ "red-900": {
452
+ "$value": "oklch(54.99% 0.232 25.29)",
453
+ "$type": "color"
454
+ },
455
+ "amber-200": {
456
+ "$value": "oklch(96.81% 0.0495 90.24227879900472)",
457
+ "$type": "color"
458
+ },
459
+ "amber-700": {
460
+ "$value": "oklch(81.87% 0.1969 76.46)",
461
+ "$type": "color"
462
+ },
463
+ "amber-900": {
464
+ "$value": "oklch(52.79% 0.1496 54.65)",
465
+ "$type": "color"
466
+ },
467
+ "green-200": {
468
+ "$value": "oklch(96.92% 0.037 147.15)",
469
+ "$type": "color"
470
+ },
471
+ "green-700": {
472
+ "$value": "oklch(64.58% 0.1746 147.27)",
473
+ "$type": "color"
474
+ },
475
+ "green-900": {
476
+ "$value": "oklch(51.75% 0.1453 147.65)",
477
+ "$type": "color"
478
+ },
479
+ "teal-300": {
480
+ "$value": "oklch(94.92% 0.0478 182.07)",
481
+ "$type": "color"
482
+ },
483
+ "teal-700": {
484
+ "$value": "oklch(64.92% 0.1572 181.95)",
485
+ "$type": "color"
486
+ },
487
+ "teal-900": {
488
+ "$value": "oklch(52.08% 0.1251 182.93)",
489
+ "$type": "color"
490
+ },
491
+ "purple-200": {
492
+ "$value": "oklch(96.73% 0.0228 309.8)",
493
+ "$type": "color"
494
+ },
495
+ "purple-700": {
496
+ "$value": "oklch(55.5% 0.3008 306.12)",
497
+ "$type": "color"
498
+ },
499
+ "purple-900": {
500
+ "$value": "oklch(47.18% 0.2579 304)",
501
+ "$type": "color"
502
+ },
503
+ "pink-300": {
504
+ "$value": "oklch(93.83% 0.0451 356.29)",
505
+ "$type": "color"
506
+ },
507
+ "pink-700": {
508
+ "$value": "oklch(63.52% 0.238 1.01)",
509
+ "$type": "color"
510
+ },
511
+ "pink-900": {
512
+ "$value": "oklch(53.5% 0.2058 2.84)",
513
+ "$type": "color"
514
+ },
175
515
  "gray-100": {
176
516
  "$value": "hsla(0, 0%, 95%, 1)",
177
517
  "$type": "color",
178
- "$extensions": { "com.nebutra.oklch": "oklch(0.953 0 0)" }
518
+ "$extensions": {
519
+ "com.nebutra.oklch": "oklch(0.953 0 0)"
520
+ }
179
521
  },
180
522
  "gray-200": {
181
523
  "$value": "hsla(0, 0%, 92%, 1)",
182
524
  "$type": "color",
183
- "$extensions": { "com.nebutra.oklch": "oklch(0.929 0 0)" }
525
+ "$extensions": {
526
+ "com.nebutra.oklch": "oklch(0.929 0 0)"
527
+ }
184
528
  },
185
529
  "gray-500": {
186
530
  "$value": "hsla(0, 0%, 79%, 1)",
187
531
  "$type": "color",
188
- "$extensions": { "com.nebutra.oklch": "oklch(0.81 0 0)" }
532
+ "$extensions": {
533
+ "com.nebutra.oklch": "oklch(0.81 0 0)"
534
+ }
189
535
  },
190
536
  "gray-600": {
191
537
  "$value": "hsla(0, 0%, 66%, 1)",
192
538
  "$type": "color",
193
- "$extensions": { "com.nebutra.oklch": "oklch(0.69 0 0)" }
539
+ "$extensions": {
540
+ "com.nebutra.oklch": "oklch(0.69 0 0)"
541
+ }
194
542
  },
195
543
  "gray-700": {
196
544
  "$value": "hsla(0, 0%, 56%, 1)",
197
545
  "$type": "color",
198
- "$extensions": { "com.nebutra.oklch": "oklch(0.598 0 0)" }
546
+ "$extensions": {
547
+ "com.nebutra.oklch": "oklch(0.598 0 0)"
548
+ }
199
549
  },
200
550
  "gray-1000": {
201
551
  "$value": "hsla(0, 0%, 9%, 1)",
202
552
  "$type": "color",
203
- "$extensions": { "com.nebutra.oklch": "oklch(0.215 0 0)" }
553
+ "$extensions": {
554
+ "com.nebutra.oklch": "oklch(0.215 0 0)"
555
+ }
204
556
  },
205
557
  "background-100": {
206
558
  "$value": "hsla(0, 0%, 100%, 1)",
207
559
  "$type": "color",
208
- "$extensions": { "com.nebutra.oklch": "oklch(1 0 0)" }
560
+ "$extensions": {
561
+ "com.nebutra.oklch": "oklch(1 0 0)"
562
+ }
563
+ },
564
+ "trial-start": {
565
+ "$value": "rgb(0, 112, 243)",
566
+ "$type": "color"
209
567
  },
210
- "trial-start": { "$value": "rgb(0, 112, 243)", "$type": "color" },
211
- "trial-end": { "$value": "rgb(248, 28, 229)", "$type": "color" },
212
- "turbo-start": { "$value": "#ff1e56", "$type": "color" },
213
- "turbo-end": { "$value": "#0096ff", "$type": "color" }
568
+ "trial-end": {
569
+ "$value": "rgb(248, 28, 229)",
570
+ "$type": "color"
571
+ },
572
+ "turbo-start": {
573
+ "$value": "#ff1e56",
574
+ "$type": "color"
575
+ },
576
+ "turbo-end": {
577
+ "$value": "#0096ff",
578
+ "$type": "color"
579
+ }
214
580
  },
215
581
  "elevation": {
216
- "xs": { "$value": "0 1px 2px 0 rgb(0 0 0 / 0.05)", "$type": "shadow" },
582
+ "xs": {
583
+ "$value": "0 1px 2px 0 rgb(0 0 0 / 0.05)",
584
+ "$type": "shadow"
585
+ },
217
586
  "sm": {
218
587
  "$value": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
219
588
  "$type": "shadow"
@@ -230,7 +599,10 @@
230
599
  "$value": "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",
231
600
  "$type": "shadow"
232
601
  },
233
- "2xl": { "$value": "0 25px 50px -12px rgb(0 0 0 / 0.25)", "$type": "shadow" },
602
+ "2xl": {
603
+ "$value": "0 25px 50px -12px rgb(0 0 0 / 0.25)",
604
+ "$type": "shadow"
605
+ },
234
606
  "brand": {
235
607
  "$value": "0 0 0 1px rgb(0 51 254 / 0.15), 0 4px 20px -2px rgb(0 51 254 / 0.2)",
236
608
  "$type": "shadow"
@@ -238,6 +610,66 @@
238
610
  "brand-lg": {
239
611
  "$value": "0 0 0 1px rgb(0 51 254 / 0.2), 0 8px 40px -4px rgb(0 51 254 / 0.3)",
240
612
  "$type": "shadow"
613
+ },
614
+ "ambient-sm": {
615
+ "$value": "0 1px 2px -1px hsl(222 47% 11% / 0.06), 0 6px 16px -6px hsl(222 47% 11% / 0.12)",
616
+ "$type": "shadow",
617
+ "$description": "Ambient elevation, small. Contact layer plus a wide soft pool — the marketing-surface counterpart to the tight xs..2xl product ramp."
618
+ },
619
+ "ambient-md": {
620
+ "$value": "0 2px 4px -2px hsl(222 47% 11% / 0.06), 0 12px 32px -10px hsl(222 47% 11% / 0.14)",
621
+ "$type": "shadow",
622
+ "$description": "Ambient elevation, medium. Default resting depth for a floating marketing card."
623
+ },
624
+ "ambient-lg": {
625
+ "$value": "0 4px 8px -4px hsl(222 47% 11% / 0.06), 0 24px 56px -18px hsl(222 47% 11% / 0.16)",
626
+ "$type": "shadow",
627
+ "$description": "Ambient elevation, large. One step up from md; use for hover of a md surface, not as a resting default."
628
+ },
629
+ "glass-sm": {
630
+ "$value": "inset 0 1px 0 rgb(255 255 255 / 0.5), 0 1px 2px -1px hsl(222 47% 11% / 0.06), 0 6px 16px -6px hsl(222 47% 11% / 0.12)",
631
+ "$type": "shadow",
632
+ "$description": "Ambient-sm plus a lit top edge, for translucent panels over a blurred backdrop."
633
+ },
634
+ "glass-md": {
635
+ "$value": "inset 0 1px 0 rgb(255 255 255 / 0.5), 0 2px 4px -2px hsl(222 47% 11% / 0.06), 0 12px 32px -10px hsl(222 47% 11% / 0.14)",
636
+ "$type": "shadow",
637
+ "$description": "Ambient-md plus a lit top edge."
638
+ },
639
+ "glass-lg": {
640
+ "$value": "inset 0 1px 0 rgb(255 255 255 / 0.5), 0 4px 8px -4px hsl(222 47% 11% / 0.06), 0 24px 56px -18px hsl(222 47% 11% / 0.16)",
641
+ "$type": "shadow",
642
+ "$description": "Ambient-lg plus a lit top edge."
643
+ },
644
+ "sheen": {
645
+ "$value": "inset 0 1px 0 rgb(255 255 255 / 0.2)",
646
+ "$type": "shadow",
647
+ "$description": "Top-edge sheen for solid inverted fills (bg-foreground). Lifts with light on a dark fill, with shade on a light one."
648
+ },
649
+ "ambient-glow": {
650
+ "$value": "0 0 80px hsl(222 47% 11% / 0.1)",
651
+ "$type": "shadow",
652
+ "$description": "Centred offsetless halo — the only non-directional step on the ramp. For a translucent panel that needs separation from its backdrop without reading as lifted off a surface. In dark mode this inverts to a low-alpha light halo, because a black halo cannot read against a dark surround."
653
+ },
654
+ "glow-accent": {
655
+ "$value": "0 8px 32px rgb(0 0 0 / 0.4), 0 0 60px color-mix(in srgb, var(--brand-accent) 8%, transparent)",
656
+ "$type": "shadow",
657
+ "$description": "Directional pool plus a wide brand-accent halo, for fixed dark-glass surfaces. The pool is theme-invariant black on purpose: the surfaces that carry an accent halo present the same dark glass in both themes, so a theme-flipping pool would lighten in light mode exactly where the panel needs the most separation. Accent sourced from --brand-accent, so it follows the light and dark accent values."
658
+ },
659
+ "glow-accent-lg": {
660
+ "$value": "0 12px 48px rgb(0 0 0 / 0.5), 0 0 80px color-mix(in srgb, var(--brand-accent) 12%, transparent)",
661
+ "$type": "shadow",
662
+ "$description": "Hover escalation of glow-accent. Deeper pool, wider and stronger accent halo."
663
+ },
664
+ "glow-accent-sm": {
665
+ "$value": "0 0 20px color-mix(in srgb, var(--brand-accent) 10%, transparent)",
666
+ "$type": "shadow",
667
+ "$description": "Accent halo alone, no pool. For a small accent-tinted chip or icon plate inside a glow-accent surface."
668
+ },
669
+ "glow-primary": {
670
+ "$value": "0 20px 25px -5px hsl(var(--primary) / 0.05), 0 8px 10px -6px hsl(var(--primary) / 0.05)",
671
+ "$type": "shadow",
672
+ "$description": "xl geometry tinted with the action fill at 5 percent. For the emphasised card in a set (a highlighted plan) where the lift should read as coloured rather than neutral."
241
673
  }
242
674
  }
243
675
  }