@zvk/ui 0.1.8 → 0.1.11

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 (59) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +5 -1
  3. package/dist/components/alert-dialog/alert-dialog.d.ts +1 -1
  4. package/dist/components/alert-dialog/alert-dialog.js +18 -10
  5. package/dist/components/combobox/combobox.js +3 -1
  6. package/dist/components/command/command-filter.js +1 -1
  7. package/dist/components/command/command.d.ts +5 -0
  8. package/dist/components/command/command.js +9 -2
  9. package/dist/components/command/index.d.ts +1 -1
  10. package/dist/components/context-menu/context-menu.js +1 -1
  11. package/dist/components/date-range-picker/date-range-picker.d.ts +27 -0
  12. package/dist/components/date-range-picker/date-range-picker.js +193 -0
  13. package/dist/components/date-range-picker/index.d.ts +2 -0
  14. package/dist/components/date-range-picker/index.js +2 -0
  15. package/dist/components/dialog/dialog.d.ts +1 -1
  16. package/dist/components/dialog/dialog.js +19 -14
  17. package/dist/components/dropdown-menu/dropdown-menu.d.ts +2 -2
  18. package/dist/components/dropdown-menu/dropdown-menu.js +24 -19
  19. package/dist/components/file-dropzone/file-dropzone.d.ts +25 -0
  20. package/dist/components/file-dropzone/file-dropzone.js +171 -0
  21. package/dist/components/file-dropzone/index.d.ts +2 -0
  22. package/dist/components/file-dropzone/index.js +2 -0
  23. package/dist/components/form/form.d.ts +16 -1
  24. package/dist/components/form/form.js +13 -2
  25. package/dist/components/form/index.d.ts +1 -1
  26. package/dist/components/hover-card/hover-card.d.ts +1 -1
  27. package/dist/components/hover-card/hover-card.js +12 -3
  28. package/dist/components/index.d.ts +6 -0
  29. package/dist/components/index.js +3 -0
  30. package/dist/components/kbd/index.d.ts +2 -0
  31. package/dist/components/kbd/index.js +1 -0
  32. package/dist/components/kbd/kbd.d.ts +15 -0
  33. package/dist/components/kbd/kbd.js +10 -0
  34. package/dist/components/menubar/menubar.js +1 -1
  35. package/dist/components/popover/popover.d.ts +1 -1
  36. package/dist/components/popover/popover.js +14 -24
  37. package/dist/components/select/select.d.ts +1 -1
  38. package/dist/components/select/select.js +88 -8
  39. package/dist/components/sheet/sheet.d.ts +1 -1
  40. package/dist/components/sheet/sheet.js +17 -12
  41. package/dist/components/table/index.d.ts +1 -1
  42. package/dist/components/table/table.d.ts +37 -0
  43. package/dist/components/table/table.js +30 -2
  44. package/dist/components/toast/index.d.ts +1 -1
  45. package/dist/components/toast/toast.d.ts +18 -0
  46. package/dist/components/toast/toast.js +60 -0
  47. package/dist/components/tooltip/tooltip.d.ts +1 -1
  48. package/dist/components/tooltip/tooltip.js +12 -3
  49. package/dist/internal/floating/transform-origin.d.ts +2 -0
  50. package/dist/internal/floating/transform-origin.js +22 -0
  51. package/dist/internal/presence/index.d.ts +2 -0
  52. package/dist/internal/presence/index.js +2 -0
  53. package/dist/internal/presence/use-presence.d.ts +18 -0
  54. package/dist/internal/presence/use-presence.js +119 -0
  55. package/dist/styles.css +1730 -222
  56. package/dist/tokens/token-types.d.ts +4 -0
  57. package/dist/tokens/tokens.d.ts +41 -5
  58. package/dist/tokens/tokens.js +45 -9
  59. package/package.json +137 -61
package/dist/styles.css CHANGED
@@ -6,6 +6,9 @@
6
6
  :root {
7
7
  --zvk-ui-font-family-sans: "Aptos", "SF Pro Text", "Segoe UI Variable", ui-sans-serif, system-ui, sans-serif;
8
8
  --zvk-ui-font-family-mono: "SF Mono", "Cascadia Code", ui-monospace, monospace;
9
+ --zvk-ui-font-family-primary: var(--zvk-ui-font-family-sans);
10
+ --zvk-ui-font-family-secondary: var(--zvk-ui-font-family-sans);
11
+ --zvk-ui-font-family-tertiary: var(--zvk-ui-font-family-mono);
9
12
  --zvk-ui-font-size-xs: 0.75rem;
10
13
  --zvk-ui-font-size-sm: 0.875rem;
11
14
  --zvk-ui-font-size-md: 0.9375rem;
@@ -25,6 +28,7 @@
25
28
  --zvk-ui-space-5: 1.25rem;
26
29
  --zvk-ui-space-6: 1.5rem;
27
30
  --zvk-ui-space-8: 2rem;
31
+ --zvk-ui-space-10: 2.5rem;
28
32
 
29
33
  --zvk-ui-radius-xs: 0.25rem;
30
34
  --zvk-ui-radius-sm: 0.375rem;
@@ -42,18 +46,36 @@
42
46
  --zvk-ui-container-lg: 64rem;
43
47
  --zvk-ui-container-xl: 80rem;
44
48
 
49
+ --zvk-ui-material-surface-backdrop-filter: none;
50
+ --zvk-ui-material-floating-backdrop-filter: none;
51
+ --zvk-ui-material-control-backdrop-filter: none;
52
+ --zvk-ui-material-glass-highlight: 0 0 0 0 transparent;
53
+ --zvk-ui-material-glass-shadow: var(--zvk-ui-shadow-sm);
54
+ --zvk-ui-material-overlay-background: color-mix(in srgb, var(--zvk-ui-color-foreground) 28%, transparent);
55
+ --zvk-ui-material-reduced-transparency-surface: var(--zvk-ui-color-surface);
56
+ --zvk-ui-material-reduced-transparency-surface-raised: var(--zvk-ui-color-surface-raised);
57
+ --zvk-ui-material-reduced-transparency-control: var(--zvk-ui-control-background);
58
+
59
+ --zvk-ui-z-index-base: 0;
45
60
  --zvk-ui-z-index-overlay: 1000;
61
+ --zvk-ui-z-index-modal: calc(var(--zvk-ui-z-index-overlay) + 1);
46
62
  --zvk-ui-z-index-popover: 1100;
47
63
  --zvk-ui-z-popover: var(--zvk-ui-z-index-popover);
48
64
  --zvk-ui-z-index-tooltip: 1200;
49
65
  --zvk-ui-z-index-toast: 1300;
50
66
 
51
67
  --zvk-ui-opacity-disabled: 0.56;
68
+ --zvk-ui-duration-instant: 80ms;
52
69
  --zvk-ui-duration-fast: 120ms;
53
70
  --zvk-ui-duration-normal: 180ms;
71
+ --zvk-ui-duration-slow: 240ms;
54
72
  --zvk-ui-ease-standard: cubic-bezier(0.2, 0, 0, 1);
73
+ --zvk-ui-ease-enter: cubic-bezier(0.16, 1, 0.3, 1);
74
+ --zvk-ui-ease-exit: cubic-bezier(0.7, 0, 0.84, 0);
75
+ --zvk-ui-ease-emphasized: cubic-bezier(0.2, 0.8, 0.2, 1);
55
76
  --zvk-ui-focus-ring: 0 0 0 3px color-mix(in srgb, var(--zvk-ui-color-ring) 24%, transparent);
56
77
  }
78
+
57
79
  }
58
80
 
59
81
 
@@ -92,6 +114,21 @@
92
114
  --zvk-ui-control-hover: #f8fafc;
93
115
  --zvk-ui-control-active: #eef4ff;
94
116
  --zvk-ui-card-border: #7f8ea3;
117
+ --zvk-ui-material-overlay-background: rgb(255 255 255 / 0.96);
118
+ --zvk-ui-button-backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
119
+ --zvk-ui-select-content-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
120
+ --zvk-ui-dialog-content-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
121
+ --zvk-ui-alert-dialog-content-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
122
+ --zvk-ui-sheet-content-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
123
+ --zvk-ui-popover-content-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
124
+ --zvk-ui-hover-card-content-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
125
+ --zvk-ui-tooltip-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
126
+ --zvk-ui-dropdown-menu-content-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
127
+ --zvk-ui-combobox-popup-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
128
+ --zvk-ui-context-menu-content-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
129
+ --zvk-ui-menubar-content-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
130
+ --zvk-ui-sidebar-shell-sidebar-backdrop-filter: var(--zvk-ui-material-surface-backdrop-filter);
131
+ --zvk-ui-toast-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
95
132
  }
96
133
 
97
134
  [data-zvk-ui-theme="dark"] {
@@ -126,6 +163,28 @@
126
163
  --zvk-ui-control-hover: #172233;
127
164
  --zvk-ui-control-active: #1b2f50;
128
165
  --zvk-ui-card-border: #5c708a;
166
+ --zvk-ui-material-overlay-background: rgb(17 24 33 / 0.96);
167
+ }
168
+
169
+ @media (prefers-reduced-transparency: reduce) {
170
+ :root,
171
+ .zvk-ui-root {
172
+ --zvk-ui-color-surface: var(--zvk-ui-material-reduced-transparency-surface);
173
+ --zvk-ui-color-surface-raised: var(--zvk-ui-material-reduced-transparency-surface-raised);
174
+ --zvk-ui-control-background: var(--zvk-ui-material-reduced-transparency-control);
175
+ --zvk-ui-material-surface-backdrop-filter: none;
176
+ --zvk-ui-material-floating-backdrop-filter: none;
177
+ --zvk-ui-material-control-backdrop-filter: none;
178
+ }
179
+ }
180
+
181
+ [data-zvk-ui-transparency="reduced"] {
182
+ --zvk-ui-color-surface: var(--zvk-ui-material-reduced-transparency-surface);
183
+ --zvk-ui-color-surface-raised: var(--zvk-ui-material-reduced-transparency-surface-raised);
184
+ --zvk-ui-control-background: var(--zvk-ui-material-reduced-transparency-control);
185
+ --zvk-ui-material-surface-backdrop-filter: none;
186
+ --zvk-ui-material-floating-backdrop-filter: none;
187
+ --zvk-ui-material-control-backdrop-filter: none;
129
188
  }
130
189
  }
131
190
 
@@ -180,7 +239,7 @@
180
239
  :where(.zvk-ui-root, [data-zvk-ui-scope]) {
181
240
  background: var(--zvk-ui-color-background);
182
241
  color: var(--zvk-ui-color-foreground);
183
- font-family: var(--zvk-ui-font-family-sans);
242
+ font-family: var(--zvk-ui-font-family-primary);
184
243
  line-height: var(--zvk-ui-line-height-normal);
185
244
  }
186
245
  }
@@ -197,14 +256,15 @@
197
256
  --zvk-ui-button-shadow: var(--zvk-ui-shadow-xs);
198
257
  align-items: center;
199
258
  appearance: none;
259
+ backdrop-filter: var(--zvk-ui-button-backdrop-filter, var(--zvk-ui-material-control-backdrop-filter));
200
260
  background: var(--zvk-ui-button-bg);
201
261
  border: 1px solid var(--zvk-ui-button-border);
202
262
  border-radius: var(--zvk-ui-radius-md);
203
- box-shadow: var(--zvk-ui-button-shadow);
263
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-button-shadow);
204
264
  color: var(--zvk-ui-button-fg);
205
265
  cursor: pointer;
206
266
  display: inline-flex;
207
- font-family: var(--zvk-ui-font-family-sans);
267
+ font-family: var(--zvk-ui-font-family-primary);
208
268
  font-size: var(--zvk-ui-font-size-sm);
209
269
  font-weight: 600;
210
270
  gap: var(--zvk-ui-control-gap);
@@ -229,7 +289,7 @@
229
289
  }
230
290
 
231
291
  :where(.zvk-ui-button:focus-visible) {
232
- box-shadow: var(--zvk-ui-button-shadow), var(--zvk-ui-focus-ring);
292
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-button-shadow), var(--zvk-ui-focus-ring);
233
293
  outline: 0;
234
294
  }
235
295
 
@@ -297,6 +357,16 @@
297
357
  :where(.zvk-ui-button__content) {
298
358
  min-width: 0;
299
359
  }
360
+
361
+ @media (prefers-reduced-motion: reduce) {
362
+ :where(.zvk-ui-button) {
363
+ transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
364
+ }
365
+
366
+ :where(.zvk-ui-button:active:not(:disabled, [data-disabled="true"])) {
367
+ transform: none;
368
+ }
369
+ }
300
370
  }
301
371
 
302
372
 
@@ -306,10 +376,11 @@
306
376
  align-items: center;
307
377
  aspect-ratio: 1;
308
378
  appearance: none;
379
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
309
380
  background: var(--zvk-ui-control-background);
310
381
  border: 1px solid var(--zvk-ui-color-border);
311
382
  border-radius: var(--zvk-ui-radius-md);
312
- box-shadow: var(--zvk-ui-shadow-xs);
383
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs);
313
384
  color: var(--zvk-ui-color-foreground);
314
385
  cursor: pointer;
315
386
  display: inline-flex;
@@ -325,7 +396,7 @@
325
396
  }
326
397
 
327
398
  :where(.zvk-ui-icon-button:focus-visible) {
328
- box-shadow: var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
399
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
329
400
  outline: 0;
330
401
  }
331
402
 
@@ -372,6 +443,16 @@
372
443
  border-color: color-mix(in srgb, var(--zvk-ui-color-destructive) 82%, black);
373
444
  color: white;
374
445
  }
446
+
447
+ @media (prefers-reduced-motion: reduce) {
448
+ :where(.zvk-ui-icon-button) {
449
+ transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
450
+ }
451
+
452
+ :where(.zvk-ui-icon-button:active:not(:disabled, [data-disabled="true"])) {
453
+ transform: none;
454
+ }
455
+ }
375
456
  }
376
457
 
377
458
 
@@ -384,7 +465,7 @@
384
465
  border-radius: var(--zvk-ui-radius-full);
385
466
  color: var(--zvk-ui-badge-color, var(--zvk-ui-color-foreground));
386
467
  display: inline-flex;
387
- font-family: var(--zvk-ui-font-family-sans);
468
+ font-family: var(--zvk-ui-font-family-primary);
388
469
  font-size: var(--zvk-ui-font-size-xs);
389
470
  font-weight: 650;
390
471
  gap: var(--zvk-ui-space-1);
@@ -434,6 +515,7 @@
434
515
  /* src/components/card/card.css */
