@zeyos/zx 2.3.0 → 4.0.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 (150) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/DESIGN-SYSTEM.md +96 -0
  3. package/README.md +29 -39
  4. package/dist/types/components/account-menu/account-menu.d.ts +144 -0
  5. package/dist/types/components/app-sidebar/app-sidebar.d.ts +243 -0
  6. package/dist/types/components/avatar/avatar.d.ts +100 -0
  7. package/dist/types/components/card/card.d.ts +128 -0
  8. package/dist/types/components/chart/chart.d.ts +322 -0
  9. package/dist/types/components/date-picker/month-picker.d.ts +6 -0
  10. package/dist/types/components/dialog/dialog.d.ts +9 -0
  11. package/dist/types/components/dock/dock.d.ts +495 -0
  12. package/dist/types/components/dropdown/dropdown.d.ts +2 -2
  13. package/dist/types/components/field/field.d.ts +14 -0
  14. package/dist/types/components/field-upload/field-upload.d.ts +37 -4
  15. package/dist/types/components/form/form.d.ts +25 -3
  16. package/dist/types/components/grid/grid.d.ts +172 -0
  17. package/dist/types/components/launcher/launcher.d.ts +359 -0
  18. package/dist/types/components/layout/layout.d.ts +4 -4
  19. package/dist/types/components/menu-button/menu-button.d.ts +10 -2
  20. package/dist/types/components/modal/modal.d.ts +25 -0
  21. package/dist/types/components/multi-value-editor/multi-value-editor.d.ts +7 -1
  22. package/dist/types/components/questionnaire/items.d.ts +327 -0
  23. package/dist/types/components/questionnaire/questionnaire.d.ts +449 -0
  24. package/dist/types/components/select/select.d.ts +51 -0
  25. package/dist/types/components/sheet/sheet-stack.d.ts +167 -0
  26. package/dist/types/components/sheet/sheet.d.ts +294 -0
  27. package/dist/types/components/split-view/split-view.d.ts +2 -21
  28. package/dist/types/components/table/table.d.ts +223 -15
  29. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  30. package/dist/types/components/value-list/value-list.d.ts +24 -3
  31. package/dist/types/core/dom.d.ts +122 -0
  32. package/dist/types/core/drag-axis.d.ts +111 -0
  33. package/dist/types/core/position.d.ts +4 -2
  34. package/dist/types/index.d.ts +13 -2
  35. package/dist/types/internal/app-rail.d.ts +265 -0
  36. package/dist/types/zeyos/icons.d.ts +5 -0
  37. package/dist/types/zeyos/index.d.ts +2 -1
  38. package/dist/types/zeyos/launcher.d.ts +147 -0
  39. package/dist/types/zeyos/select.d.ts +39 -0
  40. package/dist/zx-zeyos.esm.js +1870 -133
  41. package/dist/zx-zeyos.esm.min.js +1 -1
  42. package/dist/zx.css +2006 -267
  43. package/dist/zx.esm.js +8987 -2757
  44. package/dist/zx.esm.min.js +3 -3
  45. package/dist/zx.global.js +8987 -2757
  46. package/dist/zx.global.min.js +3 -3
  47. package/dist/zx.min.css +1 -1
  48. package/docs/api.json +4396 -2344
  49. package/docs/llms.md +463 -86
  50. package/docs/llms.txt +32 -19
  51. package/package.json +10 -17
  52. package/src/components/account-menu/account-menu.css +70 -0
  53. package/src/components/account-menu/account-menu.js +208 -0
  54. package/src/components/app-rail/app-rail.css +107 -0
  55. package/src/components/app-sidebar/app-sidebar.css +80 -0
  56. package/src/components/app-sidebar/app-sidebar.js +588 -0
  57. package/src/components/avatar/avatar.css +61 -0
  58. package/src/components/avatar/avatar.js +222 -0
  59. package/src/components/button/button.css +0 -1
  60. package/src/components/card/card.css +149 -0
  61. package/src/components/card/card.js +285 -0
  62. package/src/components/chart/chart.css +61 -0
  63. package/src/components/chart/chart.js +523 -0
  64. package/src/components/date-picker/month-picker.js +9 -0
  65. package/src/components/dialog/dialog.js +11 -4
  66. package/src/components/dock/dock.css +228 -0
  67. package/src/components/dock/dock.js +977 -0
  68. package/src/components/dropdown/dropdown.js +1 -1
  69. package/src/components/field/field.js +2 -0
  70. package/src/components/field-upload/field-upload.js +9 -4
  71. package/src/components/form/form.js +6 -3
  72. package/src/components/grid/grid.css +6 -0
  73. package/src/components/grid/grid.js +220 -0
  74. package/src/components/launcher/launcher.css +210 -0
  75. package/src/components/launcher/launcher.js +765 -0
  76. package/src/components/layout/layout.js +2 -2
  77. package/src/components/menu-button/menu-button.js +27 -2
  78. package/src/components/modal/modal.css +5 -1
  79. package/src/components/modal/modal.js +37 -2
  80. package/src/components/multi-value-editor/multi-value-editor.js +2 -1
  81. package/src/components/questionnaire/items.js +370 -0
  82. package/src/components/questionnaire/questionnaire.css +387 -0
  83. package/src/components/questionnaire/questionnaire.js +1033 -0
  84. package/src/components/select/field-adapter.js +9 -4
  85. package/src/components/select/select.css +144 -11
  86. package/src/components/select/select.js +259 -27
  87. package/src/components/sheet/sheet-stack.js +304 -0
  88. package/src/components/sheet/sheet.css +351 -0
  89. package/src/components/sheet/sheet.js +551 -0
  90. package/src/components/split-view/split-view.js +76 -161
  91. package/src/components/table/table.css +43 -0
  92. package/src/components/table/table.js +531 -52
  93. package/src/components/tooltip/tooltip.js +5 -2
  94. package/src/components/value-list/value-list.js +6 -3
  95. package/src/core/dom.js +322 -0
  96. package/src/core/drag-axis.js +203 -0
  97. package/src/core/position.js +68 -22
  98. package/src/index.js +20 -2
  99. package/src/internal/app-rail.js +718 -0
  100. package/src/zeyos/icons.js +8 -3
  101. package/src/zeyos/index.js +7 -1
  102. package/src/zeyos/launcher.js +338 -0
  103. package/src/zeyos/modules.js +1 -0
  104. package/src/zeyos/select.js +115 -1
  105. package/styles/tokens/dark.css +2 -3
  106. package/styles/tokens/global.css +6 -6
  107. package/styles/tokens/modules.css +1 -0
  108. package/styles/tokens/semantic.css +5 -3
  109. package/styles/tokens/themes.css +1 -1
  110. package/styles/zx.css +11 -1
  111. package/MIGRATION.md +0 -598
  112. package/dist/types/compat/base.d.ts +0 -156
  113. package/dist/types/compat/globals.d.ts +0 -20
  114. package/dist/types/compat/index.d.ts +0 -128
  115. package/dist/types/compat/map/basic.d.ts +0 -175
  116. package/dist/types/compat/map/data.d.ts +0 -102
  117. package/dist/types/compat/map/date-time.d.ts +0 -80
  118. package/dist/types/compat/map/factory.d.ts +0 -9
  119. package/dist/types/compat/map/form.d.ts +0 -98
  120. package/dist/types/compat/map/helpers.d.ts +0 -12
  121. package/dist/types/compat/map/http.d.ts +0 -36
  122. package/dist/types/compat/map/layout.d.ts +0 -106
  123. package/dist/types/compat/map/options.d.ts +0 -80
  124. package/dist/types/compat/map/select.d.ts +0 -95
  125. package/dist/types/compat/map/stubs.d.ts +0 -32
  126. package/dist/types/compat/map/utilities.d.ts +0 -37
  127. package/dist/types/compat-entry.d.ts +0 -5
  128. package/dist/types/components/permission/permission.d.ts +0 -96
  129. package/dist/zx-compat.esm.js +0 -17484
  130. package/dist/zx-compat.esm.min.js +0 -1
  131. package/dist/zx-compat.global.js +0 -23635
  132. package/dist/zx-compat.global.min.js +0 -3
  133. package/src/compat/base.js +0 -291
  134. package/src/compat/globals.js +0 -165
  135. package/src/compat/index.js +0 -84
  136. package/src/compat/map/basic.js +0 -464
  137. package/src/compat/map/data.js +0 -232
  138. package/src/compat/map/date-time.js +0 -177
  139. package/src/compat/map/factory.js +0 -45
  140. package/src/compat/map/form.js +0 -330
  141. package/src/compat/map/helpers.js +0 -46
  142. package/src/compat/map/http.js +0 -117
  143. package/src/compat/map/layout.js +0 -256
  144. package/src/compat/map/options.js +0 -267
  145. package/src/compat/map/select.js +0 -198
  146. package/src/compat/map/stubs.js +0 -26
  147. package/src/compat/map/utilities.js +0 -113
  148. package/src/compat-entry.js +0 -11
  149. package/src/components/permission/permission.css +0 -47
  150. package/src/components/permission/permission.js +0 -201
package/dist/zx.css CHANGED
@@ -164,6 +164,7 @@
164
164
  --zx-control-font-size: var(--zx-text-md);
165
165
  --zx-control-font-weight: 500;
166
166
  --zx-overlay-shadow: var(--zx-shadow-3);
167
+ --zx-overlay-blur: 8px;
167
168
  --zx-header-bg: var(--zx-gray-900);
168
169
  --zx-header-text: var(--zx-gray-50);
169
170
  }
@@ -339,6 +340,7 @@
339
340
  --zx-module-linecoupon: var(--zx-module-line);
340
341
  --zx-module-logins: var(--zx-module-auth);
341
342
  --zx-module-mailservers: var(--zx-module-channels);
343
+ --zx-module-main: var(--zx-module-zeyos);
342
344
  --zx-module-notifications: var(--zx-module-messages);
343
345
  --zx-module-participants-campaigns: var(--zx-module-participants);
344
346
  --zx-module-participants-mailinglists: var(--zx-module-participants);
@@ -555,7 +557,6 @@ svg.zx-icon {
555
557
  padding-inline: var(--zx-space-2);
556
558
  font-size: var(--zx-text-sm);
557
559
  }
558
- .zx-btn > svg,
559
560
  .zx-btn > .zx-icon {
560
561
  flex: none;
561
562
  }
@@ -1391,6 +1392,133 @@ svg.zx-icon {
1391
1392
  }
1392
1393
  }
1393
1394
 
1395
+ /* src/components/card/card.css */
1396
+ .zx-card {
1397
+ --zx-card-media-size: 8rem;
1398
+ position: relative;
1399
+ inline-size: 100%;
1400
+ container-type: inline-size;
1401
+ overflow: hidden;
1402
+ border-radius: var(--zx-radius-lg);
1403
+ color: var(--zx-color-text);
1404
+ }
1405
+ .zx-card[data-variant=outlined] {
1406
+ border: 1px solid var(--zx-color-border);
1407
+ background: var(--zx-color-bg-surface);
1408
+ }
1409
+ .zx-card[data-variant=raised] {
1410
+ border: 1px solid transparent;
1411
+ background: var(--zx-color-bg-surface);
1412
+ box-shadow: var(--zx-overlay-shadow);
1413
+ }
1414
+ .zx-card[data-variant=filled] {
1415
+ border: 1px solid transparent;
1416
+ background: var(--zx-color-bg-muted);
1417
+ }
1418
+ .zx-card[data-linked=true]:hover {
1419
+ background: var(--zx-color-bg-hover);
1420
+ }
1421
+ .zx-card:has(.zx-card__primary:focus-visible) {
1422
+ outline: 0;
1423
+ box-shadow: var(--zx-focus-ring);
1424
+ }
1425
+ .zx-card__layout,
1426
+ .zx-card__inner {
1427
+ min-inline-size: 0;
1428
+ }
1429
+ .zx-card__inner {
1430
+ display: grid;
1431
+ gap: var(--zx-space-3);
1432
+ padding: var(--zx-space-5);
1433
+ }
1434
+ .zx-card[data-orientation=horizontal] .zx-card__layout {
1435
+ display: grid;
1436
+ grid-template-columns: var(--zx-card-media-size) minmax(0, 1fr);
1437
+ align-items: stretch;
1438
+ }
1439
+ .zx-card__media {
1440
+ min-inline-size: 0;
1441
+ overflow: hidden;
1442
+ }
1443
+ .zx-card[data-orientation=horizontal] .zx-card__media {
1444
+ min-block-size: var(--zx-card-media-size);
1445
+ }
1446
+ .zx-card__media > :is(img, video, svg) {
1447
+ display: block;
1448
+ inline-size: 100%;
1449
+ block-size: 100%;
1450
+ object-fit: cover;
1451
+ }
1452
+ .zx-card__header {
1453
+ display: flex;
1454
+ align-items: start;
1455
+ justify-content: space-between;
1456
+ gap: var(--zx-space-3);
1457
+ }
1458
+ .zx-card__header[hidden],
1459
+ .zx-card__media[hidden],
1460
+ .zx-card__content[hidden],
1461
+ .zx-card__footer[hidden],
1462
+ .zx-card__actions[hidden] {
1463
+ display: none;
1464
+ }
1465
+ .zx-card__heading {
1466
+ min-inline-size: 0;
1467
+ margin: 0;
1468
+ font-size: var(--zx-text-lg);
1469
+ font-weight: 700;
1470
+ line-height: 1.3;
1471
+ letter-spacing: -0.012em;
1472
+ }
1473
+ .zx-card__primary,
1474
+ .zx-card__title {
1475
+ color: inherit;
1476
+ }
1477
+ .zx-card__primary {
1478
+ text-decoration: none;
1479
+ }
1480
+ .zx-card[data-linked=true] .zx-card__primary::after {
1481
+ content: "";
1482
+ position: absolute;
1483
+ inset: 0;
1484
+ z-index: 1;
1485
+ }
1486
+ .zx-card__primary:focus-visible {
1487
+ outline: 0;
1488
+ }
1489
+ .zx-card__actions,
1490
+ .zx-card__content :is(a, button, input, select, textarea, summary, [tabindex]:not([tabindex="-1"])),
1491
+ .zx-card__footer :is(a, button, input, select, textarea, summary, [tabindex]:not([tabindex="-1"])) {
1492
+ position: relative;
1493
+ z-index: 2;
1494
+ }
1495
+ .zx-card__actions {
1496
+ display: flex;
1497
+ flex: none;
1498
+ flex-wrap: wrap;
1499
+ align-items: center;
1500
+ justify-content: end;
1501
+ gap: var(--zx-space-2);
1502
+ }
1503
+ .zx-card__content {
1504
+ color: var(--zx-color-text-muted);
1505
+ line-height: 1.6;
1506
+ }
1507
+ .zx-card__footer {
1508
+ padding-block-start: var(--zx-space-3);
1509
+ border-block-start: 1px solid var(--zx-color-border);
1510
+ color: var(--zx-color-text-muted);
1511
+ font-size: var(--zx-text-sm);
1512
+ }
1513
+ @container (max-width: 28rem) {
1514
+ .zx-card[data-orientation=horizontal] .zx-card__layout {
1515
+ grid-template-columns: minmax(0, 1fr);
1516
+ }
1517
+ .zx-card[data-orientation=horizontal] .zx-card__media {
1518
+ min-block-size: 0;
1519
+ }
1520
+ }
1521
+
1394
1522
  /* src/components/panel/panel.css */
