@work-rjkashyap/unified-ui 0.1.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 (60) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/README.md +365 -0
  3. package/dist/chunk-2JFREULQ.cjs +29 -0
  4. package/dist/chunk-2RGLRX6K.cjs +279 -0
  5. package/dist/chunk-3HHJAYQI.cjs +469 -0
  6. package/dist/chunk-5S5DMH5G.cjs +5983 -0
  7. package/dist/chunk-BIW2RPDU.cjs +73 -0
  8. package/dist/chunk-CWETOWRM.mjs +456 -0
  9. package/dist/chunk-ECIGDEAH.cjs +140 -0
  10. package/dist/chunk-EO4WROWH.mjs +432 -0
  11. package/dist/chunk-EZ2L3XPS.mjs +83 -0
  12. package/dist/chunk-I74E52C5.mjs +271 -0
  13. package/dist/chunk-ITBG42M5.mjs +133 -0
  14. package/dist/chunk-IWJ5VMZ7.mjs +323 -0
  15. package/dist/chunk-KHON2AEM.cjs +342 -0
  16. package/dist/chunk-LSNKPQP7.cjs +58 -0
  17. package/dist/chunk-M2LNQWOB.mjs +63 -0
  18. package/dist/chunk-NMPHV6ZD.mjs +27 -0
  19. package/dist/chunk-QXR4VY7Q.cjs +268 -0
  20. package/dist/chunk-SSGN5QDC.mjs +248 -0
  21. package/dist/chunk-X2WCY4VB.mjs +5836 -0
  22. package/dist/chunk-XCKK6P46.cjs +91 -0
  23. package/dist/chunk-ZBN26FLO.mjs +46 -0
  24. package/dist/chunk-ZPIPKY2J.cjs +478 -0
  25. package/dist/components.cjs +477 -0
  26. package/dist/components.d.cts +3077 -0
  27. package/dist/components.d.ts +3077 -0
  28. package/dist/components.mjs +4 -0
  29. package/dist/index.cjs +1027 -0
  30. package/dist/index.d.cts +30 -0
  31. package/dist/index.d.ts +30 -0
  32. package/dist/index.mjs +17 -0
  33. package/dist/motion-D9wQbcKL.d.cts +80 -0
  34. package/dist/motion-D9wQbcKL.d.ts +80 -0
  35. package/dist/motion.cjs +216 -0
  36. package/dist/motion.d.cts +104 -0
  37. package/dist/motion.d.ts +104 -0
  38. package/dist/motion.mjs +3 -0
  39. package/dist/primitives.cjs +57 -0
  40. package/dist/primitives.d.cts +390 -0
  41. package/dist/primitives.d.ts +390 -0
  42. package/dist/primitives.mjs +4 -0
  43. package/dist/theme.cjs +38 -0
  44. package/dist/theme.d.cts +117 -0
  45. package/dist/theme.d.ts +117 -0
  46. package/dist/theme.mjs +5 -0
  47. package/dist/tokens.cjs +137 -0
  48. package/dist/tokens.d.cts +30 -0
  49. package/dist/tokens.d.ts +30 -0
  50. package/dist/tokens.mjs +4 -0
  51. package/dist/typography-DlvVjEdE.d.cts +146 -0
  52. package/dist/typography-DlvVjEdE.d.ts +146 -0
  53. package/dist/utils.cjs +164 -0
  54. package/dist/utils.d.cts +521 -0
  55. package/dist/utils.d.ts +521 -0
  56. package/dist/utils.mjs +3 -0
  57. package/dist/z-index-B_nTQ3qo.d.cts +422 -0
  58. package/dist/z-index-B_nTQ3qo.d.ts +422 -0
  59. package/package.json +183 -0
  60. package/styles.css +500 -0
