@duskmoon-dev/core 1.19.3 → 1.19.5

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 (121) hide show
  1. package/README.md +1 -1
  2. package/dist/base.css +484 -0
  3. package/dist/components/accordion.css +33 -9
  4. package/dist/components/alert.css +81 -3
  5. package/dist/components/autocomplete.css +67 -13
  6. package/dist/components/avatar.css +39 -15
  7. package/dist/components/badge.css +15 -3
  8. package/dist/components/card.css +12 -0
  9. package/dist/components/carousel.css +28 -0
  10. package/dist/components/chat.css +15 -11
  11. package/dist/components/checkbox.css +83 -13
  12. package/dist/components/collapse.css +67 -16
  13. package/dist/components/countdown.css +22 -0
  14. package/dist/components/datepicker.css +76 -0
  15. package/dist/components/diff.css +33 -0
  16. package/dist/components/file-input.css +107 -0
  17. package/dist/components/filter-group.css +452 -0
  18. package/dist/components/form-group.css +95 -204
  19. package/dist/components/form.css +1551 -421
  20. package/dist/components/index.css +6248 -5799
  21. package/dist/components/input.css +114 -31
  22. package/dist/components/kbd.css +28 -0
  23. package/dist/components/list.css +22 -3
  24. package/dist/components/loading.css +105 -0
  25. package/dist/components/modal.css +62 -1
  26. package/dist/components/otp-input.css +124 -6
  27. package/dist/components/progress.css +74 -0
  28. package/dist/components/radial-progress.css +47 -0
  29. package/dist/components/radio.css +70 -0
  30. package/dist/components/range.css +41 -0
  31. package/dist/components/rating.css +39 -12
  32. package/dist/components/select.css +74 -0
  33. package/dist/components/skeleton.css +13 -1
  34. package/dist/components/snackbar.css +48 -18
  35. package/dist/components/stat.css +40 -0
  36. package/dist/components/switch.css +70 -0
  37. package/dist/components/table.css +8 -0
  38. package/dist/components/textarea.css +74 -0
  39. package/dist/components/timeline.css +40 -25
  40. package/dist/components/toast.css +188 -34
  41. package/dist/components/toggle-switch.css +165 -0
  42. package/dist/components/toggle.css +198 -32
  43. package/dist/components/tooltip.css +2 -47
  44. package/dist/components/validator.css +66 -0
  45. package/dist/effects/aura.css +22 -0
  46. package/dist/effects/hover-3d.css +8 -0
  47. package/dist/effects/hover-gallery.css +14 -0
  48. package/dist/effects/index.css +65 -0
  49. package/dist/effects/text-rotate.css +16 -0
  50. package/dist/esm/components/accordion.js +33 -9
  51. package/dist/esm/components/alert.js +81 -3
  52. package/dist/esm/components/autocomplete.js +67 -13
  53. package/dist/esm/components/avatar.js +39 -15
  54. package/dist/esm/components/badge.js +15 -3
  55. package/dist/esm/components/card.js +12 -0
  56. package/dist/esm/components/carousel.d.ts +5 -0
  57. package/dist/esm/components/carousel.js +37 -0
  58. package/dist/esm/components/chat.js +15 -11
  59. package/dist/esm/components/checkbox.js +84 -14
  60. package/dist/esm/components/collapse.js +67 -16
  61. package/dist/esm/components/countdown.d.ts +5 -0
  62. package/dist/esm/components/countdown.js +31 -0
  63. package/dist/esm/components/datepicker.js +77 -1
  64. package/dist/esm/components/diff.d.ts +5 -0
  65. package/dist/esm/components/diff.js +42 -0
  66. package/dist/esm/components/file-input.d.ts +5 -0
  67. package/dist/esm/components/file-input.js +116 -0
  68. package/dist/esm/components/filter-group.d.ts +5 -0
  69. package/dist/esm/components/filter-group.js +461 -0
  70. package/dist/esm/components/form-group.js +96 -205
  71. package/dist/esm/components/form.js +1539 -409
  72. package/dist/esm/components/input.js +115 -32
  73. package/dist/esm/components/kbd.d.ts +5 -0
  74. package/dist/esm/components/kbd.js +37 -0
  75. package/dist/esm/components/list.js +22 -3
  76. package/dist/esm/components/loading.d.ts +5 -0
  77. package/dist/esm/components/loading.js +114 -0
  78. package/dist/esm/components/modal.js +62 -1
  79. package/dist/esm/components/otp-input.js +125 -7
  80. package/dist/esm/components/progress.js +74 -0
  81. package/dist/esm/components/radial-progress.d.ts +5 -0
  82. package/dist/esm/components/radial-progress.js +56 -0
  83. package/dist/esm/components/radio.js +71 -1
  84. package/dist/esm/components/range.d.ts +5 -0
  85. package/dist/esm/components/range.js +50 -0
  86. package/dist/esm/components/rating.js +39 -12
  87. package/dist/esm/components/select.js +75 -1
  88. package/dist/esm/components/skeleton.js +13 -1
  89. package/dist/esm/components/snackbar.js +48 -18
  90. package/dist/esm/components/stat.d.ts +5 -0
  91. package/dist/esm/components/stat.js +49 -0
  92. package/dist/esm/components/switch.js +71 -1
  93. package/dist/esm/components/table.js +8 -0
  94. package/dist/esm/components/textarea.js +75 -1
  95. package/dist/esm/components/timeline.js +40 -25
  96. package/dist/esm/components/toast.js +188 -34
  97. package/dist/esm/components/toggle-switch.d.ts +5 -0
  98. package/dist/esm/components/toggle-switch.js +174 -0
  99. package/dist/esm/components/toggle.js +198 -32
  100. package/dist/esm/components/tooltip.js +2 -47
  101. package/dist/esm/components/validator.d.ts +5 -0
  102. package/dist/esm/components/validator.js +75 -0
  103. package/dist/esm/effects/aura.d.ts +5 -0
  104. package/dist/esm/effects/aura.js +31 -0
  105. package/dist/esm/effects/hover-3d.d.ts +5 -0
  106. package/dist/esm/effects/hover-3d.js +17 -0
  107. package/dist/esm/effects/hover-gallery.d.ts +5 -0
  108. package/dist/esm/effects/hover-gallery.js +23 -0
  109. package/dist/esm/effects/index.d.ts +5 -0
  110. package/dist/esm/effects/index.js +74 -0
  111. package/dist/esm/effects/text-rotate.d.ts +5 -0
  112. package/dist/esm/effects/text-rotate.js +25 -0
  113. package/dist/index.css +7652 -7204
  114. package/dist/index.min.css +1 -1
  115. package/dist/standalone/duskmoonui-themes.css +1 -1
  116. package/dist/standalone/duskmoonui.css +7598 -7141
  117. package/dist/standalone/duskmoonui.js +18 -16
  118. package/dist/standalone/duskmoonui.mjs +18 -16
  119. package/dist/types/types/plugin.d.ts +1 -1
  120. package/dist/types/types/plugin.d.ts.map +1 -1
  121. package/package.json +110 -1
