@almadar/ui 4.57.4 → 5.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 (41) hide show
  1. package/dist/avl/index.cjs +270 -69
  2. package/dist/avl/index.js +270 -69
  3. package/dist/components/index.cjs +101 -68
  4. package/dist/components/index.js +101 -68
  5. package/dist/context/index.cjs +199 -0
  6. package/dist/context/index.js +199 -0
  7. package/dist/context/themeTokens.d.ts +1 -1
  8. package/dist/docs/index.cjs +21 -21
  9. package/dist/docs/index.js +21 -21
  10. package/dist/marketing/index.cjs +18 -18
  11. package/dist/marketing/index.js +18 -18
  12. package/dist/providers/index.cjs +101 -68
  13. package/dist/providers/index.js +101 -68
  14. package/dist/runtime/index.cjs +270 -69
  15. package/dist/runtime/index.js +270 -69
  16. package/package.json +2 -2
  17. package/tailwind-preset.cjs +118 -3
  18. package/themes/_contract.md +198 -0
  19. package/themes/almadar-website.css +212 -0
  20. package/themes/almadar.css +210 -0
  21. package/themes/arctic.css +210 -0
  22. package/themes/atelier.css +427 -0
  23. package/themes/copper.css +210 -0
  24. package/themes/ember.css +210 -0
  25. package/themes/forest.css +210 -0
  26. package/themes/gazette.css +411 -0
  27. package/themes/index.css +7 -0
  28. package/themes/kiosk.css +412 -0
  29. package/themes/lavender.css +210 -0
  30. package/themes/midnight.css +210 -0
  31. package/themes/minimalist.css +210 -0
  32. package/themes/neon.css +210 -0
  33. package/themes/ocean.css +210 -0
  34. package/themes/prism.css +406 -0
  35. package/themes/rose.css +210 -0
  36. package/themes/sand.css +210 -0
  37. package/themes/slate.css +210 -0
  38. package/themes/sunset.css +210 -0
  39. package/themes/terminal.css +422 -0
  40. package/themes/trait-wars.css +210 -0
  41. package/themes/wireframe.css +216 -0