435
516
  @layer zvk-ui-components {
436
517
  :where(.zvk-ui-card) {
518
+ backdrop-filter: var(--zvk-ui-card-backdrop-filter, var(--zvk-ui-material-surface-backdrop-filter));
437
519
  background: var(--zvk-ui-color-surface);
438
520
  border: 1px solid var(--zvk-ui-card-border);
439
521
  border-radius: var(--zvk-ui-radius-lg);
@@ -443,8 +525,9 @@
443
525
  }
444
526
 
445
527
  :where(.zvk-ui-card[data-variant="elevated"]) {
528
+ --zvk-ui-card-backdrop-filter: var(--zvk-ui-material-floating-backdrop-filter);
446
529
  background: var(--zvk-ui-color-surface-raised);
447
- box-shadow: var(--zvk-ui-shadow-sm);
530
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
448
531
  }
449
532
 
450
533
  :where(.zvk-ui-card[data-variant="ghost"]) {
@@ -490,7 +573,7 @@
490
573
 
491
574
  :where(.zvk-ui-card__title) {
492
575
  color: var(--zvk-ui-color-foreground);
493
- font-family: var(--zvk-ui-font-family-sans);
576
+ font-family: var(--zvk-ui-font-family-secondary);
494
577
  font-size: var(--zvk-ui-font-size-lg);
495
578
  font-weight: 700;
496
579
  line-height: var(--zvk-ui-line-height-tight);
@@ -573,7 +656,7 @@
573
656
 
574
657
  @media (prefers-reduced-motion: reduce) {
575
658
  .zvk-ui-spinner::before {
576
- animation-duration: 1.2s;
659
+ animation: none;
577
660
  }
578
661
  }
579
662
  }
@@ -590,7 +673,7 @@
590
673
  }
591
674
 
592
675
  :where(.zvk-ui-skeleton[data-animate="true"]) {
593
- animation: zvk-ui-skeleton-shimmer 1.4s var(--zvk-ui-ease-standard) infinite;
676
+ animation: zvk-ui-skeleton-shimmer calc(var(--zvk-ui-duration-normal) * 8) var(--zvk-ui-ease-standard) infinite;
594
677
  }
595
678
 
596
679
  :where(.zvk-ui-skeleton[data-rounded="sm"]) {
@@ -624,7 +707,7 @@
624
707
  :where(.zvk-ui-label) {
625
708
  color: var(--zvk-ui-color-foreground);
626
709
  display: inline-flex;
627
- font-family: var(--zvk-ui-font-family-sans);
710
+ font-family: var(--zvk-ui-font-family-secondary);
628
711
  font-size: var(--zvk-ui-label-font-size, var(--zvk-ui-font-size-sm));
629
712
  font-weight: 650;
630
713
  gap: var(--zvk-ui-space-1);
@@ -658,7 +741,7 @@
658
741
  :where(.zvk-ui-progress__label),
659
742
  :where(.zvk-ui-progress__value) {
660
743
  color: var(--zvk-ui-color-muted-foreground);
661
- font-family: var(--zvk-ui-font-family-sans);
744
+ font-family: var(--zvk-ui-font-family-secondary);
662
745
  font-size: var(--zvk-ui-font-size-xs);
663
746
  font-weight: 600;
664
747
  line-height: var(--zvk-ui-line-height-tight);
@@ -711,7 +794,7 @@
711
794
  }
712
795
 
713
796
  :where(.zvk-ui-progress[data-indeterminate="true"] .zvk-ui-progress__indicator) {
714
- animation: zvk-ui-progress-indeterminate 1.2s var(--zvk-ui-ease-standard) infinite;
797
+ animation: zvk-ui-progress-indeterminate calc(var(--zvk-ui-duration-normal) * 7) var(--zvk-ui-ease-standard) infinite;
715
798
  width: 40%;
716
799
  }
717
800
 
@@ -783,7 +866,7 @@
783
866
 
784
867
  :where(.zvk-ui-alert__title) {
785
868
  color: var(--zvk-ui-color-foreground);
786
- font-family: var(--zvk-ui-font-family-sans);
869
+ font-family: var(--zvk-ui-font-family-secondary);
787
870
  font-size: var(--zvk-ui-font-size-sm);
788
871
  font-weight: 700;
789
872
  line-height: var(--zvk-ui-line-height-tight);
@@ -816,7 +899,7 @@
816
899
  border-radius: var(--zvk-ui-radius-full);
817
900
  color: var(--zvk-ui-color-muted-foreground);
818
901
  display: inline-flex;
819
- font-family: var(--zvk-ui-font-family-sans);
902
+ font-family: var(--zvk-ui-font-family-primary);
820
903
  font-size: var(--zvk-ui-avatar-font-size, var(--zvk-ui-font-size-sm));
821
904
  font-weight: 700;
822
905
  height: var(--zvk-ui-avatar-size);
@@ -869,14 +952,14 @@
869
952
  color: var(--zvk-ui-color-foreground);
870
953
  cursor: pointer;
871
954
  display: inline-flex;
872
- font-family: var(--zvk-ui-font-family-sans);
955
+ font-family: var(--zvk-ui-font-family-primary);
873
956
  font-size: var(--zvk-ui-font-size-xs);
874
957
  font-weight: 650;
875
958
  height: var(--zvk-ui-copy-button-height, var(--zvk-ui-control-height-sm));
876
959
  justify-content: center;
877
960
  line-height: 1;
878
961
  padding-inline: var(--zvk-ui-space-3);
879
- transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
962
+ transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
880
963
  white-space: nowrap;
881
964
  }
882
965
 
@@ -924,7 +1007,7 @@
924
1007
 
925
1008
  :where(.zvk-ui-copyable-text__label) {
926
1009
  color: var(--zvk-ui-color-muted-foreground);
927
- font-family: var(--zvk-ui-font-family-sans);
1010
+ font-family: var(--zvk-ui-font-family-primary);
928
1011
  font-size: var(--zvk-ui-font-size-xs);
929
1012
  font-weight: 650;
930
1013
  line-height: var(--zvk-ui-line-height-tight);
@@ -933,7 +1016,7 @@
933
1016
  :where(.zvk-ui-copyable-text__value) {
934
1017
  color: var(--zvk-ui-color-foreground);
935
1018
  flex: 1 1 auto;
936
- font-family: var(--zvk-ui-font-family-mono);
1019
+ font-family: var(--zvk-ui-font-family-tertiary);
937
1020
  font-size: var(--zvk-ui-font-size-sm);
938
1021
  line-height: var(--zvk-ui-line-height-tight);
939
1022
  min-width: 0;
@@ -976,7 +1059,7 @@
976
1059
  color: var(--zvk-ui-color-foreground);
977
1060
  display: inline-flex;
978
1061
  flex: 0 0 auto;
979
- font-family: var(--zvk-ui-font-family-sans);
1062
+ font-family: var(--zvk-ui-font-family-primary);
980
1063
  font-size: var(--zvk-ui-font-size-xs);
981
1064
  font-weight: 650;
982
1065
  min-height: var(--zvk-ui-control-height-sm);
@@ -995,7 +1078,7 @@
995
1078
  :where(.zvk-ui-file-upload-input__control) {
996
1079
  color: var(--zvk-ui-color-foreground);
997
1080
  flex: 0 1 auto;
998
- font-family: var(--zvk-ui-font-family-sans);
1081
+ font-family: var(--zvk-ui-font-family-primary);
999
1082
  font-size: var(--zvk-ui-font-size-sm);
1000
1083
  min-width: 0;
1001
1084
  }
@@ -1032,6 +1115,187 @@
1032
1115
  text-overflow: ellipsis;
1033
1116
  white-space: nowrap;
1034
1117
  }
1118
+
1119
+ @media (max-width: 40rem) {
1120
+ :where(.zvk-ui-file-upload-input) {
1121
+ align-items: stretch;
1122
+ flex-wrap: wrap;
1123
+ row-gap: var(--zvk-ui-space-2);
1124
+ }
1125
+
1126
+ :where(.zvk-ui-file-upload-input__button, .zvk-ui-file-upload-input__control) {
1127
+ min-height: max(var(--zvk-ui-file-upload-input-height, var(--zvk-ui-control-height-md)), var(--zvk-ui-control-height-md));
1128
+ }
1129
+
1130
+ :where(.zvk-ui-file-upload-input__control) {
1131
+ flex: 1 1 12rem;
1132
+ max-inline-size: 100%;
1133
+ }
1134
+
1135
+ :where(.zvk-ui-file-upload-input__summary) {
1136
+ flex-basis: 100%;
1137
+ overflow: visible;
1138
+ overflow-wrap: anywhere;
1139
+ text-overflow: clip;
1140
+ white-space: normal;
1141
+ }
1142
+ }
1143
+ }
1144
+
1145
+
1146
+ /* src/components/file-dropzone/file-dropzone.css */
1147
+ @layer zvk-ui-components {
1148
+ :where(.zvk-ui-file-dropzone) {
1149
+ display: grid;
1150
+ gap: var(--zvk-ui-field-gap);
1151
+ }
1152
+
1153
+ :where(.zvk-ui-file-dropzone__surface) {
1154
+ background: var(--zvk-ui-control-background);
1155
+ border: 1px dashed var(--zvk-ui-file-dropzone-border-color, var(--zvk-ui-control-border));
1156
+ border-radius: var(--zvk-ui-radius-lg);
1157
+ box-shadow: var(--zvk-ui-shadow-xs);
1158
+ color: var(--zvk-ui-color-foreground);
1159
+ display: grid;
1160
+ min-height: 7rem;
1161
+ overflow: hidden;
1162
+ position: relative;
1163
+ transition:
1164
+ background-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard),
1165
+ border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard),
1166
+ box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
1167
+ }
1168
+
1169
+ :where(.zvk-ui-file-dropzone__surface:hover) {
1170
+ --zvk-ui-file-dropzone-border-color: var(--zvk-ui-control-border-strong);
1171
+ }
1172
+
1173
+ :where(.zvk-ui-file-dropzone:focus-within .zvk-ui-file-dropzone__surface) {
1174
+ --zvk-ui-file-dropzone-border-color: var(--zvk-ui-color-ring);
1175
+ box-shadow: var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
1176
+ }
1177
+
1178
+ :where(.zvk-ui-file-dropzone[data-dragging="true"] .zvk-ui-file-dropzone__surface) {
1179
+ --zvk-ui-file-dropzone-border-color: var(--zvk-ui-color-primary);
1180
+ background: var(--zvk-ui-color-primary-soft);
1181
+ }
1182
+
1183
+ :where(.zvk-ui-file-dropzone[data-invalid="true"] .zvk-ui-file-dropzone__surface) {
1184
+ --zvk-ui-file-dropzone-border-color: var(--zvk-ui-color-destructive);
1185
+ }
1186
+
1187
+ :where(.zvk-ui-file-dropzone[data-disabled="true"] .zvk-ui-file-dropzone__surface) {
1188
+ cursor: not-allowed;
1189
+ }
1190
+
1191
+ :where(.zvk-ui-file-dropzone__panel) {
1192
+ align-items: center;
1193
+ display: grid;
1194
+ justify-items: center;
1195
+ padding: var(--zvk-ui-space-5);
1196
+ pointer-events: none;
1197
+ text-align: center;
1198
+ }
1199
+
1200
+ :where(.zvk-ui-file-dropzone__prompt) {
1201
+ color: var(--zvk-ui-color-muted-foreground);
1202
+ font-family: var(--zvk-ui-font-family-secondary);
1203
+ font-size: var(--zvk-ui-font-size-sm);
1204
+ font-weight: 650;
1205
+ line-height: var(--zvk-ui-line-height-tight);
1206
+ }
1207
+
1208
+ :where(.zvk-ui-file-dropzone__input) {
1209
+ cursor: pointer;
1210
+ inset: 0;
1211
+ opacity: 0;
1212
+ position: absolute;
1213
+ }
1214
+
1215
+ :where(.zvk-ui-file-dropzone__input:disabled) {
1216
+ cursor: not-allowed;
1217
+ }
1218
+
1219
+ :where(.zvk-ui-file-dropzone__list) {
1220
+ display: grid;
1221
+ gap: var(--zvk-ui-space-2);
1222
+ list-style: none;
1223
+ margin: 0;
1224
+ padding: 0;
1225
+ }
1226
+
1227
+ :where(.zvk-ui-file-dropzone__item) {
1228
+ align-items: center;
1229
+ background: var(--zvk-ui-color-surface);
1230
+ border: 1px solid var(--zvk-ui-color-border);
1231
+ border-radius: var(--zvk-ui-radius-md);
1232
+ color: var(--zvk-ui-color-foreground);
1233
+ display: grid;
1234
+ gap: var(--zvk-ui-space-1) var(--zvk-ui-space-3);
1235
+ grid-template-columns: minmax(0, 1fr) auto;
1236
+ padding: var(--zvk-ui-space-2) var(--zvk-ui-space-3);
1237
+ }
1238
+
1239
+ :where(.zvk-ui-file-dropzone__item-name) {
1240
+ font-size: var(--zvk-ui-font-size-sm);
1241
+ font-weight: 650;
1242
+ line-height: var(--zvk-ui-line-height-tight);
1243
+ min-width: 0;
1244
+ overflow: hidden;
1245
+ text-overflow: ellipsis;
1246
+ white-space: nowrap;
1247
+ }
1248
+
1249
+ :where(.zvk-ui-file-dropzone__item-meta) {
1250
+ color: var(--zvk-ui-color-muted-foreground);
1251
+ font-size: var(--zvk-ui-font-size-xs);
1252
+ line-height: var(--zvk-ui-line-height-tight);
1253
+ min-width: 0;
1254
+ }
1255
+
1256
+ :where(.zvk-ui-file-dropzone__remove) {
1257
+ align-items: center;
1258
+ align-self: center;
1259
+ background: transparent;
1260
+ border: 0;
1261
+ border-radius: var(--zvk-ui-radius-sm);
1262
+ color: var(--zvk-ui-color-primary);
1263
+ cursor: pointer;
1264
+ display: inline-flex;
1265
+ font-family: var(--zvk-ui-font-family-primary);
1266
+ font-size: var(--zvk-ui-font-size-xs);
1267
+ font-weight: 650;
1268
+ grid-column: 2;
1269
+ grid-row: 1 / span 2;
1270
+ min-height: var(--zvk-ui-control-height-sm);
1271
+ padding-inline: var(--zvk-ui-space-2);
1272
+ }
1273
+
1274
+ :where(.zvk-ui-file-dropzone__remove:hover:not(:disabled)) {
1275
+ background: var(--zvk-ui-color-primary-soft);
1276
+ }
1277
+
1278
+ :where(.zvk-ui-file-dropzone__remove:focus-visible) {
1279
+ box-shadow: var(--zvk-ui-focus-ring);
1280
+ outline: 0;
1281
+ }
1282
+
1283
+ :where(.zvk-ui-file-dropzone__remove:disabled) {
1284
+ cursor: not-allowed;
1285
+ opacity: var(--zvk-ui-opacity-disabled);
1286
+ }
1287
+
1288
+ @media (max-width: 40rem) {
1289
+ :where(.zvk-ui-file-dropzone__item) {
1290
+ grid-template-columns: minmax(0, 1fr);
1291
+ }
1292
+
1293
+ :where(.zvk-ui-file-dropzone__remove) {
1294
+ grid-column: 1;
1295
+ grid-row: auto;
1296
+ justify-self: start;
1297
+ }
1298
+ }
1035
1299
  }
1036
1300
 
1037
1301
 
@@ -1049,7 +1313,7 @@
1049
1313
 
1050
1314
  :where(.zvk-ui-error-fallback__title) {
1051
1315
  color: var(--zvk-ui-color-foreground);
1052
- font-family: var(--zvk-ui-font-family-sans);
1316
+ font-family: var(--zvk-ui-font-family-primary);
1053
1317
  font-size: var(--zvk-ui-font-size-sm);
1054
1318
  font-weight: 700;
1055
1319
  line-height: var(--zvk-ui-line-height-tight);
@@ -1082,7 +1346,7 @@
1082
1346
 
1083
1347
  :where(.zvk-ui-field__label) {
1084
1348
  color: var(--zvk-ui-color-foreground);
1085
- font-family: var(--zvk-ui-font-family-sans);
1349
+ font-family: var(--zvk-ui-font-family-secondary);
1086
1350
  font-size: var(--zvk-ui-font-size-sm);
1087
1351
  font-weight: 650;
1088
1352
  line-height: var(--zvk-ui-line-height-tight);
@@ -1117,7 +1381,7 @@
1117
1381
 
1118
1382
  :where(.zvk-ui-form-label) {
1119
1383
  color: var(--zvk-ui-color-foreground);
1120
- font-family: var(--zvk-ui-font-family-sans);
1384
+ font-family: var(--zvk-ui-font-family-secondary);
1121
1385
  font-size: var(--zvk-ui-font-size-sm);
1122
1386
  font-weight: 650;
1123
1387
  line-height: var(--zvk-ui-line-height-tight);
@@ -1135,6 +1399,45 @@
1135
1399
  font-weight: 600;
1136
1400
  }
1137
1401
 
1402
+ :where(.zvk-ui-form-validation-summary) {
1403
+ background: color-mix(in srgb, var(--zvk-ui-color-destructive) 8%, var(--zvk-ui-color-surface));
1404
+ border: 1px solid color-mix(in srgb, var(--zvk-ui-color-destructive) 24%, var(--zvk-ui-color-border));
1405
+ border-radius: var(--zvk-ui-radius-md);
1406
+ color: var(--zvk-ui-color-foreground);
1407
+ display: grid;
1408
+ gap: var(--zvk-ui-space-3);
1409
+ padding: var(--zvk-ui-space-4);
1410
+ }
1411
+
1412
+ :where(.zvk-ui-form-validation-summary__title) {
1413
+ color: var(--zvk-ui-color-foreground);
1414
+ font-family: var(--zvk-ui-font-family-secondary);
1415
+ font-size: var(--zvk-ui-font-size-sm);
1416
+ font-weight: 700;
1417
+ line-height: var(--zvk-ui-line-height-tight);
1418
+ margin: 0;
1419
+ }
1420
+
1421
+ :where(.zvk-ui-form-validation-summary__list) {
1422
+ display: grid;
1423
+ gap: var(--zvk-ui-space-2);
1424
+ margin: 0;
1425
+ padding-inline-start: var(--zvk-ui-space-5);
1426
+ }
1427
+
1428
+ :where(.zvk-ui-form-validation-summary__item) {
1429
+ color: var(--zvk-ui-color-destructive);
1430
+ font-size: var(--zvk-ui-font-size-xs);
1431
+ line-height: var(--zvk-ui-line-height-normal);
1432
+ }
1433
+
1434
+ :where(.zvk-ui-form-validation-summary__link) {
1435
+ color: inherit;
1436
+ font-weight: 600;
1437
+ text-decoration-thickness: from-font;
1438
+ text-underline-offset: 0.15em;
1439
+ }
1440
+
1138
1441
  :where(.zvk-ui-form-field[data-disabled="true"]) {
1139
1442
  opacity: var(--zvk-ui-opacity-disabled);
1140
1443
  }
@@ -1145,12 +1448,13 @@
1145
1448
  @layer zvk-ui-components {
1146
1449
  :where(.zvk-ui-input) {
1147
1450
  appearance: none;
1451
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
1148
1452
  background: var(--zvk-ui-control-background);
1149
1453
  border: 1px solid var(--zvk-ui-input-border-color, var(--zvk-ui-control-border));
1150
1454
  border-radius: var(--zvk-ui-radius-md);
1151
- box-shadow: var(--zvk-ui-shadow-xs);
1455
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs);
1152
1456
  color: var(--zvk-ui-color-foreground);
1153
- font-family: var(--zvk-ui-font-family-sans);
1457
+ font-family: var(--zvk-ui-font-family-primary);
1154
1458
  font-size: var(--zvk-ui-font-size-sm);
1155
1459
  height: var(--zvk-ui-input-height, var(--zvk-ui-control-height-md));
1156
1460
  line-height: 1;
@@ -1170,7 +1474,7 @@
1170
1474
 
1171
1475
  :where(.zvk-ui-input:focus-visible) {
1172
1476
  --zvk-ui-input-border-color: var(--zvk-ui-color-ring);
1173
- box-shadow: var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
1477
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
1174
1478
  outline: 0;
1175
1479
  }
1176
1480
 
@@ -1194,17 +1498,22 @@
1194
1498
  }
1195
1499
  }
1196
1500
 
1501
+ .zvk-ui-input {
1502
+ padding-inline: var(--zvk-ui-control-padding-x);
1503
+ }
1504
+
1197
1505
 
1198
1506
  /* src/components/textarea/textarea.css */
1199
1507
  @layer zvk-ui-components {
1200
1508
  .zvk-ui-textarea {
1201
1509
  appearance: none;
1510
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
1202
1511
  background: var(--zvk-ui-control-background);
1203
1512
  border: 1px solid var(--zvk-ui-input-border-color, var(--zvk-ui-control-border));
1204
1513
  border-radius: var(--zvk-ui-radius-md);
1205
- box-shadow: var(--zvk-ui-shadow-xs);
1514
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs);
1206
1515
  color: var(--zvk-ui-color-foreground);
1207
- font-family: var(--zvk-ui-font-family-sans);
1516
+ font-family: var(--zvk-ui-font-family-primary);
1208
1517
  font-size: var(--zvk-ui-font-size-sm);
1209
1518
  min-block-size: calc(var(--zvk-ui-control-height-md) * 2);
1210
1519
  padding-inline: var(--zvk-ui-control-padding-x);
@@ -1224,7 +1533,7 @@
1224
1533
 
1225
1534
  :where(.zvk-ui-textarea:focus-visible) {
1226
1535
  --zvk-ui-input-border-color: var(--zvk-ui-color-ring);
1227
- box-shadow: var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
1536
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
1228
1537
  outline: 0;
1229
1538
  }
1230
1539
 
@@ -1248,6 +1557,11 @@
1248
1557
  }
1249
1558
  }
1250
1559
 
1560
+ .zvk-ui-textarea {
1561
+ padding-block: var(--zvk-ui-space-2);
1562
+ padding-inline: var(--zvk-ui-control-padding-x);
1563
+ }
1564
+
1251
1565
 
1252
1566
  /* src/components/checkbox/checkbox.css */
1253
1567
  @layer zvk-ui-components {
@@ -1275,7 +1589,7 @@
1275
1589
  .zvk-ui-checkbox__control {
1276
1590
  align-items: center;
1277
1591
  background: var(--zvk-ui-control-background);
1278
- border: 1px solid var(--zvk-ui-color-border);
1592
+ border: 1px solid var(--zvk-ui-control-border);
1279
1593
  border-radius: var(--zvk-ui-radius-sm);
1280
1594
  box-shadow: var(--zvk-ui-shadow-xs);
1281
1595
  display: inline-flex;
@@ -1304,11 +1618,24 @@
1304
1618
  border-color: var(--zvk-ui-color-primary);
1305
1619
  }
1306
1620
 
1621
+ .zvk-ui-checkbox__input:indeterminate + .zvk-ui-checkbox__control {
1622
+ background: var(--zvk-ui-color-primary);
1623
+ border-color: var(--zvk-ui-color-primary);
1624
+ }
1625
+
1307
1626
  .zvk-ui-checkbox__input:checked + .zvk-ui-checkbox__control .zvk-ui-checkbox__indicator {
1308
1627
  opacity: 1;
1309
1628
  transform: rotate(45deg) scale(1) translate(-1px, -1px);
1310
1629
  }
1311
1630
 
1631
+ .zvk-ui-checkbox__input:indeterminate + .zvk-ui-checkbox__control .zvk-ui-checkbox__indicator {
1632
+ block-size: 0;
1633
+ inline-size: 0.625rem;
1634
+ border-width: 0 0 2px;
1635
+ opacity: 1;
1636
+ transform: none;
1637
+ }
1638
+
1312
1639
  .zvk-ui-checkbox__input:focus-visible + .zvk-ui-checkbox__control {
1313
1640
  box-shadow: var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
1314
1641
  }
@@ -1336,7 +1663,7 @@
1336
1663
 
1337
1664
  .zvk-ui-checkbox__label {
1338
1665
  color: var(--zvk-ui-color-foreground);
1339
- font-family: var(--zvk-ui-font-family-sans);
1666
+ font-family: var(--zvk-ui-font-family-primary);
1340
1667
  font-size: var(--zvk-ui-font-size-sm);
1341
1668
  line-height: var(--zvk-ui-line-height-tight);
1342
1669
  }
@@ -1353,9 +1680,9 @@
1353
1680
  /* src/components/switch/switch.css */
1354
1681
  @layer zvk-ui-components {
1355
1682
  .zvk-ui-switch {
1356
- --zvk-ui-switch-height: var(--zvk-ui-control-height-md);
1357
- --zvk-ui-switch-width: calc(var(--zvk-ui-switch-height) * 1.75);
1358
- --zvk-ui-switch-padding: var(--zvk-ui-space-1);
1683
+ --zvk-ui-switch-height: 1.5rem;
1684
+ --zvk-ui-switch-width: 2.75rem;
1685
+ --zvk-ui-switch-padding: 0.125rem;
1359
1686
  --zvk-ui-switch-thumb-size: calc(var(--zvk-ui-switch-height) - (var(--zvk-ui-switch-padding) * 2) - 2px);
1360
1687
  --zvk-ui-switch-thumb-translate: calc(var(--zvk-ui-switch-width) - var(--zvk-ui-switch-thumb-size) - (var(--zvk-ui-switch-padding) * 2) - 2px);
1361
1688
  align-items: center;
@@ -1420,16 +1747,18 @@
1420
1747
  }
1421
1748
 
1422
1749
  .zvk-ui-switch[data-size="sm"] {
1423
- --zvk-ui-switch-height: var(--zvk-ui-control-height-sm);
1750
+ --zvk-ui-switch-height: 1.25rem;
1751
+ --zvk-ui-switch-width: 2.25rem;
1424
1752
  }
1425
1753
 
1426
1754
  .zvk-ui-switch[data-size="lg"] {
1427
- --zvk-ui-switch-height: var(--zvk-ui-control-height-lg);
1755
+ --zvk-ui-switch-height: 1.75rem;
1756
+ --zvk-ui-switch-width: 3.25rem;
1428
1757
  }
1429
1758
 
1430
1759
  .zvk-ui-switch__label {
1431
1760
  color: var(--zvk-ui-color-foreground);
1432
- font-family: var(--zvk-ui-font-family-sans);
1761
+ font-family: var(--zvk-ui-font-family-primary);
1433
1762
  font-size: var(--zvk-ui-font-size-sm);
1434
1763
  line-height: var(--zvk-ui-line-height-tight);
1435
1764
  }
@@ -1467,7 +1796,7 @@
1467
1796
 
1468
1797
  .zvk-ui-radio-group__legend {
1469
1798
  color: var(--zvk-ui-color-foreground);
1470
- font-family: var(--zvk-ui-font-family-sans);
1799
+ font-family: var(--zvk-ui-font-family-primary);
1471
1800
  font-size: var(--zvk-ui-font-size-sm);
1472
1801
  font-weight: 650;
1473
1802
  line-height: var(--zvk-ui-line-height-tight);
@@ -1528,12 +1857,13 @@
1528
1857
  display: inline-flex;
1529
1858
  height: 1rem;
1530
1859
  justify-content: center;
1860
+ transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
1531
1861
  width: 1rem;
1532
1862
  }
1533
1863
 
1534
1864
  .zvk-ui-radio-group__label {
1535
1865
  color: var(--zvk-ui-color-foreground);
1536
- font-family: var(--zvk-ui-font-family-sans);
1866
+ font-family: var(--zvk-ui-font-family-primary);
1537
1867
  font-size: var(--zvk-ui-font-size-sm);
1538
1868
  line-height: var(--zvk-ui-line-height-tight);
1539
1869
  }
@@ -1563,6 +1893,12 @@
1563
1893
  cursor: not-allowed;
1564
1894
  opacity: var(--zvk-ui-opacity-disabled);
1565
1895
  }
1896
+
1897
+ @media (prefers-reduced-motion: reduce) {
1898
+ .zvk-ui-radio-group__control {
1899
+ transition: none;
1900
+ }
1901
+ }
1566
1902
  }
1567
1903
 
1568
1904
 
@@ -1618,7 +1954,7 @@
1618
1954
  color: var(--zvk-ui-color-foreground);
1619
1955
  cursor: pointer;
1620
1956
  display: inline-flex;
1621
- font-family: var(--zvk-ui-font-family-sans);
1957
+ font-family: var(--zvk-ui-font-family-primary);
1622
1958
  font-size: var(--zvk-ui-font-size-sm);
1623
1959
  font-weight: 600;
1624
1960
  gap: var(--zvk-ui-control-gap);
@@ -1724,7 +2060,7 @@
1724
2060
  :where(.zvk-ui-calendar) {
1725
2061
  color: var(--zvk-ui-color-foreground);
1726
2062
  display: grid;
1727
- font-family: var(--zvk-ui-font-family-sans);
2063
+ font-family: var(--zvk-ui-font-family-primary);
1728
2064
  gap: var(--zvk-ui-space-3);
1729
2065
  inline-size: max-content;
1730
2066
  min-inline-size: 17.5rem;
@@ -1757,6 +2093,7 @@
1757
2093
  font: inherit;
1758
2094
  justify-content: center;
1759
2095
  padding: 0;
2096
+ transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
1760
2097
  }
1761
2098
 
1762
2099
  :where(.zvk-ui-calendar__nav) {
@@ -1881,51 +2218,152 @@
1881
2218
  }
1882
2219
 
1883
2220
 
1884
- /* src/components/select/select.css */
2221
+ /* src/components/date-range-picker/date-range-picker.css */
1885
2222
  @layer zvk-ui-components {
1886
- :where(.zvk-ui-select) {
1887
- display: inline-grid;
1888
- min-width: 0;
2223
+ :where(.zvk-ui-date-range-picker) {
2224
+ display: grid;
2225
+ gap: var(--zvk-ui-space-2);
1889
2226
  }
1890
2227
 
1891
- :where(.zvk-ui-select__trigger) {
2228
+ :where(.zvk-ui-date-range-picker__group) {
2229
+ display: grid;
2230
+ gap: var(--zvk-ui-space-2);
2231
+ }
2232
+
2233
+ :where(.zvk-ui-date-range-picker__controls) {
2234
+ display: grid;
2235
+ gap: var(--zvk-ui-space-3);
2236
+ }
2237
+
2238
+ :where(.zvk-ui-date-range-picker__field) {
2239
+ display: grid;
2240
+ gap: var(--zvk-ui-space-1);
2241
+ min-inline-size: 0;
2242
+ }
2243
+
2244
+ :where(.zvk-ui-date-range-picker__field-label) {
2245
+ color: var(--zvk-ui-color-muted-foreground);
2246
+ font-size: var(--zvk-ui-font-size-xs);
2247
+ font-weight: 600;
2248
+ line-height: var(--zvk-ui-line-height-tight);
2249
+ }
2250
+
2251
+ :where(.zvk-ui-date-range-picker__input-row) {
2252
+ display: grid;
2253
+ gap: var(--zvk-ui-space-2);
2254
+ grid-template-columns: minmax(0, 1fr) auto;
2255
+ }
2256
+
2257
+ :where(.zvk-ui-date-range-picker__input) {
2258
+ min-inline-size: 0;
2259
+ }
2260
+
2261
+ :where(.zvk-ui-date-range-picker .zvk-ui-popover) {
2262
+ display: block;
2263
+ }
2264
+
2265
+ :where(.zvk-ui-date-range-picker__calendar-trigger),
2266
+ :where(.zvk-ui-date-range-picker__clear) {
1892
2267
  align-items: center;
1893
2268
  appearance: none;
1894
2269
  background: var(--zvk-ui-control-background);
1895
- border: 1px solid var(--zvk-ui-select-border-color, var(--zvk-ui-control-border));
2270
+ border: 1px solid var(--zvk-ui-control-border);
1896
2271
  border-radius: var(--zvk-ui-radius-md);
1897
- box-shadow: var(--zvk-ui-shadow-xs);
2272
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs);
1898
2273
  color: var(--zvk-ui-color-foreground);
1899
2274
  cursor: pointer;
1900
2275
  display: inline-flex;
1901
- font-family: var(--zvk-ui-font-family-sans);
2276
+ font-family: var(--zvk-ui-font-family-primary);
1902
2277
  font-size: var(--zvk-ui-font-size-sm);
1903
- gap: var(--zvk-ui-control-gap);
2278
+ font-weight: 600;
1904
2279
  height: var(--zvk-ui-control-height-md);
1905
- justify-content: space-between;
2280
+ justify-content: center;
1906
2281
  line-height: 1;
1907
- min-width: 10rem;
1908
2282
  padding-inline: var(--zvk-ui-control-padding-x);
1909
2283
  transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
2284
+ white-space: nowrap;
1910
2285
  }
1911
2286
 
1912
- :where(.zvk-ui-select__trigger:hover:not(:disabled)) {
1913
- --zvk-ui-select-border-color: var(--zvk-ui-control-border-strong);
2287
+ :where(.zvk-ui-date-range-picker__calendar-trigger:hover),
2288
+ :where(.zvk-ui-date-range-picker__clear:hover) {
2289
+ border-color: var(--zvk-ui-control-border-strong);
1914
2290
  }
1915
2291
 
1916
- :where(.zvk-ui-select__trigger:focus-visible) {
1917
- --zvk-ui-select-border-color: var(--zvk-ui-color-ring);
1918
- box-shadow: var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
2292
+ :where(.zvk-ui-date-range-picker__calendar-trigger:focus-visible),
2293
+ :where(.zvk-ui-date-range-picker__clear:focus-visible) {
2294
+ border-color: var(--zvk-ui-color-ring);
2295
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
1919
2296
  outline: 0;
1920
2297
  }
1921
2298
 
1922
- :where(.zvk-ui-select__trigger:disabled) {
1923
- cursor: not-allowed;
1924
- opacity: var(--zvk-ui-opacity-disabled);
2299
+ :where(.zvk-ui-date-range-picker__calendar-trigger[data-state="open"]) {
2300
+ border-color: var(--zvk-ui-color-ring);
2301
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
1925
2302
  }
1926
2303
 
1927
- :where(.zvk-ui-select__trigger[data-invalid="true"]) {
1928
- --zvk-ui-select-border-color: var(--zvk-ui-color-destructive);
2304
+ :where(.zvk-ui-date-range-picker__clear) {
2305
+ justify-self: start;
2306
+ }
2307
+
2308
+ :where(.zvk-ui-date-range-picker__content) {
2309
+ padding: var(--zvk-ui-space-3);
2310
+ }
2311
+
2312
+ @media (min-width: 36rem) {
2313
+ :where(.zvk-ui-date-range-picker__controls) {
2314
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2315
+ }
2316
+ }
2317
+ }
2318
+
2319
+
2320
+ /* src/components/select/select.css */
2321
+ @layer zvk-ui-components {
2322
+ :where(.zvk-ui-select) {
2323
+ display: inline-grid;
2324
+ min-width: 0;
2325
+ --zvk-ui-select-trigger-min-width: 10rem;
2326
+ }
2327
+
2328
+ :where(.zvk-ui-select__trigger) {
2329
+ align-items: center;
2330
+ appearance: none;
2331
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
2332
+ background: var(--zvk-ui-control-background);
2333
+ border: 1px solid var(--zvk-ui-select-border-color, var(--zvk-ui-control-border));
2334
+ border-radius: var(--zvk-ui-radius-md);
2335
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs);
2336
+ color: var(--zvk-ui-color-foreground);
2337
+ cursor: pointer;
2338
+ display: inline-flex;
2339
+ font-family: var(--zvk-ui-font-family-primary);
2340
+ font-size: var(--zvk-ui-font-size-sm);
2341
+ gap: var(--zvk-ui-control-gap);
2342
+ height: var(--zvk-ui-control-height-md);
2343
+ justify-content: space-between;
2344
+ line-height: 1;
2345
+ min-width: var(--zvk-ui-select-trigger-min-width);
2346
+ padding-inline: var(--zvk-ui-control-padding-x);
2347
+ transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
2348
+ }
2349
+
2350
+ :where(.zvk-ui-select__trigger:hover:not(:disabled)) {
2351
+ --zvk-ui-select-border-color: var(--zvk-ui-control-border-strong);
2352
+ }
2353
+
2354
+ :where(.zvk-ui-select__trigger:focus-visible) {
2355
+ --zvk-ui-select-border-color: var(--zvk-ui-color-ring);
2356
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
2357
+ outline: 0;
2358
+ }
2359
+
2360
+ :where(.zvk-ui-select__trigger:disabled) {
2361
+ cursor: not-allowed;
2362
+ opacity: var(--zvk-ui-opacity-disabled);
2363
+ }
2364
+
2365
+ :where(.zvk-ui-select__trigger[data-invalid="true"]) {
2366
+ --zvk-ui-select-border-color: var(--zvk-ui-color-destructive);
1929
2367
  }
1930
2368
 
1931
2369
  :where(.zvk-ui-select[data-size="sm"] .zvk-ui-select__trigger) {
@@ -1942,17 +2380,81 @@
1942
2380
  color: var(--zvk-ui-color-muted-foreground);
1943
2381
  }
1944
2382
 
2383
+ :where(.zvk-ui-select__indicator) {
2384
+ color: var(--zvk-ui-color-muted-foreground);
2385
+ display: inline-grid;
2386
+ flex: 0 0 auto;
2387
+ inline-size: 1rem;
2388
+ margin-inline-start: auto;
2389
+ place-items: center;
2390
+ transition: color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), transform var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
2391
+ }
2392
+
2393
+ .zvk-ui-select__indicator::before {
2394
+ block-size: 0.45rem;
2395
+ border-block-end: 1.5px solid currentColor;
2396
+ border-inline-end: 1.5px solid currentColor;
2397
+ content: "";
2398
+ inline-size: 0.45rem;
2399
+ transform: rotate(45deg) translate(-0.1rem, -0.1rem);
2400
+ }
2401
+
2402
+ :where(.zvk-ui-select__trigger[data-state="open"] .zvk-ui-select__indicator) {
2403
+ color: var(--zvk-ui-color-foreground);
2404
+ transform: rotate(180deg);
2405
+ }
2406
+
1945
2407
  :where(.zvk-ui-select__content) {
2408
+ --zvk-ui-select-motion-x: 0;
2409
+ --zvk-ui-select-motion-y: -0.25rem;
2410
+ backdrop-filter: var(--zvk-ui-select-content-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
1946
2411
  background: var(--zvk-ui-color-surface);
1947
2412
  border: 1px solid var(--zvk-ui-card-border);
1948
2413
  border-radius: var(--zvk-ui-radius-md);
1949
- box-shadow: var(--zvk-ui-shadow-lg);
2414
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
1950
2415
  color: var(--zvk-ui-color-foreground);
1951
2416
  display: grid;
2417
+ font-family: var(--zvk-ui-font-family-primary);
1952
2418
  gap: var(--zvk-ui-space-1);
1953
- min-width: var(--zvk-ui-floating-reference-width, 10rem);
2419
+ max-block-size: min(calc(100vh - var(--zvk-ui-space-4)), var(--zvk-ui-floating-available-height, calc(100vh - var(--zvk-ui-space-4))));
2420
+ min-width: var(--zvk-ui-floating-reference-width, var(--zvk-ui-select-trigger-min-width));
2421
+ overflow-y: auto;
2422
+ overscroll-behavior-y: contain;
1954
2423
  padding: var(--zvk-ui-space-1);
2424
+ scrollbar-gutter: stable;
1955
2425
  z-index: var(--zvk-ui-z-popover);
2426
+ -webkit-overflow-scrolling: touch;
2427
+ }
2428
+
2429
+ :where(.zvk-ui-select__content[data-side="top"]) {
2430
+ --zvk-ui-select-motion-y: 0.25rem;
2431
+ }
2432
+
2433
+ :where(.zvk-ui-select__content[data-side="bottom"]) {
2434
+ --zvk-ui-select-motion-y: -0.25rem;
2435
+ }
2436
+
2437
+ :where(.zvk-ui-select__content[data-side="left"]) {
2438
+ --zvk-ui-select-motion-x: 0.25rem;
2439
+ --zvk-ui-select-motion-y: 0;
2440
+ }
2441
+
2442
+ :where(.zvk-ui-select__content[data-side="right"]) {
2443
+ --zvk-ui-select-motion-x: -0.25rem;
2444
+ --zvk-ui-select-motion-y: 0;
2445
+ }
2446
+
2447
+ :where(.zvk-ui-select__content[data-state="open"]) {
2448
+ animation: zvk-ui-select-content-enter var(--zvk-ui-duration-fast) var(--zvk-ui-ease-enter);
2449
+ }
2450
+
2451
+ :where(.zvk-ui-select__content[data-state="closed"]:not([hidden])) {
2452
+ animation: zvk-ui-select-content-exit var(--zvk-ui-duration-fast) var(--zvk-ui-ease-exit);
2453
+ pointer-events: none;
2454
+ }
2455
+
2456
+ :where(.zvk-ui-select__content[aria-hidden="true"]) {
2457
+ pointer-events: none;
1956
2458
  }
1957
2459
 
1958
2460
  :where(.zvk-ui-select__content[hidden]) {
@@ -1964,7 +2466,7 @@
1964
2466
  border-radius: var(--zvk-ui-radius-sm);
1965
2467
  cursor: pointer;
1966
2468
  display: grid;
1967
- font-family: var(--zvk-ui-font-family-sans);
2469
+ font-family: var(--zvk-ui-font-family-primary);
1968
2470
  font-size: var(--zvk-ui-font-size-sm);
1969
2471
  gap: var(--zvk-ui-space-2);
1970
2472
  grid-template-columns: 1rem 1fr;
@@ -1995,6 +2497,7 @@
1995
2497
 
1996
2498
  :where(.zvk-ui-select__label) {
1997
2499
  color: var(--zvk-ui-color-muted-foreground);
2500
+ font-family: var(--zvk-ui-font-family-secondary);
1998
2501
  font-size: var(--zvk-ui-font-size-xs);
1999
2502
  font-weight: 600;
2000
2503
  padding: var(--zvk-ui-space-1) var(--zvk-ui-space-2);
@@ -2023,6 +2526,40 @@
2023
2526
  color: var(--zvk-ui-color-foreground);
2024
2527
  outline: 0;
2025
2528
  }
2529
+
2530
+ @keyframes zvk-ui-select-content-enter {
2531
+ from {
2532
+ opacity: 0;
2533
+ transform: translate(var(--zvk-ui-select-motion-x), var(--zvk-ui-select-motion-y)) scale(0.98);
2534
+ }
2535
+
2536
+ to {
2537
+ opacity: 1;
2538
+ transform: translate(0, 0) scale(1);
2539
+ }
2540
+ }
2541
+
2542
+ @keyframes zvk-ui-select-content-exit {
2543
+ from {
2544
+ opacity: 1;
2545
+ transform: translate(0, 0) scale(1);
2546
+ }
2547
+
2548
+ to {
2549
+ opacity: 0;
2550
+ transform: translate(var(--zvk-ui-select-motion-x), var(--zvk-ui-select-motion-y)) scale(0.98);
2551
+ }
2552
+ }
2553
+
2554
+ @media (prefers-reduced-motion: reduce) {
2555
+ :where(.zvk-ui-select__indicator) {
2556
+ transition: none;
2557
+ }
2558
+
2559
+ :where(.zvk-ui-select__content[data-state="open"], .zvk-ui-select__content[data-state="closed"]:not([hidden])) {
2560
+ animation: none;
2561
+ }
2562
+ }
2026
2563
  }
2027
2564
 
2028
2565
 
@@ -2045,13 +2582,14 @@
2045
2582
  color: var(--zvk-ui-color-foreground);
2046
2583
  cursor: pointer;
2047
2584
  display: inline-flex;
2048
- font-family: var(--zvk-ui-font-family-sans);
2585
+ font-family: var(--zvk-ui-font-family-primary);
2049
2586
  font-size: var(--zvk-ui-font-size-sm);
2050
2587
  gap: var(--zvk-ui-control-gap);
2051
2588
  height: var(--zvk-ui-collapsible-trigger-height);
2052
2589
  justify-content: flex-start;
2053
2590
  min-width: max-content;
2054
2591
  padding-inline: var(--zvk-ui-collapsible-trigger-padding-x);
2592
+ transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
2055
2593
  }
2056
2594
 
2057
2595
  :where(.zvk-ui-collapsible__trigger:hover:not(:disabled, [data-disabled="true"])) {
@@ -2066,9 +2604,31 @@
2066
2604
  padding-inline: var(--zvk-ui-control-padding-x);
2067
2605
  }
2068
2606
 
2607
+ :where(.zvk-ui-collapsible__content[data-state="open"]) {
2608
+ animation: zvk-ui-collapsible-content-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-standard) both;
2609
+ }
2610
+
2069
2611
  :where(.zvk-ui-collapsible__content[data-state="closed"]) {
2070
2612
  overflow: hidden;
2071
2613
  }
2614
+
2615
+ @keyframes zvk-ui-collapsible-content-enter {
2616
+ from {
2617
+ opacity: 0;
2618
+ transform: translateY(-0.25rem);
2619
+ }
2620
+
2621
+ to {
2622
+ opacity: 1;
2623
+ transform: translateY(0);
2624
+ }
2625
+ }
2626
+
2627
+ @media (prefers-reduced-motion: reduce) {
2628
+ :where(.zvk-ui-collapsible__content[data-state="open"]) {
2629
+ animation: none;
2630
+ }
2631
+ }
2072
2632
  }
2073
2633
 
2074
2634
 
@@ -2084,6 +2644,7 @@
2084
2644
  border: 1px solid var(--zvk-ui-color-border);
2085
2645
  border-radius: var(--zvk-ui-radius-md);
2086
2646
  overflow: hidden;
2647
+ transition: border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
2087
2648
  }
2088
2649
 
2089
2650
  :where(.zvk-ui-accordion__item[data-state="open"]) {
@@ -2092,18 +2653,23 @@
2092
2653
 
2093
2654
  :where(.zvk-ui-accordion__trigger) {
2094
2655
  --zvk-ui-accordion-trigger-height: var(--zvk-ui-control-height-md);
2656
+ align-items: center;
2095
2657
  appearance: none;
2096
2658
  background: var(--zvk-ui-color-surface);
2097
2659
  border: none;
2098
2660
  color: var(--zvk-ui-color-foreground);
2099
2661
  cursor: pointer;
2100
2662
  display: inline-flex;
2101
- font-family: var(--zvk-ui-font-family-sans);
2663
+ font-family: var(--zvk-ui-font-family-primary);
2102
2664
  font-size: var(--zvk-ui-font-size-sm);
2103
2665
  gap: var(--zvk-ui-control-gap);
2666
+ justify-content: flex-start;
2667
+ line-height: 1;
2104
2668
  min-width: 100%;
2105
2669
  min-height: var(--zvk-ui-accordion-trigger-height);
2670
+ padding-inline: var(--zvk-ui-control-padding-x);
2106
2671
  text-align: left;
2672
+ transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
2107
2673
  width: 100%;
2108
2674
  }
2109
2675
 
@@ -2120,6 +2686,10 @@
2120
2686
  padding: var(--zvk-ui-space-3);
2121
2687
  }
2122
2688
 
2689
+ :where(.zvk-ui-accordion__content[data-state="open"]) {
2690
+ animation: zvk-ui-accordion-content-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-standard) both;
2691
+ }
2692
+
2123
2693
  :where(.zvk-ui-accordion__content[data-state="closed"]) {
2124
2694
  display: none;
2125
2695
  }
@@ -2127,6 +2697,24 @@
2127
2697
  :where(.zvk-ui-accordion[data-disabled="true"] .zvk-ui-accordion__trigger:disabled) {
2128
2698
  cursor: not-allowed;
2129
2699
  }
2700
+
2701
+ @keyframes zvk-ui-accordion-content-enter {
2702
+ from {
2703
+ opacity: 0;
2704
+ transform: translateY(-0.25rem);
2705
+ }
2706
+
2707
+ to {
2708
+ opacity: 1;
2709
+ transform: translateY(0);
2710
+ }
2711
+ }
2712
+
2713
+ @media (prefers-reduced-motion: reduce) {
2714
+ :where(.zvk-ui-accordion__content[data-state="open"]) {
2715
+ animation: none;
2716
+ }
2717
+ }
2130
2718
  }