package/README.md CHANGED
@@ -442,4 +442,4 @@ See [specs/004-oklch-color-system/quickstart.md](./specs/004-oklch-color-system/
442
442
 
443
443
  MIT
444
444
 
445
- <!-- release 34867104439 -->
445
+ <!-- release 35490001841 -->
package/dist/base.css ADDED
@@ -0,0 +1,484 @@
1
+ /* Individual-control prerequisite, matching the generated base.css export. */
2
+ /**
3
+ * Base styles
4
+ * Core styling and color token definitions
5
+ */
6
+
7
+ /* Root styles */
8
+ /**
9
+ * Root styles and CSS reset
10
+ * Applied to all pages using the plugin
11
+ */
12
+
13
+ /* Smooth scrolling for anchors */
14
+ html {
15
+ scroll-behavior: smooth;
16
+ }
17
+
18
+ /* Prevent text inflation on mobile */
19
+ html {
20
+ -webkit-text-size-adjust: 100%;
21
+ text-size-adjust: 100%;
22
+ }
23
+
24
+ /* Use theme color scheme - OKLCH format */
25
+ :root,
26
+ [data-theme] {
27
+ background-color: var(--color-base-100);
28
+ color: var(--color-base-content);
29
+ }
30
+
31
+ /* Focus ring utility */
32
+ :focus-visible {
33
+ outline: 2px solid var(--color-primary);
34
+ outline-offset: 2px;
35
+ }
36
+
37
+ /* Disabled state utility */
38
+ [disabled],
39
+ .disabled {
40
+ pointer-events: none;
41
+ opacity: 0.5;
42
+ }
43
+
44
+ /* Selection color */
45
+ ::selection {
46
+ background-color: color-mix(in oklch, var(--color-primary) 20%, transparent);
47
+ color: var(--color-base-content);
48
+ }
49
+
50
+ /* Scrollbar styling for webkit browsers */
51
+ ::-webkit-scrollbar {
52
+ width: 8px;
53
+ height: 8px;
54
+ }
55
+
56
+ ::-webkit-scrollbar-track {
57
+ background: var(--color-base-200);
58
+ }
59
+
60
+ ::-webkit-scrollbar-thumb {
61
+ background: var(--color-base-300);
62
+ border-radius: 4px;
63
+ }
64
+
65
+ ::-webkit-scrollbar-thumb:hover {
66
+ background: color-mix(in oklch, var(--color-base-content) 30%, transparent);
67
+ }
68
+
69
+ /* Firefox scrollbar */
70
+ * {
71
+ scrollbar-width: thin;
72
+ scrollbar-color: var(--color-base-300) var(--color-base-200);
73
+ }
74
+
75
+ /* Reduce motion for users who prefer it */
76
+ @media (prefers-reduced-motion: reduce) {
77
+ *,
78
+ *::before,
79
+ *::after {
80
+ animation-duration: 0.01ms !important;
81
+ animation-iteration-count: 1 !important;
82
+ transition-duration: 0.01ms !important;
83
+ scroll-behavior: auto !important;
84
+ }
85
+ }
86
+
87
+
88
+ /* Color token definitions */
89
+ /**
90
+ * Color Token Definitions
91
+ * 65+ Material Design 3 color tokens using CSS custom properties
92
+ * Format: OKLCH from codegen (e.g., "oklch(72% 0.17 75)")
93
+ */
94
+
95
+ @theme {
96
+ /* ============================================
97
+ * THEME METADATA (5 tokens)
98
+ * Set by generated theme CSS files (e.g., sunshine.css)
99
+ * Enables data-driven theme switching via --theme-pair
100
+ * ============================================ */
101
+
102
+ --theme-name: initial;
103
+ --theme-mode: initial;
104
+ --theme-family: initial;
105
+ --theme-pair: initial;
106
+ --theme-description: initial;
107
+
108
+ /* ============================================
109
+ * BRAND COLORS (12 tokens)
110
+ * ============================================ */
111
+
112
+ /* Primary Color Family */
113
+ --color-primary: initial;
114
+ --color-primary-content: initial;
115
+ --color-primary-container: initial;
116
+ --color-on-primary-container: initial;
117
+
118
+ /* Secondary Color Family */
119
+ --color-secondary: initial;
120
+ --color-secondary-content: initial;
121
+ --color-secondary-container: initial;
122
+ --color-on-secondary-container: initial;
123
+
124
+ /* Tertiary Color Family */
125
+ --color-tertiary: initial;
126
+ --color-tertiary-content: initial;
127
+ --color-tertiary-container: initial;
128
+ --color-on-tertiary-container: initial;
129
+
130
+ /* ============================================
131
+ * ACCENT COLORS (2 tokens)
132
+ * ============================================ */
133
+
134
+ --color-accent: initial;
135
+ --color-accent-content: initial;
136
+
137
+ /* ============================================
138
+ * NEUTRAL COLORS (3 tokens)
139
+ * ============================================ */
140
+
141
+ --color-neutral: initial;
142
+ --color-neutral-content: initial;
143
+ --color-neutral-variant: initial;
144
+
145
+ /* ============================================
146
+ * SURFACE COLORS (11 tokens)
147
+ * ============================================ */
148
+
149
+ --color-surface: initial;
150
+ --color-surface-dim: initial;
151
+ --color-surface-bright: initial;
152
+ --color-surface-container-lowest: initial;
153
+ --color-surface-container-low: initial;
154
+ --color-surface-container: initial;
155
+ --color-surface-container-high: initial;
156
+ --color-surface-container-highest: initial;
157
+ --color-surface-variant: initial;
158
+ --color-on-surface: initial;
159
+ --color-on-surface-variant: initial;
160
+
161
+ /* ============================================
162
+ * SEMANTIC COLORS (16 tokens)
163
+ * ============================================ */
164
+
165
+ /* Info */
166
+ --color-info: initial;
167
+ --color-info-content: initial;
168
+ --color-info-container: initial;
169
+ --color-on-info-container: initial;
170
+
171
+ /* Success */
172
+ --color-success: initial;
173
+ --color-success-content: initial;
174
+ --color-success-container: initial;
175
+ --color-on-success-container: initial;
176
+
177
+ /* Warning */
178
+ --color-warning: initial;
179
+ --color-warning-content: initial;
180
+ --color-warning-container: initial;
181
+ --color-on-warning-container: initial;
182
+
183
+ /* Error */
184
+ --color-error: initial;
185
+ --color-error-content: initial;
186
+ --color-error-container: initial;
187
+ --color-on-error-container: initial;
188
+
189
+ /* ============================================
190
+ * BASE SCALE (10 tokens)
191
+ * ============================================ */
192
+
193
+ --color-base-100: initial;
194
+ --color-base-200: initial;
195
+ --color-base-300: initial;
196
+ --color-base-400: initial;
197
+ --color-base-500: initial;
198
+ --color-base-600: initial;
199
+ --color-base-700: initial;
200
+ --color-base-800: initial;
201
+ --color-base-900: initial;
202
+ --color-base-content: initial;
203
+
204
+ /* ============================================
205
+ * OUTLINE COLORS (2 tokens)
206
+ * ============================================ */
207
+
208
+ --color-outline: initial;
209
+ --color-outline-variant: initial;
210
+
211
+ /* ============================================
212
+ * INVERSE COLORS (3 tokens)
213
+ * ============================================ */
214
+
215
+ --color-inverse-surface: initial;
216
+ --color-inverse-on-surface: initial;
217
+ --color-inverse-primary: initial;
218
+
219
+ /* ============================================
220
+ * SHADOW & SCRIM (2 tokens)
221
+ * ============================================ */
222
+
223
+ --color-shadow: initial;
224
+ --color-scrim: initial;
225
+
226
+ /* ============================================
227
+ * ELEVATION SHADOWS (6 + 6 tokens)
228
+ * Computed from --color-shadow (theme-provided) via color-mix()
229
+ * Registered in @theme so Tailwind v4 generates shadow-* utilities natively
230
+ * ============================================ */
231
+
232
+ --shadow-xs: 0 1px 2px 0 color-mix(in srgb, var(--color-shadow) 5%, transparent);
233
+ --shadow-sm: 0 1px 3px 0 color-mix(in srgb, var(--color-shadow) 10%, transparent), 0 1px 2px -1px color-mix(in srgb, var(--color-shadow) 10%, transparent);
234
+ --shadow-md: 0 4px 6px -1px color-mix(in srgb, var(--color-shadow) 10%, transparent), 0 2px 4px -2px color-mix(in srgb, var(--color-shadow) 10%, transparent);
235
+ --shadow-lg: 0 10px 15px -3px color-mix(in srgb, var(--color-shadow) 10%, transparent), 0 4px 6px -4px color-mix(in srgb, var(--color-shadow) 10%, transparent);
236
+ --shadow-xl: 0 20px 25px -5px color-mix(in srgb, var(--color-shadow) 10%, transparent), 0 8px 10px -6px color-mix(in srgb, var(--color-shadow) 10%, transparent);
237
+ --shadow-2xl: 0 25px 50px -12px color-mix(in srgb, var(--color-shadow) 25%, transparent);
238
+
239
+ /* MD3 Elevation Levels — semantic shadow aliases */
240
+ --shadow-elevation-0: none;
241
+ --shadow-elevation-1: var(--shadow-xs);
242
+ --shadow-elevation-2: var(--shadow-sm);
243
+ --shadow-elevation-3: var(--shadow-md);
244
+ --shadow-elevation-4: var(--shadow-lg);
245
+ --shadow-elevation-5: var(--shadow-xl);
246
+
247
+ /* ============================================
248
+ * SHAPE / BORDER RADIUS (8 tokens)
249
+ * Values provided by generated/spacing.css
250
+ * ============================================ */
251
+
252
+ --radius-none: initial;
253
+ --radius-xs: initial;
254
+ --radius-sm: initial;
255
+ --radius-md: initial;
256
+ --radius-lg: initial;
257
+ --radius-xl: initial;
258
+ --radius-2xl: initial;
259
+ --radius-full: initial;
260
+
261
+ /* ============================================
262
+ * THEME SHAPE TOKENS (8 tokens)
263
+ * Per-theme shape values from codegen
264
+ * ============================================ */
265
+
266
+ --radius-selector: initial;
267
+ --radius-field: initial;
268
+ --radius-box: initial;
269
+ --size-selector: initial;
270
+ --size-field: initial;
271
+ --border: initial;
272
+ --depth: initial;
273
+ --noise: initial;
274
+ }
275
+
276
+ /* Utility classes for colors — token references + color-mix() for states */
277
+ @layer utilities {
278
+ /* Background Colors */
279
+ .bg-primary { background-color: var(--color-primary); }
280
+ .bg-primary-focus { background-color: color-mix(in oklch, var(--color-primary), black 10%); }
281
+ .bg-primary-container { background-color: var(--color-primary-container); }
282
+
283
+ .bg-secondary { background-color: var(--color-secondary); }
284
+ .bg-secondary-focus { background-color: color-mix(in oklch, var(--color-secondary), black 10%); }
285
+ .bg-secondary-container { background-color: var(--color-secondary-container); }
286
+
287
+ .bg-tertiary { background-color: var(--color-tertiary); }
288
+ .bg-tertiary-focus { background-color: color-mix(in oklch, var(--color-tertiary), black 10%); }
289
+ .bg-tertiary-container { background-color: var(--color-tertiary-container); }
290
+
291
+ .bg-surface { background-color: var(--color-surface); }
292
+ .bg-surface-dim { background-color: var(--color-surface-dim); }
293
+ .bg-surface-bright { background-color: var(--color-surface-bright); }
294
+ .bg-surface-container-lowest { background-color: var(--color-surface-container-lowest); }
295
+ .bg-surface-container-low { background-color: var(--color-surface-container-low); }
296
+ .bg-surface-container { background-color: var(--color-surface-container); }
297
+ .bg-surface-container-high { background-color: var(--color-surface-container-high); }
298
+ .bg-surface-container-highest { background-color: var(--color-surface-container-highest); }
299
+
300
+ .bg-info { background-color: var(--color-info); }
301
+ .bg-info-container { background-color: var(--color-info-container); }
302
+ .bg-success { background-color: var(--color-success); }
303
+ .bg-success-container { background-color: var(--color-success-container); }
304
+ .bg-warning { background-color: var(--color-warning); }
305
+ .bg-warning-container { background-color: var(--color-warning-container); }
306
+ .bg-error { background-color: var(--color-error); }
307
+ .bg-error-container { background-color: var(--color-error-container); }
308
+
309
+ .bg-base-100 { background-color: var(--color-base-100); }
310
+ .bg-base-200 { background-color: var(--color-base-200); }
311
+ .bg-base-300 { background-color: var(--color-base-300); }
312
+ .bg-base-400 { background-color: var(--color-base-400); }
313
+ .bg-base-500 { background-color: var(--color-base-500); }
314
+ .bg-base-600 { background-color: var(--color-base-600); }
315
+ .bg-base-700 { background-color: var(--color-base-700); }
316
+ .bg-base-800 { background-color: var(--color-base-800); }
317
+ .bg-base-900 { background-color: var(--color-base-900); }
318
+
319
+ /* Text Colors */
320
+ .text-primary { color: var(--color-primary); }
321
+ .text-primary-content { color: var(--color-primary-content); }
322
+ .text-on-primary-container { color: var(--color-on-primary-container); }
323
+
324
+ .text-secondary { color: var(--color-secondary); }
325
+ .text-secondary-content { color: var(--color-secondary-content); }
326
+ .text-on-secondary-container { color: var(--color-on-secondary-container); }
327
+
328
+ .text-tertiary { color: var(--color-tertiary); }
329
+ .text-tertiary-content { color: var(--color-tertiary-content); }
330
+ .text-on-tertiary-container { color: var(--color-on-tertiary-container); }
331
+
332
+ .text-on-surface { color: var(--color-on-surface); }
333
+ .text-on-surface-variant { color: var(--color-on-surface-variant); }
334
+
335
+ .text-info { color: var(--color-info); }
336
+ .text-info-content { color: var(--color-info-content); }
337
+ .text-on-info-container { color: var(--color-on-info-container); }
338
+
339
+ .text-success { color: var(--color-success); }
340
+ .text-success-content { color: var(--color-success-content); }
341
+ .text-on-success-container { color: var(--color-on-success-container); }
342
+
343
+ .text-warning { color: var(--color-warning); }
344
+ .text-warning-content { color: var(--color-warning-content); }
345
+ .text-on-warning-container { color: var(--color-on-warning-container); }
346
+
347
+ .text-error { color: var(--color-error); }
348
+ .text-error-content { color: var(--color-error-content); }
349
+ .text-on-error-container { color: var(--color-on-error-container); }
350
+
351
+ .text-base-content { color: var(--color-base-content); }
352
+
353
+ /* Border Colors */
354
+ .border-primary { border-color: var(--color-primary); }
355
+ .border-secondary { border-color: var(--color-secondary); }
356
+ .border-tertiary { border-color: var(--color-tertiary); }
357
+ .border-outline { border-color: var(--color-outline); }
358
+ .border-outline-variant { border-color: var(--color-outline-variant); }
359
+ .border-info { border-color: var(--color-info); }
360
+ .border-success { border-color: var(--color-success); }
361
+ .border-warning { border-color: var(--color-warning); }
362
+ .border-error { border-color: var(--color-error); }
363
+
364
+ /* Ring Colors */
365
+ .ring-primary { --tw-ring-color: var(--color-primary); }
366
+ .ring-secondary { --tw-ring-color: var(--color-secondary); }
367
+ .ring-tertiary { --tw-ring-color: var(--color-tertiary); }
368
+ .ring-info { --tw-ring-color: var(--color-info); }
369
+ .ring-success { --tw-ring-color: var(--color-success); }
370
+ .ring-warning { --tw-ring-color: var(--color-warning); }
371
+ .ring-error { --tw-ring-color: var(--color-error); }
372
+
373
+ /* Accent Colors */
374
+ .bg-accent { background-color: var(--color-accent); }
375
+ .bg-accent-focus { background-color: color-mix(in oklch, var(--color-accent), black 10%); }
376
+ .text-accent { color: var(--color-accent); }
377
+ .text-accent-content { color: var(--color-accent-content); }
378
+ .border-accent { border-color: var(--color-accent); }
379
+ .ring-accent { --tw-ring-color: var(--color-accent); }
380
+
381
+ /* Neutral Colors */
382
+ .bg-neutral { background-color: var(--color-neutral); }
383
+ .bg-neutral-focus { background-color: color-mix(in oklch, var(--color-neutral), black 10%); }
384
+ .text-neutral { color: var(--color-neutral); }
385
+ .text-neutral-content { color: var(--color-neutral-content); }
386
+ .border-neutral { border-color: var(--color-neutral); }
387
+ .ring-neutral { --tw-ring-color: var(--color-neutral); }
388
+
389
+ /* Surface Variant */
390
+ .bg-surface-variant { background-color: var(--color-surface-variant); }
391
+
392
+ /* Inverse Colors */
393
+ .bg-inverse-surface { background-color: var(--color-inverse-surface); }
394
+ .text-inverse-on-surface { color: var(--color-inverse-on-surface); }
395
+ .text-inverse-primary { color: var(--color-inverse-primary); }
396
+
397
+ /* MD3 Elevation Utilities — semantic shadow levels */
398
+ .elevation-0 { box-shadow: var(--shadow-elevation-0); }
399
+ .elevation-1 { box-shadow: var(--shadow-elevation-1); }
400
+ .elevation-2 { box-shadow: var(--shadow-elevation-2); }
401
+ .elevation-3 { box-shadow: var(--shadow-elevation-3); }
402
+ .elevation-4 { box-shadow: var(--shadow-elevation-4); }
403
+ .elevation-5 { box-shadow: var(--shadow-elevation-5); }
404
+ }
405
+
406
+
407
+ /* Custom utilities */
408
+ /**
409
+ * Custom utility classes
410
+ * Extends Tailwind CSS v4 with additional utilities
411
+ */
412
+
413
+ /* Responsive grid utilities with auto-fill/auto-fit */
414
+ @utility grid-cols-auto-fill-* {
415
+ grid-template-columns: repeat(auto-fill, minmax(min(calc(--value(integer) * 0.25rem), 100%), 1fr));
416
+ }
417
+
418
+ @utility grid-cols-auto-fit-* {
419
+ grid-template-columns: repeat(auto-fit, minmax(min(calc(--value(integer) * 0.25rem), 100%), 1fr));
420
+ }
421
+
422
+ /* Screen reader only utility - visually hidden but accessible */
423
+ .sr-only {
424
+ position: absolute;
425
+ width: 1px;
426
+ height: 1px;
427
+ padding: 0;
428
+ margin: -1px;
429
+ overflow: hidden;
430
+ clip: rect(0, 0, 0, 0);
431
+ white-space: nowrap;
432
+ border: 0;
433
+ }
434
+
435
+ /* Undo sr-only for focus states (useful for skip links) */
436
+ .not-sr-only {
437
+ position: static;
438
+ width: auto;
439
+ height: auto;
440
+ padding: 0;
441
+ margin: 0;
442
+ overflow: visible;
443
+ clip: auto;
444
+ white-space: normal;
445
+ }
446
+
447
+
448
+ /* GENERATED — DO NOT EDIT */
449
+ /* Source: tokens/_spacing.yaml */
450
+ /* Generator: duskmoon-codegen v2.0.0 */
451
+
452
+ :root {
453
+ --spacing-0: 0px;
454
+ --spacing-1: 4px;
455
+ --spacing-2: 8px;
456
+ --spacing-3: 12px;
457
+ --spacing-4: 16px;
458
+ --spacing-5: 20px;
459
+ --spacing-6: 24px;
460
+ --spacing-7: 28px;
461
+ --spacing-8: 32px;
462
+ --spacing-10: 40px;
463
+ --spacing-12: 48px;
464
+ --spacing-16: 64px;
465
+ --spacing-20: 80px;
466
+ --spacing-24: 96px;
467
+
468
+ --radius-none: 0px;
469
+ --radius-xs: 4px;
470
+ --radius-sm: 8px;
471
+ --radius-md: 12px;
472
+ --radius-lg: 16px;
473
+ --radius-xl: 20px;
474
+ --radius-2xl: 28px;
475
+ --radius-full: 9999px;
476
+
477
+ --elevation-level0: 0px;
478
+ --elevation-level1: 1px;
479
+ --elevation-level2: 3px;
480
+ --elevation-level3: 6px;
481
+ --elevation-level4: 8px;
482
+ --elevation-level5: 12px;
483
+ }
484
+
@@ -42,7 +42,7 @@
42
42
  background-color: transparent;
43
43
  border: none;
44
44
  cursor: pointer;
45
- text-align: left;
45
+ text-align: start;
46
46
  transition: background-color 150ms ease-in-out;
47
47
  }
