@zeyos/zx 2.2.1 → 3.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 (117) hide show
  1. package/CHANGELOG.md +197 -0
  2. package/DESIGN-SYSTEM.md +136 -0
  3. package/MIGRATION.md +155 -4
  4. package/README.md +51 -14
  5. package/dist/types/compat/map/data.d.ts +3 -2
  6. package/dist/types/components/account-menu/account-menu.d.ts +144 -0
  7. package/dist/types/components/app-rail/app-rail.d.ts +250 -0
  8. package/dist/types/components/app-sidebar/app-sidebar.d.ts +169 -0
  9. package/dist/types/components/avatar/avatar.d.ts +100 -0
  10. package/dist/types/components/chart/chart.d.ts +321 -0
  11. package/dist/types/components/date-picker/month-picker.d.ts +6 -0
  12. package/dist/types/components/dialog/dialog.d.ts +9 -0
  13. package/dist/types/components/dock/dock.d.ts +495 -0
  14. package/dist/types/components/dropdown/dropdown.d.ts +2 -2
  15. package/dist/types/components/field/field.d.ts +14 -0
  16. package/dist/types/components/field-upload/field-upload.d.ts +37 -4
  17. package/dist/types/components/form/form.d.ts +25 -3
  18. package/dist/types/components/grid/grid.d.ts +172 -0
  19. package/dist/types/components/launcher/launcher.d.ts +300 -0
  20. package/dist/types/components/layout/layout.d.ts +4 -4
  21. package/dist/types/components/menu-button/menu-button.d.ts +10 -2
  22. package/dist/types/components/modal/modal.d.ts +25 -0
  23. package/dist/types/components/multi-value-editor/multi-value-editor.d.ts +74 -9
  24. package/dist/types/components/questionnaire/items.d.ts +327 -0
  25. package/dist/types/components/questionnaire/questionnaire.d.ts +449 -0
  26. package/dist/types/components/select/select.d.ts +36 -1
  27. package/dist/types/components/sheet/sheet-stack.d.ts +167 -0
  28. package/dist/types/components/sheet/sheet.d.ts +294 -0
  29. package/dist/types/components/split-view/split-view.d.ts +2 -21
  30. package/dist/types/components/tabbox/tabbox.d.ts +12 -3
  31. package/dist/types/components/table/table.d.ts +219 -12
  32. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  33. package/dist/types/components/value-list/value-list.d.ts +24 -3
  34. package/dist/types/core/dom.d.ts +114 -0
  35. package/dist/types/core/drag-axis.d.ts +111 -0
  36. package/dist/types/core/position.d.ts +4 -2
  37. package/dist/types/index.d.ts +12 -2
  38. package/dist/zx-compat.esm.js +943 -311
  39. package/dist/zx-compat.esm.min.js +1 -1
  40. package/dist/zx-compat.global.js +7893 -2252
  41. package/dist/zx-compat.global.min.js +3 -3
  42. package/dist/zx-zeyos.esm.js +826 -114
  43. package/dist/zx-zeyos.esm.min.js +1 -1
  44. package/dist/zx.css +1720 -243
  45. package/dist/zx.esm.js +8227 -2599
  46. package/dist/zx.esm.min.js +3 -3
  47. package/dist/zx.global.js +8227 -2599
  48. package/dist/zx.global.min.js +3 -3
  49. package/dist/zx.min.css +1 -1
  50. package/docs/api.json +2597 -255
  51. package/docs/llms.md +475 -37
  52. package/docs/llms.txt +21 -9
  53. package/package.json +4 -2
  54. package/src/compat/globals.js +3 -1
  55. package/src/compat/map/data.js +31 -9
  56. package/src/components/account-menu/account-menu.css +70 -0
  57. package/src/components/account-menu/account-menu.js +208 -0
  58. package/src/components/app-rail/app-rail.css +107 -0
  59. package/src/components/app-rail/app-rail.js +668 -0
  60. package/src/components/app-sidebar/app-sidebar.css +68 -0
  61. package/src/components/app-sidebar/app-sidebar.js +388 -0
  62. package/src/components/avatar/avatar.css +61 -0
  63. package/src/components/avatar/avatar.js +222 -0
  64. package/src/components/button/button.css +0 -1
  65. package/src/components/chart/chart.css +61 -0
  66. package/src/components/chart/chart.js +518 -0
  67. package/src/components/date-picker/date-range-picker.css +7 -0
  68. package/src/components/date-picker/month-picker.js +9 -0
  69. package/src/components/dialog/dialog.js +11 -4
  70. package/src/components/dock/dock.css +228 -0
  71. package/src/components/dock/dock.js +977 -0
  72. package/src/components/dropdown/dropdown.js +1 -1
  73. package/src/components/field/field.js +2 -0
  74. package/src/components/field-upload/field-upload.js +9 -4
  75. package/src/components/fieldset/fieldset.css +7 -0
  76. package/src/components/form/form.css +7 -0
  77. package/src/components/form/form.js +6 -3
  78. package/src/components/grid/grid.css +6 -0
  79. package/src/components/grid/grid.js +213 -0
  80. package/src/components/launcher/launcher.css +100 -0
  81. package/src/components/launcher/launcher.js +557 -0
  82. package/src/components/layout/layout.js +2 -2
  83. package/src/components/menu-button/menu-button.js +27 -2
  84. package/src/components/modal/modal.css +5 -1
  85. package/src/components/modal/modal.js +37 -2
  86. package/src/components/multi-value-editor/multi-value-editor.css +99 -15
  87. package/src/components/multi-value-editor/multi-value-editor.js +237 -19
  88. package/src/components/navigation-bar/navigation-bar.css +7 -0
  89. package/src/components/questionnaire/items.js +370 -0
  90. package/src/components/questionnaire/questionnaire.css +387 -0
  91. package/src/components/questionnaire/questionnaire.js +1033 -0
  92. package/src/components/search/search.css +10 -2
  93. package/src/components/select/select.css +6 -1
  94. package/src/components/select/select.js +99 -11
  95. package/src/components/sheet/sheet-stack.js +304 -0
  96. package/src/components/sheet/sheet.css +351 -0
  97. package/src/components/sheet/sheet.js +551 -0
  98. package/src/components/split-view/split-view.js +76 -161
  99. package/src/components/stepper/stepper.css +12 -2
  100. package/src/components/tabbox/tabbox.css +13 -3
  101. package/src/components/tabbox/tabbox.js +34 -10
  102. package/src/components/table/table.css +43 -0
  103. package/src/components/table/table.js +523 -45
  104. package/src/components/tooltip/tooltip.js +5 -2
  105. package/src/components/value-list/value-list.js +6 -3
  106. package/src/core/dom.js +302 -0
  107. package/src/core/drag-axis.js +203 -0
  108. package/src/core/position.js +68 -22
  109. package/src/index.js +19 -2
  110. package/styles/tokens/dark.css +15 -13
  111. package/styles/tokens/global.css +17 -5
  112. package/styles/tokens/semantic.css +14 -8
  113. package/styles/tokens/themes.css +72 -0
  114. package/styles/zx.css +11 -1
  115. package/dist/types/components/permission/permission.d.ts +0 -93
  116. package/src/components/permission/permission.css +0 -47
  117. package/src/components/permission/permission.js +0 -198
package/dist/zx.css CHANGED
@@ -18,6 +18,11 @@
18
18
  --zx-green-500: #009966;
19
19
  --zx-green-600: #007a55;
20
20
  --zx-green-700: #006045;
21
+ --zx-accent-300: var(--zx-green-300);
22
+ --zx-accent-400: var(--zx-green-400);
23
+ --zx-accent-500: var(--zx-green-500);
24
+ --zx-accent-600: var(--zx-green-600);
25
+ --zx-accent-700: var(--zx-green-700);
21
26
  --zx-red-400: #ff6467;
22
27
  --zx-red-500: #e7000b;
23
28
  --zx-red-600: #c10007;
@@ -75,6 +80,50 @@
75
80
  --zx-ease: cubic-bezier(.2, .6, .3, 1);
76
81
  }
77
82
 
83
+ /* styles/tokens/themes.css */
84
+ [data-zx-preset=zx] {
85
+ --zx-accent-300: #5ee9b5;
86
+ --zx-accent-400: #21cc75;
87
+ --zx-accent-500: #009966;
88
+ --zx-accent-600: #007a55;
89
+ --zx-accent-700: #006045;
90
+ }
91
+ [data-zx-preset=zeyos] {
92
+ --zx-accent-300: #ffd9a8;
93
+ --zx-accent-400: #f7bc60;
94
+ --zx-accent-500: #d0952f;
95
+ --zx-accent-600: #96690f;
96
+ --zx-accent-700: #6f4e0b;
97
+ }
98
+ [data-zx-preset=ocean] {
99
+ --zx-accent-300: #8ec5ff;
100
+ --zx-accent-400: #51a2ff;
101
+ --zx-accent-500: #2b7fff;
102
+ --zx-accent-600: #155dfc;
103
+ --zx-accent-700: #1447e6;
104
+ }
105
+ [data-zx-preset=violet] {
106
+ --zx-accent-300: #c4b4ff;
107
+ --zx-accent-400: #a684ff;
108
+ --zx-accent-500: #8e51ff;
109
+ --zx-accent-600: #7f22fe;
110
+ --zx-accent-700: #7008e7;
111
+ }
112
+ [data-zx-preset=rose] {
113
+ --zx-accent-300: #ffa1ad;
114
+ --zx-accent-400: #ff637e;
115
+ --zx-accent-500: #ff2056;
116
+ --zx-accent-600: #dc0039;
117
+ --zx-accent-700: #a80030;
118
+ }
119
+ [data-zx-preset=slate] {
120
+ --zx-accent-300: #cad5e2;
121
+ --zx-accent-400: #90a1b9;
122
+ --zx-accent-500: #62748e;
123
+ --zx-accent-600: #45556c;
124
+ --zx-accent-700: #314158;
125
+ }
126
+
78
127
  /* styles/tokens/semantic.css */
79
128
  :root,
80
129
  [data-zx-theme=light] {
@@ -85,7 +134,7 @@
85
134
  --zx-color-bg-control: var(--zx-gray-0);
86
135
  --zx-color-bg-muted: var(--zx-gray-100);
87
136
  --zx-color-bg-hover: var(--zx-gray-100);
88
- --zx-color-bg-selected: color-mix(in srgb, var(--zx-green-600) 10%, var(--zx-gray-0));
137
+ --zx-color-bg-selected: color-mix(in srgb, var(--zx-accent-600) 10%, var(--zx-gray-0));
89
138
  --zx-color-bg-backdrop: color-mix(in srgb, var(--zx-gray-950) 50%, transparent);
90
139
  --zx-color-border: var(--zx-gray-200);
91
140
  --zx-color-border-strong: var(--zx-gray-300);
@@ -94,10 +143,10 @@
94
143
  --zx-color-text-muted: var(--zx-gray-500);
95
144
  --zx-color-text-placeholder: var(--zx-gray-400);
96
145
  --zx-color-text-invert: var(--zx-gray-50);
97
- --zx-color-accent: var(--zx-green-600);
98
- --zx-color-accent-hover: var(--zx-green-700);
99
- --zx-color-accent-active: var(--zx-green-700);
100
- --zx-color-accent-subtle: color-mix(in srgb, var(--zx-green-600) 10%, var(--zx-gray-0));
146
+ --zx-color-accent: var(--zx-accent-600);
147
+ --zx-color-accent-hover: var(--zx-accent-700);
148
+ --zx-color-accent-active: var(--zx-accent-700);
149
+ --zx-color-accent-subtle: color-mix(in srgb, var(--zx-accent-600) 10%, var(--zx-gray-0));
101
150
  --zx-color-on-accent: var(--zx-gray-0);
102
151
  --zx-color-danger: var(--zx-red-500);
103
152
  --zx-color-danger-bg: color-mix(in srgb, var(--zx-red-500) 10%, var(--zx-gray-0));
@@ -115,6 +164,7 @@
115
164
  --zx-control-font-size: var(--zx-text-md);
116
165
  --zx-control-font-weight: 500;
117
166
  --zx-overlay-shadow: var(--zx-shadow-3);
167
+ --zx-overlay-blur: 8px;
118
168
  --zx-header-bg: var(--zx-gray-900);
119
169
  --zx-header-text: var(--zx-gray-50);
120
170
  }
@@ -128,7 +178,7 @@
128
178
  --zx-color-bg-control: color-mix(in srgb, var(--zx-gray-0) 5%, transparent);
129
179
  --zx-color-bg-muted: var(--zx-gray-800);
130
180
  --zx-color-bg-hover: color-mix(in srgb, var(--zx-gray-0) 8%, transparent);
