@uncinq/design-tokens 0.3.0 → 1.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.
Files changed (66) hide show
  1. package/README.md +122 -53
  2. package/dist/css/primitive/blur.css +14 -0
  3. package/{tokens → dist/css}/primitive/color.css +53 -70
  4. package/dist/css/primitive/font.css +29 -0
  5. package/dist/css/primitive/shadow.css +16 -0
  6. package/{tokens → dist/css}/primitive/size.css +14 -17
  7. package/{tokens → dist/css}/primitive.css +0 -1
  8. package/{tokens → dist/css}/semantic/blur.css +4 -0
  9. package/dist/css/semantic/border.css +14 -0
  10. package/dist/css/semantic/color.css +99 -0
  11. package/dist/css/semantic/focus.css +13 -0
  12. package/dist/css/semantic/form.css +109 -0
  13. package/dist/css/semantic/grid.css +15 -0
  14. package/dist/css/semantic/icon.css +21 -0
  15. package/dist/css/semantic/mediaqueries.css +17 -0
  16. package/dist/css/semantic/motion.css +28 -0
  17. package/dist/css/semantic/opacity.css +15 -0
  18. package/dist/css/semantic/radius.css +20 -0
  19. package/dist/css/semantic/ratio.css +18 -0
  20. package/dist/css/semantic/shadow.css +12 -0
  21. package/dist/css/semantic/size.css +14 -0
  22. package/dist/css/semantic/spacing.css +30 -0
  23. package/dist/css/semantic/typography.css +48 -0
  24. package/dist/css/semantic/z-index.css +18 -0
  25. package/{tokens → dist/css}/semantic.css +2 -0
  26. package/package.json +22 -11
  27. package/tokens/primitive/blur.json +24 -0
  28. package/tokens/primitive/color.json +259 -0
  29. package/tokens/primitive/font.json +93 -0
  30. package/tokens/primitive/shadow.json +113 -0
  31. package/tokens/primitive/size.json +196 -0
  32. package/tokens/semantic/blur.json +8 -0
  33. package/tokens/semantic/border.json +28 -0
  34. package/tokens/semantic/color.json +343 -0
  35. package/tokens/semantic/focus.json +22 -0
  36. package/tokens/semantic/form.json +550 -0
  37. package/tokens/semantic/grid.json +28 -0
  38. package/tokens/semantic/icon.json +52 -0
  39. package/tokens/semantic/motion.json +86 -0
  40. package/tokens/semantic/opacity.json +28 -0
  41. package/tokens/semantic/radius.json +48 -0
  42. package/tokens/semantic/ratio.json +40 -0
  43. package/tokens/semantic/shadow.json +18 -0
  44. package/tokens/semantic/size.json +24 -0
  45. package/tokens/semantic/spacing.json +90 -0
  46. package/tokens/semantic/typography.json +174 -0
  47. package/tokens/semantic/z-index.json +40 -0
  48. package/tokens/primitive/blur.css +0 -10
  49. package/tokens/primitive/font.css +0 -32
  50. package/tokens/primitive/opacity.css +0 -12
  51. package/tokens/primitive/shadow.css +0 -19
  52. package/tokens/semantic/border.css +0 -15
  53. package/tokens/semantic/color.css +0 -108
  54. package/tokens/semantic/focus.css +0 -9
  55. package/tokens/semantic/form.css +0 -105
  56. package/tokens/semantic/grid.css +0 -53
  57. package/tokens/semantic/icon.css +0 -15
  58. package/tokens/semantic/motion.css +0 -46
  59. package/tokens/semantic/opacity.css +0 -9
  60. package/tokens/semantic/radius.css +0 -19
  61. package/tokens/semantic/ratio.css +0 -23
  62. package/tokens/semantic/size.css +0 -20
  63. package/tokens/semantic/spacing.css +0 -41
  64. package/tokens/semantic/typography.css +0 -78
  65. package/tokens/semantic/z-index.css +0 -14
  66. /package/{tokens → dist/css}/index.css +0 -0
