@zeyos/zx 4.1.1 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/DESIGN-SYSTEM.md +33 -3
  3. package/README.md +22 -5
  4. package/dist/types/components/app-icon/app-icon.d.ts +8 -1
  5. package/dist/types/components/aurora/aurora.d.ts +72 -0
  6. package/dist/types/components/calendar/calendar-model.d.ts +202 -0
  7. package/dist/types/components/calendar/calendar.d.ts +517 -0
  8. package/dist/types/components/card-view/card-view.d.ts +303 -0
  9. package/dist/types/components/card-view/record-card.d.ts +242 -0
  10. package/dist/types/components/dialog/dialog.d.ts +6 -1
  11. package/dist/types/components/dropdown/dropdown.d.ts +5 -0
  12. package/dist/types/components/kanban-view/kanban-view.d.ts +572 -0
  13. package/dist/types/components/launcher/launcher.d.ts +5 -0
  14. package/dist/types/components/message/message.d.ts +9 -1
  15. package/dist/types/components/modal/modal.d.ts +44 -7
  16. package/dist/types/components/sheet/sheet.d.ts +22 -12
  17. package/dist/types/components/table/table.d.ts +120 -31
  18. package/dist/types/components/table-view/table-view.d.ts +192 -0
  19. package/dist/types/components/view/record-view.d.ts +464 -0
  20. package/dist/types/core/overlay-host.d.ts +12 -0
  21. package/dist/types/index.d.ts +7 -0
  22. package/dist/types/zeyos/calendar.d.ts +91 -0
  23. package/dist/types/zeyos/icons.d.ts +18 -2
  24. package/dist/types/zeyos/index.d.ts +4 -0
  25. package/dist/types/zeyos/legacy-saved-views.d.ts +66 -0
  26. package/dist/types/zeyos/saved-views.d.ts +331 -0
  27. package/dist/types/zeyos/view.d.ts +305 -0
  28. package/dist/zx-zeyos.esm.js +4742 -1470
  29. package/dist/zx-zeyos.esm.min.js +1 -1
  30. package/dist/zx.css +2536 -471
  31. package/dist/zx.esm.js +5193 -223
  32. package/dist/zx.esm.min.js +3 -3
  33. package/dist/zx.global.js +5193 -223
  34. package/dist/zx.global.min.js +3 -3
  35. package/dist/zx.min.css +1 -1
  36. package/docs/api.json +1729 -182
  37. package/docs/llms.md +236 -32
  38. package/docs/llms.txt +16 -6
  39. package/package.json +1 -1
  40. package/src/components/account-menu/account-menu.css +1 -1
  41. package/src/components/app-icon/app-icon.css +77 -51
  42. package/src/components/app-icon/app-icon.js +28 -4
  43. package/src/components/app-rail/app-rail.css +12 -3
  44. package/src/components/app-sidebar/app-sidebar.css +11 -2
  45. package/src/components/aurora/aurora.css +143 -0
  46. package/src/components/aurora/aurora.js +146 -0
  47. package/src/components/avatar/avatar.css +1 -1
  48. package/src/components/button/button.css +2 -2
  49. package/src/components/calendar/calendar-model.js +402 -0
  50. package/src/components/calendar/calendar.css +609 -0
  51. package/src/components/calendar/calendar.js +1619 -0
  52. package/src/components/card/card.css +2 -2
  53. package/src/components/card-view/card-view.css +389 -0
  54. package/src/components/card-view/card-view.js +527 -0
  55. package/src/components/card-view/record-card.js +392 -0
  56. package/src/components/context-menu/context-menu.css +4 -4
  57. package/src/components/context-menu/context-menu.js +5 -1
  58. package/src/components/date-picker/date-picker.css +31 -12
  59. package/src/components/datebox/date-range-box.css +17 -2
  60. package/src/components/datebox/datebox.css +18 -3
  61. package/src/components/dialog/dialog.css +4 -3
  62. package/src/components/dialog/dialog.js +2 -1
  63. package/src/components/dropdown/dropdown.css +17 -3
  64. package/src/components/dropdown/dropdown.js +7 -2
  65. package/src/components/kanban-view/kanban-view.css +216 -0
  66. package/src/components/kanban-view/kanban-view.js +1228 -0
  67. package/src/components/launcher/launcher.css +24 -9
  68. package/src/components/launcher/launcher.js +9 -2
  69. package/src/components/master-panel/master-panel.css +14 -3
  70. package/src/components/menu-button/menu-button.css +4 -4
  71. package/src/components/message/message.css +13 -21
  72. package/src/components/message/message.js +17 -11
  73. package/src/components/modal/modal.css +19 -5
  74. package/src/components/modal/modal.js +99 -25
  75. package/src/components/navigation-bar/navigation-bar.css +17 -5
  76. package/src/components/panel/panel.css +10 -2
  77. package/src/components/select/select.css +26 -8
  78. package/src/components/sheet/sheet.css +28 -7
  79. package/src/components/sheet/sheet.js +43 -23
  80. package/src/components/table/table.css +83 -5
  81. package/src/components/table/table.js +322 -37
  82. package/src/components/table-view/table-view.css +18 -0
  83. package/src/components/table-view/table-view.js +347 -0
  84. package/src/components/tag-picker/tag-picker.css +18 -4
  85. package/src/components/tooltip/tooltip.css +17 -3
  86. package/src/components/tooltip/tooltip.js +4 -1
  87. package/src/components/view/record-view.css +114 -0
  88. package/src/components/view/record-view.js +770 -0
  89. package/src/core/overlay-host.js +23 -0
  90. package/src/index.js +15 -0
  91. package/src/zeyos/calendar.js +115 -0
  92. package/src/zeyos/icons.js +11 -4
  93. package/src/zeyos/index.js +13 -0
  94. package/src/zeyos/launcher.js +2 -2
  95. package/src/zeyos/legacy-saved-views.js +155 -0
  96. package/src/zeyos/saved-views.js +815 -0
  97. package/src/zeyos/table.js +3 -1
  98. package/src/zeyos/view.js +543 -0
  99. package/styles/icons.css +3 -10
  100. package/styles/tokens/dark.css +4 -0
  101. package/styles/tokens/semantic.css +142 -3
  102. package/styles/zx.css +6 -0
package/dist/zx.css CHANGED
@@ -171,26 +171,172 @@
171
171
  --zx-color-glass-highlight: color-mix(in srgb, var(--zx-gray-0) 24%, transparent);
172
172
  --zx-color-glass-highlight-strong: color-mix(in srgb, var(--zx-gray-0) 38%, transparent);
173
173
  --zx-color-app-icon-depth: color-mix(in srgb, var(--zx-color-app-icon-shade) 26%, transparent);
174
+ --zx-app-icon-core-strength: 52%;
175
+ --zx-app-icon-rim-strength: 58%;
176
+ --zx-app-icon-bloom-strength: 64%;
177
+ --zx-app-icon-specular-strength: 72%;
178
+ --zx-app-icon-rim-base: var(--zx-color-glass-highlight);
179
+ --zx-app-icon-halo-size: 14px;
180
+ --zx-app-icon-halo-strength: 22%;
174
181
  --zx-color-glass-surface: color-mix(in srgb, var(--zx-color-bg-raised) 78%, transparent);
182
+ --zx-color-glass-chrome: color-mix(in srgb, var(--zx-color-bg-surface) 90%, transparent);
175
183
  --zx-color-glass-control: color-mix(in srgb, var(--zx-color-bg-control) 88%, transparent);
176
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-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%);
177
224
  --zx-glass-blur: 8px;
178
225
  --zx-glass-saturation: 130%;
179
226
  --zx-glass-color-strength: 82%;
227
+ --zx-glass-filter-icon: blur(4px) saturate(118%);
228
+ --zx-glass-filter-control: blur(6px) saturate(116%);
229
+ --zx-glass-filter-raised: blur(8px) saturate(120%);
230
+ --zx-glass-filter-chrome: blur(10px) saturate(122%);
231
+ --zx-glass-filter-overlay: blur(16px) saturate(140%);
232
+ --zx-glass-filter-panel: blur(14px) saturate(132%);
180
233
  --zx-app-icon-shadow:
181
- inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 28%, transparent),
182
- inset 0 -1px 0 color-mix(in srgb, var(--zx-gray-950) 16%, transparent),
183
- 0 5px 14px color-mix(in srgb, var(--zx-color-app-icon-shade) 28%, transparent);
234
+ inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 14%, transparent),
235
+ inset 0 -1px 0 color-mix(in srgb, var(--zx-gray-950) 28%, transparent),
236
+ 0 2px 6px color-mix(in srgb, var(--zx-color-app-icon-shade) 24%, transparent);
184
237
  --zx-app-icon-shadow-hover:
185
- inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 40%, transparent),
186
- inset 0 -1px 0 color-mix(in srgb, var(--zx-gray-950) 20%, transparent),
187
- 0 9px 22px color-mix(in srgb, var(--zx-color-app-icon-shade) 36%, transparent);
238
+ inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 20%, transparent),
239
+ inset 0 -1px 0 color-mix(in srgb, var(--zx-gray-950) 32%, transparent),
240
+ 0 4px 10px color-mix(in srgb, var(--zx-color-app-icon-shade) 30%, transparent);
188
241
  --zx-glass-control-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 18%, transparent), var(--zx-shadow-1);
242
+ --zx-glass-chrome-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 16%, transparent), var(--zx-shadow-1);
189
243
  --zx-glass-raised-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 18%, transparent), var(--zx-overlay-shadow);
190
- --zx-glass-glyph-shadow: 0 1px 2px color-mix(in srgb, var(--zx-gray-950) 58%, transparent);
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);
191
252
  --zx-header-bg: var(--zx-gray-900);
192
253
  --zx-header-text: var(--zx-gray-50);
193
254
  }
255
+ @media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
256
+ :root,
257
+ .zx-scope,
258
+ [data-zx-theme],
259
+ [data-zx-density],
260
+ [data-zx-preset] {
261
+ --zx-color-glass-chrome: var(--zx-color-bg-surface) !important;
262
+ --zx-color-glass-surface: var(--zx-color-bg-raised) !important;
263
+ --zx-color-glass-control: var(--zx-color-bg-control) !important;
264
+ --zx-color-glass-control-hover: var(--zx-color-bg-hover) !important;
265
+ --zx-color-overlay-surface: var(--zx-color-bg-raised) !important;
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;
276
+ --zx-app-icon-core-strength: 68% !important;
277
+ --zx-app-icon-rim-strength: 62% !important;
278
+ --zx-app-icon-bloom-strength: 0% !important;
279
+ --zx-app-icon-specular-strength: 0% !important;
280
+ --zx-app-icon-rim-base: var(--zx-color-border) !important;
281
+ --zx-app-icon-halo-strength: 0% !important;
282
+ --zx-glass-filter-icon: none !important;
283
+ --zx-glass-filter-control: none !important;
284
+ --zx-glass-filter-raised: none !important;
285
+ --zx-glass-filter-chrome: none !important;
286
+ --zx-glass-filter-overlay: none !important;
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;
290
+ }
291
+ }
292
+ @media (forced-colors: active) {
293
+ :root,
294
+ .zx-scope,
295
+ [data-zx-theme],
296
+ [data-zx-density],
297
+ [data-zx-preset] {
298
+ --zx-color-glass-chrome: Canvas !important;
299
+ --zx-color-glass-surface: Canvas !important;
300
+ --zx-color-glass-control: ButtonFace !important;
301
+ --zx-color-glass-control-hover: Highlight !important;
302
+ --zx-color-overlay-surface: Canvas !important;
303
+ --zx-color-overlay-panel: Canvas !important;
304
+ --zx-color-overlay-backdrop: transparent !important;
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;
314
+ --zx-glass-control-shadow: none !important;
315
+ --zx-glass-chrome-shadow: none !important;
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;
338
+ }
339
+ }
194
340
 
195
341
  /* styles/tokens/dark.css */
196
342
  [data-zx-theme=dark] {
@@ -203,6 +349,8 @@
203
349
  --zx-color-bg-hover: color-mix(in srgb, var(--zx-gray-0) 8%, transparent);
204
350
  --zx-color-bg-selected: color-mix(in srgb, var(--zx-accent-400) 18%, var(--zx-gray-900));
205
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);
206
354
  --zx-color-border: color-mix(in srgb, var(--zx-gray-0) 10%, transparent);
207
355
  --zx-color-border-strong: color-mix(in srgb, var(--zx-gray-0) 28%, transparent);
208
356
  --zx-color-border-control: color-mix(in srgb, var(--zx-gray-0) 15%, transparent);
@@ -240,6 +388,8 @@
240
388
  --zx-color-bg-hover: color-mix(in srgb, var(--zx-gray-0) 8%, transparent);
241
389
  --zx-color-bg-selected: color-mix(in srgb, var(--zx-accent-400) 18%, var(--zx-gray-900));
242
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);
243
393
  --zx-color-border: color-mix(in srgb, var(--zx-gray-0) 10%, transparent);
244
394
  --zx-color-border-strong: color-mix(in srgb, var(--zx-gray-0) 28%, transparent);
245
395
  --zx-color-border-control: color-mix(in srgb, var(--zx-gray-0) 15%, transparent);
@@ -499,15 +649,8 @@ svg.zx-icon {
499
649
  vertical-align: middle;
500
650
  }
501
651
  .zx-module-icon {
502
- display: inline-grid;
503
- place-items: center;
504
652
  flex: none;
505
- inline-size: var(--zx-module-icon-size, 1.5rem);
506
- block-size: var(--zx-module-icon-size, 1.5rem);
507
- border-radius: var(--zx-radius-sm);
508
- background: var(--zx-module-color, var(--zx-module-default));
509
- color: var(--zx-module-glyph, var(--zx-module-fg-light));
510
- font-size: calc(var(--zx-module-icon-size, 1.5rem) * 0.6);
653
+ color: var(--zx-module-glyph, var(--zx-color-app-icon-glyph));
511
654
  }
512
655
 
513
656
  /* src/components/button/button.css */