131
- --zx-color-bg-selected: color-mix(in srgb, var(--zx-green-400) 18%, var(--zx-gray-900));
181
+ --zx-color-bg-selected: color-mix(in srgb, var(--zx-accent-400) 18%, var(--zx-gray-900));
132
182
  --zx-color-bg-backdrop: color-mix(in srgb, var(--zx-gray-950) 75%, transparent);
133
183
  --zx-color-border: color-mix(in srgb, var(--zx-gray-0) 10%, transparent);
134
184
  --zx-color-border-strong: color-mix(in srgb, var(--zx-gray-0) 28%, transparent);
@@ -137,10 +187,10 @@
137
187
  --zx-color-text-muted: var(--zx-gray-400);
138
188
  --zx-color-text-placeholder: var(--zx-gray-500);
139
189
  --zx-color-text-invert: var(--zx-gray-950);
140
- --zx-color-accent: var(--zx-green-400);
141
- --zx-color-accent-hover: var(--zx-green-300);
142
- --zx-color-accent-active: var(--zx-green-500);
143
- --zx-color-accent-subtle: color-mix(in srgb, var(--zx-green-400) 16%, var(--zx-gray-900));
190
+ --zx-color-accent: var(--zx-accent-400);
191
+ --zx-color-accent-hover: var(--zx-accent-300);
192
+ --zx-color-accent-active: var(--zx-accent-500);
193
+ --zx-color-accent-subtle: color-mix(in srgb, var(--zx-accent-400) 16%, var(--zx-gray-900));
144
194
  --zx-color-on-accent: var(--zx-gray-950);
145
195
  --zx-color-danger: var(--zx-red-400);
146
196
  --zx-color-danger-bg: color-mix(in srgb, var(--zx-red-400) 16%, var(--zx-gray-900));
@@ -165,7 +215,7 @@
165
215
  --zx-color-bg-control: color-mix(in srgb, var(--zx-gray-0) 5%, transparent);
166
216
  --zx-color-bg-muted: var(--zx-gray-800);
167
217
  --zx-color-bg-hover: color-mix(in srgb, var(--zx-gray-0) 8%, transparent);
168
- --zx-color-bg-selected: color-mix(in srgb, var(--zx-green-400) 18%, var(--zx-gray-900));
218
+ --zx-color-bg-selected: color-mix(in srgb, var(--zx-accent-400) 18%, var(--zx-gray-900));
169
219
  --zx-color-bg-backdrop: color-mix(in srgb, var(--zx-gray-950) 75%, transparent);
170
220
  --zx-color-border: color-mix(in srgb, var(--zx-gray-0) 10%, transparent);
171
221
  --zx-color-border-strong: color-mix(in srgb, var(--zx-gray-0) 28%, transparent);
@@ -174,10 +224,10 @@
174
224
  --zx-color-text-muted: var(--zx-gray-400);
175
225
  --zx-color-text-placeholder: var(--zx-gray-500);
176
226
  --zx-color-text-invert: var(--zx-gray-950);
177
- --zx-color-accent: var(--zx-green-400);
178
- --zx-color-accent-hover: var(--zx-green-300);
179
- --zx-color-accent-active: var(--zx-green-500);
180
- --zx-color-accent-subtle: color-mix(in srgb, var(--zx-green-400) 16%, var(--zx-gray-900));
227
+ --zx-color-accent: var(--zx-accent-400);
228
+ --zx-color-accent-hover: var(--zx-accent-300);
229
+ --zx-color-accent-active: var(--zx-accent-500);
230
+ --zx-color-accent-subtle: color-mix(in srgb, var(--zx-accent-400) 16%, var(--zx-gray-900));
181
231
  --zx-color-on-accent: var(--zx-gray-950);
182
232
  --zx-color-danger: var(--zx-red-400);
183
233
  --zx-color-danger-bg: color-mix(in srgb, var(--zx-red-400) 16%, var(--zx-gray-900));
@@ -506,7 +556,6 @@ svg.zx-icon {
506
556
  padding-inline: var(--zx-space-2);
507
557
  font-size: var(--zx-text-sm);
508
558
  }
509
- .zx-btn > svg,
510
559
  .zx-btn > .zx-icon {
511
560
  flex: none;
512
561
  }
@@ -1670,9 +1719,13 @@ button.zx-panel__toggle:focus-visible {
1670
1719
  line-height: 1.25rem;
1671
1720
  text-align: center;
1672
1721
  }