@@ -0,0 +1,427 @@
1
+ /**
2
+ * Atelier Theme
3
+ *
4
+ * Display-heavy editorial feel — Apple Newsroom / Behance / fashion magazine.
5
+ * Generous whitespace, dramatic type scale, hairline borders, no shadows;
6
+ * monochrome warm-grey palette punctuated by a single cobalt accent.
7
+ */
8
+
9
+ /* ==========================================================================
10
+ * LIGHT MODE
11
+ * ========================================================================== */
12
+ [data-theme="atelier-light"] {
13
+ /* Shadows - None. Hairline borders carry all hierarchy. */
14
+ --shadow-none: none;
15
+ --shadow-sm: none;
16
+ --shadow-main: none;
17
+ --shadow-lg: none;
18
+ --shadow-inner: none;
19
+ --shadow-hover: none;
20
+ --shadow-active: none;
21
+
22
+ /* Border radius - Asymmetric: small on containers, chunky pill on interactive */
23
+ --radius-none: 0px;
24
+ --radius-sm: 4px;
25
+ --radius-md: 8px;
26
+ --radius-lg: 12px;
27
+ --radius-xl: 16px;
28
+ --radius-full: 9999px;
29
+
30
+ /* Border width - Hairline throughout */
31
+ --border-width: 1px;
32
+ --border-width-thin: 1px;
33
+ --border-width-thick: 1px;
34
+
35
+ /* Colors - Warm off-white canvas, near-black ink, single cobalt accent */
36
+ --color-primary: #1f51ff;
37
+ --color-primary-hover: #1a45e0;
38
+ --color-primary-foreground: #fafaf7;
39
+
40
+ --color-secondary: #f2f1ec;
41
+ --color-secondary-hover: #e8e7e1;
42
+ --color-secondary-foreground: #0a0a0a;
43
+
44
+ --color-accent: #0a0a0a;
45
+ --color-accent-foreground: #fafaf7;
46
+
47
+ --color-muted: #f2f1ec;
48
+ --color-muted-foreground: #6b6b66;
49
+
50
+ --color-background: #fafaf7;
51
+ --color-foreground: #0a0a0a;
52
+ --color-card: #ffffff;
53
+ --color-card-foreground: #0a0a0a;
54
+ --color-surface: #f2f1ec;
55
+ --color-border: #e5e4de;
56
+ --color-input: #d6d5cf;
57
+ --color-ring: #1f51ff;
58
+
59
+ --color-table-header: #f2f1ec;
60
+ --color-table-border: #e5e4de;
61
+ --color-table-row-hover: #f6f5f0;
62
+ --color-surface-hover: #e8e7e1;
63
+ --color-border-hover: #c7c6c0;
64
+ --color-placeholder: #9a998f;
65
+
66
+ /* Semantic colors - Muted, editorial */
67
+ --color-error: #b91c1c;
68
+ --color-error-foreground: #fafaf7;
69
+ --color-success: #15803d;
70
+ --color-success-foreground: #fafaf7;
71
+ --color-warning: #a16207;
72
+ --color-warning-foreground: #fafaf7;
73
+ --color-info: #1f51ff;
74
+ --color-info-foreground: #fafaf7;
75
+
76
+ /* Typography - Display-heavy editorial */
77
+ --font-family:
78
+ "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
79
+ --font-family-display:
80
+ "Söhne", "Inter Display", -apple-system, BlinkMacSystemFont, sans-serif;
81
+ --font-family-body:
82
+ "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
83
+ --font-family-mono:
84
+ "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
85
+ --font-weight-normal: 400;
86
+ --font-weight-medium: 500;
87
+ --font-weight-bold: 700;
88
+ --letter-spacing: -0.02em;
89
+ --line-height: 1.625;
90
+
91
+ /* Type scale - Dramatic, editorial */
92
+ --text-xs: 12px;
93
+ --leading-xs: 18px;
94
+ --text-sm: 14px;
95
+ --leading-sm: 22px;
96
+ --text-base: 16px;
97
+ --leading-base: 26px;
98
+ --text-lg: 20px;
99
+ --leading-lg: 30px;
100
+ --text-xl: 24px;
101
+ --leading-xl: 32px;
102
+ --text-2xl: 32px;
103
+ --leading-2xl: 38px;
104
+ --text-3xl: 40px;
105
+ --leading-3xl: 44px;
106
+ --text-4xl: 52px;
107
+ --leading-4xl: 56px;
108
+ --text-display-1: 64px;
109
+ --leading-display-1: 68px;
110
+ --text-display-2: 80px;
111
+ --leading-display-2: 84px;
112
+
113
+ /* Intent mapping - heading-major HUGE, numeric uses display family */
114
+ --intent-heading-major-size: var(--text-3xl);
115
+ --intent-heading-major-weight: var(--font-weight-bold);
116
+ --intent-heading-major-leading: var(--leading-3xl);
117
+ --intent-heading-minor-size: var(--text-xl);
118
+ --intent-heading-minor-weight: var(--font-weight-bold);
119
+ --intent-heading-minor-leading: var(--leading-xl);
120
+ --intent-body-emphasis-size: var(--text-base);
121
+ --intent-body-emphasis-weight: var(--font-weight-medium);
122
+ --intent-body-emphasis-leading: var(--leading-base);
123
+ --intent-body-default-size: var(--text-base);
124
+ --intent-body-default-weight: var(--font-weight-normal);
125
+ --intent-body-default-leading: var(--leading-base);
126
+ --intent-body-quiet-size: var(--text-sm);
127
+ --intent-body-quiet-weight: var(--font-weight-normal);
128
+ --intent-body-quiet-leading: var(--leading-sm);
129
+ --intent-caption-size: var(--text-xs);
130
+ --intent-caption-weight: var(--font-weight-medium);
131
+ --intent-caption-leading: var(--leading-xs);
132
+ --intent-numeric-size: var(--text-4xl);
133
+ --intent-numeric-weight: var(--font-weight-bold);
134
+ --intent-numeric-leading: var(--leading-4xl);
135
+ --intent-numeric-family: var(--font-family-display);
136
+
137
+ /* Density - Generous 10pt rhythm */
138
+ --space-0: 0px;
139
+ --space-1: 4px;
140
+ --space-2: 6px;
141
+ --space-3: 10px;
142
+ --space-4: 14px;
143
+ --space-5: 20px;
144
+ --space-6: 28px;
145
+ --space-7: 36px;
146
+ --space-8: 44px;
147
+ --space-9: 52px;
148
+ --space-10: 60px;
149
+ --space-11: 68px;
150
+ --space-12: 80px;
151
+
152
+ --button-height-sm: 36px;
153
+ --button-height-md: 44px;
154
+ --button-height-lg: 56px;
155
+ --input-height-sm: 36px;
156
+ --input-height-md: 44px;
157
+ --input-height-lg: 56px;
158
+ --row-height-compact: 48px;
159
+ --row-height-normal: 64px;
160
+ --row-height-spacious: 80px;
161
+
162
+ --card-padding-sm: 20px;
163
+ --card-padding-md: 28px;
164
+ --card-padding-lg: 40px;
165
+ --dialog-padding: 40px;
166
+ --section-gap: 64px;
167
+
168
+ /* Icon styling - Phosphor fill, larger default */
169
+ --icon-family: phosphor-fill;
170
+ --icon-default-size: 22px;
171
+ --icon-stroke-width: 0;
172
+ --icon-color: currentColor;
173
+
174
+ /* Elevation - All none, hairlines do the work */
175
+ --elevation-card: none;
176
+ --elevation-popover: none;
177
+ --elevation-dialog: none;
178
+ --elevation-toast: none;
179
+
180
+ /* Geometry - Asymmetric: small container radius, chunky interactive */
181
+ --radius-container: 8px;
182
+ --radius-interactive: 24px;
183
+ --radius-pill: 9999px;
184
+ --border-hairline: 1px;
185
+ --border-standard: 1px;
186
+ --border-heavy: 1px;
187
+
188
+ /* Transitions - Dramatic, considered */
189
+ --transition-fast: 300ms;
190
+ --transition-normal: 500ms;
191
+ --transition-slow: 800ms;
192
+ --transition-timing: cubic-bezier(0.2, 0, 0, 1);
193
+
194
+ /* Motion palette */
195
+ --duration-instant: 0ms;
196
+ --duration-fast: 300ms;
197
+ --duration-normal: 500ms;
198
+ --duration-slow: 800ms;
199
+ --duration-dramatic: 1200ms;
200
+ --easing-linear: linear;
201
+ --easing-standard: cubic-bezier(0.2, 0, 0, 1);
202
+ --easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
203
+ --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
204
+
205
+ /* Hover/Active transforms - Subtle, no lift */
206
+ --hover-scale: 1;
207
+ --hover-translate-y: 0;
208
+ --hover-translate-x: 0;
209
+ --active-scale: 1;
210
+ --active-translate-y: 0;
211
+
212
+ /* Focus ring */
213
+ --focus-ring-width: 2px;
214
+ --focus-ring-offset: 3px;
215
+ --focus-ring-color: #1f51ff;
216
+
217
+ }
218
+
219
+ /* ==========================================================================
220
+ * DARK MODE
221
+ * ========================================================================== */
222
+ [data-theme="atelier-dark"] {
223
+ /* Shadows - None */
224
+ --shadow-none: none;
225
+ --shadow-sm: none;
226
+ --shadow-main: none;
227
+ --shadow-lg: none;
228
+ --shadow-inner: none;
229
+ --shadow-hover: none;
230
+ --shadow-active: none;
231
+
232
+ /* Border radius */
233
+ --radius-none: 0px;
234
+ --radius-sm: 4px;
235
+ --radius-md: 8px;
236
+ --radius-lg: 12px;
237
+ --radius-xl: 16px;
238
+ --radius-full: 9999px;
239
+
240
+ /* Border width - Hairline */
241
+ --border-width: 1px;
242
+ --border-width-thin: 1px;
243
+ --border-width-thick: 1px;
244
+
245
+ /* Colors - Very dark grey canvas, near-white ink, brighter cobalt */
246
+ --color-primary: #5b7fff;
247
+ --color-primary-hover: #7a96ff;
248
+ --color-primary-foreground: #0d0d0d;
249
+
250
+ --color-secondary: #1a1a1a;
251
+ --color-secondary-hover: #242424;
252
+ --color-secondary-foreground: #fafafa;
253
+
254
+ --color-accent: #fafafa;
255
+ --color-accent-foreground: #0d0d0d;
256
+
257
+ --color-muted: #1a1a1a;
258
+ --color-muted-foreground: #999999;
259
+
260
+ --color-background: #0d0d0d;
261
+ --color-foreground: #fafafa;
262
+ --color-card: #141414;
263
+ --color-card-foreground: #fafafa;
264
+ --color-surface: #1a1a1a;
265
+ --color-border: #262626;
266
+ --color-input: #333333;
267
+ --color-ring: #5b7fff;
268
+
269
+ --color-table-header: #1a1a1a;
270
+ --color-table-border: #262626;
271
+ --color-table-row-hover: #181818;
272
+ --color-surface-hover: #242424;
273
+ --color-border-hover: #3a3a3a;
274
+ --color-placeholder: #666666;
275
+
276
+ /* Semantic colors - Muted in dark mode, cobalt punches through */
277
+ --color-error: #cf6679;
278
+ --color-error-foreground: #0d0d0d;
279
+ --color-success: #8aa899;
280
+ --color-success-foreground: #0d0d0d;
281
+ --color-warning: #c9a96e;
282
+ --color-warning-foreground: #0d0d0d;
283
+ --color-info: #5b7fff;
284
+ --color-info-foreground: #0d0d0d;
285
+
286
+ /* Typography */
287
+ --font-family:
288
+ "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
289
+ --font-family-display:
290
+ "Söhne", "Inter Display", -apple-system, BlinkMacSystemFont, sans-serif;
291
+ --font-family-body:
292
+ "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
293
+ --font-family-mono:
294
+ "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
295
+ --font-weight-normal: 400;
296
+ --font-weight-medium: 500;
297
+ --font-weight-bold: 700;
298
+ --letter-spacing: -0.02em;
299
+ --line-height: 1.625;
300
+
301
+ /* Type scale */
302
+ --text-xs: 12px;
303
+ --leading-xs: 18px;
304
+ --text-sm: 14px;
305
+ --leading-sm: 22px;
306
+ --text-base: 16px;
307
+ --leading-base: 26px;
308
+ --text-lg: 20px;
309
+ --leading-lg: 30px;
310
+ --text-xl: 24px;
311
+ --leading-xl: 32px;
312
+ --text-2xl: 32px;
313
+ --leading-2xl: 38px;
314
+ --text-3xl: 40px;
315
+ --leading-3xl: 44px;
316
+ --text-4xl: 52px;
317
+ --leading-4xl: 56px;
318
+ --text-display-1: 64px;
319
+ --leading-display-1: 68px;
320
+ --text-display-2: 80px;
321
+ --leading-display-2: 84px;
322
+
323
+ /* Intent mapping */
324
+ --intent-heading-major-size: var(--text-3xl);
325
+ --intent-heading-major-weight: var(--font-weight-bold);
326
+ --intent-heading-major-leading: var(--leading-3xl);
327
+ --intent-heading-minor-size: var(--text-xl);
328
+ --intent-heading-minor-weight: var(--font-weight-bold);
329
+ --intent-heading-minor-leading: var(--leading-xl);
330
+ --intent-body-emphasis-size: var(--text-base);
331
+ --intent-body-emphasis-weight: var(--font-weight-medium);
332
+ --intent-body-emphasis-leading: var(--leading-base);
333
+ --intent-body-default-size: var(--text-base);
334
+ --intent-body-default-weight: var(--font-weight-normal);
335
+ --intent-body-default-leading: var(--leading-base);
336
+ --intent-body-quiet-size: var(--text-sm);
337
+ --intent-body-quiet-weight: var(--font-weight-normal);
338
+ --intent-body-quiet-leading: var(--leading-sm);
339
+ --intent-caption-size: var(--text-xs);
340
+ --intent-caption-weight: var(--font-weight-medium);
341
+ --intent-caption-leading: var(--leading-xs);
342
+ --intent-numeric-size: var(--text-4xl);
343
+ --intent-numeric-weight: var(--font-weight-bold);
344
+ --intent-numeric-leading: var(--leading-4xl);
345
+ --intent-numeric-family: var(--font-family-display);
346
+
347
+ /* Density */
348
+ --space-0: 0px;
349
+ --space-1: 4px;
350
+ --space-2: 6px;
351
+ --space-3: 10px;
352
+ --space-4: 14px;
353
+ --space-5: 20px;
354
+ --space-6: 28px;
355
+ --space-7: 36px;
356
+ --space-8: 44px;
357
+ --space-9: 52px;
358
+ --space-10: 60px;
359
+ --space-11: 68px;
360
+ --space-12: 80px;
361
+
362
+ --button-height-sm: 36px;
363
+ --button-height-md: 44px;
364
+ --button-height-lg: 56px;
365
+ --input-height-sm: 36px;
366
+ --input-height-md: 44px;
367
+ --input-height-lg: 56px;
368
+ --row-height-compact: 48px;
369
+ --row-height-normal: 64px;
370
+ --row-height-spacious: 80px;
371
+
372
+ --card-padding-sm: 20px;
373
+ --card-padding-md: 28px;
374
+ --card-padding-lg: 40px;
375
+ --dialog-padding: 40px;
376
+ --section-gap: 64px;
377
+
378
+ /* Icon styling */
379
+ --icon-family: phosphor-fill;
380
+ --icon-default-size: 22px;
381
+ --icon-stroke-width: 0;
382
+ --icon-color: currentColor;
383
+
384
+ /* Elevation */
385
+ --elevation-card: none;
386
+ --elevation-popover: none;
387
+ --elevation-dialog: none;
388
+ --elevation-toast: none;
389
+
390
+ /* Geometry */
391
+ --radius-container: 8px;
392
+ --radius-interactive: 24px;
393
+ --radius-pill: 9999px;
394
+ --border-hairline: 1px;
395
+ --border-standard: 1px;
396
+ --border-heavy: 1px;
397
+
398
+ /* Transitions */
399
+ --transition-fast: 300ms;
400
+ --transition-normal: 500ms;
401
+ --transition-slow: 800ms;
402
+ --transition-timing: cubic-bezier(0.2, 0, 0, 1);
403
+
404
+ /* Motion palette */
405
+ --duration-instant: 0ms;
406
+ --duration-fast: 300ms;
407
+ --duration-normal: 500ms;
408
+ --duration-slow: 800ms;
409
+ --duration-dramatic: 1200ms;
410
+ --easing-linear: linear;
411
+ --easing-standard: cubic-bezier(0.2, 0, 0, 1);
412
+ --easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
413
+ --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
414
+
415
+ /* Hover/Active transforms - No lift */
416
+ --hover-scale: 1;
417
+ --hover-translate-y: 0;
418
+ --hover-translate-x: 0;
419
+ --active-scale: 1;
420
+ --active-translate-y: 0;
421
+
422
+ /* Focus ring */
423
+ --focus-ring-width: 2px;
424
+ --focus-ring-offset: 3px;
425
+ --focus-ring-color: #5b7fff;
426
+
427
+ }
package/themes/copper.css CHANGED
@@ -100,6 +100,111 @@
100
100
  --focus-ring-offset: 2px;