1395
1523
  .zx-panel {
1396
1524
  overflow: hidden;
@@ -1923,212 +2051,1103 @@ button.zx-panel__toggle:focus-visible {
1923
2051
  display: none;
1924
2052
  }
1925
2053
 
1926
- /* src/components/message/message.css */
1927
- .zx-message {
1928
- display: grid;
1929
- gap: var(--zx-space-2);
1930
- }
1931
- .zx-message-region {
1932
- position: fixed;
1933
- inset-block: var(--zx-space-4) auto;
1934
- inset-inline: var(--zx-space-4);
1935
- inline-size: min(420px, calc(100% - (2 * var(--zx-space-4))));
1936
- max-block-size: calc(100% - (2 * var(--zx-space-4)));
1937
- margin: 0 auto;
1938
- overflow: visible;
1939
- border: 0;
1940
- background: none;
1941
- padding: 0;
1942
- }
1943
- .zx-message-region:popover-open {
1944
- display: grid;
1945
- }
1946
- .zx-message__toast {
1947
- --zx-message-kind: var(--zx-color-info);
1948
- position: relative;
1949
- display: grid;
1950
- grid-template-columns: auto minmax(0, 1fr) auto;
1951
- align-items: start;
1952
- gap: var(--zx-space-3);
2054
+ /* src/components/launcher/launcher.css */
2055
+ .zx-launcher {
2056
+ inline-size: min(760px, calc(100vw - (2 * var(--zx-space-4))));
2057
+ max-block-size: min(720px, calc(100vh - (2 * var(--zx-space-6))));
1953
2058
  border: 1px solid var(--zx-color-border);
1954
- border-inline-start: 4px solid var(--zx-message-kind);
1955
- border-radius: var(--zx-radius-md);
1956
- background: var(--zx-color-info-bg);
2059
+ border-radius: var(--zx-radius-xl);
2060
+ background: var(--zx-color-bg-raised);
1957
2061
  box-shadow: var(--zx-overlay-shadow);
1958
- padding: var(--zx-space-3);
1959
2062
  color: var(--zx-color-text);
2063
+ padding: 0;
1960
2064
  }
1961
- .zx-message__toast[data-kind=success] {
1962
- --zx-message-kind: var(--zx-color-success);
1963
- background: var(--zx-color-success-bg);
2065
+ .zx-launcher::backdrop {
2066
+ background: var(--zx-color-bg-backdrop);
1964
2067
  }
1965
- .zx-message__toast[data-kind=warning] {
1966
- --zx-message-kind: var(--zx-color-warning);
1967
- background: var(--zx-color-warning-bg);
2068
+ .zx-launcher__surface {
2069
+ display: grid;
2070
+ grid-template-rows: auto auto minmax(0, 1fr) auto;
2071
+ max-block-size: inherit;
1968
2072
  }
1969
- .zx-message__toast[data-kind=error] {
1970
- --zx-message-kind: var(--zx-color-danger);
1971
- background: var(--zx-color-danger-bg);
2073
+ .zx-launcher__search {
2074
+ display: grid;
2075
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
2076
+ align-items: center;
2077
+ gap: var(--zx-space-3);
2078
+ border-block-end: 1px solid var(--zx-color-border);
2079
+ padding: var(--zx-space-3) var(--zx-space-4);
1972
2080
  }
1973
- .zx-message__icon {
1974
- display: inline-grid;
1975
- place-items: center;
1976
- color: var(--zx-message-kind);
2081
+ .zx-launcher__search[data-shortcut=false] {
2082
+ grid-template-columns: auto minmax(0, 1fr) auto;
1977
2083
  }
1978
- .zx-message__content {
2084
+ .zx-launcher__input {
1979
2085
  min-inline-size: 0;
1980
- overflow-wrap: anywhere;
2086
+ border: 0;
2087
+ outline: 0;
2088
+ background: transparent;
2089
+ color: inherit;
2090
+ font-size: var(--zx-text-lg);
1981
2091
  }
1982
- .zx-message__close {
1983
- margin: calc(-1 * var(--zx-space-1)) calc(-1 * var(--zx-space-1)) 0 0;
2092
+ .zx-launcher__input:focus-visible {
2093
+ box-shadow: inset var(--zx-focus-ring);
1984
2094
  }
1985
- .zx-message__progress {
1986
- overflow: hidden;
1987
- block-size: 4px;
1988
- margin-block-start: var(--zx-space-2);
1989
- border-radius: var(--zx-radius-full);
1990
- background: var(--zx-color-border);
2095
+ .zx-launcher__input::-webkit-search-cancel-button {
2096
+ display: none;
1991
2097
  }
1992
- .zx-message__progress-fill {
1993
- display: block;
1994
- block-size: 100%;
1995
- border-radius: inherit;
1996
- background: var(--zx-message-kind);
2098
+ .zx-launcher__shortcut,
2099
+ .zx-launcher__hints kbd {
2100
+ border: 1px solid var(--zx-color-border-control);
2101
+ border-radius: var(--zx-radius-sm);
2102
+ background: var(--zx-color-bg-muted);
2103
+ color: var(--zx-color-text-muted);
2104
+ font-family: var(--zx-font-mono);
2105
+ font-size: var(--zx-text-xs);
2106
+ font-weight: 600;
2107
+ line-height: 1.5;
1997
2108
  }
1998
- @media (prefers-reduced-motion: no-preference) {
1999
- .zx-message__toast[data-state=open] {
2000
- animation: zx-message-enter var(--zx-dur-base) var(--zx-ease) both;
2001
- }
2002
- .zx-message__toast[data-state=closing] {
2003
- animation: zx-message-exit var(--zx-dur-base) var(--zx-ease) both;
2004
- }
2005
- .zx-message__progress-fill {
2006
- transition: inline-size var(--zx-dur-base) var(--zx-ease);
2007
- }
2109
+ .zx-launcher__shortcut {
2110
+ padding-inline: var(--zx-space-2);
2111
+ white-space: nowrap;
2008
2112
  }
2009
- @keyframes zx-message-enter {
2010
- from {
2011
- opacity: 0;
2012
- transform: translateY(calc(-1 * var(--zx-space-2)));
2013
- }
2014
- to {
2015
- opacity: 1;
2016
- transform: translateY(0);
2017
- }
2113
+ .zx-launcher__status {
2114
+ margin: 0;
2115
+ padding: var(--zx-space-5);
2116
+ color: var(--zx-color-text-muted);
2117
+ text-align: center;
2018
2118
  }
2019
- @keyframes zx-message-exit {
2020
- from {
2021
- opacity: 1;
2022
- transform: translateY(0);
2023
- }
2024
- to {
2025
- opacity: 0;
2026
- transform: translateY(calc(-1 * var(--zx-space-2)));
2027
- }
2119
+ .zx-launcher__status[hidden] {
2120
+ display: none;
2028
2121
  }
2029
-
2030
- /* src/components/modal/modal.css */
2031
- .zx-modal {
2032
- max-inline-size: calc(100vw - (2 * var(--zx-space-4)));
2033
- max-block-size: calc(100vh - (2 * var(--zx-space-4)));
2122
+ .zx-launcher__results {
2123
+ min-block-size: 0;
2034
2124
  overflow: auto;
2035
- border: 1px solid var(--zx-color-border);
2036
- border-radius: var(--zx-radius-lg);
2037
- background: var(--zx-color-bg-raised);
2038
- box-shadow: var(--zx-overlay-shadow);
2039
- color: var(--zx-color-text);
2040
- padding: 0;
2125
+ padding: var(--zx-space-2);
2041
2126
  }
2042
- .zx-modal::backdrop {
2043
- background: var(--zx-color-bg-backdrop);
2127
+ .zx-launcher__group-label {
2128
+ padding: var(--zx-space-3) var(--zx-space-3) var(--zx-space-1);
2129
+ color: var(--zx-color-text-muted);
2130
+ font-size: var(--zx-text-xs);
2131
+ font-weight: 700;
2132
+ letter-spacing: .04em;
2133
+ text-transform: uppercase;
2044
2134
  }
2045
- .zx-modal__content {
2046
- padding: var(--zx-space-5);
2135
+ .zx-launcher__group[data-layout=grid] {
2136
+ display: grid;
2137
+ grid-template-columns: repeat(auto-fill, minmax(112px, 1fr));
2138
+ gap: var(--zx-space-2);
2139
+ padding: 0 var(--zx-space-1) var(--zx-space-2);
2047
2140
  }
2048
- body:has(> .zx-modal[open]) {
2049
- overflow: hidden;
2050
- overscroll-behavior: none;
2141
+ .zx-launcher__group[data-layout=grid] .zx-launcher__group-label {
2142
+ grid-column: 1 / -1;
2143
+ padding-inline: var(--zx-space-2);
2051
2144
  }
2052
- @media (prefers-reduced-motion: no-preference) {
2053
- .zx-modal[data-state=open] {
2054
- animation: zx-modal-enter var(--zx-dur-base) var(--zx-ease);
2055
- }
2056
- .zx-modal[data-state=open]::backdrop {
2057
- animation: zx-modal-backdrop-enter var(--zx-dur-base) var(--zx-ease);
2058
- }
2145
+ .zx-launcher__option {
2146
+ display: flex;
2147
+ align-items: center;
2148
+ gap: var(--zx-space-3);
2149
+ inline-size: 100%;
2150
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
2151
+ border: 0;
2152
+ border-radius: var(--zx-radius-md);
2153
+ background: transparent;
2154
+ padding: var(--zx-space-2) var(--zx-space-3);
2155
+ color: inherit;
2156
+ text-align: start;
2157
+ text-decoration: none;
2059
2158
  }
2060
- @keyframes zx-modal-enter {
2061
- from {
2062
- opacity: 0;
2063
- transform: translateY(var(--zx-space-2)) scale(.98);
2064
- }
2159
+ .zx-launcher__option[aria-selected=true],
2160
+ .zx-launcher__option:hover {
2161
+ background: var(--zx-color-bg-hover);
2065
2162
  }
2066
- @keyframes zx-modal-backdrop-enter {
2067
- from {
2163
+ .zx-launcher__option[aria-current=page] {
2164
+ box-shadow: inset 2px 0 var(--zx-color-accent);
2165
+ }
2166
+ .zx-launcher__option[data-kind=application] {
2167
+ display: grid;
2168
+ grid-template-rows: auto minmax(0, auto);
2169
+ justify-items: center;
2170
+ align-content: center;
2171
+ min-block-size: 92px;
2172
+ padding: var(--zx-space-3) var(--zx-space-2);
2173
+ text-align: center;
2174
+ }
2175
+ .zx-launcher__option[data-kind=application][aria-current=page] {
2176
+ box-shadow: inset 0 -2px var(--zx-color-accent);
2177
+ }
2178
+ .zx-launcher__option[data-kind=application] .zx-launcher__icon {
2179
+ min-block-size: 36px;
2180
+ align-items: center;
2181
+ }
2182
+ .zx-launcher__option[data-kind=application] .zx-launcher__copy {
2183
+ inline-size: 100%;
2184
+ }
2185
+ .zx-launcher__option[data-kind=application] .zx-launcher__description,
2186
+ .zx-launcher__option[data-kind=application] .zx-launcher__badge {
2187
+ display: none;
2188
+ }
2189
+ .zx-launcher__option[data-kind=application] .zx-launcher__label {
2190
+ font-size: var(--zx-text-sm);
2191
+ }
2192
+ .zx-launcher__option[aria-disabled=true] {
2193
+ color: var(--zx-color-text-muted);
2194
+ cursor: not-allowed;
2195
+ opacity: .65;
2196
+ }
2197
+ .zx-launcher__icon {
2198
+ display: inline-flex;
2199
+ flex: none;
2200
+ }
2201
+ .zx-launcher__copy {
2202
+ display: grid;
2203
+ min-inline-size: 0;
2204
+ gap: 2px;
2205
+ }
2206
+ .zx-launcher__label {
2207
+ overflow: hidden;
2208
+ font-weight: 600;
2209
+ text-overflow: ellipsis;
2210
+ white-space: nowrap;
2211
+ }
2212
+ .zx-launcher__description {
2213
+ overflow: hidden;
2214
+ color: var(--zx-color-text-muted);
2215
+ font-size: var(--zx-text-sm);
2216
+ text-overflow: ellipsis;
2217
+ white-space: nowrap;
2218
+ }
2219
+ .zx-launcher__badge {
2220
+ margin-inline-start: auto;
2221
+ color: var(--zx-color-text-muted);
2222
+ font-size: var(--zx-text-xs);
2223
+ }
2224
+ .zx-launcher__hints {
2225
+ display: flex;
2226
+ flex-wrap: wrap;
2227
+ justify-content: end;
2228
+ gap: var(--zx-space-4);
2229
+ padding: var(--zx-space-2) var(--zx-space-4);
2230
+ border-block-start: 1px solid var(--zx-color-border);
2231
+ color: var(--zx-color-text-muted);
2232
+ font-size: var(--zx-text-xs);
2233
+ }
2234
+ .zx-launcher__hints span {
2235
+ display: inline-flex;
2236
+ align-items: center;
2237
+ gap: var(--zx-space-1);
2238
+ }
2239
+ .zx-launcher__hints kbd {
2240
+ min-inline-size: 1.5rem;
2241
+ padding-inline: 4px;
2242
+ text-align: center;
2243
+ }
2244
+ @media (max-width: 520px) {
2245
+ .zx-launcher__group[data-layout=grid] {
2246
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2247
+ }
2248
+ .zx-launcher__shortcut {
2249
+ display: none;
2250
+ }
2251
+ .zx-launcher__search {
2252
+ grid-template-columns: auto minmax(0, 1fr) auto;
2253
+ }
2254
+ .zx-launcher__hints {
2255
+ justify-content: center;
2256
+ }
2257
+ }
2258
+
2259
+ /* src/components/avatar/avatar.css */
2260
+ .zx-avatar {
2261
+ --zx-avatar-size: var(--zx-control-height);
2262
+ position: relative;
2263
+ display: inline-grid;
2264
+ flex: none;
2265
+ place-items: center;
2266
+ inline-size: var(--zx-avatar-size);
2267
+ block-size: var(--zx-avatar-size);
2268
+ overflow: visible;
2269
+ color: var(--zx-color-text);
2270
+ vertical-align: middle;
2271
+ }
2272
+ .zx-avatar[data-size=sm] {
2273
+ --zx-avatar-size: calc(var(--zx-control-height) * .75);
2274
+ }
2275
+ .zx-avatar[data-size=lg] {
2276
+ --zx-avatar-size: calc(var(--zx-control-height) * 1.25);
2277
+ }
2278
+ .zx-avatar[data-shape=circle] {
2279
+ border-radius: 50%;
2280
+ }
2281
+ .zx-avatar[data-shape=rounded] {
2282
+ border-radius: var(--zx-radius-md);
2283
+ }
2284
+ .zx-avatar[data-shape=square] {
2285
+ border-radius: 0;
2286
+ }
2287
+ .zx-avatar__image,
2288
+ .zx-avatar__fallback {
2289
+ inline-size: 100%;
2290
+ block-size: 100%;
2291
+ border-radius: inherit;
2292
+ }
2293
+ .zx-avatar__image {
2294
+ display: block;
2295
+ object-fit: cover;
2296
+ }
2297
+ .zx-avatar__image[hidden],
2298
+ .zx-avatar__fallback[hidden],
2299
+ .zx-avatar__status[hidden] {
2300
+ display: none;
2301
+ }
2302
+ .zx-avatar__fallback {
2303
+ display: grid;
2304
+ place-items: center;
2305
+ border: 1px solid var(--zx-color-border);
2306
+ background: var(--zx-color-bg-subtle);
2307
+ font-size: calc(var(--zx-avatar-size) * .34);
2308
+ font-weight: 700;
2309
+ line-height: 1;
2310
+ }
2311
+ .zx-avatar__status {
2312
+ position: absolute;
2313
+ inset-inline-end: -1px;
2314
+ inset-block-end: -1px;
2315
+ inline-size: max(8px, calc(var(--zx-avatar-size) * .28));
2316
+ block-size: max(8px, calc(var(--zx-avatar-size) * .28));
2317
+ border: 2px solid var(--zx-color-bg-raised);
2318
+ border-radius: 50%;
2319
+ background: var(--zx-color-text-muted);
2320
+ }
2321
+ .zx-avatar__status[data-status=online] {
2322
+ background: var(--zx-color-success);
2323
+ }
2324
+ .zx-avatar__status[data-status=away] {
2325
+ background: var(--zx-color-warning);
2326
+ }
2327
+ .zx-avatar__status[data-status=busy] {
2328
+ background: var(--zx-color-danger);
2329
+ }
2330
+
2331
+ /* src/components/account-menu/account-menu.css */
2332
+ .zx-account-menu {
2333
+ display: block;
2334
+ min-inline-size: 0;
2335
+ }
2336
+ .zx-account-menu__trigger {
2337
+ display: grid;
2338
+ grid-template-columns: auto minmax(0, 1fr) auto;
2339
+ align-items: center;
2340
+ gap: var(--zx-space-3);
2341
+ inline-size: 100%;
2342
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
2343
+ border-color: transparent;
2344
+ background: transparent;
2345
+ padding: var(--zx-space-2);
2346
+ color: inherit;
2347
+ text-align: start;
2348
+ }
2349
+ .zx-account-menu__trigger:hover,
2350
+ .zx-account-menu__trigger:focus-visible,
2351
+ .zx-account-menu__trigger[aria-expanded=true] {
2352
+ background: var(--zx-color-bg-hover);
2353
+ }
2354
+ .zx-account-menu__identity {
2355
+ display: grid;
2356
+ min-inline-size: 0;
2357
+ gap: 1px;
2358
+ }
2359
+ .zx-account-menu__name,
2360
+ .zx-account-menu__secondary {
2361
+ overflow: hidden;
2362
+ text-overflow: ellipsis;
2363
+ white-space: nowrap;
2364
+ }
2365
+ .zx-account-menu__name {
2366
+ font-weight: 650;
2367
+ }
2368
+ .zx-account-menu__secondary {
2369
+ color: var(--zx-color-text-muted);
2370
+ font-size: var(--zx-text-xs);
2371
+ }
2372
+ .zx-account-menu__chevron {
2373
+ display: inline-flex;
2374
+ }
2375
+ .zx-account-menu[data-compact=true] {
2376
+ inline-size: fit-content;
2377
+ }
2378
+ .zx-account-menu[data-compact=true] .zx-account-menu__trigger {
2379
+ display: inline-grid;
2380
+ grid-template-columns: auto;
2381
+ inline-size: auto;
2382
+ }
2383
+ .zx-account-menu[data-compact=true] .zx-account-menu__identity,
2384
+ .zx-account-menu[data-compact=true] .zx-account-menu__chevron {
2385
+ display: none;
2386
+ }
2387
+ .zx-account-menu__panel-identity {
2388
+ display: grid;
2389
+ min-inline-size: 220px;
2390
+ gap: 2px;
2391
+ margin: calc(-1 * var(--zx-space-1)) calc(-1 * var(--zx-space-1)) var(--zx-space-1);
2392
+ border-block-end: 1px solid var(--zx-color-border);
2393
+ padding: var(--zx-space-3);
2394
+ }
2395
+ .zx-account-menu__panel-identity span {
2396
+ color: var(--zx-color-text-muted);
2397
+ font-size: var(--zx-text-xs);
2398
+ }
2399
+
2400
+ /* src/components/app-rail/app-rail.css */
2401
+ .zx-app-rail {
2402
+ display: flex;
2403
+ min-inline-size: 0;
2404
+ border: 1px solid var(--zx-color-border);
2405
+ background: var(--zx-color-bg-raised);
2406
+ color: var(--zx-color-text);
2407
+ }
2408
+ .zx-app-rail[data-orientation=vertical] {
2409
+ flex-direction: column;
2410
+ inline-size: calc(var(--zx-control-height) + var(--zx-space-3));
2411
+ }
2412
+ .zx-app-rail[data-orientation=horizontal] {
2413
+ flex-direction: row;
2414
+ block-size: calc(var(--zx-control-height) + var(--zx-space-3));
2415
+ }
2416
+ .zx-app-rail__header,
2417
+ .zx-app-rail__footer {
2418
+ display: flex;
2419
+ align-items: center;
2420
+ justify-content: center;
2421
+ padding: var(--zx-space-1);
2422
+ }
2423
+ .zx-app-rail__header[hidden],
2424
+ .zx-app-rail__footer[hidden] {
2425
+ display: none;
2426
+ }
2427
+ .zx-app-rail[data-orientation=vertical] .zx-app-rail__footer {
2428
+ margin-block-start: auto;
2429
+ }
2430
+ .zx-app-rail[data-orientation=horizontal] .zx-app-rail__footer {
2431
+ margin-inline-start: auto;
2432
+ }
2433
+ .zx-app-rail__list {
2434
+ display: flex;
2435
+ flex: 1;
2436
+ gap: var(--zx-space-1);
2437
+ margin: 0;
2438
+ padding: var(--zx-space-1);
2439
+ list-style: none;
2440
+ }
2441
+ .zx-app-rail[data-orientation=vertical] .zx-app-rail__list {
2442
+ flex-direction: column;
2443
+ }
2444
+ .zx-app-rail[data-orientation=horizontal] .zx-app-rail__list {
2445
+ flex-direction: row;
2446
+ }
2447
+ .zx-app-rail__row {
2448
+ display: flex;
2449
+ }
2450
+ .zx-app-rail__item {
2451
+ position: relative;
2452
+ display: inline-grid;
2453
+ place-items: center;
2454
+ inline-size: var(--zx-control-height);
2455
+ block-size: var(--zx-control-height);
2456
+ border-color: transparent;
2457
+ border-radius: var(--zx-radius-md);
2458
+ background: transparent;
2459
+ color: inherit;
2460
+ padding: 0;
2461
+ text-decoration: none;
2462
+ }
2463
+ .zx-app-rail__item:hover,
2464
+ .zx-app-rail__item:focus-visible,
2465
+ .zx-app-rail__item[aria-expanded=true],
2466
+ .zx-app-rail__item[data-active-descendant=true],
2467
+ .zx-app-rail__item[aria-current=page] {
2468
+ background: var(--zx-color-bg-hover);
2469
+ color: var(--zx-color-accent);
2470
+ }
2471
+ .zx-app-rail__item[aria-disabled=true],
2472
+ .zx-app-rail__flyout-item[aria-disabled=true] {
2473
+ color: var(--zx-color-text-muted);
2474
+ cursor: not-allowed;
2475
+ opacity: .65;
2476
+ }
2477
+ .zx-app-rail__item-label {
2478
+ position: absolute;
2479
+ inline-size: 1px;
2480
+ block-size: 1px;
2481
+ overflow: hidden;
2482
+ clip-path: inset(50%);
2483
+ }
2484
+ .zx-app-rail__item-icon {
2485
+ display: inline-flex;
2486
+ }
2487
+ .zx-app-rail__item-badge {
2488
+ position: absolute;
2489
+ inset-inline-end: 1px;
2490
+ inset-block-start: 1px;
2491
+ min-inline-size: 15px;
2492
+ border-radius: var(--zx-radius-full);
2493
+ background: var(--zx-color-accent);
2494
+ padding-inline: 3px;
2495
+ color: var(--zx-color-on-accent);
2496
+ font-size: 10px;
2497
+ line-height: 15px;
2498
+ text-align: center;
2499
+ }
2500
+ .zx-app-rail__item-disclosure {
2501
+ position: absolute;
2502
+ inset-inline-end: 1px;
2503
+ inset-block-end: 1px;
2504
+ display: inline-flex;
2505
+ }
2506
+ .zx-app-rail__popover {
2507
+ min-inline-size: 220px;
2508
+ padding: var(--zx-space-2);
2509
+ }
2510
+ .zx-app-rail__flyout-title {
2511
+ padding: var(--zx-space-2) var(--zx-space-3);
2512
+ color: var(--zx-color-text-muted);
2513
+ font-size: var(--zx-text-xs);
2514
+ font-weight: 700;
2515
+ }
2516
+ .zx-app-rail__flyout-list {
2517
+ display: grid;
2518
+ gap: var(--zx-space-1);
2519
+ margin: 0;
2520
+ padding: 0;
2521
+ list-style: none;
2522
+ }
2523
+ .zx-app-rail__flyout-item {
2524
+ display: grid;
2525
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
2526
+ align-items: center;
2527
+ gap: var(--zx-space-2);
2528
+ inline-size: 100%;
2529
+ min-block-size: var(--zx-control-height);
2530
+ border-color: transparent;
2531
+ border-radius: var(--zx-radius-md);
2532
+ background: transparent;
2533
+ padding-inline: var(--zx-control-pad-x);
2534
+ color: inherit;
2535
+ text-align: start;
2536
+ text-decoration: none;
2537
+ }
2538
+ .zx-app-rail__flyout-item:hover,
2539
+ .zx-app-rail__flyout-item:focus-visible,
2540
+ .zx-app-rail__flyout-item[aria-current=page] {
2541
+ background: var(--zx-color-bg-hover);
2542
+ color: var(--zx-color-accent);
2543
+ }
2544
+ .zx-app-rail__flyout-item-icon {
2545
+ display: inline-flex;
2546
+ grid-column: 1;
2547
+ }
2548
+ .zx-app-rail__flyout-item-label {
2549
+ grid-column: 2;
2550
+ }
2551
+ .zx-app-rail__flyout-item-badge {
2552
+ grid-column: 3;
2553
+ color: var(--zx-color-text-muted);
2554
+ font-size: var(--zx-text-xs);
2555
+ }
2556
+ .zx-app-rail__flyout-item-disclosure {
2557
+ display: inline-flex;
2558
+ grid-column: 4;
2559
+ color: var(--zx-color-text-muted);
2560
+ }
2561
+
2562
+ /* src/components/app-sidebar/app-sidebar.css */
2563
+ .zx-app-sidebar {
2564
+ display: flex;
2565
+ min-block-size: 0;
2566
+ border: 1px solid var(--zx-color-border);
2567
+ background: var(--zx-color-bg-raised);
2568
+ color: var(--zx-color-text);
2569
+ }
2570
+ .zx-app-sidebar[data-orientation=horizontal] {
2571
+ inline-size: 100%;
2572
+ }
2573
+ .zx-app-sidebar[data-orientation=horizontal] > .zx-app-sidebar__rail {
2574
+ inline-size: 100%;
2575
+ }
2576
+ .zx-app-sidebar__rail.zx-app-rail {
2577
+ border: 0;
2578
+ }
2579
+ .zx-app-sidebar__expanded {
2580
+ display: grid;
2581
+ grid-template-rows: auto minmax(0, 1fr) auto;
2582
+ inline-size: min(280px, 100vw);
2583
+ min-block-size: 0;
2584
+ }
2585
+ .zx-app-sidebar__expanded[hidden],
2586
+ .zx-app-sidebar__rail[hidden] {
2587
+ display: none;
2588
+ }
2589
+ .zx-app-sidebar__header {
2590
+ display: grid;
2591
+ grid-template-columns: minmax(0, 1fr) auto;
2592
+ align-items: center;
2593
+ gap: var(--zx-space-2);
2594
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-3));
2595
+ border-block-end: 1px solid var(--zx-color-border);
2596
+ padding: var(--zx-space-2);
2597
+ }
2598
+ .zx-app-sidebar__header-content {
2599
+ min-inline-size: 0;
2600
+ }
2601
+ .zx-app-sidebar__nav {
2602
+ min-block-size: 0;
2603
+ overflow: auto;
2604
+ padding: var(--zx-space-2);
2605
+ }
2606
+ .zx-app-sidebar__list,
2607
+ .zx-app-sidebar__sublist {
2608
+ display: grid;
2609
+ gap: var(--zx-space-1);
2610
+ margin: 0;
2611
+ padding: 0;
2612
+ list-style: none;
2613
+ }
2614
+ .zx-app-sidebar__sublist {
2615
+ margin-block-start: var(--zx-space-1);
2616
+ }
2617
+ .zx-app-sidebar__sublist[hidden] {
2618
+ display: none;
2619
+ }
2620
+ .zx-app-sidebar__item {
2621
+ display: grid;
2622
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
2623
+ align-items: center;
2624
+ gap: var(--zx-space-2);
2625
+ inline-size: 100%;
2626
+ min-block-size: var(--zx-control-height);
2627
+ border-color: transparent;
2628
+ border-radius: var(--zx-radius-md);
2629
+ background: transparent;
2630
+ padding-inline: var(--zx-space-3);
2631
+ color: inherit;
2632
+ text-align: start;
2633
+ text-decoration: none;
2634
+ }
2635
+ .zx-app-sidebar__row[data-level="2"] > .zx-app-sidebar__item {
2636
+ padding-inline-start: calc(var(--zx-space-3) + var(--zx-space-5));
2637
+ }
2638
+ .zx-app-sidebar__row[data-level="3"] > .zx-app-sidebar__item {
2639
+ padding-inline-start: calc(var(--zx-space-3) + var(--zx-space-7));
2640
+ }
2641
+ .zx-app-sidebar__item:hover,
2642
+ .zx-app-sidebar__item:focus-visible,
2643
+ .zx-app-sidebar__item[data-active-descendant=true],
2644
+ .zx-app-sidebar__item[aria-current=page] {
2645
+ background: var(--zx-color-bg-hover);
2646
+ color: var(--zx-color-accent);
2647
+ }
2648
+ .zx-app-sidebar__item[aria-disabled=true] {
2649
+ color: var(--zx-color-text-muted);
2650
+ cursor: not-allowed;
2651
+ opacity: .65;
2652
+ }
2653
+ .zx-app-sidebar__item-icon,
2654
+ .zx-app-sidebar__item-disclosure {
2655
+ display: inline-flex;
2656
+ }
2657
+ .zx-app-sidebar__item-badge {
2658
+ color: var(--zx-color-text-muted);
2659
+ font-size: var(--zx-text-xs);
2660
+ }
2661
+ .zx-app-sidebar__footer {
2662
+ border-block-start: 1px solid var(--zx-color-border);
2663
+ padding: var(--zx-space-2);
2664
+ }
2665
+ .zx-app-sidebar__footer[hidden] {
2666
+ display: none;
2667
+ }
2668
+ .zx-app-sidebar__rail-header {
2669
+ display: grid;
2670
+ gap: var(--zx-space-1);
2671
+ }
2672
+
2673
+ /* src/components/message/message.css */
2674
+ .zx-message {
2675
+ display: grid;
2676
+ gap: var(--zx-space-2);
2677
+ }
2678
+ .zx-message-region {
2679
+ position: fixed;
2680
+ inset-block: var(--zx-space-4) auto;
2681
+ inset-inline: var(--zx-space-4);
2682
+ inline-size: min(420px, calc(100% - (2 * var(--zx-space-4))));
2683
+ max-block-size: calc(100% - (2 * var(--zx-space-4)));
2684
+ margin: 0 auto;
2685
+ overflow: visible;
2686
+ border: 0;
2687
+ background: none;
2688
+ padding: 0;
2689
+ }
2690
+ .zx-message-region:popover-open {
2691
+ display: grid;
2692
+ }
2693
+ .zx-message__toast {
2694
+ --zx-message-kind: var(--zx-color-info);
2695
+ position: relative;
2696
+ display: grid;
2697
+ grid-template-columns: auto minmax(0, 1fr) auto;
2698
+ align-items: start;
2699
+ gap: var(--zx-space-3);
2700
+ border: 1px solid var(--zx-color-border);
2701
+ border-inline-start: 4px solid var(--zx-message-kind);
2702
+ border-radius: var(--zx-radius-md);
2703
+ background: var(--zx-color-info-bg);
2704
+ box-shadow: var(--zx-overlay-shadow);
2705
+ padding: var(--zx-space-3);
2706
+ color: var(--zx-color-text);
2707
+ }
2708
+ .zx-message__toast[data-kind=success] {
2709
+ --zx-message-kind: var(--zx-color-success);
2710
+ background: var(--zx-color-success-bg);
2711
+ }
2712
+ .zx-message__toast[data-kind=warning] {
2713
+ --zx-message-kind: var(--zx-color-warning);
2714
+ background: var(--zx-color-warning-bg);
2715
+ }
2716
+ .zx-message__toast[data-kind=error] {
2717
+ --zx-message-kind: var(--zx-color-danger);
2718
+ background: var(--zx-color-danger-bg);
2719
+ }
2720
+ .zx-message__icon {
2721
+ display: inline-grid;
2722
+ place-items: center;
2723
+ color: var(--zx-message-kind);
2724
+ }
2725
+ .zx-message__content {
2726
+ min-inline-size: 0;
2727
+ overflow-wrap: anywhere;
2728
+ }
2729
+ .zx-message__close {
2730
+ margin: calc(-1 * var(--zx-space-1)) calc(-1 * var(--zx-space-1)) 0 0;
2731
+ }
2732
+ .zx-message__progress {
2733
+ overflow: hidden;
2734
+ block-size: 4px;
2735
+ margin-block-start: var(--zx-space-2);
2736
+ border-radius: var(--zx-radius-full);
2737
+ background: var(--zx-color-border);
2738
+ }
2739
+ .zx-message__progress-fill {
2740
+ display: block;
2741
+ block-size: 100%;
2742
+ border-radius: inherit;
2743
+ background: var(--zx-message-kind);
2744
+ }
2745
+ @media (prefers-reduced-motion: no-preference) {
2746
+ .zx-message__toast[data-state=open] {
2747
+ animation: zx-message-enter var(--zx-dur-base) var(--zx-ease) both;
2748
+ }
2749
+ .zx-message__toast[data-state=closing] {
2750
+ animation: zx-message-exit var(--zx-dur-base) var(--zx-ease) both;
2751
+ }
2752
+ .zx-message__progress-fill {
2753
+ transition: inline-size var(--zx-dur-base) var(--zx-ease);
2754
+ }
2755
+ }
2756
+ @keyframes zx-message-enter {
2757
+ from {
2758
+ opacity: 0;
2759
+ transform: translateY(calc(-1 * var(--zx-space-2)));
2760
+ }
2761
+ to {
2762
+ opacity: 1;
2763
+ transform: translateY(0);
2764
+ }
2765
+ }
2766
+ @keyframes zx-message-exit {
2767
+ from {
2768
+ opacity: 1;
2769
+ transform: translateY(0);
2770
+ }
2771
+ to {
2772
+ opacity: 0;
2773
+ transform: translateY(calc(-1 * var(--zx-space-2)));
2774
+ }
2775
+ }
2776
+
2777
+ /* src/components/modal/modal.css */
2778
+ .zx-modal {
2779
+ max-inline-size: calc(100vw - (2 * var(--zx-space-4)));
2780
+ max-block-size: calc(100vh - (2 * var(--zx-space-4)));
2781
+ overflow: auto;
2782
+ border: 1px solid var(--zx-color-border);
2783
+ border-radius: var(--zx-radius-lg);
2784
+ background: var(--zx-color-bg-raised);
2785
+ box-shadow: var(--zx-overlay-shadow);
2786
+ color: var(--zx-color-text);
2787
+ padding: 0;
2788
+ }
2789
+ .zx-modal::backdrop {
2790
+ background: var(--zx-color-bg-backdrop);
2791
+ }
2792
+ .zx-modal__content {
2793
+ padding: var(--zx-space-5);
2794
+ }
2795
+ body:has(> .zx-modal:modal) {
2796
+ overflow: hidden;
2797
+ overscroll-behavior: none;
2798
+ }
2799
+ @media (prefers-reduced-motion: no-preference) {
2800
+ .zx-modal[data-state=open] {
2801
+ animation: zx-modal-enter var(--zx-dur-base) var(--zx-ease);
2802
+ }
2803
+ .zx-modal[data-state=open]::backdrop {
2804
+ animation: zx-modal-backdrop-enter var(--zx-dur-base) var(--zx-ease);
2805
+ }
2806
+ }
2807
+ @keyframes zx-modal-enter {
2808
+ from {
2809
+ opacity: 0;
2810
+ transform: translateY(var(--zx-space-2)) scale(.98);
2811
+ }
2812
+ }
2813
+ @keyframes zx-modal-backdrop-enter {
2814
+ from {
2815
+ opacity: 0;
2816
+ }
2817
+ }
2818
+
2819
+ /* src/components/dialog/dialog.css */
2820
+ .zx-dialog {
2821
+ grid-template-rows: auto minmax(0, 1fr) auto;
2822
+ padding: 0;
2823
+ }
2824
+ .zx-dialog[open] {
2825
+ display: grid;
2826
+ }
2827
+ .zx-dialog__header,
2828
+ .zx-dialog__footer {
2829
+ display: flex;
2830
+ align-items: center;
2831
+ gap: var(--zx-space-3);
2832
+ padding: var(--zx-space-4) var(--zx-space-5);
2833
+ }
2834
+ .zx-dialog__header {
2835
+ justify-content: space-between;
2836
+ border-block-end: 1px solid var(--zx-color-border);
2837
+ }
2838
+ .zx-dialog__title {
2839
+ margin: 0;
2840
+ font-size: var(--zx-text-xl);
2841
+ line-height: 1.3;
2842
+ }
2843
+ .zx-dialog__close {
2844
+ flex: none;
2845
+ inline-size: var(--zx-control-height);
2846
+ padding-inline: 0;
2847
+ font-size: var(--zx-text-xl);
2848
+ }
2849
+ .zx-dialog__body {
2850
+ min-block-size: 0;
2851
+ overflow: auto;
2852
+ }
2853
+ .zx-dialog__footer {
2854
+ justify-content: flex-end;
2855
+ border-block-start: 1px solid var(--zx-color-border);
2856
+ }
2857
+ .zx-dialog__footer[hidden] {
2858
+ display: none;
2859
+ }
2860
+ .zx-dialog__view[aria-hidden=true] {
2861
+ display: none;
2862
+ }
2863
+ .zx-dialog__prompt {
2864
+ display: grid;
2865
+ gap: var(--zx-space-3);
2866
+ }
2867
+ .zx-dialog__prompt-input {
2868
+ inline-size: 100%;
2869
+ }
2870
+ @media (prefers-reduced-motion: no-preference) {
2871
+ .zx-dialog__view[aria-hidden=false] {
2872
+ animation: zx-dialog-view-enter var(--zx-dur-fast) var(--zx-ease);
2873
+ }
2874
+ }
2875
+ @keyframes zx-dialog-view-enter {
2876
+ from {
2877
+ opacity: 0;
2878
+ transform: translateX(var(--zx-space-2));
2879
+ }
2880
+ }
2881
+
2882
+ /* src/components/sheet/sheet.css */
2883
+ .zx-sheet {
2884
+ position: fixed;
2885
+ margin: 0;
2886
+ padding: 0;
2887
+ max-inline-size: 100vw;
2888
+ max-block-size: 100dvh;
2889
+ border: 0;
2890
+ border-radius: 0;
2891
+ overflow: hidden;
2892
+ box-shadow: var(--zx-overlay-shadow);
2893
+ }
2894
+ .zx-sheet[data-side=start],
2895
+ .zx-sheet[data-side=end] {
2896
+ inset-block: 0;
2897
+ block-size: 100dvh;
2898
+ inline-size: var(--zx-sheet-size, min(24rem, 100vw));
2899
+ }
2900
+ .zx-sheet[data-side=start] {
2901
+ inset-inline-start: 0;
2902
+ inset-inline-end: auto;
2903
+ border-inline-end: 1px solid var(--zx-color-border);
2904
+ --zx-sheet-enter: -100% 0;
2905
+ }
2906
+ .zx-sheet[data-side=end] {
2907
+ inset-inline-start: auto;
2908
+ inset-inline-end: 0;
2909
+ border-inline-start: 1px solid var(--zx-color-border);
2910
+ --zx-sheet-enter: 100% 0;
2911
+ }
2912
+ [dir=rtl] .zx-sheet[data-side=start] {
2913
+ --zx-sheet-enter: 100% 0;
2914
+ }
2915
+ [dir=rtl] .zx-sheet[data-side=end] {
2916
+ --zx-sheet-enter: -100% 0;
2917
+ }
2918
+ .zx-sheet[data-side=top],
2919
+ .zx-sheet[data-side=bottom] {
2920
+ inset-inline: 0;
2921
+ inline-size: 100vw;
2922
+ block-size: var(--zx-sheet-size, min(60dvh, 100dvh));
2923
+ }
2924
+ .zx-sheet[data-side=top] {
2925
+ inset-block-start: 0;
2926
+ inset-block-end: auto;
2927
+ border-block-end: 1px solid var(--zx-color-border);
2928
+ border-end-start-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2929
+ border-end-end-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2930
+ --zx-sheet-enter: 0 -100%;
2931
+ }
2932
+ .zx-sheet[data-side=bottom] {
2933
+ inset-block-start: auto;
2934
+ inset-block-end: 0;
2935
+ border-block-start: 1px solid var(--zx-color-border);
2936
+ border-start-start-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2937
+ border-start-end-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2938
+ --zx-sheet-enter: 0 100%;
2939
+ }
2940
+ .zx-sheet[data-backdrop=none]::backdrop {
2941
+ background: transparent;
2942
+ }
2943
+ .zx-sheet[data-backdrop=blur]::backdrop {
2944
+ backdrop-filter: blur(var(--zx-overlay-blur));
2945
+ }
2946
+ @media (prefers-reduced-motion: no-preference) {
2947
+ .zx-sheet {
2948
+ transition:
2949
+ translate var(--zx-dur-base) var(--zx-ease),
2950
+ opacity var(--zx-dur-base) var(--zx-ease),
2951
+ display var(--zx-dur-base) allow-discrete,
2952
+ overlay var(--zx-dur-base) allow-discrete;
2953
+ }
2954
+ .zx-sheet[data-state=open] {
2955
+ animation: none;
2956
+ }
2957
+ .zx-sheet:not([open]) {
2958
+ translate: var(--zx-sheet-enter, 0 0);
2959
+ opacity: 0;
2960
+ }
2961
+ @starting-style {
2962
+ .zx-sheet[open] {
2963
+ translate: var(--zx-sheet-enter, 0 0);
2964
+ opacity: 0;
2965
+ }
2966
+ }
2967
+ .zx-sheet::backdrop {
2968
+ transition:
2969
+ opacity var(--zx-dur-base) var(--zx-ease),
2970
+ display var(--zx-dur-base) allow-discrete,
2971
+ overlay var(--zx-dur-base) allow-discrete;
2972
+ }
2973
+ .zx-sheet[data-state=open]::backdrop {
2974
+ animation: none;
2975
+ }
2976
+ .zx-sheet:not([open])::backdrop {
2068
2977
  opacity: 0;
2069
2978
  }
2979
+ @starting-style {
2980
+ .zx-sheet[open]::backdrop {
2981
+ opacity: 0;
2982
+ }
2983
+ }
2070
2984
  }
2071
-
2072
- /* src/components/dialog/dialog.css */
2073
- .zx-dialog {
2074
- grid-template-rows: auto minmax(0, 1fr) auto;
2075
- padding: 0;
2985
+ .zx-sheet[data-docked] {
2986
+ position: relative;
2987
+ inset: auto;
2988
+ flex: 0 0 var(--zx-pane-size, var(--zx-sheet-size, min(24rem, 100%)));
2989
+ inline-size: auto;
2990
+ block-size: auto;
2991
+ max-inline-size: none;
2992
+ max-block-size: none;
2993
+ min-inline-size: 0;
2994
+ min-block-size: 0;
2995
+ border-radius: 0;
2996
+ box-shadow: none;
2076
2997
  }
2077
- .zx-dialog[open] {
2078
- display: grid;
2998
+ .zx-dock[data-orientation=vertical] > .zx-sheet[data-docked] {
2999
+ border-inline: 0;
3000
+ border-block: 1px solid var(--zx-color-border);
2079
3001
  }
2080
- .zx-dialog__header,
2081
- .zx-dialog__footer {
3002
+ .zx-dock[data-orientation=horizontal] > .zx-sheet[data-docked] {
3003
+ border-block: 0;
3004
+ border-inline: 1px solid var(--zx-color-border);
3005
+ }
3006
+ @media (prefers-reduced-motion: no-preference) {
3007
+ .zx-sheet[data-docked] {
3008
+ transition:
3009
+ flex-basis var(--zx-dur-base) var(--zx-ease),
3010
+ opacity var(--zx-dur-base) var(--zx-ease),
3011
+ display var(--zx-dur-base) allow-discrete,
3012
+ overlay var(--zx-dur-base) allow-discrete;
3013
+ translate: none;
3014
+ }
3015
+ .zx-sheet[data-docked]:not([open]) {
3016
+ flex-basis: 0;
3017
+ translate: none;
3018
+ opacity: 0;
3019
+ }
3020
+ @starting-style {
3021
+ .zx-sheet[data-docked][open] {
3022
+ flex-basis: 0;
3023
+ translate: none;
3024
+ opacity: 0;
3025
+ }
3026
+ }
3027
+ }
3028
+ .zx-sheet__handle {
3029
+ position: absolute;
3030
+ z-index: 1;
2082
3031
  display: flex;
2083
3032
  align-items: center;
2084
- gap: var(--zx-space-3);
2085
- padding: var(--zx-space-4) var(--zx-space-5);
3033
+ justify-content: center;
3034
+ touch-action: none;
3035
+ user-select: none;
2086
3036
  }
2087
- .zx-dialog__header {
2088
- justify-content: space-between;
2089
- border-block-end: 1px solid var(--zx-color-border);
3037
+ .zx-sheet__handle::after {
3038
+ content: "";
3039
+ border-radius: var(--zx-radius-full);
3040
+ background: var(--zx-color-border-strong);
3041
+ opacity: 0;
3042
+ transition: opacity var(--zx-dur-fast) var(--zx-ease);
2090
3043
  }
2091
- .zx-dialog__title {
2092
- margin: 0;
2093
- font-size: var(--zx-text-xl);
2094
- line-height: 1.3;
3044
+ .zx-sheet__handle:hover::after,
3045
+ .zx-sheet__handle:focus-visible::after,
3046
+ .zx-sheet[data-dragging] .zx-sheet__handle::after {
3047
+ opacity: 1;
2095
3048
  }
2096
- .zx-dialog__close {
2097
- flex: none;
2098
- inline-size: var(--zx-control-height);
2099
- padding-inline: 0;
2100
- font-size: var(--zx-text-xl);
3049
+ .zx-sheet__handle:focus-visible {
3050
+ outline: none;
3051
+ box-shadow: var(--zx-focus-ring);
2101
3052
  }
2102
- .zx-dialog__body {
2103
- min-block-size: 0;
2104
- overflow: auto;
3053
+ .zx-sheet[data-side=start] > .zx-sheet__handle,
3054
+ .zx-sheet[data-side=end] > .zx-sheet__handle {
3055
+ inset-block: 0;
3056
+ inline-size: var(--zx-space-3);
3057
+ cursor: col-resize;
2105
3058
  }
2106
- .zx-dialog__footer {
2107
- justify-content: flex-end;
2108
- border-block-start: 1px solid var(--zx-color-border);
3059
+ .zx-sheet[data-side=start] > .zx-sheet__handle {
3060
+ inset-inline-end: 0;
2109
3061
  }
2110
- .zx-dialog__footer[hidden] {
2111
- display: none;
3062
+ .zx-sheet[data-side=end] > .zx-sheet__handle {
3063
+ inset-inline-start: 0;
2112
3064
  }
2113
- .zx-dialog__view[aria-hidden=true] {
3065
+ .zx-sheet[data-side=start] > .zx-sheet__handle::after,
3066
+ .zx-sheet[data-side=end] > .zx-sheet__handle::after {
3067
+ inline-size: 3px;
3068
+ block-size: var(--zx-space-8);
3069
+ }
3070
+ .zx-sheet[data-side=top] > .zx-sheet__handle,
3071
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle {
3072
+ inset-inline: 0;
3073
+ block-size: var(--zx-space-4);
3074
+ cursor: row-resize;
3075
+ }
3076
+ .zx-sheet[data-side=top] > .zx-sheet__handle {
3077
+ inset-block-end: 0;
3078
+ }
3079
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle {
3080
+ inset-block-start: 0;
3081
+ }
3082
+ .zx-sheet[data-side=top] > .zx-sheet__handle::after,
3083
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle::after {
3084
+ inline-size: var(--zx-space-8);
3085
+ block-size: 4px;
3086
+ }
3087
+ .zx-sheet[data-side=top] > .zx-sheet__handle::after,
3088
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle::after {
3089
+ opacity: 1;
3090
+ }
3091
+ .zx-sheet[data-docked] > .zx-sheet__handle {
2114
3092
  display: none;
2115
3093
  }
2116
- .zx-dialog__prompt {
2117
- display: grid;
2118
- gap: var(--zx-space-3);
3094
+ .zx-sheet[data-dragging] {
3095
+ transition: none;
2119
3096
  }
2120
- .zx-dialog__prompt-input {
2121
- inline-size: 100%;
3097
+ .zx-sheet[data-side=start] {
3098
+ --zx-sheet-dx: -1;
3099
+ --zx-sheet-dy: 0;
2122
3100
  }
2123
- @media (prefers-reduced-motion: no-preference) {
2124
- .zx-dialog__view[aria-hidden=false] {
2125
- animation: zx-dialog-view-enter var(--zx-dur-fast) var(--zx-ease);
2126
- }
3101
+ .zx-sheet[data-side=end] {
3102
+ --zx-sheet-dx: 1;
3103
+ --zx-sheet-dy: 0;
2127
3104
  }
2128
- @keyframes zx-dialog-view-enter {
2129
- from {
2130
- opacity: 0;
2131
- transform: translateX(var(--zx-space-2));
3105
+ .zx-sheet[data-side=top] {
3106
+ --zx-sheet-dx: 0;
3107
+ --zx-sheet-dy: -1;
3108
+ }
3109
+ .zx-sheet[data-side=bottom] {
3110
+ --zx-sheet-dx: 0;
3111
+ --zx-sheet-dy: 1;
3112
+ }
3113
+ .zx-sheet[data-side=start] {
3114
+ transform-origin: left center;
3115
+ }
3116
+ .zx-sheet[data-side=end] {
3117
+ transform-origin: right center;
3118
+ }
3119
+ .zx-sheet[data-side=top] {
3120
+ transform-origin: center top;
3121
+ }
3122
+ .zx-sheet[data-side=bottom] {
3123
+ transform-origin: center bottom;
3124
+ }
3125
+ .zx-sheet[data-stack=stack] {
3126
+ transform: translate(calc(var(--zx-sheet-dx, 0) * var(--zx-sheet-depth, 0) * var(--zx-sheet-stack-offset, 24px)), calc(var(--zx-sheet-dy, 0) * var(--zx-sheet-depth, 0) * var(--zx-sheet-stack-offset, 24px))) scale(calc(1 - var(--zx-sheet-depth, 0) * var(--zx-sheet-stack-scale, 0.04)));
3127
+ }
3128
+ .zx-sheet[data-stack=cascade] {
3129
+ transform: translate(calc(var(--zx-sheet-dx, 0) * var(--zx-sheet-depth-offset, 0px) * -1), calc(var(--zx-sheet-dy, 0) * var(--zx-sheet-depth-offset, 0px) * -1));
3130
+ }
3131
+ .zx-sheet[data-stack-hidden] {
3132
+ opacity: 0;
3133
+ pointer-events: none;
3134
+ }
3135
+ .zx-sheet[data-depth]:not([data-depth="0"])::backdrop {
3136
+ background: transparent;
3137
+ backdrop-filter: none;
3138
+ }
3139
+ .zx-sheet[data-stack=cascade]::backdrop {
3140
+ background: transparent;
3141
+ backdrop-filter: none;
3142
+ }
3143
+ @media (prefers-reduced-motion: no-preference) {
3144
+ .zx-sheet[data-stack] {
3145
+ transition:
3146
+ transform var(--zx-dur-base) var(--zx-ease),
3147
+ translate var(--zx-dur-base) var(--zx-ease),
3148
+ opacity var(--zx-dur-base) var(--zx-ease),
3149
+ display var(--zx-dur-base) allow-discrete,
3150
+ overlay var(--zx-dur-base) allow-discrete;
2132
3151
  }
2133
3152
  }
2134
3153
 
@@ -2212,76 +3231,278 @@ body:has(> .zx-modal[open]) {
2212
3231
  .zx-split-view[data-orientation=vertical][data-collapsed=end] {
2213
3232
  grid-template-rows: minmax(0, 1fr) auto 0;
2214
3233
  }
2215
- .zx-split-view__pane {
2216
- overflow: auto;
2217
- min-inline-size: 0;
3234
+ .zx-split-view__pane {
3235
+ overflow: auto;
3236
+ min-inline-size: 0;
3237
+ min-block-size: 0;
3238
+ }
3239
+ .zx-split-view[data-collapsed=start] > .zx-split-view__pane[data-pane=start],
3240
+ .zx-split-view[data-collapsed=end] > .zx-split-view__pane[data-pane=end] {
3241
+ visibility: hidden;
3242
+ }
3243
+ .zx-split-view__divider {
3244
+ position: relative;
3245
+ touch-action: none;
3246
+ user-select: none;
3247
+ }
3248
+ .zx-split-view__divider::before {
3249
+ content: "";
3250
+ position: absolute;
3251
+ background: var(--zx-color-border);
3252
+ }
3253
+ .zx-split-view[data-orientation=horizontal] > .zx-split-view__divider {
3254
+ inline-size: var(--zx-split-view-divider-size);
3255
+ cursor: col-resize;
3256
+ }
3257
+ .zx-split-view[data-orientation=horizontal] > .zx-split-view__divider::before {
3258
+ inset-block: 0;
3259
+ inset-inline-start: calc(50% - (var(--zx-split-view-divider-line) / 2));
3260
+ inline-size: var(--zx-split-view-divider-line);
3261
+ }
3262
+ .zx-split-view[data-orientation=vertical] > .zx-split-view__divider {
3263
+ block-size: var(--zx-split-view-divider-size);
3264
+ cursor: row-resize;
3265
+ }
3266
+ .zx-split-view[data-orientation=vertical] > .zx-split-view__divider::before {
3267
+ inset-inline: 0;
3268
+ inset-block-start: calc(50% - (var(--zx-split-view-divider-line) / 2));
3269
+ block-size: var(--zx-split-view-divider-line);
3270
+ }
3271
+ .zx-split-view__divider:hover::before,
3272
+ .zx-split-view[data-dragging=true] > .zx-split-view__divider::before {
3273
+ --zx-split-view-divider-line: 2px;
3274
+ background: var(--zx-color-accent);
3275
+ }
3276
+ .zx-split-view__divider:focus-visible {
3277
+ outline: 0;
3278
+ box-shadow: var(--zx-focus-ring);
3279
+ z-index: 1;
3280
+ }
3281
+ .zx-split-view__divider:focus-visible::before {
3282
+ background: var(--zx-color-accent);
3283
+ }
3284
+ .zx-split-view__divider[aria-disabled=true] {
3285
+ cursor: default;
3286
+ }
3287
+ .zx-split-view__divider[aria-disabled=true]:hover::before {
3288
+ --zx-split-view-divider-line: 1px;
3289
+ background: var(--zx-color-border);
3290
+ }
3291
+ .zx-split-view[data-dragging=true] {
3292
+ user-select: none;
3293
+ }
3294
+ .zx-split-view[data-orientation=horizontal][data-dragging=true] {
3295
+ cursor: col-resize;
3296
+ }
3297
+ .zx-split-view[data-orientation=vertical][data-dragging=true] {
3298
+ cursor: row-resize;
3299
+ }
3300
+ @media (prefers-reduced-motion: no-preference) {
3301
+ .zx-split-view__divider::before {
3302
+ transition: background-color var(--zx-dur-fast) var(--zx-ease);
3303
+ }
3304
+ }
3305
+
3306
+ /* src/components/dock/dock.css */
3307
+ .zx-dock {
3308
+ --zx-dock-divider-size: var(--zx-space-2);
3309
+ --zx-dock-divider-line: 1px;
3310
+ display: flex;
3311
+ min-inline-size: 0;
3312
+ min-block-size: 0;
3313
+ background: var(--zx-color-bg-surface);
3314
+ color: var(--zx-color-text);
3315
+ }
3316
+ .zx-dock[data-orientation=vertical] {
3317
+ flex-direction: column;
3318
+ }
3319
+ .zx-dock[data-orientation=horizontal] {
3320
+ flex-direction: row;
3321
+ }
3322
+ .zx-dock[data-dragging=true] {
3323
+ user-select: none;
3324
+ cursor: inherit;
3325
+ }
3326
+ .zx-dock__pane {
3327
+ display: flex;
3328
+ flex-direction: column;
3329
+ flex: 0 0 var(--zx-pane-size, auto);
3330
+ min-inline-size: 0;
3331
+ min-block-size: 0;
3332
+ overflow: hidden;
3333
+ }
3334
+ .zx-dock__pane[data-grow=true],
3335
+ .zx-dock__content {
3336
+ flex: 1 1 0;
3337
+ min-inline-size: 0;
3338
+ min-block-size: 0;
3339
+ }
3340
+ .zx-dock__content {
3341
+ overflow: auto;
3342
+ }
3343
+ .zx-dock__pane[data-state=collapsed] {
3344
+ flex: 0 0 auto;
3345
+ }
3346
+ .zx-dock__pane[data-state=collapsed] > .zx-dock__body {
3347
+ display: none;
3348
+ }
3349
+ .zx-dock__header {
3350
+ flex: none;
3351
+ display: flex;
3352
+ align-items: center;
3353
+ gap: var(--zx-space-1);
3354
+ padding-inline: var(--zx-space-2);
3355
+ min-block-size: var(--zx-control-height);
3356
+ border-block-end: 1px solid var(--zx-color-border);
3357
+ background: var(--zx-color-bg-muted);
3358
+ }
3359
+ .zx-dock__pane[data-state=collapsed] > .zx-dock__header {
3360
+ border-block-end-color: transparent;
3361
+ }
3362
+ .zx-dock__toggle {
3363
+ flex: none;
3364
+ display: inline-flex;
3365
+ align-items: center;
3366
+ gap: var(--zx-space-2);
3367
+ min-block-size: 0;
3368
+ border: 0;
3369
+ border-radius: var(--zx-radius-sm);
3370
+ padding: var(--zx-space-1);
3371
+ background: none;
3372
+ color: inherit;
3373
+ font: inherit;
3374
+ font-size: var(--zx-text-sm);
3375
+ font-weight: var(--zx-control-font-weight);
3376
+ cursor: pointer;
3377
+ }
3378
+ .zx-dock__toggle:hover:not(:disabled) {
3379
+ background: var(--zx-color-bg-hover);
3380
+ }
3381
+ .zx-dock__toggle:disabled {
3382
+ cursor: default;
3383
+ }
3384
+ .zx-dock__toggle:disabled .zx-dock__chevron {
3385
+ visibility: hidden;
3386
+ }
3387
+ .zx-dock__toggle:focus-visible {
3388
+ outline: none;
3389
+ box-shadow: var(--zx-focus-ring);
3390
+ }
3391
+ .zx-dock__chevron {
3392
+ display: inline-flex;
3393
+ color: var(--zx-color-text-muted);
3394
+ transition: rotate var(--zx-dur-fast) var(--zx-ease);
3395
+ }
3396
+ .zx-dock__pane[data-state=open] > .zx-dock__header .zx-dock__chevron {
3397
+ rotate: 90deg;
3398
+ }
3399
+ @media (prefers-reduced-motion: reduce) {
3400
+ .zx-dock__chevron {
3401
+ transition: none;
3402
+ }
3403
+ }
3404
+ .zx-dock__title {
3405
+ white-space: nowrap;
3406
+ overflow: hidden;
3407
+ text-overflow: ellipsis;
3408
+ }
3409
+ .zx-dock__tabs {
3410
+ display: flex;
3411
+ align-items: stretch;
3412
+ gap: var(--zx-space-1);
3413
+ min-inline-size: 0;
3414
+ overflow-x: auto;
3415
+ scrollbar-width: none;
3416
+ }
3417
+ .zx-dock__tabs::-webkit-scrollbar {
3418
+ display: none;
3419
+ }
3420
+ .zx-dock__tab {
3421
+ flex: none;
2218
3422
  min-block-size: 0;
3423
+ border: 0;
3424
+ border-radius: var(--zx-radius-sm);
3425
+ padding: var(--zx-space-1) var(--zx-space-2);
3426
+ background: none;
3427
+ color: var(--zx-color-text-muted);
3428
+ font: inherit;
3429
+ font-size: var(--zx-text-sm);
3430
+ white-space: nowrap;
3431
+ cursor: pointer;
2219
3432
  }
2220
- .zx-split-view[data-collapsed=start] > .zx-split-view__pane[data-pane=start],
2221
- .zx-split-view[data-collapsed=end] > .zx-split-view__pane[data-pane=end] {
2222
- visibility: hidden;
3433
+ .zx-dock__tab:hover {
3434
+ color: var(--zx-color-text);
2223
3435
  }
2224
- .zx-split-view__divider {
2225
- position: relative;
2226
- touch-action: none;
2227
- user-select: none;
3436
+ .zx-dock__tab[aria-selected=true] {
3437
+ background: var(--zx-color-bg-surface);
3438
+ color: var(--zx-color-text);
3439
+ font-weight: var(--zx-control-font-weight);
2228
3440
  }
2229
- .zx-split-view__divider::before {
2230
- content: "";
2231
- position: absolute;
2232
- background: var(--zx-color-border);
3441
+ .zx-dock__tab:focus-visible {
3442
+ outline: none;
3443
+ box-shadow: var(--zx-focus-ring);
2233
3444
  }
2234
- .zx-split-view[data-orientation=horizontal] > .zx-split-view__divider {
2235
- inline-size: var(--zx-split-view-divider-size);
2236
- cursor: col-resize;
3445
+ .zx-dock__body {
3446
+ display: flex;
3447
+ flex-direction: column;
3448
+ flex: 1 1 auto;
3449
+ min-block-size: 0;
3450
+ min-inline-size: 0;
3451
+ overflow: auto;
2237
3452
  }
2238
- .zx-split-view[data-orientation=horizontal] > .zx-split-view__divider::before {
2239
- inset-block: 0;
2240
- inset-inline-start: calc(50% - (var(--zx-split-view-divider-line) / 2));
2241
- inline-size: var(--zx-split-view-divider-line);
3453
+ .zx-dock__pane-content,
3454
+ .zx-dock__panel {
3455
+ flex: 1 1 auto;
3456
+ min-block-size: 0;
3457
+ padding: var(--zx-space-3);
2242
3458
  }
2243
- .zx-split-view[data-orientation=vertical] > .zx-split-view__divider {
2244
- block-size: var(--zx-split-view-divider-size);
2245
- cursor: row-resize;
3459
+ .zx-dock__pane-content > .zx-dock:only-child,
3460
+ .zx-dock__panel > .zx-dock:only-child {
3461
+ block-size: 100%;
2246
3462
  }
2247
- .zx-split-view[data-orientation=vertical] > .zx-split-view__divider::before {
2248
- inset-inline: 0;
2249
- inset-block-start: calc(50% - (var(--zx-split-view-divider-line) / 2));
2250
- block-size: var(--zx-split-view-divider-line);
3463
+ .zx-dock__panel:focus-visible {
3464
+ outline: none;
3465
+ box-shadow: inset var(--zx-focus-ring);
2251
3466
  }
2252
- .zx-split-view__divider:hover::before,
2253
- .zx-split-view[data-dragging=true] > .zx-split-view__divider::before {
2254
- --zx-split-view-divider-line: 2px;
2255
- background: var(--zx-color-accent);
3467
+ .zx-dock__divider {
3468
+ position: relative;
3469
+ flex: none;
3470
+ background: none;
2256
3471
  }
2257
- .zx-split-view__divider:focus-visible {
2258
- outline: 0;
2259
- box-shadow: var(--zx-focus-ring);
2260
- z-index: 1;
3472
+ .zx-dock[data-orientation=vertical] > .zx-dock__divider {
3473
+ block-size: var(--zx-dock-divider-size);
3474
+ margin-block: calc(var(--zx-dock-divider-size) / -2);
3475
+ cursor: row-resize;
2261
3476
  }
2262
- .zx-split-view__divider:focus-visible::before {
2263
- background: var(--zx-color-accent);
3477
+ .zx-dock[data-orientation=horizontal] > .zx-dock__divider {
3478
+ inline-size: var(--zx-dock-divider-size);
3479
+ margin-inline: calc(var(--zx-dock-divider-size) / -2);
3480
+ cursor: col-resize;
2264
3481
  }
2265
- .zx-split-view__divider[aria-disabled=true] {
3482
+ .zx-dock__divider[data-disabled] {
2266
3483
  cursor: default;
2267
3484
  }
2268
- .zx-split-view__divider[aria-disabled=true]:hover::before {
2269
- --zx-split-view-divider-line: 1px;
3485
+ .zx-dock__divider::after {
3486
+ content: "";
3487
+ position: absolute;
3488
+ inset: 0;
3489
+ margin: auto;
2270
3490
  background: var(--zx-color-border);
2271
3491
  }
2272
- .zx-split-view[data-dragging=true] {
2273
- user-select: none;
3492
+ .zx-dock[data-orientation=vertical] > .zx-dock__divider::after {
3493
+ block-size: var(--zx-dock-divider-line);
2274
3494
  }
2275
- .zx-split-view[data-orientation=horizontal][data-dragging=true] {
2276
- cursor: col-resize;
3495
+ .zx-dock[data-orientation=horizontal] > .zx-dock__divider::after {
3496
+ inline-size: var(--zx-dock-divider-line);
2277
3497
  }
2278
- .zx-split-view[data-orientation=vertical][data-dragging=true] {
2279
- cursor: row-resize;
3498
+ .zx-dock__divider:not([data-disabled]):hover::after,
3499
+ .zx-dock[data-dragging=true] .zx-dock__divider:focus::after {
3500
+ background: var(--zx-color-accent);
2280
3501
  }
2281
- @media (prefers-reduced-motion: no-preference) {
2282
- .zx-split-view__divider::before {
2283
- transition: background-color var(--zx-dur-fast) var(--zx-ease);
2284
- }
3502
+ .zx-dock__divider:focus-visible {
3503
+ outline: none;
3504
+ z-index: 1;
3505
+ box-shadow: var(--zx-focus-ring);
2285
3506
  }
2286
3507
 
2287
3508
  /* src/components/menu-button/menu-button.css */
@@ -2382,7 +3603,7 @@ body:has(> .zx-modal[open]) {
2382
3603
  }
2383
3604
  .zx-select__control {
2384
3605
  display: grid;
2385
- grid-template-columns: minmax(0, 1fr) auto auto auto;
3606
+ grid-template-columns: auto minmax(0, 1fr) auto auto auto;
2386
3607
  align-items: center;
2387
3608
  min-block-size: var(--zx-control-height);
2388
3609
  overflow: hidden;
@@ -2390,6 +3611,17 @@ body:has(> .zx-modal[open]) {
2390
3611
  border-radius: var(--zx-control-radius);
2391
3612
  background: var(--zx-color-bg-control);
2392
3613
  }
3614
+ .zx-select__value-adornment {
3615
+ display: inline-flex;
3616
+ align-items: center;
3617
+ padding-inline-start: var(--zx-control-pad-x);
3618
+ }
3619
+ .zx-select__value-adornment[hidden] {
3620
+ display: none;
3621
+ }
3622
+ .zx-select__value-adornment:not([hidden]) + .zx-select__input {
3623
+ padding-inline-start: var(--zx-space-2) !important;
3624
+ }
2393
3625
  .zx-select__control:has(.zx-select__input:focus-visible) {
2394
3626
  box-shadow: var(--zx-focus-ring);
2395
3627
  }
@@ -2476,7 +3708,6 @@ body:has(> .zx-modal[open]) {
2476
3708
  .zx-select__option[aria-selected=true] {
2477
3709
  background: var(--zx-color-bg-selected);
2478
3710
  }
2479
- .zx-select__option > svg,
2480
3711
  .zx-select__option > .zx-icon {
2481
3712
  flex: none;
2482
3713
  color: var(--zx-color-accent);
@@ -2509,19 +3740,168 @@ body:has(> .zx-modal[open]) {
2509
3740
  gap: var(--zx-space-2);
2510
3741
  }
2511
3742
  .zx-select__priority-icon {
2512
- inline-size: 10px;
2513
- block-size: 10px;
3743
+ display: inline-flex;
3744
+ gap: 2px;
2514
3745
  flex: none;
2515
- border-radius: var(--zx-radius-sm);
2516
- background: var(--zx-color-warning);
3746
+ color: var(--zx-color-warning);
3747
+ }
3748
+ .zx-select__priority-icon > span {
3749
+ inline-size: 7px;
3750
+ block-size: 7px;
3751
+ border: 1px solid currentColor;
3752
+ border-radius: 2px;
3753
+ }
3754
+ .zx-select__priority-icon > span[data-filled=true] {
3755
+ background: currentColor;
3756
+ }
3757
+ .zx-select__priority-icon[data-level="0"] {
3758
+ color: var(--zx-color-success);
2517
3759
  }
2518
- .zx-select__priority-icon[data-level="0"],
2519
3760
  .zx-select__priority-icon[data-level="1"] {
2520
- background: var(--zx-color-success);
3761
+ color: color-mix(in srgb, var(--zx-color-success) 35%, var(--zx-color-warning));
3762
+ }
3763
+ .zx-select__priority-icon[data-level="2"] {
3764
+ color: var(--zx-color-warning);
3765
+ }
3766
+ .zx-select__priority-icon[data-level="3"] {
3767
+ color: color-mix(in srgb, var(--zx-color-warning) 35%, var(--zx-color-danger));
2521
3768
  }
2522
- .zx-select__priority-icon[data-level="3"],
2523
3769
  .zx-select__priority-icon[data-level="4"] {
2524
- background: var(--zx-color-danger);
3770
+ color: var(--zx-color-danger);
3771
+ }
3772
+ .zx-select__status {
3773
+ display: grid;
3774
+ grid-template-columns: auto minmax(0, 1fr) auto;
3775
+ align-items: center;
3776
+ gap: var(--zx-space-2);
3777
+ }
3778
+ .zx-select__status-copy,
3779
+ .zx-select__action-copy {
3780
+ display: grid;
3781
+ min-inline-size: 0;
3782
+ }
3783
+ .zx-select__status-description,
3784
+ .zx-select__action-description {
3785
+ overflow: hidden;
3786
+ color: var(--zx-color-text-muted);
3787
+ font-size: var(--zx-text-xs);
3788
+ text-overflow: ellipsis;
3789
+ white-space: nowrap;
3790
+ }
3791
+ .zx-select__status-shortcut {
3792
+ border: 0;
3793
+ background: transparent;
3794
+ color: var(--zx-color-text-muted);
3795
+ font-family: var(--zx-font-mono);
3796
+ font-size: var(--zx-text-xs);
3797
+ }
3798
+ .zx-select__status-indicator {
3799
+ position: relative;
3800
+ display: inline-grid;
3801
+ place-items: center;
3802
+ inline-size: 14px;
3803
+ block-size: 14px;
3804
+ flex: none;
3805
+ border: 2px solid currentColor;
3806
+ border-radius: var(--zx-radius-full);
3807
+ color: var(--zx-color-text-muted);
3808
+ }
3809
+ .zx-select__status-indicator[data-tone=neutral] {
3810
+ color: var(--zx-color-border-strong);
3811
+ }
3812
+ .zx-select__status-indicator[data-tone=warning] {
3813
+ color: var(--zx-color-warning);
3814
+ }
3815
+ .zx-select__status-indicator[data-tone=info] {
3816
+ color: var(--zx-color-info);
3817
+ }
3818
+ .zx-select__status-indicator[data-tone=accent] {
3819
+ color: var(--zx-color-accent);
3820
+ }
3821
+ .zx-select__status-indicator[data-tone=success] {
3822
+ color: var(--zx-color-success);
3823
+ }
3824
+ .zx-select__status-indicator[data-tone=danger] {
3825
+ color: var(--zx-color-danger);
3826
+ }
3827
+ .zx-select__status-indicator[data-indicator=dotted] {
3828
+ border-style: dotted;
3829
+ }
3830
+ .zx-select__status-indicator[data-indicator=progress]::after {
3831
+ content: "";
3832
+ inline-size: 4px;
3833
+ block-size: 4px;
3834
+ border-radius: inherit;
3835
+ background: currentColor;
3836
+ }
3837
+ .zx-select__status-indicator[data-indicator=review] {
3838
+ background:
3839
+ linear-gradient(
3840
+ 90deg,
3841
+ currentColor 50%,
3842
+ transparent 50%);
3843
+ }
3844
+ .zx-select__status-indicator[data-indicator=ready] {
3845
+ background: conic-gradient(currentColor 0 35%, transparent 35% 100%);
3846
+ }
3847
+ .zx-select__status-indicator[data-indicator=waiting] {
3848
+ background: conic-gradient(currentColor 0 70%, transparent 70% 100%);
3849
+ }
3850
+ .zx-select__status-indicator:is([data-indicator=done], [data-indicator=canceled]) {
3851
+ background: currentColor;
3852
+ }
3853
+ .zx-select__status-indicator:is([data-indicator=done], [data-indicator=canceled]) > .zx-icon {
3854
+ color: var(--zx-color-bg-raised);
3855
+ }
3856
+ .zx-select__status-indicator[data-indicator=duplicate]::after {
3857
+ content: "";
3858
+ inline-size: 8px;
3859
+ block-size: 2px;
3860
+ border-radius: var(--zx-radius-full);
3861
+ background: currentColor;
3862
+ transform: rotate(-45deg);
3863
+ }
3864
+ .zx-select__action-content {
3865
+ display: flex;
3866
+ align-items: center;
3867
+ gap: var(--zx-space-2);
3868
+ }
3869
+ .zx-select__action-icon {
3870
+ display: inline-flex;
3871
+ color: var(--zx-color-text-muted);
3872
+ }
3873
+ .zx-select__entity,
3874
+ .zx-select__entity-none {
3875
+ display: flex;
3876
+ align-items: center;
3877
+ gap: var(--zx-space-2);
3878
+ }
3879
+ .zx-select__entity-icon {
3880
+ display: inline-flex;
3881
+ flex: none;
3882
+ }
3883
+ .zx-select__entity-copy {
3884
+ display: grid;
3885
+ min-inline-size: 0;
3886
+ }
3887
+ .zx-select__entity-label {
3888
+ overflow: hidden;
3889
+ text-overflow: ellipsis;
3890
+ white-space: nowrap;
3891
+ }
3892
+ .zx-select__entity-subtitle {
3893
+ overflow: hidden;
3894
+ color: var(--zx-color-text-muted);
3895
+ font-size: var(--zx-text-xs);
3896
+ text-overflow: ellipsis;
3897
+ white-space: nowrap;
3898
+ }
3899
+ .zx-select__entity-none-icon {
3900
+ inline-size: 14px;
3901
+ block-size: 14px;
3902
+ flex: none;
3903
+ border: 2px dotted var(--zx-color-text-muted);
3904
+ border-radius: var(--zx-radius-full);
2525
3905
  }
2526
3906
  @media (prefers-reduced-motion: no-preference) {
2527
3907
  .zx-select__loading {
@@ -3034,47 +4414,6 @@ body:has(> .zx-modal[open]) {
3034
4414
  gap: 4px;
3035
4415
  }
3036
4416
 
3037
- /* src/components/permission/permission.css */
3038
- .zx-permission {
3039
- min-inline-size: 0;
3040
- color: var(--zx-color-text);
3041
- font-size: var(--zx-control-font-size);
3042
- }
3043
- .zx-permission__choices {
3044
- display: grid;
3045
- grid-template-columns: repeat(3, max-content) minmax(160px, 1fr);
3046
- align-items: center;
3047
- gap: var(--zx-space-2) var(--zx-space-4);
3048
- }
3049
- .zx-permission__choice {
3050
- display: inline-flex;
3051
- align-items: center;
3052
- gap: var(--zx-space-2);
3053
- min-block-size: var(--zx-control-height);
3054
- cursor: pointer;
3055
- }
3056
- .zx-permission__choice input {
3057
- accent-color: var(--zx-color-accent);
3058
- }
3059
- .zx-permission__choice:has(input:focus-visible) {
3060
- border-radius: var(--zx-radius-sm);
3061
- box-shadow: var(--zx-focus-ring);
3062
- }
3063
- .zx-permission__groups {
3064
- min-inline-size: 160px;
3065
- }
3066
- .zx-permission:not([data-state=group]) .zx-permission__groups {
3067
- color: var(--zx-color-text-muted);
3068
- }
3069
- @media (max-width: 640px) {
3070
- .zx-permission__choices {
3071
- grid-template-columns: 1fr;
3072
- }
3073
- .zx-permission__groups {
3074
- inline-size: 100%;
3075
- }
3076
- }
3077
-
3078
4417
  /* src/components/date-picker/date-picker.css */
3079
4418
  .zx-date-picker,
3080
4419
  .zx-month-picker {
@@ -3984,6 +5323,41 @@ body:has(> .zx-modal[open]) {
3984
5323
  color: var(--zx-color-text-muted);
3985
5324
  text-align: center;
3986
5325
  }
5326
+ .zx-table__tree-cell {
5327
+ display: flex;
5328
+ min-inline-size: 0;
5329
+ align-items: center;
5330
+ gap: var(--zx-space-1);
5331
+ padding-inline-start: calc(var(--zx-table-depth, 0) * var(--zx-space-4));
5332
+ }
5333
+ .zx-table__tree-toggle,
5334
+ .zx-table__tree-spacer {
5335
+ inline-size: 24px;
5336
+ block-size: 24px;
5337
+ flex: 0 0 24px;
5338
+ }
5339
+ .zx-table__tree-toggle {
5340
+ display: inline-grid;
5341
+ min-block-size: 0;
5342
+ place-items: center;
5343
+ padding: 0;
5344
+ border: 0;
5345
+ border-radius: var(--zx-radius-sm);
5346
+ background: transparent;
5347
+ color: var(--zx-color-text-muted);
5348
+ cursor: pointer;
5349
+ }
5350
+ .zx-table__tree-toggle:hover {
5351
+ background: var(--zx-color-bg-hover);
5352
+ color: var(--zx-color-text);
5353
+ }
5354
+ .zx-table__tree-toggle:focus-visible {
5355
+ outline: 0;
5356
+ box-shadow: var(--zx-focus-ring);
5357
+ }
5358
+ .zx-table__cell-content {
5359
+ min-inline-size: 0;
5360
+ }
3987
5361
  .zx-table[data-edit-mode] .zx-table__body td {
3988
5362
  block-size: var(--zx-control-height);
3989
5363
  }
@@ -4106,6 +5480,80 @@ body:has(> .zx-modal[open]) {
4106
5480
  color: var(--zx-color-text);
4107
5481
  }
4108
5482
 
5483
+ /* src/components/grid/grid.css */
5484
+ .zx-table[data-preset=billing-items] tr.zx-grid-billing__summary > td {
5485
+ background: var(--zx-color-bg-subtle);
5486
+ font-weight: 700;
5487
+ }
5488
+
5489
+ /* src/components/chart/chart.css */
5490
+ .zx-chart {
5491
+ display: grid;
5492
+ gap: var(--zx-space-4);
5493
+ min-inline-size: 0;
5494
+ color: var(--zx-color-text);
5495
+ }
5496
+ .zx-chart__viewport {
5497
+ position: relative;
5498
+ inline-size: 100%;
5499
+ min-block-size: 220px;
5500
+ aspect-ratio: var(--zx-chart-aspect-ratio, 16 / 9);
5501
+ }
5502
+ .zx-chart__viewport[hidden],
5503
+ .zx-chart__status[hidden] {
5504
+ display: none;
5505
+ }
5506
+ .zx-chart__canvas {
5507
+ position: absolute;
5508
+ inset: 0;
5509
+ inline-size: 100% !important;
5510
+ block-size: 100% !important;
5511
+ }
5512
+ .zx-chart__description {
5513
+ margin: 0;
5514
+ color: var(--zx-color-text-muted);
5515
+ font-size: var(--zx-text-sm);
5516
+ }
5517
+ .zx-chart__description:empty {
5518
+ display: none;
5519
+ }
5520
+ .zx-chart__status {
5521
+ display: grid;
5522
+ min-block-size: 180px;
5523
+ place-items: center;
5524
+ border: 1px dashed var(--zx-color-border);
5525
+ border-radius: var(--zx-radius-lg);
5526
+ color: var(--zx-color-text-muted);
5527
+ text-align: center;
5528
+ }
5529
+ .zx-chart__summary[data-summary=hidden] {
5530
+ position: absolute;
5531
+ inline-size: 1px;
5532
+ block-size: 1px;
5533
+ overflow: hidden;
5534
+ clip-path: inset(50%);
5535
+ white-space: nowrap;
5536
+ }
5537
+ .zx-chart__table {
5538
+ inline-size: 100%;
5539
+ border-collapse: collapse;
5540
+ }
5541
+ .zx-chart__table caption {
5542
+ margin-block-end: var(--zx-space-2);
5543
+ font-weight: 700;
5544
+ text-align: start;
5545
+ }
5546
+ .zx-chart__table th,
5547
+ .zx-chart__table td {
5548
+ border-block-end: 1px solid var(--zx-color-border);
5549
+ padding: var(--zx-space-2);
5550
+ text-align: end;
5551
+ }
5552
+ .zx-chart__table th:first-child,
5553
+ .zx-chart__table td:first-child {
5554
+ text-align: start;
5555
+ }
5556
+
4109
5557
  /* src/components/tree/tree.css */
4110
5558
  .zx-tree {
4111
5559
  --zx-tree-indent: 18px;
@@ -5131,4 +6579,295 @@ button.zx-stepper__control:disabled {
5131
6579
  }
5132
6580
  }
5133
6581
 
6582
+ /* src/components/questionnaire/questionnaire.css */
6583
+ .zx-questionnaire {
6584
+ --zx-questionnaire-radius: var(--zx-radius-lg);
6585
+ --zx-questionnaire-gap: var(--zx-space-3);
6586
+ display: block;
6587
+ color: var(--zx-color-text);
6588
+ }
6589
+ .zx-questionnaire__form,
6590
+ .zx-questionnaire:is(form) {
6591
+ display: grid;
6592
+ gap: var(--zx-space-5);
6593
+ }
6594
+ .zx-questionnaire__progress {
6595
+ display: block;
6596
+ }
6597
+ .zx-questionnaire__progress[hidden],
6598
+ .zx-questionnaire__item[hidden],
6599
+ .zx-questionnaire__review[hidden],
6600
+ .zx-questionnaire__error[hidden],
6601
+ .zx-questionnaire__actions > .zx-btn[hidden] {
6602
+ display: none;
6603
+ }
6604
+ .zx-questionnaire__item {
6605
+ display: grid;
6606
+ gap: var(--zx-questionnaire-gap);
6607
+ margin: 0;
6608
+ border: 0;
6609
+ padding: 0;
6610
+ min-inline-size: 0;
6611
+ }
6612
+ .zx-questionnaire__item:focus {
6613
+ outline: none;
6614
+ }
6615
+ .zx-questionnaire__item:focus-visible {
6616
+ outline: none;
6617
+ box-shadow: var(--zx-focus-ring);
6618
+ border-radius: var(--zx-questionnaire-radius);
6619
+ }
6620
+ .zx-questionnaire__prompt {
6621
+ display: block;
6622
+ float: none;
6623
+ margin: 0;
6624
+ padding: 0;
6625
+ inline-size: 100%;
6626
+ color: var(--zx-color-text);
6627
+ font-size: var(--zx-text-lg);
6628
+ font-weight: 600;
6629
+ line-height: 1.35;
6630
+ }
6631
+ .zx-questionnaire__description {
6632
+ margin: 0;
6633
+ color: var(--zx-color-text-muted);
6634
+ font-size: var(--zx-text-sm);
6635
+ line-height: 1.5;
6636
+ }
6637
+ .zx-questionnaire__error {
6638
+ display: flex;
6639
+ gap: var(--zx-space-2);
6640
+ margin: 0;
6641
+ color: var(--zx-color-danger);
6642
+ font-size: var(--zx-text-sm);
6643
+ }
6644
+ .zx-questionnaire__choices {
6645
+ display: grid;
6646
+ gap: var(--zx-space-2);
6647
+ }
6648
+ .zx-questionnaire__choice {
6649
+ display: flex;
6650
+ align-items: flex-start;
6651
+ gap: var(--zx-space-3);
6652
+ border: 1px solid var(--zx-color-border-control);
6653
+ border-radius: var(--zx-questionnaire-radius);
6654
+ background: var(--zx-color-bg-control);
6655
+ padding: var(--zx-space-3);
6656
+ min-inline-size: 0;
6657
+ cursor: pointer;
6658
+ }
6659
+ @media (prefers-reduced-motion: no-preference) {
6660
+ .zx-questionnaire__choice {
6661
+ transition: border-color var(--zx-dur-fast) var(--zx-ease), background-color var(--zx-dur-fast) var(--zx-ease);
6662
+ }
6663
+ }
6664
+ .zx-questionnaire__choice:hover:not([data-disabled]) {
6665
+ border-color: var(--zx-color-border-strong);
6666
+ background: var(--zx-color-bg-hover);
6667
+ }
6668
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) {
6669
+ border-color: var(--zx-color-accent);
6670
+ background: var(--zx-color-bg-selected);
6671
+ }
6672
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:focus-visible) {
6673
+ box-shadow: var(--zx-focus-ring);
6674
+ }
6675
+ .zx-questionnaire__choice[data-disabled] {
6676
+ opacity: 0.55;
6677
+ cursor: not-allowed;
6678
+ }
6679
+ .zx-questionnaire__control {
6680
+ position: absolute;
6681
+ margin: 0;
6682
+ border: 0;
6683
+ padding: 0;
6684
+ inline-size: 1px;
6685
+ block-size: 1px;
6686
+ overflow: hidden;
6687
+ clip-path: inset(50%);
6688
+ white-space: nowrap;
6689
+ }
6690
+ .zx-questionnaire__marker {
6691
+ flex: none;
6692
+ display: grid;
6693
+ place-items: center;
6694
+ margin-block-start: 1px;
6695
+ border: 1px solid var(--zx-color-border-strong);
6696
+ inline-size: 18px;
6697
+ block-size: 18px;
6698
+ background: var(--zx-color-bg-surface);
6699
+ }
6700
+ .zx-questionnaire__choice:has(.zx-questionnaire__control[type=radio]) .zx-questionnaire__marker {
6701
+ border-radius: 50%;
6702
+ }
6703
+ .zx-questionnaire__choice:has(.zx-questionnaire__control[type=checkbox]) .zx-questionnaire__marker {
6704
+ border-radius: var(--zx-radius-sm);
6705
+ }
6706
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) .zx-questionnaire__marker {
6707
+ border-color: var(--zx-color-accent);
6708
+ background: var(--zx-color-accent);
6709
+ }
6710
+ .zx-questionnaire__marker::after {
6711
+ content: "";
6712
+ inline-size: 8px;
6713
+ block-size: 8px;
6714
+ border-radius: inherit;
6715
+ background: var(--zx-color-on-accent);
6716
+ transform: scale(0);
6717
+ }
6718
+ @media (prefers-reduced-motion: no-preference) {
6719
+ .zx-questionnaire__marker::after {
6720
+ transition: transform var(--zx-dur-fast) var(--zx-ease);
6721
+ }
6722
+ }
6723
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) .zx-questionnaire__marker::after {
6724
+ transform: scale(1);
6725
+ }
6726
+ .zx-questionnaire__choice > .zx-icon {
6727
+ flex: none;
6728
+ margin-block-start: 1px;
6729
+ color: var(--zx-color-text-muted);
6730
+ }
6731
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) > .zx-icon {
6732
+ color: var(--zx-color-accent);
6733
+ }
6734
+ .zx-questionnaire__text {
6735
+ display: grid;
6736
+ gap: 2px;
6737
+ flex: 1 1 auto;
6738
+ min-inline-size: 0;
6739
+ }
6740
+ .zx-questionnaire__label {
6741
+ font-size: var(--zx-control-font-size);
6742
+ line-height: 1.4;
6743
+ }
6744
+ .zx-questionnaire__hint {
6745
+ color: var(--zx-color-text-muted);
6746
+ font-size: var(--zx-text-sm);
6747
+ line-height: 1.45;
6748
+ }
6749
+ .zx-questionnaire__key {
6750
+ flex: none;
6751
+ display: grid;
6752
+ place-items: center;
6753
+ border: 1px solid var(--zx-color-border);
6754
+ border-radius: var(--zx-radius-sm);
6755
+ background: var(--zx-color-bg-muted);
6756
+ padding-inline: var(--zx-space-2);
6757
+ min-inline-size: 22px;
6758
+ block-size: 22px;
6759
+ color: var(--zx-color-text-muted);
6760
+ font-family: inherit;
6761
+ font-size: var(--zx-text-xs);
6762
+ text-transform: uppercase;
6763
+ }
6764
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) .zx-questionnaire__key {
6765
+ border-color: var(--zx-color-accent);
6766
+ color: var(--zx-color-accent);
6767
+ }
6768
+ .zx-questionnaire__freeform {
6769
+ display: grid;
6770
+ gap: var(--zx-space-2);
6771
+ padding-block-start: var(--zx-space-1);
6772
+ }
6773
+ .zx-questionnaire__freeform-label {
6774
+ color: var(--zx-color-text-muted);
6775
+ font-size: var(--zx-text-sm);
6776
+ }
6777
+ .zx-questionnaire__freeform-input {
6778
+ border: 1px solid var(--zx-color-border-control);
6779
+ border-radius: var(--zx-control-radius);
6780
+ background: var(--zx-color-bg-control);
6781
+ padding: var(--zx-space-2) var(--zx-control-pad-x);
6782
+ min-block-size: var(--zx-control-height);
6783
+ color: var(--zx-color-text);
6784
+ font: inherit;
6785
+ font-size: var(--zx-control-font-size);
6786
+ }
6787
+ .zx-questionnaire__freeform-input::placeholder {
6788
+ color: var(--zx-color-text-placeholder);
6789
+ }
6790
+ .zx-questionnaire__freeform-input:focus-visible {
6791
+ outline: none;
6792
+ border-color: var(--zx-color-accent);
6793
+ box-shadow: var(--zx-focus-ring);
6794
+ }
6795
+ .zx-questionnaire__field[data-hide-label] > .zx-field__label {
6796
+ position: absolute;
6797
+ inline-size: 1px;
6798
+ block-size: 1px;
6799
+ overflow: hidden;
6800
+ clip-path: inset(50%);
6801
+ white-space: nowrap;
6802
+ }
6803
+ .zx-questionnaire__review {
6804
+ display: grid;
6805
+ gap: var(--zx-space-3);
6806
+ }
6807
+ .zx-questionnaire__review:focus {
6808
+ outline: none;
6809
+ }
6810
+ .zx-questionnaire__review-title {
6811
+ margin: 0;
6812
+ font-size: var(--zx-text-lg);
6813
+ font-weight: 600;
6814
+ }
6815
+ .zx-questionnaire__answers {
6816
+ display: grid;
6817
+ gap: var(--zx-space-2);
6818
+ margin: 0;
6819
+ }
6820
+ .zx-questionnaire__answer {
6821
+ display: grid;
6822
+ grid-template-columns: minmax(0, 1fr) auto;
6823
+ align-items: center;
6824
+ gap: 0 var(--zx-space-3);
6825
+ border: 1px solid var(--zx-color-border);
6826
+ border-radius: var(--zx-questionnaire-radius);
6827
+ background: var(--zx-color-bg-surface);
6828
+ padding: var(--zx-space-3);
6829
+ }
6830
+ .zx-questionnaire__answer-prompt {
6831
+ grid-column: 1;
6832
+ color: var(--zx-color-text-muted);
6833
+ font-size: var(--zx-text-sm);
6834
+ }
6835
+ .zx-questionnaire__answer-value {
6836
+ grid-column: 1;
6837
+ margin: 0;
6838
+ min-inline-size: 0;
6839
+ overflow-wrap: anywhere;
6840
+ }
6841
+ .zx-questionnaire__answer-value[data-empty] {
6842
+ color: var(--zx-color-text-muted);
6843
+ font-style: italic;
6844
+ }
6845
+ .zx-questionnaire__answer > .zx-btn {
6846
+ grid-area: 1 / 2 / 3 / 3;
6847
+ }
6848
+ .zx-questionnaire__actions {
6849
+ display: flex;
6850
+ align-items: center;
6851
+ gap: var(--zx-space-2);
6852
+ flex-wrap: wrap;
6853
+ }
6854
+ .zx-questionnaire__spacer {
6855
+ flex: 1 1 auto;
6856
+ }
6857
+ .zx-questionnaire[data-state=checking] .zx-questionnaire__item,
6858
+ .zx-questionnaire[data-state=checking] .zx-questionnaire__choice {
6859
+ cursor: progress;
6860
+ }
6861
+ .zx-questionnaire[data-state=complete] .zx-questionnaire__item {
6862
+ opacity: 0.7;
6863
+ }
6864
+ @media (max-width: 480px) {
6865
+ .zx-questionnaire__key {
6866
+ display: none;
6867
+ }
6868
+ .zx-questionnaire__actions > .zx-btn {
6869
+ flex: 1 1 auto;
6870
+ }
6871
+ }
6872
+
5134
6873
  /* styles/zx.css */