2131
2719
 
2132
2720
 
@@ -2162,7 +2750,7 @@
2162
2750
  cursor: pointer;
2163
2751
  display: inline-flex;
2164
2752
  flex: 0 0 auto;
2165
- font-family: var(--zvk-ui-font-family-sans);
2753
+ font-family: var(--zvk-ui-font-family-primary);
2166
2754
  font-size: var(--zvk-ui-font-size-sm);
2167
2755
  font-weight: 600;
2168
2756
  justify-content: center;
@@ -2201,10 +2789,32 @@
2201
2789
 
2202
2790
  :where(.zvk-ui-tabs__content) {
2203
2791
  color: var(--zvk-ui-color-foreground);
2204
- font-family: var(--zvk-ui-font-family-sans);
2792
+ font-family: var(--zvk-ui-font-family-primary);
2205
2793
  font-size: var(--zvk-ui-font-size-md);
2206
2794
  line-height: var(--zvk-ui-line-height-normal);
2207
2795
  }
2796
+
2797
+ :where(.zvk-ui-tabs__content[data-state="open"]) {
2798
+ animation: zvk-ui-tabs-content-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-standard) both;
2799
+ }
2800
+
2801
+ @keyframes zvk-ui-tabs-content-enter {
2802
+ from {
2803
+ opacity: 0;
2804
+ transform: translateY(0.25rem);
2805
+ }
2806
+
2807
+ to {
2808
+ opacity: 1;
2809
+ transform: translateY(0);
2810
+ }
2811
+ }
2812
+
2813
+ @media (prefers-reduced-motion: reduce) {
2814
+ :where(.zvk-ui-tabs__content[data-state="open"]) {
2815
+ animation: none;
2816
+ }
2817
+ }
2208
2818
  }
