@zeyos/zx 4.2.0 → 4.3.4

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 (69) hide show
  1. package/CHANGELOG.md +148 -1
  2. package/README.md +5 -3
  3. package/dist/types/components/calendar/calendar-model.d.ts +22 -0
  4. package/dist/types/components/calendar/calendar.d.ts +19 -2
  5. package/dist/types/components/card-view/card-view.d.ts +1 -1
  6. package/dist/types/components/card-view/record-card.d.ts +47 -5
  7. package/dist/types/components/dialog/dialog.d.ts +6 -1
  8. package/dist/types/components/dropdown/dropdown.d.ts +5 -0
  9. package/dist/types/components/kanban-view/kanban-policy.d.ts +268 -0
  10. package/dist/types/components/kanban-view/kanban-view.d.ts +669 -24
  11. package/dist/types/components/launcher/launcher.d.ts +5 -0
  12. package/dist/types/components/message/message.d.ts +9 -1
  13. package/dist/types/components/modal/modal.d.ts +44 -7
  14. package/dist/types/components/sheet/sheet.d.ts +22 -12
  15. package/dist/types/core/component.d.ts +6 -1
  16. package/dist/types/core/overlay-host.d.ts +12 -0
  17. package/dist/types/index.d.ts +2 -1
  18. package/dist/zx-zeyos.esm.js +173 -43
  19. package/dist/zx-zeyos.esm.min.js +1 -1
  20. package/dist/zx.css +876 -230
  21. package/dist/zx.esm.js +2053 -338
  22. package/dist/zx.esm.min.js +3 -3
  23. package/dist/zx.global.js +2053 -338
  24. package/dist/zx.global.min.js +3 -3
  25. package/dist/zx.min.css +1 -1
  26. package/docs/api.json +250 -2
  27. package/docs/llms.md +67 -48
  28. package/docs/llms.txt +1 -3
  29. package/package.json +1 -2
  30. package/src/components/account-menu/account-menu.css +1 -1
  31. package/src/components/app-rail/app-rail.css +1 -1
  32. package/src/components/calendar/calendar-model.js +45 -0
  33. package/src/components/calendar/calendar.css +96 -34
  34. package/src/components/calendar/calendar.js +122 -29
  35. package/src/components/card-view/card-view.css +211 -9
  36. package/src/components/card-view/card-view.js +7 -7
  37. package/src/components/card-view/record-card.js +92 -19
  38. package/src/components/context-menu/context-menu.css +2 -2
  39. package/src/components/context-menu/context-menu.js +5 -1
  40. package/src/components/date-picker/date-picker.css +18 -11
  41. package/src/components/datebox/date-range-box.css +4 -2
  42. package/src/components/datebox/datebox.css +4 -2
  43. package/src/components/dialog/dialog.css +4 -3
  44. package/src/components/dialog/dialog.js +2 -1
  45. package/src/components/dropdown/dropdown.css +4 -2
  46. package/src/components/dropdown/dropdown.js +7 -2
  47. package/src/components/kanban-view/kanban-policy.js +412 -0
  48. package/src/components/kanban-view/kanban-view.css +480 -36
  49. package/src/components/kanban-view/kanban-view.js +1514 -235
  50. package/src/components/launcher/launcher.css +10 -8
  51. package/src/components/launcher/launcher.js +9 -2
  52. package/src/components/menu-button/menu-button.css +2 -2
  53. package/src/components/message/message.css +15 -25
  54. package/src/components/message/message.js +17 -11
  55. package/src/components/modal/modal.css +6 -4
  56. package/src/components/modal/modal.js +99 -25
  57. package/src/components/select/select.css +9 -7
  58. package/src/components/sheet/sheet.css +25 -7
  59. package/src/components/sheet/sheet.js +43 -23
  60. package/src/components/table/table.css +5 -3
  61. package/src/components/tag-picker/tag-picker.css +5 -3
  62. package/src/components/tooltip/tooltip.css +4 -2
  63. package/src/components/tooltip/tooltip.js +4 -1
  64. package/src/core/component.js +8 -3
  65. package/src/core/overlay-host.js +23 -0
  66. package/src/index.js +8 -3
  67. package/styles/tokens/dark.css +4 -0
  68. package/styles/tokens/semantic.css +83 -8
  69. package/DESIGN-SYSTEM.md +0 -182
package/dist/zx.css CHANGED
@@ -182,9 +182,45 @@
182
182
  --zx-color-glass-chrome: color-mix(in srgb, var(--zx-color-bg-surface) 90%, transparent);
183
183
  --zx-color-glass-control: color-mix(in srgb, var(--zx-color-bg-control) 88%, transparent);
184
184
  --zx-color-glass-control-hover: color-mix(in srgb, var(--zx-color-bg-hover) 76%, var(--zx-color-glass-surface));
185
- --zx-color-overlay-surface: color-mix(in srgb, var(--zx-color-bg-raised) 88%, transparent);
186
- --zx-color-overlay-panel: color-mix(in srgb, var(--zx-color-bg-raised) 94%, transparent);
187
- --zx-color-overlay-border: color-mix(in srgb, var(--zx-color-border-strong) 72%, var(--zx-color-glass-highlight));
185
+ --zx-color-overlay-base: var(--zx-color-bg-raised);
186
+ --zx-color-overlay-surface: color-mix(in srgb, var(--zx-color-overlay-base) 72%, transparent);
187
+ --zx-color-overlay-panel: color-mix(in srgb, var(--zx-color-overlay-base) 80%, transparent);
188
+ --zx-color-overlay-backdrop: color-mix(in srgb, var(--zx-gray-950) 28%, transparent);
189
+ --zx-color-overlay-border: color-mix(in srgb, var(--zx-color-text) 14%, transparent);
190
+ --zx-color-overlay-hover: color-mix(in srgb, var(--zx-color-text) 8%, transparent);
191
+ --zx-color-overlay-selected: color-mix(in srgb, var(--zx-color-accent) 18%, transparent);
192
+ --zx-color-overlay-divider: color-mix(in srgb, var(--zx-color-text) 11%, transparent);
193
+ --zx-color-overlay-scrim: color-mix(in srgb, var(--zx-color-overlay-base) 28%, transparent);
194
+ --zx-overlay-specular-strength: 48%;
195
+ --zx-overlay-surface-image:
196
+ linear-gradient(
197
+ 145deg,
198
+ color-mix(in srgb, var(--zx-color-glass-highlight-strong) var(--zx-overlay-specular-strength), transparent) 0%,
199
+ color-mix(in srgb, var(--zx-color-glass-highlight) 16%, transparent) 28%,
200
+ transparent 54%),
201
+ radial-gradient(
202
+ 120% 100% at 8% -12%,
203
+ color-mix(in srgb, var(--zx-color-accent) 8%, transparent),
204
+ transparent 58%);
205
+ --zx-overlay-toast-image:
206
+ radial-gradient(
207
+ 120% 160% at 0% 0%,
208
+ color-mix(in srgb, var(--zx-message-kind, var(--zx-color-info)) 18%, transparent),
209
+ transparent 62%),
210
+ var(--zx-overlay-surface-image);
211
+ --zx-overlay-panel-image:
212
+ radial-gradient(
213
+ 140% 100% at 0% 0%,
214
+ color-mix(in srgb, var(--zx-color-glass-highlight-strong) var(--zx-overlay-specular-strength), transparent) 0%,
215
+ transparent 58%),
216
+ radial-gradient(
217
+ 100% 70% at 100% 0%,
218
+ color-mix(in srgb, var(--zx-color-accent) 5%, transparent),
219
+ transparent 64%),
220
+ linear-gradient(
221
+ 180deg,
222
+ color-mix(in srgb, var(--zx-color-glass-highlight) 16%, transparent) 0%,
223
+ transparent 28%);
188
224
  --zx-glass-blur: 8px;
189
225
  --zx-glass-saturation: 130%;
190
226
  --zx-glass-color-strength: 82%;
@@ -192,8 +228,8 @@
192
228
  --zx-glass-filter-control: blur(6px) saturate(116%);
193
229
  --zx-glass-filter-raised: blur(8px) saturate(120%);
194
230
  --zx-glass-filter-chrome: blur(10px) saturate(122%);
195
- --zx-glass-filter-overlay: blur(12px) saturate(128%);
196
- --zx-glass-filter-panel: blur(9px) saturate(120%);
231
+ --zx-glass-filter-overlay: blur(16px) saturate(140%);
232
+ --zx-glass-filter-panel: blur(14px) saturate(132%);
197
233
  --zx-app-icon-shadow:
198
234
  inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 14%, transparent),
199
235
  inset 0 -1px 0 color-mix(in srgb, var(--zx-gray-950) 28%, transparent),
@@ -205,18 +241,38 @@
205
241
  --zx-glass-control-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 18%, transparent), var(--zx-shadow-1);
206
242
  --zx-glass-chrome-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 16%, transparent), var(--zx-shadow-1);
207
243
  --zx-glass-raised-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 18%, transparent), var(--zx-overlay-shadow);
244
+ --zx-glass-overlay-shadow:
245
+ inset 0 1px 0 color-mix(in srgb, var(--zx-color-glass-highlight-strong) 42%, transparent),
246
+ inset 0 0 0 1px color-mix(in srgb, var(--zx-color-glass-highlight) 20%, transparent),
247
+ var(--zx-overlay-shadow);
248
+ --zx-glass-panel-shadow:
249
+ inset 0 1px 0 color-mix(in srgb, var(--zx-color-glass-highlight-strong) 34%, transparent),
250
+ inset 0 0 0 1px color-mix(in srgb, var(--zx-color-glass-highlight) 14%, transparent),
251
+ var(--zx-overlay-shadow);
208
252
  --zx-header-bg: var(--zx-gray-900);
209
253
  --zx-header-text: var(--zx-gray-50);
210
254
  }
211
255
  @media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
212
256
  :root,
213
- [data-zx-theme] {
257
+ .zx-scope,
258
+ [data-zx-theme],
259
+ [data-zx-density],
260
+ [data-zx-preset] {
214
261
  --zx-color-glass-chrome: var(--zx-color-bg-surface) !important;
215
262
  --zx-color-glass-surface: var(--zx-color-bg-raised) !important;
216
263
  --zx-color-glass-control: var(--zx-color-bg-control) !important;
217
264
  --zx-color-glass-control-hover: var(--zx-color-bg-hover) !important;
218
265
  --zx-color-overlay-surface: var(--zx-color-bg-raised) !important;
219
266
  --zx-color-overlay-panel: var(--zx-color-bg-raised) !important;
267
+ --zx-color-overlay-backdrop: var(--zx-color-bg-backdrop) !important;
268
+ --zx-color-overlay-hover: var(--zx-color-bg-hover) !important;
269
+ --zx-color-overlay-selected: var(--zx-color-bg-selected) !important;
270
+ --zx-color-overlay-divider: var(--zx-color-border) !important;
271
+ --zx-color-overlay-scrim: var(--zx-color-bg-raised) !important;
272
+ --zx-overlay-specular-strength: 0% !important;
273
+ --zx-overlay-surface-image: none !important;
274
+ --zx-overlay-toast-image: none !important;
275
+ --zx-overlay-panel-image: none !important;
220
276
  --zx-app-icon-core-strength: 68% !important;
221
277
  --zx-app-icon-rim-strength: 62% !important;
222
278
  --zx-app-icon-bloom-strength: 0% !important;
@@ -229,21 +285,56 @@
229
285
  --zx-glass-filter-chrome: none !important;
230
286
  --zx-glass-filter-overlay: none !important;
231
287
  --zx-glass-filter-panel: none !important;
288
+ --zx-glass-overlay-shadow: var(--zx-overlay-shadow) !important;
289
+ --zx-glass-panel-shadow: var(--zx-overlay-shadow) !important;
232
290
  }
233
291
  }