101
101
  --focus-ring-color: #b45309;
102
102
 
103
+ /* Layer 1 — backfill (preserves current visual output, see themes/_contract.md) */
104
+ /* Density axis — spacing scale */
105
+ --space-0: 0px;
106
+ --space-1: 4px;
107
+ --space-2: 8px;
108
+ --space-3: 12px;
109
+ --space-4: 16px;
110
+ --space-5: 20px;
111
+ --space-6: 24px;
112
+ --space-7: 28px;
113
+ --space-8: 32px;
114
+ --space-9: 36px;
115
+ --space-10: 40px;
116
+ --space-11: 44px;
117
+ --space-12: 48px;
118
+ /* Density axis — per-element heights */
119
+ --button-height-sm: 28px;
120
+ --button-height-md: 36px;
121
+ --button-height-lg: 44px;
122
+ --input-height-sm: 28px;
123
+ --input-height-md: 36px;
124
+ --input-height-lg: 44px;
125
+ --row-height-compact: 32px;
126
+ --row-height-normal: 40px;
127
+ --row-height-spacious: 48px;
128
+ /* Density axis — per-element padding */
129
+ --card-padding-sm: 12px;
130
+ --card-padding-md: 16px;
131
+ --card-padding-lg: 24px;
132
+ --dialog-padding: 24px;
133
+ --section-gap: 32px;
134
+ /* Type axis — family triplet (aliases existing --font-family for backward compat) */
135
+ --font-family-display: var(--font-family);
136
+ --font-family-body: var(--font-family);
137
+ --font-family-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
138
+ /* Type axis — size scale */
139
+ --text-xs: 12px;
140
+ --leading-xs: 16px;
141
+ --text-sm: 14px;
142
+ --leading-sm: 20px;
143
+ --text-base: 16px;
144
+ --leading-base: 24px;
145
+ --text-lg: 18px;
146
+ --leading-lg: 28px;
147
+ --text-xl: 20px;
148
+ --leading-xl: 28px;
149
+ --text-2xl: 24px;
150
+ --leading-2xl: 32px;
151
+ --text-3xl: 30px;
152
+ --leading-3xl: 36px;
153
+ --text-4xl: 36px;
154
+ --leading-4xl: 40px;
155
+ --text-display-1: 48px;
156
+ --leading-display-1: 52px;
157
+ --text-display-2: 60px;
158
+ --leading-display-2: 64px;
159
+ /* Type axis — intent mapping (calibrated to existing component usage) */
160
+ --intent-heading-major-size: var(--text-2xl);
161
+ --intent-heading-major-weight: var(--font-weight-bold);
162
+ --intent-heading-major-leading: var(--leading-2xl);
163
+ --intent-heading-minor-size: var(--text-lg);
164
+ --intent-heading-minor-weight: var(--font-weight-bold);
165
+ --intent-heading-minor-leading: var(--leading-lg);
166
+ --intent-body-emphasis-size: var(--text-base);
167
+ --intent-body-emphasis-weight: var(--font-weight-medium);
168
+ --intent-body-emphasis-leading: var(--leading-base);
169
+ --intent-body-default-size: var(--text-sm);
170
+ --intent-body-default-weight: var(--font-weight-normal);
171
+ --intent-body-default-leading: var(--leading-sm);
172
+ --intent-body-quiet-size: var(--text-sm);
173
+ --intent-body-quiet-weight: var(--font-weight-normal);
174
+ --intent-body-quiet-leading: var(--leading-sm);
175
+ --intent-caption-size: var(--text-xs);
176
+ --intent-caption-weight: var(--font-weight-normal);
177
+ --intent-caption-leading: var(--leading-xs);
178
+ --intent-numeric-size: var(--text-sm);
179
+ --intent-numeric-weight: var(--font-weight-medium);
180
+ --intent-numeric-leading: var(--leading-sm);
181
+ /* Motion axis — duration palette (aliases existing --transition-* for backward compat) */
182
+ --duration-instant: 0ms;
183
+ --duration-fast: var(--transition-fast);
184
+ --duration-normal: var(--transition-normal);
185
+ --duration-slow: var(--transition-slow);
186
+ --duration-dramatic: 600ms;
187
+ /* Motion axis — easing palette (aliases existing --transition-timing for backward compat) */
188
+ --easing-linear: linear;
189
+ --easing-standard: var(--transition-timing);
190
+ --easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
191
+ --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
192
+ /* Iconography axis */
193
+ --icon-family: lucide;
194
+ --icon-default-size: 16px;
195
+ /* Elevation axis — per-layer mapping */
196
+ --elevation-card: var(--shadow-sm);
197
+ --elevation-popover: var(--shadow-main);
198
+ --elevation-dialog: var(--shadow-lg);
199
+ --elevation-toast: var(--shadow-main);
200
+ /* Geometry axis — radius rhythm with intent */
201
+ --radius-container: var(--radius-md);
202
+ --radius-interactive: var(--radius-md);
203
+ --radius-pill: var(--radius-full);
204
+ /* Geometry axis — border-width rhythm */
205
+ --border-hairline: 1px;
206
+ --border-standard: var(--border-width);
207
+ --border-heavy: var(--border-width-thick);
103
208
  }