2209
2819
 
2210
2820
 
@@ -2239,11 +2849,17 @@
2239
2849
  }
2240
2850
 
2241
2851
  :where(.zvk-ui-breadcrumbs__link) {
2852
+ align-items: center;
2853
+ border-radius: var(--zvk-ui-radius-sm);
2242
2854
  color: inherit;
2855
+ display: inline-flex;
2856
+ min-block-size: 1.5rem;
2243
2857
  text-decoration: none;
2858
+ transition: color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
2244
2859
  }
2245
2860
 
2246
2861
  :where(.zvk-ui-breadcrumbs__link:hover, .zvk-ui-breadcrumbs__link:focus-visible) {
2862
+ color: var(--zvk-ui-color-foreground);
2247
2863
  text-decoration: underline;
2248
2864
  }
2249
2865
 
@@ -2251,6 +2867,13 @@
2251
2867
  color: var(--zvk-ui-color-muted-foreground);
2252
2868
  pointer-events: none;
2253
2869
  }
2870
+
2871
+ @media (max-width: 40rem) {
2872
+ :where(.zvk-ui-breadcrumbs__link) {
2873
+ min-block-size: var(--zvk-ui-control-height-lg);
2874
+ padding-inline: var(--zvk-ui-space-1);
2875
+ }
2876
+ }
2254
2877
  }
2255
2878
 
2256
2879
 
@@ -2258,6 +2881,7 @@
2258
2881
  @layer zvk-ui-components {
2259
2882
  :where(.zvk-ui-pagination) {
2260
2883
  display: block;
2884
+ max-inline-size: 100%;
2261
2885
  width: max-content;
2262
2886
  }
2263
2887
 
@@ -2275,6 +2899,7 @@
2275
2899
  }
2276
2900
 
2277
2901
  :where(.zvk-ui-pagination__item) {
2902
+ align-items: center;
2278
2903
  appearance: none;
2279
2904
  background: transparent;
2280
2905
  border: 1px solid transparent;
@@ -2282,9 +2907,11 @@
2282
2907
  color: var(--zvk-ui-color-foreground);
2283
2908
  display: inline-flex;
2284
2909
  font-size: var(--zvk-ui-font-size-sm);
2910
+ justify-content: center;
2285
2911
  padding-block: var(--zvk-ui-space-1);
2286
2912
  padding-inline: var(--zvk-ui-space-2);
2287
2913
  text-decoration: none;
2914
+ transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
2288
2915
  }
2289
2916
 
2290
2917
  :where(.zvk-ui-pagination__item:hover:not(:disabled)) {
@@ -2310,6 +2937,23 @@
2310
2937
  outline: 0;
2311
2938
  box-shadow: var(--zvk-ui-focus-ring);
2312
2939
  }
2940
+
2941
+ @media (max-width: 40rem) {
2942
+ :where(.zvk-ui-pagination) {
2943
+ width: 100%;
2944
+ }
2945
+
2946
+ :where(.zvk-ui-pagination__list) {
2947
+ display: flex;
2948
+ flex-wrap: wrap;
2949
+ row-gap: var(--zvk-ui-space-1);
2950
+ }
2951
+
2952
+ :where(.zvk-ui-pagination__item) {
2953
+ min-block-size: var(--zvk-ui-control-height-lg);
2954
+ min-inline-size: var(--zvk-ui-control-height-lg);
2955
+ }
2956
+ }
2313
2957
  }
2314
2958
 
2315
2959
 
@@ -2320,6 +2964,7 @@
2320
2964
  max-inline-size: 100%;
2321
2965
  overflow-x: auto;
2322
2966
  overscroll-behavior-x: contain;
2967
+ scrollbar-gutter: stable;
2323
2968
  -webkit-overflow-scrolling: touch;
2324
2969
  }
2325
2970
 
@@ -2368,89 +3013,191 @@
2368
3013
  text-align: left;
2369
3014
  }
2370
3015
 