package/styles.css ADDED
@@ -0,0 +1,500 @@
1
+ /* ============================================================================
2
+ Unified UI — CSS Custom Properties & Tailwind v4 Integration
3
+ ============================================================================
4
+ This stylesheet defines all Unified UI CSS custom properties and maps
5
+ them into the Tailwind v4 theme via @theme blocks. It is the bridge
6
+ between the TypeScript token layer and the utility-class layer.
7
+
8
+ Architecture:
9
+ 1. :root → Light theme CSS custom properties (default)
10
+ 2. .dark → Dark theme CSS custom property overrides
11
+ 3. @theme → Tailwind v4 theme extension (maps vars to utilities)
12
+
13
+ Naming convention:
14
+ --ds-color-* → Semantic color tokens (RGB channel strings)
15
+ --ds-radius-* → Border radius tokens
16
+ --ds-shadow-* → Box shadow tokens
17
+ --ds-z-* → Z-index tokens
18
+ --ds-duration-* → Motion duration tokens
19
+ --ds-easing-* → Motion easing tokens
20
+ --ds-font-* → Font family tokens
21
+
22
+ Color values are stored as raw RGB channels (e.g. "99 102 241") to
23
+ support Tailwind's opacity modifier syntax:
24
+ bg-ds-primary/50 → background: rgb(99 102 241 / 0.5)
25
+
26
+ NEVER hardcode design values in components. All values must flow
27
+ through these CSS custom properties.
28
+ ============================================================================ */
29
+
30
+ /* ---------------------------------------------------------------------------
31
+ Layer 1: Light Theme (Default)
32
+ --------------------------------------------------------------------------- */
33
+
34
+ :root {
35
+ /* --- Backgrounds --- */
36
+ --ds-color-background: 255 255 255;
37
+ --ds-color-foreground: 9 9 11;
38
+
39
+ /* --- Surfaces --- */
40
+ --ds-color-surface: 250 250 250;
41
+ --ds-color-surface-raised: 255 255 255;
42
+ --ds-color-surface-overlay: 244 244 245;
43
+
44
+ /* --- Muted --- */
45
+ --ds-color-muted: 244 244 245;
46
+ --ds-color-muted-foreground: 82 82 91;
47
+
48
+ /* --- Primary (Brand) --- */
49
+ --ds-color-primary: 79 70 229;
50
+ --ds-color-primary-foreground: 255 255 255;
51
+ --ds-color-primary-hover: 67 56 202;
52
+ --ds-color-primary-active: 55 48 163;
53
+ --ds-color-primary-muted: 238 242 255;
54
+ --ds-color-primary-muted-foreground: 67 56 202;
55
+
56
+ /* --- Secondary --- */
57
+ --ds-color-secondary: 244 244 245;
58
+ --ds-color-secondary-foreground: 24 24 27;
59
+ --ds-color-secondary-hover: 228 228 231;
60
+ --ds-color-secondary-active: 212 212 216;
61
+
62
+ /* --- Success --- */
63
+ --ds-color-success: 22 163 74;
64
+ --ds-color-success-foreground: 9 9 11;
65
+ --ds-color-success-muted: 240 253 244;
66
+ --ds-color-success-muted-foreground: 21 128 61;
67
+
68
+ /* --- Warning --- */
69
+ --ds-color-warning: 245 158 11;
70
+ --ds-color-warning-foreground: 9 9 11;
71
+ --ds-color-warning-muted: 255 251 235;
72
+ --ds-color-warning-muted-foreground: 180 83 9;
73
+
74
+ /* --- Danger --- */
75
+ --ds-color-danger: 220 38 38;
76
+ --ds-color-danger-foreground: 255 255 255;
77
+ --ds-color-danger-hover: 185 28 28;
78
+ --ds-color-danger-active: 153 27 27;
79
+ --ds-color-danger-muted: 254 242 242;
80
+ --ds-color-danger-muted-foreground: 185 28 28;
81
+
82
+ /* --- Info --- */
83
+ --ds-color-info: 37 99 235;
84
+ --ds-color-info-foreground: 255 255 255;
85
+ --ds-color-info-muted: 239 246 255;
86
+ --ds-color-info-muted-foreground: 29 78 216;
87
+
88
+ /* --- Borders --- */
89
+ --ds-color-border: 188 188 194;
90
+ --ds-color-border-muted: 244 244 245;
91
+ --ds-color-border-strong: 148 148 157;
92
+
93
+ /* --- Focus --- */
94
+ --ds-color-focus-ring: 99 102 241;
95
+
96
+ /* --- Input --- */
97
+ --ds-color-input: 148 148 157;
98
+ --ds-color-input-foreground: 24 24 27;
99
+ --ds-color-input-placeholder: 113 113 122;
100
+
101
+ /* --- Disabled --- */
102
+ --ds-color-disabled: 244 244 245;
103
+ --ds-color-disabled-foreground: 120 120 129;
104
+
105
+ /* --- Radius --- */
106
+ --ds-radius-none: 0px;
107
+ --ds-radius-sm: 4px;
108
+ --ds-radius-md: 6px;
109
+ --ds-radius-lg: 8px;
110
+ --ds-radius-xl: 12px;
111
+ --ds-radius-full: 9999px;
112
+
113
+ /* --- Shadows --- */
114
+ --ds-shadow-none: none;
115
+ --ds-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
116
+ --ds-shadow-sm:
117
+ 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
118
+ --ds-shadow-md:
119
+ 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
120
+ --ds-shadow-lg:
121
+ 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
122
+ --ds-shadow-xl:
123
+ 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
124
+ --ds-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
125
+ --ds-shadow-focus-ring: 0 0 0 2px rgb(var(--ds-color-focus-ring) / 0.4);
126
+
127
+ /* --- Z-Index --- */
128
+ --ds-z-base: 0;
129
+ --ds-z-dropdown: 10;
130
+ --ds-z-sticky: 20;
131
+ --ds-z-overlay: 30;
132
+ --ds-z-modal: 40;
133
+ --ds-z-popover: 50;
134
+ --ds-z-toast: 60;
135
+ --ds-z-tooltip: 70;
136
+ --ds-z-max: 9999;
137
+
138
+ /* --- Motion Durations --- */
139
+ --ds-duration-instant: 0ms;
140
+ --ds-duration-fast: 100ms;
141
+ --ds-duration-moderate: 150ms;
142
+ --ds-duration-normal: 200ms;
143
+ --ds-duration-slow: 300ms;
144
+ --ds-duration-slower: 400ms;
145
+ --ds-duration-slowest: 500ms;
146
+
147
+ /* --- Motion Easing --- */
148
+ --ds-easing-standard: cubic-bezier(0.2, 0, 0.38, 0.9);
149
+ --ds-easing-decelerate: cubic-bezier(0, 0, 0.2, 1);
150
+ --ds-easing-accelerate: cubic-bezier(0.4, 0, 1, 1);
151
+ --ds-easing-emphasize: cubic-bezier(0, 0, 0.15, 1);
152
+ --ds-easing-linear: cubic-bezier(0, 0, 1, 1);
153
+ --ds-easing-snap: cubic-bezier(0.2, 0, 0, 1);
154
+
155
+ /* --- Font Families --- */
156
+ --ds-font-display:
157
+ var(--font-inter), system-ui, -apple-system, BlinkMacSystemFont,
158
+ "Segoe UI", Roboto, sans-serif;
159
+ --ds-font-sans:
160
+ var(--font-outfit), system-ui, -apple-system, BlinkMacSystemFont,
161
+ "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
162
+ --ds-font-serif: var(--font-lora), Georgia, "Times New Roman", serif;
163
+ --ds-font-mono:
164
+ var(--font-jetbrains), "Fira Code", "SF Mono", "Cascadia Code",
165
+ Consolas, "Liberation Mono", Menlo, monospace;
166
+ --ds-font-inherit: inherit;
167
+ }
168
+
169
+ /* ---------------------------------------------------------------------------
170
+ Layer 2: Dark Theme Overrides
171
+ --------------------------------------------------------------------------- */
172
+
173
+ .dark {
174
+ /* --- Backgrounds --- */
175
+ --ds-color-background: 9 9 11;
176
+ --ds-color-foreground: 250 250 250;
177
+
178
+ /* --- Surfaces --- */
179
+ --ds-color-surface: 24 24 27;
180
+ --ds-color-surface-raised: 39 39 42;
181
+ --ds-color-surface-overlay: 39 39 42;
182
+
183
+ /* --- Muted --- */
184
+ --ds-color-muted: 39 39 42;
185
+ --ds-color-muted-foreground: 161 161 170;
186
+
187
+ /* --- Primary (Brand) --- */
188
+ --ds-color-primary: 129 140 248;
189
+ --ds-color-primary-foreground: 24 24 27;
190
+ --ds-color-primary-hover: 165 180 252;
191
+ --ds-color-primary-active: 199 210 254;
192
+ --ds-color-primary-muted: 30 27 75;
193
+ --ds-color-primary-muted-foreground: 165 180 252;
194
+
195
+ /* --- Secondary --- */
196
+ --ds-color-secondary: 39 39 42;
197
+ --ds-color-secondary-foreground: 244 244 245;
198
+ --ds-color-secondary-hover: 63 63 70;
199
+ --ds-color-secondary-active: 82 82 91;
200
+
201
+ /* --- Success --- */
202
+ --ds-color-success: 34 197 94;
203
+ --ds-color-success-foreground: 9 9 11;
204
+ --ds-color-success-muted: 5 46 22;
205
+ --ds-color-success-muted-foreground: 134 239 172;
206
+
207
+ /* --- Warning --- */
208
+ --ds-color-warning: 251 191 36;
209
+ --ds-color-warning-foreground: 9 9 11;
210
+ --ds-color-warning-muted: 69 26 3;
211
+ --ds-color-warning-muted-foreground: 252 211 77;
212
+
213
+ /* --- Danger --- */
214
+ --ds-color-danger: 239 68 68;
215
+ --ds-color-danger-foreground: 9 9 11;
216
+ --ds-color-danger-hover: 248 113 113;
217
+ --ds-color-danger-active: 252 165 165;
218
+ --ds-color-danger-muted: 69 10 10;
219
+ --ds-color-danger-muted-foreground: 252 165 165;
220
+
221
+ /* --- Info --- */
222
+ --ds-color-info: 96 165 250;
223
+ --ds-color-info-foreground: 9 9 11;
224
+ --ds-color-info-muted: 23 37 84;
225
+ --ds-color-info-muted-foreground: 147 197 253;
226
+
227
+ /* --- Borders --- */
228
+ --ds-color-border: 82 82 91;
229
+ --ds-color-border-muted: 39 39 42;
230
+ --ds-color-border-strong: 113 113 122;
231
+
232
+ /* --- Focus --- */
233
+ --ds-color-focus-ring: 129 140 248;
234
+
235
+ /* --- Input --- */
236
+ --ds-color-input: 96 96 105;
237
+ --ds-color-input-foreground: 250 250 250;
238
+ --ds-color-input-placeholder: 137 137 145;
239
+
240
+ /* --- Disabled --- */
241
+ --ds-color-disabled: 39 39 42;
242
+ --ds-color-disabled-foreground: 113 113 122;
243
+
244
+ /* --- Dark Shadows (more opaque for dark backgrounds) --- */
245
+ --ds-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.2);
246
+ --ds-shadow-sm:
247
+ 0 1px 3px 0 rgb(0 0 0 / 0.3), 0 1px 2px -1px rgb(0 0 0 / 0.3);
248
+ --ds-shadow-md:
249
+ 0 4px 6px -1px rgb(0 0 0 / 0.35), 0 2px 4px -2px rgb(0 0 0 / 0.3);
250
+ --ds-shadow-lg:
251
+ 0 10px 15px -3px rgb(0 0 0 / 0.35), 0 4px 6px -4px rgb(0 0 0 / 0.3);
252
+ --ds-shadow-xl:
253
+ 0 20px 25px -5px rgb(0 0 0 / 0.4), 0 8px 10px -6px rgb(0 0 0 / 0.35);
254
+ --ds-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.5);
255
+ --ds-shadow-focus-ring: 0 0 0 2px rgb(var(--ds-color-focus-ring) / 0.5);
256
+ }
257
+
258
+ /* ---------------------------------------------------------------------------
259
+ Layer 3: Tailwind v4 Theme Extension
260
+ ---------------------------------------------------------------------------
261
+ Maps design system CSS custom properties into Tailwind utility classes.
262
+
263
+ After this block, you can use classes like:
264
+ bg-ds-primary → background: rgb(var(--ds-color-primary))
265
+ text-ds-foreground → color: rgb(var(--ds-color-foreground))
266
+ rounded-ds-md → border-radius: var(--ds-radius-md)
267
+ shadow-ds-md → box-shadow: var(--ds-shadow-md)
268
+ z-ds-modal → z-index: var(--ds-z-modal)
269
+ duration-ds-normal → transition-duration: var(--ds-duration-normal)
270
+ ease-ds-standard → transition-timing-function: var(--ds-easing-standard)
271
+
272
+ Color utilities support opacity modifiers:
273
+ bg-ds-primary/50 → background: rgb(var(--ds-color-primary) / 0.5)
274
+ --------------------------------------------------------------------------- */
275
+
276
+ @theme {
277
+ /* --- Colors (RGB channel references for alpha support) --- */
278
+
279
+ /* Backgrounds */
280
+ --color-ds-background: rgb(var(--ds-color-background));
281
+ --color-ds-foreground: rgb(var(--ds-color-foreground));
282
+
283
+ /* Surfaces */
284
+ --color-ds-surface: rgb(var(--ds-color-surface));
285
+ --color-ds-surface-raised: rgb(var(--ds-color-surface-raised));
286
+ --color-ds-surface-overlay: rgb(var(--ds-color-surface-overlay));
287
+
288
+ /* Muted */
289
+ --color-ds-muted: rgb(var(--ds-color-muted));
290
+ --color-ds-muted-foreground: rgb(var(--ds-color-muted-foreground));
291
+
292
+ /* Primary */
293
+ --color-ds-primary: rgb(var(--ds-color-primary));
294
+ --color-ds-primary-foreground: rgb(var(--ds-color-primary-foreground));
295
+ --color-ds-primary-hover: rgb(var(--ds-color-primary-hover));
296
+ --color-ds-primary-active: rgb(var(--ds-color-primary-active));
297
+ --color-ds-primary-muted: rgb(var(--ds-color-primary-muted));
298
+ --color-ds-primary-muted-foreground: rgb(
299
+ var(--ds-color-primary-muted-foreground)
300
+ );
301
+
302
+ /* Secondary */
303
+ --color-ds-secondary: rgb(var(--ds-color-secondary));
304
+ --color-ds-secondary-foreground: rgb(var(--ds-color-secondary-foreground));
305
+ --color-ds-secondary-hover: rgb(var(--ds-color-secondary-hover));
306
+ --color-ds-secondary-active: rgb(var(--ds-color-secondary-active));
307
+
308
+ /* Success */
309
+ --color-ds-success: rgb(var(--ds-color-success));
310
+ --color-ds-success-foreground: rgb(var(--ds-color-success-foreground));
311
+ --color-ds-success-muted: rgb(var(--ds-color-success-muted));
312
+ --color-ds-success-muted-foreground: rgb(
313
+ var(--ds-color-success-muted-foreground)
314
+ );
315
+
316
+ /* Warning */
317
+ --color-ds-warning: rgb(var(--ds-color-warning));
318
+ --color-ds-warning-foreground: rgb(var(--ds-color-warning-foreground));
319
+ --color-ds-warning-muted: rgb(var(--ds-color-warning-muted));
320
+ --color-ds-warning-muted-foreground: rgb(
321
+ var(--ds-color-warning-muted-foreground)
322
+ );
323
+
324
+ /* Danger */
325
+ --color-ds-danger: rgb(var(--ds-color-danger));
326
+ --color-ds-danger-foreground: rgb(var(--ds-color-danger-foreground));
327
+ --color-ds-danger-hover: rgb(var(--ds-color-danger-hover));
328
+ --color-ds-danger-active: rgb(var(--ds-color-danger-active));
329
+ --color-ds-danger-muted: rgb(var(--ds-color-danger-muted));
330
+ --color-ds-danger-muted-foreground: rgb(
331
+ var(--ds-color-danger-muted-foreground)
332
+ );
333
+
334
+ /* Info */
335
+ --color-ds-info: rgb(var(--ds-color-info));
336
+ --color-ds-info-foreground: rgb(var(--ds-color-info-foreground));
337
+ --color-ds-info-muted: rgb(var(--ds-color-info-muted));
338
+ --color-ds-info-muted-foreground: rgb(
339
+ var(--ds-color-info-muted-foreground)
340
+ );
341
+
342
+ /* Borders */
343
+ --color-ds-border: rgb(var(--ds-color-border));
344
+ --color-ds-border-muted: rgb(var(--ds-color-border-muted));
345
+ --color-ds-border-strong: rgb(var(--ds-color-border-strong));
346
+
347
+ /* Focus */
348
+ --color-ds-focus-ring: rgb(var(--ds-color-focus-ring));
349
+
350
+ /* Input */
351
+ --color-ds-input: rgb(var(--ds-color-input));
352
+ --color-ds-input-foreground: rgb(var(--ds-color-input-foreground));
353
+ --color-ds-input-placeholder: rgb(var(--ds-color-input-placeholder));
354
+
355
+ /* Disabled */
356
+ --color-ds-disabled: rgb(var(--ds-color-disabled));
357
+ --color-ds-disabled-foreground: rgb(var(--ds-color-disabled-foreground));
358
+
359
+ /* --- Border Radius --- */
360
+ --radius-ds-none: var(--ds-radius-none);
361
+ --radius-ds-sm: var(--ds-radius-sm);
362
+ --radius-ds-md: var(--ds-radius-md);
363
+ --radius-ds-lg: var(--ds-radius-lg);
364
+ --radius-ds-xl: var(--ds-radius-xl);
365
+ --radius-ds-full: var(--ds-radius-full);
366
+
367
+ /* --- Shadows --- */
368
+ --shadow-ds-none: var(--ds-shadow-none);
369
+ --shadow-ds-xs: var(--ds-shadow-xs);
370
+ --shadow-ds-sm: var(--ds-shadow-sm);
371
+ --shadow-ds-md: var(--ds-shadow-md);
372
+ --shadow-ds-lg: var(--ds-shadow-lg);
373
+ --shadow-ds-xl: var(--ds-shadow-xl);
374
+ --shadow-ds-2xl: var(--ds-shadow-2xl);
375
+ --shadow-ds-focus-ring: var(--ds-shadow-focus-ring);
376
+
377
+ /* --- Z-Index --- */
378
+ --z-index-ds-base: var(--ds-z-base);
379
+ --z-index-ds-dropdown: var(--ds-z-dropdown);
380
+ --z-index-ds-sticky: var(--ds-z-sticky);
381
+ --z-index-ds-overlay: var(--ds-z-overlay);
382
+ --z-index-ds-modal: var(--ds-z-modal);
383
+ --z-index-ds-popover: var(--ds-z-popover);
384
+ --z-index-ds-toast: var(--ds-z-toast);
385
+ --z-index-ds-tooltip: var(--ds-z-tooltip);
386
+ --z-index-ds-max: var(--ds-z-max);
387
+
388
+ /* --- Transition Durations --- */
389
+ --transition-duration-ds-instant: var(--ds-duration-instant);
390
+ --transition-duration-ds-fast: var(--ds-duration-fast);
391
+ --transition-duration-ds-moderate: var(--ds-duration-moderate);
392
+ --transition-duration-ds-normal: var(--ds-duration-normal);
393
+ --transition-duration-ds-slow: var(--ds-duration-slow);
394
+ --transition-duration-ds-slower: var(--ds-duration-slower);
395
+ --transition-duration-ds-slowest: var(--ds-duration-slowest);
396
+
397
+ /* --- Transition Easing --- */
398
+ --transition-timing-function-ds-standard: var(--ds-easing-standard);
399
+ --transition-timing-function-ds-decelerate: var(--ds-easing-decelerate);
400
+ --transition-timing-function-ds-accelerate: var(--ds-easing-accelerate);
401
+ --transition-timing-function-ds-emphasize: var(--ds-easing-emphasize);
402
+ --transition-timing-function-ds-linear: var(--ds-easing-linear);
403
+ --transition-timing-function-ds-snap: var(--ds-easing-snap);
404
+
405
+ /* --- Font Families --- */
406
+ --font-ds-display: var(--ds-font-display);
407
+ --font-ds-sans: var(--ds-font-sans);
408
+ --font-ds-serif: var(--ds-font-serif);
409
+ --font-ds-mono: var(--ds-font-mono);
410
+ }
411
+
412
+ /* ---------------------------------------------------------------------------
413
+ Layer 4: Focus Ring Utility
414
+ ---------------------------------------------------------------------------
415
+ A consistent, accessible focus ring that uses the design system's focus
416
+ color token. Apply via `focus-visible:ring-ds` or use the `.ds-focus-ring`
417
+ utility class directly.
418
+ --------------------------------------------------------------------------- */
419
+
420
+ .ds-focus-ring {
421
+ outline: 2px solid rgb(var(--ds-color-focus-ring));
422
+ outline-offset: 2px;
423
+ }
424
+
425
+ /* Focus ring as a box-shadow variant (for rounded elements where outline
426
+ doesn't follow border-radius in older browsers) */
427
+ .ds-focus-ring-shadow {
428
+ box-shadow: var(--ds-shadow-focus-ring);
429
+ }
430
+
431
+ /* ---------------------------------------------------------------------------
432
+ Layer 5: Base Resets for Design System Components
433
+ ---------------------------------------------------------------------------
434
+ Minimal resets that apply to elements within the design system. These
435
+ do NOT conflict with Fumadocs styles — they only target elements with
436
+ the `ds-` prefix or within `[data-ds]` containers.
437
+ --------------------------------------------------------------------------- */
438
+
439
+ [data-ds] {
440
+ font-family: var(--ds-font-sans);
441
+ -webkit-font-smoothing: antialiased;
442
+ -moz-osx-font-smoothing: grayscale;
443
+ }
444
+
445
+ /* Consistent focus behavior for all interactive DS elements */
446
+ [data-ds] :focus-visible {
447
+ outline: 2px solid rgb(var(--ds-color-focus-ring));
448
+ outline-offset: 2px;
449
+ }
450
+
451
+ /* Remove default focus styles for mouse users (keep for keyboard) */
452
+ [data-ds] :focus:not(:focus-visible) {
453
+ outline: none;
454
+ }
455
+
456
+ /* ---------------------------------------------------------------------------
457
+ Layer 6: Transition Defaults
458
+ ---------------------------------------------------------------------------
459
+ Default transition properties for design system interactive elements.
460
+ Uses the standard easing curve and normal duration from tokens.
461
+ --------------------------------------------------------------------------- */
462
+
463
+ .ds-transition {
464
+ transition-property:
465
+ color, background-color, border-color, box-shadow, opacity, transform;
466
+ transition-duration: var(--ds-duration-normal);
467
+ transition-timing-function: var(--ds-easing-standard);
468
+ }
469
+
470
+ .ds-transition-fast {
471
+ transition-property:
472
+ color, background-color, border-color, box-shadow, opacity, transform;
473
+ transition-duration: var(--ds-duration-fast);
474
+ transition-timing-function: var(--ds-easing-standard);
475
+ }
476
+
477
+ .ds-transition-slow {
478
+ transition-property:
479
+ color, background-color, border-color, box-shadow, opacity, transform;
480
+ transition-duration: var(--ds-duration-slow);
481
+ transition-timing-function: var(--ds-easing-decelerate);
482
+ }
483
+
484
+ /* ---------------------------------------------------------------------------
485
+ Layer 7: Reduced Motion
486
+ ---------------------------------------------------------------------------
487
+ Respects user's prefers-reduced-motion setting. All DS transitions and
488
+ animations are disabled when reduced motion is preferred.
489
+ --------------------------------------------------------------------------- */
490
+
491
+ @media (prefers-reduced-motion: reduce) {
492
+ [data-ds] *,
493
+ [data-ds] *::before,
494
+ [data-ds] *::after {
495
+ animation-duration: 0.01ms !important;
496
+ animation-iteration-count: 1 !important;
497
+ transition-duration: 0.01ms !important;
498
+ scroll-behavior: auto !important;
499
+ }
500
+ }