48
48
 
@@ -56,7 +56,8 @@
56
56
  box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
57
57
  }
58
58
 
59
- .accordion-item.open .accordion-header {
59
+ .accordion-item:not(details):is(.open, .accordion-item-open) > .accordion-header,
60
+ details.accordion-item[open] > .accordion-header {
60
61
  background-color: var(--color-surface-container);
61
62
  }
62
63
 
@@ -67,7 +68,7 @@
67
68
  justify-content: center;
68
69
  width: 1.5rem;
69
70
  height: 1.5rem;
70
- margin-right: 0.75rem;
71
+ margin-inline-end: 0.75rem;
71
72
  color: var(--color-on-surface-variant);
72
73
  flex-shrink: 0;
73
74
  }
@@ -92,13 +93,14 @@
92
93
  justify-content: center;
93
94
  width: 1.5rem;
94
95
  height: 1.5rem;
95
- margin-left: auto;
96
+ margin-inline-start: auto;
96
97
  color: var(--color-on-surface-variant);
97
98
  transition: transform 200ms ease-in-out;
98
99
  flex-shrink: 0;
99
100
  }
100
101
 
101
- .accordion-item.open .accordion-expand {
102
+ .accordion-item:not(details):is(.open, .accordion-item-open) > .accordion-header > .accordion-expand,
103
+ details.accordion-item[open] > .accordion-header > .accordion-expand {
102
104
  transform: rotate(180deg);
103
105
  }
104
106
 
@@ -109,12 +111,14 @@
109
111
  transition: grid-template-rows 200ms ease-in-out;
110
112
  }