@@ -527,8 +670,8 @@ svg.zx-icon {
527
670
  font-weight: var(--zx-control-font-weight);
528
671
  line-height: 1;
529
672
  cursor: pointer;
530
- -webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
531
- backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
673
+ -webkit-backdrop-filter: var(--zx-glass-filter-control);
674
+ backdrop-filter: var(--zx-glass-filter-control);
532
675
  box-shadow: var(--zx-glass-control-shadow);
533
676
  transition:
534
677
  color var(--zx-dur-fast) var(--zx-ease),
@@ -1461,8 +1604,8 @@ svg.zx-icon {
1461
1604
  .zx-card[data-variant=raised] {
1462
1605
  border: 1px solid var(--zx-color-glass-border);
1463
1606
  background: var(--zx-color-glass-surface);
1464
- -webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
1465
- backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
1607
+ -webkit-backdrop-filter: var(--zx-glass-filter-raised);
1608
+ backdrop-filter: var(--zx-glass-filter-raised);
1466
1609
  box-shadow: var(--zx-glass-raised-shadow);
1467
1610
  }
1468
1611
  .zx-card[data-variant=filled] {
@@ -1591,20 +1734,243 @@ svg.zx-icon {
1591
1734
  }
1592
1735
  }
1593
1736
 
1737
+ /* src/components/aurora/aurora.css */
1738
+ .zx-aurora {
1739
+ --zx-aurora-color-1: var(--zx-color-accent);
1740
+ --zx-aurora-color-2: var(--zx-color-info);
1741
+ --zx-aurora-color-3: var(--zx-color-success);
1742
+ --zx-aurora-color-4: var(--zx-color-warning);
1743
+ --zx-aurora-core: 7%;
1744
+ --zx-aurora-wash: 4%;
1745
+ --zx-aurora-faint: 2%;
1746
+ --zx-aurora-core-1: color-mix(in srgb, var(--zx-aurora-color-1) var(--zx-aurora-core), transparent);
1747
+ --zx-aurora-core-2: color-mix(in srgb, var(--zx-aurora-color-2) var(--zx-aurora-core), transparent);
1748
+ --zx-aurora-core-3: color-mix(in srgb, var(--zx-aurora-color-3) var(--zx-aurora-core), transparent);
1749
+ --zx-aurora-core-4: color-mix(in srgb, var(--zx-aurora-color-4) var(--zx-aurora-core), transparent);
1750
+ --zx-aurora-wash-1: color-mix(in srgb, var(--zx-aurora-color-1) var(--zx-aurora-wash), transparent);
1751
+ --zx-aurora-wash-2: color-mix(in srgb, var(--zx-aurora-color-2) var(--zx-aurora-wash), transparent);
1752
+ --zx-aurora-wash-3: color-mix(in srgb, var(--zx-aurora-color-3) var(--zx-aurora-wash), transparent);
1753
+ --zx-aurora-wash-4: color-mix(in srgb, var(--zx-aurora-color-4) var(--zx-aurora-wash), transparent);
1754
+ --zx-aurora-faint-1: color-mix(in srgb, var(--zx-aurora-color-1) var(--zx-aurora-faint), transparent);
1755
+ --zx-aurora-faint-2: color-mix(in srgb, var(--zx-aurora-color-2) var(--zx-aurora-faint), transparent);
1756
+ --zx-aurora-faint-3: color-mix(in srgb, var(--zx-aurora-color-3) var(--zx-aurora-faint), transparent);
1757
+ --zx-aurora-faint-4: color-mix(in srgb, var(--zx-aurora-color-4) var(--zx-aurora-faint), transparent);
1758
+ position: relative;
1759
+ isolation: isolate;
1760
+ }
1761
+ .zx-aurora[data-intensity=balanced] {
1762
+ --zx-aurora-core: 11%;
1763
+ --zx-aurora-wash: 6.5%;
1764
+ --zx-aurora-faint: 3%;
1765
+ }
1766
+ .zx-aurora[data-intensity=vivid] {
1767
+ --zx-aurora-core: 16%;
1768
+ --zx-aurora-wash: 9%;
1769
+ --zx-aurora-faint: 4.5%;
1770
+ }
1771
+ :is([data-zx-theme=dark] .zx-aurora, .zx-aurora[data-zx-theme=dark]) {
1772
+ --zx-aurora-core: 12%;
1773
+ --zx-aurora-wash: 7%;
1774
+ --zx-aurora-faint: 3%;
1775
+ }
1776
+ :is([data-zx-theme=dark] .zx-aurora, .zx-aurora[data-zx-theme=dark])[data-intensity=balanced] {
1777
+ --zx-aurora-core: 17%;
1778
+ --zx-aurora-wash: 10%;
1779
+ --zx-aurora-faint: 5%;
1780
+ }
1781
+ :is([data-zx-theme=dark] .zx-aurora, .zx-aurora[data-zx-theme=dark])[data-intensity=vivid] {
1782
+ --zx-aurora-core: 24%;
1783
+ --zx-aurora-wash: 14%;
1784
+ --zx-aurora-faint: 7%;
1785
+ }
1786
+ .zx-aurora::before {
1787
+ content: "";
1788
+ position: absolute;
1789
+ z-index: -1;
1790
+ inset: 0;
1791
+ border-radius: inherit;
1792
+ background-repeat: no-repeat;
1793
+ pointer-events: none;
1794
+ }
1795
+ .zx-aurora[data-preset=source]::before {
1796
+ background-image:
1797
+ radial-gradient(
1798
+ 94% 78% at 0% 0%,
1799
+ var(--zx-aurora-core-1) 0%,
1800
+ var(--zx-aurora-wash-1) 34%,
1801
+ transparent 72%),
1802
+ radial-gradient(
1803
+ 68% 54% at 72% 0%,
1804
+ var(--zx-aurora-wash-2) 0%,
1805
+ var(--zx-aurora-faint-2) 42%,
1806
+ transparent 74%),
1807
+ radial-gradient(
1808
+ 62% 74% at 100% 82%,
1809
+ var(--zx-aurora-wash-3) 0%,
1810
+ transparent 68%),
1811
+ radial-gradient(
1812
+ 58% 42% at 38% 100%,
1813
+ var(--zx-aurora-faint-4) 0%,
1814
+ transparent 72%);
1815
+ }
1816
+ .zx-aurora[data-preset=confluence]::before {
1817
+ background-image:
1818
+ radial-gradient(
1819
+ 108% 84% at 0% 0%,
1820
+ var(--zx-aurora-core-1) 0%,
1821
+ var(--zx-aurora-wash-1) 34%,
1822
+ transparent 70%),
1823
+ radial-gradient(
1824
+ 92% 72% at 100% 0%,
1825
+ var(--zx-aurora-core-2) 0%,
1826
+ var(--zx-aurora-wash-2) 36%,
1827
+ transparent 72%),
1828
+ radial-gradient(
1829
+ 78% 62% at 0% 100%,
1830
+ var(--zx-aurora-wash-3) 0%,
1831
+ transparent 70%),
1832
+ radial-gradient(
1833
+ 72% 64% at 100% 100%,
1834
+ var(--zx-aurora-wash-4) 0%,
1835
+ transparent 72%);
1836
+ }
1837
+ .zx-aurora[data-preset=horizon]::before {
1838
+ background-image:
1839
+ radial-gradient(
1840
+ 72% 28% at 8% 19%,
1841
+ var(--zx-aurora-core-1) 0%,
1842
+ var(--zx-aurora-wash-1) 48%,
1843
+ transparent 78%),
1844
+ radial-gradient(
1845
+ 68% 24% at 42% 23%,
1846
+ var(--zx-aurora-core-2) 0%,
1847
+ var(--zx-aurora-wash-2) 44%,
1848
+ transparent 78%),
1849
+ radial-gradient(
1850
+ 72% 26% at 76% 18%,
1851
+ var(--zx-aurora-core-3) 0%,
1852
+ var(--zx-aurora-wash-3) 46%,
1853
+ transparent 80%),
1854
+ radial-gradient(
1855
+ 54% 22% at 100% 26%,
1856
+ var(--zx-aurora-wash-4) 0%,
1857
+ transparent 78%);
1858
+ }
1859
+ .zx-aurora[data-preset=diagonal]::before {
1860
+ background-image:
1861
+ linear-gradient(
1862
+ 126deg,
1863
+ var(--zx-aurora-core-1) 0%,
1864
+ var(--zx-aurora-wash-1) 18%,
1865
+ transparent 44%),
1866
+ linear-gradient(
1867
+ 126deg,
1868
+ transparent 18%,
1869
+ var(--zx-aurora-wash-2) 42%,
1870
+ transparent 63%),
1871
+ linear-gradient(
1872
+ 126deg,
1873
+ transparent 44%,
1874
+ var(--zx-aurora-wash-3) 67%,
1875
+ transparent 84%),
1876
+ linear-gradient(
1877
+ 126deg,
1878
+ transparent 68%,
1879
+ var(--zx-aurora-wash-4) 90%,
1880
+ transparent 100%);
1881
+ }
1882
+ .zx-aurora[data-preset=edge]::before {
1883
+ background-image:
1884
+ radial-gradient(
1885
+ 38% 108% at 0% 18%,
1886
+ var(--zx-aurora-core-1) 0%,
1887
+ var(--zx-aurora-faint-1) 52%,
1888
+ transparent 78%),
1889
+ radial-gradient(
1890
+ 72% 34% at 72% 0%,
1891
+ var(--zx-aurora-wash-2) 0%,
1892
+ transparent 74%),
1893
+ radial-gradient(
1894
+ 38% 106% at 100% 84%,
1895
+ var(--zx-aurora-wash-3) 0%,
1896
+ transparent 74%),
1897
+ radial-gradient(
1898
+ 76% 32% at 32% 100%,
1899
+ var(--zx-aurora-wash-4) 0%,
1900
+ transparent 76%);
1901
+ }
1902
+ .zx-aurora[data-preset=curtain]::before {
1903
+ background-image:
1904
+ radial-gradient(
1905
+ 28% 112% at 10% 0%,
1906
+ var(--zx-aurora-core-1) 0%,
1907
+ var(--zx-aurora-faint-1) 52%,
1908
+ transparent 78%),
1909
+ radial-gradient(
1910
+ 26% 104% at 38% 0%,
1911
+ var(--zx-aurora-core-2) 0%,
1912
+ var(--zx-aurora-faint-2) 48%,
1913
+ transparent 76%),
1914
+ radial-gradient(
1915
+ 28% 110% at 67% 0%,
1916
+ var(--zx-aurora-core-3) 0%,
1917
+ var(--zx-aurora-faint-3) 50%,
1918
+ transparent 78%),
1919
+ radial-gradient(
1920
+ 26% 106% at 92% 0%,
1921
+ var(--zx-aurora-core-4) 0%,
1922
+ var(--zx-aurora-faint-4) 48%,
1923
+ transparent 76%);
1924
+ }
1925
+ @media (prefers-color-scheme: dark) {
1926
+ :is([data-zx-theme=auto] .zx-aurora, .zx-aurora[data-zx-theme=auto]) {
1927
+ --zx-aurora-core: 12%;
1928
+ --zx-aurora-wash: 7%;
1929
+ --zx-aurora-faint: 3%;
1930
+ }
1931
+ :is([data-zx-theme=auto] .zx-aurora, .zx-aurora[data-zx-theme=auto])[data-intensity=balanced] {
1932
+ --zx-aurora-core: 17%;
1933
+ --zx-aurora-wash: 10%;
1934
+ --zx-aurora-faint: 5%;
1935
+ }
1936
+ :is([data-zx-theme=auto] .zx-aurora, .zx-aurora[data-zx-theme=auto])[data-intensity=vivid] {
1937
+ --zx-aurora-core: 24%;
1938
+ --zx-aurora-wash: 14%;
1939
+ --zx-aurora-faint: 7%;
1940
+ }
1941
+ }
1942
+ @media (prefers-reduced-transparency: reduce), (forced-colors: active) {
1943
+ .zx-aurora::before {
1944
+ display: none;
1945
+ }
1946
+ }
1947
+ @media (prefers-contrast: more) {
1948
+ .zx-aurora::before {
1949
+ opacity: .35;
1950
+ }
1951
+ }
1952
+
1594
1953
  /* src/components/panel/panel.css */
1595
1954
  .zx-panel {
1596
1955
  overflow: hidden;
1597
1956
  border: 1px solid var(--zx-color-border);
1598
1957
  border-radius: var(--zx-radius-lg);
1599
1958
  background: var(--zx-color-bg-surface);
1600
- box-shadow: var(--zx-overlay-shadow);
1959
+ box-shadow: var(--zx-shadow-1);
1601
1960
  }
1602
1961
  .zx-panel__header {
1603
1962
  display: flex;
1604
1963
  align-items: center;
1605
1964
  gap: var(--zx-space-2);
1606
1965
  min-block-size: var(--zx-control-height);
1607
- background: var(--zx-panel-header-bg, var(--zx-color-bg-raised));
1966
+ background: var(--zx-panel-header-bg, var(--zx-color-glass-chrome));
1967
+ box-shadow: var(--zx-glass-chrome-shadow);
1968
+ }
1969
+ @media (prefers-reduced-transparency: reduce) {
1970
+ .zx-panel__header {
1971
+ background: var(--zx-panel-header-bg, var(--zx-color-bg-raised));
1972
+ box-shadow: none;
1973
+ }
1608
1974
  }
1609
1975
  .zx-panel__toggle {
1610
1976
  display: flex;
@@ -1700,7 +2066,7 @@ button.zx-panel__toggle:focus-visible {
1700
2066
  overflow: hidden;
1701
2067
  border: 1px solid var(--zx-color-border);
1702
2068
  border-radius: var(--zx-radius-lg);
1703
- background: var(--zx-color-bg-surface);
2069
+ background: var(--zx-color-glass-chrome);
1704
2070
  }
1705
2071
  .zx-master-panel__header {
1706
2072
  display: flex;
@@ -1708,9 +2074,9 @@ button.zx-panel__toggle:focus-visible {
1708
2074
  align-items: center;
1709
2075
  gap: var(--zx-space-4);
1710
2076
  min-block-size: calc(var(--zx-control-height) + var(--zx-space-4));
1711
- border-block-start: 4px solid var(--zx-master-panel-accent, var(--zx-module-default));
1712
2077
  border-block-end: 1px solid var(--zx-color-border);
1713
- background: var(--zx-color-bg-raised);
2078
+ background: var(--zx-color-glass-chrome);
2079
+ box-shadow: var(--zx-glass-chrome-shadow);
1714
2080
  padding: var(--zx-space-2) var(--zx-space-4);
1715
2081
  }
1716
2082
  .zx-master-panel__title {
@@ -1738,6 +2104,15 @@ button.zx-panel__toggle:focus-visible {
1738
2104
  padding: var(--zx-space-3) var(--zx-space-4);
1739
2105
  color: var(--zx-color-text-muted);
1740
2106
  }
2107
+ @media (prefers-reduced-transparency: reduce) {
2108
+ .zx-master-panel {
2109
+ background: var(--zx-color-bg-surface);
2110
+ }
2111
+ .zx-master-panel__header {
2112
+ background: var(--zx-color-bg-raised);
2113
+ box-shadow: none;
2114
+ }
2115
+ }
1741
2116
 
1742
2117
  /* src/components/tabbox/tabbox.css */
1743
2118
  .zx-tabbox {
@@ -1958,11 +2333,13 @@ button.zx-panel__toggle:focus-visible {
1958
2333
  min-inline-size: 0;
1959
2334
  align-items: center;
1960
2335
  gap: var(--zx-space-3);
1961
- border: 1px solid var(--zx-color-border);
2336
+ border: 1px solid var(--zx-color-glass-border);
1962
2337
  border-radius: var(--zx-radius-lg);
1963
- background: var(--zx-color-bg-raised);
2338
+ background: var(--zx-color-glass-chrome);
1964
2339
  padding: var(--zx-space-2) var(--zx-space-3);
1965
- box-shadow: var(--zx-overlay-shadow);
2340
+ -webkit-backdrop-filter: var(--zx-glass-filter-chrome);
2341
+ backdrop-filter: var(--zx-glass-filter-chrome);
2342
+ box-shadow: var(--zx-glass-chrome-shadow);
1966
2343
  }
1967
2344
  .zx-navigation-bar__brand {
1968
2345
  flex: none;
@@ -2042,9 +2419,18 @@ button.zx-panel__toggle:focus-visible {
2042
2419
  }
2043
2420
  .zx-navigation-bar__panels {
2044
2421
  border: 1px solid var(--zx-color-border);
2045
- border-block-start: 0;
2046
- border-radius: 0 0 var(--zx-radius-lg) var(--zx-radius-lg);
2422
+ border-radius: var(--zx-radius-lg);
2047
2423
  background: var(--zx-color-bg-surface);
2424
+ margin-block-start: var(--zx-space-2);
2425
+ }
2426
+ @media (prefers-reduced-transparency: reduce) {
2427
+ .zx-navigation-bar__bar {
2428
+ border-color: var(--zx-color-border);
2429
+ background: var(--zx-color-bg-raised);
2430
+ -webkit-backdrop-filter: none;
2431
+ backdrop-filter: none;
2432
+ box-shadow: var(--zx-overlay-shadow);
2433
+ }
2048
2434
  }
2049
2435
  .zx-navigation-bar__panel {
2050
2436
  padding: var(--zx-space-4);
@@ -2128,6 +2514,12 @@ button.zx-panel__toggle:focus-visible {
2128
2514
  --zx-app-icon-size: 36px;
2129
2515
  --zx-app-icon-glyph-size: 52%;
2130
2516
  --zx-app-icon-color: var(--zx-color-accent);
2517
+ --zx-app-icon-core: color-mix(in srgb, var(--zx-app-icon-color) var(--zx-app-icon-core-strength), var(--zx-color-app-icon-shade));
2518
+ --zx-app-icon-rim: color-mix(in srgb, var(--zx-app-icon-color) var(--zx-app-icon-rim-strength), var(--zx-app-icon-rim-base));
2519
+ --zx-app-icon-bloom: color-mix(in srgb, var(--zx-app-icon-color) var(--zx-app-icon-bloom-strength), transparent);
2520
+ --zx-app-icon-specular: color-mix(in srgb, var(--zx-color-glass-highlight-strong) var(--zx-app-icon-specular-strength), transparent);
2521
+ --zx-app-icon-halo: 0 0 var(--zx-app-icon-halo-size) color-mix(in srgb, var(--zx-app-icon-color) var(--zx-app-icon-halo-strength), transparent);
2522
+ --zx-app-icon-selected-ring: color-mix(in srgb, var(--zx-app-icon-color) 54%, transparent);
2131
2523
  position: relative;
2132
2524
  isolation: isolate;
2133
2525
  display: inline-grid;
@@ -2135,70 +2527,86 @@ button.zx-panel__toggle:focus-visible {
2135
2527
  flex: none;
2136
2528
  inline-size: var(--zx-app-icon-size);
2137
2529
  block-size: var(--zx-app-icon-size);
2138
- overflow: hidden;
2139
- border: 1px solid var(--zx-color-glass-border);
2530
+ overflow: visible;
2140
2531
  border-radius: max(var(--zx-radius-sm), calc(var(--zx-app-icon-size) * .12));
2141
- background: var(--zx-app-icon-color);
2142
- box-shadow: var(--zx-app-icon-shadow);
2143
2532
  color: var(--zx-app-icon-glyph, var(--zx-color-app-icon-glyph));
2144
2533
  font-size: var(--zx-app-icon-size);
2145
2534
  vertical-align: middle;
2146
- transform: translateZ(0);
2147
2535
  }
2148
- .zx-app-icon[data-glass=subtle],
2149
- .zx-app-icon[data-glass=strong] {
2536
+ .zx-app-icon[data-shape=circle] {
2537
+ border-radius: var(--zx-radius-full);
2538
+ }
2539
+ .zx-app-icon__surface {
2540
+ position: absolute;
2541
+ z-index: 0;
2542
+ inset: 0;
2543
+ display: grid;
2544
+ overflow: hidden;
2545
+ place-items: center;
2546
+ border: 1px solid var(--zx-app-icon-rim);
2547
+ border-radius: inherit;
2548
+ background: var(--zx-app-icon-core);
2549
+ box-shadow: var(--zx-app-icon-shadow);
2550
+ }
2551
+ .zx-app-icon[data-glass=subtle] .zx-app-icon__surface,
2552
+ .zx-app-icon[data-glass=strong] .zx-app-icon__surface {
2150
2553
  background:
2151
- linear-gradient(
2152
- 145deg,
2153
- var(--zx-color-glass-highlight-strong),
2154
- transparent 38%),
2155
- linear-gradient(
2156
- to bottom right,
2157
- transparent 42%,
2158
- var(--zx-color-app-icon-depth)),
2159
- color-mix(in srgb, var(--zx-app-icon-color) var(--zx-glass-color-strength), transparent);
2160
- -webkit-backdrop-filter: blur(calc(var(--zx-glass-blur) * .55)) saturate(var(--zx-glass-saturation));
2161
- backdrop-filter: blur(calc(var(--zx-glass-blur) * .55)) saturate(var(--zx-glass-saturation));
2162
- }
2163
- .zx-app-icon[data-glass=strong] {
2164
- -webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
2165
- backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
2554
+ radial-gradient(
2555
+ 112% 92% at 50% 122%,
2556
+ var(--zx-app-icon-bloom),
2557
+ transparent 64%),
2558
+ var(--zx-app-icon-core);
2559
+ -webkit-backdrop-filter: none;
2560
+ backdrop-filter: none;
2166
2561
  }
2167
- .zx-app-icon[data-glass=none] {
2168
- border-color: var(--zx-color-border);
2562
+ .zx-app-icon[data-glass=strong] .zx-app-icon__surface {
2563
+ box-shadow: var(--zx-app-icon-shadow-hover), var(--zx-app-icon-halo);
2564
+ }
2565
+ .zx-app-icon[data-glass=none] .zx-app-icon__surface {
2566
+ border-color: color-mix(in srgb, var(--zx-app-icon-color) 62%, var(--zx-color-border));
2567
+ background: color-mix(in srgb, var(--zx-app-icon-color) 72%, var(--zx-color-app-icon-shade));
2169
2568
  box-shadow: none;
2170
2569
  }
2171
2570
  .zx-app-icon[data-glass=none] .zx-app-icon__shine {
2172
2571
  display: none;
2173
2572
  }
2174
- .zx-app-icon[data-glass=none]::after {
2573
+ .zx-app-icon[data-glass=none] .zx-app-icon__surface::after {
2175
2574
  display: none;
2176
2575
  }
2177
- .zx-app-icon[data-selected] {
2178
- outline: 2px solid var(--zx-color-bg-page);
2179
- box-shadow: 0 0 0 3px var(--zx-color-ring), var(--zx-overlay-shadow);
2576
+ .zx-app-icon[data-selected] .zx-app-icon__surface {
2577
+ outline: none;
2578
+ box-shadow:
2579
+ 0 0 0 1px var(--zx-color-bg-page),
2580
+ 0 0 0 3px var(--zx-app-icon-selected-ring),
2581
+ var(--zx-app-icon-shadow-hover),
2582
+ var(--zx-app-icon-halo);
2180
2583
  }
2181
2584
  .zx-app-icon__shine {
2182
2585
  position: absolute;
2183
2586
  z-index: 1;
2184
- inset: 1px 13% auto;
2185
- block-size: 38%;
2186
- border-radius: 999px;
2587
+ inset: 2px 18% auto;
2588
+ block-size: 1px;
2589
+ border-radius: var(--zx-radius-full);
2187
2590
  background:
2188
2591
  linear-gradient(
2189
- to bottom,
2190
- var(--zx-color-glass-highlight-strong),
2592
+ 90deg,
2593
+ transparent,
2594
+ var(--zx-app-icon-specular),
2191
2595
  transparent);
2192
- filter: blur(1px);
2596
+ opacity: .72;
2193
2597
  pointer-events: none;
2194
2598
  }
2195
- .zx-app-icon::after {
2599
+ .zx-app-icon[data-glass=strong] .zx-app-icon__shine {
2600
+ opacity: .9;
2601
+ }
2602
+ .zx-app-icon__surface::after {
2196
2603
  content: "";
2197
2604
  position: absolute;
2198
2605
  z-index: 1;
2199
2606
  inset: 0;
2200
2607
  border-radius: inherit;
2201
- box-shadow: inset 0 0 0 1px var(--zx-color-glass-highlight);
2608
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--zx-color-glass-highlight) 56%, transparent);
2609
+ opacity: .56;
2202
2610
  pointer-events: none;
2203
2611
  }
2204
2612
  .zx-app-icon__glyph {
@@ -2214,7 +2622,7 @@ button.zx-panel__toggle:focus-visible {
2214
2622
  padding: 0;
2215
2623
  font-size: var(--zx-app-icon-glyph-size);
2216
2624
  line-height: 1;
2217
- filter: drop-shadow(var(--zx-glass-glyph-shadow));
2625
+ filter: none;
2218
2626
  transform: translate(-50%, -50%);
2219
2627
  }
2220
2628
  .zx-app-icon__glyph > .zx-icon,
@@ -2244,8 +2652,8 @@ button.zx-panel__toggle:focus-visible {
2244
2652
  .zx-app-icon__badge {
2245
2653
  position: absolute;
2246
2654
  z-index: 3;
2247
- inset-block-end: 1px;
2248
- inset-inline-end: 1px;
2655
+ inset-block-start: -3px;
2656
+ inset-inline-end: -3px;
2249
2657
  display: grid;
2250
2658
  place-items: center;
2251
2659
  min-inline-size: 14px;
@@ -2259,42 +2667,42 @@ button.zx-panel__toggle:focus-visible {
2259
2667
  font-weight: 700;
2260
2668
  line-height: 1;
2261
2669
  }
2262
- .zx-app-icon:hover {
2263
- border-color: var(--zx-color-glass-highlight-strong);
2264
- box-shadow: var(--zx-app-icon-shadow-hover);
2265
- filter: brightness(1.06) saturate(1.08);
2670
+ .zx-app-icon:is(a, button, [role=button]):not(:disabled):not([aria-disabled=true]):hover .zx-app-icon__surface,
2671
+ :is(a, button, [role=button]):not(:disabled):not([aria-disabled=true]):hover .zx-app-icon__surface {
2672
+ border-color: color-mix(in srgb, var(--zx-app-icon-color) 76%, var(--zx-color-glass-highlight-strong));
2673
+ box-shadow: var(--zx-app-icon-shadow-hover), var(--zx-app-icon-halo);
2674
+ filter: brightness(1.06) saturate(1.04);
2266
2675
  }
2267
- .zx-app-icon:focus-visible,
2268
- :is(a, button, [role=button]):focus-visible > .zx-app-icon {
2676
+ .zx-app-icon:is(a, button, [role=button]):not(:disabled):not([aria-disabled=true]):focus-visible .zx-app-icon__surface,
2677
+ :is(a, button, [role=button]):not(:disabled):not([aria-disabled=true]):focus-visible .zx-app-icon__surface {
2269
2678
  outline: none;
2270
- box-shadow: var(--zx-focus-ring), var(--zx-app-icon-shadow-hover);
2679
+ box-shadow:
2680
+ var(--zx-focus-ring),
2681
+ var(--zx-app-icon-shadow-hover),
2682
+ var(--zx-app-icon-halo);
2271
2683
  }
2272
2684
  @media (prefers-reduced-motion: no-preference) {
2273
- .zx-app-icon {
2685
+ .zx-app-icon__surface {
2274
2686
  transition:
2275
2687
  border-color var(--zx-dur-fast) var(--zx-ease),
2276
2688
  box-shadow var(--zx-dur-fast) var(--zx-ease),
2277
- filter var(--zx-dur-fast) var(--zx-ease),
2278
- transform var(--zx-dur-fast) var(--zx-ease);
2279
- }
2280
- .zx-app-icon:hover {
2281
- transform: translateY(-2px) scale(1.035);
2689
+ filter var(--zx-dur-fast) var(--zx-ease);
2282
2690
  }
2283
2691
  }
2284
2692
  @media (prefers-reduced-transparency: reduce) {
2285
- .zx-app-icon[data-glass=strong] {
2286
- background: var(--zx-app-icon-color);
2693
+ .zx-app-icon[data-glass=strong] .zx-app-icon__surface {
2694
+ background: var(--zx-app-icon-core);
2287
2695
  -webkit-backdrop-filter: none;
2288
2696
  backdrop-filter: none;
2289
2697
  }
2290
- .zx-app-icon[data-glass=subtle] {
2291
- background: var(--zx-app-icon-color);
2698
+ .zx-app-icon[data-glass=subtle] .zx-app-icon__surface {
2699
+ background: var(--zx-app-icon-core);
2292
2700
  -webkit-backdrop-filter: none;
2293
2701
  backdrop-filter: none;
2294
2702
  }
2295
2703
  }
2296
2704
  @media (forced-colors: active) {
2297
- .zx-app-icon {
2705
+ .zx-app-icon__surface {
2298
2706
  border-color: ButtonText;
2299
2707
  background: ButtonFace;
2300
2708
  color: ButtonText;
@@ -2304,25 +2712,43 @@ button.zx-panel__toggle:focus-visible {
2304
2712
  -webkit-backdrop-filter: none;
2305
2713
  backdrop-filter: none;
2306
2714
  }
2307
- .zx-app-icon::after,
2715
+ .zx-app-icon__surface::after,
2308
2716
  .zx-app-icon__shine {
2309
2717
  display: none;
2310
2718
  }
2719
+ .zx-app-icon__badge {
2720
+ border-color: Canvas;
2721
+ background: Highlight;
2722
+ color: HighlightText;
2723
+ }
2311
2724
  }
2312
2725
 
2313
2726
  /* src/components/launcher/launcher.css */
2314
2727
  .zx-launcher {
2315
2728
  inline-size: min(760px, calc(100vw - (2 * var(--zx-space-4))));
2316
2729
  max-block-size: min(720px, calc(100vh - (2 * var(--zx-space-6))));
2317
- border: 1px solid var(--zx-color-border);
2730
+ border: 1px solid var(--zx-color-overlay-border);
2318
2731
  border-radius: var(--zx-radius-xl);
2319
- background: var(--zx-color-bg-raised);
2320
- box-shadow: var(--zx-overlay-shadow);
2732
+ background-color: var(--zx-color-overlay-panel);
2733
+ background-image: var(--zx-overlay-panel-image);
2734
+ background-clip: padding-box;
2735
+ -webkit-backdrop-filter: var(--zx-glass-filter-panel);
2736
+ backdrop-filter: var(--zx-glass-filter-panel);
2737
+ box-shadow: var(--zx-glass-panel-shadow);
2321
2738
  color: var(--zx-color-text);
2322
2739
  padding: 0;
2323
2740
  }
2741
+ @media (prefers-reduced-transparency: reduce) {
2742
+ .zx-launcher {
2743
+ border-color: var(--zx-color-border);
2744
+ background: var(--zx-color-bg-raised);
2745
+ -webkit-backdrop-filter: none;
2746
+ backdrop-filter: none;
2747
+ box-shadow: var(--zx-overlay-shadow);
2748
+ }
2749
+ }
2324
2750
  .zx-launcher::backdrop {
2325
- background: var(--zx-color-bg-backdrop);
2751
+ background: var(--zx-color-overlay-backdrop);
2326
2752
  }
2327
2753
  .zx-launcher__surface {
2328
2754
  display: grid;
@@ -2334,7 +2760,7 @@ button.zx-panel__toggle:focus-visible {
2334
2760
  grid-template-columns: auto minmax(0, 1fr) auto auto;
2335
2761
  align-items: center;
2336
2762
  gap: var(--zx-space-3);
2337
- border-block-end: 1px solid var(--zx-color-border);
2763
+ border-block-end: 1px solid var(--zx-color-overlay-divider);
2338
2764
  padding: var(--zx-space-3) var(--zx-space-4);
2339
2765
  }
2340
2766
  .zx-launcher__search[data-shortcut=false] {
@@ -2417,10 +2843,11 @@ button.zx-panel__toggle:focus-visible {
2417
2843
  }
2418
2844
  .zx-launcher__option[aria-selected=true],
2419
2845
  .zx-launcher__option:hover {
2420
- background: var(--zx-color-bg-hover);
2846
+ background: var(--zx-color-overlay-hover);
2421
2847
  }
2422
2848
  .zx-launcher__option[aria-current=page] {
2423
- box-shadow: inset 2px 0 var(--zx-color-accent);
2849
+ background: var(--zx-color-overlay-selected);
2850
+ color: var(--zx-color-accent);
2424
2851
  }
2425
2852
  .zx-launcher__option[data-kind=application] {
2426
2853
  display: grid;
@@ -2432,7 +2859,7 @@ button.zx-panel__toggle:focus-visible {
2432
2859
  text-align: center;
2433
2860
  }
2434
2861
  .zx-launcher__option[data-kind=application][aria-current=page] {
2435
- box-shadow: inset 0 -2px var(--zx-color-accent);
2862
+ background: var(--zx-color-overlay-selected);
2436
2863
  }
2437
2864
  .zx-launcher__option[data-kind=application] .zx-launcher__icon {
2438
2865
  min-block-size: 36px;
@@ -2486,7 +2913,7 @@ button.zx-panel__toggle:focus-visible {
2486
2913
  justify-content: end;
2487
2914
  gap: var(--zx-space-4);
2488
2915
  padding: var(--zx-space-2) var(--zx-space-4);
2489
- border-block-start: 1px solid var(--zx-color-border);
2916
+ border-block-start: 1px solid var(--zx-color-overlay-divider);
2490
2917
  color: var(--zx-color-text-muted);
2491
2918
  font-size: var(--zx-text-xs);
2492
2919
  }
@@ -2562,7 +2989,7 @@ button.zx-panel__toggle:focus-visible {
2562
2989
  display: grid;
2563
2990
  place-items: center;
2564
2991
  border: 1px solid var(--zx-color-border);
2565
- background: var(--zx-color-bg-subtle);
2992
+ background: var(--zx-color-bg-muted);
2566
2993
  font-size: calc(var(--zx-avatar-size) * .34);
2567
2994
  font-weight: 700;
2568
2995
  line-height: 1;
@@ -2648,7 +3075,7 @@ button.zx-panel__toggle:focus-visible {
2648
3075
  min-inline-size: 220px;
2649
3076
  gap: 2px;
2650
3077
  margin: calc(-1 * var(--zx-space-1)) calc(-1 * var(--zx-space-1)) var(--zx-space-1);
2651
- border-block-end: 1px solid var(--zx-color-border);
3078
+ border-block-end: 1px solid var(--zx-color-overlay-divider);
2652
3079
  padding: var(--zx-space-3);
2653
3080
  }
2654
3081
  .zx-account-menu__panel-identity span {
@@ -2660,8 +3087,9 @@ button.zx-panel__toggle:focus-visible {
2660
3087
  .zx-app-rail {
2661
3088
  display: flex;
2662
3089
  min-inline-size: 0;
2663
- border: 1px solid var(--zx-color-border);
2664
- background: var(--zx-color-bg-raised);
3090
+ border: 1px solid var(--zx-color-glass-border);
3091
+ background: var(--zx-color-glass-chrome);
3092
+ box-shadow: var(--zx-glass-chrome-shadow);
2665
3093
  color: var(--zx-color-text);
2666
3094
  }
2667
3095
  .zx-app-rail[data-orientation=vertical] {
@@ -2797,7 +3225,7 @@ button.zx-panel__toggle:focus-visible {
2797
3225
  .zx-app-rail__flyout-item:hover,
2798
3226
  .zx-app-rail__flyout-item:focus-visible,
2799
3227
  .zx-app-rail__flyout-item[aria-current=page] {
2800
- background: var(--zx-color-bg-hover);
3228
+ background: var(--zx-color-overlay-hover);
2801
3229
  color: var(--zx-color-accent);
2802
3230
  }
2803
3231
  .zx-app-rail__flyout-item-icon {
@@ -2817,13 +3245,21 @@ button.zx-panel__toggle:focus-visible {
2817
3245
  grid-column: 4;
2818
3246
  color: var(--zx-color-text-muted);
2819
3247
  }
3248
+ @media (prefers-reduced-transparency: reduce) {
3249
+ .zx-app-rail {
3250
+ border-color: var(--zx-color-border);
3251
+ background: var(--zx-color-bg-surface);
3252
+ box-shadow: none;
3253
+ }
3254
+ }
2820
3255
 
2821
3256
  /* src/components/app-sidebar/app-sidebar.css */
2822
3257
  .zx-app-sidebar {
2823
3258
  display: flex;
2824
3259
  min-block-size: 0;
2825
- border: 1px solid var(--zx-color-border);
2826
- background: var(--zx-color-bg-raised);
3260
+ border: 1px solid var(--zx-color-glass-border);
3261
+ background: var(--zx-color-glass-chrome);
3262
+ box-shadow: var(--zx-glass-chrome-shadow);
2827
3263
  color: var(--zx-color-text);
2828
3264
  }
2829
3265
  .zx-app-sidebar[data-orientation=horizontal] {
@@ -2928,6 +3364,13 @@ button.zx-panel__toggle:focus-visible {
2928
3364
  display: grid;
2929
3365
  gap: var(--zx-space-1);
2930
3366
  }
3367
+ @media (prefers-reduced-transparency: reduce) {
3368
+ .zx-app-sidebar {
3369
+ border-color: var(--zx-color-border);
3370
+ background: var(--zx-color-bg-surface);
3371
+ box-shadow: none;
3372
+ }
3373
+ }
2931
3374
 
2932
3375
  /* src/components/message/message.css */
2933
3376
  .zx-message {
@@ -2961,11 +3404,10 @@ button.zx-panel__toggle:focus-visible {
2961
3404
  grid-template-columns: auto minmax(0, 1fr) auto;
2962
3405
  align-items: start;
2963
3406
  gap: var(--zx-space-3);
2964
- border: 1px solid var(--zx-color-border);
2965
- border-inline-start: 4px solid var(--zx-message-kind);
3407
+ border: 1px solid var(--zx-color-overlay-border);
2966
3408
  border-radius: var(--zx-radius-md);
2967
3409
  background: var(--zx-color-info-bg);
2968
- box-shadow: var(--zx-overlay-shadow);
3410
+ box-shadow: inset 0 0 0 1px var(--zx-message-kind), var(--zx-glass-raised-shadow);
2969
3411
  padding: var(--zx-space-3);
2970
3412
  color: var(--zx-color-text);
2971
3413
  }
@@ -2981,27 +3423,23 @@ button.zx-panel__toggle:focus-visible {
2981
3423
  --zx-message-kind: var(--zx-color-danger);
2982
3424
  background: var(--zx-color-danger-bg);
2983
3425
  }
2984
- @supports (backdrop-filter: blur(1px)) {
3426
+ @supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
2985
3427
  .zx-message__toast {
2986
- background: color-mix(in srgb, var(--zx-color-info-bg) 38%, var(--zx-color-glass-surface));
2987
- -webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
2988
- backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
2989
- box-shadow: var(--zx-glass-raised-shadow);
2990
- }
2991
- .zx-message__toast[data-kind=success] {
2992
- background: color-mix(in srgb, var(--zx-color-success-bg) 38%, var(--zx-color-glass-surface));
2993
- }
2994
- .zx-message__toast[data-kind=warning] {
2995
- background: color-mix(in srgb, var(--zx-color-warning-bg) 38%, var(--zx-color-glass-surface));
2996
- }
2997
- .zx-message__toast[data-kind=error] {
2998
- background: color-mix(in srgb, var(--zx-color-danger-bg) 38%, var(--zx-color-glass-surface));
3428
+ border-color: color-mix(in srgb, var(--zx-message-kind) 28%, var(--zx-color-overlay-border));
3429
+ background-color: var(--zx-color-overlay-surface);
3430
+ background-image: var(--zx-overlay-toast-image);
3431
+ background-clip: padding-box;
3432
+ -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
3433
+ backdrop-filter: var(--zx-glass-filter-overlay);
3434
+ box-shadow: var(--zx-glass-overlay-shadow);
2999
3435
  }
3000
3436
  }
3001
3437
  @media (prefers-reduced-transparency: reduce) {
3002
3438
  .zx-message__toast {
3439
+ border-color: var(--zx-color-border);
3003
3440
  -webkit-backdrop-filter: none;
3004
3441
  backdrop-filter: none;
3442
+ box-shadow: var(--zx-overlay-shadow);
3005
3443
  }
3006
3444
  .zx-message__toast[data-kind=info] {
3007
3445
  background: var(--zx-color-info-bg);
@@ -3033,7 +3471,7 @@ button.zx-panel__toggle:focus-visible {
3033
3471
  block-size: 4px;
3034
3472
  margin-block-start: var(--zx-space-2);
3035
3473
  border-radius: var(--zx-radius-full);
3036
- background: var(--zx-color-border);
3474
+ background: var(--zx-color-overlay-divider);
3037
3475
  }
3038
3476
  .zx-message__progress-fill {
3039
3477
  display: block;
@@ -3078,20 +3516,33 @@ button.zx-panel__toggle:focus-visible {
3078
3516
  max-inline-size: calc(100vw - (2 * var(--zx-space-4)));
3079
3517
  max-block-size: calc(100vh - (2 * var(--zx-space-4)));
3080
3518
  overflow: auto;
3081
- border: 1px solid var(--zx-color-border);
3519
+ border: 1px solid var(--zx-color-overlay-border);
3082
3520
  border-radius: var(--zx-radius-lg);
3083
- background: var(--zx-color-bg-raised);
3084
- box-shadow: var(--zx-overlay-shadow);
3521
+ background-color: var(--zx-color-overlay-panel);
3522
+ background-image: var(--zx-overlay-panel-image);
3523
+ background-clip: padding-box;
3524
+ -webkit-backdrop-filter: var(--zx-glass-filter-panel);
3525
+ backdrop-filter: var(--zx-glass-filter-panel);
3526
+ box-shadow: var(--zx-glass-panel-shadow);
3085
3527
  color: var(--zx-color-text);
3086
3528
  padding: 0;
3087
3529
  }
3530
+ @media (prefers-reduced-transparency: reduce) {
3531
+ .zx-modal {
3532
+ border-color: var(--zx-color-border);
3533
+ background: var(--zx-color-bg-raised);
3534
+ -webkit-backdrop-filter: none;
3535
+ backdrop-filter: none;
3536
+ box-shadow: var(--zx-overlay-shadow);
3537
+ }
3538
+ }
3088
3539
  .zx-modal::backdrop {
3089
- background: var(--zx-color-bg-backdrop);
3540
+ background: var(--zx-color-overlay-backdrop);
3090
3541
  }
3091
3542
  .zx-modal__content {
3092
3543
  padding: var(--zx-space-5);
3093
3544
  }
3094
- body:has(> .zx-modal:modal) {
3545
+ body:has(.zx-modal:modal) {
3095
3546
  overflow: hidden;
3096
3547
  overscroll-behavior: none;
3097
3548
  }
@@ -3120,7 +3571,8 @@ body:has(> .zx-modal:modal) {
3120
3571
  grid-template-rows: auto minmax(0, 1fr) auto;
3121
3572
  padding: 0;
3122
3573
  }
3123
- .zx-dialog[open] {
3574
+ .zx-dialog[open],
3575
+ .zx-dialog:popover-open {
3124
3576
  display: grid;
3125
3577
  }
3126
3578
  .zx-dialog__header,
@@ -3132,7 +3584,7 @@ body:has(> .zx-modal:modal) {
3132
3584
  }
3133
3585
  .zx-dialog__header {
3134
3586
  justify-content: space-between;
3135
- border-block-end: 1px solid var(--zx-color-border);
3587
+ border-block-end: 1px solid var(--zx-color-overlay-divider);
3136
3588
  }
3137
3589
  .zx-dialog__title {
3138
3590
  margin: 0;
@@ -3151,7 +3603,7 @@ body:has(> .zx-modal:modal) {
3151
3603
  }
3152
3604
  .zx-dialog__footer {
3153
3605
  justify-content: flex-end;
3154
- border-block-start: 1px solid var(--zx-color-border);
3606
+ border-block-start: 1px solid var(--zx-color-overlay-divider);
3155
3607
  }
3156
3608
  .zx-dialog__footer[hidden] {
3157
3609
  display: none;
@@ -3188,7 +3640,7 @@ body:has(> .zx-modal:modal) {
3188
3640
  border: 0;
3189
3641
  border-radius: 0;
3190
3642
  overflow: hidden;
3191
- box-shadow: var(--zx-overlay-shadow);
3643
+ box-shadow: var(--zx-glass-panel-shadow);
3192
3644
  }
3193
3645
  .zx-sheet[data-side=start],
3194
3646
  .zx-sheet[data-side=end] {
@@ -3199,13 +3651,13 @@ body:has(> .zx-modal:modal) {
3199
3651
  .zx-sheet[data-side=start] {
3200
3652
  inset-inline-start: 0;
3201
3653
  inset-inline-end: auto;
3202
- border-inline-end: 1px solid var(--zx-color-border);
3654
+ border-inline-end: 1px solid var(--zx-color-overlay-border);
3203
3655
  --zx-sheet-enter: -100% 0;
3204
3656
  }
3205
3657
  .zx-sheet[data-side=end] {
3206
3658
  inset-inline-start: auto;
3207
3659
  inset-inline-end: 0;
3208
- border-inline-start: 1px solid var(--zx-color-border);
3660
+ border-inline-start: 1px solid var(--zx-color-overlay-border);
3209
3661
  --zx-sheet-enter: 100% 0;
3210
3662
  }
3211
3663
  [dir=rtl] .zx-sheet[data-side=start] {
@@ -3223,7 +3675,7 @@ body:has(> .zx-modal:modal) {
3223
3675
  .zx-sheet[data-side=top] {
3224
3676
  inset-block-start: 0;
3225
3677
  inset-block-end: auto;
3226
- border-block-end: 1px solid var(--zx-color-border);
3678
+ border-block-end: 1px solid var(--zx-color-overlay-border);
3227
3679
  border-end-start-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
3228
3680
  border-end-end-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
3229
3681
  --zx-sheet-enter: 0 -100%;
@@ -3231,7 +3683,7 @@ body:has(> .zx-modal:modal) {
3231
3683
  .zx-sheet[data-side=bottom] {
3232
3684
  inset-block-start: auto;
3233
3685
  inset-block-end: 0;
3234
- border-block-start: 1px solid var(--zx-color-border);
3686
+ border-block-start: 1px solid var(--zx-color-overlay-border);
3235
3687
  border-start-start-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
3236
3688
  border-start-end-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
3237
3689
  --zx-sheet-enter: 0 100%;
@@ -3240,8 +3692,21 @@ body:has(> .zx-modal:modal) {
3240
3692
  background: transparent;
3241
3693
  }
3242
3694
  .zx-sheet[data-backdrop=blur]::backdrop {
3695
+ -webkit-backdrop-filter: blur(var(--zx-overlay-blur));
3243
3696
  backdrop-filter: blur(var(--zx-overlay-blur));
3244
3697
  }
3698
+ .zx-sheet[data-modality=none]::backdrop,
3699
+ .zx-sheet[data-modality=trap-focus]::backdrop {
3700
+ background: transparent;
3701
+ -webkit-backdrop-filter: none;
3702
+ backdrop-filter: none;
3703
+ }
3704
+ @media (prefers-reduced-transparency: reduce), (prefers-contrast: more), (forced-colors: active) {
3705
+ .zx-sheet[data-backdrop=blur]::backdrop {
3706
+ -webkit-backdrop-filter: none;
3707
+ backdrop-filter: none;
3708
+ }
3709
+ }
3245
3710
  @media (prefers-reduced-motion: no-preference) {
3246
3711
  .zx-sheet {
3247
3712
  transition:
@@ -3253,12 +3718,13 @@ body:has(> .zx-modal:modal) {
3253
3718
  .zx-sheet[data-state=open] {
3254
3719
  animation: none;
3255
3720
  }
3256
- .zx-sheet:not([open]) {
3721
+ .zx-sheet:not([open]):not(:popover-open) {
3257
3722
  translate: var(--zx-sheet-enter, 0 0);
3258
3723
  opacity: 0;
3259
3724
  }
3260
3725
  @starting-style {
3261
- .zx-sheet[open] {
3726
+ .zx-sheet[open],
3727
+ .zx-sheet:popover-open {
3262
3728
  translate: var(--zx-sheet-enter, 0 0);
3263
3729
  opacity: 0;
3264
3730
  }
@@ -3292,6 +3758,9 @@ body:has(> .zx-modal:modal) {
3292
3758
  min-inline-size: 0;
3293
3759
  min-block-size: 0;
3294
3760
  border-radius: 0;
3761
+ background: var(--zx-color-bg-raised);
3762
+ -webkit-backdrop-filter: none;
3763
+ backdrop-filter: none;
3295
3764
  box-shadow: none;
3296
3765
  }
3297
3766
  .zx-dock[data-orientation=vertical] > .zx-sheet[data-docked] {
@@ -3455,13 +3924,26 @@ body:has(> .zx-modal:modal) {
3455
3924
  max-inline-size: calc(100vw - (2 * var(--zx-space-3)));
3456
3925
  max-block-size: calc(100vh - (2 * var(--zx-space-3)));
3457
3926
  overflow: auto;
3458
- border: 1px solid var(--zx-color-border);
3927
+ border: 1px solid var(--zx-color-overlay-border);
3459
3928
  border-radius: var(--zx-radius-md);
3460
- background: var(--zx-color-bg-raised);
3461
- box-shadow: var(--zx-overlay-shadow);
3929
+ background-color: var(--zx-color-overlay-surface);
3930
+ background-image: var(--zx-overlay-surface-image);
3931
+ background-clip: padding-box;
3932
+ -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
3933
+ backdrop-filter: var(--zx-glass-filter-overlay);
3934
+ box-shadow: var(--zx-glass-overlay-shadow);
3462
3935
  color: var(--zx-color-text);
3463
3936
  padding: var(--zx-space-3);
3464
3937
  }
3938
+ @media (prefers-reduced-transparency: reduce) {
3939
+ .zx-dropdown {
3940
+ border-color: var(--zx-color-border);
3941
+ background: var(--zx-color-bg-raised);
3942
+ -webkit-backdrop-filter: none;
3943
+ backdrop-filter: none;
3944
+ box-shadow: var(--zx-overlay-shadow);
3945
+ }
3946
+ }
3465
3947
  @media (prefers-reduced-motion: no-preference) {
3466
3948
  .zx-dropdown:popover-open {
3467
3949
  animation: zx-dropdown-enter var(--zx-dur-fast) var(--zx-ease);
@@ -3477,10 +3959,14 @@ body:has(> .zx-modal:modal) {
3477
3959
  /* src/components/tooltip/tooltip.css */
3478
3960
  .zx-tooltip {
3479
3961
  max-inline-size: var(--zx-tooltip-max-inline-size, 260px);
3480
- border: 1px solid var(--zx-color-border);
3962
+ border: 1px solid var(--zx-color-overlay-border);
3481
3963
  border-radius: var(--zx-radius-md);
3482
- background: var(--zx-color-bg-raised);
3483
- box-shadow: var(--zx-overlay-shadow);
3964
+ background-color: var(--zx-color-overlay-surface);
3965
+ background-image: var(--zx-overlay-surface-image);
3966
+ background-clip: padding-box;
3967
+ -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
3968
+ backdrop-filter: var(--zx-glass-filter-overlay);
3969
+ box-shadow: var(--zx-glass-overlay-shadow);
3484
3970
  padding: var(--zx-space-1) var(--zx-space-2);
3485
3971
  color: var(--zx-color-text);
3486
3972
  font-size: var(--zx-text-sm);
@@ -3490,6 +3976,15 @@ body:has(> .zx-modal:modal) {
3490
3976
  pointer-events: none;
3491
3977
  user-select: none;
3492
3978
  }
3979
+ @media (prefers-reduced-transparency: reduce) {
3980
+ .zx-tooltip {
3981
+ border-color: var(--zx-color-border);
3982
+ background: var(--zx-color-bg-raised);
3983
+ -webkit-backdrop-filter: none;
3984
+ backdrop-filter: none;
3985
+ box-shadow: var(--zx-overlay-shadow);
3986
+ }
3987
+ }
3493
3988
  @media (prefers-reduced-motion: no-preference) {
3494
3989
  .zx-tooltip:popover-open {
3495
3990
  animation: zx-tooltip-enter var(--zx-dur-fast) var(--zx-ease);
@@ -3821,14 +4316,14 @@ body:has(> .zx-modal:modal) {
3821
4316
  gap: var(--zx-space-2);
3822
4317
  inline-size: 100%;
3823
4318
  min-block-size: var(--zx-control-height);
3824
- border-color: var(--zx-color-bg-raised);
3825
- background: var(--zx-color-bg-raised);
4319
+ border-color: transparent;
4320
+ background: transparent;
3826
4321
  padding-inline: var(--zx-control-pad-x);
3827
4322
  text-align: start;
3828
4323
  }
3829
4324
  .zx-menu-button__item:hover,
3830
4325
  .zx-menu-button__item:focus-visible {
3831
- background: var(--zx-color-bg-hover);
4326
+ background: var(--zx-color-overlay-hover);
3832
4327
  }
3833
4328
  .zx-menu-button__item[data-danger=true] {
3834
4329
  color: var(--zx-color-danger);
@@ -3845,7 +4340,7 @@ body:has(> .zx-modal:modal) {
3845
4340
  .zx-menu-button__separator {
3846
4341
  block-size: 1px;
3847
4342
  margin: var(--zx-space-1) var(--zx-space-2);
3848
- background: var(--zx-color-border);
4343
+ background: var(--zx-color-overlay-divider);
3849
4344
  }
3850
4345
 
3851
4346
  /* src/components/context-menu/context-menu.css */
@@ -3865,14 +4360,14 @@ body:has(> .zx-modal:modal) {
3865
4360
  gap: var(--zx-space-2);
3866
4361
  inline-size: 100%;
3867
4362
  min-block-size: var(--zx-control-height);
3868
- border-color: var(--zx-color-bg-raised);
3869
- background: var(--zx-color-bg-raised);
4363
+ border-color: transparent;
4364
+ background: transparent;
3870
4365
  padding-inline: var(--zx-control-pad-x);
3871
4366
  text-align: start;
3872
4367
  }
3873
4368
  .zx-context-menu__item:hover,
3874
4369
  .zx-context-menu__item:focus-visible {
3875
- background: var(--zx-color-bg-hover);
4370
+ background: var(--zx-color-overlay-hover);
3876
4371
  }
3877
4372
  .zx-context-menu__item[data-danger=true] {
3878
4373
  color: var(--zx-color-danger);
@@ -3889,7 +4384,7 @@ body:has(> .zx-modal:modal) {
3889
4384
  .zx-context-menu__separator {
3890
4385
  block-size: 1px;
3891
4386
  margin: var(--zx-space-1) var(--zx-space-2);
3892
- background: var(--zx-color-border);
4387
+ background: var(--zx-color-overlay-divider);
3893
4388
  }
3894
4389
 
3895
4390
  /* src/components/select/select.css */
@@ -3989,10 +4484,14 @@ body:has(> .zx-modal:modal) {
3989
4484
  inline-size: max-content;
3990
4485
  max-inline-size: calc(100vw - var(--zx-space-4));
3991
4486
  overflow: hidden;
3992
- border: 1px solid var(--zx-color-border-strong);
4487
+ border: 1px solid var(--zx-color-overlay-border);
3993
4488
  border-radius: var(--zx-radius-md);
3994
- background: var(--zx-color-bg-raised);
3995
- box-shadow: var(--zx-overlay-shadow);
4489
+ background-color: var(--zx-color-overlay-surface);
4490
+ background-image: var(--zx-overlay-surface-image);
4491
+ background-clip: padding-box;
4492
+ -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
4493
+ backdrop-filter: var(--zx-glass-filter-overlay);
4494
+ box-shadow: var(--zx-glass-overlay-shadow);
3996
4495
  color: var(--zx-color-text);
3997
4496
  padding: var(--zx-space-1);
3998
4497
  }
@@ -4015,13 +4514,13 @@ body:has(> .zx-modal:modal) {
4015
4514
  flex: 1;
4016
4515
  }
4017
4516
  .zx-select__option[data-active=true] {
4018
- background: var(--zx-color-bg-hover);
4517
+ background: var(--zx-color-overlay-hover);
4019
4518
  }
4020
4519
  .zx-select__option:hover {
4021
- background: var(--zx-color-bg-hover);
4520
+ background: var(--zx-color-overlay-hover);
4022
4521
  }
4023
4522
  .zx-select__option[aria-selected=true] {
4024
- background: var(--zx-color-bg-selected);
4523
+ background: var(--zx-color-overlay-selected);
4025
4524
  }
4026
4525
  .zx-select__option > .zx-icon {
4027
4526
  flex: none;
@@ -4031,7 +4530,7 @@ body:has(> .zx-modal:modal) {
4031
4530
  position: sticky;
4032
4531
  z-index: 1;
4033
4532
  inset-block-start: 0;
4034
- background: var(--zx-color-bg-raised);
4533
+ background: var(--zx-color-overlay-scrim);
4035
4534
  color: var(--zx-color-text-muted);
4036
4535
  font-size: var(--zx-text-xs);
4037
4536
  font-weight: 700;
@@ -4039,10 +4538,22 @@ body:has(> .zx-modal:modal) {
4039
4538
  padding: var(--zx-space-2) var(--zx-control-pad-x) var(--zx-space-1);
4040
4539
  text-transform: uppercase;
4041
4540
  }
4541
+ @media (prefers-reduced-transparency: reduce) {
4542
+ .zx-select__panel,
4543
+ .zx-select__group {
4544
+ background: var(--zx-color-bg-raised);
4545
+ }
4546
+ .zx-select__panel {
4547
+ border-color: var(--zx-color-border-strong);
4548
+ -webkit-backdrop-filter: none;
4549
+ backdrop-filter: none;
4550
+ box-shadow: var(--zx-overlay-shadow);
4551
+ }
4552
+ }
4042
4553
  .zx-select__separator {
4043
4554
  block-size: 1px;
4044
4555
  margin: var(--zx-space-1) var(--zx-control-pad-x);
4045
- background: var(--zx-color-border);
4556
+ background: var(--zx-color-overlay-divider);
4046
4557
  }
4047
4558
  .zx-select__empty {
4048
4559
  color: var(--zx-color-text-muted);
@@ -4402,13 +4913,26 @@ body:has(> .zx-modal:modal) {
4402
4913
  inline-size: max-content;
4403
4914
  max-inline-size: calc(100vw - var(--zx-space-4));
4404
4915
  overflow: hidden;
4405
- border: 1px solid var(--zx-color-border-strong);
4916
+ border: 1px solid var(--zx-color-overlay-border);
4406
4917
  border-radius: var(--zx-radius-md);
4407
- background: var(--zx-color-bg-raised);
4408
- box-shadow: var(--zx-overlay-shadow);
4918
+ background-color: var(--zx-color-overlay-surface);
4919
+ background-image: var(--zx-overlay-surface-image);
4920
+ background-clip: padding-box;
4921
+ -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
4922
+ backdrop-filter: var(--zx-glass-filter-overlay);
4923
+ box-shadow: var(--zx-glass-overlay-shadow);
4409
4924
  color: var(--zx-color-text);
4410
4925
  padding: var(--zx-space-1);
4411
4926
  }
4927
+ @media (prefers-reduced-transparency: reduce) {
4928
+ .zx-tag-picker__panel {
4929
+ border-color: var(--zx-color-border-strong);
4930
+ background: var(--zx-color-bg-raised);
4931
+ -webkit-backdrop-filter: none;
4932
+ backdrop-filter: none;
4933
+ box-shadow: var(--zx-overlay-shadow);
4934
+ }
4935
+ }
4412
4936
  .zx-tag-picker__list {
4413
4937
  min-inline-size: 0;
4414
4938
  overflow-y: auto;
@@ -4423,7 +4947,7 @@ body:has(> .zx-modal:modal) {
4423
4947
  cursor: pointer;
4424
4948
  }
4425
4949
  .zx-tag-picker__option[data-active] {
4426
- background: var(--zx-color-bg-hover);
4950
+ background: var(--zx-color-overlay-hover);
4427
4951
  }
4428
4952
  .zx-tag-picker__option[aria-selected=true] {
4429
4953
  color: var(--zx-color-accent);
@@ -4786,13 +5310,13 @@ body:has(> .zx-modal:modal) {
4786
5310
  place-items: center;
4787
5311
  min-inline-size: var(--zx-control-height);
4788
5312
  padding: 0;
4789
- border-color: var(--zx-color-bg-surface);
4790
- background: inherit;
5313
+ border-color: transparent;
5314
+ background: transparent;
4791
5315
  }
4792
5316
  .zx-date-picker__heading {
4793
5317
  overflow: hidden;
4794
- border-color: var(--zx-color-bg-surface);
4795
- background: inherit;
5318
+ border-color: transparent;
5319
+ background: transparent;
4796
5320
  font-weight: 650;
4797
5321
  text-overflow: ellipsis;
4798
5322
  text-wrap: nowrap;
@@ -4825,9 +5349,9 @@ body:has(> .zx-modal:modal) {
4825
5349
  min-inline-size: 0;
4826
5350
  min-block-size: var(--zx-control-height);
4827
5351
  padding: 0;
4828
- border-color: var(--zx-color-bg-surface);
5352
+ border-color: transparent;
4829
5353
  border-radius: var(--zx-radius-md);
4830
- background: inherit;
5354
+ background: transparent;
4831
5355
  font-variant-numeric: tabular-nums;
4832
5356
  }
4833
5357
  .zx-date-picker__day[data-other-month=true] {
@@ -4865,12 +5389,25 @@ body:has(> .zx-modal:modal) {
4865
5389
  position: absolute;
4866
5390
  z-index: 2;
4867
5391
  inset: var(--zx-space-3);
4868
- border: 1px solid var(--zx-color-border-strong);
5392
+ border: 1px solid var(--zx-color-overlay-border);
4869
5393
  border-radius: var(--zx-radius-md);
4870
- background: var(--zx-color-bg-raised);
4871
- box-shadow: var(--zx-overlay-shadow);
5394
+ background-color: var(--zx-color-overlay-surface);
5395
+ background-image: var(--zx-overlay-surface-image);
5396
+ background-clip: padding-box;
5397
+ -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
5398
+ backdrop-filter: var(--zx-glass-filter-overlay);
5399
+ box-shadow: var(--zx-glass-overlay-shadow);
4872
5400
  padding: var(--zx-space-3);
4873
5401
  }
5402
+ @media (prefers-reduced-transparency: reduce) {
5403
+ .zx-date-picker__quick {
5404
+ border-color: var(--zx-color-border-strong);
5405
+ background: var(--zx-color-bg-raised);
5406
+ -webkit-backdrop-filter: none;
5407
+ backdrop-filter: none;
5408
+ box-shadow: var(--zx-overlay-shadow);
5409
+ }
5410
+ }
4874
5411
  .zx-date-picker__quick[hidden] {
4875
5412
  display: none;
4876
5413
  }
@@ -4884,10 +5421,14 @@ body:has(> .zx-modal:modal) {
4884
5421
  .zx-month-picker__month {
4885
5422
  min-inline-size: 0;
4886
5423
  padding-inline: var(--zx-space-1);
4887
- border-color: var(--zx-color-bg-surface);
4888
- background: inherit;
5424
+ border-color: transparent;
5425
+ background: transparent;
5426
+ }
5427
+ .zx-date-picker__quick-month[aria-selected=true] {
5428
+ background: var(--zx-color-overlay-selected);
5429
+ color: var(--zx-color-accent);
5430
+ font-weight: 700;
4889
5431
  }
4890
- .zx-date-picker__quick-month[aria-selected=true],
4891
5432
  .zx-month-picker__month[aria-selected=true] {
4892
5433
  background: var(--zx-color-bg-selected);
4893
5434
  color: var(--zx-color-accent);
@@ -5142,7 +5683,7 @@ body:has(> .zx-modal:modal) {
5142
5683
  overflow: visible;
5143
5684
  max-inline-size: calc(100vw - var(--zx-space-4));
5144
5685
  border: 0;
5145
- background: var(--zx-color-bg-raised);
5686
+ background: none;
5146
5687
  padding: 0;
5147
5688
  }
5148
5689
  .zx-datebox__popover:not(:popover-open)[data-state=closed] {
@@ -5152,8 +5693,22 @@ body:has(> .zx-modal:modal) {
5152
5693
  display: block;
5153
5694
  }
5154
5695
  .zx-datebox__popover .zx-date-picker__surface {
5155
- background: var(--zx-color-bg-raised);
5156
- box-shadow: var(--zx-overlay-shadow);
5696
+ border-color: var(--zx-color-overlay-border);
5697
+ background-color: var(--zx-color-overlay-surface);
5698
+ background-image: var(--zx-overlay-surface-image);
5699
+ background-clip: padding-box;
5700
+ -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
5701
+ backdrop-filter: var(--zx-glass-filter-overlay);
5702
+ box-shadow: var(--zx-glass-overlay-shadow);
5703
+ }
5704
+ @media (prefers-reduced-transparency: reduce) {
5705
+ .zx-datebox__popover .zx-date-picker__surface {
5706
+ border-color: var(--zx-color-border);
5707
+ background: var(--zx-color-bg-raised);
5708
+ -webkit-backdrop-filter: none;
5709
+ backdrop-filter: none;
5710
+ box-shadow: var(--zx-overlay-shadow);
5711
+ }
5157
5712
  }
5158
5713
 
5159
5714
  /* src/components/date-picker/date-range-picker.css */
@@ -5461,8 +6016,22 @@ body:has(> .zx-modal:modal) {
5461
6016
  }
5462
6017
  .zx-date-range-box__popover .zx-date-range-picker__surface {
5463
6018
  max-inline-size: none;
5464
- background: var(--zx-color-bg-raised);
5465
- box-shadow: var(--zx-overlay-shadow);
6019
+ border-color: var(--zx-color-overlay-border);
6020
+ background-color: var(--zx-color-overlay-surface);
6021
+ background-image: var(--zx-overlay-surface-image);
6022
+ background-clip: padding-box;
6023
+ -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
6024
+ backdrop-filter: var(--zx-glass-filter-overlay);
6025
+ box-shadow: var(--zx-glass-overlay-shadow);
6026
+ }
6027
+ @media (prefers-reduced-transparency: reduce) {
6028
+ .zx-date-range-box__popover .zx-date-range-picker__surface {
6029
+ border-color: var(--zx-color-border);
6030
+ background: var(--zx-color-bg-raised);
6031
+ -webkit-backdrop-filter: none;
6032
+ backdrop-filter: none;
6033
+ box-shadow: var(--zx-overlay-shadow);
6034
+ }
5466
6035
  }
5467
6036
 
5468
6037
  /* src/components/timebox/timebox.css */
@@ -5510,362 +6079,1318 @@ body:has(> .zx-modal:modal) {
5510
6079
  color: var(--zx-color-danger);
5511
6080
  }
5512
6081
 
5513
- /* src/components/table/table.css */
5514
- .zx-table {
6082
+ /* src/components/calendar/calendar.css */
6083
+ .zx-calendar {
6084
+ --zx-calendar-time-axis: 4.75rem;
6085
+ --zx-calendar-slot-height: 24px;
6086
+ --zx-calendar-event-color: var(--zx-color-accent);
6087
+ position: relative;
6088
+ container-type: inline-size;
6089
+ display: grid;
6090
+ inline-size: 100%;
6091
+ min-inline-size: 0;
6092
+ overflow: hidden;
6093
+ border: 1px solid var(--zx-color-border);
6094
+ border-radius: var(--zx-radius-lg);
6095
+ background: var(--zx-color-bg-surface);
6096
+ color: var(--zx-color-text);
6097
+ font-size: var(--zx-text-sm);
6098
+ }
6099
+ .zx-calendar__toolbar {
6100
+ display: grid;
6101
+ grid-template-columns: 1fr auto 1fr;
6102
+ align-items: center;
6103
+ gap: var(--zx-space-3);
5515
6104
  min-inline-size: 0;
6105
+ padding: var(--zx-space-3);
6106
+ border-block-end: 1px solid var(--zx-color-border);
5516
6107
  }
5517
- .zx-table__column-controls {
5518
- position: relative;
5519
- inline-size: max-content;
5520
- margin: 0 0 var(--zx-space-2) auto;
6108
+ .zx-calendar__navigation,
6109
+ .zx-calendar__commands,
6110
+ .zx-calendar__views {
6111
+ display: flex;
6112
+ align-items: center;
6113
+ min-inline-size: 0;
5521
6114
  }
5522
- .zx-table__reorder-status {
5523
- position: absolute;
5524
- inline-size: 1px;
5525
- block-size: 1px;
5526
- overflow: hidden;
5527
- clip-path: inset(50%);
6115
+ .zx-calendar__navigation {
6116
+ justify-self: start;
6117
+ gap: var(--zx-space-1);
5528
6118
  }
5529
- .zx-table__column-controls > summary {
6119
+ .zx-calendar__commands {
6120
+ justify-self: end;
6121
+ gap: var(--zx-space-3);
6122
+ }
6123
+ .zx-calendar__views {
6124
+ overflow-x: auto;
6125
+ }
6126
+ .zx-calendar__toolbar-button,
6127
+ .zx-calendar__view-button,
6128
+ .zx-calendar__new {
5530
6129
  display: inline-flex;
6130
+ min-block-size: var(--zx-control-height);
5531
6131
  align-items: center;
5532
- gap: var(--zx-space-2);
5533
- list-style: none;
6132
+ justify-content: center;
6133
+ border: 1px solid var(--zx-color-border-control);
6134
+ background: var(--zx-color-bg-control);
6135
+ color: var(--zx-color-text);
6136
+ font: inherit;
6137
+ font-size: var(--zx-text-sm);
5534
6138
  cursor: pointer;
5535
6139
  }
5536
- .zx-table__column-controls > summary::-webkit-details-marker {
5537
- display: none;
5538
- }
5539
- .zx-table__column-list {
5540
- position: absolute;
5541
- z-index: 4;
5542
- inset-block-start: calc(100% + var(--zx-space-1));
5543
- inset-inline-end: 0;
5544
- display: grid;
5545
- min-inline-size: 190px;
5546
- border: 1px solid var(--zx-color-border-strong);
5547
- border-radius: var(--zx-radius-md);
5548
- background: var(--zx-color-bg-raised);
5549
- box-shadow: var(--zx-overlay-shadow);
5550
- padding: var(--zx-space-2);
6140
+ .zx-calendar__toolbar-button {
6141
+ min-inline-size: var(--zx-control-height);
6142
+ border-radius: var(--zx-control-radius);
6143
+ padding-inline: var(--zx-space-3);
5551
6144
  }
5552
- .zx-table__column-option {
5553
- display: flex;
5554
- align-items: center;
5555
- gap: var(--zx-space-2);
5556
- min-block-size: var(--zx-control-height);
5557
- border-radius: var(--zx-radius-sm);
6145
+ .zx-calendar__toolbar-button:has(.zx-icon) {
5558
6146
  padding-inline: var(--zx-space-2);
5559
6147
  }
5560
- .zx-table__column-option:hover {
5561
- background: var(--zx-color-bg-hover);
6148
+ .zx-calendar__view-button {
6149
+ border-inline-end-width: 0;
6150
+ padding-inline: var(--zx-space-3);
5562
6151
  }
5563
- .zx-table__reorder-column,
5564
- .zx-table__reorder-header,
5565
- .zx-table__reorder-cell {
5566
- inline-size: var(--zx-control-height);
5567
- text-align: center;
6152
+ .zx-calendar__view-button:first-child {
6153
+ border-start-start-radius: var(--zx-control-radius);
6154
+ border-end-start-radius: var(--zx-control-radius);
5568
6155
  }
5569
- .zx-table__row-handle {
5570
- display: inline-grid;
5571
- place-items: center;
5572
- inline-size: 26px;
5573
- block-size: 26px;
5574
- min-block-size: 0;
5575
- border: 0;
5576
- border-radius: var(--zx-radius-sm);
5577
- background: transparent;
5578
- padding: 0;
5579
- color: var(--zx-color-text-muted);
5580
- cursor: grab;
6156
+ .zx-calendar__view-button:last-child {
6157
+ border-inline-end-width: 1px;
6158
+ border-start-end-radius: var(--zx-control-radius);
6159
+ border-end-end-radius: var(--zx-control-radius);
5581
6160
  }
5582
- .zx-table__row-handle:hover,
5583
- .zx-table__row-handle[aria-pressed=true] {
6161
+ .zx-calendar__view-button[aria-pressed=true] {
6162
+ position: relative;
6163
+ z-index: 1;
6164
+ border-color: var(--zx-color-accent);
6165
+ background: var(--zx-color-bg-selected);
6166
+ color: var(--zx-color-accent);
6167
+ }
6168
+ .zx-calendar__new {
6169
+ gap: var(--zx-space-2);
6170
+ border-color: var(--zx-color-accent);
6171
+ border-radius: var(--zx-control-radius);
6172
+ background: var(--zx-color-accent);
6173
+ color: var(--zx-color-on-accent);
6174
+ padding-inline: var(--zx-space-3);
6175
+ font-weight: 650;
6176
+ }
6177
+ .zx-calendar__toolbar-button:hover:not(:disabled),
6178
+ .zx-calendar__view-button:hover:not(:disabled) {
5584
6179
  background: var(--zx-color-bg-hover);
5585
- color: var(--zx-color-text);
5586
6180
  }
5587
- .zx-table__row-handle:active {
5588
- cursor: grabbing;
6181
+ .zx-calendar__new:hover:not(:disabled) {
6182
+ background: var(--zx-color-accent-hover);
5589
6183
  }
5590
- .zx-table__body tr[data-dragging] {
6184
+ .zx-calendar button:disabled {
6185
+ cursor: default;
5591
6186
  opacity: .55;
5592
6187
  }
5593
- .zx-table__body tr[data-drop=before] {
5594
- box-shadow: inset 0 2px 0 var(--zx-color-accent);
6188
+ .zx-calendar__toolbar-button:focus-visible,
6189
+ .zx-calendar__view-button:focus-visible,
6190
+ .zx-calendar__new:focus-visible,
6191
+ .zx-calendar__event-action:focus-visible,
6192
+ .zx-calendar__event-resize:focus-visible,
6193
+ .zx-calendar__slot:focus-visible,
6194
+ .zx-calendar__day-heading:focus-visible,
6195
+ .zx-calendar__month-day:focus-visible,
6196
+ .zx-calendar__year-day:focus-visible,
6197
+ .zx-calendar__agenda-heading:focus-visible,
6198
+ .zx-calendar__more:focus-visible,
6199
+ .zx-calendar__month-week-number:focus-visible {
6200
+ z-index: 4;
6201
+ outline: none;
6202
+ box-shadow: var(--zx-focus-ring);
5595
6203
  }
5596
- .zx-table__body tr[data-drop=after] {
5597
- box-shadow: inset 0 -2px 0 var(--zx-color-accent);
6204
+ .zx-calendar__heading {
6205
+ min-inline-size: 0;
6206
+ margin: 0;
6207
+ overflow: hidden;
6208
+ color: var(--zx-color-text);
6209
+ font-size: var(--zx-text-lg);
6210
+ font-weight: 700;
6211
+ line-height: 1.25;
6212
+ text-align: center;
6213
+ text-overflow: ellipsis;
6214
+ white-space: nowrap;
5598
6215
  }
5599
- .zx-table__scroll {
5600
- position: relative;
5601
- max-inline-size: 100%;
5602
- overflow: auto;
5603
- border: 1px solid var(--zx-color-border);
5604
- border-radius: var(--zx-radius-md);
5605
- background: var(--zx-color-bg-surface);
5606
- scrollbar-gutter: stable;
6216
+ .zx-calendar__body {
6217
+ min-inline-size: 0;
6218
+ overflow-x: auto;
5607
6219
  }
5608
- .zx-table[data-loading=true] .zx-table__body {
5609
- opacity: 0.5;
6220
+ .zx-calendar__time-surface {
6221
+ display: grid;
6222
+ min-inline-size: 42rem;
5610
6223
  }
5611
- .zx-table[data-loading=true] .zx-table__scroll::after {
5612
- content: "";
5613
- position: sticky;
5614
- inset-block-start: 0;
5615
- inset-inline: 0;
5616
- display: block;
5617
- block-size: 2px;
5618
- margin-block-end: -2px;
5619
- background: var(--zx-color-accent);
5620
- opacity: 0.85;
5621
- z-index: 2;
6224
+ .zx-calendar__time-header,
6225
+ .zx-calendar__all-day,
6226
+ .zx-calendar__time-scroller {
6227
+ display: grid;
6228
+ grid-template-columns: var(--zx-calendar-time-axis) minmax(0, 1fr);
5622
6229
  }
5623
- @media (prefers-reduced-motion: no-preference) {
5624
- .zx-table[data-loading=true] .zx-table__scroll::after {
5625
- background:
5626
- linear-gradient(
5627
- 90deg,
5628
- transparent 0%,
5629
- var(--zx-color-accent) 50%,
5630
- transparent 100%);
5631
- background-size: 40% 100%;
5632
- background-repeat: no-repeat;
5633
- animation: zx-table-loading 1.1s var(--zx-ease) infinite;
5634
- }
6230
+ .zx-calendar__time-header,
6231
+ .zx-calendar__all-day {
6232
+ border-block-end: 1px solid var(--zx-color-border);
5635
6233
  }
5636
- @keyframes zx-table-loading {
5637
- from {
5638
- background-position: -40% 0;
5639
- }
5640
- to {
5641
- background-position: 140% 0;
5642
- }
6234
+ .zx-calendar__time-corner,
6235
+ .zx-calendar__all-day-label {
6236
+ border-inline-end: 1px solid var(--zx-color-border);
6237
+ color: var(--zx-color-text-muted);
5643
6238
  }
5644
- .zx-table__table {
5645
- inline-size: 100%;
5646
- border-spacing: 0;
6239
+ .zx-calendar__day-headings {
6240
+ display: grid;
6241
+ grid-template-columns: repeat(var(--zx-calendar-day-count), minmax(0, 1fr));
6242
+ }
6243
+ .zx-calendar__day-heading {
6244
+ display: grid;
6245
+ gap: 1px;
6246
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
6247
+ place-content: center;
6248
+ border: 0;
6249
+ border-inline-end: 1px solid var(--zx-color-border);
5647
6250
  background: var(--zx-color-bg-surface);
5648
6251
  color: var(--zx-color-text);
6252
+ font: inherit;
6253
+ cursor: pointer;
5649
6254
  }
5650
- .zx-table__table[data-layout=auto] {
5651
- min-inline-size: max-content;
5652
- }
5653
- .zx-table__table[data-layout=fixed] {
5654
- table-layout: fixed;
6255
+ .zx-calendar__day-heading:last-child {
6256
+ border-inline-end: 0;
5655
6257
  }
5656
- .zx-table__selection-column {
5657
- inline-size: var(--zx-control-height);
6258
+ .zx-calendar__day-heading:hover:not(:disabled) {
6259
+ background: var(--zx-color-bg-hover);
5658
6260
  }
5659
- .zx-table th,
5660
- .zx-table td {
5661
- border-block-end: 1px solid var(--zx-table-border-color, var(--zx-color-border));
5662
- padding: var(--zx-space-2) var(--zx-space-3);
5663
- text-align: start;
5664
- vertical-align: middle;
6261
+ .zx-calendar__day-heading[aria-current=date] .zx-calendar__day-number {
6262
+ color: var(--zx-color-accent);
6263
+ font-weight: 750;
5665
6264
  }
5666
- .zx-table th {
5667
- background: var(--zx-table-header-bg, var(--zx-color-bg-raised));
6265
+ .zx-calendar__day-weekday {
5668
6266
  color: var(--zx-color-text-muted);
6267
+ font-size: var(--zx-text-xs);
6268
+ text-transform: uppercase;
6269
+ letter-spacing: .04em;
6270
+ }
6271
+ .zx-calendar__day-number {
5669
6272
  font-size: var(--zx-text-sm);
5670
- font-weight: 650;
5671
6273
  }
5672
- .zx-table__scroll[data-sticky-header=true] th {
5673
- position: sticky;
5674
- z-index: 1;
5675
- inset-block-start: 0;
6274
+ .zx-calendar__all-day {
6275
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
5676
6276
  }
5677
- .zx-table th[data-align=center],
5678
- .zx-table td[data-align=center] {
5679
- text-align: center;
6277
+ .zx-calendar__all-day-label {
6278
+ display: grid;
6279
+ place-items: center end;
6280
+ padding-inline: var(--zx-space-2);
6281
+ font-size: var(--zx-text-xs);
5680
6282
  }
5681
- .zx-table th[data-align=end],
5682
- .zx-table td[data-align=end],
5683
- .zx-table th[data-align=right],
5684
- .zx-table td[data-align=right] {
5685
- text-align: end;
6283
+ .zx-calendar__all-day-grid {
6284
+ display: grid;
6285
+ grid-template-columns: repeat(var(--zx-calendar-day-count), minmax(0, 1fr));
6286
+ grid-auto-rows: calc(var(--zx-control-height) - var(--zx-space-2));
6287
+ gap: 2px 0;
6288
+ min-block-size: var(--zx-control-height);
6289
+ padding-block: var(--zx-space-1);
6290
+ overflow: hidden;
5686
6291
  }
5687
- .zx-table th[data-align=left],
5688
- .zx-table td[data-align=left] {
5689
- text-align: left;
6292
+ .zx-calendar__all-day-cell {
6293
+ border-inline-end: 1px solid var(--zx-color-border);
5690
6294
  }
5691
- .zx-table__sort-button {
5692
- display: flex;
5693
- align-items: center;
5694
- justify-content: space-between;
5695
- gap: var(--zx-space-2);
5696
- inline-size: 100%;
5697
- min-block-size: auto;
5698
- border: 0;
5699
- border-radius: var(--zx-radius-sm);
5700
- background: inherit;
5701
- color: inherit;
5702
- padding: 0;
5703
- text-align: inherit;
6295
+ .zx-calendar__all-day-cell:last-of-type {
6296
+ border-inline-end: 0;
5704
6297
  }
5705
- .zx-table__sort-button:hover {
5706
- background: var(--zx-table-row-hover-bg, var(--zx-color-bg-hover));
5707
- color: var(--zx-color-text);
6298
+ .zx-calendar__time-scroller {
6299
+ position: relative;
6300
+ max-block-size: min(68vh, 46rem);
6301
+ overflow: auto;
6302
+ overscroll-behavior: contain;
6303
+ scrollbar-gutter: stable;
5708
6304
  }
5709
- .zx-table__sort-button:focus-visible {
5710
- box-shadow: var(--zx-focus-ring);
6305
+ .zx-calendar__time-axis {
6306
+ position: relative;
6307
+ z-index: 2;
6308
+ border-inline-end: 1px solid var(--zx-color-border);
6309
+ background: var(--zx-color-bg-surface);
5711
6310
  }
5712
- .zx-table th[aria-sort=ascending] .zx-table__sort-button::after {
5713
- content: "\2191";
5714
- color: var(--zx-color-accent);
6311
+ .zx-calendar__time-label {
6312
+ display: block;
6313
+ block-size: var(--zx-calendar-slot-height);
6314
+ padding-block-start: var(--zx-space-1);
6315
+ padding-inline-end: var(--zx-space-2);
6316
+ color: var(--zx-color-text-muted);
6317
+ font-size: var(--zx-text-xs);
6318
+ text-align: end;
6319
+ transform: translateY(-.65em);
5715
6320
  }
5716
- .zx-table th[aria-sort=descending] .zx-table__sort-button::after {
5717
- content: "\2193";
5718
- color: var(--zx-color-accent);
6321
+ .zx-calendar__time-label:first-child {
6322
+ transform: none;
5719
6323
  }
5720
- .zx-table__body tr:last-child td {
5721
- border-block-end: 0;
6324
+ .zx-calendar__time-grid {
6325
+ position: relative;
6326
+ block-size: calc(var(--zx-calendar-slot-count) * var(--zx-calendar-slot-height));
6327
+ min-inline-size: 0;
5722
6328
  }
5723
- .zx-table__scroll[data-zebra=true] .zx-table__body tr:nth-child(even):not([aria-selected=true]) {
5724
- background: var(--zx-color-bg-page);
6329
+ .zx-calendar__slots {
6330
+ position: absolute;
6331
+ inset: 0;
6332
+ display: grid;
6333
+ grid-template-columns: repeat(var(--zx-calendar-day-count), minmax(0, 1fr));
6334
+ grid-template-rows: repeat(var(--zx-calendar-slot-count), var(--zx-calendar-slot-height));
5725
6335
  }
5726
- .zx-table__body tr[aria-selected=true] {
5727
- background: var(--zx-table-row-selected-bg, var(--zx-color-bg-selected));
6336
+ .zx-calendar__slot {
6337
+ min-inline-size: 0;
6338
+ border: 0;
6339
+ border-block-start: 1px solid var(--zx-color-border);
6340
+ border-inline-end: 1px solid var(--zx-color-border);
6341
+ background: var(--zx-color-bg-surface);
6342
+ padding: 0;
6343
+ cursor: crosshair;
5728
6344
  }
5729
- .zx-table__body tr[data-row]:hover {
5730
- background: var(--zx-color-bg-hover);
6345
+ .zx-calendar__slot:not([data-major=true]) {
6346
+ border-block-start-style: dotted;
5731
6347
  }
5732
- .zx-table__checkbox {
5733
- inline-size: var(--zx-space-4);
5734
- min-block-size: auto;
5735
- block-size: var(--zx-space-4);
5736
- margin: 0;
5737
- accent-color: var(--zx-color-accent);
6348
+ .zx-calendar__slot[aria-selected=true] {
6349
+ background: var(--zx-color-bg-selected);
5738
6350
  }
5739
- .zx-table__selection-header,
5740
- .zx-table__selection-cell {
5741
- inline-size: var(--zx-control-height);
5742
- text-align: center;
6351
+ .zx-calendar__slot:hover:not(:disabled) {
6352
+ background: var(--zx-color-bg-hover);
5743
6353
  }
5744
- .zx-table__empty {
5745
- padding-block: var(--zx-space-6);
5746
- color: var(--zx-color-text-muted);
5747
- text-align: center;
6354
+ .zx-calendar__timed-events {
6355
+ position: absolute;
6356
+ inset: 0;
6357
+ pointer-events: none;
5748
6358
  }
5749
- .zx-table__tree-cell {
5750
- display: flex;
6359
+ .zx-calendar__event {
6360
+ --zx-calendar-event-color: var(--zx-color-accent);
6361
+ position: relative;
6362
+ z-index: 2;
5751
6363
  min-inline-size: 0;
5752
- align-items: center;
5753
- gap: var(--zx-space-1);
5754
- padding-inline-start: calc(var(--zx-table-depth, 0) * var(--zx-space-4));
6364
+ pointer-events: auto;
5755
6365
  }
5756
- .zx-table__tree-toggle,
5757
- .zx-table__tree-spacer {
5758
- inline-size: 24px;
5759
- block-size: 24px;
5760
- flex: 0 0 24px;
6366
+ .zx-calendar__event[data-variant=timed] {
6367
+ position: absolute;
6368
+ min-block-size: calc(var(--zx-calendar-slot-height) - 2px);
6369
+ padding: 1px 2px;
5761
6370
  }
5762
- .zx-table__tree-toggle {
5763
- display: inline-grid;
6371
+ .zx-calendar__event-action {
6372
+ display: grid;
6373
+ grid-template-columns: minmax(0, 1fr);
6374
+ align-content: start;
6375
+ gap: 1px;
6376
+ inline-size: 100%;
6377
+ block-size: 100%;
6378
+ min-inline-size: 0;
5764
6379
  min-block-size: 0;
5765
- place-items: center;
5766
- padding: 0;
5767
- border: 0;
6380
+ overflow: hidden;
6381
+ border: 1px solid color-mix(in srgb, var(--zx-calendar-event-color) 65%, var(--zx-color-border));
6382
+ border-inline-start: 3px solid var(--zx-calendar-event-color);
5768
6383
  border-radius: var(--zx-radius-sm);
5769
- background: transparent;
5770
- color: var(--zx-color-text-muted);
6384
+ background: color-mix(in srgb, var(--zx-calendar-event-color) 11%, var(--zx-color-bg-surface));
6385
+ color: var(--zx-color-text);
6386
+ padding: var(--zx-space-1) var(--zx-space-2);
6387
+ font: inherit;
6388
+ font-size: var(--zx-text-xs);
6389
+ line-height: 1.25;
6390
+ text-align: start;
5771
6391
  cursor: pointer;
5772
6392
  }
5773
- .zx-table__tree-toggle:hover {
5774
- background: var(--zx-color-bg-hover);
5775
- color: var(--zx-color-text);
6393
+ .zx-calendar__event[data-draggable=true] > .zx-calendar__event-action {
6394
+ cursor: grab;
6395
+ touch-action: none;
5776
6396
  }
5777
- .zx-table__tree-toggle:focus-visible {
5778
- outline: 0;
6397
+ .zx-calendar__event[data-state=dragging] > .zx-calendar__event-action,
6398
+ .zx-calendar__event[data-state=grabbed] > .zx-calendar__event-action {
6399
+ border-color: var(--zx-color-accent);
5779
6400
  box-shadow: var(--zx-focus-ring);
6401
+ cursor: grabbing;
5780
6402
  }
5781
- .zx-table__cell-content {
5782
- min-inline-size: 0;
5783
- }
5784
- .zx-table[data-edit-mode] .zx-table__body td {
5785
- block-size: var(--zx-control-height);
5786
- }
5787
- .zx-table__body td[data-editable=true] {
5788
- cursor: cell;
6403
+ .zx-calendar__event[data-preview]::after {
6404
+ position: absolute;
6405
+ inset-inline: var(--zx-space-1);
6406
+ inset-block-end: var(--zx-space-1);
6407
+ z-index: 5;
6408
+ overflow: hidden;
6409
+ border-radius: var(--zx-radius-sm);
6410
+ background: var(--zx-color-bg-raised);
6411
+ color: var(--zx-color-text);
6412
+ content: attr(data-preview);
6413
+ font-size: var(--zx-text-xs);
6414
+ padding: 1px var(--zx-space-1);
6415
+ text-overflow: ellipsis;
6416
+ white-space: nowrap;
5789
6417
  }
5790
- .zx-table__body td[data-editable=true]:focus-visible {
5791
- outline: 0;
5792
- box-shadow: inset var(--zx-focus-ring);
6418
+ .zx-calendar__event-time {
6419
+ overflow: hidden;
6420
+ color: var(--zx-color-text-muted);
6421
+ text-overflow: ellipsis;
6422
+ white-space: nowrap;
5793
6423
  }
5794
- .zx-table__body td[data-editing=true] {
5795
- position: relative;
6424
+ .zx-calendar__event-title {
6425
+ overflow: hidden;
6426
+ font-weight: 680;
6427
+ text-overflow: ellipsis;
6428
+ white-space: nowrap;
5796
6429
  }
5797
- .zx-table__cell-shadow {
5798
- visibility: hidden;
6430
+ .zx-calendar__event-location {
6431
+ overflow: hidden;
6432
+ color: var(--zx-color-text-muted);
6433
+ text-overflow: ellipsis;
6434
+ white-space: nowrap;
5799
6435
  }
5800
- .zx-table__editor {
6436
+ .zx-calendar__event-resize {
5801
6437
  position: absolute;
5802
- inset: 0;
5803
- display: flex;
5804
- align-items: center;
5805
- gap: var(--zx-space-1);
5806
- padding-inline: var(--zx-space-1);
5807
- background: var(--zx-color-bg-surface);
6438
+ inset-inline: var(--zx-space-2);
6439
+ inset-block-end: 1px;
6440
+ z-index: 3;
6441
+ display: grid;
6442
+ block-size: 8px;
6443
+ min-block-size: 0;
6444
+ place-items: center;
6445
+ appearance: none;
6446
+ border: 0;
6447
+ border-radius: 0;
6448
+ background: transparent;
6449
+ padding: 0;
6450
+ cursor: ns-resize;
6451
+ touch-action: none;
5808
6452
  }
5809
- .zx-table__editor > * {
5810
- inline-size: 100%;
6453
+ .zx-calendar__event-resize > span {
6454
+ inline-size: 1.5rem;
6455
+ border-block-start: 2px solid var(--zx-calendar-event-color);
5811
6456
  }
5812
- .zx-table__editor[data-editor=checkbox] {
5813
- justify-content: center;
6457
+ .zx-calendar__event[data-variant=span],
6458
+ .zx-calendar__event[data-variant=month] {
6459
+ min-inline-size: 0;
6460
+ padding-inline: 2px;
5814
6461
  }
5815
- .zx-table__editor[data-editor=checkbox] > * {
5816
- inline-size: auto;
6462
+ .zx-calendar__event[data-variant=span] {
6463
+ z-index: 2;
5817
6464
  }
5818
- .zx-table__editor-input {
5819
- inline-size: 100%;
6465
+ .zx-calendar__event[data-variant=span] .zx-calendar__event-action,
6466
+ .zx-calendar__event[data-variant=month] .zx-calendar__event-action {
6467
+ display: flex;
5820
6468
  min-block-size: 0;
5821
- block-size: var(--zx-control-height);
5822
- padding-inline: var(--zx-space-2);
6469
+ align-items: center;
6470
+ gap: var(--zx-space-1);
6471
+ padding-block: 2px;
6472
+ white-space: nowrap;
5823
6473
  }
5824
- .zx-table__editor-textarea {
5825
- block-size: 100%;
5826
- padding-block: var(--zx-space-1);
5827
- resize: none;
6474
+ .zx-calendar__event[data-variant=span] .zx-calendar__event-location,
6475
+ .zx-calendar__event[data-variant=month] .zx-calendar__event-location {
6476
+ display: none;
5828
6477
  }
5829
- .zx-table__body td[data-invalid=true] .zx-table__editor {
5830
- box-shadow: inset 0 0 0 1px var(--zx-color-danger);
6478
+ .zx-calendar__event[data-variant=month] .zx-calendar__event-time {
6479
+ flex: 0 0 auto;
5831
6480
  }
5832
- .zx-table__body td[data-invalid=true] .zx-table__editor-input {
5833
- border-color: var(--zx-color-danger);
6481
+ .zx-calendar__event[data-variant=month] .zx-calendar__event-title {
6482
+ flex: 1 1 auto;
5834
6483
  }
5835
- .zx-table__message {
5836
- padding: var(--zx-space-2) var(--zx-space-3);
5837
- color: var(--zx-color-danger);
5838
- font-size: var(--zx-text-sm);
6484
+ .zx-calendar__now {
6485
+ position: absolute;
6486
+ inset-inline: 0;
6487
+ z-index: 3;
6488
+ border-block-start: 1px solid var(--zx-color-danger);
6489
+ pointer-events: none;
5839
6490
  }
5840
- .zx-table__message:empty {
6491
+ .zx-calendar__now[hidden] {
5841
6492
  display: none;
5842
6493
  }
5843
- .zx-table[data-stacked] .zx-table__table,
5844
- .zx-table[data-stacked] .zx-table__body,
5845
- .zx-table[data-stacked] .zx-table__body > tr {
5846
- display: block;
5847
- inline-size: 100%;
6494
+ .zx-calendar__now-time {
6495
+ position: absolute;
6496
+ inset-inline-start: var(--zx-space-1);
6497
+ color: var(--zx-color-danger);
6498
+ font-size: var(--zx-text-xs);
6499
+ font-weight: 700;
6500
+ transform: translateY(-100%);
5848
6501
  }
5849
- .zx-table[data-stacked] .zx-table__head,
5850
- .zx-table[data-stacked] .zx-table__columns {
5851
- display: none;
6502
+ .zx-calendar__agenda {
6503
+ display: grid;
5852
6504
  }
5853
- .zx-table[data-stacked] .zx-table__body > tr {
5854
- padding-block: var(--zx-space-3);
5855
- padding-inline: var(--zx-space-4);
6505
+ .zx-calendar__agenda-day {
6506
+ display: grid;
6507
+ grid-template-columns: minmax(10rem, 22%) minmax(0, 1fr);
5856
6508
  border-block-end: 1px solid var(--zx-color-border);
5857
6509
  }
5858
- .zx-table[data-stacked] .zx-table__body td {
5859
- display: flex;
5860
- align-items: baseline;
5861
- justify-content: space-between;
5862
- gap: var(--zx-space-4);
5863
- inline-size: auto;
5864
- padding-block: var(--zx-space-1);
5865
- padding-inline: 0;
6510
+ .zx-calendar__agenda-heading {
6511
+ align-self: stretch;
6512
+ appearance: none;
5866
6513
  border: 0;
6514
+ border-inline-end: 1px solid var(--zx-color-border);
6515
+ border-radius: 0;
6516
+ background: var(--zx-color-bg-muted);
6517
+ color: var(--zx-color-text);
6518
+ padding: var(--zx-space-3);
6519
+ font: inherit;
6520
+ font-weight: 700;
5867
6521
  text-align: start;
5868
- white-space: normal;
6522
+ cursor: pointer;
6523
+ }
6524
+ .zx-calendar__agenda-heading[aria-current=date] {
6525
+ color: var(--zx-color-accent);
6526
+ }
6527
+ .zx-calendar__agenda-events {
6528
+ display: grid;
6529
+ min-inline-size: 0;
6530
+ }
6531
+ .zx-calendar__agenda-empty {
6532
+ margin: 0;
6533
+ color: var(--zx-color-text-muted);
6534
+ padding: var(--zx-space-3);
6535
+ }
6536
+ .zx-calendar__agenda-events > .zx-calendar__event {
6537
+ border-block-end: 1px solid var(--zx-color-border);
6538
+ }
6539
+ .zx-calendar__agenda-events > .zx-calendar__event:last-child {
6540
+ border-block-end: 0;
6541
+ }
6542
+ .zx-calendar__event[data-variant=agenda] .zx-calendar__event-action {
6543
+ grid-template-columns: minmax(6rem, 18%) minmax(0, 1fr);
6544
+ grid-template-areas: "time title" "time location";
6545
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-4));
6546
+ border: 0;
6547
+ border-inline-start: 4px solid var(--zx-calendar-event-color);
6548
+ border-radius: 0;
6549
+ background: var(--zx-color-bg-surface);
6550
+ padding: var(--zx-space-3);
6551
+ }
6552
+ .zx-calendar__event[data-variant=agenda] .zx-calendar__event-time {
6553
+ grid-area: time;
6554
+ align-self: center;
6555
+ }
6556
+ .zx-calendar__event[data-variant=agenda] .zx-calendar__event-title {
6557
+ grid-area: title;
6558
+ align-self: end;
6559
+ font-size: var(--zx-text-sm);
6560
+ }
6561
+ .zx-calendar__event[data-variant=agenda] .zx-calendar__event-location {
6562
+ grid-area: location;
6563
+ align-self: start;
6564
+ }
6565
+ .zx-calendar__event[data-variant=agenda] .zx-calendar__event-action:hover:not(:disabled) {
6566
+ background: var(--zx-color-bg-hover);
6567
+ }
6568
+ .zx-calendar__month {
6569
+ display: grid;
6570
+ min-inline-size: 42rem;
6571
+ }
6572
+ .zx-calendar__month-weekdays {
6573
+ display: grid;
6574
+ grid-template-columns: 2.5rem repeat(7, minmax(0, 1fr));
6575
+ }
6576
+ .zx-calendar__month-week {
6577
+ display: grid;
6578
+ grid-template-columns: auto minmax(0, 1fr);
6579
+ }
6580
+ .zx-calendar__month-weekdays {
6581
+ border-block-end: 1px solid var(--zx-color-border);
6582
+ }
6583
+ .zx-calendar__month-week-gutter,
6584
+ .zx-calendar__month-week-number {
6585
+ inline-size: 2.5rem;
6586
+ }
6587
+ .zx-calendar__month-weekdays:not(:has(.zx-calendar__month-week-gutter)) {
6588
+ grid-template-columns: repeat(7, minmax(0, 1fr));
6589
+ }
6590
+ .zx-calendar__month-week:not(:has(.zx-calendar__month-week-number)) {
6591
+ grid-template-columns: minmax(0, 1fr);
6592
+ }
6593
+ .zx-calendar__month-weekday {
6594
+ padding: var(--zx-space-2);
6595
+ color: var(--zx-color-text-muted);
6596
+ font-size: var(--zx-text-xs);
6597
+ font-weight: 650;
6598
+ text-align: center;
6599
+ text-transform: uppercase;
6600
+ letter-spacing: .04em;
6601
+ }
6602
+ .zx-calendar__month-week {
6603
+ min-block-size: 7.5rem;
6604
+ border-block-end: 1px solid var(--zx-color-border);
6605
+ }
6606
+ .zx-calendar__month-week-number {
6607
+ grid-row: 1;
6608
+ appearance: none;
6609
+ border: 0;
6610
+ border-inline-end: 1px solid var(--zx-color-border);
6611
+ border-radius: 0;
6612
+ background: var(--zx-color-bg-muted);
6613
+ color: var(--zx-color-text-muted);
6614
+ font: inherit;
6615
+ font-size: var(--zx-text-xs);
6616
+ cursor: pointer;
6617
+ }
6618
+ .zx-calendar__month-days,
6619
+ .zx-calendar__month-events {
6620
+ grid-column: 2;
6621
+ display: grid;
6622
+ grid-template-columns: repeat(7, minmax(0, 1fr));
6623
+ }
6624
+ .zx-calendar__month-week:not(:has(.zx-calendar__month-week-number)) .zx-calendar__month-days,
6625
+ .zx-calendar__month-week:not(:has(.zx-calendar__month-week-number)) .zx-calendar__month-events {
6626
+ grid-column: 1;
6627
+ }
6628
+ .zx-calendar__month-days {
6629
+ grid-row: 1;
6630
+ min-block-size: 7.5rem;
6631
+ align-items: stretch;
6632
+ }
6633
+ .zx-calendar__month-day {
6634
+ display: flex;
6635
+ block-size: 100%;
6636
+ appearance: none;
6637
+ align-items: flex-start;
6638
+ justify-content: flex-end;
6639
+ min-block-size: var(--zx-control-height);
6640
+ border: 0;
6641
+ border-inline-end: 1px solid var(--zx-color-border);
6642
+ border-radius: 0;
6643
+ background: var(--zx-color-bg-surface);
6644
+ color: var(--zx-color-text);
6645
+ padding: var(--zx-space-2);
6646
+ font: inherit;
6647
+ text-align: end;
6648
+ cursor: pointer;
6649
+ }
6650
+ .zx-calendar__month-day:last-child {
6651
+ border-inline-end: 0;
6652
+ }
6653
+ .zx-calendar__month-day[data-other-month=true] {
6654
+ color: var(--zx-color-text-muted);
6655
+ background: var(--zx-color-bg-muted);
6656
+ }
6657
+ .zx-calendar__month-day[aria-current=date] {
6658
+ color: var(--zx-color-accent);
6659
+ font-weight: 750;
6660
+ }
6661
+ .zx-calendar__month-day:hover:not(:disabled) {
6662
+ background: var(--zx-color-bg-hover);
6663
+ }
6664
+ .zx-calendar__month-events {
6665
+ grid-row: 1;
6666
+ z-index: 2;
6667
+ grid-auto-rows: calc(var(--zx-control-height) - var(--zx-space-2));
6668
+ align-content: start;
6669
+ gap: 2px 0;
6670
+ padding-block: calc(var(--zx-control-height) + var(--zx-space-1)) var(--zx-space-1);
6671
+ pointer-events: none;
6672
+ }
6673
+ .zx-calendar__month-events > .zx-calendar__event,
6674
+ .zx-calendar__month-events > .zx-calendar__more {
6675
+ pointer-events: auto;
6676
+ }
6677
+ .zx-calendar__event[data-variant=month] .zx-calendar__event-action {
6678
+ border-color: color-mix(in srgb, var(--zx-calendar-event-color) 55%, var(--zx-color-border));
6679
+ border-inline-start-width: 1px;
6680
+ border-radius: 0;
6681
+ background: color-mix(in srgb, var(--zx-calendar-event-color) 13%, var(--zx-color-bg-surface));
6682
+ }
6683
+ .zx-calendar__event[data-variant=month][data-all-day=true] .zx-calendar__event-time {
6684
+ display: none;
6685
+ }
6686
+ .zx-calendar__more {
6687
+ align-self: center;
6688
+ min-block-size: 0;
6689
+ overflow: hidden;
6690
+ border: 0;
6691
+ background: transparent;
6692
+ color: var(--zx-color-accent);
6693
+ padding-inline: var(--zx-space-2);
6694
+ font: inherit;
6695
+ font-size: var(--zx-text-xs);
6696
+ text-align: start;
6697
+ text-overflow: ellipsis;
6698
+ white-space: nowrap;
6699
+ cursor: pointer;
6700
+ }
6701
+ .zx-calendar__year {
6702
+ display: grid;
6703
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
6704
+ gap: var(--zx-space-5);
6705
+ padding: var(--zx-space-5);
6706
+ }
6707
+ .zx-calendar__year-grid {
6708
+ display: grid;
6709
+ grid-template-columns: repeat(7, minmax(0, 1fr));
6710
+ gap: 2px;
6711
+ align-content: start;
6712
+ }
6713
+ .zx-calendar__year-heading {
6714
+ grid-column: 1 / -1;
6715
+ margin: 0 0 var(--zx-space-2);
6716
+ font-size: var(--zx-text-md);
6717
+ }
6718
+ .zx-calendar__year-weekday {
6719
+ color: var(--zx-color-text-muted);
6720
+ font-size: var(--zx-text-xs);
6721
+ font-weight: 650;
6722
+ text-align: center;
6723
+ }
6724
+ .zx-calendar__year-day,
6725
+ .zx-calendar__year-blank {
6726
+ aspect-ratio: 1;
6727
+ }
6728
+ .zx-calendar__year-day {
6729
+ display: grid;
6730
+ place-items: center;
6731
+ border: 0;
6732
+ border-radius: var(--zx-radius-sm);
6733
+ background: transparent;
6734
+ color: var(--zx-color-text);
6735
+ font: inherit;
6736
+ font-size: var(--zx-text-xs);
6737
+ cursor: pointer;
6738
+ }
6739
+ .zx-calendar__year-day[data-activity="1"] {
6740
+ background: color-mix(in srgb, var(--zx-color-accent) 10%, var(--zx-color-bg-surface));
6741
+ }
6742
+ .zx-calendar__year-day[data-activity="2"] {
6743
+ background: color-mix(in srgb, var(--zx-color-accent) 20%, var(--zx-color-bg-surface));
6744
+ }
6745
+ .zx-calendar__year-day[data-activity="3"] {
6746
+ background: color-mix(in srgb, var(--zx-color-accent) 32%, var(--zx-color-bg-surface));
6747
+ font-weight: 700;
6748
+ }
6749
+ .zx-calendar__year-day[aria-current=date] {
6750
+ outline: 2px solid var(--zx-color-accent);
6751
+ outline-offset: -2px;
6752
+ }
6753
+ .zx-calendar__year-day:hover:not(:disabled) {
6754
+ background: var(--zx-color-bg-hover);
6755
+ }
6756
+ .zx-calendar__loading {
6757
+ position: absolute;
6758
+ inset: 0;
6759
+ z-index: 10;
6760
+ display: grid;
6761
+ place-items: center;
6762
+ background: color-mix(in srgb, var(--zx-color-bg-surface) 82%, transparent);
6763
+ color: var(--zx-color-text);
6764
+ font-weight: 650;
6765
+ }
6766
+ .zx-calendar__loading[hidden] {
6767
+ display: none;
6768
+ }
6769
+ .zx-calendar[data-state=loading] .zx-calendar__body {
6770
+ opacity: .55;
6771
+ }
6772
+ .zx-calendar__status {
6773
+ position: absolute;
6774
+ inline-size: 1px;
6775
+ block-size: 1px;
6776
+ overflow: hidden;
6777
+ clip-path: inset(50%);
6778
+ white-space: nowrap;
6779
+ }
6780
+ @container (max-width: 44rem) {
6781
+ .zx-calendar__toolbar {
6782
+ grid-template-columns: 1fr auto;
6783
+ align-items: start;
6784
+ }
6785
+ .zx-calendar__navigation {
6786
+ grid-column: 1;
6787
+ grid-row: 1;
6788
+ }
6789
+ .zx-calendar__heading {
6790
+ grid-column: 1 / -1;
6791
+ grid-row: 2;
6792
+ justify-self: start;
6793
+ max-inline-size: 100%;
6794
+ text-align: start;
6795
+ }
6796
+ .zx-calendar__commands {
6797
+ display: contents;
6798
+ }
6799
+ .zx-calendar__views {
6800
+ grid-column: 1 / -1;
6801
+ grid-row: 3;
6802
+ max-inline-size: 100%;
6803
+ }
6804
+ .zx-calendar__new {
6805
+ grid-column: 2;
6806
+ grid-row: 1;
6807
+ justify-self: end;
6808
+ }
6809
+ .zx-calendar__view-button {
6810
+ flex: 1 0 auto;
6811
+ }
6812
+ .zx-calendar__new span {
6813
+ position: absolute;
6814
+ inline-size: 1px;
6815
+ block-size: 1px;
6816
+ overflow: hidden;
6817
+ clip-path: inset(50%);
6818
+ }
6819
+ .zx-calendar__agenda-day {
6820
+ grid-template-columns: 1fr;
6821
+ }
6822
+ .zx-calendar__agenda-heading {
6823
+ position: sticky;
6824
+ inset-block-start: 0;
6825
+ z-index: 3;
6826
+ border-inline-end: 0;
6827
+ border-block-end: 1px solid var(--zx-color-border);
6828
+ }
6829
+ .zx-calendar__agenda-events {
6830
+ grid-column: 1;
6831
+ }
6832
+ .zx-calendar__event[data-variant=agenda] .zx-calendar__event-action {
6833
+ grid-template-columns: 5.5rem minmax(0, 1fr);
6834
+ }
6835
+ .zx-calendar__year {
6836
+ grid-template-columns: 1fr;
6837
+ padding: var(--zx-space-3);
6838
+ }
6839
+ }
6840
+ [data-zx-density=compact] .zx-calendar {
6841
+ --zx-calendar-slot-height: 20px;
6842
+ }
6843
+ @media (prefers-reduced-motion: no-preference) {
6844
+ .zx-calendar__event {
6845
+ transition: transform var(--zx-dur-fast) var(--zx-ease), opacity var(--zx-dur-fast) var(--zx-ease);
6846
+ }
6847
+ .zx-calendar__toolbar-button,
6848
+ .zx-calendar__view-button,
6849
+ .zx-calendar__new {
6850
+ transition: background var(--zx-dur-fast) var(--zx-ease), border-color var(--zx-dur-fast) var(--zx-ease);
6851
+ }
6852
+ }
6853
+ @media (forced-colors: active) {
6854
+ .zx-calendar__event-action {
6855
+ border: 1px solid CanvasText;
6856
+ border-inline-start-width: 4px;
6857
+ }
6858
+ .zx-calendar__now {
6859
+ border-color: Highlight;
6860
+ }
6861
+ .zx-calendar__year-day[data-activity] {
6862
+ outline: 1px solid CanvasText;
6863
+ }
6864
+ }
6865
+
6866
+ /* src/components/view/record-view.css */
6867
+ .zx-record-view {
6868
+ min-inline-size: 0;
6869
+ color: var(--zx-color-text);
6870
+ }
6871
+ .zx-record-view__toolbar {
6872
+ display: flex;
6873
+ align-items: center;
6874
+ justify-content: flex-end;
6875
+ gap: var(--zx-space-2);
6876
+ margin-block-end: var(--zx-space-2);
6877
+ }
6878
+ .zx-record-view__field-controls {
6879
+ position: relative;
6880
+ inline-size: max-content;
6881
+ margin-inline-start: auto;
6882
+ }
6883
+ .zx-record-view__field-controls > summary {
6884
+ display: inline-flex;
6885
+ align-items: center;
6886
+ gap: var(--zx-space-1);
6887
+ cursor: pointer;
6888
+ list-style: none;
6889
+ }
6890
+ .zx-record-view__field-controls > summary::-webkit-details-marker {
6891
+ display: none;
6892
+ }
6893
+ .zx-record-view__field-list {
6894
+ position: absolute;
6895
+ z-index: 4;
6896
+ inset-block-start: calc(100% + var(--zx-space-1));
6897
+ inset-inline-end: 0;
6898
+ display: grid;
6899
+ min-inline-size: 230px;
6900
+ max-block-size: min(360px, 70vh);
6901
+ overflow: auto;
6902
+ border: 1px solid var(--zx-color-border-strong);
6903
+ border-radius: var(--zx-radius-md);
6904
+ background: var(--zx-color-bg-raised);
6905
+ box-shadow: var(--zx-overlay-shadow);
6906
+ padding: var(--zx-space-2);
6907
+ }
6908
+ .zx-record-view__field-option {
6909
+ display: grid;
6910
+ grid-template-columns: minmax(0, 1fr) auto;
6911
+ align-items: center;
6912
+ gap: var(--zx-space-2);
6913
+ min-block-size: var(--zx-control-height);
6914
+ }
6915
+ .zx-record-view__field-option > label {
6916
+ display: flex;
6917
+ align-items: center;
6918
+ gap: var(--zx-space-2);
6919
+ min-inline-size: 0;
6920
+ }
6921
+ .zx-record-view__field-option > label > span {
6922
+ overflow: hidden;
6923
+ text-overflow: ellipsis;
6924
+ white-space: nowrap;
6925
+ }
6926
+ .zx-record-view__field-order {
6927
+ display: inline-flex;
6928
+ }
6929
+ .zx-record-view__field-move {
6930
+ display: inline-grid;
6931
+ place-items: center;
6932
+ inline-size: 26px;
6933
+ block-size: 26px;
6934
+ border: 0;
6935
+ border-radius: var(--zx-radius-sm);
6936
+ background: transparent;
6937
+ color: var(--zx-color-text-muted);
6938
+ cursor: pointer;
6939
+ }
6940
+ .zx-record-view__field-move:hover:not(:disabled) {
6941
+ background: var(--zx-color-bg-hover);
6942
+ color: var(--zx-color-text);
6943
+ }
6944
+ .zx-record-view__field-move:focus-visible {
6945
+ outline: none;
6946
+ box-shadow: var(--zx-focus-ring);
6947
+ }
6948
+ .zx-record-view__field-move:disabled {
6949
+ opacity: .35;
6950
+ cursor: not-allowed;
6951
+ }
6952
+ .zx-record-view[data-loading=true] {
6953
+ cursor: progress;
6954
+ }
6955
+ .zx-record-view[data-loading=true] > :not(.zx-record-view__toolbar) {
6956
+ opacity: .62;
6957
+ }
6958
+ @media (prefers-reduced-motion: no-preference) {
6959
+ .zx-record-view__field-move,
6960
+ .zx-record-view[data-loading=true] > :not(.zx-record-view__toolbar) {
6961
+ transition:
6962
+ color var(--zx-dur-fast) var(--zx-ease),
6963
+ background var(--zx-dur-fast) var(--zx-ease),
6964
+ opacity var(--zx-dur-fast) var(--zx-ease);
6965
+ }
6966
+ }
6967
+
6968
+ /* src/components/table/table.css */
6969
+ .zx-table {
6970
+ min-inline-size: 0;
6971
+ }
6972
+ .zx-table__column-controls {
6973
+ position: relative;
6974
+ inline-size: max-content;
6975
+ margin: 0 0 var(--zx-space-2) auto;
6976
+ }
6977
+ .zx-table__reorder-status {
6978
+ position: absolute;
6979
+ inline-size: 1px;
6980
+ block-size: 1px;
6981
+ overflow: hidden;
6982
+ clip-path: inset(50%);
6983
+ }
6984
+ .zx-table__column-controls > summary {
6985
+ display: inline-flex;
6986
+ align-items: center;
6987
+ gap: var(--zx-space-2);
6988
+ list-style: none;
6989
+ cursor: pointer;
6990
+ }
6991
+ .zx-table__column-controls > summary::-webkit-details-marker {
6992
+ display: none;
6993
+ }
6994
+ .zx-table__column-list {
6995
+ position: absolute;
6996
+ z-index: 4;
6997
+ inset-block-start: calc(100% + var(--zx-space-1));
6998
+ inset-inline-end: 0;
6999
+ display: grid;
7000
+ min-inline-size: 190px;
7001
+ border: 1px solid var(--zx-color-overlay-border);
7002
+ border-radius: var(--zx-radius-md);
7003
+ background-color: var(--zx-color-overlay-surface);
7004
+ background-image: var(--zx-overlay-surface-image);
7005
+ background-clip: padding-box;
7006
+ -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
7007
+ backdrop-filter: var(--zx-glass-filter-overlay);
7008
+ box-shadow: var(--zx-glass-overlay-shadow);
7009
+ padding: var(--zx-space-2);
7010
+ max-block-size: min(360px, 70vh);
7011
+ overflow: auto;
7012
+ }
7013
+ @media (prefers-reduced-transparency: reduce) {
7014
+ .zx-table__column-list {
7015
+ border-color: var(--zx-color-border-strong);
7016
+ background: var(--zx-color-bg-raised);
7017
+ -webkit-backdrop-filter: none;
7018
+ backdrop-filter: none;
7019
+ box-shadow: var(--zx-overlay-shadow);
7020
+ }
7021
+ }
7022
+ .zx-table__column-option {
7023
+ display: grid;
7024
+ grid-template-columns: minmax(0, 1fr) auto;
7025
+ align-items: center;
7026
+ gap: var(--zx-space-2);
7027
+ min-block-size: var(--zx-control-height);
7028
+ border-radius: var(--zx-radius-sm);
7029
+ padding-inline: var(--zx-space-2);
7030
+ }
7031
+ .zx-table__column-option:hover {
7032
+ background: var(--zx-color-overlay-hover);
7033
+ }
7034
+ .zx-table__column-option > label,
7035
+ .zx-table__column-label {
7036
+ display: flex;
7037
+ align-items: center;
7038
+ gap: var(--zx-space-2);
7039
+ min-inline-size: 0;
7040
+ }
7041
+ .zx-table__column-option > label > span,
7042
+ .zx-table__column-label {
7043
+ overflow: hidden;
7044
+ text-overflow: ellipsis;
7045
+ white-space: nowrap;
7046
+ }
7047
+ .zx-table__column-order {
7048
+ display: inline-flex;
7049
+ }
7050
+ .zx-table__column-move {
7051
+ display: inline-grid;
7052
+ place-items: center;
7053
+ inline-size: 26px;
7054
+ block-size: 26px;
7055
+ border: 0;
7056
+ border-radius: var(--zx-radius-sm);
7057
+ background: transparent;
7058
+ color: var(--zx-color-text-muted);
7059
+ cursor: pointer;
7060
+ }
7061
+ .zx-table__column-move:hover:not(:disabled) {
7062
+ background: var(--zx-color-bg-hover);
7063
+ color: var(--zx-color-text);
7064
+ }
7065
+ .zx-table__column-move:focus-visible {
7066
+ outline: none;
7067
+ box-shadow: var(--zx-focus-ring);
7068
+ }
7069
+ .zx-table__column-move:disabled {
7070
+ opacity: .35;
7071
+ cursor: not-allowed;
7072
+ }
7073
+ .zx-table__column-status {
7074
+ position: absolute;
7075
+ inline-size: 1px;
7076
+ block-size: 1px;
7077
+ overflow: hidden;
7078
+ clip-path: inset(50%);
7079
+ }
7080
+ @media (prefers-reduced-motion: no-preference) {
7081
+ .zx-table__column-move {
7082
+ transition:
7083
+ color var(--zx-dur-fast) var(--zx-ease),
7084
+ background var(--zx-dur-fast) var(--zx-ease),
7085
+ opacity var(--zx-dur-fast) var(--zx-ease);
7086
+ }
7087
+ }
7088
+ .zx-table__reorder-column,
7089
+ .zx-table__reorder-header,
7090
+ .zx-table__reorder-cell {
7091
+ inline-size: var(--zx-control-height);
7092
+ text-align: center;
7093
+ }
7094
+ .zx-table__row-handle {
7095
+ display: inline-grid;
7096
+ place-items: center;
7097
+ inline-size: 26px;
7098
+ block-size: 26px;
7099
+ min-block-size: 0;
7100
+ border: 0;
7101
+ border-radius: var(--zx-radius-sm);
7102
+ background: transparent;
7103
+ padding: 0;
7104
+ color: var(--zx-color-text-muted);
7105
+ cursor: grab;
7106
+ }
7107
+ .zx-table__row-handle:hover,
7108
+ .zx-table__row-handle[aria-pressed=true] {
7109
+ background: var(--zx-color-bg-hover);
7110
+ color: var(--zx-color-text);
7111
+ }
7112
+ .zx-table__row-handle:active {
7113
+ cursor: grabbing;
7114
+ }
7115
+ .zx-table__body tr[data-dragging] {
7116
+ opacity: .55;
7117
+ }
7118
+ .zx-table__body tr[data-drop=before] {
7119
+ box-shadow: inset 0 2px 0 var(--zx-color-accent);
7120
+ }
7121
+ .zx-table__body tr[data-drop=after] {
7122
+ box-shadow: inset 0 -2px 0 var(--zx-color-accent);
7123
+ }
7124
+ .zx-table__scroll {
7125
+ position: relative;
7126
+ max-inline-size: 100%;
7127
+ overflow: auto;
7128
+ border: 1px solid var(--zx-color-border);
7129
+ border-radius: var(--zx-radius-md);
7130
+ background: var(--zx-color-bg-surface);
7131
+ scrollbar-gutter: stable;
7132
+ }
7133
+ .zx-table[data-loading=true] .zx-table__body {
7134
+ opacity: 0.5;
7135
+ }
7136
+ .zx-table[data-loading=true] .zx-table__scroll::after {
7137
+ content: "";
7138
+ position: sticky;
7139
+ inset-block-start: 0;
7140
+ inset-inline: 0;
7141
+ display: block;
7142
+ block-size: 2px;
7143
+ margin-block-end: -2px;
7144
+ background: var(--zx-color-accent);
7145
+ opacity: 0.85;
7146
+ z-index: 2;
7147
+ }
7148
+ @media (prefers-reduced-motion: no-preference) {
7149
+ .zx-table[data-loading=true] .zx-table__scroll::after {
7150
+ background:
7151
+ linear-gradient(
7152
+ 90deg,
7153
+ transparent 0%,
7154
+ var(--zx-color-accent) 50%,
7155
+ transparent 100%);
7156
+ background-size: 40% 100%;
7157
+ background-repeat: no-repeat;
7158
+ animation: zx-table-loading 1.1s var(--zx-ease) infinite;
7159
+ }
7160
+ }
7161
+ @keyframes zx-table-loading {
7162
+ from {
7163
+ background-position: -40% 0;
7164
+ }
7165
+ to {
7166
+ background-position: 140% 0;
7167
+ }
7168
+ }
7169
+ .zx-table__table {
7170
+ inline-size: 100%;
7171
+ border-spacing: 0;
7172
+ background: var(--zx-color-bg-surface);
7173
+ color: var(--zx-color-text);
7174
+ }
7175
+ .zx-table__table[data-layout=auto] {
7176
+ min-inline-size: max-content;
7177
+ }
7178
+ .zx-table__table[data-layout=fixed] {
7179
+ table-layout: fixed;
7180
+ }
7181
+ .zx-table__selection-column {
7182
+ inline-size: var(--zx-control-height);
7183
+ }
7184
+ .zx-table th,
7185
+ .zx-table td {
7186
+ border-block-end: 1px solid var(--zx-table-border-color, var(--zx-color-border));
7187
+ padding: var(--zx-space-2) var(--zx-space-3);
7188
+ text-align: start;
7189
+ vertical-align: middle;
7190
+ }
7191
+ .zx-table th {
7192
+ background: var(--zx-table-header-bg, var(--zx-color-bg-raised));
7193
+ color: var(--zx-color-text-muted);
7194
+ font-size: var(--zx-text-sm);
7195
+ font-weight: 650;
7196
+ }
7197
+ .zx-table__scroll[data-sticky-header=true] th {
7198
+ position: sticky;
7199
+ z-index: 1;
7200
+ inset-block-start: 0;
7201
+ }
7202
+ .zx-table th[data-align=center],
7203
+ .zx-table td[data-align=center] {
7204
+ text-align: center;
7205
+ }
7206
+ .zx-table th[data-align=end],
7207
+ .zx-table td[data-align=end],
7208
+ .zx-table th[data-align=right],
7209
+ .zx-table td[data-align=right] {
7210
+ text-align: end;
7211
+ }
7212
+ .zx-table th[data-align=left],
7213
+ .zx-table td[data-align=left] {
7214
+ text-align: left;
7215
+ }
7216
+ .zx-table__sort-button {
7217
+ display: flex;
7218
+ align-items: center;
7219
+ justify-content: space-between;
7220
+ gap: var(--zx-space-2);
7221
+ inline-size: 100%;
7222
+ min-block-size: auto;
7223
+ border: 0;
7224
+ border-radius: var(--zx-radius-sm);
7225
+ background: inherit;
7226
+ color: inherit;
7227
+ padding: 0;
7228
+ text-align: inherit;
7229
+ }
7230
+ .zx-table__sort-button:hover {
7231
+ background: var(--zx-table-row-hover-bg, var(--zx-color-bg-hover));
7232
+ color: var(--zx-color-text);
7233
+ }
7234
+ .zx-table__sort-button:focus-visible {
7235
+ box-shadow: var(--zx-focus-ring);
7236
+ }
7237
+ .zx-table th[aria-sort=ascending] .zx-table__sort-button::after {
7238
+ content: "\2191";
7239
+ color: var(--zx-color-accent);
7240
+ }
7241
+ .zx-table th[aria-sort=descending] .zx-table__sort-button::after {
7242
+ content: "\2193";
7243
+ color: var(--zx-color-accent);
7244
+ }
7245
+ .zx-table__body tr:last-child td {
7246
+ border-block-end: 0;
7247
+ }
7248
+ .zx-table__scroll[data-zebra=true] .zx-table__body tr:nth-child(even):not([aria-selected=true]) {
7249
+ background: var(--zx-color-bg-page);
7250
+ }
7251
+ .zx-table__body tr[aria-selected=true] {
7252
+ background: var(--zx-table-row-selected-bg, var(--zx-color-bg-selected));
7253
+ }
7254
+ .zx-table__body tr[data-row]:hover {
7255
+ background: var(--zx-color-bg-hover);
7256
+ }
7257
+ .zx-table__checkbox {
7258
+ inline-size: var(--zx-space-4);
7259
+ min-block-size: auto;
7260
+ block-size: var(--zx-space-4);
7261
+ margin: 0;
7262
+ accent-color: var(--zx-color-accent);
7263
+ }
7264
+ .zx-table__selection-header,
7265
+ .zx-table__selection-cell {
7266
+ inline-size: var(--zx-control-height);
7267
+ text-align: center;
7268
+ }
7269
+ .zx-table__empty {
7270
+ padding-block: var(--zx-space-6);
7271
+ color: var(--zx-color-text-muted);
7272
+ text-align: center;
7273
+ }
7274
+ .zx-table__tree-cell {
7275
+ display: flex;
7276
+ min-inline-size: 0;
7277
+ align-items: center;
7278
+ gap: var(--zx-space-1);
7279
+ padding-inline-start: calc(var(--zx-table-depth, 0) * var(--zx-space-4));
7280
+ }
7281
+ .zx-table__tree-toggle,
7282
+ .zx-table__tree-spacer {
7283
+ inline-size: 24px;
7284
+ block-size: 24px;
7285
+ flex: 0 0 24px;
7286
+ }
7287
+ .zx-table__tree-toggle {
7288
+ display: inline-grid;
7289
+ min-block-size: 0;
7290
+ place-items: center;
7291
+ padding: 0;
7292
+ border: 0;
7293
+ border-radius: var(--zx-radius-sm);
7294
+ background: transparent;
7295
+ color: var(--zx-color-text-muted);
7296
+ cursor: pointer;
7297
+ }
7298
+ .zx-table__tree-toggle:hover {
7299
+ background: var(--zx-color-bg-hover);
7300
+ color: var(--zx-color-text);
7301
+ }
7302
+ .zx-table__tree-toggle:focus-visible {
7303
+ outline: 0;
7304
+ box-shadow: var(--zx-focus-ring);
7305
+ }
7306
+ .zx-table__cell-content {
7307
+ min-inline-size: 0;
7308
+ }
7309
+ .zx-table[data-edit-mode] .zx-table__body td {
7310
+ block-size: var(--zx-control-height);
7311
+ }
7312
+ .zx-table__body td[data-editable=true] {
7313
+ cursor: cell;
7314
+ }
7315
+ .zx-table__body td[data-editable=true]:focus-visible {
7316
+ outline: 0;
7317
+ box-shadow: inset var(--zx-focus-ring);
7318
+ }
7319
+ .zx-table__body td[data-editing=true] {
7320
+ position: relative;
7321
+ }
7322
+ .zx-table__cell-shadow {
7323
+ visibility: hidden;
7324
+ }
7325
+ .zx-table__editor {
7326
+ position: absolute;
7327
+ inset: 0;
7328
+ display: flex;
7329
+ align-items: center;
7330
+ gap: var(--zx-space-1);
7331
+ padding-inline: var(--zx-space-1);
7332
+ background: var(--zx-color-bg-surface);
7333
+ }
7334
+ .zx-table__editor > * {
7335
+ inline-size: 100%;
7336
+ }
7337
+ .zx-table__editor[data-editor=checkbox] {
7338
+ justify-content: center;
7339
+ }
7340
+ .zx-table__editor[data-editor=checkbox] > * {
7341
+ inline-size: auto;
7342
+ }
7343
+ .zx-table__editor-input {
7344
+ inline-size: 100%;
7345
+ min-block-size: 0;
7346
+ block-size: var(--zx-control-height);
7347
+ padding-inline: var(--zx-space-2);
7348
+ }
7349
+ .zx-table__editor-textarea {
7350
+ block-size: 100%;
7351
+ padding-block: var(--zx-space-1);
7352
+ resize: none;
7353
+ }
7354
+ .zx-table__body td[data-invalid=true] .zx-table__editor {
7355
+ box-shadow: inset 0 0 0 1px var(--zx-color-danger);
7356
+ }
7357
+ .zx-table__body td[data-invalid=true] .zx-table__editor-input {
7358
+ border-color: var(--zx-color-danger);
7359
+ }
7360
+ .zx-table__message {
7361
+ padding: var(--zx-space-2) var(--zx-space-3);
7362
+ color: var(--zx-color-danger);
7363
+ font-size: var(--zx-text-sm);
7364
+ }
7365
+ .zx-table__message:empty {
7366
+ display: none;
7367
+ }
7368
+ .zx-table[data-stacked] .zx-table__table,
7369
+ .zx-table[data-stacked] .zx-table__body,
7370
+ .zx-table[data-stacked] .zx-table__body > tr {
7371
+ display: block;
7372
+ inline-size: 100%;
7373
+ }
7374
+ .zx-table[data-stacked] .zx-table__head,
7375
+ .zx-table[data-stacked] .zx-table__columns {
7376
+ display: none;
7377
+ }
7378
+ .zx-table[data-stacked] .zx-table__body > tr {
7379
+ padding-block: var(--zx-space-3);
7380
+ padding-inline: var(--zx-space-4);
7381
+ border-block-end: 1px solid var(--zx-color-border);
7382
+ }
7383
+ .zx-table[data-stacked] .zx-table__body td {
7384
+ display: flex;
7385
+ align-items: baseline;
7386
+ justify-content: space-between;
7387
+ gap: var(--zx-space-4);
7388
+ inline-size: auto;
7389
+ padding-block: var(--zx-space-1);
7390
+ padding-inline: 0;
7391
+ border: 0;
7392
+ text-align: start;
7393
+ white-space: normal;
5869
7394
  }
5870
7395
  .zx-table[data-stacked] .zx-table__body td[data-label]::before {
5871
7396
  content: attr(data-label);
@@ -5873,38 +7398,578 @@ body:has(> .zx-modal:modal) {
5873
7398
  color: var(--zx-color-text-muted);
5874
7399
  font-size: var(--zx-text-sm);
5875
7400
  }
5876
- .zx-table[data-stacked] .zx-table__body td[data-popin=false] {
5877
- display: block;
5878
- padding-block-end: var(--zx-space-2);
5879
- font-size: var(--zx-text-lg);
7401
+ .zx-table[data-stacked] .zx-table__body td[data-popin=false] {
7402
+ display: block;
7403
+ padding-block-end: var(--zx-space-2);
7404
+ font-size: var(--zx-text-lg);
7405
+ font-weight: 600;
7406
+ }
7407
+ .zx-table[data-stacked] .zx-table__body td[data-popin=false]::before {
7408
+ content: none;
7409
+ }
7410
+ .zx-table[data-stacked] .zx-table__selection-cell {
7411
+ justify-content: flex-start;
7412
+ }
7413
+ .zx-table[data-stacked] .zx-table__reorder-cell {
7414
+ justify-content: flex-start;
7415
+ }
7416
+ .zx-table[data-stacked] .zx-table__empty-row {
7417
+ display: block;
7418
+ }
7419
+ .zx-table__more {
7420
+ display: block;
7421
+ inline-size: 100%;
7422
+ margin-block-start: var(--zx-space-2);
7423
+ border: 1px dashed var(--zx-color-border);
7424
+ background: none;
7425
+ color: var(--zx-color-text-muted);
7426
+ font-size: var(--zx-control-font-size);
7427
+ }
7428
+ .zx-table__more:hover {
7429
+ border-color: var(--zx-color-border-strong);
7430
+ background: var(--zx-color-bg-hover);
7431
+ color: var(--zx-color-text);
7432
+ }
7433
+
7434
+ /* src/components/table-view/table-view.css */
7435
+ .zx-table-view {
7436
+ min-inline-size: 0;
7437
+ }
7438
+ .zx-table-view__table {
7439
+ min-inline-size: 0;
7440
+ }
7441
+ .zx-table-view[data-loading=true] .zx-table__column-controls {
7442
+ pointer-events: none;
7443
+ opacity: .62;
7444
+ }
7445
+ @media (prefers-reduced-motion: no-preference) {
7446
+ .zx-table-view .zx-table__column-controls {
7447
+ transition: opacity var(--zx-dur-fast) var(--zx-ease);
7448
+ }
7449
+ }
7450
+
7451
+ /* src/components/card-view/card-view.css */
7452
+ .zx-card-view {
7453
+ --zx-card-view-min-card-width: 18rem;
7454
+ --zx-card-view-column-basis: 0%;
7455
+ inline-size: 100%;
7456
+ min-inline-size: 0;
7457
+ container-type: inline-size;
7458
+ }
7459
+ .zx-card-view__toolbar {
7460
+ flex-wrap: wrap;
7461
+ }
7462
+ .zx-card-view__sort {
7463
+ display: inline-flex;
7464
+ align-items: center;
7465
+ gap: var(--zx-space-2);
7466
+ color: var(--zx-color-text-muted);
7467
+ font-size: var(--zx-text-sm);
7468
+ }
7469
+ .zx-card-view__sort[hidden] {
7470
+ display: none;
7471
+ }
7472
+ .zx-card-view__sort select {
7473
+ min-block-size: calc(var(--zx-control-height) - var(--zx-space-1));
7474
+ max-inline-size: min(18rem, 65vw);
7475
+ border: 1px solid var(--zx-color-border);
7476
+ border-radius: var(--zx-radius-sm);
7477
+ background: var(--zx-color-bg-surface);
7478
+ color: var(--zx-color-text);
7479
+ padding-inline: var(--zx-space-2);
7480
+ font: inherit;
7481
+ }
7482
+ .zx-card-view__sort select:focus-visible {
7483
+ outline: none;
7484
+ box-shadow: var(--zx-focus-ring);
7485
+ }
7486
+ .zx-card-view__content,
7487
+ .zx-card-view__group {
7488
+ min-inline-size: 0;
7489
+ }
7490
+ .zx-card-view__group + .zx-card-view__group {
7491
+ margin-block-start: var(--zx-space-6);
7492
+ }
7493
+ .zx-card-view__group-heading {
7494
+ margin: 0 0 var(--zx-space-3);
7495
+ color: var(--zx-color-text);
7496
+ font-size: var(--zx-text-lg);
7497
+ line-height: 1.35;
7498
+ }
7499
+ .zx-card-view__list {
7500
+ display: grid;
7501
+ 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));
7502
+ gap: var(--zx-space-4);
7503
+ min-inline-size: 0;
7504
+ margin: 0;
7505
+ padding: 0;
7506
+ list-style: none;
7507
+ }
7508
+ .zx-record-card {
7509
+ position: relative;
7510
+ display: grid;
7511
+ min-inline-size: 0;
7512
+ overflow: hidden;
7513
+ border-radius: var(--zx-radius-lg);
7514
+ color: var(--zx-color-text);
7515
+ }
7516
+ .zx-record-card[data-variant=outlined] {
7517
+ border: 1px solid var(--zx-color-border);
7518
+ background: var(--zx-color-bg-surface);
7519
+ }
7520
+ .zx-record-card[data-variant=raised] {
7521
+ border: 1px solid var(--zx-color-glass-border);
7522
+ background: var(--zx-color-glass-surface);
7523
+ -webkit-backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
7524
+ backdrop-filter: blur(var(--zx-glass-blur)) saturate(var(--zx-glass-saturation));
7525
+ box-shadow: var(--zx-glass-raised-shadow);
7526
+ }
7527
+ .zx-record-card[data-variant=filled] {
7528
+ border: 1px solid var(--zx-color-border);
7529
+ background: var(--zx-color-bg-muted);
7530
+ }
7531
+ .zx-record-card:hover {
7532
+ border-color: var(--zx-color-border-strong);
7533
+ }
7534
+ .zx-record-card:focus-visible {
7535
+ outline: none;
7536
+ box-shadow: var(--zx-focus-ring);
7537
+ }
7538
+ .zx-record-card[aria-selected=true] {
7539
+ border-color: var(--zx-color-accent);
7540
+ box-shadow: inset 0 0 0 1px var(--zx-color-accent);
7541
+ }
7542
+ .zx-record-card__preview {
7543
+ position: relative;
7544
+ display: grid;
7545
+ place-items: center;
7546
+ min-inline-size: 0;
7547
+ aspect-ratio: 16 / 9;
7548
+ overflow: hidden;
7549
+ border-block-end: 1px solid var(--zx-color-border);
7550
+ background: var(--zx-color-bg-muted);
7551
+ color: var(--zx-color-text-placeholder);
7552
+ }
7553
+ .zx-record-card__preview > :not(.zx-record-card__preview-fallback) {
7554
+ position: relative;
7555
+ z-index: 1;
7556
+ inline-size: 100%;
7557
+ block-size: 100%;
7558
+ }
7559
+ .zx-record-card__preview-image {
7560
+ display: block;
7561
+ }
7562
+ .zx-record-card__preview-image[hidden] {
7563
+ display: none;
7564
+ }
7565
+ .zx-record-card__preview-fallback {
7566
+ position: absolute;
7567
+ inset: 0;
7568
+ display: grid;
7569
+ place-items: center;
7570
+ }
7571
+ .zx-record-card__body {
7572
+ display: grid;
7573
+ align-content: start;
7574
+ gap: var(--zx-space-4);
7575
+ min-inline-size: 0;
7576
+ padding: var(--zx-space-4);
7577
+ }
7578
+ .zx-record-card__header {
7579
+ display: flex;
7580
+ align-items: flex-start;
7581
+ gap: var(--zx-space-3);
7582
+ min-inline-size: 0;
7583
+ }
7584
+ .zx-record-card__selection {
7585
+ display: inline-grid;
7586
+ flex: none;
7587
+ place-items: center;
7588
+ min-block-size: 1.5rem;
7589
+ cursor: pointer;
7590
+ }
7591
+ .zx-record-card__selection input {
7592
+ inline-size: 1rem;
7593
+ block-size: 1rem;
7594
+ margin: 0;
7595
+ accent-color: var(--zx-color-accent);
7596
+ }
7597
+ .zx-record-card__selection input:focus-visible {
7598
+ outline: none;
7599
+ box-shadow: var(--zx-focus-ring);
7600
+ }
7601
+ .zx-record-card__titles {
7602
+ flex: 1 1 auto;
7603
+ min-inline-size: 0;
7604
+ }
7605
+ .zx-record-card__heading {
7606
+ margin: 0;
7607
+ overflow-wrap: anywhere;
7608
+ font-size: var(--zx-text-lg);
7609
+ font-weight: 700;
7610
+ line-height: 1.35;
7611
+ }
7612
+ .zx-record-card__primary,
7613
+ .zx-record-card__title {
7614
+ color: inherit;
7615
+ }
7616
+ .zx-record-card__primary {
7617
+ text-decoration: none;
7618
+ }
7619
+ .zx-record-card__primary:hover {
7620
+ color: var(--zx-color-accent-hover);
7621
+ text-decoration: underline;
7622
+ }
7623
+ .zx-record-card__primary:focus-visible {
7624
+ border-radius: var(--zx-radius-sm);
7625
+ outline: none;
7626
+ box-shadow: var(--zx-focus-ring);
7627
+ }
7628
+ .zx-record-card__subtitle {
7629
+ margin: var(--zx-space-1) 0 0;
7630
+ overflow-wrap: anywhere;
7631
+ color: var(--zx-color-text-muted);
7632
+ font-size: var(--zx-text-sm);
7633
+ line-height: 1.45;
7634
+ }
7635
+ .zx-record-card__actions {
7636
+ display: flex;
7637
+ flex: none;
7638
+ flex-wrap: wrap;
7639
+ align-items: center;
7640
+ justify-content: flex-end;
7641
+ gap: var(--zx-space-1);
7642
+ }
7643
+ .zx-record-card__action {
7644
+ display: inline-flex;
7645
+ align-items: center;
7646
+ justify-content: center;
7647
+ gap: var(--zx-space-1);
7648
+ min-block-size: calc(var(--zx-control-height) - var(--zx-space-1));
7649
+ border: 1px solid var(--zx-color-border);
7650
+ border-radius: var(--zx-radius-sm);
7651
+ background: var(--zx-color-bg-surface);
7652
+ color: var(--zx-color-text);
7653
+ padding-inline: var(--zx-space-2);
7654
+ font: inherit;
7655
+ font-size: var(--zx-text-sm);
7656
+ line-height: 1;
7657
+ text-decoration: none;
7658
+ cursor: pointer;
7659
+ }
7660
+ .zx-record-card__action:hover:not(:disabled) {
7661
+ border-color: var(--zx-color-border-strong);
7662
+ background: var(--zx-color-bg-hover);
7663
+ }
7664
+ .zx-record-card__action:focus-visible {
7665
+ outline: none;
7666
+ box-shadow: var(--zx-focus-ring);
7667
+ }
7668
+ .zx-record-card__action:disabled {
7669
+ color: var(--zx-color-text-placeholder);
7670
+ cursor: not-allowed;
7671
+ }
7672
+ .zx-record-card__metadata {
7673
+ display: grid;
7674
+ grid-template-columns: repeat(2, minmax(0, 1fr));
7675
+ gap: var(--zx-space-3) var(--zx-space-4);
7676
+ min-inline-size: 0;
7677
+ margin: 0;
7678
+ }
7679
+ .zx-record-card__field {
7680
+ display: grid;
7681
+ align-content: start;
7682
+ gap: var(--zx-space-1);
7683
+ min-inline-size: 0;
7684
+ }
7685
+ .zx-record-card__label {
7686
+ overflow: hidden;
7687
+ color: var(--zx-color-text-muted);
7688
+ font-size: var(--zx-text-xs);
5880
7689
  font-weight: 600;
7690
+ line-height: 1.35;
7691
+ text-overflow: ellipsis;
7692
+ white-space: nowrap;
5881
7693
  }
5882
- .zx-table[data-stacked] .zx-table__body td[data-popin=false]::before {
5883
- content: none;
7694
+ .zx-record-card__value {
7695
+ min-inline-size: 0;
7696
+ margin: 0;
7697
+ overflow-wrap: anywhere;
7698
+ color: var(--zx-color-text);
7699
+ font-size: var(--zx-text-sm);
7700
+ line-height: 1.45;
5884
7701
  }
5885
- .zx-table[data-stacked] .zx-table__selection-cell {
5886
- justify-content: flex-start;
7702
+ .zx-record-card__value > :is(img, svg, video) {
7703
+ max-inline-size: 100%;
5887
7704
  }
5888
- .zx-table[data-stacked] .zx-table__reorder-cell {
5889
- justify-content: flex-start;
7705
+ .zx-card-view__group-empty,
7706
+ .zx-card-view__empty {
7707
+ color: var(--zx-color-text-muted);
7708
+ text-align: center;
5890
7709
  }
5891
- .zx-table[data-stacked] .zx-table__empty-row {
5892
- display: block;
7710
+ .zx-card-view__group-empty {
7711
+ grid-column: 1 / -1;
7712
+ border: 1px dashed var(--zx-color-border);
7713
+ border-radius: var(--zx-radius-md);
7714
+ padding: var(--zx-space-5);
5893
7715
  }
5894
- .zx-table__more {
5895
- display: block;
5896
- inline-size: 100%;
5897
- margin-block-start: var(--zx-space-2);
7716
+ .zx-card-view__empty {
7717
+ display: grid;
7718
+ place-items: center;
7719
+ min-block-size: 10rem;
5898
7720
  border: 1px dashed var(--zx-color-border);
5899
- background: none;
7721
+ border-radius: var(--zx-radius-lg);
7722
+ padding: var(--zx-space-6);
7723
+ }
7724
+ .zx-card-view__skeleton {
7725
+ align-content: start;
7726
+ gap: var(--zx-space-3);
7727
+ border: 1px solid var(--zx-color-border);
7728
+ background: var(--zx-color-bg-surface);
7729
+ padding: var(--zx-space-4);
7730
+ }
7731
+ .zx-card-view__skeleton-preview {
7732
+ aspect-ratio: 16 / 9;
7733
+ inline-size: calc(100% + var(--zx-space-4) + var(--zx-space-4));
7734
+ margin: calc(-1 * var(--zx-space-4)) calc(-1 * var(--zx-space-4)) var(--zx-space-2);
7735
+ }
7736
+ .zx-card-view__skeleton-line {
7737
+ block-size: .8rem;
7738
+ }
7739
+ .zx-card-view__skeleton-line:nth-child(3) {
7740
+ inline-size: 72%;
7741
+ }
7742
+ .zx-card-view__skeleton-line:nth-child(4) {
7743
+ inline-size: 48%;
7744
+ }
7745
+ @container (max-width: 28rem) {
7746
+ .zx-card-view__sort-label {
7747
+ position: absolute;
7748
+ inline-size: 1px;
7749
+ block-size: 1px;
7750
+ overflow: hidden;
7751
+ clip-path: inset(50%);
7752
+ }
7753
+ .zx-record-card__metadata {
7754
+ grid-template-columns: minmax(0, 1fr);
7755
+ }
7756
+ .zx-record-card__action-label {
7757
+ position: absolute;
7758
+ inline-size: 1px;
7759
+ block-size: 1px;
7760
+ overflow: hidden;
7761
+ clip-path: inset(50%);
7762
+ }
7763
+ }
7764
+ @media (prefers-reduced-transparency: reduce) {
7765
+ .zx-record-card[data-variant=raised] {
7766
+ border-color: var(--zx-color-border);
7767
+ background: var(--zx-color-bg-surface);
7768
+ -webkit-backdrop-filter: none;
7769
+ backdrop-filter: none;
7770
+ box-shadow: var(--zx-overlay-shadow);
7771
+ }
7772
+ }
7773
+ @media (prefers-reduced-motion: no-preference) {
7774
+ .zx-record-card,
7775
+ .zx-record-card__action,
7776
+ .zx-record-card__primary {
7777
+ transition:
7778
+ border-color var(--zx-dur-fast) var(--zx-ease),
7779
+ background var(--zx-dur-fast) var(--zx-ease),
7780
+ color var(--zx-dur-fast) var(--zx-ease),
7781
+ box-shadow var(--zx-dur-fast) var(--zx-ease);
7782
+ }
7783
+ }
7784
+
7785
+ /* src/components/kanban-view/kanban-view.css */
7786
+ .zx-kanban-view {
7787
+ inline-size: 100%;
7788
+ min-inline-size: 0;
7789
+ container-type: inline-size;
7790
+ }
7791
+ .zx-kanban-view__toolbar:empty {
7792
+ display: none;
7793
+ }
7794
+ .zx-kanban-view__board {
7795
+ min-inline-size: 0;
7796
+ overflow: auto;
7797
+ overscroll-behavior-inline: contain;
7798
+ border: 1px solid var(--zx-color-border);
7799
+ border-radius: var(--zx-radius-lg);
7800
+ background: var(--zx-color-bg-muted);
7801
+ padding: var(--zx-space-3);
7802
+ scrollbar-gutter: stable;
7803
+ }
7804
+ .zx-kanban-view__lane + .zx-kanban-view__lane {
7805
+ margin-block-start: var(--zx-space-4);
7806
+ border-block-start: 1px solid var(--zx-color-border);
7807
+ padding-block-start: var(--zx-space-3);
7808
+ }
7809
+ .zx-kanban-view__lane-heading,
7810
+ .zx-kanban-view__column-heading {
7811
+ display: flex;
7812
+ align-items: center;
7813
+ gap: var(--zx-space-2);
7814
+ margin: 0;
7815
+ color: var(--zx-color-text);
7816
+ font-size: var(--zx-text-md);
7817
+ font-weight: var(--zx-control-font-weight);
7818
+ line-height: 1.3;
7819
+ }
7820
+ .zx-kanban-view__lane-heading {
7821
+ margin-block-end: var(--zx-space-2);
7822
+ }
7823
+ .zx-kanban-view__columns {
7824
+ display: grid;
7825
+ grid-auto-flow: column;
7826
+ grid-auto-columns: minmax(260px, min(82vw, 340px));
7827
+ align-items: start;
7828
+ gap: var(--zx-space-3);
7829
+ min-inline-size: max-content;
7830
+ }
7831
+ .zx-kanban-view__column {
7832
+ display: grid;
7833
+ grid-template-rows: auto minmax(64px, auto);
7834
+ gap: var(--zx-space-2);
7835
+ min-inline-size: 0;
7836
+ border: 1px solid var(--zx-color-border);
7837
+ border-radius: var(--zx-radius-md);
7838
+ background: var(--zx-color-bg-surface);
7839
+ padding: var(--zx-space-2);
7840
+ }
7841
+ .zx-kanban-view__column[data-collapsed=true] {
7842
+ grid-template-rows: auto;
7843
+ }
7844
+ .zx-kanban-view__column-label {
7845
+ min-inline-size: 0;
7846
+ overflow: hidden;
7847
+ text-overflow: ellipsis;
7848
+ white-space: nowrap;
7849
+ }
7850
+ .zx-kanban-view__collapse,
7851
+ .zx-kanban-view__move-handle {
7852
+ display: inline-grid;
7853
+ flex: 0 0 auto;
7854
+ place-items: center;
7855
+ border: 0;
7856
+ border-radius: var(--zx-radius-sm);
7857
+ background: transparent;
5900
7858
  color: var(--zx-color-text-muted);
5901
- font-size: var(--zx-control-font-size);
7859
+ cursor: pointer;
5902
7860
  }
5903
- .zx-table__more:hover {
5904
- border-color: var(--zx-color-border-strong);
7861
+ .zx-kanban-view__collapse {
7862
+ inline-size: 26px;
7863
+ block-size: 26px;
7864
+ }
7865
+ .zx-kanban-view__move-handle {
7866
+ inline-size: 28px;
7867
+ block-size: 28px;
7868
+ cursor: grab;
7869
+ touch-action: none;
7870
+ }
7871
+ .zx-kanban-view__move-handle[aria-pressed=true] {
7872
+ background: var(--zx-color-accent-subtle);
7873
+ color: var(--zx-color-accent);
7874
+ cursor: grabbing;
7875
+ }
7876
+ .zx-kanban-view__collapse:hover,
7877
+ .zx-kanban-view__move-handle:hover {
5905
7878
  background: var(--zx-color-bg-hover);
5906
7879
  color: var(--zx-color-text);
5907
7880
  }
7881
+ .zx-kanban-view__collapse:focus-visible,
7882
+ .zx-kanban-view__move-handle:focus-visible,
7883
+ .zx-kanban-view .zx-record-card:focus-visible {
7884
+ outline: none;
7885
+ box-shadow: var(--zx-focus-ring);
7886
+ }
7887
+ .zx-kanban-view__count {
7888
+ flex: 0 0 auto;
7889
+ margin-inline-start: auto;
7890
+ border-radius: var(--zx-radius-sm);
7891
+ background: var(--zx-color-bg-muted);
7892
+ padding: var(--zx-space-1) var(--zx-space-2);
7893
+ color: var(--zx-color-text-muted);
7894
+ font-size: var(--zx-control-font-size);
7895
+ font-weight: var(--zx-control-font-weight);
7896
+ white-space: nowrap;
7897
+ }
7898
+ .zx-kanban-view__column[data-wip=limit] .zx-kanban-view__count {
7899
+ background: var(--zx-color-warning-bg);
7900
+ color: var(--zx-color-warning);
7901
+ }
7902
+ .zx-kanban-view__column[data-wip=exceeded] .zx-kanban-view__count {
7903
+ background: var(--zx-color-danger-bg);
7904
+ color: var(--zx-color-danger);
7905
+ }
7906
+ .zx-kanban-view__cards {
7907
+ position: relative;
7908
+ display: flex;
7909
+ flex-direction: column;
7910
+ gap: var(--zx-space-2);
7911
+ min-block-size: 64px;
7912
+ margin: 0;
7913
+ border-radius: var(--zx-radius-sm);
7914
+ padding: var(--zx-space-1);
7915
+ list-style: none;
7916
+ }
7917
+ .zx-kanban-view__cards > .zx-record-card {
7918
+ inline-size: 100%;
7919
+ min-inline-size: 0;
7920
+ }
7921
+ .zx-kanban-view__cards[data-drop=append],
7922
+ .zx-kanban-view__cards[data-keyboard-target=append] {
7923
+ box-shadow: inset 0 -3px 0 var(--zx-color-accent);
7924
+ }
7925
+ .zx-kanban-view .zx-record-card[data-drop=before],
7926
+ .zx-kanban-view .zx-record-card[data-keyboard-target=before] {
7927
+ box-shadow: 0 -3px 0 var(--zx-color-accent);
7928
+ }
7929
+ .zx-kanban-view .zx-record-card[data-drop=after] {
7930
+ box-shadow: 0 3px 0 var(--zx-color-accent);
7931
+ }
7932
+ .zx-kanban-view .zx-record-card[data-dragging=true] {
7933
+ opacity: .5;
7934
+ }
7935
+ .zx-kanban-view .zx-record-card[data-grabbed=true] {
7936
+ outline: 2px solid var(--zx-color-accent);
7937
+ outline-offset: 2px;
7938
+ }
7939
+ .zx-kanban-view__empty {
7940
+ display: grid;
7941
+ place-items: center;
7942
+ min-block-size: 160px;
7943
+ color: var(--zx-color-text-muted);
7944
+ text-align: center;
7945
+ }
7946
+ .zx-kanban-view__live {
7947
+ position: absolute;
7948
+ inline-size: 1px;
7949
+ block-size: 1px;
7950
+ overflow: hidden;
7951
+ clip-path: inset(50%);
7952
+ white-space: nowrap;
7953
+ }
7954
+ .zx-kanban-view[data-loading=true] .zx-kanban-view__board {
7955
+ pointer-events: none;
7956
+ }
7957
+ @container (max-width: 420px) {
7958
+ .zx-kanban-view__columns {
7959
+ grid-auto-columns: minmax(240px, 88vw);
7960
+ }
7961
+ }
7962
+ @media (prefers-reduced-motion: no-preference) {
7963
+ .zx-kanban-view__collapse,
7964
+ .zx-kanban-view__move-handle,
7965
+ .zx-kanban-view .zx-record-card {
7966
+ transition:
7967
+ color var(--zx-dur-fast) var(--zx-ease),
7968
+ background var(--zx-dur-fast) var(--zx-ease),
7969
+ box-shadow var(--zx-dur-fast) var(--zx-ease),
7970
+ opacity var(--zx-dur-fast) var(--zx-ease);
7971
+ }
7972
+ }
5908
7973
 
5909
7974
  /* src/components/grid/grid.css */
5910
7975
  .zx-table[data-preset=billing-items] tr.zx-grid-billing__summary > td {