104
209
 
105
210
  /* ==========================================================================
@@ -194,4 +299,109 @@
194
299
  --focus-ring-offset: 2px;
195
300
  --focus-ring-color: #d97706;
196
301
 
302
+ /* Layer 1 — backfill (preserves current visual output, see themes/_contract.md) */
303
+ /* Density axis — spacing scale */
304
+ --space-0: 0px;
305
+ --space-1: 4px;
306
+ --space-2: 8px;
307
+ --space-3: 12px;
308
+ --space-4: 16px;
309
+ --space-5: 20px;
310
+ --space-6: 24px;
311
+ --space-7: 28px;
312
+ --space-8: 32px;
313
+ --space-9: 36px;
314
+ --space-10: 40px;
315
+ --space-11: 44px;
316
+ --space-12: 48px;
317
+ /* Density axis — per-element heights */
318
+ --button-height-sm: 28px;
319
+ --button-height-md: 36px;
320
+ --button-height-lg: 44px;
321
+ --input-height-sm: 28px;
322
+ --input-height-md: 36px;
323
+ --input-height-lg: 44px;
324
+ --row-height-compact: 32px;
325
+ --row-height-normal: 40px;
326
+ --row-height-spacious: 48px;
327
+ /* Density axis — per-element padding */
328
+ --card-padding-sm: 12px;
329
+ --card-padding-md: 16px;
330
+ --card-padding-lg: 24px;
331
+ --dialog-padding: 24px;
332
+ --section-gap: 32px;
333
+ /* Type axis — family triplet (aliases existing --font-family for backward compat) */
334
+ --font-family-display: var(--font-family);
335
+ --font-family-body: var(--font-family);
336
+ --font-family-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
337
+ /* Type axis — size scale */
338
+ --text-xs: 12px;
339
+ --leading-xs: 16px;
340
+ --text-sm: 14px;
341
+ --leading-sm: 20px;
342
+ --text-base: 16px;
343
+ --leading-base: 24px;
344
+ --text-lg: 18px;
345
+ --leading-lg: 28px;
346
+ --text-xl: 20px;
347
+ --leading-xl: 28px;
348
+ --text-2xl: 24px;
349
+ --leading-2xl: 32px;
350
+ --text-3xl: 30px;
351
+ --leading-3xl: 36px;
352
+ --text-4xl: 36px;
353
+ --leading-4xl: 40px;
354
+ --text-display-1: 48px;
355
+ --leading-display-1: 52px;
356
+ --text-display-2: 60px;
357
+ --leading-display-2: 64px;
358
+ /* Type axis — intent mapping (calibrated to existing component usage) */
359
+ --intent-heading-major-size: var(--text-2xl);
360
+ --intent-heading-major-weight: var(--font-weight-bold);
361
+ --intent-heading-major-leading: var(--leading-2xl);
362
+ --intent-heading-minor-size: var(--text-lg);
363
+ --intent-heading-minor-weight: var(--font-weight-bold);
364
+ --intent-heading-minor-leading: var(--leading-lg);
365
+ --intent-body-emphasis-size: var(--text-base);
366
+ --intent-body-emphasis-weight: var(--font-weight-medium);
367
+ --intent-body-emphasis-leading: var(--leading-base);
368
+ --intent-body-default-size: var(--text-sm);
369
+ --intent-body-default-weight: var(--font-weight-normal);
370
+ --intent-body-default-leading: var(--leading-sm);
371
+ --intent-body-quiet-size: var(--text-sm);
372
+ --intent-body-quiet-weight: var(--font-weight-normal);
373
+ --intent-body-quiet-leading: var(--leading-sm);
374
+ --intent-caption-size: var(--text-xs);
375
+ --intent-caption-weight: var(--font-weight-normal);
376
+ --intent-caption-leading: var(--leading-xs);
377
+ --intent-numeric-size: var(--text-sm);
378
+ --intent-numeric-weight: var(--font-weight-medium);
379
+ --intent-numeric-leading: var(--leading-sm);
380
+ /* Motion axis — duration palette (aliases existing --transition-* for backward compat) */
381
+ --duration-instant: 0ms;
382
+ --duration-fast: var(--transition-fast);
383
+ --duration-normal: var(--transition-normal);
384
+ --duration-slow: var(--transition-slow);
385
+ --duration-dramatic: 600ms;
386
+ /* Motion axis — easing palette (aliases existing --transition-timing for backward compat) */
387
+ --easing-linear: linear;
388
+ --easing-standard: var(--transition-timing);
389
+ --easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
390
+ --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
391
+ /* Iconography axis */
392
+ --icon-family: lucide;
393
+ --icon-default-size: 16px;
394
+ /* Elevation axis — per-layer mapping */
395
+ --elevation-card: var(--shadow-sm);
396
+ --elevation-popover: var(--shadow-main);
397
+ --elevation-dialog: var(--shadow-lg);
398
+ --elevation-toast: var(--shadow-main);
399
+ /* Geometry axis — radius rhythm with intent */
400
+ --radius-container: var(--radius-md);
401
+ --radius-interactive: var(--radius-md);
402
+ --radius-pill: var(--radius-full);
403
+ /* Geometry axis — border-width rhythm */
404
+ --border-hairline: 1px;
405
+ --border-standard: var(--border-width);
406
+ --border-heavy: var(--border-width-thick);
197
407
  }