package/README.md CHANGED
@@ -49,14 +49,17 @@ Scoped to a specific component. Generic component tokens are provided by [@uncin
49
49
 
50
50
  ```css
51
51
  --alert-border-radius: var(--radius-none);
52
- --btn-padding: var(--spacing-control);
52
+ --btn-padding-inline: var(--spacing-control);
53
+ --btn-padding-block: var(--spacing-control);
53
54
  ```
54
55
 
55
56
  ---
56
57
 
57
58
  ## Naming convention
58
59
 
59
- All tokens follow the pattern: `--{category}-{subcategory?}-{variant}-{state?}`
60
+ ### Semantic tokens
61
+
62
+ Global semantic tokens follow: `--{category}-{subcategory?}-{variant}-{state?}`
60
63
 
61
64
  ```
62
65
  --{category} --color
@@ -65,14 +68,36 @@ All tokens follow the pattern: `--{category}-{subcategory?}-{variant}-{state?}`
65
68
  -{state} --color-text-disabled
66
69
  ```
67
70
 
71
+ ### Component tokens
72
+
73
+ Component tokens follow: `--{component}-{property}-{sub-property?}-{state?}`
74
+
75
+ The property mirrors the CSS property name — `background-color`, `border-color`, `text-decoration-color` — so the token reads the same way as the CSS declaration it controls.
76
+
77
+ ```
78
+ --{component} --btn
79
+ -{property} --btn-background-color
80
+ -{sub-property} --btn-text-decoration-color (text-decoration + color)
81
+ -{state} --btn-background-color-hover
82
+ ```
83
+
68
84
  ### Rules
69
85
 
70
86
  - **Lowercase kebab-case** — always
71
87
  - **No component names** in primitive or semantic tokens (`--button-*` belongs in component tokens, not here)
72
88
  - **Semantic tokens are named by intent** — they may reference a primitive via `var()` or carry a raw value when the value itself has design intent (e.g. `--z-index-modal: 400`, `--radius-pill: 9999px`)
89
+ - **`color-[role]` for all color tokens** — `color` is the category prefix, the UI role follows: `color-background`, `color-border`, `color-text`, `color-accent`, `color-placeholder`. This groups all color tokens alphabetically under `color-*` and mirrors the structure of global semantic tokens (`--color-background` → `--btn-color-background`). `background` is never abbreviated: `color-background` not `color-bg`.
73
90
  - **States at the end** — `-hover`, `-focus`, `-active`, `-disabled`, `-checked`
74
- - **`color-*` prefix for all color values** even when the CSS property is `background-color`, `border-color`, etc.
75
- - **Alphabetical order** — tokens within a file are sorted alphabetically; group related tokens with a comment when the file has many entries:
91
+ - **Alphabetical order** tokens within a file are sorted alphabetically within each group; group related tokens with a comment when the file has many entries:
92
+
93
+ | Token | Role | CSS property |
94
+ | --- | --- | --- |
95
+ | `--btn-color-background` | background | `background-color` |
96
+ | `--btn-color-border` | border | `border-color` |
97
+ | `--btn-color-text` | text | `color` |
98
+ | `--btn-color-text-decoration` | text-decoration | `text-decoration-color` |
99
+ | `--form-color-accent` | accent | `color` |
100
+ | `--input-color-placeholder` | placeholder | `color` |
76
101
 
77
102
  ```css
78
103
  /* Brand */
@@ -98,28 +123,27 @@ All tokens follow the pattern: `--{category}-{subcategory?}-{variant}-{state?}`
98
123
 
99
124
  | Category | Covers | Example tokens |
100
125
  | --- | --- | --- |
101
- | `color` | All color values | `--color-brand`, `--color-bg-muted`, `--color-text-on-dark` |
126
+ | `color` | All color values | `--color-brand`, `--color-background-muted`, `--color-text-on-dark` |
102
127
  | `font-family` | Typefaces | `--font-family-sans`, `--font-family-heading` |
103
128
  | `font-size` | Text sizes | `--font-size-sm`, `--font-size-heading-01` |
104
129
  | `font-weight` | Weight values | `--font-weight-bold`, `--font-weight-heading` |
105
130
  | `line-height` | Line heights | `--line-height-tight`, `--line-height-heading` |
106
- | `letter-spacing` | Tracking | `--letter-spacing-large` |
107
- | `text-decoration` | Decoration props | `--text-decoration-underline`, `--text-decoration-offset` |
131
+ | `letter-spacing` | Tracking | `--letter-spacing-none`, `--letter-spacing-md` |
132
+ | `text-decoration` | Decoration props | `--text-decoration-offset` |
108
133
  | `spacing` | Margin / padding | `--spacing-md`, `--spacing-section` |
109
134
  | `size` | Width / height | `--size-16`, `--size-tablet` |
110
135
  | `radius` | Border radius | `--radius-md`, `--radius-pill` |
111
- | `border` | Border style/width | `--border-width-normal`, `--border-style-solid` |
136
+ | `border` | Border style/width | `--border-width-normal`, `--border-style-normal` |
112
137
  | `shadow` | Box shadows | `--shadow-md`, `--shadow-center-sm` |
113
138
  | `duration` | Animation timing | `--duration-fast` |
114
139
  | `easing` | Timing functions | `--easing-bounce` |
115
140
  | `transition` | Shorthand transitions | `--transition-normal`, `--transition-color` |
116
141
  | `ratio` | Aspect ratios | `--ratio-16-9` |
117
- | `flex` | Flex-basis fractions | `--flex-half`, `--flex-third` |
118
142
  | `fluid-text` | Responsive fluid type scale (Utopia) | `--fluid-text-sm`, `--fluid-text-xl` |
119
143
  | `fluid-spacing` | Responsive fluid spacing scale (Utopia) | `--fluid-spacing-sm`, `--fluid-spacing-lg` |
120
144
  | `focus` | Focus ring tokens | `--focus-color`, `--focus-outline-width` |
121
145
  | `opacity` | Opacity values | `--opacity-disabled`, `--opacity-overlay` |
122
- | `span` | Grid column spans | `--span-6`, `--span-4` |
146
+ | `span` | Grid column spans | `--span-full`, `--span-half` |
123
147
  | `z-index` | Stacking order | `--z-index-modal`, `--z-index-dropdown` |
124
148
  | `max-width` | Readability caps | `--max-width-paragraph` |
125
149
 
@@ -170,7 +194,7 @@ The primitive palette provides **11 steps per hue** (50 → 950), named numerica
170
194
  | `violet` | ≈ 293° | Modern violet |
171
195
  | `yellow` | ≈ 86° | Pure yellow |
172
196
 
173
- Plus `--color-black` and `--color-white` (with `*-rgb` variants for `rgb()` opacity usage).
197
+ Plus `--color-black` and `--color-white`.
174
198
 
175
199
  **Step guide:**
176
200
 
@@ -188,7 +212,7 @@ Plus `--color-black` and `--color-white` (with `*-rgb` variants for `rgb()` opac
188
212
  | 900 | ≈ 0.33 | ≈ 0.41 | Near-dark, very high contrast |
189
213
  | 950 | ≈ 0.22 | ≈ 0.28 | Darkest tint, almost black |
190
214
 
191
- > **Note OKLCH** — L est perceptuellement uniforme, mais les hues intrinsèquement brillantes (amber, yellow, lime) ont des valeurs L naturellement plus élevées aux steps 400–700. C'est un comportement attendu, pas une erreur de calibration. Gray va dans l'autre sens (chroma ≈ 0, pas de boost de brillance, L légèrement plus bas). La colonne "L avg" est représentative des hues chromatiques froides (blue, red, green, violet…).
215
+ > **Note on OKLCH** — L is perceptually uniform, but intrinsically bright hues (amber, yellow, lime) have naturally higher L values at steps 400–700. This is expected behavior, not a calibration error. Gray goes the other way (chroma ≈ 0, no brightness boost, L slightly lower). The "L avg" column is representative of cool chromatic hues (blue, red, green, violet…).
192
216
 
193
217
  ### Semantic color tokens
194
218
 
@@ -222,11 +246,11 @@ The default brand is **sienna** — a warm brick-red. Override it in your projec
222
246
 
223
247
  | Token | Default | Usage |
224
248
  |-------|---------|-------|
225
- | `--color-bg` | white | Page background |
226
- | `--color-bg-muted` | gray-100 | Subtle section backgrounds |
227
- | `--color-bg-surface` | = `--color-bg` | Card / panel backgrounds |
228
- | `--color-bg-media` | gray-200 | Image placeholders, skeleton loaders |
229
- | `--color-bg-accent` | = `--color-accent` | Highlighted sections |
249
+ | `--color-background` | white | Page background |
250
+ | `--color-background-muted` | gray-100 | Subtle section backgrounds |
251
+ | `--color-background-surface` | = `--color-background` | Card / panel backgrounds |
252
+ | `--color-background-media` | gray-200 | Image placeholders, skeleton loaders |
253
+ | `--color-background-accent` | = `--color-accent` | Highlighted sections |
230
254
 
231
255
  #### Text
232
256
 
@@ -307,30 +331,61 @@ Then reference it in `tokens/semantic/color.css` or your project's `@layer confi
307
331
 
308
332
  ---
309
333
 
310
- ## CSS cascade layers
334
+ ## Customization
311
335
 
312
- All tokens are declared inside `@layer config`, the lowest-priority layer in the stack:
336
+ Two approaches are available depending on how deep the override needs to go.
313
337
 
314
- ```css
315
- @layer config, base, layouts, vendors, components;
316
- ```
338
+ ### 1 — CSS override (recommended)
317
339
 
318
- This means any project can **override any token** in its own `@layer config` block, simply by importing after this package:
340
+ All tokens live in `@layer config`, the lowest-priority layer in the stack. Any `@layer config` block imported **after** this package wins by source order no specificity tricks needed.
319
341
 
320
342
  ```css
321
- @import '@uncinq/design-tokens/tokens/index.css'; /* package defaults */
343
+ @import '@uncinq/design-tokens';
322
344
 
323
- /* your project overrides — same layer, wins by order */
324
345
  @layer config {
325
346
  :root {
326
- --color-brand: #0070f3;
327
- --font-family-sans: 'Inter', system-ui, sans-serif;
347
+ --color-brand: var(--color-violet-600);
348
+ --color-brand-muted: var(--color-violet-100);
349
+ --color-brand-hover: var(--color-violet-700);
350
+ --color-brand-strong: var(--color-violet-900);
351
+ --font-family-sans: 'Inter', system-ui, sans-serif;
328
352
  }
329
353
  }
330
354
  ```
331
355
 
356
+ This covers most use cases: brand color, typography, spacing tweaks, component-level tokens.
357
+
332
358
  → MDN: [Using CSS cascade layers](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics/Cascade_layers)
333
359
 
360
+ ### 2 — JSON + build in the consuming project
361
+
362
+ The package exports its raw JSON source files (`./tokens/*`). A project can source them directly in its own [Style Dictionary](https://styledictionary.com/) config alongside project-specific token files:
363
+
364
+ ```js
365
+ // style-dictionary.config.js (in the consuming project)
366
+ export default {
367
+ source: [
368
+ 'node_modules/@uncinq/design-tokens/tokens/**/*.json',
369
+ 'tokens/**/*.json', // project tokens — extend or override the package
370
+ ],
371
+ // ...
372
+ };
373
+ ```
374
+
375
+ Project token files that define the same path as a package token will override it during the build. New paths are additive.
376
+
377
+ Use this approach to:
378
+
379
+ - Redefine the primitive palette entirely (new brand hue, different scale)
380
+ - Add semantic tokens that don't exist in the package
381
+ - Generate additional output formats (JS, SCSS…)
382
+
383
+ | Need | Approach |
384
+ | --- | --- |
385
+ | Change brand, typography, a few tokens | CSS `@layer config` |
386
+ | Redefine the entire primitive palette | JSON + build |
387
+ | Add project-specific tokens | JSON + build (or CSS if few) |
388
+
334
389
  ---
335
390
 
336
391
  ## Installation
@@ -348,48 +403,62 @@ yarn add @uncinq/design-tokens
348
403
  @import '@uncinq/design-tokens';
349
404
 
350
405
  /* or by layer */
351
- @import '@uncinq/design-tokens/tokens/primitive.css';
352
- @import '@uncinq/design-tokens/tokens/semantic.css';
406
+ @import '@uncinq/design-tokens/css/primitive.css';
407
+ @import '@uncinq/design-tokens/css/semantic.css';
353
408
 
354
409
  /* or file by file */
355
- @import '@uncinq/design-tokens/tokens/primitive/color.css';
356
- @import '@uncinq/design-tokens/tokens/semantic/color.css';
410
+ @import '@uncinq/design-tokens/css/primitive/color.css';
411
+ @import '@uncinq/design-tokens/css/semantic/color.css';
357
412
  ```
358
413
 
359
414
  ### Usage — CDN (no build step)
360
415
 
361
416
  ```html
362
- <link rel="stylesheet" href="https://unpkg.com/@uncinq/design-tokens/tokens/index.css">
417
+ <link rel="stylesheet" href="https://unpkg.com/@uncinq/design-tokens">
363
418
  ```
364
419
 
365
420
  ---
366
421
 
367
422
  ## File structure
368
423
 
424
+ JSON source files (DTCG format — do not edit `dist/`):
425
+
369
426
  ```
370
427
  tokens/
371
- index.css ← imports all layers in order
372
428
  primitive/
373
- color.csscolor palette (Tailwind v3 — amber, blue, gray, green…)
374
- font.css font families, weights, line-heights, text-decoration
375
- opacity.css opacity scale (0 1)
376
- shadow.css ← box-shadow scale
377
- size.css ← rem scale (--size-1 → --size-1920)
429
+ blur.jsonblur scale (xs xl)
430
+ color.json full color palette (OKLCH, 11 steps per hue)
431
+ font.json font families, weights, sizes, line-heights
432
+ shadow.json ← box-shadow scale
433
+ size.json ← rem scale (--size-1 → --size-1920)
378
434
  semantic/
379
- border.css border styles and widths
380
- color.css purposeful color aliases (--color-brand, --color-bg…)
381
- fluid.css responsive clamp() scales (--fluid-text-*, --fluid-spacing-*)
382
- focus.css ← focus ring tokens (color, style, width, offset)
383
- form.css ← form control tokens (input, label, checkbox, switch…)
384
- grid.css ← columns, gap, flex fractions, integer spans (--span-1 → --span-24)
385
- motion.css duration, easing (standard + expressive + spring), transitions
386
- opacity.csspurposeful opacity aliases (disabled, overlay)
387
- radius.css border-radius scale + purposeful aliases
388
- ratio.css aspect-ratio values (16/9, 4/3…)
389
- size.css T-shirt scale + breakpoint aliases
390
- spacing.cssspacing scale + purposeful aliases
391
- typography.css font-size scale (fixed + fluid), heading sizes, max-widths
392
- z-index.css stacking order (below tooltip)
435
+ blur.json purposeful blur aliases
436
+ border.json border styles and widths
437
+ color.json purposeful color aliases (--color-brand, --color-background…)
438
+ focus.json ← focus ring tokens (color, style, width, offset)
439
+ form.json ← form control tokens (input, label, checkbox, switch…)
440
+ grid.json ← columns, gap, flex fractions
441
+ icon.json SVG icon tokens (data URI)
442
+ motion.jsonduration, easing, transitions
443
+ opacity.json purposeful opacity aliases (disabled, overlay)
444
+ radius.json border-radius scale + purposeful aliases
445
+ ratio.json aspect-ratio values (16/9, 4/3…)
446
+ shadow.jsonpurposeful shadow aliases
447
+ size.json T-shirt scale + breakpoint aliases
448
+ spacing.json spacing scale + fluid clamp() aliases
449
+ typography.json ← font-size scale (fixed + fluid), heading sizes
450
+ z-index.json ← stacking order
451
+ ```
452
+
453
+ Generated CSS (`dist/css/` — built by `npm run build`, do not edit):
454
+
455
+ ```
456
+ dist/css/
457
+ index.css ← imports everything
458
+ primitive.css ← imports all primitive files
459
+ semantic.css ← imports all semantic files
460
+ primitive/ ← one file per tokens/primitive/*.json
461
+ semantic/ ← one file per tokens/semantic/*.json
393
462
  ```
394
463
 
395
464
  ---
@@ -398,5 +467,5 @@ tokens/
398
467
 
399
468
  - [DTCG — format and concepts](docs/dtcg.md)
400
469
  - [DTCG specification](https://tr.designtokens.org/format/) — W3C Community Group draft
401
- - [Style Dictionary](https://amzn.github.io/style-dictionary/) — token build pipeline (JSON → CSS/SCSS/JS)
470
+ - [Style Dictionary v5](https://styledictionary.com/) — token build pipeline, see [docs/STYLE-DICTIONARY.md](docs/STYLE-DICTIONARY.md)
402
471
  - [MDN: CSS cascade layers](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics/Cascade_layers)
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+
5
+ /* primitive/blur.css */
6
+ @layer config {
7
+ :root {
8
+ --blur-xs: 2px;
9
+ --blur-sm: 4px;
10
+ --blur-md: 8px;
11
+ --blur-lg: 16px;
12
+ --blur-xl: 32px;
13
+ }
14
+ }
@@ -1,20 +1,13 @@
1
- /* primitive/color.css */
2
- /*
3
- * Primitive color palette in OKLCH.
4
- * 11 steps per hue: 50 → 950.
5
- * Values align with Tailwind v4 hue angles.
6
- *
7
- * DO NOT reference these directly in components — use semantic tokens instead.
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
8
3
  */
4
+
5
+ /* primitive/color.css */
9
6
  @layer config {
10
7
  :root {
11
8
  --color-black: oklch(0 0 0);
12
- --color-black-rgb: 0 0 0;
13
9
  --color-white: oklch(1 0 0);
14
- --color-white-rgb: 255 255 255;
15
-
16
- /* ── Amber — H ≈ 70° ───────────────────────────────────────────────── */
17
- --color-amber-50: oklch(0.987 0.022 95.277);
10
+ --color-amber-50: oklch(0.987 0.022 95.277);
18
11
  --color-amber-100: oklch(0.962 0.059 95.617);
19
12
  --color-amber-200: oklch(0.924 0.120 95.746);
20
13
  --color-amber-300: oklch(0.879 0.169 91.605);
@@ -25,9 +18,7 @@
25
18
  --color-amber-800: oklch(0.473 0.137 46.201);
26
19
  --color-amber-900: oklch(0.414 0.112 45.904);
27
20
  --color-amber-950: oklch(0.279 0.077 45.635);
28
-
29
- /* ── Blue — H ≈ 260° ───────────────────────────────────────────────── */
30
- --color-blue-50: oklch(0.970 0.014 254.604);
21
+ --color-blue-50: oklch(0.970 0.014 254.604);
31
22
  --color-blue-100: oklch(0.932 0.032 255.585);
32
23
  --color-blue-200: oklch(0.882 0.059 254.128);
33
24
  --color-blue-300: oklch(0.809 0.105 251.813);
@@ -38,9 +29,7 @@
38
29
  --color-blue-800: oklch(0.424 0.199 265.638);
39
30
  --color-blue-900: oklch(0.379 0.146 265.522);
40
31
  --color-blue-950: oklch(0.282 0.091 267.935);
41
-
42
- /* ── Cyan — H ≈ 215° ───────────────────────────────────────────────── */
43
- --color-cyan-50: oklch(0.984 0.019 200.873);
32
+ --color-cyan-50: oklch(0.984 0.019 200.873);
44
33
  --color-cyan-100: oklch(0.956 0.045 203.388);
45
34
  --color-cyan-200: oklch(0.917 0.080 205.041);
46
35
  --color-cyan-300: oklch(0.865 0.127 207.078);
@@ -51,9 +40,29 @@
51
40
  --color-cyan-800: oklch(0.450 0.085 224.283);
52
41
  --color-cyan-900: oklch(0.398 0.070 227.392);
53
42
  --color-cyan-950: oklch(0.302 0.056 229.695);
54
-
55
- /* ── Gray — neutral ─────────────────────────────────────────────────── */
56
- --color-gray-50: oklch(0.985 0.002 247.839);
43
+ --color-emerald-50: oklch(0.979 0.021 166.113);
44
+ --color-emerald-100: oklch(0.950 0.052 163.051);
45
+ --color-emerald-200: oklch(0.905 0.093 164.150);
46
+ --color-emerald-300: oklch(0.845 0.143 164.978);
47
+ --color-emerald-400: oklch(0.765 0.177 163.223);
48
+ --color-emerald-500: oklch(0.696 0.170 162.480);
49
+ --color-emerald-600: oklch(0.596 0.145 163.225);
50
+ --color-emerald-700: oklch(0.508 0.118 165.612);
51
+ --color-emerald-800: oklch(0.432 0.095 166.913);
52
+ --color-emerald-900: oklch(0.378 0.077 168.940);
53
+ --color-emerald-950: oklch(0.262 0.051 172.552);
54
+ --color-fuchsia-50: oklch(0.977 0.017 320.058);
55
+ --color-fuchsia-100: oklch(0.952 0.037 318.852);
56
+ --color-fuchsia-200: oklch(0.903 0.076 319.062);
57
+ --color-fuchsia-300: oklch(0.833 0.145 321.434);
58
+ --color-fuchsia-400: oklch(0.740 0.238 322.160);
59
+ --color-fuchsia-500: oklch(0.667 0.295 322.150);
60
+ --color-fuchsia-600: oklch(0.591 0.293 322.896);
61
+ --color-fuchsia-700: oklch(0.518 0.253 323.949);
62
+ --color-fuchsia-800: oklch(0.452 0.211 324.591);
63
+ --color-fuchsia-900: oklch(0.401 0.170 325.612);
64
+ --color-fuchsia-950: oklch(0.293 0.136 325.661);
65
+ --color-gray-50: oklch(0.985 0.002 247.839);
57
66
  --color-gray-100: oklch(0.967 0.003 264.542);
58
67
  --color-gray-200: oklch(0.928 0.006 264.531);
59
68
  --color-gray-300: oklch(0.872 0.010 258.338);
@@ -64,9 +73,7 @@
64
73
  --color-gray-800: oklch(0.279 0.010 264.542);
65
74
  --color-gray-900: oklch(0.208 0.006 264.542);
66
75
  --color-gray-950: oklch(0.145 0.005 264.542);
67
-
68
- /* ── Green — H ≈ 150° ─────────────────────────────────────────────── */
69
- --color-green-50: oklch(0.982 0.018 155.826);
76
+ --color-green-50: oklch(0.982 0.018 155.826);
70
77
  --color-green-100: oklch(0.962 0.044 156.743);
71
78
  --color-green-200: oklch(0.925 0.084 155.995);
72
79
  --color-green-300: oklch(0.871 0.150 154.449);
@@ -77,9 +84,7 @@
77
84
  --color-green-800: oklch(0.448 0.119 151.328);
78
85
  --color-green-900: oklch(0.393 0.095 152.535);
79
86
  --color-green-950: oklch(0.266 0.065 152.934);
80
-
81
- /* ── Indigo — H ≈ 277° ────────────────────────────────────────────── */
82
- --color-indigo-50: oklch(0.962 0.018 272.314);
87
+ --color-indigo-50: oklch(0.962 0.018 272.314);
83
88
  --color-indigo-100: oklch(0.930 0.034 272.788);
84
89
  --color-indigo-200: oklch(0.870 0.065 274.039);
85
90
  --color-indigo-300: oklch(0.785 0.115 274.713);
@@ -90,9 +95,7 @@
90
95
  --color-indigo-800: oklch(0.398 0.195 277.366);
91
96
  --color-indigo-900: oklch(0.359 0.144 278.697);
92
97
  --color-indigo-950: oklch(0.257 0.090 281.288);
93
-
94
- /* ── Lime — H ≈ 131° ──────────────────────────────────────────────── */
95
- --color-lime-50: oklch(0.986 0.031 120.757);
98
+ --color-lime-50: oklch(0.986 0.031 120.757);
96
99
  --color-lime-100: oklch(0.967 0.067 122.328);
97
100
  --color-lime-200: oklch(0.938 0.127 124.321);
98
101
  --color-lime-300: oklch(0.897 0.196 126.665);
@@ -103,9 +106,7 @@
103
106
  --color-lime-800: oklch(0.453 0.124 130.933);
104
107
  --color-lime-900: oklch(0.405 0.101 131.063);
105
108
  --color-lime-950: oklch(0.274 0.072 132.109);
106
-
107
- /* ── Orange — H ≈ 48° ─────────────────────────────────────────────── */
108
- --color-orange-50: oklch(0.980 0.016 73.684);
109
+ --color-orange-50: oklch(0.980 0.016 73.684);
109
110
  --color-orange-100: oklch(0.954 0.038 75.164);
110
111
  --color-orange-200: oklch(0.901 0.076 70.697);
111
112
  --color-orange-300: oklch(0.837 0.128 66.290);
@@ -116,9 +117,7 @@
116
117
  --color-orange-800: oklch(0.470 0.157 37.304);
117
118
  --color-orange-900: oklch(0.408 0.123 38.172);
118
119
  --color-orange-950: oklch(0.266 0.079 36.259);
119
-
120
- /* ── Pink — H ≈ 354° ──────────────────────────────────────────────── */
121
- --color-pink-50: oklch(0.971 0.014 343.198);
120
+ --color-pink-50: oklch(0.971 0.014 343.198);
122
121
  --color-pink-100: oklch(0.948 0.028 342.258);
123
122
  --color-pink-200: oklch(0.899 0.061 343.231);
124
123
  --color-pink-300: oklch(0.823 0.120 346.018);
@@ -129,9 +128,7 @@
129
128
  --color-pink-800: oklch(0.459 0.187 3.815);
130
129
  --color-pink-900: oklch(0.408 0.153 2.432);
131
130
  --color-pink-950: oklch(0.284 0.109 3.907);
132
-
133
- /* ── Purple — H ≈ 304° ────────────────────────────────────────────── */
134
- --color-purple-50: oklch(0.977 0.014 308.299);
131
+ --color-purple-50: oklch(0.977 0.014 308.299);
135
132
  --color-purple-100: oklch(0.946 0.033 307.174);
136
133
  --color-purple-200: oklch(0.902 0.063 306.703);
137
134
  --color-purple-300: oklch(0.827 0.119 306.383);
@@ -142,9 +139,7 @@
142
139
  --color-purple-800: oklch(0.438 0.218 303.724);
143
140
  --color-purple-900: oklch(0.381 0.176 304.987);
144
141
  --color-purple-950: oklch(0.291 0.149 302.717);
145
-
146
- /* ── Red — H ≈ 25° ────────────────────────────────────────────────── */
147
- --color-red-50: oklch(0.971 0.013 17.380);
142
+ --color-red-50: oklch(0.971 0.013 17.380);
148
143
  --color-red-100: oklch(0.936 0.032 17.717);
149
144
  --color-red-200: oklch(0.885 0.062 18.334);
150
145
  --color-red-300: oklch(0.808 0.114 19.571);
@@ -155,9 +150,7 @@
155
150
  --color-red-800: oklch(0.444 0.177 26.899);
156
151
  --color-red-900: oklch(0.396 0.141 25.723);
157
152
  --color-red-950: oklch(0.258 0.092 26.042);
158
-
159
- /* ── Rose — H ≈ 16° ───────────────────────────────────────────────── */
160
- --color-rose-50: oklch(0.969 0.015 12.422);
153
+ --color-rose-50: oklch(0.969 0.015 12.422);
161
154
  --color-rose-100: oklch(0.941 0.030 12.580);
162
155
  --color-rose-200: oklch(0.892 0.058 10.001);
163
156
  --color-rose-300: oklch(0.810 0.101 2.432);
@@ -168,22 +161,7 @@
168
161
  --color-rose-800: oklch(0.455 0.188 13.697);
169
162
  --color-rose-900: oklch(0.410 0.159 10.272);
170
163
  --color-rose-950: oklch(0.271 0.105 12.094);
171
-
172
- /* ── Sky — H ≈ 237° ───────────────────────────────────────────────── */
173
- --color-sky-50: oklch(0.977 0.013 236.620);
174
- --color-sky-100: oklch(0.951 0.026 236.824);
175
- --color-sky-200: oklch(0.901 0.058 230.902);
176
- --color-sky-300: oklch(0.828 0.111 230.318);
177
- --color-sky-400: oklch(0.746 0.160 232.661);
178
- --color-sky-500: oklch(0.685 0.169 237.323);
179
- --color-sky-600: oklch(0.588 0.158 241.966);
180
- --color-sky-700: oklch(0.500 0.134 242.749);
181
- --color-sky-800: oklch(0.443 0.110 240.790);
182
- --color-sky-900: oklch(0.391 0.090 240.876);
183
- --color-sky-950: oklch(0.293 0.066 243.157);
184
-
185
- /* ── Sienna — H ≈ 23° (crimson #a90940 × terracotta) ─────────────── */
186
- --color-sienna-50: oklch(0.973 0.012 22.0);
164
+ --color-sienna-50: oklch(0.973 0.012 22.0);
187
165
  --color-sienna-100: oklch(0.945 0.028 22.5);
188
166
  --color-sienna-200: oklch(0.900 0.060 23.5);
189
167
  --color-sienna-300: oklch(0.832 0.108 25.0);
@@ -194,9 +172,18 @@
194
172
  --color-sienna-800: oklch(0.380 0.136 18.0);
195
173
  --color-sienna-900: oklch(0.322 0.106 16.0);
196
174
  --color-sienna-950: oklch(0.218 0.072 15.0);
197
-
198
- /* ── Teal — H ≈ 183° ──────────────────────────────────────────────── */
199
- --color-teal-50: oklch(0.984 0.014 180.720);
175
+ --color-sky-50: oklch(0.977 0.013 236.620);
176
+ --color-sky-100: oklch(0.951 0.026 236.824);
177
+ --color-sky-200: oklch(0.901 0.058 230.902);
178
+ --color-sky-300: oklch(0.828 0.111 230.318);
179
+ --color-sky-400: oklch(0.746 0.160 232.661);
180
+ --color-sky-500: oklch(0.685 0.169 237.323);
181
+ --color-sky-600: oklch(0.588 0.158 241.966);
182
+ --color-sky-700: oklch(0.500 0.134 242.749);
183
+ --color-sky-800: oklch(0.443 0.110 240.790);
184
+ --color-sky-900: oklch(0.391 0.090 240.876);
185
+ --color-sky-950: oklch(0.293 0.066 243.157);
186
+ --color-teal-50: oklch(0.984 0.014 180.720);
200
187
  --color-teal-100: oklch(0.953 0.051 180.801);
201
188
  --color-teal-200: oklch(0.910 0.096 180.426);
202
189
  --color-teal-300: oklch(0.855 0.138 181.071);
@@ -207,9 +194,7 @@
207
194
  --color-teal-800: oklch(0.437 0.078 188.216);
208
195
  --color-teal-900: oklch(0.386 0.063 188.416);
209
196
  --color-teal-950: oklch(0.277 0.046 192.524);
210
-
211
- /* ── Violet — H ≈ 293° ────────────────────────────────────────────── */
212
- --color-violet-50: oklch(0.969 0.016 293.756);
197
+ --color-violet-50: oklch(0.969 0.016 293.756);
213
198
  --color-violet-100: oklch(0.943 0.029 294.588);
214
199
  --color-violet-200: oklch(0.894 0.057 293.283);
215
200
  --color-violet-300: oklch(0.811 0.111 293.571);
@@ -220,9 +205,7 @@
220
205
  --color-violet-800: oklch(0.432 0.232 292.222);
221
206
  --color-violet-900: oklch(0.380 0.189 293.745);
222
207
  --color-violet-950: oklch(0.283 0.141 291.089);
223
-
224
- /* ── Yellow — H ≈ 86° ─────────────────────────────────────────────── */
225
- --color-yellow-50: oklch(0.987 0.026 102.212);
208
+ --color-yellow-50: oklch(0.987 0.026 102.212);
226
209
  --color-yellow-100: oklch(0.973 0.071 103.193);
227
210
  --color-yellow-200: oklch(0.945 0.129 101.540);
228
211
  --color-yellow-300: oklch(0.905 0.182 98.111);
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+
5
+ /* primitive/font.css */
6
+ @layer config {
7
+ :root {
8
+ --font-family-mono: ui-monospace, monospace;
9
+ --font-family-sans: system-ui, sans-serif;
10
+ --font-family-serif: Georgia, serif;
11
+ --font-weight-thin: 100;
12
+ --font-weight-extra-light: 200;
13
+ --font-weight-light: 300;
14
+ --font-weight-normal: 400;
15
+ --font-weight-medium: 500;
16
+ --font-weight-semibold: 600;
17
+ --font-weight-bold: 700;
18
+ --font-weight-extra-bold: 800;
19
+ --font-weight-black: 900;
20
+ --line-height-none: 1;
21
+ --line-height-tight: 1.1;
22
+ --line-height-snug: 1.25;
23
+ --line-height-normal: 1.5;
24
+ --line-height-relaxed: 1.75;
25
+ --line-height-loose: 2;
26
+ --text-decoration-offset: 0.25rem;
27
+ --text-decoration-thickness: 1px;
28
+ }
29
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+
5
+ /* primitive/shadow.css */
6
+ @layer config {
7
+ :root {
8
+ --shadow-none: 0 0 0 0 transparent;
9
+ --shadow-sm: 0 1px 2px 0 var(--color-shadow-normal), 0 1px 1px -1px var(--color-shadow-normal);
10
+ --shadow-md: 0 4px 6px -1px var(--color-shadow-normal), 0 2px 4px -2px var(--color-shadow-normal);
11
+ --shadow-lg: 0 10px 15px -3px var(--color-shadow-normal), 0 4px 6px -4px var(--color-shadow-normal);
12
+ --shadow-center-sm: 0 0 2px 2px var(--color-shadow-normal);
13
+ --shadow-center-md: 0 0 4px 4px var(--color-shadow-normal);
14
+ --shadow-center-lg: 0 0 8px 8px var(--color-shadow-normal);
15
+ }
16
+ }
@@ -1,20 +1,19 @@
1
- /* primitive/size.css */
2
- /*
3
- * Pixel-named rem scale.
4
- * Name = equivalent px value at 16px base, value = rem equivalent.
5
- * e.g. --size-16 = 1rem = 16px
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
6
3
  */
4
+
5
+ /* primitive/size.css */
7
6
  @layer config {
8
7
  :root {
9
- --size-1: 0.0625rem;
10
- --size-2: 0.125rem;
11
- --size-3: 0.1875rem;
12
- --size-4: 0.25rem;
13
- --size-5: 0.3125rem;
14
- --size-6: 0.375rem;
15
- --size-7: 0.4375rem;
16
- --size-8: 0.5rem;
17
- --size-9: 0.5625rem;
8
+ --size-1: 0.0625rem;
9
+ --size-2: 0.125rem;
10
+ --size-3: 0.1875rem;
11
+ --size-4: 0.25rem;
12
+ --size-5: 0.3125rem;
13
+ --size-6: 0.375rem;
14
+ --size-7: 0.4375rem;
15
+ --size-8: 0.5rem;
16
+ --size-9: 0.5625rem;
18
17
  --size-10: 0.625rem;
19
18
  --size-11: 0.6875rem;
20
19
  --size-12: 0.75rem;
@@ -47,9 +46,7 @@
47
46
  --size-96: 6rem;
48
47
  --size-100: 6.25rem;
49
48
  --size-150: 9.375rem;
50
-
51
- /* Screen widths */
52
- --size-768: 48rem;
49
+ --size-768: 48rem;
53
50
  --size-1024: 64rem;
54
51
  --size-1200: 75rem;
55
52
  --size-1280: 80rem;
@@ -4,6 +4,5 @@
4
4
  @import 'primitive/blur.css';
5
5
  @import 'primitive/color.css';
6
6
  @import 'primitive/font.css';
7
- @import 'primitive/opacity.css';
8
7
  @import 'primitive/shadow.css';
9
8
  @import 'primitive/size.css';
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+
1
5
  /* semantic/blur.css */
2
6
  @layer config {
3
7
  :root {