234
292
  @media (forced-colors: active) {
235
293
  :root,
236
- [data-zx-theme] {
294
+ .zx-scope,
295
+ [data-zx-theme],
296
+ [data-zx-density],
297
+ [data-zx-preset] {
237
298
  --zx-color-glass-chrome: Canvas !important;
238
299
  --zx-color-glass-surface: Canvas !important;
239
300
  --zx-color-glass-control: ButtonFace !important;
240
301
  --zx-color-glass-control-hover: Highlight !important;
241
302
  --zx-color-overlay-surface: Canvas !important;
242
303
  --zx-color-overlay-panel: Canvas !important;
304
+ --zx-color-overlay-backdrop: transparent !important;
243
305
  --zx-color-overlay-border: CanvasText !important;
306
+ --zx-color-overlay-hover: Highlight !important;
307
+ --zx-color-overlay-selected: Highlight !important;
308
+ --zx-color-overlay-divider: CanvasText !important;
309
+ --zx-color-overlay-scrim: Canvas !important;
310
+ --zx-overlay-specular-strength: 0% !important;
311
+ --zx-overlay-surface-image: none !important;
312
+ --zx-overlay-toast-image: none !important;
313
+ --zx-overlay-panel-image: none !important;
244
314
  --zx-glass-control-shadow: none !important;
245
315
  --zx-glass-chrome-shadow: none !important;
246
316
  --zx-glass-raised-shadow: none !important;
317
+ --zx-glass-filter-overlay: none !important;
318
+ --zx-glass-filter-panel: none !important;
319
+ --zx-glass-overlay-shadow: none !important;
320
+ --zx-glass-panel-shadow: none !important;
321
+ }
322
+ }
323
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
324
+ :root,
325
+ .zx-scope,
326
+ [data-zx-theme],
327
+ [data-zx-density],
328
+ [data-zx-preset] {
329
+ --zx-color-overlay-surface: var(--zx-color-bg-raised) !important;
330
+ --zx-color-overlay-panel: var(--zx-color-bg-raised) !important;
331
+ --zx-color-overlay-backdrop: var(--zx-color-bg-backdrop) !important;
332
+ --zx-overlay-specular-strength: 0% !important;
333
+ --zx-overlay-surface-image: none !important;
334
+ --zx-overlay-toast-image: none !important;
335
+ --zx-overlay-panel-image: none !important;
336
+ --zx-glass-filter-overlay: none !important;
337
+ --zx-glass-filter-panel: none !important;
247
338
  }
248
339
  }
249
340
 
@@ -258,6 +349,8 @@
258
349
  --zx-color-bg-hover: color-mix(in srgb, var(--zx-gray-0) 8%, transparent);
259
350
  --zx-color-bg-selected: color-mix(in srgb, var(--zx-accent-400) 18%, var(--zx-gray-900));
260
351
  --zx-color-bg-backdrop: color-mix(in srgb, var(--zx-gray-950) 75%, transparent);
352
+ --zx-color-overlay-base: color-mix(in srgb, var(--zx-color-bg-raised) 42%, var(--zx-color-bg-page));
353
+ --zx-color-overlay-backdrop: color-mix(in srgb, var(--zx-gray-950) 38%, transparent);
261
354
  --zx-color-border: color-mix(in srgb, var(--zx-gray-0) 10%, transparent);
262
355
  --zx-color-border-strong: color-mix(in srgb, var(--zx-gray-0) 28%, transparent);
263
356
  --zx-color-border-control: color-mix(in srgb, var(--zx-gray-0) 15%, transparent);
@@ -295,6 +388,8 @@
295
388
  --zx-color-bg-hover: color-mix(in srgb, var(--zx-gray-0) 8%, transparent);
296
389
  --zx-color-bg-selected: color-mix(in srgb, var(--zx-accent-400) 18%, var(--zx-gray-900));
297
390
  --zx-color-bg-backdrop: color-mix(in srgb, var(--zx-gray-950) 75%, transparent);
391
+ --zx-color-overlay-base: color-mix(in srgb, var(--zx-color-bg-raised) 42%, var(--zx-color-bg-page));
392
+ --zx-color-overlay-backdrop: color-mix(in srgb, var(--zx-gray-950) 38%, transparent);
298
393
  --zx-color-border: color-mix(in srgb, var(--zx-gray-0) 10%, transparent);
299
394
  --zx-color-border-strong: color-mix(in srgb, var(--zx-gray-0) 28%, transparent);
300
395
  --zx-color-border-control: color-mix(in srgb, var(--zx-gray-0) 15%, transparent);
@@ -2634,10 +2729,12 @@ button.zx-panel__toggle:focus-visible {
2634
2729
  max-block-size: min(720px, calc(100vh - (2 * var(--zx-space-6))));
2635
2730
  border: 1px solid var(--zx-color-overlay-border);
2636
2731
  border-radius: var(--zx-radius-xl);
2637
- background: var(--zx-color-overlay-panel);
2732
+ background-color: var(--zx-color-overlay-panel);
2733
+ background-image: var(--zx-overlay-panel-image);
2734
+ background-clip: padding-box;
2638
2735
  -webkit-backdrop-filter: var(--zx-glass-filter-panel);
2639
2736
  backdrop-filter: var(--zx-glass-filter-panel);
2640
- box-shadow: var(--zx-glass-raised-shadow);
2737
+ box-shadow: var(--zx-glass-panel-shadow);
2641
2738
  color: var(--zx-color-text);
2642
2739
  padding: 0;
2643
2740
  }
@@ -2651,7 +2748,7 @@ button.zx-panel__toggle:focus-visible {
2651
2748
  }
2652
2749
  }
2653
2750
  .zx-launcher::backdrop {
2654
- background: var(--zx-color-bg-backdrop);
2751
+ background: var(--zx-color-overlay-backdrop);
2655
2752
  }