111
113
 
112
- .accordion-item.open .accordion-content {
114
+ .accordion-item:not(details):is(.open, .accordion-item-open) > .accordion-content,
115
+ details.accordion-item[open] > .accordion-content {
113
116
  grid-template-rows: 1fr;
114
117
  }
115
118
 
116
119
  .accordion-body {
117
120
  overflow: hidden;
121
+ min-block-size: 0;
118
122
  }
119
123
 
120
124
  .accordion-body-inner {
@@ -152,7 +156,8 @@
152
156
  }
153
157
 
154
158
  .accordion-filled .accordion-header:hover,
155
- .accordion-filled .accordion-item.open .accordion-header {
159
+ .accordion-filled > .accordion-item:not(details):is(.open, .accordion-item-open) > .accordion-header,
160
+ .accordion-filled > details.accordion-item[open] > .accordion-header {
156
161
  background-color: var(--color-surface-container-high);
157
162
  }
158
163
 
@@ -224,15 +229,34 @@
224
229
  }
225
230
 
226
231
  /* Color Variants */
227
- .accordion-primary .accordion-item.open .accordion-header {
232
+ .accordion-primary > .accordion-item:not(details):is(.open, .accordion-item-open) > .accordion-header,
233
+ .accordion-primary > details.accordion-item[open] > .accordion-header {
228
234
  background-color: var(--color-primary-container);
229
235
  color: var(--color-on-primary-container);
230
236
  }
231
237
 
232
- .accordion-primary .accordion-item.open .accordion-expand {
238
+ .accordion-primary > .accordion-item:not(details):is(.open, .accordion-item-open) > .accordion-header > .accordion-expand,
239
+ .accordion-primary > details.accordion-item[open] > .accordion-header > .accordion-expand {
233
240
  color: var(--color-on-primary-container);
234
241
  }
235
242
 
243
+ .accordion-outlined { border: 1px solid var(--color-outline-variant); }
244
+ .accordion-comfortable .accordion-header { padding: 1.25rem; }
245
+ .accordion-header-icon { display: flex; align-items: center; gap: 0.75rem; }
246
+ .accordion-header-icon-leading { inline-size: 1.25rem; block-size: 1.25rem; flex: none; }
247
+ .accordion-item-disabled > .accordion-header { opacity: 0.6; cursor: not-allowed; }
248
+ .accordion-no-animation .accordion-content, .accordion-no-animation .accordion-expand { transition: none; }
249
+ .accordion-secondary > .accordion-item:not(details):is(.open, .accordion-item-open) > .accordion-header,
250
+ .accordion-secondary > details.accordion-item[open] > .accordion-header { color: var(--color-secondary); }
251
+ .accordion-tertiary > .accordion-item:not(details):is(.open, .accordion-item-open) > .accordion-header,
252
+ .accordion-tertiary > details.accordion-item[open] > .accordion-header { color: var(--color-tertiary); }
253
+ details.accordion-item > summary { list-style: none; }
254
+ details.accordion-item > summary::-webkit-details-marker { display: none; }
255
+ details.accordion-item:not([open]) > .accordion-content,
256
+ .accordion-item:not(details):not(.open):not(.accordion-item-open) > .accordion-content,
257
+ .accordion-content[hidden] { display: none; }
258
+ .accordion-title, .accordion-body-inner { min-inline-size: 0; overflow-wrap: anywhere; }
259
+
236
260
  /* Reduce Motion */
237
261
  @media (prefers-reduced-motion: reduce) {
238
262
  .accordion-content,