1673
- .zx-tabbox__close {
1674
- margin-inline-start: calc(-1 * var(--zx-space-1));
1675
- color: var(--zx-color-text-muted);
1722
+ .zx-tabbox .zx-tabbox__close {
1723
+ inline-size: 1.5rem;
1724
+ block-size: 1.5rem;
1725
+ margin-inline: calc(-1 * var(--zx-space-1));
1726
+ }
1727
+ .zx-tabbox .zx-tabbox__close:hover {
1728
+ background: color-mix(in srgb, var(--zx-color-text) 12%, transparent);
1676
1729
  }
1677
1730
  .zx-tabbox__panel {
1678
1731
  padding-block-start: var(--zx-space-4);
@@ -1698,6 +1751,7 @@ button.zx-panel__toggle:focus-visible {
1698
1751
  .zx-navigation-bar {
1699
1752
  min-inline-size: 0;
1700
1753
  container-type: inline-size;
1754
+ inline-size: 100%;
1701
1755
  }
1702
1756
  .zx-navigation-bar__bar {
1703
1757
  display: flex;
@@ -1827,10 +1881,12 @@ button.zx-panel__toggle:focus-visible {
1827
1881
  background: none;
1828
1882
  padding-inline: var(--zx-control-pad-x) var(--zx-control-height);
1829
1883
  }
1830
- .zx-search__input:focus-visible,
1884
+ .zx-search__input:focus-visible {
1885
+ box-shadow: none;
1886
+ }
1831
1887
  .zx-search__clear:focus-visible,
1832
1888
  .zx-search__submit:focus-visible {
1833
- box-shadow: var(--zx-focus-ring);
1889
+ box-shadow: inset var(--zx-focus-ring);
1834
1890
  }
1835
1891
  .zx-search__input::-webkit-search-cancel-button {
1836
1892
  appearance: none;
@@ -1867,215 +1923,1006 @@ button.zx-panel__toggle:focus-visible {
1867
1923
  display: none;
1868
1924
  }
1869
1925
 
1870
- /* src/components/message/message.css */
1871
- .zx-message {
1872
- display: grid;
1873
- gap: var(--zx-space-2);
1874
- }
1875
- .zx-message-region {
1876
- position: fixed;
1877
- inset-block: var(--zx-space-4) auto;
1878
- inset-inline: var(--zx-space-4);
1879
- inline-size: min(420px, calc(100% - (2 * var(--zx-space-4))));
1880
- max-block-size: calc(100% - (2 * var(--zx-space-4)));
1881
- margin: 0 auto;
1882
- overflow: visible;
1883
- border: 0;
1884
- background: none;
1926
+ /* src/components/launcher/launcher.css */
1927
+ .zx-launcher {
1928
+ inline-size: min(680px, calc(100vw - (2 * var(--zx-space-4))));
1929
+ max-block-size: min(720px, calc(100vh - (2 * var(--zx-space-6))));
1930
+ border: 1px solid var(--zx-color-border);
1931
+ border-radius: var(--zx-radius-xl);
1932
+ background: var(--zx-color-bg-raised);
1933
+ box-shadow: var(--zx-overlay-shadow);
1934
+ color: var(--zx-color-text);
1885
1935
  padding: 0;
1886
1936
  }
1887
- .zx-message-region:popover-open {
1937
+ .zx-launcher::backdrop {
1938
+ background: var(--zx-color-bg-backdrop);
1939
+ }
1940
+ .zx-launcher__surface {
1888
1941
  display: grid;
1942
+ grid-template-rows: auto auto minmax(0, 1fr);
1943
+ max-block-size: inherit;
1889
1944
  }
1890
- .zx-message__toast {
1891
- --zx-message-kind: var(--zx-color-info);
1892
- position: relative;
1945
+ .zx-launcher__search {
1893
1946
  display: grid;
1894
- grid-template-columns: auto minmax(0, 1fr) auto;
1895
- align-items: start;
1947
+ grid-template-columns: auto 1fr auto;
1948
+ align-items: center;
1896
1949
  gap: var(--zx-space-3);
1897
- border: 1px solid var(--zx-color-border);
1898
- border-inline-start: 4px solid var(--zx-message-kind);
1899
- border-radius: var(--zx-radius-md);
1900
- background: var(--zx-color-info-bg);
1901
- box-shadow: var(--zx-overlay-shadow);
1902
- padding: var(--zx-space-3);
1903
- color: var(--zx-color-text);
1904
- }
1905
- .zx-message__toast[data-kind=success] {
1906
- --zx-message-kind: var(--zx-color-success);
1907
- background: var(--zx-color-success-bg);
1908
- }
1909
- .zx-message__toast[data-kind=warning] {
1910
- --zx-message-kind: var(--zx-color-warning);
1911
- background: var(--zx-color-warning-bg);
1950
+ border-block-end: 1px solid var(--zx-color-border);
1951
+ padding: var(--zx-space-3) var(--zx-space-4);
1912
1952
  }
1913
- .zx-message__toast[data-kind=error] {
1914
- --zx-message-kind: var(--zx-color-danger);
1915
- background: var(--zx-color-danger-bg);
1953
+ .zx-launcher__input {
1954
+ min-inline-size: 0;
1955
+ border: 0;
1956
+ outline: 0;
1957
+ background: transparent;
1958
+ color: inherit;
1959
+ font-size: var(--zx-text-lg);
1916
1960
  }
1917
- .zx-message__icon {
1918
- display: inline-grid;
1919
- place-items: center;
1920
- color: var(--zx-message-kind);
1961
+ .zx-launcher__input:focus-visible {
1962
+ box-shadow: inset var(--zx-focus-ring);
1921
1963
  }
1922
- .zx-message__content {
1923
- min-inline-size: 0;
1924
- overflow-wrap: anywhere;
1964
+ .zx-launcher__input::-webkit-search-cancel-button {
1965
+ display: none;
1925
1966
  }
1926
- .zx-message__close {
1927
- margin: calc(-1 * var(--zx-space-1)) calc(-1 * var(--zx-space-1)) 0 0;
1967
+ .zx-launcher__status {
1968
+ margin: 0;
1969
+ padding: var(--zx-space-5);
1970
+ color: var(--zx-color-text-muted);
1971
+ text-align: center;
1928
1972
  }
1929
- .zx-message__progress {
1930
- overflow: hidden;
1931
- block-size: 4px;
1932
- margin-block-start: var(--zx-space-2);
1933
- border-radius: var(--zx-radius-full);
1934
- background: var(--zx-color-border);
1973
+ .zx-launcher__status[hidden] {
1974
+ display: none;
1935
1975
  }
1936
- .zx-message__progress-fill {
1937
- display: block;
1938
- block-size: 100%;
1939
- border-radius: inherit;
1940
- background: var(--zx-message-kind);
1976
+ .zx-launcher__results {
1977
+ min-block-size: 0;
1978
+ overflow: auto;
1979
+ padding: var(--zx-space-2);
1941
1980
  }
1942
- @media (prefers-reduced-motion: no-preference) {
1943
- .zx-message__toast[data-state=open] {
1944
- animation: zx-message-enter var(--zx-dur-base) var(--zx-ease) both;
1945
- }
1946
- .zx-message__toast[data-state=closing] {
1947
- animation: zx-message-exit var(--zx-dur-base) var(--zx-ease) both;
1948
- }
1949
- .zx-message__progress-fill {
1950
- transition: inline-size var(--zx-dur-base) var(--zx-ease);
1951
- }
1981
+ .zx-launcher__group-label {
1982
+ padding: var(--zx-space-3) var(--zx-space-3) var(--zx-space-1);
1983
+ color: var(--zx-color-text-muted);
1984
+ font-size: var(--zx-text-xs);
1985
+ font-weight: 700;
1986
+ letter-spacing: .04em;
1987
+ text-transform: uppercase;
1952
1988
  }
1953
- @keyframes zx-message-enter {
1954
- from {
1955
- opacity: 0;
1956
- transform: translateY(calc(-1 * var(--zx-space-2)));
1957
- }
1958
- to {
1959
- opacity: 1;
1960
- transform: translateY(0);
1961
- }
1989
+ .zx-launcher__option {
1990
+ display: flex;
1991
+ align-items: center;
1992
+ gap: var(--zx-space-3);
1993
+ inline-size: 100%;
1994
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
1995
+ border: 0;
1996
+ border-radius: var(--zx-radius-md);
1997
+ background: transparent;
1998
+ padding: var(--zx-space-2) var(--zx-space-3);
1999
+ color: inherit;
2000
+ text-align: start;
2001
+ text-decoration: none;
1962
2002
  }
1963
- @keyframes zx-message-exit {
1964
- from {
1965
- opacity: 1;
1966
- transform: translateY(0);
1967
- }
1968
- to {
1969
- opacity: 0;
1970
- transform: translateY(calc(-1 * var(--zx-space-2)));
1971
- }
2003
+ .zx-launcher__option[aria-selected=true],
2004
+ .zx-launcher__option:hover {
2005
+ background: var(--zx-color-bg-hover);
1972
2006
  }
1973
-
1974
- /* src/components/modal/modal.css */
1975
- .zx-modal {
1976
- max-inline-size: calc(100vw - (2 * var(--zx-space-4)));
1977
- max-block-size: calc(100vh - (2 * var(--zx-space-4)));
1978
- overflow: auto;
1979
- border: 1px solid var(--zx-color-border);
1980
- border-radius: var(--zx-radius-lg);
1981
- background: var(--zx-color-bg-raised);
1982
- box-shadow: var(--zx-overlay-shadow);
1983
- color: var(--zx-color-text);
1984
- padding: 0;
2007
+ .zx-launcher__option[aria-disabled=true] {
2008
+ color: var(--zx-color-text-muted);
2009
+ cursor: not-allowed;
2010
+ opacity: .65;
1985
2011
  }
1986
- .zx-modal::backdrop {
1987
- background: var(--zx-color-bg-backdrop);
2012
+ .zx-launcher__icon {
2013
+ display: inline-flex;
2014
+ flex: none;
1988
2015
  }
1989
- .zx-modal__content {
1990
- padding: var(--zx-space-5);
2016
+ .zx-launcher__copy {
2017
+ display: grid;
2018
+ min-inline-size: 0;
2019
+ gap: 2px;
1991
2020
  }
1992
- body:has(> .zx-modal[open]) {
2021
+ .zx-launcher__label {
1993
2022
  overflow: hidden;
1994
- overscroll-behavior: none;
1995
- }
1996
- @media (prefers-reduced-motion: no-preference) {
1997
- .zx-modal[data-state=open] {
1998
- animation: zx-modal-enter var(--zx-dur-base) var(--zx-ease);
1999
- }
2000
- .zx-modal[data-state=open]::backdrop {
2001
- animation: zx-modal-backdrop-enter var(--zx-dur-base) var(--zx-ease);
2002
- }
2023
+ font-weight: 600;
2024
+ text-overflow: ellipsis;
2025
+ white-space: nowrap;
2003
2026
  }
2004
- @keyframes zx-modal-enter {
2005
- from {
2006
- opacity: 0;
2007
- transform: translateY(var(--zx-space-2)) scale(.98);
2008
- }
2027
+ .zx-launcher__description {
2028
+ overflow: hidden;
2029
+ color: var(--zx-color-text-muted);
2030
+ font-size: var(--zx-text-sm);
2031
+ text-overflow: ellipsis;
2032
+ white-space: nowrap;
2009
2033
  }
2010
- @keyframes zx-modal-backdrop-enter {
2011
- from {
2012
- opacity: 0;
2013
- }
2034
+ .zx-launcher__badge {
2035
+ margin-inline-start: auto;
2036
+ color: var(--zx-color-text-muted);
2037
+ font-size: var(--zx-text-xs);
2014
2038
  }
2015
2039
 
2016
- /* src/components/dialog/dialog.css */
2017
- .zx-dialog {
2018
- grid-template-rows: auto minmax(0, 1fr) auto;
2019
- padding: 0;
2020
- }
2021
- .zx-dialog[open] {
2022
- display: grid;
2040
+ /* src/components/avatar/avatar.css */
2041
+ .zx-avatar {
2042
+ --zx-avatar-size: var(--zx-control-height);
2043
+ position: relative;
2044
+ display: inline-grid;
2045
+ flex: none;
2046
+ place-items: center;
2047
+ inline-size: var(--zx-avatar-size);
2048
+ block-size: var(--zx-avatar-size);
2049
+ overflow: visible;
2050
+ color: var(--zx-color-text);
2051
+ vertical-align: middle;
2023
2052
  }
2024
- .zx-dialog__header,
2025
- .zx-dialog__footer {
2026
- display: flex;
2027
- align-items: center;
2028
- gap: var(--zx-space-3);
2029
- padding: var(--zx-space-4) var(--zx-space-5);
2053
+ .zx-avatar[data-size=sm] {
2054
+ --zx-avatar-size: calc(var(--zx-control-height) * .75);
2030
2055
  }
2031
- .zx-dialog__header {
2032
- justify-content: space-between;
2033
- border-block-end: 1px solid var(--zx-color-border);
2056
+ .zx-avatar[data-size=lg] {
2057
+ --zx-avatar-size: calc(var(--zx-control-height) * 1.25);
2034
2058
  }
2035
- .zx-dialog__title {
2036
- margin: 0;
2037
- font-size: var(--zx-text-xl);
2038
- line-height: 1.3;
2059
+ .zx-avatar[data-shape=circle] {
2060
+ border-radius: 50%;
2039
2061
  }
2040
- .zx-dialog__close {
2041
- flex: none;
2042
- inline-size: var(--zx-control-height);
2043
- padding-inline: 0;
2044
- font-size: var(--zx-text-xl);
2062
+ .zx-avatar[data-shape=rounded] {
2063
+ border-radius: var(--zx-radius-md);
2045
2064
  }
2046
- .zx-dialog__body {
2047
- min-block-size: 0;
2048
- overflow: auto;
2065
+ .zx-avatar[data-shape=square] {
2066
+ border-radius: 0;
2049
2067
  }
2050
- .zx-dialog__footer {
2051
- justify-content: flex-end;
2052
- border-block-start: 1px solid var(--zx-color-border);
2068
+ .zx-avatar__image,
2069
+ .zx-avatar__fallback {
2070
+ inline-size: 100%;
2071
+ block-size: 100%;
2072
+ border-radius: inherit;
2053
2073
  }
2054
- .zx-dialog__footer[hidden] {
2055
- display: none;
2074
+ .zx-avatar__image {
2075
+ display: block;
2076
+ object-fit: cover;
2056
2077
  }
2057
- .zx-dialog__view[aria-hidden=true] {
2078
+ .zx-avatar__image[hidden],
2079
+ .zx-avatar__fallback[hidden],
2080
+ .zx-avatar__status[hidden] {
2058
2081
  display: none;
2059
2082
  }
2060
- .zx-dialog__prompt {
2083
+ .zx-avatar__fallback {
2061
2084
  display: grid;
2062
- gap: var(--zx-space-3);
2085
+ place-items: center;
2086
+ border: 1px solid var(--zx-color-border);
2087
+ background: var(--zx-color-bg-subtle);
2088
+ font-size: calc(var(--zx-avatar-size) * .34);
2089
+ font-weight: 700;
2090
+ line-height: 1;
2063
2091
  }
2064
- .zx-dialog__prompt-input {
2065
- inline-size: 100%;
2092
+ .zx-avatar__status {
2093
+ position: absolute;
2094
+ inset-inline-end: -1px;
2095
+ inset-block-end: -1px;
2096
+ inline-size: max(8px, calc(var(--zx-avatar-size) * .28));
2097
+ block-size: max(8px, calc(var(--zx-avatar-size) * .28));
2098
+ border: 2px solid var(--zx-color-bg-raised);
2099
+ border-radius: 50%;
2100
+ background: var(--zx-color-text-muted);
2066
2101
  }
2067
- @media (prefers-reduced-motion: no-preference) {
2068
- .zx-dialog__view[aria-hidden=false] {
2069
- animation: zx-dialog-view-enter var(--zx-dur-fast) var(--zx-ease);
2070
- }
2102
+ .zx-avatar__status[data-status=online] {
2103
+ background: var(--zx-color-success);
2071
2104
  }
2072
- @keyframes zx-dialog-view-enter {
2073
- from {
2074
- opacity: 0;
2105
+ .zx-avatar__status[data-status=away] {
2106
+ background: var(--zx-color-warning);
2107
+ }
2108
+ .zx-avatar__status[data-status=busy] {
2109
+ background: var(--zx-color-danger);
2110
+ }
2111
+
2112
+ /* src/components/account-menu/account-menu.css */
2113
+ .zx-account-menu {
2114
+ display: block;
2115
+ min-inline-size: 0;
2116
+ }
2117
+ .zx-account-menu__trigger {
2118
+ display: grid;
2119
+ grid-template-columns: auto minmax(0, 1fr) auto;
2120
+ align-items: center;
2121
+ gap: var(--zx-space-3);
2122
+ inline-size: 100%;
2123
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
2124
+ border-color: transparent;
2125
+ background: transparent;
2126
+ padding: var(--zx-space-2);
2127
+ color: inherit;
2128
+ text-align: start;
2129
+ }
2130
+ .zx-account-menu__trigger:hover,
2131
+ .zx-account-menu__trigger:focus-visible,
2132
+ .zx-account-menu__trigger[aria-expanded=true] {
2133
+ background: var(--zx-color-bg-hover);
2134
+ }
2135
+ .zx-account-menu__identity {
2136
+ display: grid;
2137
+ min-inline-size: 0;
2138
+ gap: 1px;
2139
+ }
2140
+ .zx-account-menu__name,
2141
+ .zx-account-menu__secondary {
2142
+ overflow: hidden;
2143
+ text-overflow: ellipsis;
2144
+ white-space: nowrap;
2145
+ }
2146
+ .zx-account-menu__name {
2147
+ font-weight: 650;
2148
+ }
2149
+ .zx-account-menu__secondary {
2150
+ color: var(--zx-color-text-muted);
2151
+ font-size: var(--zx-text-xs);
2152
+ }
2153
+ .zx-account-menu__chevron {
2154
+ display: inline-flex;
2155
+ }
2156
+ .zx-account-menu[data-compact=true] {
2157
+ inline-size: fit-content;
2158
+ }
2159
+ .zx-account-menu[data-compact=true] .zx-account-menu__trigger {
2160
+ display: inline-grid;
2161
+ grid-template-columns: auto;
2162
+ inline-size: auto;
2163
+ }
2164
+ .zx-account-menu[data-compact=true] .zx-account-menu__identity,
2165
+ .zx-account-menu[data-compact=true] .zx-account-menu__chevron {
2166
+ display: none;
2167
+ }
2168
+ .zx-account-menu__panel-identity {
2169
+ display: grid;
2170
+ min-inline-size: 220px;
2171
+ gap: 2px;
2172
+ margin: calc(-1 * var(--zx-space-1)) calc(-1 * var(--zx-space-1)) var(--zx-space-1);
2173
+ border-block-end: 1px solid var(--zx-color-border);
2174
+ padding: var(--zx-space-3);
2175
+ }
2176
+ .zx-account-menu__panel-identity span {
2177
+ color: var(--zx-color-text-muted);
2178
+ font-size: var(--zx-text-xs);
2179
+ }
2180
+
2181
+ /* src/components/app-rail/app-rail.css */
2182
+ .zx-app-rail {
2183
+ display: flex;
2184
+ min-inline-size: 0;
2185
+ border: 1px solid var(--zx-color-border);
2186
+ background: var(--zx-color-bg-raised);
2187
+ color: var(--zx-color-text);
2188
+ }
2189
+ .zx-app-rail[data-orientation=vertical] {
2190
+ flex-direction: column;
2191
+ inline-size: calc(var(--zx-control-height) + var(--zx-space-3));
2192
+ }
2193
+ .zx-app-rail[data-orientation=horizontal] {
2194
+ flex-direction: row;
2195
+ block-size: calc(var(--zx-control-height) + var(--zx-space-3));
2196
+ }
2197
+ .zx-app-rail__header,
2198
+ .zx-app-rail__footer {
2199
+ display: flex;
2200
+ align-items: center;
2201
+ justify-content: center;
2202
+ padding: var(--zx-space-1);
2203
+ }
2204
+ .zx-app-rail__header[hidden],
2205
+ .zx-app-rail__footer[hidden] {
2206
+ display: none;
2207
+ }
2208
+ .zx-app-rail[data-orientation=vertical] .zx-app-rail__footer {
2209
+ margin-block-start: auto;
2210
+ }
2211
+ .zx-app-rail[data-orientation=horizontal] .zx-app-rail__footer {
2212
+ margin-inline-start: auto;
2213
+ }
2214
+ .zx-app-rail__list {
2215
+ display: flex;
2216
+ flex: 1;
2217
+ gap: var(--zx-space-1);
2218
+ margin: 0;
2219
+ padding: var(--zx-space-1);
2220
+ list-style: none;
2221
+ }
2222
+ .zx-app-rail[data-orientation=vertical] .zx-app-rail__list {
2223
+ flex-direction: column;
2224
+ }
2225
+ .zx-app-rail[data-orientation=horizontal] .zx-app-rail__list {
2226
+ flex-direction: row;
2227
+ }
2228
+ .zx-app-rail__row {
2229
+ display: flex;
2230
+ }
2231
+ .zx-app-rail__item {
2232
+ position: relative;
2233
+ display: inline-grid;
2234
+ place-items: center;
2235
+ inline-size: var(--zx-control-height);
2236
+ block-size: var(--zx-control-height);
2237
+ border-color: transparent;
2238
+ border-radius: var(--zx-radius-md);
2239
+ background: transparent;
2240
+ color: inherit;
2241
+ padding: 0;
2242
+ text-decoration: none;
2243
+ }
2244
+ .zx-app-rail__item:hover,
2245
+ .zx-app-rail__item:focus-visible,
2246
+ .zx-app-rail__item[aria-expanded=true],
2247
+ .zx-app-rail__item[data-active-descendant=true],
2248
+ .zx-app-rail__item[aria-current=page] {
2249
+ background: var(--zx-color-bg-hover);
2250
+ color: var(--zx-color-accent);
2251
+ }
2252
+ .zx-app-rail__item[aria-disabled=true],
2253
+ .zx-app-rail__flyout-item[aria-disabled=true] {
2254
+ color: var(--zx-color-text-muted);
2255
+ cursor: not-allowed;
2256
+ opacity: .65;
2257
+ }
2258
+ .zx-app-rail__item-label {
2259
+ position: absolute;
2260
+ inline-size: 1px;
2261
+ block-size: 1px;
2262
+ overflow: hidden;
2263
+ clip-path: inset(50%);
2264
+ }
2265
+ .zx-app-rail__item-icon {
2266
+ display: inline-flex;
2267
+ }
2268
+ .zx-app-rail__item-badge {
2269
+ position: absolute;
2270
+ inset-inline-end: 1px;
2271
+ inset-block-start: 1px;
2272
+ min-inline-size: 15px;
2273
+ border-radius: var(--zx-radius-full);
2274
+ background: var(--zx-color-accent);
2275
+ padding-inline: 3px;
2276
+ color: var(--zx-color-on-accent);
2277
+ font-size: 10px;
2278
+ line-height: 15px;
2279
+ text-align: center;
2280
+ }
2281
+ .zx-app-rail__item-disclosure {
2282
+ position: absolute;
2283
+ inset-inline-end: 1px;
2284
+ inset-block-end: 1px;
2285
+ display: inline-flex;
2286
+ }
2287
+ .zx-app-rail__popover {
2288
+ min-inline-size: 220px;
2289
+ padding: var(--zx-space-2);
2290
+ }
2291
+ .zx-app-rail__flyout-title {
2292
+ padding: var(--zx-space-2) var(--zx-space-3);
2293
+ color: var(--zx-color-text-muted);
2294
+ font-size: var(--zx-text-xs);
2295
+ font-weight: 700;
2296
+ }
2297
+ .zx-app-rail__flyout-list {
2298
+ display: grid;
2299
+ gap: var(--zx-space-1);
2300
+ margin: 0;
2301
+ padding: 0;
2302
+ list-style: none;
2303
+ }
2304
+ .zx-app-rail__flyout-item {
2305
+ display: grid;
2306
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
2307
+ align-items: center;
2308
+ gap: var(--zx-space-2);
2309
+ inline-size: 100%;
2310
+ min-block-size: var(--zx-control-height);
2311
+ border-color: transparent;
2312
+ border-radius: var(--zx-radius-md);
2313
+ background: transparent;
2314
+ padding-inline: var(--zx-control-pad-x);
2315
+ color: inherit;
2316
+ text-align: start;
2317
+ text-decoration: none;
2318
+ }
2319
+ .zx-app-rail__flyout-item:hover,
2320
+ .zx-app-rail__flyout-item:focus-visible,
2321
+ .zx-app-rail__flyout-item[aria-current=page] {
2322
+ background: var(--zx-color-bg-hover);
2323
+ color: var(--zx-color-accent);
2324
+ }
2325
+ .zx-app-rail__flyout-item-icon {
2326
+ display: inline-flex;
2327
+ grid-column: 1;
2328
+ }
2329
+ .zx-app-rail__flyout-item-label {
2330
+ grid-column: 2;
2331
+ }
2332
+ .zx-app-rail__flyout-item-badge {
2333
+ grid-column: 3;
2334
+ color: var(--zx-color-text-muted);
2335
+ font-size: var(--zx-text-xs);
2336
+ }
2337
+ .zx-app-rail__flyout-item-disclosure {
2338
+ display: inline-flex;
2339
+ grid-column: 4;
2340
+ color: var(--zx-color-text-muted);
2341
+ }
2342
+
2343
+ /* src/components/app-sidebar/app-sidebar.css */
2344
+ .zx-app-sidebar {
2345
+ display: flex;
2346
+ min-block-size: 0;
2347
+ border: 1px solid var(--zx-color-border);
2348
+ background: var(--zx-color-bg-raised);
2349
+ color: var(--zx-color-text);
2350
+ }
2351
+ .zx-app-sidebar__expanded {
2352
+ display: grid;
2353
+ grid-template-rows: auto minmax(0, 1fr) auto;
2354
+ inline-size: min(280px, 100vw);
2355
+ min-block-size: 0;
2356
+ }
2357
+ .zx-app-sidebar__expanded[hidden],
2358
+ .zx-app-sidebar__rail[hidden] {
2359
+ display: none;
2360
+ }
2361
+ .zx-app-sidebar__header {
2362
+ display: grid;
2363
+ grid-template-columns: minmax(0, 1fr) auto;
2364
+ align-items: center;
2365
+ gap: var(--zx-space-2);
2366
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-3));
2367
+ border-block-end: 1px solid var(--zx-color-border);
2368
+ padding: var(--zx-space-2);
2369
+ }
2370
+ .zx-app-sidebar__header-content {
2371
+ min-inline-size: 0;
2372
+ }
2373
+ .zx-app-sidebar__nav {
2374
+ min-block-size: 0;
2375
+ overflow: auto;
2376
+ padding: var(--zx-space-2);
2377
+ }
2378
+ .zx-app-sidebar__list,
2379
+ .zx-app-sidebar__sublist {
2380
+ display: grid;
2381
+ gap: var(--zx-space-1);
2382
+ margin: 0;
2383
+ padding: 0;
2384
+ list-style: none;
2385
+ }
2386
+ .zx-app-sidebar__sublist {
2387
+ margin-block-start: var(--zx-space-1);
2388
+ }
2389
+ .zx-app-sidebar__sublist[hidden] {
2390
+ display: none;
2391
+ }
2392
+ .zx-app-sidebar__item {
2393
+ display: grid;
2394
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
2395
+ align-items: center;
2396
+ gap: var(--zx-space-2);
2397
+ inline-size: 100%;
2398
+ min-block-size: var(--zx-control-height);
2399
+ border-color: transparent;
2400
+ border-radius: var(--zx-radius-md);
2401
+ background: transparent;
2402
+ padding-inline: var(--zx-space-3);
2403
+ color: inherit;
2404
+ text-align: start;
2405
+ text-decoration: none;
2406
+ }
2407
+ .zx-app-sidebar__row[data-level="2"] > .zx-app-sidebar__item {
2408
+ padding-inline-start: calc(var(--zx-space-3) + var(--zx-space-5));
2409
+ }
2410
+ .zx-app-sidebar__row[data-level="3"] > .zx-app-sidebar__item {
2411
+ padding-inline-start: calc(var(--zx-space-3) + var(--zx-space-7));
2412
+ }
2413
+ .zx-app-sidebar__item:hover,
2414
+ .zx-app-sidebar__item:focus-visible,
2415
+ .zx-app-sidebar__item[data-active-descendant=true],
2416
+ .zx-app-sidebar__item[aria-current=page] {
2417
+ background: var(--zx-color-bg-hover);
2418
+ color: var(--zx-color-accent);
2419
+ }
2420
+ .zx-app-sidebar__item[aria-disabled=true] {
2421
+ color: var(--zx-color-text-muted);
2422
+ cursor: not-allowed;
2423
+ opacity: .65;
2424
+ }
2425
+ .zx-app-sidebar__item-icon,
2426
+ .zx-app-sidebar__item-disclosure {
2427
+ display: inline-flex;
2428
+ }
2429
+ .zx-app-sidebar__item-badge {
2430
+ color: var(--zx-color-text-muted);
2431
+ font-size: var(--zx-text-xs);
2432
+ }
2433
+ .zx-app-sidebar__footer {
2434
+ border-block-start: 1px solid var(--zx-color-border);
2435
+ padding: var(--zx-space-2);
2436
+ }
2437
+ .zx-app-sidebar__footer[hidden] {
2438
+ display: none;
2439
+ }
2440
+ .zx-app-sidebar__rail-header {
2441
+ display: grid;
2442
+ gap: var(--zx-space-1);
2443
+ }
2444
+
2445
+ /* src/components/message/message.css */
2446
+ .zx-message {
2447
+ display: grid;
2448
+ gap: var(--zx-space-2);
2449
+ }
2450
+ .zx-message-region {
2451
+ position: fixed;
2452
+ inset-block: var(--zx-space-4) auto;
2453
+ inset-inline: var(--zx-space-4);
2454
+ inline-size: min(420px, calc(100% - (2 * var(--zx-space-4))));
2455
+ max-block-size: calc(100% - (2 * var(--zx-space-4)));
2456
+ margin: 0 auto;
2457
+ overflow: visible;
2458
+ border: 0;
2459
+ background: none;
2460
+ padding: 0;
2461
+ }
2462
+ .zx-message-region:popover-open {
2463
+ display: grid;
2464
+ }
2465
+ .zx-message__toast {
2466
+ --zx-message-kind: var(--zx-color-info);
2467
+ position: relative;
2468
+ display: grid;
2469
+ grid-template-columns: auto minmax(0, 1fr) auto;
2470
+ align-items: start;
2471
+ gap: var(--zx-space-3);
2472
+ border: 1px solid var(--zx-color-border);
2473
+ border-inline-start: 4px solid var(--zx-message-kind);
2474
+ border-radius: var(--zx-radius-md);
2475
+ background: var(--zx-color-info-bg);
2476
+ box-shadow: var(--zx-overlay-shadow);
2477
+ padding: var(--zx-space-3);
2478
+ color: var(--zx-color-text);
2479
+ }
2480
+ .zx-message__toast[data-kind=success] {
2481
+ --zx-message-kind: var(--zx-color-success);
2482
+ background: var(--zx-color-success-bg);
2483
+ }
2484
+ .zx-message__toast[data-kind=warning] {
2485
+ --zx-message-kind: var(--zx-color-warning);
2486
+ background: var(--zx-color-warning-bg);
2487
+ }
2488
+ .zx-message__toast[data-kind=error] {
2489
+ --zx-message-kind: var(--zx-color-danger);
2490
+ background: var(--zx-color-danger-bg);
2491
+ }
2492
+ .zx-message__icon {
2493
+ display: inline-grid;
2494
+ place-items: center;
2495
+ color: var(--zx-message-kind);
2496
+ }
2497
+ .zx-message__content {
2498
+ min-inline-size: 0;
2499
+ overflow-wrap: anywhere;
2500
+ }
2501
+ .zx-message__close {
2502
+ margin: calc(-1 * var(--zx-space-1)) calc(-1 * var(--zx-space-1)) 0 0;
2503
+ }
2504
+ .zx-message__progress {
2505
+ overflow: hidden;
2506
+ block-size: 4px;
2507
+ margin-block-start: var(--zx-space-2);
2508
+ border-radius: var(--zx-radius-full);
2509
+ background: var(--zx-color-border);
2510
+ }
2511
+ .zx-message__progress-fill {
2512
+ display: block;
2513
+ block-size: 100%;
2514
+ border-radius: inherit;
2515
+ background: var(--zx-message-kind);
2516
+ }
2517
+ @media (prefers-reduced-motion: no-preference) {
2518
+ .zx-message__toast[data-state=open] {
2519
+ animation: zx-message-enter var(--zx-dur-base) var(--zx-ease) both;
2520
+ }
2521
+ .zx-message__toast[data-state=closing] {
2522
+ animation: zx-message-exit var(--zx-dur-base) var(--zx-ease) both;
2523
+ }
2524
+ .zx-message__progress-fill {
2525
+ transition: inline-size var(--zx-dur-base) var(--zx-ease);
2526
+ }
2527
+ }
2528
+ @keyframes zx-message-enter {
2529
+ from {
2530
+ opacity: 0;
2531
+ transform: translateY(calc(-1 * var(--zx-space-2)));
2532
+ }
2533
+ to {
2534
+ opacity: 1;
2535
+ transform: translateY(0);
2536
+ }
2537
+ }
2538
+ @keyframes zx-message-exit {
2539
+ from {
2540
+ opacity: 1;
2541
+ transform: translateY(0);
2542
+ }
2543
+ to {
2544
+ opacity: 0;
2545
+ transform: translateY(calc(-1 * var(--zx-space-2)));
2546
+ }
2547
+ }
2548
+
2549
+ /* src/components/modal/modal.css */
2550
+ .zx-modal {
2551
+ max-inline-size: calc(100vw - (2 * var(--zx-space-4)));
2552
+ max-block-size: calc(100vh - (2 * var(--zx-space-4)));
2553
+ overflow: auto;
2554
+ border: 1px solid var(--zx-color-border);
2555
+ border-radius: var(--zx-radius-lg);
2556
+ background: var(--zx-color-bg-raised);
2557
+ box-shadow: var(--zx-overlay-shadow);
2558
+ color: var(--zx-color-text);
2559
+ padding: 0;
2560
+ }
2561
+ .zx-modal::backdrop {
2562
+ background: var(--zx-color-bg-backdrop);
2563
+ }
2564
+ .zx-modal__content {
2565
+ padding: var(--zx-space-5);
2566
+ }
2567
+ body:has(> .zx-modal:modal) {
2568
+ overflow: hidden;
2569
+ overscroll-behavior: none;
2570
+ }
2571
+ @media (prefers-reduced-motion: no-preference) {
2572
+ .zx-modal[data-state=open] {
2573
+ animation: zx-modal-enter var(--zx-dur-base) var(--zx-ease);
2574
+ }
2575
+ .zx-modal[data-state=open]::backdrop {
2576
+ animation: zx-modal-backdrop-enter var(--zx-dur-base) var(--zx-ease);
2577
+ }
2578
+ }
2579
+ @keyframes zx-modal-enter {
2580
+ from {
2581
+ opacity: 0;
2582
+ transform: translateY(var(--zx-space-2)) scale(.98);
2583
+ }
2584
+ }
2585
+ @keyframes zx-modal-backdrop-enter {
2586
+ from {
2587
+ opacity: 0;
2588
+ }
2589
+ }
2590
+
2591
+ /* src/components/dialog/dialog.css */
2592
+ .zx-dialog {
2593
+ grid-template-rows: auto minmax(0, 1fr) auto;
2594
+ padding: 0;
2595
+ }
2596
+ .zx-dialog[open] {
2597
+ display: grid;
2598
+ }
2599
+ .zx-dialog__header,
2600
+ .zx-dialog__footer {
2601
+ display: flex;
2602
+ align-items: center;
2603
+ gap: var(--zx-space-3);
2604
+ padding: var(--zx-space-4) var(--zx-space-5);
2605
+ }
2606
+ .zx-dialog__header {
2607
+ justify-content: space-between;
2608
+ border-block-end: 1px solid var(--zx-color-border);
2609
+ }
2610
+ .zx-dialog__title {
2611
+ margin: 0;
2612
+ font-size: var(--zx-text-xl);
2613
+ line-height: 1.3;
2614
+ }
2615
+ .zx-dialog__close {
2616
+ flex: none;
2617
+ inline-size: var(--zx-control-height);
2618
+ padding-inline: 0;
2619
+ font-size: var(--zx-text-xl);
2620
+ }
2621
+ .zx-dialog__body {
2622
+ min-block-size: 0;
2623
+ overflow: auto;
2624
+ }
2625
+ .zx-dialog__footer {
2626
+ justify-content: flex-end;
2627
+ border-block-start: 1px solid var(--zx-color-border);
2628
+ }
2629
+ .zx-dialog__footer[hidden] {
2630
+ display: none;
2631
+ }
2632
+ .zx-dialog__view[aria-hidden=true] {
2633
+ display: none;
2634
+ }
2635
+ .zx-dialog__prompt {
2636
+ display: grid;
2637
+ gap: var(--zx-space-3);
2638
+ }
2639
+ .zx-dialog__prompt-input {
2640
+ inline-size: 100%;
2641
+ }
2642
+ @media (prefers-reduced-motion: no-preference) {
2643
+ .zx-dialog__view[aria-hidden=false] {
2644
+ animation: zx-dialog-view-enter var(--zx-dur-fast) var(--zx-ease);
2645
+ }
2646
+ }
2647
+ @keyframes zx-dialog-view-enter {
2648
+ from {
2649
+ opacity: 0;
2075
2650
  transform: translateX(var(--zx-space-2));
2076
2651
  }
2077
2652
  }
2078
2653
 
2654
+ /* src/components/sheet/sheet.css */
2655
+ .zx-sheet {
2656
+ position: fixed;
2657
+ margin: 0;
2658
+ padding: 0;
2659
+ max-inline-size: 100vw;
2660
+ max-block-size: 100dvh;
2661
+ border: 0;
2662
+ border-radius: 0;
2663
+ overflow: hidden;
2664
+ box-shadow: var(--zx-overlay-shadow);
2665
+ }
2666
+ .zx-sheet[data-side=start],
2667
+ .zx-sheet[data-side=end] {
2668
+ inset-block: 0;
2669
+ block-size: 100dvh;
2670
+ inline-size: var(--zx-sheet-size, min(24rem, 100vw));
2671
+ }
2672
+ .zx-sheet[data-side=start] {
2673
+ inset-inline-start: 0;
2674
+ inset-inline-end: auto;
2675
+ border-inline-end: 1px solid var(--zx-color-border);
2676
+ --zx-sheet-enter: -100% 0;
2677
+ }
2678
+ .zx-sheet[data-side=end] {
2679
+ inset-inline-start: auto;
2680
+ inset-inline-end: 0;
2681
+ border-inline-start: 1px solid var(--zx-color-border);
2682
+ --zx-sheet-enter: 100% 0;
2683
+ }
2684
+ [dir=rtl] .zx-sheet[data-side=start] {
2685
+ --zx-sheet-enter: 100% 0;
2686
+ }
2687
+ [dir=rtl] .zx-sheet[data-side=end] {
2688
+ --zx-sheet-enter: -100% 0;
2689
+ }
2690
+ .zx-sheet[data-side=top],
2691
+ .zx-sheet[data-side=bottom] {
2692
+ inset-inline: 0;
2693
+ inline-size: 100vw;
2694
+ block-size: var(--zx-sheet-size, min(60dvh, 100dvh));
2695
+ }
2696
+ .zx-sheet[data-side=top] {
2697
+ inset-block-start: 0;
2698
+ inset-block-end: auto;
2699
+ border-block-end: 1px solid var(--zx-color-border);
2700
+ border-end-start-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2701
+ border-end-end-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2702
+ --zx-sheet-enter: 0 -100%;
2703
+ }
2704
+ .zx-sheet[data-side=bottom] {
2705
+ inset-block-start: auto;
2706
+ inset-block-end: 0;
2707
+ border-block-start: 1px solid var(--zx-color-border);
2708
+ border-start-start-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2709
+ border-start-end-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2710
+ --zx-sheet-enter: 0 100%;
2711
+ }
2712
+ .zx-sheet[data-backdrop=none]::backdrop {
2713
+ background: transparent;
2714
+ }
2715
+ .zx-sheet[data-backdrop=blur]::backdrop {
2716
+ backdrop-filter: blur(var(--zx-overlay-blur));
2717
+ }
2718
+ @media (prefers-reduced-motion: no-preference) {
2719
+ .zx-sheet {
2720
+ transition:
2721
+ translate var(--zx-dur-base) var(--zx-ease),
2722
+ opacity var(--zx-dur-base) var(--zx-ease),
2723
+ display var(--zx-dur-base) allow-discrete,
2724
+ overlay var(--zx-dur-base) allow-discrete;
2725
+ }
2726
+ .zx-sheet[data-state=open] {
2727
+ animation: none;
2728
+ }
2729
+ .zx-sheet:not([open]) {
2730
+ translate: var(--zx-sheet-enter, 0 0);
2731
+ opacity: 0;
2732
+ }
2733
+ @starting-style {
2734
+ .zx-sheet[open] {
2735
+ translate: var(--zx-sheet-enter, 0 0);
2736
+ opacity: 0;
2737
+ }
2738
+ }
2739
+ .zx-sheet::backdrop {
2740
+ transition:
2741
+ opacity var(--zx-dur-base) var(--zx-ease),
2742
+ display var(--zx-dur-base) allow-discrete,
2743
+ overlay var(--zx-dur-base) allow-discrete;
2744
+ }
2745
+ .zx-sheet[data-state=open]::backdrop {
2746
+ animation: none;
2747
+ }
2748
+ .zx-sheet:not([open])::backdrop {
2749
+ opacity: 0;
2750
+ }
2751
+ @starting-style {
2752
+ .zx-sheet[open]::backdrop {
2753
+ opacity: 0;
2754
+ }
2755
+ }
2756
+ }
2757
+ .zx-sheet[data-docked] {
2758
+ position: relative;
2759
+ inset: auto;
2760
+ flex: 0 0 var(--zx-pane-size, var(--zx-sheet-size, min(24rem, 100%)));
2761
+ inline-size: auto;
2762
+ block-size: auto;
2763
+ max-inline-size: none;
2764
+ max-block-size: none;
2765
+ min-inline-size: 0;
2766
+ min-block-size: 0;
2767
+ border-radius: 0;
2768
+ box-shadow: none;
2769
+ }
2770
+ .zx-dock[data-orientation=vertical] > .zx-sheet[data-docked] {
2771
+ border-inline: 0;
2772
+ border-block: 1px solid var(--zx-color-border);
2773
+ }
2774
+ .zx-dock[data-orientation=horizontal] > .zx-sheet[data-docked] {
2775
+ border-block: 0;
2776
+ border-inline: 1px solid var(--zx-color-border);
2777
+ }
2778
+ @media (prefers-reduced-motion: no-preference) {
2779
+ .zx-sheet[data-docked] {
2780
+ transition:
2781
+ flex-basis var(--zx-dur-base) var(--zx-ease),
2782
+ opacity var(--zx-dur-base) var(--zx-ease),
2783
+ display var(--zx-dur-base) allow-discrete,
2784
+ overlay var(--zx-dur-base) allow-discrete;
2785
+ translate: none;
2786
+ }
2787
+ .zx-sheet[data-docked]:not([open]) {
2788
+ flex-basis: 0;
2789
+ translate: none;
2790
+ opacity: 0;
2791
+ }
2792
+ @starting-style {
2793
+ .zx-sheet[data-docked][open] {
2794
+ flex-basis: 0;
2795
+ translate: none;
2796
+ opacity: 0;
2797
+ }
2798
+ }
2799
+ }
2800
+ .zx-sheet__handle {
2801
+ position: absolute;
2802
+ z-index: 1;
2803
+ display: flex;
2804
+ align-items: center;
2805
+ justify-content: center;
2806
+ touch-action: none;
2807
+ user-select: none;
2808
+ }
2809
+ .zx-sheet__handle::after {
2810
+ content: "";
2811
+ border-radius: var(--zx-radius-full);
2812
+ background: var(--zx-color-border-strong);
2813
+ opacity: 0;
2814
+ transition: opacity var(--zx-dur-fast) var(--zx-ease);
2815
+ }
2816
+ .zx-sheet__handle:hover::after,
2817
+ .zx-sheet__handle:focus-visible::after,
2818
+ .zx-sheet[data-dragging] .zx-sheet__handle::after {
2819
+ opacity: 1;
2820
+ }
2821
+ .zx-sheet__handle:focus-visible {
2822
+ outline: none;
2823
+ box-shadow: var(--zx-focus-ring);
2824
+ }
2825
+ .zx-sheet[data-side=start] > .zx-sheet__handle,
2826
+ .zx-sheet[data-side=end] > .zx-sheet__handle {
2827
+ inset-block: 0;
2828
+ inline-size: var(--zx-space-3);
2829
+ cursor: col-resize;
2830
+ }
2831
+ .zx-sheet[data-side=start] > .zx-sheet__handle {
2832
+ inset-inline-end: 0;
2833
+ }
2834
+ .zx-sheet[data-side=end] > .zx-sheet__handle {
2835
+ inset-inline-start: 0;
2836
+ }
2837
+ .zx-sheet[data-side=start] > .zx-sheet__handle::after,
2838
+ .zx-sheet[data-side=end] > .zx-sheet__handle::after {
2839
+ inline-size: 3px;
2840
+ block-size: var(--zx-space-8);
2841
+ }
2842
+ .zx-sheet[data-side=top] > .zx-sheet__handle,
2843
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle {
2844
+ inset-inline: 0;
2845
+ block-size: var(--zx-space-4);
2846
+ cursor: row-resize;
2847
+ }
2848
+ .zx-sheet[data-side=top] > .zx-sheet__handle {
2849
+ inset-block-end: 0;
2850
+ }
2851
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle {
2852
+ inset-block-start: 0;
2853
+ }
2854
+ .zx-sheet[data-side=top] > .zx-sheet__handle::after,
2855
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle::after {
2856
+ inline-size: var(--zx-space-8);
2857
+ block-size: 4px;
2858
+ }
2859
+ .zx-sheet[data-side=top] > .zx-sheet__handle::after,
2860
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle::after {
2861
+ opacity: 1;
2862
+ }
2863
+ .zx-sheet[data-docked] > .zx-sheet__handle {
2864
+ display: none;
2865
+ }
2866
+ .zx-sheet[data-dragging] {
2867
+ transition: none;
2868
+ }
2869
+ .zx-sheet[data-side=start] {
2870
+ --zx-sheet-dx: -1;
2871
+ --zx-sheet-dy: 0;
2872
+ }
2873
+ .zx-sheet[data-side=end] {
2874
+ --zx-sheet-dx: 1;
2875
+ --zx-sheet-dy: 0;
2876
+ }
2877
+ .zx-sheet[data-side=top] {
2878
+ --zx-sheet-dx: 0;
2879
+ --zx-sheet-dy: -1;
2880
+ }
2881
+ .zx-sheet[data-side=bottom] {
2882
+ --zx-sheet-dx: 0;
2883
+ --zx-sheet-dy: 1;
2884
+ }
2885
+ .zx-sheet[data-side=start] {
2886
+ transform-origin: left center;
2887
+ }
2888
+ .zx-sheet[data-side=end] {
2889
+ transform-origin: right center;
2890
+ }
2891
+ .zx-sheet[data-side=top] {
2892
+ transform-origin: center top;
2893
+ }
2894
+ .zx-sheet[data-side=bottom] {
2895
+ transform-origin: center bottom;
2896
+ }
2897
+ .zx-sheet[data-stack=stack] {
2898
+ 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)));
2899
+ }
2900
+ .zx-sheet[data-stack=cascade] {
2901
+ 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));
2902
+ }
2903
+ .zx-sheet[data-stack-hidden] {
2904
+ opacity: 0;
2905
+ pointer-events: none;
2906
+ }
2907
+ .zx-sheet[data-depth]:not([data-depth="0"])::backdrop {
2908
+ background: transparent;
2909
+ backdrop-filter: none;
2910
+ }
2911
+ .zx-sheet[data-stack=cascade]::backdrop {
2912
+ background: transparent;
2913
+ backdrop-filter: none;
2914
+ }
2915
+ @media (prefers-reduced-motion: no-preference) {
2916
+ .zx-sheet[data-stack] {
2917
+ transition:
2918
+ transform var(--zx-dur-base) var(--zx-ease),
2919
+ translate var(--zx-dur-base) var(--zx-ease),
2920
+ opacity var(--zx-dur-base) var(--zx-ease),
2921
+ display var(--zx-dur-base) allow-discrete,
2922
+ overlay var(--zx-dur-base) allow-discrete;
2923
+ }
2924
+ }
2925
+
2079
2926
  /* src/components/dropdown/dropdown.css */
2080
2927
  .zx-dropdown {
2081
2928
  max-inline-size: calc(100vw - (2 * var(--zx-space-3)));
@@ -2228,6 +3075,208 @@ body:has(> .zx-modal[open]) {
2228
3075
  }
2229
3076
  }
2230
3077
 
3078
+ /* src/components/dock/dock.css */
3079
+ .zx-dock {
3080
+ --zx-dock-divider-size: var(--zx-space-2);
3081
+ --zx-dock-divider-line: 1px;
3082
+ display: flex;
3083
+ min-inline-size: 0;
3084
+ min-block-size: 0;
3085
+ background: var(--zx-color-bg-surface);
3086
+ color: var(--zx-color-text);
3087
+ }
3088
+ .zx-dock[data-orientation=vertical] {
3089
+ flex-direction: column;
3090
+ }
3091
+ .zx-dock[data-orientation=horizontal] {
3092
+ flex-direction: row;
3093
+ }
3094
+ .zx-dock[data-dragging=true] {
3095
+ user-select: none;
3096
+ cursor: inherit;
3097
+ }
3098
+ .zx-dock__pane {
3099
+ display: flex;
3100
+ flex-direction: column;
3101
+ flex: 0 0 var(--zx-pane-size, auto);
3102
+ min-inline-size: 0;
3103
+ min-block-size: 0;
3104
+ overflow: hidden;
3105
+ }
3106
+ .zx-dock__pane[data-grow=true],
3107
+ .zx-dock__content {
3108
+ flex: 1 1 0;
3109
+ min-inline-size: 0;
3110
+ min-block-size: 0;
3111
+ }
3112
+ .zx-dock__content {
3113
+ overflow: auto;
3114
+ }
3115
+ .zx-dock__pane[data-state=collapsed] {
3116
+ flex: 0 0 auto;
3117
+ }
3118
+ .zx-dock__pane[data-state=collapsed] > .zx-dock__body {
3119
+ display: none;
3120
+ }
3121
+ .zx-dock__header {
3122
+ flex: none;
3123
+ display: flex;
3124
+ align-items: center;
3125
+ gap: var(--zx-space-1);
3126
+ padding-inline: var(--zx-space-2);
3127
+ min-block-size: var(--zx-control-height);
3128
+ border-block-end: 1px solid var(--zx-color-border);
3129
+ background: var(--zx-color-bg-muted);
3130
+ }
3131
+ .zx-dock__pane[data-state=collapsed] > .zx-dock__header {
3132
+ border-block-end-color: transparent;
3133
+ }
3134
+ .zx-dock__toggle {
3135
+ flex: none;
3136
+ display: inline-flex;
3137
+ align-items: center;
3138
+ gap: var(--zx-space-2);
3139
+ min-block-size: 0;
3140
+ border: 0;
3141
+ border-radius: var(--zx-radius-sm);
3142
+ padding: var(--zx-space-1);
3143
+ background: none;
3144
+ color: inherit;
3145
+ font: inherit;
3146
+ font-size: var(--zx-text-sm);
3147
+ font-weight: var(--zx-control-font-weight);
3148
+ cursor: pointer;
3149
+ }
3150
+ .zx-dock__toggle:hover:not(:disabled) {
3151
+ background: var(--zx-color-bg-hover);
3152
+ }
3153
+ .zx-dock__toggle:disabled {
3154
+ cursor: default;
3155
+ }
3156
+ .zx-dock__toggle:disabled .zx-dock__chevron {
3157
+ visibility: hidden;
3158
+ }
3159
+ .zx-dock__toggle:focus-visible {
3160
+ outline: none;
3161
+ box-shadow: var(--zx-focus-ring);
3162
+ }
3163
+ .zx-dock__chevron {
3164
+ display: inline-flex;
3165
+ color: var(--zx-color-text-muted);
3166
+ transition: rotate var(--zx-dur-fast) var(--zx-ease);
3167
+ }
3168
+ .zx-dock__pane[data-state=open] > .zx-dock__header .zx-dock__chevron {
3169
+ rotate: 90deg;
3170
+ }
3171
+ @media (prefers-reduced-motion: reduce) {
3172
+ .zx-dock__chevron {
3173
+ transition: none;
3174
+ }
3175
+ }
3176
+ .zx-dock__title {
3177
+ white-space: nowrap;
3178
+ overflow: hidden;
3179
+ text-overflow: ellipsis;
3180
+ }
3181
+ .zx-dock__tabs {
3182
+ display: flex;
3183
+ align-items: stretch;
3184
+ gap: var(--zx-space-1);
3185
+ min-inline-size: 0;
3186
+ overflow-x: auto;
3187
+ scrollbar-width: none;
3188
+ }
3189
+ .zx-dock__tabs::-webkit-scrollbar {
3190
+ display: none;
3191
+ }
3192
+ .zx-dock__tab {
3193
+ flex: none;
3194
+ min-block-size: 0;
3195
+ border: 0;
3196
+ border-radius: var(--zx-radius-sm);
3197
+ padding: var(--zx-space-1) var(--zx-space-2);
3198
+ background: none;
3199
+ color: var(--zx-color-text-muted);
3200
+ font: inherit;
3201
+ font-size: var(--zx-text-sm);
3202
+ white-space: nowrap;
3203
+ cursor: pointer;
3204
+ }
3205
+ .zx-dock__tab:hover {
3206
+ color: var(--zx-color-text);
3207
+ }
3208
+ .zx-dock__tab[aria-selected=true] {
3209
+ background: var(--zx-color-bg-surface);
3210
+ color: var(--zx-color-text);
3211
+ font-weight: var(--zx-control-font-weight);
3212
+ }
3213
+ .zx-dock__tab:focus-visible {
3214
+ outline: none;
3215
+ box-shadow: var(--zx-focus-ring);
3216
+ }
3217
+ .zx-dock__body {
3218
+ display: flex;
3219
+ flex-direction: column;
3220
+ flex: 1 1 auto;
3221
+ min-block-size: 0;
3222
+ min-inline-size: 0;
3223
+ overflow: auto;
3224
+ }
3225
+ .zx-dock__pane-content,
3226
+ .zx-dock__panel {
3227
+ flex: 1 1 auto;
3228
+ min-block-size: 0;
3229
+ padding: var(--zx-space-3);
3230
+ }
3231
+ .zx-dock__pane-content > .zx-dock:only-child,
3232
+ .zx-dock__panel > .zx-dock:only-child {
3233
+ block-size: 100%;
3234
+ }
3235
+ .zx-dock__panel:focus-visible {
3236
+ outline: none;
3237
+ box-shadow: inset var(--zx-focus-ring);
3238
+ }
3239
+ .zx-dock__divider {
3240
+ position: relative;
3241
+ flex: none;
3242
+ background: none;
3243
+ }
3244
+ .zx-dock[data-orientation=vertical] > .zx-dock__divider {
3245
+ block-size: var(--zx-dock-divider-size);
3246
+ margin-block: calc(var(--zx-dock-divider-size) / -2);
3247
+ cursor: row-resize;
3248
+ }
3249
+ .zx-dock[data-orientation=horizontal] > .zx-dock__divider {
3250
+ inline-size: var(--zx-dock-divider-size);
3251
+ margin-inline: calc(var(--zx-dock-divider-size) / -2);
3252
+ cursor: col-resize;
3253
+ }
3254
+ .zx-dock__divider[data-disabled] {
3255
+ cursor: default;
3256
+ }
3257
+ .zx-dock__divider::after {
3258
+ content: "";
3259
+ position: absolute;
3260
+ inset: 0;
3261
+ margin: auto;
3262
+ background: var(--zx-color-border);
3263
+ }
3264
+ .zx-dock[data-orientation=vertical] > .zx-dock__divider::after {
3265
+ block-size: var(--zx-dock-divider-line);
3266
+ }
3267
+ .zx-dock[data-orientation=horizontal] > .zx-dock__divider::after {
3268
+ inline-size: var(--zx-dock-divider-line);
3269
+ }
3270
+ .zx-dock__divider:not([data-disabled]):hover::after,
3271
+ .zx-dock[data-dragging=true] .zx-dock__divider:focus::after {
3272
+ background: var(--zx-color-accent);
3273
+ }
3274
+ .zx-dock__divider:focus-visible {
3275
+ outline: none;
3276
+ z-index: 1;
3277
+ box-shadow: var(--zx-focus-ring);
3278
+ }
3279
+
2231
3280
  /* src/components/menu-button/menu-button.css */
2232
3281
  .zx-menu-button {
2233
3282
  display: inline-flex;
@@ -2420,7 +3469,6 @@ body:has(> .zx-modal[open]) {
2420
3469
  .zx-select__option[aria-selected=true] {
2421
3470
  background: var(--zx-color-bg-selected);
2422
3471
  }
2423
- .zx-select__option > svg,
2424
3472
  .zx-select__option > .zx-icon {
2425
3473
  flex: none;
2426
3474
  color: var(--zx-color-accent);
@@ -2437,6 +3485,11 @@ body:has(> .zx-modal[open]) {
2437
3485
  padding: var(--zx-space-2) var(--zx-control-pad-x) var(--zx-space-1);
2438
3486
  text-transform: uppercase;
2439
3487
  }
3488
+ .zx-select__separator {
3489
+ block-size: 1px;
3490
+ margin: var(--zx-space-1) var(--zx-control-pad-x);
3491
+ background: var(--zx-color-border);
3492
+ }
2440
3493
  .zx-select__empty {
2441
3494
  color: var(--zx-color-text-muted);
2442
3495
  padding: var(--zx-space-3) var(--zx-control-pad-x);
@@ -2973,47 +4026,6 @@ body:has(> .zx-modal[open]) {
2973
4026
  gap: 4px;
2974
4027
  }
2975
4028
 
2976
- /* src/components/permission/permission.css */
2977
- .zx-permission {
2978
- min-inline-size: 0;
2979
- color: var(--zx-color-text);
2980
- font-size: var(--zx-control-font-size);
2981
- }
2982
- .zx-permission__choices {
2983
- display: grid;
2984
- grid-template-columns: repeat(3, max-content) minmax(160px, 1fr);
2985
- align-items: center;
2986
- gap: var(--zx-space-2) var(--zx-space-4);
2987
- }
2988
- .zx-permission__choice {
2989
- display: inline-flex;
2990
- align-items: center;
2991
- gap: var(--zx-space-2);
2992
- min-block-size: var(--zx-control-height);
2993
- cursor: pointer;
2994
- }
2995
- .zx-permission__choice input {
2996
- accent-color: var(--zx-color-accent);
2997
- }
2998
- .zx-permission__choice:has(input:focus-visible) {
2999
- border-radius: var(--zx-radius-sm);
3000
- box-shadow: var(--zx-focus-ring);
3001
- }
3002
- .zx-permission__groups {
3003
- min-inline-size: 160px;
3004
- }
3005
- .zx-permission:not([data-state=group]) .zx-permission__groups {
3006
- color: var(--zx-color-text-muted);
3007
- }
3008
- @media (max-width: 640px) {
3009
- .zx-permission__choices {
3010
- grid-template-columns: 1fr;
3011
- }
3012
- .zx-permission__groups {
3013
- inline-size: 100%;
3014
- }
3015
- }
3016
-
3017
4029
  /* src/components/date-picker/date-picker.css */
3018
4030
  .zx-date-picker,
3019
4031
  .zx-month-picker {
@@ -3419,6 +4431,7 @@ body:has(> .zx-modal[open]) {
3419
4431
  .zx-date-range-picker {
3420
4432
  display: block;
3421
4433
  container-type: inline-size;
4434
+ inline-size: 100%;
3422
4435
  color: var(--zx-color-text);
3423
4436
  font-size: var(--zx-control-font-size);
3424
4437
  }
@@ -3922,6 +4935,41 @@ body:has(> .zx-modal[open]) {
3922
4935
  color: var(--zx-color-text-muted);
3923
4936
  text-align: center;
3924
4937
  }
4938
+ .zx-table__tree-cell {
4939
+ display: flex;
4940
+ min-inline-size: 0;
4941
+ align-items: center;
4942
+ gap: var(--zx-space-1);
4943
+ padding-inline-start: calc(var(--zx-table-depth, 0) * var(--zx-space-4));
4944
+ }
4945
+ .zx-table__tree-toggle,
4946
+ .zx-table__tree-spacer {
4947
+ inline-size: 24px;
4948
+ block-size: 24px;
4949
+ flex: 0 0 24px;
4950
+ }
4951
+ .zx-table__tree-toggle {
4952
+ display: inline-grid;
4953
+ min-block-size: 0;
4954
+ place-items: center;
4955
+ padding: 0;
4956
+ border: 0;
4957
+ border-radius: var(--zx-radius-sm);
4958
+ background: transparent;
4959
+ color: var(--zx-color-text-muted);
4960
+ cursor: pointer;
4961
+ }
4962
+ .zx-table__tree-toggle:hover {
4963
+ background: var(--zx-color-bg-hover);
4964
+ color: var(--zx-color-text);
4965
+ }
4966
+ .zx-table__tree-toggle:focus-visible {
4967
+ outline: 0;
4968
+ box-shadow: var(--zx-focus-ring);
4969
+ }
4970
+ .zx-table__cell-content {
4971
+ min-inline-size: 0;
4972
+ }
3925
4973
  .zx-table[data-edit-mode] .zx-table__body td {
3926
4974
  block-size: var(--zx-control-height);
3927
4975
  }
@@ -4044,6 +5092,80 @@ body:has(> .zx-modal[open]) {
4044
5092
  color: var(--zx-color-text);
4045
5093
  }
4046
5094
 
5095
+ /* src/components/grid/grid.css */
5096
+ .zx-table[data-preset=billing-items] tr.zx-grid-billing__summary > td {
5097
+ background: var(--zx-color-bg-subtle);
5098
+ font-weight: 700;
5099
+ }
5100
+
5101
+ /* src/components/chart/chart.css */
5102
+ .zx-chart {
5103
+ display: grid;
5104
+ gap: var(--zx-space-4);
5105
+ min-inline-size: 0;
5106
+ color: var(--zx-color-text);
5107
+ }
5108
+ .zx-chart__viewport {
5109
+ position: relative;
5110
+ inline-size: 100%;
5111
+ min-block-size: 220px;
5112
+ aspect-ratio: var(--zx-chart-aspect-ratio, 16 / 9);
5113
+ }
5114
+ .zx-chart__viewport[hidden],
5115
+ .zx-chart__status[hidden] {
5116
+ display: none;
5117
+ }
5118
+ .zx-chart__canvas {
5119
+ position: absolute;
5120
+ inset: 0;
5121
+ inline-size: 100% !important;
5122
+ block-size: 100% !important;
5123
+ }
5124
+ .zx-chart__description {
5125
+ margin: 0;
5126
+ color: var(--zx-color-text-muted);
5127
+ font-size: var(--zx-text-sm);
5128
+ }
5129
+ .zx-chart__description:empty {
5130
+ display: none;
5131
+ }
5132
+ .zx-chart__status {
5133
+ display: grid;
5134
+ min-block-size: 180px;
5135
+ place-items: center;
5136
+ border: 1px dashed var(--zx-color-border);
5137
+ border-radius: var(--zx-radius-lg);
5138
+ color: var(--zx-color-text-muted);
5139
+ text-align: center;
5140
+ }
5141
+ .zx-chart__summary[data-summary=hidden] {
5142
+ position: absolute;
5143
+ inline-size: 1px;
5144
+ block-size: 1px;
5145
+ overflow: hidden;
5146
+ clip-path: inset(50%);
5147
+ white-space: nowrap;
5148
+ }
5149
+ .zx-chart__table {
5150
+ inline-size: 100%;
5151
+ border-collapse: collapse;
5152
+ }
5153
+ .zx-chart__table caption {
5154
+ margin-block-end: var(--zx-space-2);
5155
+ font-weight: 700;
5156
+ text-align: start;
5157
+ }
5158
+ .zx-chart__table th,
5159
+ .zx-chart__table td {
5160
+ border-block-end: 1px solid var(--zx-color-border);
5161
+ padding: var(--zx-space-2);
5162
+ text-align: end;
5163
+ }
5164
+ .zx-chart__table th:first-child,
5165
+ .zx-chart__table td:first-child {
5166
+ text-align: start;
5167
+ }
5168
+
4047
5169
  /* src/components/tree/tree.css */
4048
5170
  .zx-tree {
4049
5171
  --zx-tree-indent: 18px;
@@ -4474,6 +5596,12 @@ button.zx-stepper__control:disabled {
4474
5596
  flex: 0 1 auto;
4475
5597
  gap: var(--zx-space-2);
4476
5598
  }
5599
+ .zx-stepper[data-orientation=horizontal] .zx-stepper__step:not(:last-child) {
5600
+ flex: 1 1 auto;
5601
+ }
5602
+ .zx-stepper[data-orientation=horizontal] .zx-stepper__control {
5603
+ flex: 0 1 auto;
5604
+ }
4477
5605
  .zx-stepper[data-orientation=horizontal] .zx-stepper__step:not(:last-child)::after {
4478
5606
  content: "";
4479
5607
  flex: 1 1 var(--zx-space-6);
@@ -4717,6 +5845,7 @@ button.zx-stepper__control:disabled {
4717
5845
  border-radius: var(--zx-radius-lg);
4718
5846
  background: var(--zx-color-bg-surface);
4719
5847
  container-type: inline-size;
5848
+ inline-size: 100%;
4720
5849
  }
4721
5850
  .zx-fieldset__legend {
4722
5851
  padding-inline: var(--zx-space-2);
@@ -4749,6 +5878,9 @@ button.zx-stepper__control:disabled {
4749
5878
  gap: var(--zx-space-5);
4750
5879
  min-inline-size: 0;
4751
5880
  }
5881
+ .zx-form {
5882
+ inline-size: 100%;
5883
+ }
4752
5884
  .zx-form__actions {
4753
5885
  display: flex;
4754
5886
  flex-wrap: wrap;
@@ -4870,49 +6002,103 @@ button.zx-stepper__control:disabled {
4870
6002
  display: grid;
4871
6003
  gap: var(--zx-space-3);
4872
6004
  min-inline-size: 0;
6005
+ inline-size: 100%;
4873
6006
  padding: var(--zx-space-3);
4874
6007
  border: 1px solid var(--zx-color-border);
4875
6008
  border-radius: var(--zx-radius-lg);
4876
6009
  background: var(--zx-color-bg-surface);
4877
- container-type: inline-size;
4878
6010
  }
4879
6011
  .zx-multi-value-editor__rows {
4880
6012
  display: grid;
4881
6013
  gap: var(--zx-space-2);
4882
6014
  }
4883
6015
  .zx-multi-value-editor__row {
4884
- display: grid;
4885
- grid-template-columns: minmax(0, 1fr) auto;
6016
+ position: relative;
6017
+ display: flex;
6018
+ flex-wrap: wrap;
6019
+ min-inline-size: 0;
4886
6020
  gap: var(--zx-space-2);
4887
6021
  align-items: center;
4888
6022
  }
4889
6023
  .zx-multi-value-editor__value {
4890
- inline-size: 100%;
6024
+ flex: 1 1 11rem;
6025
+ min-inline-size: 0;
4891
6026
  }
4892
6027
  .zx-multi-value-editor__controls {
4893
6028
  display: inline-flex;
6029
+ flex: 0 1 auto;
6030
+ flex-wrap: wrap;
6031
+ min-inline-size: 0;
4894
6032
  gap: var(--zx-space-1);
6033
+ margin-inline-start: auto;
4895
6034
  }
4896
6035
  .zx-multi-value-editor__controls .zx-btn {
4897
6036
  min-inline-size: var(--zx-control-height);
4898
6037
  padding-inline: var(--zx-space-2);
4899
6038
  }
4900
- .zx-multi-value-editor__controls .zx-btn:last-child {
6039
+ .zx-multi-value-editor__controls .zx-btn[data-action=remove] {
4901
6040
  color: var(--zx-color-danger);
4902
6041
  }
6042
+ .zx-multi-value-editor__controls .zx-btn[aria-disabled=true] {
6043
+ opacity: 0.55;
6044
+ cursor: not-allowed;
6045
+ }
6046
+ .zx-multi-value-editor__controls .zx-btn[aria-disabled=true]:hover {
6047
+ background: var(--zx-color-bg-control);
6048
+ }
6049
+ .zx-multi-value-editor__handle {
6050
+ display: inline-flex;
6051
+ flex: none;
6052
+ align-items: center;
6053
+ justify-content: center;
6054
+ min-block-size: var(--zx-control-height);
6055
+ min-inline-size: var(--zx-space-6);
6056
+ padding: 0;
6057
+ border: 0;
6058
+ border-radius: var(--zx-control-radius);
6059
+ background: none;
6060
+ color: var(--zx-color-text-muted);
6061
+ cursor: grab;
6062
+ touch-action: none;
6063
+ transition: color var(--zx-dur-fast) var(--zx-ease), background-color var(--zx-dur-fast) var(--zx-ease);
6064
+ }
6065
+ .zx-multi-value-editor__handle:hover:not(:disabled) {
6066
+ background: var(--zx-color-bg-hover);
6067
+ color: var(--zx-color-text);
6068
+ }
6069
+ .zx-multi-value-editor__handle:focus-visible {
6070
+ outline: none;
6071
+ box-shadow: var(--zx-focus-ring);
6072
+ }
6073
+ .zx-multi-value-editor__handle:disabled {
6074
+ opacity: 0.55;
6075
+ cursor: default;
6076
+ }
6077
+ .zx-multi-value-editor[data-state=dragging] .zx-multi-value-editor__handle {
6078
+ cursor: grabbing;
6079
+ }
6080
+ .zx-multi-value-editor__row[data-dragging=true] {
6081
+ opacity: 0.45;
6082
+ }
6083
+ .zx-multi-value-editor__row[data-drop]::after {
6084
+ content: "";
6085
+ position: absolute;
6086
+ inset-inline: 0;
6087
+ block-size: 2px;
6088
+ border-radius: var(--zx-radius-full);
6089
+ background: var(--zx-color-accent);
6090
+ }
6091
+ .zx-multi-value-editor__row[data-drop=before]::after {
6092
+ inset-block-start: calc(var(--zx-space-2) / -2 - 1px);
6093
+ }
6094
+ .zx-multi-value-editor__row[data-drop=after]::after {
6095
+ inset-block-end: calc(var(--zx-space-2) / -2 - 1px);
6096
+ }
4903
6097
  .zx-multi-value-editor__add {
4904
6098
  justify-self: start;
4905
6099
  border-color: var(--zx-color-accent);
4906
6100
  color: var(--zx-color-accent);
4907
6101
  }
4908
- @container (max-width: 24rem) {
4909
- .zx-multi-value-editor__row {
4910
- grid-template-columns: minmax(0, 1fr);
4911
- }
4912
- .zx-multi-value-editor__controls {
4913
- justify-self: end;
4914
- }
4915
- }
4916
6102
 
4917
6103
  /* src/components/field-upload/field-upload.css */
4918
6104
  .zx-field-upload {
@@ -5005,4 +6191,295 @@ button.zx-stepper__control:disabled {
5005
6191
  }
5006
6192
  }
5007
6193
 
6194
+ /* src/components/questionnaire/questionnaire.css */
6195
+ .zx-questionnaire {
6196
+ --zx-questionnaire-radius: var(--zx-radius-lg);
6197
+ --zx-questionnaire-gap: var(--zx-space-3);
6198
+ display: block;
6199
+ color: var(--zx-color-text);
6200
+ }
6201
+ .zx-questionnaire__form,
6202
+ .zx-questionnaire:is(form) {
6203
+ display: grid;
6204
+ gap: var(--zx-space-5);
6205
+ }
6206
+ .zx-questionnaire__progress {
6207
+ display: block;
6208
+ }
6209
+ .zx-questionnaire__progress[hidden],
6210
+ .zx-questionnaire__item[hidden],
6211
+ .zx-questionnaire__review[hidden],
6212
+ .zx-questionnaire__error[hidden],
6213
+ .zx-questionnaire__actions > .zx-btn[hidden] {
6214
+ display: none;
6215
+ }
6216
+ .zx-questionnaire__item {
6217
+ display: grid;
6218
+ gap: var(--zx-questionnaire-gap);
6219
+ margin: 0;
6220
+ border: 0;
6221
+ padding: 0;
6222
+ min-inline-size: 0;
6223
+ }
6224
+ .zx-questionnaire__item:focus {
6225
+ outline: none;
6226
+ }
6227
+ .zx-questionnaire__item:focus-visible {
6228
+ outline: none;
6229
+ box-shadow: var(--zx-focus-ring);
6230
+ border-radius: var(--zx-questionnaire-radius);
6231
+ }
6232
+ .zx-questionnaire__prompt {
6233
+ display: block;
6234
+ float: none;
6235
+ margin: 0;
6236
+ padding: 0;
6237
+ inline-size: 100%;
6238
+ color: var(--zx-color-text);
6239
+ font-size: var(--zx-text-lg);
6240
+ font-weight: 600;
6241
+ line-height: 1.35;
6242
+ }
6243
+ .zx-questionnaire__description {
6244
+ margin: 0;
6245
+ color: var(--zx-color-text-muted);
6246
+ font-size: var(--zx-text-sm);
6247
+ line-height: 1.5;
6248
+ }
6249
+ .zx-questionnaire__error {
6250
+ display: flex;
6251
+ gap: var(--zx-space-2);
6252
+ margin: 0;
6253
+ color: var(--zx-color-danger);
6254
+ font-size: var(--zx-text-sm);
6255
+ }
6256
+ .zx-questionnaire__choices {
6257
+ display: grid;
6258
+ gap: var(--zx-space-2);
6259
+ }
6260
+ .zx-questionnaire__choice {
6261
+ display: flex;
6262
+ align-items: flex-start;
6263
+ gap: var(--zx-space-3);
6264
+ border: 1px solid var(--zx-color-border-control);
6265
+ border-radius: var(--zx-questionnaire-radius);
6266
+ background: var(--zx-color-bg-control);
6267
+ padding: var(--zx-space-3);
6268
+ min-inline-size: 0;
6269
+ cursor: pointer;
6270
+ }
6271
+ @media (prefers-reduced-motion: no-preference) {
6272
+ .zx-questionnaire__choice {
6273
+ transition: border-color var(--zx-dur-fast) var(--zx-ease), background-color var(--zx-dur-fast) var(--zx-ease);
6274
+ }
6275
+ }
6276
+ .zx-questionnaire__choice:hover:not([data-disabled]) {
6277
+ border-color: var(--zx-color-border-strong);
6278
+ background: var(--zx-color-bg-hover);
6279
+ }
6280
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) {
6281
+ border-color: var(--zx-color-accent);
6282
+ background: var(--zx-color-bg-selected);
6283
+ }
6284
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:focus-visible) {
6285
+ box-shadow: var(--zx-focus-ring);
6286
+ }
6287
+ .zx-questionnaire__choice[data-disabled] {
6288
+ opacity: 0.55;
6289
+ cursor: not-allowed;
6290
+ }
6291
+ .zx-questionnaire__control {
6292
+ position: absolute;
6293
+ margin: 0;
6294
+ border: 0;
6295
+ padding: 0;
6296
+ inline-size: 1px;
6297
+ block-size: 1px;
6298
+ overflow: hidden;
6299
+ clip-path: inset(50%);
6300
+ white-space: nowrap;
6301
+ }
6302
+ .zx-questionnaire__marker {
6303
+ flex: none;
6304
+ display: grid;
6305
+ place-items: center;
6306
+ margin-block-start: 1px;
6307
+ border: 1px solid var(--zx-color-border-strong);
6308
+ inline-size: 18px;
6309
+ block-size: 18px;
6310
+ background: var(--zx-color-bg-surface);
6311
+ }
6312
+ .zx-questionnaire__choice:has(.zx-questionnaire__control[type=radio]) .zx-questionnaire__marker {
6313
+ border-radius: 50%;
6314
+ }
6315
+ .zx-questionnaire__choice:has(.zx-questionnaire__control[type=checkbox]) .zx-questionnaire__marker {
6316
+ border-radius: var(--zx-radius-sm);
6317
+ }
6318
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) .zx-questionnaire__marker {
6319
+ border-color: var(--zx-color-accent);
6320
+ background: var(--zx-color-accent);
6321
+ }
6322
+ .zx-questionnaire__marker::after {
6323
+ content: "";
6324
+ inline-size: 8px;
6325
+ block-size: 8px;
6326
+ border-radius: inherit;
6327
+ background: var(--zx-color-on-accent);
6328
+ transform: scale(0);
6329
+ }
6330
+ @media (prefers-reduced-motion: no-preference) {
6331
+ .zx-questionnaire__marker::after {
6332
+ transition: transform var(--zx-dur-fast) var(--zx-ease);
6333
+ }
6334
+ }
6335
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) .zx-questionnaire__marker::after {
6336
+ transform: scale(1);
6337
+ }
6338
+ .zx-questionnaire__choice > .zx-icon {
6339
+ flex: none;
6340
+ margin-block-start: 1px;
6341
+ color: var(--zx-color-text-muted);
6342
+ }
6343
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) > .zx-icon {
6344
+ color: var(--zx-color-accent);
6345
+ }
6346
+ .zx-questionnaire__text {
6347
+ display: grid;
6348
+ gap: 2px;
6349
+ flex: 1 1 auto;
6350
+ min-inline-size: 0;
6351
+ }
6352
+ .zx-questionnaire__label {
6353
+ font-size: var(--zx-control-font-size);
6354
+ line-height: 1.4;
6355
+ }
6356
+ .zx-questionnaire__hint {
6357
+ color: var(--zx-color-text-muted);
6358
+ font-size: var(--zx-text-sm);
6359
+ line-height: 1.45;
6360
+ }
6361
+ .zx-questionnaire__key {
6362
+ flex: none;
6363
+ display: grid;
6364
+ place-items: center;
6365
+ border: 1px solid var(--zx-color-border);
6366
+ border-radius: var(--zx-radius-sm);
6367
+ background: var(--zx-color-bg-muted);
6368
+ padding-inline: var(--zx-space-2);
6369
+ min-inline-size: 22px;
6370
+ block-size: 22px;
6371
+ color: var(--zx-color-text-muted);
6372
+ font-family: inherit;
6373
+ font-size: var(--zx-text-xs);
6374
+ text-transform: uppercase;
6375
+ }
6376
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) .zx-questionnaire__key {
6377
+ border-color: var(--zx-color-accent);
6378
+ color: var(--zx-color-accent);
6379
+ }
6380
+ .zx-questionnaire__freeform {
6381
+ display: grid;
6382
+ gap: var(--zx-space-2);
6383
+ padding-block-start: var(--zx-space-1);
6384
+ }
6385
+ .zx-questionnaire__freeform-label {
6386
+ color: var(--zx-color-text-muted);
6387
+ font-size: var(--zx-text-sm);
6388
+ }
6389
+ .zx-questionnaire__freeform-input {
6390
+ border: 1px solid var(--zx-color-border-control);
6391
+ border-radius: var(--zx-control-radius);
6392
+ background: var(--zx-color-bg-control);
6393
+ padding: var(--zx-space-2) var(--zx-control-pad-x);
6394
+ min-block-size: var(--zx-control-height);
6395
+ color: var(--zx-color-text);
6396
+ font: inherit;
6397
+ font-size: var(--zx-control-font-size);
6398
+ }
6399
+ .zx-questionnaire__freeform-input::placeholder {
6400
+ color: var(--zx-color-text-placeholder);
6401
+ }
6402
+ .zx-questionnaire__freeform-input:focus-visible {
6403
+ outline: none;
6404
+ border-color: var(--zx-color-accent);
6405
+ box-shadow: var(--zx-focus-ring);
6406
+ }
6407
+ .zx-questionnaire__field[data-hide-label] > .zx-field__label {
6408
+ position: absolute;
6409
+ inline-size: 1px;
6410
+ block-size: 1px;
6411
+ overflow: hidden;
6412
+ clip-path: inset(50%);
6413
+ white-space: nowrap;
6414
+ }
6415
+ .zx-questionnaire__review {
6416
+ display: grid;
6417
+ gap: var(--zx-space-3);
6418
+ }
6419
+ .zx-questionnaire__review:focus {
6420
+ outline: none;
6421
+ }
6422
+ .zx-questionnaire__review-title {
6423
+ margin: 0;
6424
+ font-size: var(--zx-text-lg);
6425
+ font-weight: 600;
6426
+ }
6427
+ .zx-questionnaire__answers {
6428
+ display: grid;
6429
+ gap: var(--zx-space-2);
6430
+ margin: 0;
6431
+ }
6432
+ .zx-questionnaire__answer {
6433
+ display: grid;
6434
+ grid-template-columns: minmax(0, 1fr) auto;
6435
+ align-items: center;
6436
+ gap: 0 var(--zx-space-3);
6437
+ border: 1px solid var(--zx-color-border);
6438
+ border-radius: var(--zx-questionnaire-radius);
6439
+ background: var(--zx-color-bg-surface);
6440
+ padding: var(--zx-space-3);
6441
+ }
6442
+ .zx-questionnaire__answer-prompt {
6443
+ grid-column: 1;
6444
+ color: var(--zx-color-text-muted);
6445
+ font-size: var(--zx-text-sm);
6446
+ }
6447
+ .zx-questionnaire__answer-value {
6448
+ grid-column: 1;
6449
+ margin: 0;
6450
+ min-inline-size: 0;
6451
+ overflow-wrap: anywhere;
6452
+ }
6453
+ .zx-questionnaire__answer-value[data-empty] {
6454
+ color: var(--zx-color-text-muted);
6455
+ font-style: italic;
6456
+ }
6457
+ .zx-questionnaire__answer > .zx-btn {
6458
+ grid-area: 1 / 2 / 3 / 3;
6459
+ }
6460
+ .zx-questionnaire__actions {
6461
+ display: flex;
6462
+ align-items: center;
6463
+ gap: var(--zx-space-2);
6464
+ flex-wrap: wrap;
6465
+ }
6466
+ .zx-questionnaire__spacer {
6467
+ flex: 1 1 auto;
6468
+ }
6469
+ .zx-questionnaire[data-state=checking] .zx-questionnaire__item,
6470
+ .zx-questionnaire[data-state=checking] .zx-questionnaire__choice {
6471
+ cursor: progress;
6472
+ }
6473
+ .zx-questionnaire[data-state=complete] .zx-questionnaire__item {
6474
+ opacity: 0.7;
6475
+ }
6476
+ @media (max-width: 480px) {
6477
+ .zx-questionnaire__key {
6478
+ display: none;
6479
+ }
6480
+ .zx-questionnaire__actions > .zx-btn {
6481
+ flex: 1 1 auto;
6482
+ }
6483
+ }
6484
+
5008
6485
  /* styles/zx.css */