2656
2753
  .zx-launcher__surface {
2657
2754
  display: grid;
@@ -2663,7 +2760,7 @@ button.zx-panel__toggle:focus-visible {
2663
2760
  grid-template-columns: auto minmax(0, 1fr) auto auto;
2664
2761
  align-items: center;
2665
2762
  gap: var(--zx-space-3);
2666
- border-block-end: 1px solid var(--zx-color-border);
2763
+ border-block-end: 1px solid var(--zx-color-overlay-divider);
2667
2764
  padding: var(--zx-space-3) var(--zx-space-4);
2668
2765
  }
2669
2766
  .zx-launcher__search[data-shortcut=false] {
@@ -2746,10 +2843,10 @@ button.zx-panel__toggle:focus-visible {
2746
2843
  }
2747
2844
  .zx-launcher__option[aria-selected=true],
2748
2845
  .zx-launcher__option:hover {
2749
- background: var(--zx-color-bg-hover);
2846
+ background: var(--zx-color-overlay-hover);
2750
2847
  }
2751
2848
  .zx-launcher__option[aria-current=page] {
2752
- background: var(--zx-color-bg-selected);
2849
+ background: var(--zx-color-overlay-selected);
2753
2850
  color: var(--zx-color-accent);
2754
2851
  }
2755
2852
  .zx-launcher__option[data-kind=application] {
@@ -2762,7 +2859,7 @@ button.zx-panel__toggle:focus-visible {
2762
2859
  text-align: center;
2763
2860
  }
2764
2861
  .zx-launcher__option[data-kind=application][aria-current=page] {
2765
- background: var(--zx-color-bg-selected);
2862
+ background: var(--zx-color-overlay-selected);
2766
2863
  }
2767
2864
  .zx-launcher__option[data-kind=application] .zx-launcher__icon {
2768
2865
  min-block-size: 36px;
@@ -2816,7 +2913,7 @@ button.zx-panel__toggle:focus-visible {
2816
2913
  justify-content: end;
2817
2914
  gap: var(--zx-space-4);
2818
2915
  padding: var(--zx-space-2) var(--zx-space-4);
2819
- border-block-start: 1px solid var(--zx-color-border);
2916
+ border-block-start: 1px solid var(--zx-color-overlay-divider);
2820
2917
  color: var(--zx-color-text-muted);
2821
2918
  font-size: var(--zx-text-xs);
2822
2919
  }
@@ -2978,7 +3075,7 @@ button.zx-panel__toggle:focus-visible {
2978
3075
  min-inline-size: 220px;
2979
3076
  gap: 2px;
2980
3077
  margin: calc(-1 * var(--zx-space-1)) calc(-1 * var(--zx-space-1)) var(--zx-space-1);
2981
- border-block-end: 1px solid var(--zx-color-border);
3078
+ border-block-end: 1px solid var(--zx-color-overlay-divider);
2982
3079
  padding: var(--zx-space-3);
2983
3080
  }
2984
3081
  .zx-account-menu__panel-identity span {
@@ -3128,7 +3225,7 @@ button.zx-panel__toggle:focus-visible {
3128
3225
  .zx-app-rail__flyout-item:hover,
3129
3226
  .zx-app-rail__flyout-item:focus-visible,
3130
3227
  .zx-app-rail__flyout-item[aria-current=page] {
3131
- background: var(--zx-color-bg-hover);
3228
+ background: var(--zx-color-overlay-hover);
3132
3229
  color: var(--zx-color-accent);
3133
3230
  }
3134
3231
  .zx-app-rail__flyout-item-icon {
@@ -3302,66 +3399,50 @@ button.zx-panel__toggle:focus-visible {
3302
3399
  }
3303
3400
  .zx-message__toast {
3304
3401
  --zx-message-kind: var(--zx-color-info);
3402
+ --zx-message-fallback-bg: var(--zx-color-info-bg);
3305
3403
  position: relative;
3306
3404
  display: grid;
3307
3405
  grid-template-columns: auto minmax(0, 1fr) auto;
3308
3406
  align-items: start;
3309
3407
  gap: var(--zx-space-3);
3310
3408
  border: 1px solid var(--zx-color-overlay-border);
3311
- border-radius: var(--zx-radius-md);
3312
- background: var(--zx-color-info-bg);
3409
+ border-radius: var(--zx-radius-lg);
3410
+ background: var(--zx-message-fallback-bg);
3313
3411
  box-shadow: inset 0 0 0 1px var(--zx-message-kind), var(--zx-glass-raised-shadow);
3314
3412
  padding: var(--zx-space-3);
3315
3413
  color: var(--zx-color-text);
3316
3414
  }
3317
3415
  .zx-message__toast[data-kind=success] {
3318
3416
  --zx-message-kind: var(--zx-color-success);
3319
- background: var(--zx-color-success-bg);
3417
+ --zx-message-fallback-bg: var(--zx-color-success-bg);
3320
3418
  }
3321
3419
  .zx-message__toast[data-kind=warning] {
3322
3420
  --zx-message-kind: var(--zx-color-warning);
3323
- background: var(--zx-color-warning-bg);
3421
+ --zx-message-fallback-bg: var(--zx-color-warning-bg);
3324
3422
  }
3325
3423
  .zx-message__toast[data-kind=error] {
3326
3424
  --zx-message-kind: var(--zx-color-danger);
3327
- background: var(--zx-color-danger-bg);
3425
+ --zx-message-fallback-bg: var(--zx-color-danger-bg);
3328
3426
  }
3329
- @supports (backdrop-filter: blur(1px)) {
3427
+ @supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
3330
3428
  .zx-message__toast {
3331
- background: color-mix(in srgb, var(--zx-color-info-bg) 34%, var(--zx-color-overlay-surface));
3429
+ border-color: color-mix(in srgb, var(--zx-message-kind) 28%, var(--zx-color-overlay-border));
3430
+ background-color: var(--zx-color-overlay-surface);
3431
+ background-image: var(--zx-overlay-toast-image);
3432
+ background-clip: padding-box;
3332
3433
  -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
3333
3434
  backdrop-filter: var(--zx-glass-filter-overlay);
3334
- box-shadow: inset 0 0 0 1px var(--zx-message-kind), var(--zx-glass-raised-shadow);
3335
- }
3336
- .zx-message__toast[data-kind=success] {
3337
- background: color-mix(in srgb, var(--zx-color-success-bg) 34%, var(--zx-color-overlay-surface));
3338
- }
3339
- .zx-message__toast[data-kind=warning] {
3340
- background: color-mix(in srgb, var(--zx-color-warning-bg) 34%, var(--zx-color-overlay-surface));
3341
- }
3342
- .zx-message__toast[data-kind=error] {
3343
- background: color-mix(in srgb, var(--zx-color-danger-bg) 34%, var(--zx-color-overlay-surface));
3435
+ box-shadow: inset 3px 0 0 color-mix(in srgb, var(--zx-message-kind) 72%, var(--zx-color-glass-highlight-strong)), var(--zx-glass-overlay-shadow);
3344
3436
  }
3345
3437
  }
3346
3438
  @media (prefers-reduced-transparency: reduce) {
3347
3439
  .zx-message__toast {
3348
3440
  border-color: var(--zx-color-border);
3441
+ background: var(--zx-message-fallback-bg);
3349
3442
  -webkit-backdrop-filter: none;
3350
3443
  backdrop-filter: none;
3351
3444
  box-shadow: var(--zx-overlay-shadow);
3352
3445
  }
3353
- .zx-message__toast[data-kind=info] {
3354
- background: var(--zx-color-info-bg);
3355
- }
3356
- .zx-message__toast[data-kind=success] {
3357
- background: var(--zx-color-success-bg);
3358
- }
3359
- .zx-message__toast[data-kind=warning] {
3360
- background: var(--zx-color-warning-bg);
3361
- }
3362
- .zx-message__toast[data-kind=error] {
3363
- background: var(--zx-color-danger-bg);
3364
- }
3365
3446
  }
3366
3447
  .zx-message__icon {
3367
3448
  display: inline-grid;
@@ -3380,7 +3461,7 @@ button.zx-panel__toggle:focus-visible {
3380
3461
  block-size: 4px;
3381
3462
  margin-block-start: var(--zx-space-2);
3382
3463
  border-radius: var(--zx-radius-full);
3383
- background: var(--zx-color-border);
3464
+ background: var(--zx-color-overlay-divider);
3384
3465
  }
3385
3466
  .zx-message__progress-fill {
3386
3467
  display: block;
@@ -3427,10 +3508,12 @@ button.zx-panel__toggle:focus-visible {
3427
3508
  overflow: auto;
3428
3509
  border: 1px solid var(--zx-color-overlay-border);
3429
3510
  border-radius: var(--zx-radius-lg);
3430
- background: var(--zx-color-overlay-panel);
3511
+ background-color: var(--zx-color-overlay-panel);
3512
+ background-image: var(--zx-overlay-panel-image);
3513
+ background-clip: padding-box;
3431
3514
  -webkit-backdrop-filter: var(--zx-glass-filter-panel);
3432
3515
  backdrop-filter: var(--zx-glass-filter-panel);
3433
- box-shadow: var(--zx-glass-raised-shadow);
3516
+ box-shadow: var(--zx-glass-panel-shadow);
3434
3517
  color: var(--zx-color-text);
3435
3518
  padding: 0;
3436
3519
  }
@@ -3444,12 +3527,12 @@ button.zx-panel__toggle:focus-visible {
3444
3527
  }
3445
3528
  }
3446
3529
  .zx-modal::backdrop {
3447
- background: var(--zx-color-bg-backdrop);
3530
+ background: var(--zx-color-overlay-backdrop);
3448
3531
  }
3449
3532
  .zx-modal__content {
3450
3533
  padding: var(--zx-space-5);
3451
3534
  }
3452
- body:has(> .zx-modal:modal) {
3535
+ body:has(.zx-modal:modal) {
3453
3536
  overflow: hidden;
3454
3537
  overscroll-behavior: none;
3455
3538
  }
@@ -3478,7 +3561,8 @@ body:has(> .zx-modal:modal) {
3478
3561
  grid-template-rows: auto minmax(0, 1fr) auto;
3479
3562
  padding: 0;
3480
3563
  }
3481
- .zx-dialog[open] {
3564
+ .zx-dialog[open],
3565
+ .zx-dialog:popover-open {
3482
3566
  display: grid;
3483
3567
  }
3484
3568
  .zx-dialog__header,
@@ -3490,7 +3574,7 @@ body:has(> .zx-modal:modal) {
3490
3574
  }
3491
3575
  .zx-dialog__header {
3492
3576
  justify-content: space-between;
3493
- border-block-end: 1px solid var(--zx-color-border);
3577
+ border-block-end: 1px solid var(--zx-color-overlay-divider);
3494
3578
  }
3495
3579
  .zx-dialog__title {
3496
3580
  margin: 0;
@@ -3509,7 +3593,7 @@ body:has(> .zx-modal:modal) {
3509
3593
  }
3510
3594
  .zx-dialog__footer {
3511
3595
  justify-content: flex-end;
3512
- border-block-start: 1px solid var(--zx-color-border);
3596
+ border-block-start: 1px solid var(--zx-color-overlay-divider);
3513
3597
  }
3514
3598
  .zx-dialog__footer[hidden] {
3515
3599
  display: none;
@@ -3546,7 +3630,7 @@ body:has(> .zx-modal:modal) {
3546
3630
  border: 0;
3547
3631
  border-radius: 0;
3548
3632
  overflow: hidden;
3549
- box-shadow: var(--zx-glass-raised-shadow);
3633
+ box-shadow: var(--zx-glass-panel-shadow);
3550
3634
  }
3551
3635
  .zx-sheet[data-side=start],
3552
3636
  .zx-sheet[data-side=end] {
@@ -3557,13 +3641,13 @@ body:has(> .zx-modal:modal) {
3557
3641
  .zx-sheet[data-side=start] {
3558
3642
  inset-inline-start: 0;
3559
3643
  inset-inline-end: auto;
3560
- border-inline-end: 1px solid var(--zx-color-border);
3644
+ border-inline-end: 1px solid var(--zx-color-overlay-border);
3561
3645
  --zx-sheet-enter: -100% 0;
3562
3646
  }
3563
3647
  .zx-sheet[data-side=end] {
3564
3648
  inset-inline-start: auto;
3565
3649
  inset-inline-end: 0;
3566
- border-inline-start: 1px solid var(--zx-color-border);
3650
+ border-inline-start: 1px solid var(--zx-color-overlay-border);
3567
3651
  --zx-sheet-enter: 100% 0;
3568
3652
  }
3569
3653
  [dir=rtl] .zx-sheet[data-side=start] {
@@ -3581,7 +3665,7 @@ body:has(> .zx-modal:modal) {
3581
3665
  .zx-sheet[data-side=top] {
3582
3666
  inset-block-start: 0;
3583
3667
  inset-block-end: auto;
3584
- border-block-end: 1px solid var(--zx-color-border);
3668
+ border-block-end: 1px solid var(--zx-color-overlay-border);
3585
3669
  border-end-start-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
3586
3670
  border-end-end-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
3587
3671
  --zx-sheet-enter: 0 -100%;
@@ -3589,7 +3673,7 @@ body:has(> .zx-modal:modal) {
3589
3673
  .zx-sheet[data-side=bottom] {
3590
3674
  inset-block-start: auto;
3591
3675
  inset-block-end: 0;
3592
- border-block-start: 1px solid var(--zx-color-border);
3676
+ border-block-start: 1px solid var(--zx-color-overlay-border);
3593
3677
  border-start-start-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
3594
3678
  border-start-end-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
3595
3679
  --zx-sheet-enter: 0 100%;
@@ -3598,8 +3682,21 @@ body:has(> .zx-modal:modal) {
3598
3682
  background: transparent;
3599
3683
  }
3600
3684
  .zx-sheet[data-backdrop=blur]::backdrop {
3685
+ -webkit-backdrop-filter: blur(var(--zx-overlay-blur));
3601
3686
  backdrop-filter: blur(var(--zx-overlay-blur));
3602
3687
  }
3688
+ .zx-sheet[data-modality=none]::backdrop,
3689
+ .zx-sheet[data-modality=trap-focus]::backdrop {
3690
+ background: transparent;
3691
+ -webkit-backdrop-filter: none;
3692
+ backdrop-filter: none;
3693
+ }
3694
+ @media (prefers-reduced-transparency: reduce), (prefers-contrast: more), (forced-colors: active) {
3695
+ .zx-sheet[data-backdrop=blur]::backdrop {
3696
+ -webkit-backdrop-filter: none;
3697
+ backdrop-filter: none;
3698
+ }
3699
+ }
3603
3700
  @media (prefers-reduced-motion: no-preference) {
3604
3701
  .zx-sheet {
3605
3702
  transition:
@@ -3611,12 +3708,13 @@ body:has(> .zx-modal:modal) {
3611
3708
  .zx-sheet[data-state=open] {
3612
3709
  animation: none;
3613
3710
  }
3614
- .zx-sheet:not([open]) {
3711
+ .zx-sheet:not([open]):not(:popover-open) {
3615
3712
  translate: var(--zx-sheet-enter, 0 0);
3616
3713
  opacity: 0;
3617
3714
  }
3618
3715
  @starting-style {
3619
- .zx-sheet[open] {
3716
+ .zx-sheet[open],
3717
+ .zx-sheet:popover-open {
3620
3718
  translate: var(--zx-sheet-enter, 0 0);
3621
3719
  opacity: 0;
3622
3720
  }
@@ -3818,10 +3916,12 @@ body:has(> .zx-modal:modal) {
3818
3916
  overflow: auto;
3819
3917
  border: 1px solid var(--zx-color-overlay-border);
3820
3918
  border-radius: var(--zx-radius-md);
3821
- background: var(--zx-color-overlay-surface);
3919
+ background-color: var(--zx-color-overlay-surface);
3920
+ background-image: var(--zx-overlay-surface-image);
3921
+ background-clip: padding-box;
3822
3922
  -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
3823
3923
  backdrop-filter: var(--zx-glass-filter-overlay);
3824
- box-shadow: var(--zx-glass-raised-shadow);
3924
+ box-shadow: var(--zx-glass-overlay-shadow);
3825
3925
  color: var(--zx-color-text);
3826
3926
  padding: var(--zx-space-3);
3827
3927
  }
@@ -3851,10 +3951,12 @@ body:has(> .zx-modal:modal) {
3851
3951
  max-inline-size: var(--zx-tooltip-max-inline-size, 260px);
3852
3952
  border: 1px solid var(--zx-color-overlay-border);
3853
3953
  border-radius: var(--zx-radius-md);
3854
- background: var(--zx-color-overlay-surface);
3954
+ background-color: var(--zx-color-overlay-surface);
3955
+ background-image: var(--zx-overlay-surface-image);
3956
+ background-clip: padding-box;
3855
3957
  -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
3856
3958
  backdrop-filter: var(--zx-glass-filter-overlay);
3857
- box-shadow: var(--zx-glass-raised-shadow);
3959
+ box-shadow: var(--zx-glass-overlay-shadow);
3858
3960
  padding: var(--zx-space-1) var(--zx-space-2);
3859
3961
  color: var(--zx-color-text);
3860
3962
  font-size: var(--zx-text-sm);
@@ -4211,7 +4313,7 @@ body:has(> .zx-modal:modal) {
4211
4313
  }
4212
4314
  .zx-menu-button__item:hover,
4213
4315
  .zx-menu-button__item:focus-visible {
4214
- background: var(--zx-color-bg-hover);
4316
+ background: var(--zx-color-overlay-hover);
4215
4317
  }
4216
4318
  .zx-menu-button__item[data-danger=true] {
4217
4319
  color: var(--zx-color-danger);
@@ -4228,7 +4330,7 @@ body:has(> .zx-modal:modal) {
4228
4330
  .zx-menu-button__separator {
4229
4331
  block-size: 1px;
4230
4332
  margin: var(--zx-space-1) var(--zx-space-2);
4231
- background: var(--zx-color-border);
4333
+ background: var(--zx-color-overlay-divider);
4232
4334
  }
4233
4335
 
4234
4336
  /* src/components/context-menu/context-menu.css */
@@ -4255,7 +4357,7 @@ body:has(> .zx-modal:modal) {
4255
4357
  }
4256
4358
  .zx-context-menu__item:hover,
4257
4359
  .zx-context-menu__item:focus-visible {
4258
- background: var(--zx-color-bg-hover);
4360
+ background: var(--zx-color-overlay-hover);
4259
4361
  }
4260
4362
  .zx-context-menu__item[data-danger=true] {
4261
4363
  color: var(--zx-color-danger);
@@ -4272,7 +4374,7 @@ body:has(> .zx-modal:modal) {
4272
4374
  .zx-context-menu__separator {
4273
4375
  block-size: 1px;
4274
4376
  margin: var(--zx-space-1) var(--zx-space-2);
4275
- background: var(--zx-color-border);
4377
+ background: var(--zx-color-overlay-divider);
4276
4378
  }
4277
4379
 
4278
4380
  /* src/components/select/select.css */
@@ -4374,10 +4476,12 @@ body:has(> .zx-modal:modal) {
4374
4476
  overflow: hidden;
4375
4477
  border: 1px solid var(--zx-color-overlay-border);
4376
4478
  border-radius: var(--zx-radius-md);
4377
- background: var(--zx-color-overlay-surface);
4479
+ background-color: var(--zx-color-overlay-surface);
4480
+ background-image: var(--zx-overlay-surface-image);
4481
+ background-clip: padding-box;
4378
4482
  -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
4379
4483
  backdrop-filter: var(--zx-glass-filter-overlay);
4380
- box-shadow: var(--zx-glass-raised-shadow);
4484
+ box-shadow: var(--zx-glass-overlay-shadow);
4381
4485
  color: var(--zx-color-text);
4382
4486
  padding: var(--zx-space-1);
4383
4487
  }
@@ -4400,13 +4504,13 @@ body:has(> .zx-modal:modal) {
4400
4504
  flex: 1;
4401
4505
  }
4402
4506
  .zx-select__option[data-active=true] {
4403
- background: var(--zx-color-bg-hover);
4507
+ background: var(--zx-color-overlay-hover);
4404
4508
  }
4405
4509
  .zx-select__option:hover {
4406
- background: var(--zx-color-bg-hover);
4510
+ background: var(--zx-color-overlay-hover);
4407
4511
  }
4408
4512
  .zx-select__option[aria-selected=true] {
4409
- background: var(--zx-color-bg-selected);
4513
+ background: var(--zx-color-overlay-selected);
4410
4514
  }
4411
4515
  .zx-select__option > .zx-icon {
4412
4516
  flex: none;
@@ -4416,7 +4520,7 @@ body:has(> .zx-modal:modal) {
4416
4520
  position: sticky;
4417
4521
  z-index: 1;
4418
4522
  inset-block-start: 0;
4419
- background: var(--zx-color-overlay-surface);
4523
+ background: var(--zx-color-overlay-scrim);
4420
4524
  color: var(--zx-color-text-muted);
4421
4525
  font-size: var(--zx-text-xs);
4422
4526
  font-weight: 700;
@@ -4439,7 +4543,7 @@ body:has(> .zx-modal:modal) {
4439
4543
  .zx-select__separator {
4440
4544
  block-size: 1px;
4441
4545
  margin: var(--zx-space-1) var(--zx-control-pad-x);
4442
- background: var(--zx-color-border);
4546
+ background: var(--zx-color-overlay-divider);
4443
4547
  }
4444
4548
  .zx-select__empty {
4445
4549
  color: var(--zx-color-text-muted);
@@ -4801,10 +4905,12 @@ body:has(> .zx-modal:modal) {
4801
4905
  overflow: hidden;
4802
4906
  border: 1px solid var(--zx-color-overlay-border);
4803
4907
  border-radius: var(--zx-radius-md);
4804
- background: var(--zx-color-overlay-surface);
4908
+ background-color: var(--zx-color-overlay-surface);
4909
+ background-image: var(--zx-overlay-surface-image);
4910
+ background-clip: padding-box;
4805
4911
  -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
4806
4912
  backdrop-filter: var(--zx-glass-filter-overlay);
4807
- box-shadow: var(--zx-glass-raised-shadow);
4913
+ box-shadow: var(--zx-glass-overlay-shadow);
4808
4914
  color: var(--zx-color-text);
4809
4915
  padding: var(--zx-space-1);
4810
4916
  }
@@ -4831,7 +4937,7 @@ body:has(> .zx-modal:modal) {
4831
4937
  cursor: pointer;
4832
4938
  }
4833
4939
  .zx-tag-picker__option[data-active] {
4834
- background: var(--zx-color-bg-hover);
4940
+ background: var(--zx-color-overlay-hover);
4835
4941
  }
4836
4942
  .zx-tag-picker__option[aria-selected=true] {
4837
4943
  color: var(--zx-color-accent);
@@ -5194,13 +5300,13 @@ body:has(> .zx-modal:modal) {
5194
5300
  place-items: center;
5195
5301
  min-inline-size: var(--zx-control-height);
5196
5302
  padding: 0;
5197
- border-color: var(--zx-color-bg-surface);
5198
- background: inherit;
5303
+ border-color: transparent;
5304
+ background: transparent;
5199
5305
  }
5200
5306
  .zx-date-picker__heading {
5201
5307
  overflow: hidden;
5202
- border-color: var(--zx-color-bg-surface);
5203
- background: inherit;
5308
+ border-color: transparent;
5309
+ background: transparent;
5204
5310
  font-weight: 650;
5205
5311
  text-overflow: ellipsis;
5206
5312
  text-wrap: nowrap;
@@ -5233,9 +5339,9 @@ body:has(> .zx-modal:modal) {
5233
5339
  min-inline-size: 0;
5234
5340
  min-block-size: var(--zx-control-height);
5235
5341
  padding: 0;
5236
- border-color: var(--zx-color-bg-surface);
5342
+ border-color: transparent;
5237
5343
  border-radius: var(--zx-radius-md);
5238
- background: inherit;
5344
+ background: transparent;
5239
5345
  font-variant-numeric: tabular-nums;
5240
5346
  }
5241
5347
  .zx-date-picker__day[data-other-month=true] {
@@ -5275,10 +5381,12 @@ body:has(> .zx-modal:modal) {
5275
5381
  inset: var(--zx-space-3);
5276
5382
  border: 1px solid var(--zx-color-overlay-border);
5277
5383
  border-radius: var(--zx-radius-md);
5278
- background: var(--zx-color-overlay-surface);
5384
+ background-color: var(--zx-color-overlay-surface);
5385
+ background-image: var(--zx-overlay-surface-image);
5386
+ background-clip: padding-box;
5279
5387
  -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
5280
5388
  backdrop-filter: var(--zx-glass-filter-overlay);
5281
- box-shadow: var(--zx-glass-raised-shadow);
5389
+ box-shadow: var(--zx-glass-overlay-shadow);
5282
5390
  padding: var(--zx-space-3);
5283
5391
  }
5284
5392
  @media (prefers-reduced-transparency: reduce) {
@@ -5303,10 +5411,14 @@ body:has(> .zx-modal:modal) {
5303
5411
  .zx-month-picker__month {
5304
5412
  min-inline-size: 0;
5305
5413
  padding-inline: var(--zx-space-1);
5306
- border-color: var(--zx-color-bg-surface);
5307
- background: inherit;
5414
+ border-color: transparent;
5415
+ background: transparent;
5416
+ }
5417
+ .zx-date-picker__quick-month[aria-selected=true] {
5418
+ background: var(--zx-color-overlay-selected);
5419
+ color: var(--zx-color-accent);
5420
+ font-weight: 700;
5308
5421
  }
5309
- .zx-date-picker__quick-month[aria-selected=true],
5310
5422
  .zx-month-picker__month[aria-selected=true] {
5311
5423
  background: var(--zx-color-bg-selected);
5312
5424
  color: var(--zx-color-accent);
@@ -5572,10 +5684,12 @@ body:has(> .zx-modal:modal) {
5572
5684
  }
5573
5685
  .zx-datebox__popover .zx-date-picker__surface {
5574
5686
  border-color: var(--zx-color-overlay-border);
5575
- background: var(--zx-color-overlay-surface);
5687
+ background-color: var(--zx-color-overlay-surface);
5688
+ background-image: var(--zx-overlay-surface-image);
5689
+ background-clip: padding-box;
5576
5690
  -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
5577
5691
  backdrop-filter: var(--zx-glass-filter-overlay);
5578
- box-shadow: var(--zx-glass-raised-shadow);
5692
+ box-shadow: var(--zx-glass-overlay-shadow);
5579
5693
  }
5580
5694
  @media (prefers-reduced-transparency: reduce) {
5581
5695
  .zx-datebox__popover .zx-date-picker__surface {
@@ -5893,10 +6007,12 @@ body:has(> .zx-modal:modal) {
5893
6007
  .zx-date-range-box__popover .zx-date-range-picker__surface {
5894
6008
  max-inline-size: none;
5895
6009
  border-color: var(--zx-color-overlay-border);
5896
- background: var(--zx-color-overlay-surface);
6010
+ background-color: var(--zx-color-overlay-surface);
6011
+ background-image: var(--zx-overlay-surface-image);
6012
+ background-clip: padding-box;
5897
6013
  -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
5898
6014
  backdrop-filter: var(--zx-glass-filter-overlay);
5899
- box-shadow: var(--zx-glass-raised-shadow);
6015
+ box-shadow: var(--zx-glass-overlay-shadow);
5900
6016
  }
5901
6017
  @media (prefers-reduced-transparency: reduce) {
5902
6018
  .zx-date-range-box__popover .zx-date-range-picker__surface {
@@ -5965,14 +6081,14 @@ body:has(> .zx-modal:modal) {
5965
6081
  min-inline-size: 0;
5966
6082
  overflow: hidden;
5967
6083
  border: 1px solid var(--zx-color-border);
5968
- border-radius: var(--zx-radius-lg);
6084
+ border-radius: 0;
5969
6085
  background: var(--zx-color-bg-surface);
5970
6086
  color: var(--zx-color-text);
5971
6087
  font-size: var(--zx-text-sm);
5972
6088
  }
5973
6089
  .zx-calendar__toolbar {
5974
6090
  display: grid;
5975
- grid-template-columns: 1fr auto 1fr;
6091
+ grid-template-columns: auto minmax(0, 1fr) auto;
5976
6092
  align-items: center;
5977
6093
  gap: var(--zx-space-3);
5978
6094
  min-inline-size: 0;
@@ -5995,7 +6111,12 @@ body:has(> .zx-modal:modal) {
5995
6111
  gap: var(--zx-space-3);
5996
6112
  }
5997
6113
  .zx-calendar__views {
6114
+ block-size: var(--zx-control-height);
6115
+ gap: 2px;
5998
6116
  overflow-x: auto;
6117
+ border-radius: 0;
6118
+ background: var(--zx-color-bg-muted);
6119
+ padding: 3px;
5999
6120
  }
6000
6121
  .zx-calendar__toolbar-button,
6001
6122
  .zx-calendar__view-button,
@@ -6020,24 +6141,20 @@ body:has(> .zx-modal:modal) {
6020
6141
  padding-inline: var(--zx-space-2);
6021
6142
  }
6022
6143
  .zx-calendar__view-button {
6023
- border-inline-end-width: 0;
6144
+ block-size: 100%;
6145
+ min-block-size: 0;
6146
+ border-color: transparent;
6147
+ border-radius: 0;
6148
+ background: transparent;
6024
6149
  padding-inline: var(--zx-space-3);
6025
6150
  }
6026
- .zx-calendar__view-button:first-child {
6027
- border-start-start-radius: var(--zx-control-radius);
6028
- border-end-start-radius: var(--zx-control-radius);
6029
- }
6030
- .zx-calendar__view-button:last-child {
6031
- border-inline-end-width: 1px;
6032
- border-start-end-radius: var(--zx-control-radius);
6033
- border-end-end-radius: var(--zx-control-radius);
6034
- }
6035
6151
  .zx-calendar__view-button[aria-pressed=true] {
6036
6152
  position: relative;
6037
6153
  z-index: 1;
6038
- border-color: var(--zx-color-accent);
6039
- background: var(--zx-color-bg-selected);
6040
- color: var(--zx-color-accent);
6154
+ border-color: var(--zx-color-border-control);
6155
+ background: var(--zx-color-bg-control);
6156
+ box-shadow: var(--zx-shadow-2);
6157
+ color: var(--zx-color-text);
6041
6158
  }
6042
6159
  .zx-calendar__new {
6043
6160
  gap: var(--zx-space-2);
@@ -6049,7 +6166,7 @@ body:has(> .zx-modal:modal) {
6049
6166
  font-weight: 650;
6050
6167
  }
6051
6168
  .zx-calendar__toolbar-button:hover:not(:disabled),
6052
- .zx-calendar__view-button:hover:not(:disabled) {
6169
+ .zx-calendar__view-button:hover:not(:disabled):not([aria-pressed=true]) {
6053
6170
  background: var(--zx-color-bg-hover);
6054
6171
  }
6055
6172
  .zx-calendar__new:hover:not(:disabled) {
@@ -6120,6 +6237,7 @@ body:has(> .zx-modal:modal) {
6120
6237
  min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
6121
6238
  place-content: center;
6122
6239
  border: 0;
6240
+ border-radius: 0;
6123
6241
  border-inline-end: 1px solid var(--zx-color-border);
6124
6242
  background: var(--zx-color-bg-surface);
6125
6243
  color: var(--zx-color-text);
@@ -6210,6 +6328,7 @@ body:has(> .zx-modal:modal) {
6210
6328
  .zx-calendar__slot {
6211
6329
  min-inline-size: 0;
6212
6330
  border: 0;
6331
+ border-radius: 0;
6213
6332
  border-block-start: 1px solid var(--zx-color-border);
6214
6333
  border-inline-end: 1px solid var(--zx-color-border);
6215
6334
  background: var(--zx-color-bg-surface);
@@ -6250,6 +6369,7 @@ body:has(> .zx-modal:modal) {
6250
6369
  inline-size: 100%;
6251
6370
  block-size: 100%;
6252
6371
  min-inline-size: 0;
6372
+ min-block-size: 0;
6253
6373
  overflow: hidden;
6254
6374
  border: 1px solid color-mix(in srgb, var(--zx-calendar-event-color) 65%, var(--zx-color-border));
6255
6375
  border-inline-start: 3px solid var(--zx-calendar-event-color);
@@ -6313,8 +6433,11 @@ body:has(> .zx-modal:modal) {
6313
6433
  z-index: 3;
6314
6434
  display: grid;
6315
6435
  block-size: 8px;
6436
+ min-block-size: 0;
6316
6437
  place-items: center;
6438
+ appearance: none;
6317
6439
  border: 0;
6440
+ border-radius: 0;
6318
6441
  background: transparent;
6319
6442
  padding: 0;
6320
6443
  cursor: ns-resize;
@@ -6335,6 +6458,7 @@ body:has(> .zx-modal:modal) {
6335
6458
  .zx-calendar__event[data-variant=span] .zx-calendar__event-action,
6336
6459
  .zx-calendar__event[data-variant=month] .zx-calendar__event-action {
6337
6460
  display: flex;
6461
+ min-block-size: 0;
6338
6462
  align-items: center;
6339
6463
  gap: var(--zx-space-1);
6340
6464
  padding-block: 2px;
@@ -6377,8 +6501,11 @@ body:has(> .zx-modal:modal) {
6377
6501
  border-block-end: 1px solid var(--zx-color-border);
6378
6502
  }
6379
6503
  .zx-calendar__agenda-heading {
6380
- align-self: start;
6504
+ align-self: stretch;
6505
+ appearance: none;
6381
6506
  border: 0;
6507
+ border-inline-end: 1px solid var(--zx-color-border);
6508
+ border-radius: 0;
6382
6509
  background: var(--zx-color-bg-muted);
6383
6510
  color: var(--zx-color-text);
6384
6511
  padding: var(--zx-space-3);
@@ -6390,15 +6517,19 @@ body:has(> .zx-modal:modal) {
6390
6517
  .zx-calendar__agenda-heading[aria-current=date] {
6391
6518
  color: var(--zx-color-accent);
6392
6519
  }
6520
+ .zx-calendar__agenda-events {
6521
+ display: grid;
6522
+ min-inline-size: 0;
6523
+ }
6393
6524
  .zx-calendar__agenda-empty {
6394
6525
  margin: 0;
6395
6526
  color: var(--zx-color-text-muted);
6396
6527
  padding: var(--zx-space-3);
6397
6528
  }
6398
- .zx-calendar__agenda-day > .zx-calendar__event {
6529
+ .zx-calendar__agenda-events > .zx-calendar__event {
6399
6530
  border-block-end: 1px solid var(--zx-color-border);
6400
6531
  }
6401
- .zx-calendar__agenda-day > .zx-calendar__event:last-child {
6532
+ .zx-calendar__agenda-events > .zx-calendar__event:last-child {
6402
6533
  border-block-end: 0;
6403
6534
  }
6404
6535
  .zx-calendar__event[data-variant=agenda] .zx-calendar__event-action {
@@ -6461,59 +6592,16 @@ body:has(> .zx-modal:modal) {
6461
6592
  text-transform: uppercase;
6462
6593
  letter-spacing: .04em;
6463
6594
  }
6464
- .zx-calendar__month-weekdays .zx-calendar__month-weekday {
6465
- grid-row: 1;
6466
- }
6467
- .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(7) {
6468
- grid-column: 2;
6469
- }
6470
- .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(6) {
6471
- grid-column: 3;
6472
- }
6473
- .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(5) {
6474
- grid-column: 4;
6475
- }
6476
- .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(4) {
6477
- grid-column: 5;
6478
- }
6479
- .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(3) {
6480
- grid-column: 6;
6481
- }
6482
- .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(2) {
6483
- grid-column: 7;
6484
- }
6485
- .zx-calendar__month-weekdays .zx-calendar__month-weekday:nth-last-child(1) {
6486
- grid-column: 8;
6487
- }
6488
- .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(7) {
6489
- grid-column: 1;
6490
- }
6491
- .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(6) {
6492
- grid-column: 2;
6493
- }
6494
- .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(5) {
6495
- grid-column: 3;
6496
- }
6497
- .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(4) {
6498
- grid-column: 4;
6499
- }
6500
- .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(3) {
6501
- grid-column: 5;
6502
- }
6503
- .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(2) {
6504
- grid-column: 6;
6505
- }
6506
- .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) .zx-calendar__month-weekday:nth-last-child(1) {
6507
- grid-column: 7;
6508
- }
6509
6595
  .zx-calendar__month-week {
6510
6596
  min-block-size: 7.5rem;
6511
6597
  border-block-end: 1px solid var(--zx-color-border);
6512
6598
  }
6513
6599
  .zx-calendar__month-week-number {
6514
- grid-row: 1 / span 2;
6600
+ grid-row: 1;
6601
+ appearance: none;
6515
6602
  border: 0;
6516
6603
  border-inline-end: 1px solid var(--zx-color-border);
6604
+ border-radius: 0;
6517
6605
  background: var(--zx-color-bg-muted);
6518
6606
  color: var(--zx-color-text-muted);
6519
6607
  font: inherit;
@@ -6532,11 +6620,19 @@ body:has(> .zx-modal:modal) {
6532
6620
  }
6533
6621
  .zx-calendar__month-days {
6534
6622
  grid-row: 1;
6623
+ min-block-size: 7.5rem;
6624
+ align-items: stretch;
6535
6625
  }
6536
6626
  .zx-calendar__month-day {
6627
+ display: flex;
6628
+ block-size: 100%;
6629
+ appearance: none;
6630
+ align-items: flex-start;
6631
+ justify-content: flex-end;
6537
6632
  min-block-size: var(--zx-control-height);
6538
6633
  border: 0;
6539
6634
  border-inline-end: 1px solid var(--zx-color-border);
6635
+ border-radius: 0;
6540
6636
  background: var(--zx-color-bg-surface);
6541
6637
  color: var(--zx-color-text);
6542
6638
  padding: var(--zx-space-2);
@@ -6544,6 +6640,9 @@ body:has(> .zx-modal:modal) {
6544
6640
  text-align: end;
6545
6641
  cursor: pointer;
6546
6642
  }
6643
+ .zx-calendar__month-day:last-child {
6644
+ border-inline-end: 0;
6645
+ }
6547
6646
  .zx-calendar__month-day[data-other-month=true] {
6548
6647
  color: var(--zx-color-text-muted);
6549
6648
  background: var(--zx-color-bg-muted);
@@ -6551,20 +6650,35 @@ body:has(> .zx-modal:modal) {
6551
6650
  .zx-calendar__month-day[aria-current=date] {
6552
6651
  color: var(--zx-color-accent);
6553
6652
  font-weight: 750;
6554
- box-shadow: inset 0 2px var(--zx-color-accent);
6555
6653
  }
6556
6654
  .zx-calendar__month-day:hover:not(:disabled) {
6557
6655
  background: var(--zx-color-bg-hover);
6558
6656
  }
6559
6657
  .zx-calendar__month-events {
6560
- grid-row: 2;
6658
+ grid-row: 1;
6659
+ z-index: 2;
6561
6660
  grid-auto-rows: calc(var(--zx-control-height) - var(--zx-space-2));
6562
6661
  align-content: start;
6563
6662
  gap: 2px 0;
6564
- padding-block: var(--zx-space-1);
6663
+ padding-block: calc(var(--zx-control-height) + var(--zx-space-1)) var(--zx-space-1);
6664
+ pointer-events: none;
6665
+ }
6666
+ .zx-calendar__month-events > .zx-calendar__event,
6667
+ .zx-calendar__month-events > .zx-calendar__more {
6668
+ pointer-events: auto;
6669
+ }
6670
+ .zx-calendar__event[data-variant=month] .zx-calendar__event-action {
6671
+ border-color: color-mix(in srgb, var(--zx-calendar-event-color) 55%, var(--zx-color-border));
6672
+ border-inline-start-width: 1px;
6673
+ border-radius: 0;
6674
+ background: color-mix(in srgb, var(--zx-calendar-event-color) 13%, var(--zx-color-bg-surface));
6675
+ }
6676
+ .zx-calendar__event[data-variant=month][data-all-day=true] .zx-calendar__event-time {
6677
+ display: none;
6565
6678
  }
6566
6679
  .zx-calendar__more {
6567
6680
  align-self: center;
6681
+ min-block-size: 0;
6568
6682
  overflow: hidden;
6569
6683
  border: 0;
6570
6684
  background: transparent;
@@ -6702,8 +6816,12 @@ body:has(> .zx-modal:modal) {
6702
6816
  position: sticky;
6703
6817
  inset-block-start: 0;
6704
6818
  z-index: 3;
6819
+ border-inline-end: 0;
6705
6820
  border-block-end: 1px solid var(--zx-color-border);
6706
6821
  }
6822
+ .zx-calendar__agenda-events {
6823
+ grid-column: 1;
6824
+ }
6707
6825
  .zx-calendar__event[data-variant=agenda] .zx-calendar__event-action {
6708
6826
  grid-template-columns: 5.5rem minmax(0, 1fr);
6709
6827
  }
@@ -6875,10 +6993,12 @@ body:has(> .zx-modal:modal) {
6875
6993
  min-inline-size: 190px;
6876
6994
  border: 1px solid var(--zx-color-overlay-border);
6877
6995
  border-radius: var(--zx-radius-md);
6878
- background: var(--zx-color-overlay-surface);
6996
+ background-color: var(--zx-color-overlay-surface);
6997
+ background-image: var(--zx-overlay-surface-image);
6998
+ background-clip: padding-box;
6879
6999
  -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
6880
7000
  backdrop-filter: var(--zx-glass-filter-overlay);
6881
- box-shadow: var(--zx-glass-raised-shadow);
7001
+ box-shadow: var(--zx-glass-overlay-shadow);
6882
7002
  padding: var(--zx-space-2);
6883
7003
  max-block-size: min(360px, 70vh);
6884
7004
  overflow: auto;
@@ -6902,7 +7022,7 @@ body:has(> .zx-modal:modal) {
6902
7022
  padding-inline: var(--zx-space-2);
6903
7023
  }
6904
7024
  .zx-table__column-option:hover {
6905
- background: var(--zx-color-bg-hover);
7025
+ background: var(--zx-color-overlay-hover);
6906
7026
  }
6907
7027
  .zx-table__column-option > label,
6908
7028
  .zx-table__column-label {
@@ -7323,8 +7443,12 @@ body:has(> .zx-modal:modal) {
7323
7443
 
7324
7444
  /* src/components/card-view/card-view.css */
7325
7445
  .zx-card-view {
7326
- --zx-card-view-min-card-width: 18rem;
7446
+ --zx-card-view-min-card-width: 15rem;
7327
7447
  --zx-card-view-column-basis: 0%;
7448
+ --zx-card-view-card-padding: var(--zx-space-3);
7449
+ --zx-card-view-card-gap: var(--zx-space-2);
7450
+ --zx-card-view-grid-gap: var(--zx-space-3);
7451
+ --zx-card-view-preview-size: 1.75rem;
7328
7452
  inline-size: 100%;
7329
7453
  min-inline-size: 0;
7330
7454
  container-type: inline-size;
@@ -7361,18 +7485,19 @@ body:has(> .zx-modal:modal) {
7361
7485
  min-inline-size: 0;
7362
7486
  }
7363
7487
  .zx-card-view__group + .zx-card-view__group {
7364
- margin-block-start: var(--zx-space-6);
7488
+ margin-block-start: var(--zx-space-4);
7365
7489
  }
7366
7490
  .zx-card-view__group-heading {
7367
- margin: 0 0 var(--zx-space-3);
7491
+ margin: 0 0 var(--zx-space-2);
7368
7492
  color: var(--zx-color-text);
7369
- font-size: var(--zx-text-lg);
7370
- line-height: 1.35;
7493
+ font-size: var(--zx-text-sm);
7494
+ font-weight: 600;
7495
+ line-height: 1.3;
7371
7496
  }
7372
7497
  .zx-card-view__list {
7373
7498
  display: grid;
7374
- grid-template-columns: repeat(auto-fit, minmax(min(100%, max(var(--zx-card-view-min-card-width), calc(var(--zx-card-view-column-basis) - var(--zx-space-4)))), 1fr));
7375
- gap: var(--zx-space-4);
7499
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, max(var(--zx-card-view-min-card-width), calc(var(--zx-card-view-column-basis) - var(--zx-card-view-grid-gap)))), 1fr));
7500
+ gap: var(--zx-card-view-grid-gap);
7376
7501
  min-inline-size: 0;
7377
7502
  margin: 0;
7378
7503
  padding: 0;
@@ -7408,7 +7533,7 @@ body:has(> .zx-modal:modal) {
7408
7533
  outline: none;
7409
7534
  box-shadow: var(--zx-focus-ring);
7410
7535
  }
7411
- .zx-record-card[aria-selected=true] {
7536
+ .zx-record-card[data-selected=true] {
7412
7537
  border-color: var(--zx-color-accent);
7413
7538
  box-shadow: inset 0 0 0 1px var(--zx-color-accent);
7414
7539
  }
@@ -7475,6 +7600,35 @@ body:has(> .zx-modal:modal) {
7475
7600
  flex: 1 1 auto;
7476
7601
  min-inline-size: 0;
7477
7602
  }
7603
+ .zx-record-card__eyebrow {
7604
+ display: flex;
7605
+ align-items: flex-start;
7606
+ gap: var(--zx-space-2);
7607
+ min-inline-size: 0;
7608
+ }
7609
+ .zx-record-card__eyebrow-group,
7610
+ .zx-record-card__title-prefix {
7611
+ display: flex;
7612
+ flex-wrap: wrap;
7613
+ align-items: center;
7614
+ gap: var(--zx-space-1);
7615
+ min-inline-size: 0;
7616
+ margin: 0;
7617
+ }
7618
+ .zx-record-card__eyebrow-group[data-card-slot=eyebrow-end] {
7619
+ justify-content: flex-end;
7620
+ margin-inline-start: auto;
7621
+ }
7622
+ .zx-record-card__title-row {
7623
+ display: flex;
7624
+ align-items: flex-start;
7625
+ gap: var(--zx-space-2);
7626
+ min-inline-size: 0;
7627
+ }
7628
+ .zx-record-card__title-row > .zx-record-card__heading {
7629
+ flex: 1 1 auto;
7630
+ min-inline-size: 0;
7631
+ }
7478
7632
  .zx-record-card__heading {
7479
7633
  margin: 0;
7480
7634
  overflow-wrap: anywhere;
@@ -7654,67 +7808,211 @@ body:has(> .zx-modal:modal) {
7654
7808
  box-shadow var(--zx-dur-fast) var(--zx-ease);
7655
7809
  }
7656
7810
  }
7657
-
7658
- /* src/components/kanban-view/kanban-view.css */
7659
- .zx-kanban-view {
7660
- inline-size: 100%;
7661
- min-inline-size: 0;
7662
- container-type: inline-size;
7811
+ .zx-card-view .zx-record-card {
7812
+ border-radius: var(--zx-radius-md);
7663
7813
  }
7664
- .zx-kanban-view__toolbar:empty {
7665
- display: none;
7814
+ .zx-card-view .zx-record-card:has(> .zx-record-card__preview) {
7815
+ grid-template-columns: auto minmax(0, 1fr);
7816
+ align-items: start;
7666
7817
  }
7667
- .zx-kanban-view__board {
7668
- min-inline-size: 0;
7669
- overflow: auto;
7670
- overscroll-behavior-inline: contain;
7671
- border: 1px solid var(--zx-color-border);
7672
- border-radius: var(--zx-radius-lg);
7673
- background: var(--zx-color-bg-muted);
7674
- padding: var(--zx-space-3);
7675
- scrollbar-gutter: stable;
7818
+ .zx-card-view .zx-record-card__preview {
7819
+ inline-size: var(--zx-card-view-preview-size);
7820
+ block-size: var(--zx-card-view-preview-size);
7821
+ margin-block-start: var(--zx-card-view-card-padding);
7822
+ margin-inline-start: var(--zx-card-view-card-padding);
7823
+ border: 0;
7824
+ border-radius: var(--zx-radius-sm);
7825
+ aspect-ratio: 1;
7676
7826
  }
7677
- .zx-kanban-view__lane + .zx-kanban-view__lane {
7678
- margin-block-start: var(--zx-space-4);
7679
- border-block-start: 1px solid var(--zx-color-border);
7680
- padding-block-start: var(--zx-space-3);
7827
+ .zx-card-view .zx-record-card__preview .zx-icon {
7828
+ inline-size: .875rem;
7829
+ block-size: .875rem;
7681
7830
  }
7682
- .zx-kanban-view__lane-heading,
7683
- .zx-kanban-view__column-heading {
7684
- display: flex;
7685
- align-items: center;
7831
+ .zx-card-view .zx-record-card__body {
7832
+ gap: var(--zx-card-view-card-gap);
7833
+ padding: var(--zx-card-view-card-padding);
7834
+ }
7835
+ .zx-card-view .zx-record-card:has(> .zx-record-card__preview) .zx-record-card__body {
7836
+ padding-inline-start: var(--zx-card-view-card-gap);
7837
+ }
7838
+ .zx-card-view .zx-record-card__header {
7686
7839
  gap: var(--zx-space-2);
7687
- margin: 0;
7688
- color: var(--zx-color-text);
7840
+ }
7841
+ .zx-card-view .zx-record-card__selection {
7842
+ min-block-size: 1.25rem;
7843
+ }
7844
+ .zx-card-view .zx-record-card__heading {
7689
7845
  font-size: var(--zx-text-md);
7690
- font-weight: var(--zx-control-font-weight);
7846
+ font-weight: 600;
7691
7847
  line-height: 1.3;
7692
7848
  }
7693
- .zx-kanban-view__lane-heading {
7694
- margin-block-end: var(--zx-space-2);
7849
+ .zx-card-view .zx-record-card__primary,
7850
+ .zx-card-view .zx-record-card__title {
7851
+ display: -webkit-box;
7852
+ overflow: hidden;
7853
+ -webkit-box-orient: vertical;
7854
+ -webkit-line-clamp: 2;
7855
+ }
7856
+ .zx-card-view .zx-record-card__subtitle {
7857
+ margin-block-start: calc(var(--zx-space-1) / 2);
7858
+ overflow: hidden;
7859
+ font-size: var(--zx-text-xs);
7860
+ line-height: 1.3;
7861
+ text-overflow: ellipsis;
7862
+ white-space: nowrap;
7863
+ }
7864
+ .zx-card-view .zx-record-card__actions {
7865
+ flex-wrap: nowrap;
7866
+ gap: calc(var(--zx-space-1) / 2);
7867
+ }
7868
+ .zx-card-view .zx-record-card__action {
7869
+ min-block-size: 1.75rem;
7870
+ border-color: transparent;
7871
+ background: transparent;
7872
+ padding-inline: var(--zx-space-2);
7873
+ font-size: var(--zx-text-xs);
7874
+ }
7875
+ .zx-card-view .zx-record-card__metadata {
7876
+ display: flex;
7877
+ flex-wrap: wrap;
7878
+ gap: var(--zx-space-1);
7879
+ }
7880
+ .zx-card-view .zx-record-card__field {
7881
+ display: inline-flex;
7882
+ flex: 0 1 auto;
7883
+ align-items: center;
7884
+ gap: var(--zx-space-1);
7885
+ max-inline-size: 100%;
7886
+ border: 1px solid var(--zx-color-border);
7887
+ border-radius: var(--zx-radius-full);
7888
+ background: var(--zx-color-bg-muted);
7889
+ padding: calc(var(--zx-space-1) / 2) var(--zx-space-2);
7890
+ }
7891
+ .zx-card-view .zx-record-card__label {
7892
+ flex: none;
7893
+ font-size: var(--zx-text-xs);
7894
+ font-weight: 500;
7895
+ line-height: 1.2;
7896
+ }
7897
+ .zx-card-view .zx-record-card__value {
7898
+ overflow: hidden;
7899
+ font-size: var(--zx-text-xs);
7900
+ line-height: 1.2;
7901
+ text-overflow: ellipsis;
7902
+ white-space: nowrap;
7903
+ }
7904
+ .zx-card-view .zx-card-view__group-empty {
7905
+ padding: var(--zx-space-3);
7906
+ font-size: var(--zx-text-sm);
7907
+ }
7908
+ .zx-card-view .zx-card-view__empty {
7909
+ min-block-size: 6rem;
7910
+ border-radius: var(--zx-radius-md);
7911
+ padding: var(--zx-space-4);
7912
+ font-size: var(--zx-text-sm);
7913
+ }
7914
+ .zx-card-view .zx-card-view__skeleton {
7915
+ grid-template-columns: var(--zx-card-view-preview-size) minmax(0, 1fr);
7916
+ gap: var(--zx-card-view-card-gap);
7917
+ padding: var(--zx-card-view-card-padding);
7918
+ }
7919
+ .zx-card-view .zx-card-view__skeleton-preview {
7920
+ grid-row: 1 / span 2;
7921
+ inline-size: var(--zx-card-view-preview-size);
7922
+ margin: 0;
7923
+ aspect-ratio: 1;
7924
+ border-radius: var(--zx-radius-sm);
7925
+ }
7926
+ .zx-card-view .zx-card-view__skeleton-line {
7927
+ min-inline-size: 0;
7928
+ block-size: .625rem;
7929
+ }
7930
+ .zx-card-view .zx-card-view__skeleton-line:nth-child(3) {
7931
+ inline-size: 62%;
7932
+ }
7933
+ .zx-card-view .zx-card-view__skeleton-line:nth-child(4) {
7934
+ grid-column: 1 / -1;
7935
+ inline-size: 42%;
7936
+ }
7937
+ @media (pointer: coarse) {
7938
+ .zx-card-view .zx-record-card__selection,
7939
+ .zx-card-view .zx-record-card__action {
7940
+ min-inline-size: 44px;
7941
+ min-block-size: 44px;
7942
+ }
7943
+ }
7944
+
7945
+ /* src/components/kanban-view/kanban-view.css */
7946
+ .zx-kanban-view {
7947
+ --zx-kanban-column-width: 18.5rem;
7948
+ --zx-kanban-thumbnail-size: 2rem;
7949
+ --zx-kanban-card-padding-block: var(--zx-space-2);
7950
+ --zx-kanban-card-padding-inline: var(--zx-space-3);
7951
+ --zx-kanban-card-gap: var(--zx-space-2);
7952
+ inline-size: 100%;
7953
+ min-inline-size: 0;
7954
+ container-type: inline-size;
7955
+ }
7956
+ .zx-kanban-view__toolbar {
7957
+ margin-block-end: var(--zx-space-1);
7958
+ }
7959
+ .zx-kanban-view__toolbar:empty {
7960
+ display: none;
7961
+ }
7962
+ .zx-kanban-view__board {
7963
+ min-inline-size: 0;
7964
+ overflow: auto;
7965
+ overscroll-behavior-inline: contain;
7966
+ scrollbar-gutter: stable;
7967
+ }
7968
+ .zx-kanban-view__lane + .zx-kanban-view__lane {
7969
+ margin-block-start: var(--zx-space-3);
7970
+ border-block-start: 1px solid var(--zx-color-border);
7971
+ padding-block-start: var(--zx-space-2);
7972
+ }
7973
+ .zx-kanban-view__lane-heading,
7974
+ .zx-kanban-view__column-heading {
7975
+ display: flex;
7976
+ align-items: center;
7977
+ min-inline-size: 0;
7978
+ margin: 0;
7979
+ color: var(--zx-color-text);
7980
+ font-size: var(--zx-text-sm);
7981
+ font-weight: var(--zx-control-font-weight);
7982
+ line-height: 1.25;
7983
+ }
7984
+ .zx-kanban-view__lane-heading {
7985
+ min-block-size: 2rem;
7986
+ gap: var(--zx-space-1);
7987
+ margin-block-end: var(--zx-space-1);
7988
+ }
7989
+ .zx-kanban-view__column-heading {
7990
+ min-block-size: 2rem;
7991
+ gap: var(--zx-space-1);
7992
+ margin-block-end: var(--zx-space-2);
7695
7993
  }
7696
7994
  .zx-kanban-view__columns {
7697
7995
  display: grid;
7698
7996
  grid-auto-flow: column;
7699
- grid-auto-columns: minmax(260px, min(82vw, 340px));
7997
+ grid-auto-columns: minmax(18rem, var(--zx-kanban-column-width));
7700
7998
  align-items: start;
7701
- gap: var(--zx-space-3);
7999
+ gap: var(--zx-space-4);
7702
8000
  min-inline-size: max-content;
7703
8001
  }
8002
+ .zx-kanban-view__columns[hidden],
8003
+ .zx-kanban-view__cards[hidden] {
8004
+ display: none;
8005
+ }
7704
8006
  .zx-kanban-view__column {
7705
8007
  display: grid;
7706
- grid-template-rows: auto minmax(64px, auto);
7707
- gap: var(--zx-space-2);
8008
+ grid-template-rows: auto minmax(4rem, auto);
7708
8009
  min-inline-size: 0;
7709
- border: 1px solid var(--zx-color-border);
7710
- border-radius: var(--zx-radius-md);
7711
- background: var(--zx-color-bg-surface);
7712
- padding: var(--zx-space-2);
7713
8010
  }
7714
8011
  .zx-kanban-view__column[data-collapsed=true] {
7715
8012
  grid-template-rows: auto;
7716
8013
  }
7717
8014
  .zx-kanban-view__column-label {
8015
+ order: 1;
7718
8016
  min-inline-size: 0;
7719
8017
  overflow: hidden;
7720
8018
  text-overflow: ellipsis;
@@ -7722,6 +8020,7 @@ body:has(> .zx-modal:modal) {
7722
8020
  }
7723
8021
  .zx-kanban-view__collapse,
7724
8022
  .zx-kanban-view__move-handle {
8023
+ position: relative;
7725
8024
  display: inline-grid;
7726
8025
  flex: 0 0 auto;
7727
8026
  place-items: center;
@@ -7732,12 +8031,14 @@ body:has(> .zx-modal:modal) {
7732
8031
  cursor: pointer;
7733
8032
  }
7734
8033
  .zx-kanban-view__collapse {
7735
- inline-size: 26px;
7736
- block-size: 26px;
8034
+ order: 3;
8035
+ inline-size: calc(var(--zx-control-height) - var(--zx-space-1));
8036
+ block-size: calc(var(--zx-control-height) - var(--zx-space-1));
8037
+ margin-inline-start: auto;
7737
8038
  }
7738
8039
  .zx-kanban-view__move-handle {
7739
- inline-size: 28px;
7740
- block-size: 28px;
8040
+ inline-size: calc(var(--zx-control-height) - var(--zx-space-1));
8041
+ block-size: calc(var(--zx-control-height) - var(--zx-space-1));
7741
8042
  cursor: grab;
7742
8043
  touch-action: none;
7743
8044
  }
@@ -7758,38 +8059,222 @@ body:has(> .zx-modal:modal) {
7758
8059
  box-shadow: var(--zx-focus-ring);
7759
8060
  }
7760
8061
  .zx-kanban-view__count {
8062
+ order: 2;
7761
8063
  flex: 0 0 auto;
7762
- margin-inline-start: auto;
7763
- border-radius: var(--zx-radius-sm);
7764
- background: var(--zx-color-bg-muted);
7765
- padding: var(--zx-space-1) var(--zx-space-2);
7766
8064
  color: var(--zx-color-text-muted);
7767
- font-size: var(--zx-control-font-size);
7768
- font-weight: var(--zx-control-font-weight);
8065
+ font-size: var(--zx-text-xs);
8066
+ font-weight: 400;
8067
+ line-height: 1.25;
7769
8068
  white-space: nowrap;
7770
8069
  }
7771
8070
  .zx-kanban-view__column[data-wip=limit] .zx-kanban-view__count {
7772
- background: var(--zx-color-warning-bg);
7773
8071
  color: var(--zx-color-warning);
8072
+ font-weight: 600;
7774
8073
  }
7775
8074
  .zx-kanban-view__column[data-wip=exceeded] .zx-kanban-view__count {
7776
- background: var(--zx-color-danger-bg);
7777
8075
  color: var(--zx-color-danger);
8076
+ font-weight: 600;
8077
+ }
8078
+ .zx-kanban-view__lane[data-wip=limit] > .zx-kanban-view__lane-heading .zx-kanban-view__count {
8079
+ color: var(--zx-color-warning);
8080
+ font-weight: 600;
8081
+ }
8082
+ .zx-kanban-view__lane[data-wip=exceeded] > .zx-kanban-view__lane-heading .zx-kanban-view__count {
8083
+ color: var(--zx-color-danger);
8084
+ font-weight: 600;
7778
8085
  }
7779
8086
  .zx-kanban-view__cards {
7780
8087
  position: relative;
7781
8088
  display: flex;
7782
8089
  flex-direction: column;
7783
8090
  gap: var(--zx-space-2);
7784
- min-block-size: 64px;
8091
+ min-block-size: 4rem;
7785
8092
  margin: 0;
7786
- border-radius: var(--zx-radius-sm);
7787
- padding: var(--zx-space-1);
8093
+ padding: 0;
7788
8094
  list-style: none;
7789
8095
  }
7790
8096
  .zx-kanban-view__cards > .zx-record-card {
7791
8097
  inline-size: 100%;
7792
8098
  min-inline-size: 0;
8099
+ overflow: visible;
8100
+ border-radius: var(--zx-radius-md);
8101
+ }
8102
+ .zx-kanban-view :where(.zx-record-card[data-variant=outlined]) {
8103
+ box-shadow: var(--zx-shadow-1);
8104
+ }
8105
+ .zx-kanban-view .zx-record-card:has(> .zx-record-card__preview) {
8106
+ grid-template-columns: var(--zx-kanban-thumbnail-size) minmax(0, 1fr);
8107
+ align-items: start;
8108
+ column-gap: var(--zx-space-2);
8109
+ padding-block: var(--zx-kanban-card-padding-block);
8110
+ padding-inline: var(--zx-kanban-card-padding-inline);
8111
+ }
8112
+ .zx-kanban-view .zx-record-card > .zx-record-card__preview {
8113
+ inline-size: var(--zx-kanban-thumbnail-size);
8114
+ block-size: var(--zx-kanban-thumbnail-size);
8115
+ aspect-ratio: 1;
8116
+ align-self: start;
8117
+ border: 0;
8118
+ border-radius: var(--zx-radius-sm);
8119
+ }
8120
+ .zx-kanban-view .zx-record-card:has(> .zx-record-card__preview) > .zx-record-card__body {
8121
+ padding: 0;
8122
+ }
8123
+ .zx-kanban-view .zx-record-card:not(:has(> .zx-record-card__preview)) > .zx-record-card__body {
8124
+ padding-block: var(--zx-kanban-card-padding-block);
8125
+ padding-inline: var(--zx-kanban-card-padding-inline);
8126
+ }
8127
+ .zx-kanban-view .zx-record-card__body {
8128
+ gap: var(--zx-kanban-card-gap);
8129
+ }
8130
+ .zx-kanban-view .zx-record-card__header {
8131
+ gap: var(--zx-space-2);
8132
+ }
8133
+ .zx-kanban-view .zx-record-card__selection {
8134
+ min-block-size: calc(var(--zx-control-height) - var(--zx-space-1));
8135
+ }
8136
+ .zx-kanban-view .zx-record-card__heading {
8137
+ display: -webkit-box;
8138
+ overflow: hidden;
8139
+ font-size: var(--zx-text-md);
8140
+ font-weight: 600;
8141
+ line-height: 1.3;
8142
+ -webkit-box-orient: vertical;
8143
+ -webkit-line-clamp: 2;
8144
+ }
8145
+ .zx-kanban-view .zx-record-card__subtitle {
8146
+ margin-block-start: var(--zx-space-1);
8147
+ overflow: hidden;
8148
+ font-size: var(--zx-text-xs);
8149
+ line-height: 1.3;
8150
+ text-overflow: ellipsis;
8151
+ white-space: nowrap;
8152
+ }
8153
+ .zx-kanban-view .zx-record-card__actions {
8154
+ gap: 0;
8155
+ opacity: 0;
8156
+ pointer-events: none;
8157
+ }
8158
+ .zx-kanban-view .zx-record-card:hover .zx-record-card__actions,
8159
+ .zx-kanban-view .zx-record-card:focus-within .zx-record-card__actions,
8160
+ .zx-kanban-view .zx-record-card[data-selected=true] .zx-record-card__actions,
8161
+ .zx-kanban-view .zx-record-card[data-grabbed=true] .zx-record-card__actions {
8162
+ opacity: 1;
8163
+ pointer-events: auto;
8164
+ }
8165
+ .zx-kanban-view .zx-record-card__action {
8166
+ inline-size: calc(var(--zx-control-height) - var(--zx-space-1));
8167
+ min-block-size: calc(var(--zx-control-height) - var(--zx-space-1));
8168
+ padding: 0;
8169
+ }
8170
+ .zx-kanban-view .zx-record-card__action-label {
8171
+ position: absolute;
8172
+ inline-size: 1px;
8173
+ block-size: 1px;
8174
+ overflow: hidden;
8175
+ clip-path: inset(50%);
8176
+ white-space: nowrap;
8177
+ }
8178
+ .zx-kanban-view .zx-record-card__metadata {
8179
+ display: flex;
8180
+ flex-wrap: wrap;
8181
+ gap: var(--zx-space-2);
8182
+ }
8183
+ .zx-kanban-view .zx-record-card__field {
8184
+ display: inline-flex;
8185
+ align-items: center;
8186
+ gap: var(--zx-space-1);
8187
+ min-inline-size: 0;
8188
+ max-inline-size: 100%;
8189
+ min-block-size: 0;
8190
+ border: 0;
8191
+ padding: 0;
8192
+ }
8193
+ .zx-kanban-view .zx-record-card__label,
8194
+ .zx-kanban-view .zx-record-card__value {
8195
+ overflow: hidden;
8196
+ font-size: var(--zx-text-xs);
8197
+ line-height: 1.2;
8198
+ text-overflow: ellipsis;
8199
+ white-space: nowrap;
8200
+ }
8201
+ .zx-kanban-view .zx-record-card__label {
8202
+ flex: none;
8203
+ color: var(--zx-color-text-muted);
8204
+ font-weight: 500;
8205
+ }
8206
+ .zx-kanban-view .zx-record-card__value {
8207
+ min-inline-size: 0;
8208
+ }
8209
+ .zx-kanban-view .zx-record-card__eyebrow {
8210
+ display: flex;
8211
+ align-items: center;
8212
+ gap: var(--zx-space-2);
8213
+ min-block-size: 1.25rem;
8214
+ min-inline-size: 0;
8215
+ }
8216
+ .zx-kanban-view .zx-record-card__eyebrow-group,
8217
+ .zx-kanban-view .zx-record-card__title-prefix {
8218
+ display: flex;
8219
+ align-items: center;
8220
+ gap: var(--zx-space-1);
8221
+ min-inline-size: 0;
8222
+ margin: 0;
8223
+ }
8224
+ .zx-kanban-view .zx-record-card__eyebrow-group[data-card-slot=eyebrow-end] {
8225
+ justify-content: flex-end;
8226
+ margin-inline-start: auto;
8227
+ }
8228
+ .zx-kanban-view .zx-record-card__eyebrow-group .zx-record-card__label,
8229
+ .zx-kanban-view .zx-record-card__title-prefix .zx-record-card__label {
8230
+ position: absolute;
8231
+ inline-size: 1px;
8232
+ block-size: 1px;
8233
+ overflow: hidden;
8234
+ clip-path: inset(50%);
8235
+ white-space: nowrap;
8236
+ }
8237
+ .zx-kanban-view .zx-record-card__eyebrow-group[data-card-slot=eyebrow-start] .zx-record-card__field {
8238
+ border-radius: var(--zx-radius-full);
8239
+ background: var(--zx-color-bg-muted);
8240
+ padding: calc(var(--zx-space-1) / 2) var(--zx-space-2);
8241
+ }
8242
+ .zx-kanban-view .zx-record-card__eyebrow-group .zx-record-card__value {
8243
+ color: var(--zx-color-text-muted);
8244
+ }
8245
+ .zx-kanban-view .zx-record-card__eyebrow-group .zx-record-card__value > :only-child {
8246
+ display: inline-flex;
8247
+ align-items: center;
8248
+ gap: var(--zx-space-1);
8249
+ min-inline-size: 0;
8250
+ }
8251
+ .zx-kanban-view .zx-record-card__title-row {
8252
+ display: flex;
8253
+ align-items: flex-start;
8254
+ gap: var(--zx-space-2);
8255
+ min-inline-size: 0;
8256
+ }
8257
+ .zx-kanban-view .zx-record-card__title-row .zx-record-card__heading {
8258
+ min-inline-size: 0;
8259
+ }
8260
+ .zx-kanban-view .zx-record-card__title-prefix {
8261
+ flex: none;
8262
+ padding-block-start: calc(var(--zx-space-1) + 1px);
8263
+ }
8264
+ .zx-kanban-view .zx-record-card__title-prefix .zx-record-card__value {
8265
+ display: grid;
8266
+ place-items: center;
8267
+ color: var(--zx-color-accent);
8268
+ line-height: 1;
8269
+ }
8270
+ .zx-kanban-view .zx-record-card__title-prefix .zx-icon {
8271
+ inline-size: .5rem;
8272
+ block-size: .5rem;
8273
+ }
8274
+ .zx-kanban-view .zx-record-card__title-prefix .zx-badge {
8275
+ border: 0;
8276
+ background: transparent;
8277
+ padding: 0;
7793
8278
  }
7794
8279
  .zx-kanban-view__cards[data-drop=append],
7795
8280
  .zx-kanban-view__cards[data-keyboard-target=append] {
@@ -7812,7 +8297,7 @@ body:has(> .zx-modal:modal) {
7812
8297
  .zx-kanban-view__empty {
7813
8298
  display: grid;
7814
8299
  place-items: center;
7815
- min-block-size: 160px;
8300
+ min-block-size: 6rem;
7816
8301
  color: var(--zx-color-text-muted);
7817
8302
  text-align: center;
7818
8303
  }
@@ -7828,14 +8313,38 @@ body:has(> .zx-modal:modal) {
7828
8313
  pointer-events: none;
7829
8314
  }
7830
8315
  @container (max-width: 420px) {
7831
- .zx-kanban-view__columns {
7832
- grid-auto-columns: minmax(240px, 88vw);
8316
+ .zx-kanban-view .zx-record-card__label {
8317
+ position: absolute;
8318
+ inline-size: 1px;
8319
+ block-size: 1px;
8320
+ overflow: hidden;
8321
+ clip-path: inset(50%);
8322
+ white-space: nowrap;
8323
+ }
8324
+ }
8325
+ @media (hover: none), (pointer: coarse) {
8326
+ .zx-kanban-view .zx-record-card__actions {
8327
+ opacity: 1;
8328
+ pointer-events: auto;
8329
+ }
8330
+ }
8331
+ @media (pointer: coarse) {
8332
+ .zx-kanban-view__collapse,
8333
+ .zx-kanban-view__move-handle,
8334
+ .zx-kanban-view .zx-record-card__action,
8335
+ .zx-kanban-view .zx-record-card__selection {
8336
+ inline-size: 2.75rem;
8337
+ min-block-size: 2.75rem;
7833
8338
  }
7834
8339
  }
8340
+ [data-zx-density=compact] .zx-kanban-view {
8341
+ --zx-kanban-card-padding-inline: var(--zx-space-2);
8342
+ }
7835
8343
  @media (prefers-reduced-motion: no-preference) {
7836
8344
  .zx-kanban-view__collapse,
7837
8345
  .zx-kanban-view__move-handle,
7838
- .zx-kanban-view .zx-record-card {
8346
+ .zx-kanban-view .zx-record-card,
8347
+ .zx-kanban-view .zx-record-card__actions {
7839
8348
  transition:
7840
8349
  color var(--zx-dur-fast) var(--zx-ease),
7841
8350
  background var(--zx-dur-fast) var(--zx-ease),
@@ -7843,6 +8352,143 @@ body:has(> .zx-modal:modal) {
7843
8352
  opacity var(--zx-dur-fast) var(--zx-ease);
7844
8353
  }
7845
8354
  }
8355
+ .zx-kanban-view__toolbar {
8356
+ display: flex;
8357
+ flex-wrap: wrap;
8358
+ align-items: center;
8359
+ gap: var(--zx-space-2);
8360
+ }
8361
+ .zx-kanban-view__search {
8362
+ position: relative;
8363
+ display: inline-flex;
8364
+ align-items: center;
8365
+ gap: var(--zx-space-1);
8366
+ min-inline-size: 0;
8367
+ }
8368
+ .zx-kanban-view__search > .zx-icon {
8369
+ position: absolute;
8370
+ inset-inline-start: var(--zx-control-pad-x);
8371
+ color: var(--zx-color-text-muted);
8372
+ pointer-events: none;
8373
+ }
8374
+ .zx-kanban-view__search-input {
8375
+ min-inline-size: 12rem;
8376
+ max-inline-size: 100%;
8377
+ padding-inline-start: calc(var(--zx-control-pad-x) * 2 + 13px);
8378
+ }
8379
+ .zx-kanban-view__search-input::-webkit-search-cancel-button {
8380
+ cursor: pointer;
8381
+ }
8382
+ .zx-kanban-view__history {
8383
+ display: inline-flex;
8384
+ gap: var(--zx-space-1);
8385
+ margin-inline-start: auto;
8386
+ }
8387
+ .zx-kanban-view[data-column-scroll=true] .zx-kanban-view__cards {
8388
+ max-block-size: var(--zx-kanban-column-height);
8389
+ overflow-y: auto;
8390
+ overscroll-behavior-block: contain;
8391
+ scrollbar-gutter: stable;
8392
+ }
8393
+ .zx-kanban-view__add {
8394
+ display: inline-flex;
8395
+ align-items: center;
8396
+ justify-content: center;
8397
+ gap: var(--zx-space-1);
8398
+ margin-block-start: var(--zx-space-2);
8399
+ border: 1px dashed var(--zx-color-border);
8400
+ border-radius: var(--zx-radius-md);
8401
+ background: transparent;
8402
+ padding-block: var(--zx-space-1);
8403
+ color: var(--zx-color-text-muted);
8404
+ font-size: var(--zx-text-xs);
8405
+ cursor: pointer;
8406
+ }
8407
+ .zx-kanban-view__add:hover {
8408
+ border-color: var(--zx-color-border-strong);
8409
+ background: var(--zx-color-bg-hover);
8410
+ color: var(--zx-color-text);
8411
+ }
8412
+ .zx-kanban-view__add:focus-visible {
8413
+ outline: none;
8414
+ box-shadow: var(--zx-focus-ring);
8415
+ }
8416
+ .zx-kanban-view__add[hidden] {
8417
+ display: none;
8418
+ }
8419
+ .zx-kanban-view__column-empty {
8420
+ display: grid;
8421
+ place-items: center;
8422
+ min-block-size: 4rem;
8423
+ padding: var(--zx-space-2);
8424
+ color: var(--zx-color-text-muted);
8425
+ font-size: var(--zx-text-xs);
8426
+ text-align: center;
8427
+ }
8428
+ .zx-kanban-view .zx-record-card[data-rule-tone] {
8429
+ position: relative;
8430
+ overflow: hidden;
8431
+ }
8432
+ .zx-kanban-view .zx-record-card[data-rule-tone]::before {
8433
+ position: absolute;
8434
+ inset-block: 0;
8435
+ inset-inline-start: 0;
8436
+ inline-size: 3px;
8437
+ background: var(--zx-color-border-strong);
8438
+ content: "";
8439
+ }
8440
+ .zx-kanban-view .zx-record-card[data-rule-tone=accent]::before {
8441
+ background: var(--zx-color-accent);
8442
+ }
8443
+ .zx-kanban-view .zx-record-card[data-rule-tone=success]::before {
8444
+ background: var(--zx-color-success);
8445
+ }
8446
+ .zx-kanban-view .zx-record-card[data-rule-tone=warning]::before {
8447
+ background: var(--zx-color-warning);
8448
+ }
8449
+ .zx-kanban-view .zx-record-card[data-rule-tone=danger]::before {
8450
+ background: var(--zx-color-danger);
8451
+ }
8452
+ .zx-kanban-view .zx-record-card[data-rule-tone=info]::before {
8453
+ background: var(--zx-color-info);
8454
+ }
8455
+ .zx-kanban-view__rules {
8456
+ display: flex;
8457
+ flex-wrap: wrap;
8458
+ gap: var(--zx-space-1);
8459
+ margin: 0;
8460
+ }
8461
+ .zx-kanban-view__board[data-dragging=true] {
8462
+ cursor: grabbing;
8463
+ user-select: none;
8464
+ }
8465
+ .zx-kanban-view__board[data-dragging=true] .zx-record-card {
8466
+ cursor: grabbing;
8467
+ }
8468
+ .zx-kanban-view__drag-preview {
8469
+ position: fixed;
8470
+ inset-block-start: 0;
8471
+ inset-inline-start: 0;
8472
+ z-index: 2;
8473
+ max-inline-size: var(--zx-kanban-column-width);
8474
+ border: 1px solid var(--zx-color-border);
8475
+ border-radius: var(--zx-radius-md);
8476
+ background: var(--zx-color-bg-raised);
8477
+ box-shadow: var(--zx-shadow-2);
8478
+ padding: var(--zx-space-1) var(--zx-space-2);
8479
+ color: var(--zx-color-text);
8480
+ font-size: var(--zx-text-xs);
8481
+ white-space: nowrap;
8482
+ overflow: hidden;
8483
+ text-overflow: ellipsis;
8484
+ pointer-events: none;
8485
+ translate: var(--zx-space-3) var(--zx-space-3);
8486
+ }
8487
+ @media (pointer: coarse) {
8488
+ .zx-kanban-view__add {
8489
+ min-block-size: 2.75rem;
8490
+ }
8491
+ }
7846
8492
 
7847
8493
  /* src/components/grid/grid.css */
7848
8494
  .zx-table[data-preset=billing-items] tr.zx-grid-billing__summary > td {