2371
- :where(.zvk-ui-table__head, .zvk-ui-table__cell) {
2372
- text-align: left;
2373
- padding-block: var(--zvk-ui-table-cell-padding-y);
2374
- padding-inline: var(--zvk-ui-table-cell-padding-x);
2375
- }
2376
-
2377
- :where(.zvk-ui-table__head) {
2378
- font-size: var(--zvk-ui-font-size-sm);
2379
- font-weight: 600;
2380
- }
2381
-
2382
- :where(.zvk-ui-table__row) {
2383
- border-bottom: 1px solid var(--zvk-ui-color-border-subtle);
2384
- }
2385
-
2386
- :where(.zvk-ui-table__row:last-child) {
2387
- border-bottom: none;
2388
- }
2389
- }
2390
-
2391
-
2392
- /* src/components/empty-state/empty-state.css */
2393
- @layer zvk-ui-components {
2394
- :where(.zvk-ui-empty-state) {
3016
+ :where(.zvk-ui-table__toolbar) {
2395
3017
  align-items: center;
2396
3018
  display: flex;
2397
- flex-direction: column;
3019
+ flex-wrap: wrap;
2398
3020
  gap: var(--zvk-ui-space-3);
2399
- text-align: center;
2400
- }
2401
-
2402
- :where(.zvk-ui-empty-state__icon) {
2403
- color: var(--zvk-ui-color-muted-foreground);
2404
- font-size: var(--zvk-ui-font-size-2xl);
2405
- line-height: 1;
2406
- min-height: 1.75rem;
3021
+ justify-content: space-between;
2407
3022
  }
2408
3023
 
2409
- :where(.zvk-ui-empty-state__title) {
3024
+ :where(.zvk-ui-table__toolbar-title) {
2410
3025
  color: var(--zvk-ui-color-foreground);
3026
+ font-family: var(--zvk-ui-font-family-secondary);
2411
3027
  font-size: var(--zvk-ui-font-size-lg);
2412
- font-weight: 650;
2413
- margin: 0;
2414
- }
2415
-
2416
- :where(.zvk-ui-empty-state__description) {
2417
- color: var(--zvk-ui-color-muted-foreground);
3028
+ font-weight: 700;
3029
+ line-height: var(--zvk-ui-line-height-tight);
2418
3030
  margin: 0;
2419
- max-width: 45ch;
2420
3031
  }
2421
3032
 
2422
- :where(.zvk-ui-empty-state__actions) {
3033
+ :where(.zvk-ui-table__toolbar-actions) {
3034
+ align-items: center;
2423
3035
  display: inline-flex;
3036
+ flex-wrap: wrap;
2424
3037
  gap: var(--zvk-ui-space-2);
2425
3038
  }
2426
3039
 
2427
- :where(.zvk-ui-empty-state[data-align="start"]) {
2428
- align-items: flex-start;
3040
+ :where(.zvk-ui-table__head, .zvk-ui-table__cell) {
2429
3041
  text-align: left;
3042
+ padding-block: var(--zvk-ui-table-cell-padding-y);
3043
+ padding-inline: var(--zvk-ui-table-cell-padding-x);
2430
3044
  }
2431
3045
 
2432
- :where(.zvk-ui-empty-state[data-size="sm"]) {
2433
- gap: var(--zvk-ui-space-2);
3046
+ :where(.zvk-ui-table__selection-cell) {
3047
+ inline-size: 1%;
3048
+ text-align: center;
3049
+ white-space: nowrap;
2434
3050
  }
2435
3051
 
2436
- :where(.zvk-ui-empty-state[data-size="sm"] .zvk-ui-empty-state__title) {
2437
- font-size: var(--zvk-ui-font-size-base);
3052
+ :where(.zvk-ui-table__selection-cell[data-disabled="true"]) {
3053
+ opacity: var(--zvk-ui-opacity-disabled);
2438
3054
  }
2439
3055
 
2440
- :where(.zvk-ui-empty-state[data-size="lg"]) {
2441
- gap: var(--zvk-ui-space-4);
3056
+ :where(.zvk-ui-table__selection-checkbox) {
3057
+ justify-content: center;
2442
3058
  }
2443
3059
 
2444
- :where(.zvk-ui-empty-state[data-size="lg"] .zvk-ui-empty-state__title) {
2445
- font-size: var(--zvk-ui-font-size-xl);
3060
+ :where(.zvk-ui-table__head) {
3061
+ font-size: var(--zvk-ui-font-size-sm);
3062
+ font-weight: 600;
2446
3063
  }
2447
- }
2448
-
2449
3064
 
2450
- /* src/components/stat/stat.css */
2451
- @layer zvk-ui-components {
2452
- :where(.zvk-ui-stat) {
2453
- border: 1px solid var(--zvk-ui-color-border);
3065
+ :where(.zvk-ui-table__sort-button) {
3066
+ align-items: center;
3067
+ appearance: none;
3068
+ background: transparent;
3069
+ border: 0;
3070
+ border-radius: var(--zvk-ui-radius-sm);
3071
+ color: inherit;
3072
+ cursor: pointer;
3073
+ display: inline-flex;
3074
+ font: inherit;
3075
+ font-weight: inherit;
3076
+ gap: var(--zvk-ui-space-2);
3077
+ margin: calc(-1 * var(--zvk-ui-space-1));
3078
+ padding: var(--zvk-ui-space-1);
3079
+ text-align: inherit;
3080
+ }
3081
+
3082
+ :where(.zvk-ui-table__sort-button:hover) {
3083
+ background: var(--zvk-ui-color-muted);
3084
+ }
3085
+
3086
+ :where(.zvk-ui-table__sort-button:focus-visible) {
3087
+ box-shadow: var(--zvk-ui-focus-ring);
3088
+ outline: none;
3089
+ }
3090
+
3091
+ :where(.zvk-ui-table__sort-button:disabled) {
3092
+ cursor: not-allowed;
3093
+ opacity: 0.55;
3094
+ }
3095
+
3096
+ :where(.zvk-ui-table__sort-direction) {
3097
+ color: var(--zvk-ui-color-muted-foreground);
3098
+ font-size: var(--zvk-ui-font-size-xs);
3099
+ font-weight: 500;
3100
+ line-height: 1;
3101
+ }
3102
+
3103
+ :where(.zvk-ui-table__row) {
3104
+ border-bottom: 1px solid var(--zvk-ui-color-border-subtle);
3105
+ }
3106
+
3107
+ :where(.zvk-ui-table__row:last-child) {
3108
+ border-bottom: none;
3109
+ }
3110
+
3111
+ :where(.zvk-ui-table__state-row) {
3112
+ color: var(--zvk-ui-color-muted-foreground);
3113
+ }
3114
+
3115
+ :where(.zvk-ui-table__state-row[data-state="loading"]) {
3116
+ color: var(--zvk-ui-color-foreground);
3117
+ }
3118
+
3119
+ :where(.zvk-ui-table__state-row[data-state="error"]) {
3120
+ color: var(--zvk-ui-color-destructive);
3121
+ }
3122
+
3123
+ :where(.zvk-ui-table__state-cell) {
3124
+ padding-block: calc(var(--zvk-ui-table-cell-padding-y) * 2);
3125
+ text-align: center;
3126
+ }
3127
+
3128
+ @media (max-width: 40rem) {
3129
+ :where(.zvk-ui-table-container) {
3130
+ box-shadow:
3131
+ inset var(--zvk-ui-space-2) 0 var(--zvk-ui-space-3) calc(-1 * var(--zvk-ui-space-3)) color-mix(in srgb, var(--zvk-ui-color-foreground) 18%, transparent),
3132
+ inset calc(-1 * var(--zvk-ui-space-2)) 0 var(--zvk-ui-space-3) calc(-1 * var(--zvk-ui-space-3)) color-mix(in srgb, var(--zvk-ui-color-foreground) 18%, transparent);
3133
+ scrollbar-width: thin;
3134
+ }
3135
+ }
3136
+ }
3137
+
3138
+
3139
+ /* src/components/empty-state/empty-state.css */
3140
+ @layer zvk-ui-components {
3141
+ :where(.zvk-ui-empty-state) {
3142
+ align-items: center;
3143
+ display: flex;
3144
+ flex-direction: column;
3145
+ gap: var(--zvk-ui-space-3);
3146
+ text-align: center;
3147
+ }
3148
+
3149
+ :where(.zvk-ui-empty-state__icon) {
3150
+ color: var(--zvk-ui-color-muted-foreground);
3151
+ font-size: var(--zvk-ui-font-size-2xl);
3152
+ line-height: 1;
3153
+ min-height: 1.75rem;
3154
+ }
3155
+
3156
+ :where(.zvk-ui-empty-state__title) {
3157
+ color: var(--zvk-ui-color-foreground);
3158
+ font-size: var(--zvk-ui-font-size-lg);
3159
+ font-weight: 650;
3160
+ margin: 0;
3161
+ }
3162
+
3163
+ :where(.zvk-ui-empty-state__description) {
3164
+ color: var(--zvk-ui-color-muted-foreground);
3165
+ margin: 0;
3166
+ max-width: 45ch;
3167
+ }
3168
+
3169
+ :where(.zvk-ui-empty-state__actions) {
3170
+ display: inline-flex;
3171
+ gap: var(--zvk-ui-space-2);
3172
+ }
3173
+
3174
+ :where(.zvk-ui-empty-state[data-align="start"]) {
3175
+ align-items: flex-start;
3176
+ text-align: left;
3177
+ }
3178
+
3179
+ :where(.zvk-ui-empty-state[data-size="sm"]) {
3180
+ gap: var(--zvk-ui-space-2);
3181
+ }
3182
+
3183
+ :where(.zvk-ui-empty-state[data-size="sm"] .zvk-ui-empty-state__title) {
3184
+ font-size: var(--zvk-ui-font-size-base);
3185
+ }
3186
+
3187
+ :where(.zvk-ui-empty-state[data-size="lg"]) {
3188
+ gap: var(--zvk-ui-space-4);
3189
+ }
3190
+
3191
+ :where(.zvk-ui-empty-state[data-size="lg"] .zvk-ui-empty-state__title) {
3192
+ font-size: var(--zvk-ui-font-size-xl);
3193
+ }
3194
+ }
3195
+
3196
+
3197
+ /* src/components/stat/stat.css */
3198
+ @layer zvk-ui-components {
3199
+ :where(.zvk-ui-stat) {
3200
+ border: 1px solid var(--zvk-ui-color-border);
2454
3201
  border-radius: var(--zvk-ui-radius-lg);
2455
3202
  display: grid;
2456
3203
  gap: var(--zvk-ui-space-2);
@@ -2533,11 +3280,15 @@
2533
3280
  border: 1px solid var(--zvk-ui-color-border);
2534
3281
  border-radius: var(--zvk-ui-radius-md);
2535
3282
  display: grid;
2536
- font-family: var(--zvk-ui-font-family-mono);
3283
+ font-family: var(--zvk-ui-font-family-tertiary);
2537
3284
  line-height: 1.4;
2538
3285
  margin: 0;
3286
+ max-inline-size: 100%;
2539
3287
  overflow: auto;
3288
+ overscroll-behavior-x: contain;
2540
3289
  padding: var(--zvk-ui-space-3);
3290
+ scrollbar-gutter: stable;
3291
+ -webkit-overflow-scrolling: touch;
2541
3292
  }
2542
3293
 
2543
3294
  :where(.zvk-ui-code-block__header) {
@@ -2572,27 +3323,94 @@
2572
3323
  border-left: 2px solid var(--zvk-ui-color-border-strong);
2573
3324
  padding-left: var(--zvk-ui-space-3);
2574
3325
  }
3326
+
3327
+ @media (max-width: 40rem) {
3328
+ :where(.zvk-ui-code-block) {
3329
+ box-shadow:
3330
+ inset var(--zvk-ui-space-2) 0 var(--zvk-ui-space-3) calc(-1 * var(--zvk-ui-space-3)) color-mix(in srgb, var(--zvk-ui-color-foreground) 24%, transparent),
3331
+ inset calc(-1 * var(--zvk-ui-space-2)) 0 var(--zvk-ui-space-3) calc(-1 * var(--zvk-ui-space-3)) color-mix(in srgb, var(--zvk-ui-color-foreground) 24%, transparent);
3332
+ scrollbar-width: thin;
3333
+ }
3334
+ }
3335
+ }
3336
+
3337
+
3338
+ /* src/components/kbd/kbd.css */
3339
+ @layer zvk-ui-components {
3340
+ :where(.zvk-ui-kbd-group) {
3341
+ align-items: center;
3342
+ color: var(--zvk-ui-color-muted-foreground);
3343
+ display: inline-flex;
3344
+ gap: var(--zvk-ui-space-1);
3345
+ max-inline-size: 100%;
3346
+ vertical-align: baseline;
3347
+ white-space: nowrap;
3348
+ }
3349
+
3350
+ :where(.zvk-ui-kbd) {
3351
+ align-items: center;
3352
+ background: color-mix(in srgb, var(--zvk-ui-color-foreground) 5%, var(--zvk-ui-color-surface));
3353
+ border: 1px solid var(--zvk-ui-color-border);
3354
+ border-block-end-color: var(--zvk-ui-color-border-strong);
3355
+ border-radius: var(--zvk-ui-radius-sm);
3356
+ box-shadow: inset 0 -1px 0 color-mix(in srgb, var(--zvk-ui-color-foreground) 10%, transparent);
3357
+ color: var(--zvk-ui-color-foreground);
3358
+ display: inline-flex;
3359
+ font-family: var(--zvk-ui-font-family-tertiary);
3360
+ font-size: var(--zvk-ui-font-size-xs);
3361
+ font-weight: 650;
3362
+ justify-content: center;
3363
+ letter-spacing: 0;
3364
+ line-height: 1;
3365
+ min-block-size: 1.5rem;
3366
+ min-inline-size: 1.5rem;
3367
+ padding-block: 0;
3368
+ padding-inline: var(--zvk-ui-space-1);
3369
+ vertical-align: baseline;
3370
+ white-space: nowrap;
3371
+ }
3372
+
3373
+ :where(.zvk-ui-kbd[data-size="sm"]) {
3374
+ min-block-size: 1.25rem;
3375
+ min-inline-size: 1.25rem;
3376
+ padding-inline: calc(var(--zvk-ui-space-1) / 2);
3377
+ }
3378
+
3379
+ :where(.zvk-ui-kbd__separator) {
3380
+ color: var(--zvk-ui-color-muted-foreground);
3381
+ font-family: var(--zvk-ui-font-family-primary);
3382
+ font-size: var(--zvk-ui-font-size-xs);
3383
+ line-height: 1;
3384
+ }
2575
3385
  }
2576
3386
 
2577
3387
 
2578
3388
  /* src/components/dialog/dialog.css */
2579
3389
  @layer zvk-ui-components {
2580
3390
  :where(.zvk-ui-dialog__overlay) {
2581
- --zvk-ui-dialog-overlay-background: color-mix(in srgb, var(--zvk-ui-color-foreground) 28%, transparent);
2582
- animation: zvk-ui-dialog-overlay-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-standard);
3391
+ --zvk-ui-dialog-overlay-background: var(--zvk-ui-material-overlay-background);
2583
3392
  background: var(--zvk-ui-dialog-overlay-background);
2584
3393
  inset: 0;
2585
3394
  position: fixed;
2586
- z-index: 100;
3395
+ z-index: var(--zvk-ui-z-index-overlay);
3396
+ }
3397
+
3398
+ :where(.zvk-ui-dialog__overlay[data-state="open"]) {
3399
+ animation: zvk-ui-dialog-overlay-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-enter) both;
3400
+ }
3401
+
3402
+ :where(.zvk-ui-dialog__overlay[data-state="closed"]) {
3403
+ animation: zvk-ui-dialog-overlay-exit var(--zvk-ui-duration-fast) var(--zvk-ui-ease-exit) both;
2587
3404
  }
2588
3405
 
2589
3406
  :where(.zvk-ui-dialog__content) {
2590
- --zvk-ui-dialog-content-background: var(--zvk-ui-color-surface);
3407
+ --zvk-ui-dialog-content-background: var(--zvk-ui-color-surface-raised);
2591
3408
  --zvk-ui-dialog-content-border: var(--zvk-ui-color-border);
3409
+ backdrop-filter: var(--zvk-ui-dialog-content-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
2592
3410
  background: var(--zvk-ui-dialog-content-background);
2593
3411
  border: 1px solid var(--zvk-ui-dialog-content-border);
2594
3412
  border-radius: var(--zvk-ui-radius-lg);
2595
- box-shadow: var(--zvk-ui-shadow-md);
3413
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
2596
3414
  left: 50%;
2597
3415
  max-height: min(85vh, 32rem);
2598
3416
  max-width: min(92vw, 32rem);
@@ -2602,11 +3420,15 @@
2602
3420
  top: 50%;
2603
3421
  transform: translate(-50%, -50%);
2604
3422
  width: min(92vw, 32rem);
2605
- z-index: 101;
3423
+ z-index: var(--zvk-ui-z-index-modal);
2606
3424
  }
2607
3425
 
2608
3426
  :where(.zvk-ui-dialog__content[data-state="open"]) {
2609
- animation: zvk-ui-dialog-content-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-standard);
3427
+ animation: zvk-ui-dialog-content-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-enter) both;
3428
+ }
3429
+
3430
+ :where(.zvk-ui-dialog__content[data-state="closed"]) {
3431
+ animation: zvk-ui-dialog-content-exit var(--zvk-ui-duration-fast) var(--zvk-ui-ease-exit) both;
2610
3432
  }
2611
3433
 
2612
3434
  :where(.zvk-ui-dialog__header, .zvk-ui-dialog__footer) {
@@ -2620,7 +3442,7 @@
2620
3442
 
2621
3443
  :where(.zvk-ui-dialog__title) {
2622
3444
  color: var(--zvk-ui-color-foreground);
2623
- font-family: var(--zvk-ui-font-family-sans);
3445
+ font-family: var(--zvk-ui-font-family-secondary);
2624
3446
  font-size: var(--zvk-ui-font-size-lg);
2625
3447
  font-weight: 700;
2626
3448
  line-height: var(--zvk-ui-line-height-tight);
@@ -2642,14 +3464,15 @@
2642
3464
  :where(.zvk-ui-dialog__trigger, .zvk-ui-dialog__close) {
2643
3465
  align-items: center;
2644
3466
  appearance: none;
3467
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
2645
3468
  background: var(--zvk-ui-control-background);
2646
3469
  border: 1px solid var(--zvk-ui-color-border);
2647
3470
  border-radius: var(--zvk-ui-radius-md);
2648
- box-shadow: var(--zvk-ui-shadow-xs);
3471
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs);
2649
3472
  color: var(--zvk-ui-color-foreground);
2650
3473
  cursor: pointer;
2651
3474
  display: inline-flex;
2652
- font-family: var(--zvk-ui-font-family-sans);
3475
+ font-family: var(--zvk-ui-font-family-primary);
2653
3476
  font-size: var(--zvk-ui-font-size-sm);
2654
3477
  font-weight: 600;
2655
3478
  justify-content: center;
@@ -2675,15 +3498,10 @@
2675
3498
  }
2676
3499
 
2677
3500
  :where(.zvk-ui-dialog__trigger:focus-visible, .zvk-ui-dialog__close:focus-visible) {
2678
- box-shadow: var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
3501
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
2679
3502
  outline: 0;
2680
3503
  }
2681
3504
 
2682
- :where(.zvk-ui-dialog[data-state="closed"]) .zvk-ui-dialog__content,
2683
- :where(.zvk-ui-dialog__content[data-state="closed"]) {
2684
- display: none;
2685
- }
2686
-
2687
3505
  @keyframes zvk-ui-dialog-overlay-enter {
2688
3506
  from {
2689
3507
  opacity: 0;
@@ -2694,6 +3512,16 @@
2694
3512
  }
2695
3513
  }
2696
3514
 
3515
+ @keyframes zvk-ui-dialog-overlay-exit {
3516
+ from {
3517
+ opacity: 1;
3518
+ }
3519
+
3520
+ to {
3521
+ opacity: 0;
3522
+ }
3523
+ }
3524
+
2697
3525
  @keyframes zvk-ui-dialog-content-enter {
2698
3526
  from {
2699
3527
  opacity: 0;
@@ -2706,11 +3534,32 @@
2706
3534
  }
2707
3535
  }
2708
3536
 
3537
+ @keyframes zvk-ui-dialog-content-exit {
3538
+ from {
3539
+ opacity: 1;
3540
+ transform: translate(-50%, -50%) scale(1);
3541
+ }
3542
+
3543
+ to {
3544
+ opacity: 0;
3545
+ transform: translate(-50%, calc(-50% + 0.25rem)) scale(0.98);
3546
+ }
3547
+ }
3548
+
2709
3549
  @media (prefers-reduced-motion: reduce) {
2710
3550
  :where(.zvk-ui-dialog__overlay),
2711
- :where(.zvk-ui-dialog__content[data-state="open"]) {
3551
+ :where(.zvk-ui-dialog__content) {
2712
3552
  animation: none;
2713
3553
  }
3554
+
3555
+ :where(.zvk-ui-dialog__overlay[data-state="closed"]),
3556
+ :where(.zvk-ui-dialog__content[data-state="closed"]) {
3557
+ opacity: 0;
3558
+ }
3559
+
3560
+ :where(.zvk-ui-dialog__content) {
3561
+ transform: translate(-50%, -50%);
3562
+ }
2714
3563
  }
2715
3564
  }
2716
3565
 
@@ -2722,19 +3571,28 @@
2722
3571
  }
2723
3572
 
2724
3573
  .zvk-ui-alert-dialog__overlay {
2725
- background: color-mix(in srgb, var(--zvk-ui-color-foreground) 28%, transparent);
3574
+ background: var(--zvk-ui-material-overlay-background);
2726
3575
  inset: 0;
2727
3576
  position: fixed;
2728
- z-index: 100;
3577
+ z-index: var(--zvk-ui-z-index-overlay);
3578
+ }
3579
+
3580
+ .zvk-ui-alert-dialog__overlay[data-state="open"] {
3581
+ animation: zvk-ui-alert-dialog-overlay-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-enter) both;
3582
+ }
3583
+
3584
+ .zvk-ui-alert-dialog__overlay[data-state="closed"] {
3585
+ animation: zvk-ui-alert-dialog-overlay-exit var(--zvk-ui-duration-fast) var(--zvk-ui-ease-exit) both;
2729
3586
  }
2730
3587
 
2731
3588
  .zvk-ui-alert-dialog__content {
2732
- background: var(--zvk-ui-color-surface);
3589
+ backdrop-filter: var(--zvk-ui-alert-dialog-content-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
3590
+ background: var(--zvk-ui-color-surface-raised);
2733
3591
  border: 1px solid var(--zvk-ui-color-border);
2734
3592
  border-radius: var(--zvk-ui-radius-lg);
2735
- box-shadow: var(--zvk-ui-shadow-md);
3593
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
2736
3594
  color: var(--zvk-ui-color-foreground);
2737
- font-family: var(--zvk-ui-font-family-sans);
3595
+ font-family: var(--zvk-ui-font-family-primary);
2738
3596
  inline-size: min(30rem, calc(100vw - 2rem));
2739
3597
  left: 50%;
2740
3598
  line-height: var(--zvk-ui-line-height-normal);
@@ -2742,12 +3600,20 @@
2742
3600
  position: fixed;
2743
3601
  top: 50%;
2744
3602
  transform: translate(-50%, -50%);
2745
- z-index: 101;
3603
+ z-index: var(--zvk-ui-z-index-modal);
3604
+ }
3605
+
3606
+ .zvk-ui-alert-dialog__content[data-state="open"] {
3607
+ animation: zvk-ui-alert-dialog-content-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-enter) both;
3608
+ }
3609
+
3610
+ .zvk-ui-alert-dialog__content[data-state="closed"] {
3611
+ animation: zvk-ui-alert-dialog-content-exit var(--zvk-ui-duration-fast) var(--zvk-ui-ease-exit) both;
2746
3612
  }
2747
3613
 
2748
3614
  .zvk-ui-alert-dialog__title {
2749
3615
  color: var(--zvk-ui-color-foreground);
2750
- font-family: var(--zvk-ui-font-family-sans);
3616
+ font-family: var(--zvk-ui-font-family-secondary);
2751
3617
  font-size: var(--zvk-ui-font-size-lg);
2752
3618
  font-weight: 700;
2753
3619
  line-height: var(--zvk-ui-line-height-tight);
@@ -2772,14 +3638,15 @@
2772
3638
  .zvk-ui-alert-dialog__button {
2773
3639
  align-items: center;
2774
3640
  appearance: none;
3641
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
2775
3642
  background: var(--zvk-ui-control-background);
2776
3643
  border: 1px solid var(--zvk-ui-color-border);
2777
3644
  border-radius: var(--zvk-ui-radius-md);
2778
- box-shadow: var(--zvk-ui-shadow-xs);
3645
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs);
2779
3646
  color: var(--zvk-ui-color-foreground);
2780
3647
  cursor: pointer;
2781
3648
  display: inline-flex;
2782
- font-family: var(--zvk-ui-font-family-sans);
3649
+ font-family: var(--zvk-ui-font-family-primary);
2783
3650
  font-size: var(--zvk-ui-font-size-sm);
2784
3651
  font-weight: 600;
2785
3652
  justify-content: center;
@@ -2806,7 +3673,7 @@
2806
3673
 
2807
3674
  .zvk-ui-alert-dialog__trigger:focus-visible,
2808
3675
  .zvk-ui-alert-dialog__button:focus-visible {
2809
- box-shadow: var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
3676
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
2810
3677
  outline: 0;
2811
3678
  }
2812
3679
 
@@ -2815,6 +3682,66 @@
2815
3682
  cursor: not-allowed;
2816
3683
  opacity: var(--zvk-ui-opacity-disabled);
2817
3684
  }
3685
+
3686
+ @keyframes zvk-ui-alert-dialog-overlay-enter {
3687
+ from {
3688
+ opacity: 0;
3689
+ }
3690
+
3691
+ to {
3692
+ opacity: 1;
3693
+ }
3694
+ }
3695
+
3696
+ @keyframes zvk-ui-alert-dialog-overlay-exit {
3697
+ from {
3698
+ opacity: 1;
3699
+ }
3700
+
3701
+ to {
3702
+ opacity: 0;
3703
+ }
3704
+ }
3705
+
3706
+ @keyframes zvk-ui-alert-dialog-content-enter {
3707
+ from {
3708
+ opacity: 0;
3709
+ transform: translate(-50%, -50%) scale(0.98);
3710
+ }
3711
+
3712
+ to {
3713
+ opacity: 1;
3714
+ transform: translate(-50%, -50%) scale(1);
3715
+ }
3716
+ }
3717
+
3718
+ @keyframes zvk-ui-alert-dialog-content-exit {
3719
+ from {
3720
+ opacity: 1;
3721
+ transform: translate(-50%, -50%) scale(1);
3722
+ }
3723
+
3724
+ to {
3725
+ opacity: 0;
3726
+ transform: translate(-50%, -50%) scale(0.98);
3727
+ }
3728
+ }
3729
+
3730
+ @media (prefers-reduced-motion: reduce) {
3731
+ .zvk-ui-alert-dialog__overlay,
3732
+ .zvk-ui-alert-dialog__content {
3733
+ animation: none;
3734
+ }
3735
+
3736
+ .zvk-ui-alert-dialog__overlay[data-state="closed"],
3737
+ .zvk-ui-alert-dialog__content[data-state="closed"] {
3738
+ opacity: 0;
3739
+ }
3740
+
3741
+ .zvk-ui-alert-dialog__content {
3742
+ transform: translate(-50%, -50%);
3743
+ }
3744
+ }
2818
3745
  }
2819
3746
 
2820
3747
 
@@ -2825,25 +3752,34 @@
2825
3752
  }
2826
3753
 
2827
3754
  .zvk-ui-sheet__overlay {
2828
- background: color-mix(in srgb, var(--zvk-ui-color-foreground) 24%, transparent);
3755
+ background: var(--zvk-ui-material-overlay-background);
2829
3756
  inset: 0;
2830
3757
  position: fixed;
2831
- z-index: 100;
3758
+ z-index: var(--zvk-ui-z-index-overlay);
3759
+ }
3760
+
3761
+ .zvk-ui-sheet__overlay[data-state="open"] {
3762
+ animation: zvk-ui-sheet-overlay-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-enter) both;
3763
+ }
3764
+
3765
+ .zvk-ui-sheet__overlay[data-state="closed"] {
3766
+ animation: zvk-ui-sheet-overlay-exit var(--zvk-ui-duration-fast) var(--zvk-ui-ease-exit) both;
2832
3767
  }
2833
3768
 
2834
3769
  .zvk-ui-sheet__content {
2835
- background: var(--zvk-ui-color-surface);
3770
+ backdrop-filter: var(--zvk-ui-sheet-content-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
3771
+ background: var(--zvk-ui-color-surface-raised);
2836
3772
  border: 1px solid var(--zvk-ui-color-border);
2837
- box-shadow: var(--zvk-ui-shadow-md);
3773
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
2838
3774
  color: var(--zvk-ui-color-foreground);
2839
3775
  display: flex;
2840
3776
  flex-direction: column;
2841
- font-family: var(--zvk-ui-font-family-sans);
3777
+ font-family: var(--zvk-ui-font-family-primary);
2842
3778
  gap: var(--zvk-ui-space-4);
2843
3779
  line-height: var(--zvk-ui-line-height-normal);
2844
3780
  padding: var(--zvk-ui-space-5);
2845
3781
  position: fixed;
2846
- z-index: 101;
3782
+ z-index: var(--zvk-ui-z-index-modal);
2847
3783
  }
2848
3784
 
2849
3785
  .zvk-ui-sheet__content[data-side="right"],
@@ -2881,6 +3817,38 @@
2881
3817
  bottom: 0;
2882
3818
  }
2883
3819
 
3820
+ .zvk-ui-sheet__content[data-state="open"][data-side="right"] {
3821
+ animation: zvk-ui-sheet-content-enter-right var(--zvk-ui-duration-slow) var(--zvk-ui-ease-emphasized) both;
3822
+ }
3823
+
3824
+ .zvk-ui-sheet__content[data-state="closed"][data-side="right"] {
3825
+ animation: zvk-ui-sheet-content-exit-right var(--zvk-ui-duration-slow) var(--zvk-ui-ease-exit) both;
3826
+ }
3827
+
3828
+ .zvk-ui-sheet__content[data-state="open"][data-side="left"] {
3829
+ animation: zvk-ui-sheet-content-enter-left var(--zvk-ui-duration-slow) var(--zvk-ui-ease-emphasized) both;
3830
+ }
3831
+
3832
+ .zvk-ui-sheet__content[data-state="closed"][data-side="left"] {
3833
+ animation: zvk-ui-sheet-content-exit-left var(--zvk-ui-duration-slow) var(--zvk-ui-ease-exit) both;
3834
+ }
3835
+
3836
+ .zvk-ui-sheet__content[data-state="open"][data-side="top"] {
3837
+ animation: zvk-ui-sheet-content-enter-top var(--zvk-ui-duration-slow) var(--zvk-ui-ease-emphasized) both;
3838
+ }
3839
+
3840
+ .zvk-ui-sheet__content[data-state="closed"][data-side="top"] {
3841
+ animation: zvk-ui-sheet-content-exit-top var(--zvk-ui-duration-slow) var(--zvk-ui-ease-exit) both;
3842
+ }
3843
+
3844
+ .zvk-ui-sheet__content[data-state="open"][data-side="bottom"] {
3845
+ animation: zvk-ui-sheet-content-enter-bottom var(--zvk-ui-duration-slow) var(--zvk-ui-ease-emphasized) both;
3846
+ }
3847
+
3848
+ .zvk-ui-sheet__content[data-state="closed"][data-side="bottom"] {
3849
+ animation: zvk-ui-sheet-content-exit-bottom var(--zvk-ui-duration-slow) var(--zvk-ui-ease-exit) both;
3850
+ }
3851
+
2884
3852
  .zvk-ui-sheet__header {
2885
3853
  display: grid;
2886
3854
  gap: var(--zvk-ui-space-2);
@@ -2888,7 +3856,7 @@
2888
3856
 
2889
3857
  .zvk-ui-sheet__title {
2890
3858
  color: var(--zvk-ui-color-foreground);
2891
- font-family: var(--zvk-ui-font-family-sans);
3859
+ font-family: var(--zvk-ui-font-family-secondary);
2892
3860
  font-size: var(--zvk-ui-font-size-lg);
2893
3861
  font-weight: 700;
2894
3862
  line-height: var(--zvk-ui-line-height-tight);
@@ -2913,14 +3881,15 @@
2913
3881
  .zvk-ui-sheet__close {
2914
3882
  align-items: center;
2915
3883
  appearance: none;
3884
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
2916
3885
  background: var(--zvk-ui-control-background);
2917
3886
  border: 1px solid var(--zvk-ui-color-border);
2918
3887
  border-radius: var(--zvk-ui-radius-md);
2919
- box-shadow: var(--zvk-ui-shadow-xs);
3888
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs);
2920
3889
  color: var(--zvk-ui-color-foreground);
2921
3890
  cursor: pointer;
2922
3891
  display: inline-flex;
2923
- font-family: var(--zvk-ui-font-family-sans);
3892
+ font-family: var(--zvk-ui-font-family-primary);
2924
3893
  font-size: var(--zvk-ui-font-size-sm);
2925
3894
  font-weight: 600;
2926
3895
  justify-content: center;
@@ -2947,14 +3916,146 @@
2947
3916
 
2948
3917
  .zvk-ui-sheet__trigger:focus-visible,
2949
3918
  .zvk-ui-sheet__close:focus-visible {
2950
- box-shadow: var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
3919
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
2951
3920
  outline: 0;
2952
3921
  }
2953
3922
 
2954
- .zvk-ui-sheet__trigger:disabled,
2955
- .zvk-ui-sheet__close:disabled {
2956
- cursor: not-allowed;
2957
- opacity: var(--zvk-ui-opacity-disabled);
3923
+ .zvk-ui-sheet__trigger:disabled,
3924
+ .zvk-ui-sheet__close:disabled {
3925
+ cursor: not-allowed;
3926
+ opacity: var(--zvk-ui-opacity-disabled);
3927
+ }
3928
+
3929
+ @keyframes zvk-ui-sheet-overlay-enter {
3930
+ from {
3931
+ opacity: 0;
3932
+ }
3933
+
3934
+ to {
3935
+ opacity: 1;
3936
+ }
3937
+ }
3938
+
3939
+ @keyframes zvk-ui-sheet-overlay-exit {
3940
+ from {
3941
+ opacity: 1;
3942
+ }
3943
+
3944
+ to {
3945
+ opacity: 0;
3946
+ }
3947
+ }
3948
+
3949
+ @keyframes zvk-ui-sheet-content-enter-right {
3950
+ from {
3951
+ opacity: 0;
3952
+ transform: translateX(100%);
3953
+ }
3954
+
3955
+ to {
3956
+ opacity: 1;
3957
+ transform: translateX(0);
3958
+ }
3959
+ }
3960
+
3961
+ @keyframes zvk-ui-sheet-content-exit-right {
3962
+ from {
3963
+ opacity: 1;
3964
+ transform: translateX(0);
3965
+ }
3966
+
3967
+ to {
3968
+ opacity: 0;
3969
+ transform: translateX(100%);
3970
+ }
3971
+ }
3972
+
3973
+ @keyframes zvk-ui-sheet-content-enter-left {
3974
+ from {
3975
+ opacity: 0;
3976
+ transform: translateX(-100%);
3977
+ }
3978
+
3979
+ to {
3980
+ opacity: 1;
3981
+ transform: translateX(0);
3982
+ }
3983
+ }
3984
+
3985
+ @keyframes zvk-ui-sheet-content-exit-left {
3986
+ from {
3987
+ opacity: 1;
3988
+ transform: translateX(0);
3989
+ }
3990
+
3991
+ to {
3992
+ opacity: 0;
3993
+ transform: translateX(-100%);
3994
+ }
3995
+ }
3996
+
3997
+ @keyframes zvk-ui-sheet-content-enter-top {
3998
+ from {
3999
+ opacity: 0;
4000
+ transform: translateY(-100%);
4001
+ }
4002
+
4003
+ to {
4004
+ opacity: 1;
4005
+ transform: translateY(0);
4006
+ }
4007
+ }
4008
+
4009
+ @keyframes zvk-ui-sheet-content-exit-top {
4010
+ from {
4011
+ opacity: 1;
4012
+ transform: translateY(0);
4013
+ }
4014
+
4015
+ to {
4016
+ opacity: 0;
4017
+ transform: translateY(-100%);
4018
+ }
4019
+ }
4020
+
4021
+ @keyframes zvk-ui-sheet-content-enter-bottom {
4022
+ from {
4023
+ opacity: 0;
4024
+ transform: translateY(100%);
4025
+ }
4026
+
4027
+ to {
4028
+ opacity: 1;
4029
+ transform: translateY(0);
4030
+ }
4031
+ }
4032
+
4033
+ @keyframes zvk-ui-sheet-content-exit-bottom {
4034
+ from {
4035
+ opacity: 1;
4036
+ transform: translateY(0);
4037
+ }
4038
+
4039
+ to {
4040
+ opacity: 0;
4041
+ transform: translateY(100%);
4042
+ }
4043
+ }
4044
+
4045
+ @media (prefers-reduced-motion: reduce) {
4046
+ .zvk-ui-sheet__overlay,
4047
+ .zvk-ui-sheet__content {
4048
+ animation: none;
4049
+ }
4050
+
4051
+ .zvk-ui-sheet__overlay[data-state="closed"],
4052
+ .zvk-ui-sheet__content[data-state="closed"] {
4053
+ opacity: 0;
4054
+ }
4055
+
4056
+ .zvk-ui-sheet__content {
4057
+ transform: none;
4058
+ }
2958
4059
  }
2959
4060
  }
2960
4061
 
@@ -2969,14 +4070,15 @@
2969
4070
  :where(.zvk-ui-popover__trigger) {
2970
4071
  align-items: center;
2971
4072
  appearance: none;
4073
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
2972
4074
  background: var(--zvk-ui-control-background);
2973
4075
  border: 1px solid var(--zvk-ui-color-border);
2974
4076
  border-radius: var(--zvk-ui-radius-md);
2975
- box-shadow: var(--zvk-ui-shadow-xs);
4077
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs);
2976
4078
  color: var(--zvk-ui-color-foreground);
2977
4079
  cursor: pointer;
2978
4080
  display: inline-flex;
2979
- font-family: var(--zvk-ui-font-family-sans);
4081
+ font-family: var(--zvk-ui-font-family-primary);
2980
4082
  font-size: var(--zvk-ui-font-size-sm);
2981
4083
  font-weight: 600;
2982
4084
  justify-content: center;
@@ -2999,26 +4101,59 @@
2999
4101
  }
3000
4102
 
3001
4103
  :where(.zvk-ui-popover__trigger:focus-visible) {
3002
- box-shadow: var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
4104
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
3003
4105
  outline: 0;
3004
4106
  }
3005
4107
 
3006
4108
  :where(.zvk-ui-popover__content) {
4109
+ --zvk-ui-popover-motion-x: 0;
4110
+ --zvk-ui-popover-motion-y: -0.25rem;
4111
+ backdrop-filter: var(--zvk-ui-popover-content-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
3007
4112
  background: var(--zvk-ui-color-surface);
3008
4113
  border: 1px solid var(--zvk-ui-color-border);
3009
4114
  border-radius: var(--zvk-ui-radius-md);
3010
- box-shadow: var(--zvk-ui-shadow-md);
4115
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
4116
+ color: var(--zvk-ui-color-foreground);
4117
+ font-family: var(--zvk-ui-font-family-primary);
4118
+ font-size: var(--zvk-ui-font-size-sm);
3011
4119
  padding: var(--zvk-ui-space-3);
3012
4120
  position: absolute;
3013
4121
  max-width: var(--zvk-ui-floating-available-width);
3014
4122
  max-height: var(--zvk-ui-floating-available-height);
3015
4123
  transform-origin: var(--zvk-ui-popover-transform-origin);
3016
- z-index: 1;
4124
+ z-index: var(--zvk-ui-z-popover, var(--zvk-ui-z-index-popover));
3017
4125
  pointer-events: auto;
3018
4126
  }
3019
4127
 
4128
+ :where(.zvk-ui-popover__content[data-side="top"]) {
4129
+ --zvk-ui-popover-motion-y: 0.25rem;
4130
+ }
4131
+
4132
+ :where(.zvk-ui-popover__content[data-side="bottom"]) {
4133
+ --zvk-ui-popover-motion-y: -0.25rem;
4134
+ }
4135
+
4136
+ :where(.zvk-ui-popover__content[data-side="left"]) {
4137
+ --zvk-ui-popover-motion-x: 0.25rem;
4138
+ --zvk-ui-popover-motion-y: 0;
4139
+ }
4140
+
4141
+ :where(.zvk-ui-popover__content[data-side="right"]) {
4142
+ --zvk-ui-popover-motion-x: -0.25rem;
4143
+ --zvk-ui-popover-motion-y: 0;
4144
+ }
4145
+
3020
4146
  :where(.zvk-ui-popover__content[data-state="open"]) {
3021
- animation: zvk-ui-popover-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-standard);
4147
+ animation: zvk-ui-popover-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-enter);
4148
+ }
4149
+
4150
+ :where(.zvk-ui-popover__content[data-state="closed"]:not([hidden])) {
4151
+ animation: zvk-ui-popover-exit var(--zvk-ui-duration-fast) var(--zvk-ui-ease-exit);
4152
+ pointer-events: none;
4153
+ }
4154
+
4155
+ :where(.zvk-ui-popover__content[aria-hidden="true"]) {
4156
+ pointer-events: none;
3022
4157
  }
3023
4158
 
3024
4159
  :where(.zvk-ui-popover__content[hidden]) {
@@ -3028,17 +4163,29 @@
3028
4163
  @keyframes zvk-ui-popover-enter {
3029
4164
  from {
3030
4165
  opacity: 0;
3031
- transform: scale(0.96) translateY(-0.125rem);
4166
+ transform: translate(var(--zvk-ui-popover-motion-x), var(--zvk-ui-popover-motion-y)) scale(0.96);
3032
4167
  }
3033
4168
 
3034
4169
  to {
3035
4170
  opacity: 1;
3036
- transform: scale(1) translateY(0);
4171
+ transform: translate(0, 0) scale(1);
4172
+ }
4173
+ }
4174
+
4175
+ @keyframes zvk-ui-popover-exit {
4176
+ from {
4177
+ opacity: 1;
4178
+ transform: translate(0, 0) scale(1);
4179
+ }
4180
+
4181
+ to {
4182
+ opacity: 0;
4183
+ transform: translate(var(--zvk-ui-popover-motion-x), var(--zvk-ui-popover-motion-y)) scale(0.96);
3037
4184
  }
3038
4185
  }
3039
4186
 
3040
4187
  @media (prefers-reduced-motion: reduce) {
3041
- :where(.zvk-ui-popover__content[data-state="open"]) {
4188
+ :where(.zvk-ui-popover__content[data-state="open"], .zvk-ui-popover__content[data-state="closed"]:not([hidden])) {
3042
4189
  animation: none;
3043
4190
  }
3044
4191
  }
@@ -3057,13 +4204,15 @@
3057
4204
  }
3058
4205
 
3059
4206
  :where(.zvk-ui-hover-card__content) {
3060
- animation: zvk-ui-hover-card-enter var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
4207
+ --zvk-ui-hover-card-motion-x: 0;
4208
+ --zvk-ui-hover-card-motion-y: -0.1875rem;
4209
+ backdrop-filter: var(--zvk-ui-hover-card-content-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
3061
4210
  background: var(--zvk-ui-color-surface-raised);
3062
4211
  border: 1px solid var(--zvk-ui-color-border);
3063
4212
  border-radius: var(--zvk-ui-radius-md);
3064
- box-shadow: var(--zvk-ui-shadow-md);
4213
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
3065
4214
  color: var(--zvk-ui-color-foreground);
3066
- font-family: var(--zvk-ui-font-family-sans);
4215
+ font-family: var(--zvk-ui-font-family-primary);
3067
4216
  font-size: var(--zvk-ui-font-size-sm);
3068
4217
  max-width: min(20rem, var(--zvk-ui-floating-available-width));
3069
4218
  padding: var(--zvk-ui-space-3);
@@ -3072,13 +4221,40 @@
3072
4221
  z-index: var(--zvk-ui-z-index-popover, var(--zvk-ui-z-index-overlay));
3073
4222
  }
3074
4223
 
4224
+ :where(.zvk-ui-hover-card__content[data-side="top"]) {
4225
+ --zvk-ui-hover-card-motion-y: 0.1875rem;
4226
+ }
4227
+
4228
+ :where(.zvk-ui-hover-card__content[data-side="bottom"]) {
4229
+ --zvk-ui-hover-card-motion-y: -0.1875rem;
4230
+ }
4231
+
4232
+ :where(.zvk-ui-hover-card__content[data-side="left"]) {
4233
+ --zvk-ui-hover-card-motion-x: 0.1875rem;
4234
+ --zvk-ui-hover-card-motion-y: 0;
4235
+ }
4236
+
4237
+ :where(.zvk-ui-hover-card__content[data-side="right"]) {
4238
+ --zvk-ui-hover-card-motion-x: -0.1875rem;
4239
+ --zvk-ui-hover-card-motion-y: 0;
4240
+ }
4241
+
3075
4242
  :where(.zvk-ui-hover-card__content:focus-visible) {
3076
- box-shadow: var(--zvk-ui-shadow-md), var(--zvk-ui-focus-ring);
4243
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow), var(--zvk-ui-focus-ring);
3077
4244
  outline: 0;
3078
4245
  }
3079
4246
 
3080
- :where(.zvk-ui-hover-card__content[data-state="closed"]) {
3081
- animation: none;
4247
+ :where(.zvk-ui-hover-card__content[data-state="open"]) {
4248
+ animation: zvk-ui-hover-card-enter var(--zvk-ui-duration-fast) var(--zvk-ui-ease-enter);
4249
+ }
4250
+
4251
+ :where(.zvk-ui-hover-card__content[data-state="closed"]:not([hidden])) {
4252
+ animation: zvk-ui-hover-card-exit var(--zvk-ui-duration-fast) var(--zvk-ui-ease-exit);
4253
+ pointer-events: none;
4254
+ }
4255
+
4256
+ :where(.zvk-ui-hover-card__content[aria-hidden="true"]) {
4257
+ pointer-events: none;
3082
4258
  }
3083
4259
 
3084
4260
  :where(.zvk-ui-hover-card__content[hidden]) {
@@ -3088,17 +4264,29 @@
3088
4264
  @keyframes zvk-ui-hover-card-enter {
3089
4265
  from {
3090
4266
  opacity: 0;
3091
- transform: scale(0.98) translateY(0.125rem);
4267
+ transform: translate(var(--zvk-ui-hover-card-motion-x), var(--zvk-ui-hover-card-motion-y)) scale(0.98);
3092
4268
  }
3093
4269
 
3094
4270
  to {
3095
4271
  opacity: 1;
3096
- transform: scale(1) translateY(0);
4272
+ transform: translate(0, 0) scale(1);
4273
+ }
4274
+ }
4275
+
4276
+ @keyframes zvk-ui-hover-card-exit {
4277
+ from {
4278
+ opacity: 1;
4279
+ transform: translate(0, 0) scale(1);
4280
+ }
4281
+
4282
+ to {
4283
+ opacity: 0;
4284
+ transform: translate(var(--zvk-ui-hover-card-motion-x), var(--zvk-ui-hover-card-motion-y)) scale(0.98);
3097
4285
  }
3098
4286
  }
3099
4287
 
3100
4288
  @media (prefers-reduced-motion: reduce) {
3101
- :where(.zvk-ui-hover-card__content) {
4289
+ :where(.zvk-ui-hover-card__content[data-state="open"], .zvk-ui-hover-card__content[data-state="closed"]:not([hidden])) {
3102
4290
  animation: none;
3103
4291
  }
3104
4292
  }
@@ -3108,12 +4296,14 @@
3108
4296
  /* src/components/tooltip/tooltip.css */
3109
4297
  @layer zvk-ui-components {
3110
4298
  :where(.zvk-ui-tooltip) {
3111
- animation: zvk-ui-tooltip-enter var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
4299
+ --zvk-ui-tooltip-motion-x: 0;
4300
+ --zvk-ui-tooltip-motion-y: -0.125rem;
4301
+ backdrop-filter: var(--zvk-ui-tooltip-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
3112
4302
  background: var(--zvk-ui-color-surface-raised);
3113
4303
  border: 1px solid var(--zvk-ui-color-border);
3114
4304
  border-radius: var(--zvk-ui-radius-md);
3115
4305
  color: var(--zvk-ui-color-foreground);
3116
- font-family: var(--zvk-ui-font-family-sans);
4306
+ font-family: var(--zvk-ui-font-family-primary);
3117
4307
  font-size: var(--zvk-ui-font-size-sm);
3118
4308
  max-width: min(16rem, var(--zvk-ui-floating-available-width));
3119
4309
  padding: var(--zvk-ui-space-2) var(--zvk-ui-space-3);
@@ -3123,20 +4313,62 @@
3123
4313
  z-index: var(--zvk-ui-z-index-tooltip, var(--zvk-ui-z-index-overlay));
3124
4314
  }
3125
4315
 
4316
+ :where(.zvk-ui-tooltip[data-side="top"]) {
4317
+ --zvk-ui-tooltip-motion-y: 0.125rem;
4318
+ }
4319
+
4320
+ :where(.zvk-ui-tooltip[data-side="bottom"]) {
4321
+ --zvk-ui-tooltip-motion-y: -0.125rem;
4322
+ }
4323
+
4324
+ :where(.zvk-ui-tooltip[data-side="left"]) {
4325
+ --zvk-ui-tooltip-motion-x: 0.125rem;
4326
+ --zvk-ui-tooltip-motion-y: 0;
4327
+ }
4328
+
4329
+ :where(.zvk-ui-tooltip[data-side="right"]) {
4330
+ --zvk-ui-tooltip-motion-x: -0.125rem;
4331
+ --zvk-ui-tooltip-motion-y: 0;
4332
+ }
4333
+
4334
+ :where(.zvk-ui-tooltip[data-state="open"]) {
4335
+ animation: zvk-ui-tooltip-enter var(--zvk-ui-duration-fast) var(--zvk-ui-ease-enter);
4336
+ }
4337
+
4338
+ :where(.zvk-ui-tooltip[data-state="closed"]:not([hidden])) {
4339
+ animation: zvk-ui-tooltip-exit var(--zvk-ui-duration-instant) var(--zvk-ui-ease-exit);
4340
+ }
4341
+
4342
+ :where(.zvk-ui-tooltip[hidden]) {
4343
+ display: none;
4344
+ }
4345
+
3126
4346
  @keyframes zvk-ui-tooltip-enter {
3127
4347
  from {
3128
4348
  opacity: 0;
3129
- transform: scale(0.96) translateY(0.125rem);
4349
+ transform: translate(var(--zvk-ui-tooltip-motion-x), var(--zvk-ui-tooltip-motion-y));
3130
4350
  }
3131
4351
 
3132
4352
  to {
3133
4353
  opacity: 1;
3134
- transform: scale(1) translateY(0);
4354
+ transform: translate(0, 0);
4355
+ }
4356
+ }
4357
+
4358
+ @keyframes zvk-ui-tooltip-exit {
4359
+ from {
4360
+ opacity: 1;
4361
+ transform: translate(0, 0);
4362
+ }
4363
+
4364
+ to {
4365
+ opacity: 0;
4366
+ transform: translate(var(--zvk-ui-tooltip-motion-x), var(--zvk-ui-tooltip-motion-y));
3135
4367
  }
3136
4368
  }
3137
4369
 
3138
4370
  @media (prefers-reduced-motion: reduce) {
3139
- :where(.zvk-ui-tooltip) {
4371
+ :where(.zvk-ui-tooltip[data-state="open"], .zvk-ui-tooltip[data-state="closed"]:not([hidden])) {
3140
4372
  animation: none;
3141
4373
  }
3142
4374
  }
@@ -3148,16 +4380,18 @@
3148
4380
  :where(.zvk-ui-dropdown-menu__trigger) {
3149
4381
  align-items: center;
3150
4382
  appearance: none;
4383
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
3151
4384
  background: var(--zvk-ui-control-background);
3152
4385
  border: 1px solid var(--zvk-ui-color-border);
3153
4386
  border-radius: var(--zvk-ui-radius-md);
3154
- box-shadow: var(--zvk-ui-shadow-xs);
4387
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs);
3155
4388
  color: var(--zvk-ui-color-foreground);
3156
4389
  cursor: pointer;
3157
4390
  display: inline-flex;
3158
- font-family: var(--zvk-ui-font-family-sans);
4391
+ font-family: var(--zvk-ui-font-family-primary);
3159
4392
  font-size: var(--zvk-ui-font-size-sm);
3160
4393
  font-weight: 600;
4394
+ gap: var(--zvk-ui-control-gap);
3161
4395
  justify-content: center;
3162
4396
  line-height: 1;
3163
4397
  min-block-size: var(--zvk-ui-control-height-md);
@@ -3167,6 +4401,33 @@
3167
4401
  user-select: none;
3168
4402
  }
3169
4403
 
4404
+ :where(.zvk-ui-dropdown-menu__trigger-label) {
4405
+ min-width: 0;
4406
+ }
4407
+
4408
+ :where(.zvk-ui-dropdown-menu__trigger-indicator) {
4409
+ color: var(--zvk-ui-color-muted-foreground);
4410
+ display: inline-grid;
4411
+ flex: 0 0 auto;
4412
+ inline-size: 1rem;
4413
+ place-items: center;
4414
+ transition: color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), transform var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
4415
+ }
4416
+
4417
+ .zvk-ui-dropdown-menu__trigger-indicator::before {
4418
+ block-size: 0.45rem;
4419
+ border-block-end: 1.5px solid currentColor;
4420
+ border-inline-end: 1.5px solid currentColor;
4421
+ content: "";
4422
+ inline-size: 0.45rem;
4423
+ transform: rotate(45deg) translate(-0.1rem, -0.1rem);
4424
+ }
4425
+
4426
+ :where(.zvk-ui-dropdown-menu__trigger[data-state="open"] .zvk-ui-dropdown-menu__trigger-indicator) {
4427
+ color: var(--zvk-ui-color-foreground);
4428
+ transform: rotate(180deg);
4429
+ }
4430
+
3170
4431
  :where(.zvk-ui-dropdown-menu__trigger:hover:not(:disabled)) {
3171
4432
  background: var(--zvk-ui-control-hover);
3172
4433
  border-color: var(--zvk-ui-color-border-strong);
@@ -3178,23 +4439,63 @@
3178
4439
  }
3179
4440
 
3180
4441
  :where(.zvk-ui-dropdown-menu__trigger:focus-visible) {
3181
- box-shadow: var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
4442
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-shadow-xs), var(--zvk-ui-focus-ring);
3182
4443
  outline: 0;
3183
4444
  }
3184
4445
 
3185
4446
  :where(.zvk-ui-dropdown-menu__content) {
3186
4447
  --zvk-ui-dropdown-menu-min-width: min-content;
4448
+ --zvk-ui-dropdown-menu-motion-x: 0;
4449
+ --zvk-ui-dropdown-menu-motion-y: -0.25rem;
4450
+ backdrop-filter: var(--zvk-ui-dropdown-menu-content-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
3187
4451
  background: var(--zvk-ui-color-surface-raised);
3188
4452
  border: 1px solid var(--zvk-ui-color-border);
3189
4453
  border-radius: var(--zvk-ui-radius-md);
3190
- box-shadow: var(--zvk-ui-shadow-md);
4454
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
3191
4455
  color: var(--zvk-ui-color-foreground);
4456
+ font-family: var(--zvk-ui-font-family-primary);
4457
+ font-size: var(--zvk-ui-font-size-sm);
3192
4458
  min-width: var(--zvk-ui-dropdown-menu-min-width);
3193
4459
  outline: none;
3194
4460
  padding: var(--zvk-ui-space-1);
3195
4461
  position: absolute;
3196
4462
  }
3197
4463
 
4464
+ :where(.zvk-ui-dropdown-menu__content[data-side="top"]) {
4465
+ --zvk-ui-dropdown-menu-motion-y: 0.25rem;
4466
+ }
4467
+
4468
+ :where(.zvk-ui-dropdown-menu__content[data-side="bottom"]) {
4469
+ --zvk-ui-dropdown-menu-motion-y: -0.25rem;
4470
+ }
4471
+
4472
+ :where(.zvk-ui-dropdown-menu__content[data-side="left"]) {
4473
+ --zvk-ui-dropdown-menu-motion-x: 0.25rem;
4474
+ --zvk-ui-dropdown-menu-motion-y: 0;
4475
+ }
4476
+
4477
+ :where(.zvk-ui-dropdown-menu__content[data-side="right"]) {
4478
+ --zvk-ui-dropdown-menu-motion-x: -0.25rem;
4479
+ --zvk-ui-dropdown-menu-motion-y: 0;
4480
+ }
4481
+
4482
+ :where(.zvk-ui-dropdown-menu__content[data-state="open"]) {
4483
+ animation: zvk-ui-dropdown-menu-content-enter var(--zvk-ui-duration-fast) var(--zvk-ui-ease-enter);
4484
+ }
4485
+
4486
+ :where(.zvk-ui-dropdown-menu__content[data-state="closed"]:not([hidden])) {
4487
+ animation: zvk-ui-dropdown-menu-content-exit var(--zvk-ui-duration-fast) var(--zvk-ui-ease-exit);
4488
+ pointer-events: none;
4489
+ }
4490
+
4491
+ :where(.zvk-ui-dropdown-menu__content[aria-hidden="true"]) {
4492
+ pointer-events: none;
4493
+ }
4494
+
4495
+ :where(.zvk-ui-dropdown-menu__content[hidden]) {
4496
+ display: none;
4497
+ }
4498
+
3198
4499
  :where(.zvk-ui-dropdown-menu__item) {
3199
4500
  all: unset;
3200
4501
  align-items: center;
@@ -3202,7 +4503,7 @@
3202
4503
  cursor: default;
3203
4504
  display: flex;
3204
4505
  gap: var(--zvk-ui-space-2);
3205
- justify-content: space-between;
4506
+ justify-content: flex-start;
3206
4507
  padding: var(--zvk-ui-space-2) var(--zvk-ui-space-3);
3207
4508
  text-align: left;
3208
4509
  user-select: none;
@@ -3227,6 +4528,7 @@
3227
4528
 
3228
4529
  :where(.zvk-ui-dropdown-menu__label) {
3229
4530
  color: var(--zvk-ui-color-muted-foreground);
4531
+ font-family: var(--zvk-ui-font-family-secondary);
3230
4532
  font-size: var(--zvk-ui-font-size-xs);
3231
4533
  font-weight: 600;
3232
4534
  padding: var(--zvk-ui-space-1) var(--zvk-ui-space-3);
@@ -3256,6 +4558,40 @@
3256
4558
  display: grid;
3257
4559
  gap: var(--zvk-ui-space-1);
3258
4560
  }
4561
+
4562
+ @keyframes zvk-ui-dropdown-menu-content-enter {
4563
+ from {
4564
+ opacity: 0;
4565
+ transform: translate(var(--zvk-ui-dropdown-menu-motion-x), var(--zvk-ui-dropdown-menu-motion-y)) scale(0.98);
4566
+ }
4567
+
4568
+ to {
4569
+ opacity: 1;
4570
+ transform: translate(0, 0) scale(1);
4571
+ }
4572
+ }
4573
+
4574
+ @keyframes zvk-ui-dropdown-menu-content-exit {
4575
+ from {
4576
+ opacity: 1;
4577
+ transform: translate(0, 0) scale(1);
4578
+ }
4579
+
4580
+ to {
4581
+ opacity: 0;
4582
+ transform: translate(var(--zvk-ui-dropdown-menu-motion-x), var(--zvk-ui-dropdown-menu-motion-y)) scale(0.98);
4583
+ }
4584
+ }
4585
+
4586
+ @media (prefers-reduced-motion: reduce) {
4587
+ :where(.zvk-ui-dropdown-menu__trigger-indicator) {
4588
+ transition: none;
4589
+ }
4590
+
4591
+ :where(.zvk-ui-dropdown-menu__content[data-state="open"], .zvk-ui-dropdown-menu__content[data-state="closed"]:not([hidden])) {
4592
+ animation: none;
4593
+ }
4594
+ }
3259
4595
  }
3260
4596
 
3261
4597
 
@@ -3323,7 +4659,7 @@
3323
4659
  background: var(--zvk-ui-color-surface);
3324
4660
  color: var(--zvk-ui-color-foreground);
3325
4661
  display: grid;
3326
- font-family: var(--zvk-ui-font-family-sans);
4662
+ font-family: var(--zvk-ui-font-family-primary);
3327
4663
  gap: var(--zvk-ui-space-2);
3328
4664
  line-height: var(--zvk-ui-line-height-normal);
3329
4665
  }
@@ -3333,11 +4669,11 @@
3333
4669
  border: 1px solid var(--zvk-ui-color-border);
3334
4670
  border-radius: var(--zvk-ui-radius-md);
3335
4671
  color: var(--zvk-ui-color-foreground);
3336
- font-family: var(--zvk-ui-font-family-sans);
4672
+ font-family: var(--zvk-ui-font-family-primary);
3337
4673
  font-size: var(--zvk-ui-font-size-sm);
3338
4674
  line-height: var(--zvk-ui-line-height-tight);
3339
- min-block-size: 2.5rem;
3340
- padding: 0 var(--zvk-ui-space-3);
4675
+ min-block-size: var(--zvk-ui-control-height-md);
4676
+ padding: 0 var(--zvk-ui-control-padding-x);
3341
4677
  inline-size: 100%;
3342
4678
  }
3343
4679
 
@@ -3355,6 +4691,7 @@
3355
4691
  }
3356
4692
 
3357
4693
  .zvk-ui-command__empty,
4694
+ .zvk-ui-command__loading,
3358
4695
  .zvk-ui-command__group-heading {
3359
4696
  color: var(--zvk-ui-color-muted-foreground);
3360
4697
  font-size: var(--zvk-ui-font-size-xs);
@@ -3397,7 +4734,7 @@
3397
4734
  }
3398
4735
 
3399
4736
  .zvk-ui-command-dialog {
3400
- font-family: var(--zvk-ui-font-family-sans);
4737
+ font-family: var(--zvk-ui-font-family-primary);
3401
4738
  padding: var(--zvk-ui-space-4);
3402
4739
  }
3403
4740
 
@@ -3424,6 +4761,7 @@
3424
4761
 
3425
4762
  .zvk-ui-combobox__label {
3426
4763
  color: var(--zvk-ui-color-foreground);
4764
+ font-family: var(--zvk-ui-font-family-secondary);
3427
4765
  font-size: var(--zvk-ui-font-size-sm);
3428
4766
  font-weight: 600;
3429
4767
  }
@@ -3436,14 +4774,15 @@
3436
4774
  }
3437
4775
 
3438
4776
  .zvk-ui-combobox__input {
4777
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
3439
4778
  background: var(--zvk-ui-control-background);
3440
4779
  border: 1px solid var(--zvk-ui-control-border);
3441
4780
  border-radius: var(--zvk-ui-radius-md);
3442
4781
  color: var(--zvk-ui-color-foreground);
3443
4782
  font: inherit;
3444
4783
  inline-size: 100%;
3445
- min-block-size: 2.5rem;
3446
- padding: 0 var(--zvk-ui-space-3);
4784
+ min-block-size: var(--zvk-ui-control-height-md);
4785
+ padding: 0 var(--zvk-ui-control-padding-x);
3447
4786
  }
3448
4787
 
3449
4788
  .zvk-ui-combobox__input:hover:not(:disabled) {
@@ -3451,11 +4790,11 @@
3451
4790
  }
3452
4791
 
3453
4792
  .zvk-ui-combobox__input[data-size="sm"] {
3454
- min-block-size: 2rem;
4793
+ min-block-size: var(--zvk-ui-control-height-sm);
3455
4794
  }
3456
4795
 
3457
4796
  .zvk-ui-combobox__input[data-size="lg"] {
3458
- min-block-size: 3rem;
4797
+ min-block-size: var(--zvk-ui-control-height-lg);
3459
4798
  }
3460
4799
 
3461
4800
  .zvk-ui-combobox__input:focus-visible {
@@ -3483,11 +4822,15 @@
3483
4822
  }
3484
4823
 
3485
4824
  .zvk-ui-combobox__popup {
4825
+ --zvk-ui-combobox-motion-x: 0;
4826
+ --zvk-ui-combobox-motion-y: -0.1875rem;
4827
+ backdrop-filter: var(--zvk-ui-combobox-popup-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
3486
4828
  background: var(--zvk-ui-color-surface);
3487
4829
  border: 1px solid var(--zvk-ui-card-border);
3488
4830
  border-radius: var(--zvk-ui-radius-md);
3489
- box-shadow: var(--zvk-ui-shadow-md);
4831
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
3490
4832
  display: grid;
4833
+ font-family: var(--zvk-ui-font-family-primary);
3491
4834
  gap: var(--zvk-ui-space-1);
3492
4835
  max-block-size: min(16rem, var(--zvk-ui-floating-available-height));
3493
4836
  overflow: auto;
@@ -3495,6 +4838,28 @@
3495
4838
  z-index: var(--zvk-ui-z-popover);
3496
4839
  }
3497
4840
 
4841
+ .zvk-ui-combobox__popup[data-side="top"] {
4842
+ --zvk-ui-combobox-motion-y: 0.1875rem;
4843
+ }
4844
+
4845
+ .zvk-ui-combobox__popup[data-side="bottom"] {
4846
+ --zvk-ui-combobox-motion-y: -0.1875rem;
4847
+ }
4848
+
4849
+ .zvk-ui-combobox__popup[data-side="left"] {
4850
+ --zvk-ui-combobox-motion-x: 0.1875rem;
4851
+ --zvk-ui-combobox-motion-y: 0;
4852
+ }
4853
+
4854
+ .zvk-ui-combobox__popup[data-side="right"] {
4855
+ --zvk-ui-combobox-motion-x: -0.1875rem;
4856
+ --zvk-ui-combobox-motion-y: 0;
4857
+ }
4858
+
4859
+ .zvk-ui-combobox__popup[data-state="open"] {
4860
+ animation: zvk-ui-combobox-popup-enter var(--zvk-ui-duration-fast) var(--zvk-ui-ease-enter);
4861
+ }
4862
+
3498
4863
  .zvk-ui-combobox__option {
3499
4864
  border-radius: var(--zvk-ui-radius-sm);
3500
4865
  color: var(--zvk-ui-color-foreground);
@@ -3536,6 +4901,24 @@
3536
4901
  color: var(--zvk-ui-color-foreground);
3537
4902
  outline: 0;
3538
4903
  }
4904
+
4905
+ @keyframes zvk-ui-combobox-popup-enter {
4906
+ from {
4907
+ opacity: 0;
4908
+ transform: translate(var(--zvk-ui-combobox-motion-x), var(--zvk-ui-combobox-motion-y)) scale(0.98);
4909
+ }
4910
+
4911
+ to {
4912
+ opacity: 1;
4913
+ transform: translate(0, 0) scale(1);
4914
+ }
4915
+ }
4916
+
4917
+ @media (prefers-reduced-motion: reduce) {
4918
+ .zvk-ui-combobox__popup[data-state="open"] {
4919
+ animation: none;
4920
+ }
4921
+ }
3539
4922
  }
3540
4923
 
3541
4924
 
@@ -3550,17 +4933,45 @@
3550
4933
  }
3551
4934
 
3552
4935
  .zvk-ui-context-menu__content {
4936
+ --zvk-ui-context-menu-motion-x: 0;
4937
+ --zvk-ui-context-menu-motion-y: -0.1875rem;
4938
+ backdrop-filter: var(--zvk-ui-context-menu-content-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
3553
4939
  background: var(--zvk-ui-color-surface);
3554
4940
  border: 1px solid var(--zvk-ui-color-border);
3555
4941
  border-radius: var(--zvk-ui-radius-md);
3556
- box-shadow: var(--zvk-ui-shadow-md);
4942
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
3557
4943
  color: var(--zvk-ui-color-foreground);
3558
4944
  display: grid;
4945
+ font-family: var(--zvk-ui-font-family-primary);
4946
+ font-size: var(--zvk-ui-font-size-sm);
3559
4947
  gap: var(--zvk-ui-space-1);
3560
4948
  min-inline-size: 12rem;
3561
4949
  padding: var(--zvk-ui-space-1);
3562
4950
  position: fixed;
3563
- z-index: 110;
4951
+ z-index: var(--zvk-ui-z-popover);
4952
+ }
4953
+
4954
+ .zvk-ui-context-menu__content[data-side="top"] {
4955
+ --zvk-ui-context-menu-motion-y: 0.1875rem;
4956
+ }
4957
+
4958
+ .zvk-ui-context-menu__content[data-side="bottom"] {
4959
+ --zvk-ui-context-menu-motion-y: -0.1875rem;
4960
+ }
4961
+
4962
+ .zvk-ui-context-menu__content[data-side="left"] {
4963
+ --zvk-ui-context-menu-motion-x: 0.1875rem;
4964
+ --zvk-ui-context-menu-motion-y: 0;
4965
+ }
4966
+
4967
+ .zvk-ui-context-menu__content[data-side="right"] {
4968
+ --zvk-ui-context-menu-motion-x: -0.1875rem;
4969
+ --zvk-ui-context-menu-motion-y: 0;
4970
+ }
4971
+
4972
+ .zvk-ui-context-menu__content[data-state="open"] {
4973
+ animation: zvk-ui-context-menu-content-enter var(--zvk-ui-duration-fast) var(--zvk-ui-ease-enter);
4974
+ transform-origin: top left;
3564
4975
  }
3565
4976
 
3566
4977
  .zvk-ui-context-menu__item {
@@ -3573,7 +4984,7 @@
3573
4984
  display: flex;
3574
4985
  font: inherit;
3575
4986
  gap: var(--zvk-ui-space-2);
3576
- justify-content: space-between;
4987
+ justify-content: flex-start;
3577
4988
  padding: var(--zvk-ui-space-2) var(--zvk-ui-space-3);
3578
4989
  text-align: start;
3579
4990
  }
@@ -3601,6 +5012,7 @@
3601
5012
 
3602
5013
  .zvk-ui-context-menu__label {
3603
5014
  color: var(--zvk-ui-color-muted-foreground);
5015
+ font-family: var(--zvk-ui-font-family-secondary);
3604
5016
  font-size: var(--zvk-ui-font-size-xs);
3605
5017
  font-weight: 600;
3606
5018
  padding: var(--zvk-ui-space-1) var(--zvk-ui-space-3);
@@ -3619,19 +5031,40 @@
3619
5031
  .zvk-ui-context-menu__item-label {
3620
5032
  min-width: 0;
3621
5033
  }
5034
+
5035
+ @keyframes zvk-ui-context-menu-content-enter {
5036
+ from {
5037
+ opacity: 0;
5038
+ transform: translate(var(--zvk-ui-context-menu-motion-x), var(--zvk-ui-context-menu-motion-y)) scale(0.98);
5039
+ }
5040
+
5041
+ to {
5042
+ opacity: 1;
5043
+ transform: translate(0, 0) scale(1);
5044
+ }
5045
+ }
5046
+
5047
+ @media (prefers-reduced-motion: reduce) {
5048
+ .zvk-ui-context-menu__content[data-state="open"] {
5049
+ animation: none;
5050
+ }
5051
+ }
3622
5052
  }
3623
5053
 
3624
5054
 
3625
5055
  /* src/components/menubar/menubar.css */
3626
5056
  @layer zvk-ui-components {
3627
5057
  .zvk-ui-menubar {
5058
+ align-self: start;
3628
5059
  align-items: center;
5060
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
3629
5061
  background: var(--zvk-ui-color-surface);
3630
5062
  border: 1px solid var(--zvk-ui-color-border);
3631
5063
  border-radius: var(--zvk-ui-radius-md);
3632
5064
  color: var(--zvk-ui-color-foreground);
3633
5065
  display: inline-flex;
3634
5066
  gap: var(--zvk-ui-space-1);
5067
+ justify-self: start;
3635
5068
  padding: var(--zvk-ui-space-1);
3636
5069
  }
3637
5070
 
@@ -3656,24 +5089,52 @@
3656
5089
  }
3657
5090
 
3658
5091
  .zvk-ui-menubar__content {
5092
+ --zvk-ui-menubar-motion-x: 0;
5093
+ --zvk-ui-menubar-motion-y: -0.1875rem;
5094
+ backdrop-filter: var(--zvk-ui-menubar-content-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
3659
5095
  background: var(--zvk-ui-color-surface);
3660
5096
  border: 1px solid var(--zvk-ui-color-border);
3661
5097
  border-radius: var(--zvk-ui-radius-md);
3662
- box-shadow: var(--zvk-ui-shadow-md);
5098
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
3663
5099
  color: var(--zvk-ui-color-foreground);
3664
5100
  display: grid;
5101
+ font-family: var(--zvk-ui-font-family-primary);
5102
+ font-size: var(--zvk-ui-font-size-sm);
3665
5103
  gap: var(--zvk-ui-space-1);
3666
5104
  min-inline-size: 12rem;
3667
5105
  padding: var(--zvk-ui-space-1);
3668
5106
  position: fixed;
3669
- z-index: 110;
5107
+ z-index: var(--zvk-ui-z-popover);
5108
+ }
5109
+
5110
+ .zvk-ui-menubar__content[data-side="top"] {
5111
+ --zvk-ui-menubar-motion-y: 0.1875rem;
5112
+ }
5113
+
5114
+ .zvk-ui-menubar__content[data-side="bottom"] {
5115
+ --zvk-ui-menubar-motion-y: -0.1875rem;
5116
+ }
5117
+
5118
+ .zvk-ui-menubar__content[data-side="left"] {
5119
+ --zvk-ui-menubar-motion-x: 0.1875rem;
5120
+ --zvk-ui-menubar-motion-y: 0;
5121
+ }
5122
+
5123
+ .zvk-ui-menubar__content[data-side="right"] {
5124
+ --zvk-ui-menubar-motion-x: -0.1875rem;
5125
+ --zvk-ui-menubar-motion-y: 0;
5126
+ }
5127
+
5128
+ .zvk-ui-menubar__content[data-state="open"] {
5129
+ animation: zvk-ui-menubar-content-enter var(--zvk-ui-duration-fast) var(--zvk-ui-ease-enter);
5130
+ transform-origin: top center;
3670
5131
  }
3671
5132
 
3672
5133
  .zvk-ui-menubar__item {
3673
5134
  align-items: center;
3674
5135
  display: flex;
3675
5136
  gap: var(--zvk-ui-space-2);
3676
- justify-content: space-between;
5137
+ justify-content: flex-start;
3677
5138
  padding: var(--zvk-ui-space-2) var(--zvk-ui-space-3);
3678
5139
  text-align: start;
3679
5140
  }
@@ -3711,6 +5172,7 @@
3711
5172
 
3712
5173
  .zvk-ui-menubar__label {
3713
5174
  color: var(--zvk-ui-color-muted-foreground);
5175
+ font-family: var(--zvk-ui-font-family-secondary);
3714
5176
  font-size: var(--zvk-ui-font-size-xs);
3715
5177
  font-weight: 600;
3716
5178
  padding: var(--zvk-ui-space-1) var(--zvk-ui-space-3);
@@ -3721,6 +5183,24 @@
3721
5183
  font-size: var(--zvk-ui-font-size-xs);
3722
5184
  margin-inline-start: auto;
3723
5185
  }
5186
+
5187
+ @keyframes zvk-ui-menubar-content-enter {
5188
+ from {
5189
+ opacity: 0;
5190
+ transform: translate(var(--zvk-ui-menubar-motion-x), var(--zvk-ui-menubar-motion-y)) scale(0.98);
5191
+ }
5192
+
5193
+ to {
5194
+ opacity: 1;
5195
+ transform: translate(0, 0) scale(1);
5196
+ }
5197
+ }
5198
+
5199
+ @media (prefers-reduced-motion: reduce) {
5200
+ .zvk-ui-menubar__content[data-state="open"] {
5201
+ animation: none;
5202
+ }
5203
+ }
3724
5204
  }
3725
5205
 
3726
5206
 
@@ -3784,7 +5264,7 @@
3784
5264
  color: var(--zvk-ui-color-foreground);
3785
5265
  cursor: pointer;
3786
5266
  display: inline-flex;
3787
- font-family: var(--zvk-ui-font-family-sans);
5267
+ font-family: var(--zvk-ui-font-family-primary);
3788
5268
  font-size: var(--zvk-ui-font-size-sm);
3789
5269
  font-weight: 600;
3790
5270
  justify-content: center;
@@ -3812,10 +5292,16 @@
3812
5292
 
3813
5293
  :where(.zvk-ui-carousel__page) {
3814
5294
  color: var(--zvk-ui-color-muted-foreground);
3815
- font-family: var(--zvk-ui-font-family-sans);
5295
+ font-family: var(--zvk-ui-font-family-primary);
3816
5296
  font-size: var(--zvk-ui-font-size-sm);
3817
5297
  line-height: var(--zvk-ui-line-height-normal);
3818
5298
  }
5299
+
5300
+ @media (prefers-reduced-motion: reduce) {
5301
+ :where(.zvk-ui-carousel__viewport) {
5302
+ scroll-behavior: auto;
5303
+ }
5304
+ }
3819
5305
  }
3820
5306
 
3821
5307
 
@@ -3909,6 +5395,7 @@
3909
5395
  }
3910
5396
 
3911
5397
  :where(.zvk-ui-sidebar-shell__sidebar) {
5398
+ backdrop-filter: var(--zvk-ui-sidebar-shell-sidebar-backdrop-filter, var(--zvk-ui-material-surface-backdrop-filter));
3912
5399
  background: var(--zvk-ui-color-surface);
3913
5400
  border: 1px solid var(--zvk-ui-color-border);
3914
5401
  border-radius: var(--zvk-ui-radius-lg);
@@ -3956,7 +5443,7 @@
3956
5443
  :where(.zvk-ui-sectioned-sidebar-nav) {
3957
5444
  color: var(--zvk-ui-color-foreground);
3958
5445
  display: grid;
3959
- font-family: var(--zvk-ui-font-family-sans);
5446
+ font-family: var(--zvk-ui-font-family-primary);
3960
5447
  gap: var(--zvk-ui-space-4);
3961
5448
  }
3962
5449
 
@@ -3967,6 +5454,7 @@
3967
5454
 
3968
5455
  :where(.zvk-ui-sectioned-sidebar-nav__section-title) {
3969
5456
  color: var(--zvk-ui-color-muted-foreground);
5457
+ font-family: var(--zvk-ui-font-family-secondary);
3970
5458
  font-size: var(--zvk-ui-font-size-xs);
3971
5459
  font-weight: 700;
3972
5460
  letter-spacing: 0;
@@ -4016,9 +5504,10 @@
4016
5504
  }
4017
5505
 
4018
5506
  :where(.zvk-ui-sectioned-sidebar-nav__item-control[data-state="active"]) {
5507
+ backdrop-filter: var(--zvk-ui-material-control-backdrop-filter);
4019
5508
  background: var(--zvk-ui-color-primary-soft);
4020
5509
  border-color: var(--zvk-ui-color-primary-border);
4021
- color: var(--zvk-ui-color-primary-foreground);
5510
+ color: var(--zvk-ui-color-primary);
4022
5511
  }
4023
5512
 
4024
5513
  :where(.zvk-ui-sectioned-sidebar-nav__item-control[data-disabled="true"]) {
@@ -4145,15 +5634,17 @@
4145
5634
 
4146
5635
  :where(.zvk-ui-toast) {
4147
5636
  --zvk-ui-toast-accent: var(--zvk-ui-color-border-strong);
5637
+ backdrop-filter: var(--zvk-ui-toast-backdrop-filter, var(--zvk-ui-material-floating-backdrop-filter));
4148
5638
  background: var(--zvk-ui-color-surface-raised);
4149
5639
  border: 1px solid var(--zvk-ui-color-border);
4150
5640
  border-inline-start: 3px solid var(--zvk-ui-toast-accent);
4151
5641
  border-radius: var(--zvk-ui-radius-md);
4152
- box-shadow: var(--zvk-ui-shadow-md);
5642
+ box-shadow: var(--zvk-ui-material-glass-highlight), var(--zvk-ui-material-glass-shadow);
4153
5643
  color: var(--zvk-ui-color-foreground);
4154
5644
  display: grid;
4155
- font-family: var(--zvk-ui-font-family-sans);
5645
+ font-family: var(--zvk-ui-font-family-primary);
4156
5646
  gap: var(--zvk-ui-space-2);
5647
+ animation: zvk-ui-toast-enter var(--zvk-ui-duration-normal) var(--zvk-ui-ease-standard) both;
4157
5648
  padding: var(--zvk-ui-space-3);
4158
5649
  }
4159
5650
 
@@ -4212,6 +5703,7 @@
4212
5703
  justify-content: center;
4213
5704
  min-block-size: var(--zvk-ui-control-height-sm);
4214
5705
  padding-inline: var(--zvk-ui-space-2);
5706
+ transition: background var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), border-color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), box-shadow var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard), color var(--zvk-ui-duration-fast) var(--zvk-ui-ease-standard);
4215
5707
  }
4216
5708
 
4217
5709
  :where(.zvk-ui-toast__action:hover:not(:disabled)),
@@ -4226,6 +5718,22 @@
4226
5718
  outline: 0;
4227
5719
  box-shadow: var(--zvk-ui-focus-ring);
4228
5720
  }
5721
+
5722
+ @keyframes zvk-ui-toast-enter {
5723
+ from {
5724
+ opacity: 0;
5725
+ }
5726
+
5727
+ to {
5728
+ opacity: 1;
5729
+ }
5730
+ }
5731
+
5732
+ @media (prefers-reduced-motion: reduce) {
5733
+ :where(.zvk-ui-toast) {
5734
+ animation: none;
5735
+ }
5736
+ }
4229
5737
  }
4230
5738
 
4231
5739
 
@@ -4234,7 +5742,7 @@
4234
5742
  :where(.zvk-ui-conversation) {
4235
5743
  color: var(--zvk-ui-color-foreground);
4236
5744
  display: grid;
4237
- font-family: var(--zvk-ui-font-family-sans);
5745
+ font-family: var(--zvk-ui-font-family-primary);
4238
5746
  gap: var(--zvk-ui-space-4);
4239
5747
  }
4240
5748