zabi-components 6.0.0 → 7.0.1

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 (200) hide show
  1. package/README.md +137 -1473
  2. package/dist/atoms/ActionPanel.svelte +116 -0
  3. package/dist/atoms/ActionPanel.svelte.d.ts +19 -0
  4. package/dist/atoms/Badge.svelte +1 -1
  5. package/dist/atoms/Badge.svelte.d.ts +1 -1
  6. package/dist/atoms/Button.svelte +38 -21
  7. package/dist/atoms/Button.svelte.d.ts +6 -6
  8. package/dist/atoms/Card.svelte +12 -3
  9. package/dist/atoms/Card.svelte.d.ts +2 -2
  10. package/dist/atoms/CardHeader.svelte +8 -4
  11. package/dist/atoms/CardHeader.svelte.d.ts +4 -2
  12. package/dist/atoms/Checkbox.svelte +50 -76
  13. package/dist/atoms/Checkbox.svelte.d.ts +7 -2
  14. package/dist/atoms/CodeBlock.svelte +20 -34
  15. package/dist/atoms/CodeBlock.svelte.d.ts +1 -0
  16. package/dist/atoms/ColorPicker.svelte +2 -6
  17. package/dist/atoms/Container.svelte +41 -0
  18. package/dist/atoms/Container.svelte.d.ts +12 -0
  19. package/dist/atoms/Divider.svelte +68 -0
  20. package/dist/atoms/Divider.svelte.d.ts +13 -0
  21. package/dist/atoms/FeatureCard.svelte +35 -50
  22. package/dist/atoms/FeatureCard.svelte.d.ts +9 -4
  23. package/dist/atoms/IconButton.svelte +36 -29
  24. package/dist/atoms/IconButton.svelte.d.ts +7 -13
  25. package/dist/atoms/Input.svelte +58 -26
  26. package/dist/atoms/Input.svelte.d.ts +6 -1
  27. package/dist/atoms/List.svelte +2 -7
  28. package/dist/atoms/List.svelte.d.ts +1 -6
  29. package/dist/atoms/ListItem.svelte +54 -65
  30. package/dist/atoms/ListItem.svelte.d.ts +7 -13
  31. package/dist/atoms/ListItemLeading.svelte +19 -0
  32. package/dist/atoms/ListItemLeading.svelte.d.ts +9 -0
  33. package/dist/atoms/Progress.svelte +1 -1
  34. package/dist/atoms/Radio.svelte +51 -0
  35. package/dist/atoms/Radio.svelte.d.ts +14 -0
  36. package/dist/atoms/Select.svelte +23 -30
  37. package/dist/atoms/Select.svelte.d.ts +0 -10
  38. package/dist/atoms/SelectionControl.svelte +98 -0
  39. package/dist/atoms/SelectionControl.svelte.d.ts +26 -0
  40. package/dist/atoms/Skeleton.svelte +39 -15
  41. package/dist/atoms/Skeleton.svelte.d.ts +7 -3
  42. package/dist/atoms/Table.svelte +27 -0
  43. package/dist/atoms/Table.svelte.d.ts +10 -0
  44. package/dist/atoms/Text.svelte +46 -0
  45. package/dist/atoms/Text.svelte.d.ts +13 -0
  46. package/dist/atoms/Textarea.svelte +74 -53
  47. package/dist/atoms/Textarea.svelte.d.ts +6 -2
  48. package/dist/atoms/ThemeToggle.svelte +35 -24
  49. package/dist/atoms/ThemeToggle.svelte.d.ts +1 -0
  50. package/dist/atoms/Toast.svelte +55 -31
  51. package/dist/atoms/Toast.svelte.d.ts +4 -1
  52. package/dist/atoms/Toggle.svelte +37 -22
  53. package/dist/atoms/Toggle.svelte.d.ts +2 -1
  54. package/dist/atoms/Tooltip.svelte +97 -14
  55. package/dist/atoms/Tooltip.svelte.d.ts +6 -5
  56. package/dist/atoms/index.d.ts +6 -0
  57. package/dist/atoms/index.js +6 -0
  58. package/dist/atoms/selection-control.styles.d.ts +25 -0
  59. package/dist/atoms/selection-control.styles.js +30 -0
  60. package/dist/components/atoms/index.d.ts +6 -0
  61. package/dist/components/atoms/index.d.ts.map +1 -1
  62. package/dist/components/atoms/selection-control.styles.d.ts +26 -0
  63. package/dist/components/atoms/selection-control.styles.d.ts.map +1 -0
  64. package/dist/components/index.d.ts +41 -5
  65. package/dist/components/index.d.ts.map +1 -1
  66. package/dist/components/molecules/index.d.ts +10 -0
  67. package/dist/components/molecules/index.d.ts.map +1 -1
  68. package/dist/components/molecules/navigation-menu-context.d.ts +11 -0
  69. package/dist/components/molecules/navigation-menu-context.d.ts.map +1 -1
  70. package/dist/components/molecules/toast-store.d.ts +39 -0
  71. package/dist/components/molecules/toast-store.d.ts.map +1 -0
  72. package/dist/components/organisms/index.d.ts +2 -1
  73. package/dist/components/organisms/index.d.ts.map +1 -1
  74. package/dist/components/types/page.types.d.ts +69 -0
  75. package/dist/components/types/page.types.d.ts.map +1 -0
  76. package/dist/components/types/page.types.js +1 -0
  77. package/dist/components/types/variants.d.ts +64 -0
  78. package/dist/components/types/variants.d.ts.map +1 -0
  79. package/dist/components/types/variants.js +44 -0
  80. package/dist/components/util/fixed-sidebar-flyout.d.ts +23 -0
  81. package/dist/components/util/fixed-sidebar-flyout.d.ts.map +1 -0
  82. package/dist/components/util/focus-utils.d.ts +12 -0
  83. package/dist/components/util/focus-utils.d.ts.map +1 -0
  84. package/dist/components/util/ssr-safe.d.ts +17 -0
  85. package/dist/components/util/ssr-safe.d.ts.map +1 -0
  86. package/dist/index.d.ts +41 -5
  87. package/dist/index.js +44 -8
  88. package/dist/lib/layout-width-tokens.d.ts +17 -0
  89. package/dist/lib/layout-width-tokens.d.ts.map +1 -0
  90. package/dist/lib/showcase/component-docs/Button.d.ts +3 -0
  91. package/dist/lib/showcase/component-docs/Button.d.ts.map +1 -0
  92. package/dist/lib/showcase/component-docs/Input.d.ts +3 -0
  93. package/dist/lib/showcase/component-docs/Input.d.ts.map +1 -0
  94. package/dist/lib/showcase/component-docs/List.d.ts +3 -0
  95. package/dist/lib/showcase/component-docs/List.d.ts.map +1 -0
  96. package/dist/lib/showcase/component-docs/Modal.d.ts +3 -0
  97. package/dist/lib/showcase/component-docs/Modal.d.ts.map +1 -0
  98. package/dist/lib/showcase/component-docs/Radio.d.ts +3 -0
  99. package/dist/lib/showcase/component-docs/Radio.d.ts.map +1 -0
  100. package/dist/lib/showcase/component-docs/SidebarNavigation.d.ts +3 -0
  101. package/dist/lib/showcase/component-docs/SidebarNavigation.d.ts.map +1 -0
  102. package/dist/lib/showcase/component-docs/Skeleton.d.ts +3 -0
  103. package/dist/lib/showcase/component-docs/Skeleton.d.ts.map +1 -0
  104. package/dist/lib/showcase/component-docs/_shared.d.ts +12 -0
  105. package/dist/lib/showcase/component-docs/_shared.d.ts.map +1 -0
  106. package/dist/lib/showcase/component-docs/index.d.ts +4 -0
  107. package/dist/lib/showcase/component-docs/index.d.ts.map +1 -0
  108. package/dist/lib/showcase/components-catalog.d.ts.map +1 -1
  109. package/dist/lib/showcase/components-showcase-constants.d.ts +26 -0
  110. package/dist/lib/showcase/components-showcase-constants.d.ts.map +1 -1
  111. package/dist/molecules/Alert.svelte +50 -23
  112. package/dist/molecules/Alert.svelte.d.ts +1 -1
  113. package/dist/molecules/ComponentDemo.svelte +2 -2
  114. package/dist/molecules/ContactForm.svelte +1 -1
  115. package/dist/molecules/Dropdown.svelte +99 -109
  116. package/dist/molecules/Dropdown.svelte.d.ts +12 -6
  117. package/dist/molecules/EmptyState.svelte +44 -0
  118. package/dist/molecules/EmptyState.svelte.d.ts +11 -0
  119. package/dist/molecules/FormField.svelte +89 -0
  120. package/dist/molecules/FormField.svelte.d.ts +23 -0
  121. package/dist/molecules/Header.svelte +41 -0
  122. package/dist/molecules/Header.svelte.d.ts +10 -0
  123. package/dist/molecules/Modal.svelte +37 -24
  124. package/dist/molecules/Modal.svelte.d.ts +4 -2
  125. package/dist/molecules/NavigationMenu.svelte +16 -0
  126. package/dist/molecules/NavigationMenu.svelte.d.ts +2 -0
  127. package/dist/molecules/NavigationMenuContent.svelte +9 -1
  128. package/dist/molecules/NavigationMenuLink.svelte +1 -1
  129. package/dist/molecules/NavigationMenuTrigger.svelte +9 -1
  130. package/dist/molecules/Page.svelte +16 -0
  131. package/dist/molecules/Page.svelte.d.ts +8 -0
  132. package/dist/molecules/PropsTable.svelte +61 -0
  133. package/dist/molecules/PropsTable.svelte.d.ts +8 -0
  134. package/dist/molecules/RadioGroup.svelte +197 -0
  135. package/dist/molecules/RadioGroup.svelte.d.ts +20 -0
  136. package/dist/molecules/Section.svelte +2 -11
  137. package/dist/molecules/Section.svelte.d.ts +2 -11
  138. package/dist/molecules/SidebarBrandHeader.svelte +68 -0
  139. package/dist/molecules/SidebarBrandHeader.svelte.d.ts +10 -0
  140. package/dist/molecules/SidebarFooter.svelte +119 -0
  141. package/dist/molecules/SidebarFooter.svelte.d.ts +23 -0
  142. package/dist/molecules/SidebarNavSection.svelte +49 -0
  143. package/dist/molecules/SidebarNavSection.svelte.d.ts +14 -0
  144. package/dist/molecules/SlideUp.svelte +19 -14
  145. package/dist/molecules/SlideUp.svelte.d.ts +1 -1
  146. package/dist/molecules/Tabs.svelte +4 -9
  147. package/dist/molecules/Toaster.svelte +21 -0
  148. package/dist/molecules/Toaster.svelte.d.ts +6 -0
  149. package/dist/molecules/ToasterToast.svelte +217 -0
  150. package/dist/molecules/ToasterToast.svelte.d.ts +7 -0
  151. package/dist/molecules/index.d.ts +10 -0
  152. package/dist/molecules/index.js +10 -0
  153. package/dist/molecules/navigation-menu-context.d.ts +11 -0
  154. package/dist/molecules/navigation-menu-context.js +18 -0
  155. package/dist/molecules/toast-store.d.ts +38 -0
  156. package/dist/molecules/toast-store.js +34 -0
  157. package/dist/organisms/SidebarAccountPanel.svelte +118 -0
  158. package/dist/organisms/SidebarAccountPanel.svelte.d.ts +20 -0
  159. package/dist/organisms/SidebarNavigation.svelte +267 -237
  160. package/dist/organisms/SidebarNavigation.svelte.d.ts +21 -5
  161. package/dist/organisms/SidebarPanel.svelte +54 -22
  162. package/dist/organisms/SidebarPanel.svelte.d.ts +3 -0
  163. package/dist/organisms/{Navbar.svelte → TopNavbar.svelte} +22 -17
  164. package/dist/organisms/TopNavbar.svelte.d.ts +35 -0
  165. package/dist/organisms/index.d.ts +2 -1
  166. package/dist/organisms/index.js +2 -1
  167. package/dist/routes/lib/focus-utils.d.ts +7 -18
  168. package/dist/routes/lib/focus-utils.ts +32 -34
  169. package/dist/routes/lib/ssr-safe.ts +5 -4
  170. package/dist/routes/lib/variant-utils.ts +48 -39
  171. package/dist/types/components.d.ts +187 -0
  172. package/dist/types/components.d.ts.map +1 -0
  173. package/dist/types/events.d.ts +200 -0
  174. package/dist/types/events.d.ts.map +1 -0
  175. package/dist/types/index.d.ts +171 -0
  176. package/dist/types/index.d.ts.map +1 -0
  177. package/dist/types/page.types.d.ts +2 -31
  178. package/dist/types/page.types.d.ts.map +1 -1
  179. package/dist/types/page.types.js +1 -0
  180. package/dist/types/page.types.ts +79 -0
  181. package/dist/types/variants.d.ts +3 -0
  182. package/dist/types/variants.d.ts.map +1 -0
  183. package/dist/types/variants.js +1 -0
  184. package/dist/types/variants.ts +5 -6
  185. package/dist/util/fixed-sidebar-flyout.d.ts +22 -0
  186. package/dist/util/fixed-sidebar-flyout.js +148 -0
  187. package/dist/util/focus-utils.d.ts +11 -0
  188. package/dist/util/focus-utils.js +94 -0
  189. package/dist/util/ssr-safe.d.ts +16 -0
  190. package/dist/util/ssr-safe.js +48 -0
  191. package/dist/zabi-components-colors.css +128 -115
  192. package/dist/zabi-components-theme-dark-only.css +77 -72
  193. package/dist/zabi-components-theme-dark.css +77 -72
  194. package/dist/zabi-components-theme-only.css +51 -43
  195. package/dist/zabi-components-theme.css +51 -43
  196. package/dist/zabi-components.css +952 -249
  197. package/docs/lucide-icons.md +24 -0
  198. package/package.json +22 -9
  199. package/scripts/fix-lucide-svelte-icon-dts.js +35 -0
  200. package/dist/organisms/Navbar.svelte.d.ts +0 -41
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Browser-only guards and id generation for components that run under SSR.
3
+ * `generateId()` is non-deterministic on the client (random) vs counter on the server —
4
+ * use stable ids for ARIA pairs (e.g. `menuId` on NavigationMenu), not for persisted keys.
5
+ */
6
+ export function isBrowser() {
7
+ return typeof window !== 'undefined';
8
+ }
9
+ export function safeWindow() {
10
+ return isBrowser() ? window : undefined;
11
+ }
12
+ export function safeDocument() {
13
+ return isBrowser() ? document : undefined;
14
+ }
15
+ export function safeLocalStorage() {
16
+ return isBrowser() ? localStorage : undefined;
17
+ }
18
+ export function safeSessionStorage() {
19
+ return isBrowser() ? sessionStorage : undefined;
20
+ }
21
+ export function safeRequestAnimationFrame(callback) {
22
+ return isBrowser() ? requestAnimationFrame(callback) : undefined;
23
+ }
24
+ export function safeSetTimeout(callback, delay) {
25
+ return isBrowser() ? setTimeout(callback, delay) : undefined;
26
+ }
27
+ export function safeClearTimeout(id) {
28
+ if (isBrowser() && id) {
29
+ clearTimeout(id);
30
+ }
31
+ }
32
+ export function safeSetInterval(callback, delay) {
33
+ return isBrowser() ? setInterval(callback, delay) : undefined;
34
+ }
35
+ export function safeClearInterval(id) {
36
+ if (isBrowser() && id) {
37
+ clearInterval(id);
38
+ }
39
+ }
40
+ let idCounter = 0;
41
+ export function generateId(prefix = 'id') {
42
+ if (isBrowser()) {
43
+ return `${prefix}-${Math.random().toString(36).substr(2, 9)}`;
44
+ }
45
+ else {
46
+ return `${prefix}-ssr-${++idCounter}`;
47
+ }
48
+ }
@@ -114,10 +114,15 @@
114
114
  --color-page: var(--color-base-100)
115
115
  --color-page-secondary: var(--color-base-200)
116
116
  /* Card Colors */
117
- --color-card: theme(colors.white)
117
+ --color-card: #ffffff
118
118
  --color-card-hover: var(--color-base-100)
119
119
  --color-card-active: var(--color-base-100)
120
- --color-card-elevated: theme(colors.white)
120
+ --color-card-elevated: #ffffff
121
+ /* Surfaces — layered UI (ascending number = higher layer / more contrast against page) */
122
+ --color-surface-1: #ffffff
123
+ --color-surface-2: var(--color-base-50)
124
+ --color-surface-3: var(--color-base-75)
125
+ --color-surface-4: var(--color-base-100)
121
126
  /* Overlay Colors */
122
127
  --color-overlay: rgba(0, 0, 0, 0.5)
123
128
  /* Input Colors */
@@ -133,8 +138,8 @@
133
138
  --color-caption: var(--color-base-500)
134
139
  --color-input-placeholder: var(--color-base-400)
135
140
  --color-label: var(--color-base-700)
136
- --color-link: theme(colors.brand.600)
137
- --color-link-hover: theme(colors.brand.700)
141
+ --color-link: var(--color-brand-600)
142
+ --color-link-hover: var(--color-brand-700)
138
143
  /* Navigation menu item — menubar triggers, menu links, inline/sidebar nav rows */
139
144
  --color-nav-menu-item: var(--color-body)
140
145
  --color-nav-menu-item-hover: var(--color-headline)
@@ -143,62 +148,65 @@
143
148
  --color-nav-menu-active: var(--color-action-primary-subtle)
144
149
  --color-nav-menu-focus: var(--color-brand-500)
145
150
  --color-success-text: var(--color-success)
146
- --color-warning-text: theme(colors.amber.700)
151
+ --color-warning-text: #b45309
147
152
  --color-neutral-text: var(--color-base-700)
148
- --color-energetic-text: theme(colors.citron.700)
149
- --color-error-text: theme(colors.red.700)
150
- --color-inverse: theme(colors.white)
153
+ --color-energetic-text: var(--color-citron-700)
154
+ --color-error-text: #b91c1c
155
+ --color-inverse: #ffffff
151
156
  --color-disabled: var(--color-base-400)
152
157
  /* Border Colors */
153
- --color-border: var(--color-base-200)
158
+ --color-border: var(--color-base-300)
154
159
  --color-border-weak: var(--color-base-300)
155
160
  --color-border-medium: var(--color-base-400)
156
161
  --color-border-strong: var(--color-base-500)
157
162
  /* Focus Colors */
158
- --color-focus: theme(colors.brand.500)
159
- --color-focus-weak: theme(colors.brand.600)
160
- --color-focus-medium: theme(colors.brand.700)
161
- --color-focus-strong: theme(colors.brand.800)
163
+ --color-focus: var(--color-brand-500)
164
+ --color-focus-weak: var(--color-brand-600)
165
+ --color-focus-medium: var(--color-brand-700)
166
+ --color-focus-strong: var(--color-brand-800)
167
+ /* Aliases for `ring-focus-ring`, `.focus-ring`, and form utils */
168
+ --color-focus-ring: var(--color-focus)
169
+ --color-focus-ring-offset: var(--color-card)
162
170
  /* Primary Colors */
163
- --color-primary: theme(colors.brand.600)
164
- --color-primary-weak: theme(colors.brand.700)
165
- --color-primary-medium: theme(colors.brand.800)
166
- --color-primary-strong: theme(colors.brand.900)
171
+ --color-primary: var(--color-brand-600)
172
+ --color-primary-weak: var(--color-brand-700)
173
+ --color-primary-medium: var(--color-brand-800)
174
+ --color-primary-strong: var(--color-brand-900)
167
175
  /* Secondary Colors */
168
176
  --color-secondary: var(--color-base-600)
169
177
  --color-secondary-weak: var(--color-base-700)
170
178
  --color-secondary-medium: var(--color-base-800)
171
179
  --color-secondary-strong: var(--color-base-900)
172
180
  /* Success Colors */
173
- --color-success: theme(colors.pine.600)
174
- --color-success-weak: theme(colors.pine.700)
175
- --color-success-medium: theme(colors.pine.800)
176
- --color-success-strong: theme(colors.pine.900)
181
+ --color-success: var(--color-pine-600)
182
+ --color-success-weak: var(--color-pine-700)
183
+ --color-success-medium: var(--color-pine-800)
184
+ --color-success-strong: var(--color-pine-900)
177
185
  /* Warning Colors */
178
- --color-warning: theme(colors.amber.500)
179
- --color-warning-weak: theme(colors.amber.600)
180
- --color-warning-medium: theme(colors.amber.400)
181
- --color-warning-strong: theme(colors.amber.300)
186
+ --color-warning: #f59e0b
187
+ --color-warning-weak: #d97706
188
+ --color-warning-medium: #fbbf24
189
+ --color-warning-strong: #fcd34d
182
190
  /* Error Colors */
183
- --color-error: theme(colors.red.500)
184
- --color-error-weak: theme(colors.red.600)
185
- --color-error-medium: theme(colors.red.400)
186
- --color-error-strong: theme(colors.red.300)
191
+ --color-error: #ef4444
192
+ --color-error-weak: #dc2626
193
+ --color-error-medium: #f87171
194
+ --color-error-strong: #fca5a5
187
195
  /* Energetic Colors (Citron) */
188
- --color-energetic: theme(colors.citron.500)
189
- --color-energetic-weak: theme(colors.citron.600)
190
- --color-energetic-medium: theme(colors.citron.400)
191
- --color-energetic-strong: theme(colors.citron.300)
196
+ --color-energetic: var(--color-citron-500)
197
+ --color-energetic-weak: var(--color-citron-600)
198
+ --color-energetic-medium: var(--color-citron-400)
199
+ --color-energetic-strong: var(--color-citron-300)
192
200
  /* Neutral Colors */
193
201
  --color-neutral: var(--color-base-600)
194
202
  --color-neutral-weak: var(--color-base-700)
195
203
  --color-neutral-medium: var(--color-base-800)
196
204
  --color-neutral-strong: var(--color-base-900)
197
205
  /* Info Colors */
198
- --color-info: theme(colors.iris.600)
199
- --color-info-weak: theme(colors.iris.700)
200
- --color-info-medium: theme(colors.iris.800)
201
- --color-info-strong: theme(colors.iris.900)
206
+ --color-info: var(--color-iris-600)
207
+ --color-info-weak: var(--color-iris-700)
208
+ --color-info-medium: var(--color-iris-800)
209
+ --color-info-strong: var(--color-iris-900)
202
210
  /* Text alias */
203
211
  --color-info-text: var(--color-info)
204
212
  /* ========================================
@@ -221,12 +229,12 @@
221
229
  --color-action-secondary-subtle: var(--color-brand-600)
222
230
  --color-action-secondary-subtle-hover: var(--color-brand-700)
223
231
  /* Danger Actions - Used by bg-action-danger utility class */
224
- --color-action-danger: theme(colors.red.600)
225
- --color-action-danger-hover: theme(colors.red.700)
226
- --color-action-danger-active: theme(colors.red.800)
227
- --color-action-danger-disabled: theme(colors.red.300)
228
- --color-action-danger-subtle: theme(colors.red.50)
229
- --color-action-danger-subtle-hover: theme(colors.red.100)
232
+ --color-action-danger: #dc2626
233
+ --color-action-danger-hover: #b91c1c
234
+ --color-action-danger-active: #991b1b
235
+ --color-action-danger-disabled: #fca5a5
236
+ --color-action-danger-subtle: #fef2f2
237
+ --color-action-danger-subtle-hover: #fee2e2
230
238
  /* Shadow Colors */
231
239
  --shadow-color: 0 0 0
232
240
  --shadow-opacity: 0.1
@@ -281,54 +289,54 @@
281
289
  --zabi-base-900: #18181b
282
290
  --zabi-base-925: #101013
283
291
  --zabi-base-950: #09090b
284
- /* Brand Color Scale - Dark mode variants */
285
- --color-brand-50: theme(colors.brand.950)
286
- --color-brand-100: theme(colors.brand.900)
287
- --color-brand-200: theme(colors.brand.800)
288
- --color-brand-300: theme(colors.brand.700)
289
- --color-brand-400: theme(colors.brand.600)
290
- --color-brand-500: theme(colors.brand.500)
291
- --color-brand-600: theme(colors.brand.400)
292
- --color-brand-700: theme(colors.brand.300)
293
- --color-brand-800: theme(colors.brand.200)
294
- --color-brand-900: theme(colors.brand.100)
295
- --color-brand-950: theme(colors.brand.50)
292
+ /* Brand Color Scale - Dark mode variants (mirrored from light physical hex; no theme() forward refs) */
293
+ --color-brand-50: #1f2866
294
+ --color-brand-100: #2f3c99
295
+ --color-brand-200: #3f4fc0
296
+ --color-brand-300: #5366e2
297
+ --color-brand-400: #6e84fa
298
+ --color-brand-500: #8fa8ff
299
+ --color-brand-600: #abc4ff
300
+ --color-brand-700: #ccdbfd
301
+ --color-brand-800: #dfe7fb
302
+ --color-brand-900: #edf2fb
303
+ --color-brand-950: #f7faff
296
304
  /* Citron Color Scale - Dark mode variants */
297
- --color-citron-50: theme(colors.citron.950)
298
- --color-citron-100: theme(colors.citron.900)
299
- --color-citron-200: theme(colors.citron.800)
300
- --color-citron-300: theme(colors.citron.700)
301
- --color-citron-400: theme(colors.citron.600)
302
- --color-citron-500: theme(colors.citron.500)
303
- --color-citron-600: theme(colors.citron.400)
304
- --color-citron-700: theme(colors.citron.300)
305
- --color-citron-800: theme(colors.citron.200)
306
- --color-citron-900: theme(colors.citron.100)
307
- --color-citron-950: theme(colors.citron.50)
305
+ --color-citron-50: #323518
306
+ --color-citron-100: #4d5229
307
+ --color-citron-200: #666c35
308
+ --color-citron-300: #848a43
309
+ --color-citron-400: #a3a852
310
+ --color-citron-500: #bbbe64
311
+ --color-citron-600: #c7d460
312
+ --color-citron-700: #d5e184
313
+ --color-citron-800: #e4ecaa
314
+ --color-citron-900: #f1f5cf
315
+ --color-citron-950: #f9faeb
308
316
  /* Pine Color Scale - Dark mode variants */
309
- --color-pine-50: theme(colors.pine.950)
310
- --color-pine-100: theme(colors.pine.900)
311
- --color-pine-200: theme(colors.pine.800)
312
- --color-pine-300: theme(colors.pine.700)
313
- --color-pine-400: theme(colors.pine.600)
314
- --color-pine-500: theme(colors.pine.500)
315
- --color-pine-600: theme(colors.pine.400)
316
- --color-pine-700: theme(colors.pine.300)
317
- --color-pine-800: theme(colors.pine.200)
318
- --color-pine-900: theme(colors.pine.100)
319
- --color-pine-950: theme(colors.pine.50)
317
+ --color-pine-50: #02160f
318
+ --color-pine-100: #04231a
319
+ --color-pine-200: #063a2a
320
+ --color-pine-300: #084532
321
+ --color-pine-400: #0a513a
322
+ --color-pine-500: #0c5d43
323
+ --color-pine-600: #49ad91
324
+ --color-pine-700: #78c4ad
325
+ --color-pine-800: #a7d9c9
326
+ --color-pine-900: #d2ece4
327
+ --color-pine-950: #e9f6f2
320
328
  /* Iris Color Scale - Dark mode variants */
321
- --color-iris-50: theme(colors.iris.950)
322
- --color-iris-100: theme(colors.iris.900)
323
- --color-iris-200: theme(colors.iris.800)
324
- --color-iris-300: theme(colors.iris.700)
325
- --color-iris-400: theme(colors.iris.600)
326
- --color-iris-500: theme(colors.iris.500)
327
- --color-iris-600: theme(colors.iris.400)
328
- --color-iris-700: theme(colors.iris.300)
329
- --color-iris-800: theme(colors.iris.200)
330
- --color-iris-900: theme(colors.iris.100)
331
- --color-iris-950: theme(colors.iris.50)
329
+ --color-iris-50: #1b1b37
330
+ --color-iris-100: #2a2a56
331
+ --color-iris-200: #38386f
332
+ --color-iris-300: #474788
333
+ --color-iris-400: #58589e
334
+ --color-iris-500: #6969b3
335
+ --color-iris-600: #a3a3d8
336
+ --color-iris-700: #bdbde6
337
+ --color-iris-800: #d6d6f0
338
+ --color-iris-900: #e9e9f7
339
+ --color-iris-950: #f4f4fa
332
340
  /* Base Color Scale — semantic → physical mirror (1000 − step); 500 is fixed point */
333
341
  --color-base-50: #09090b
334
342
  --color-base-75: #101013
@@ -358,6 +366,11 @@
358
366
  --color-card-hover: var(--color-base-300)
359
367
  --color-card-active: var(--color-base-400)
360
368
  --color-card-elevated: var(--color-base-200)
369
+ /* Surfaces — layered UI (each step is lighter than the previous to read as "elevated") */
370
+ --color-surface-1: var(--color-base-250)
371
+ --color-surface-2: var(--color-base-300)
372
+ --color-surface-3: var(--color-base-350)
373
+ --color-surface-4: var(--color-base-400)
361
374
  /* Overlay Colors */
362
375
  --color-overlay: rgba(0, 0, 0, 0.7)
363
376
  /* Input Colors */
@@ -372,32 +385,32 @@
372
385
  /* Primary Colors - No dark mode overrides needed, brand colors are already inverted */
373
386
  /* Secondary Colors - No dark mode overrides needed, base colors are already inverted */
374
387
  /* Success Colors */
375
- --color-success: theme(colors.pine.400)
376
- --color-success-weak: theme(colors.pine.500)
377
- --color-success-medium: theme(colors.pine.300)
378
- --color-success-strong: theme(colors.pine.200)
388
+ --color-success: var(--color-pine-400)
389
+ --color-success-weak: var(--color-pine-500)
390
+ --color-success-medium: var(--color-pine-300)
391
+ --color-success-strong: var(--color-pine-200)
379
392
  /* Warning Colors */
380
- --color-warning: theme(colors.amber.500)
381
- --color-warning-weak: theme(colors.amber.600)
382
- --color-warning-medium: theme(colors.amber.400)
383
- --color-warning-strong: theme(colors.amber.300)
393
+ --color-warning: #f59e0b
394
+ --color-warning-weak: #d97706
395
+ --color-warning-medium: #fbbf24
396
+ --color-warning-strong: #fcd34d
384
397
  /* Error Colors */
385
- --color-error: theme(colors.red.500)
386
- --color-error-weak: theme(colors.red.600)
387
- --color-error-medium: theme(colors.red.400)
388
- --color-error-strong: theme(colors.red.300)
398
+ --color-error: #ef4444
399
+ --color-error-weak: #dc2626
400
+ --color-error-medium: #f87171
401
+ --color-error-strong: #fca5a5
389
402
  /* Energetic Colors (Citron) */
390
- --color-energetic: theme(colors.citron.400)
391
- --color-energetic-weak: theme(colors.citron.500)
392
- --color-energetic-medium: theme(colors.citron.300)
393
- --color-energetic-strong: theme(colors.citron.200)
403
+ --color-energetic: var(--color-citron-400)
404
+ --color-energetic-weak: var(--color-citron-500)
405
+ --color-energetic-medium: var(--color-citron-300)
406
+ --color-energetic-strong: var(--color-citron-200)
394
407
  /* Neutral Colors - No dark mode overrides needed, base colors are already inverted */
395
408
  /* Info Colors */
396
- --color-info: theme(colors.iris.500)
397
- --color-info-weak: theme(colors.iris.600)
398
- --color-info-active: theme(colors.iris.400)
399
- --color-info-medium: theme(colors.iris.400)
400
- --color-info-strong: theme(colors.iris.300)
409
+ --color-info: var(--color-iris-500)
410
+ --color-info-weak: var(--color-iris-600)
411
+ --color-info-active: var(--color-iris-400)
412
+ --color-info-medium: var(--color-iris-400)
413
+ --color-info-strong: var(--color-iris-300)
401
414
  /* Text alias */
402
415
  --color-info-text: var(--color-info)
403
416
  /* ========================================
@@ -409,12 +422,12 @@
409
422
  --color-action-primary-text: var(--color-brand-50)
410
423
  /* Secondary Actions - No dark mode overrides needed, base colors are already inverted */
411
424
  /* Danger Actions */
412
- --color-action-danger: theme(colors.red.500)
413
- --color-action-danger-hover: theme(colors.red.600)
414
- --color-action-danger-active: theme(colors.red.700)
415
- --color-action-danger-disabled: theme(colors.red.700)
416
- --color-action-danger-subtle: theme(colors.red.950)
417
- --color-action-danger-subtle-hover: theme(colors.red.900)
425
+ --color-action-danger: #ef4444
426
+ --color-action-danger-hover: #dc2626
427
+ --color-action-danger-active: #b91c1c
428
+ --color-action-danger-disabled: #b91c1c
429
+ --color-action-danger-subtle: #450a0a
430
+ --color-action-danger-subtle-hover: #7f1d1d
418
431
  /* Shadow Colors */
419
432
  --shadow-opacity: 0.3
420
433
  --shadow-sm: 0 1px 3px 0 rgb(var(--shadow-color) / var(--shadow-opacity)), 0 1px 2px -1px rgb(var(--shadow-color) / var(--shadow-opacity))
@@ -23,54 +23,54 @@
23
23
  --zabi-base-900: #18181b
24
24
  --zabi-base-925: #101013
25
25
  --zabi-base-950: #09090b
26
- /* Brand Color Scale - Dark mode variants */
27
- --color-brand-50: theme(colors.brand.950)
28
- --color-brand-100: theme(colors.brand.900)
29
- --color-brand-200: theme(colors.brand.800)
30
- --color-brand-300: theme(colors.brand.700)
31
- --color-brand-400: theme(colors.brand.600)
32
- --color-brand-500: theme(colors.brand.500)
33
- --color-brand-600: theme(colors.brand.400)
34
- --color-brand-700: theme(colors.brand.300)
35
- --color-brand-800: theme(colors.brand.200)
36
- --color-brand-900: theme(colors.brand.100)
37
- --color-brand-950: theme(colors.brand.50)
26
+ /* Brand Color Scale - Dark mode variants (mirrored from light physical hex; no theme() forward refs) */
27
+ --color-brand-50: #1f2866
28
+ --color-brand-100: #2f3c99
29
+ --color-brand-200: #3f4fc0
30
+ --color-brand-300: #5366e2
31
+ --color-brand-400: #6e84fa
32
+ --color-brand-500: #8fa8ff
33
+ --color-brand-600: #abc4ff
34
+ --color-brand-700: #ccdbfd
35
+ --color-brand-800: #dfe7fb
36
+ --color-brand-900: #edf2fb
37
+ --color-brand-950: #f7faff
38
38
  /* Citron Color Scale - Dark mode variants */
39
- --color-citron-50: theme(colors.citron.950)
40
- --color-citron-100: theme(colors.citron.900)
41
- --color-citron-200: theme(colors.citron.800)
42
- --color-citron-300: theme(colors.citron.700)
43
- --color-citron-400: theme(colors.citron.600)
44
- --color-citron-500: theme(colors.citron.500)
45
- --color-citron-600: theme(colors.citron.400)
46
- --color-citron-700: theme(colors.citron.300)
47
- --color-citron-800: theme(colors.citron.200)
48
- --color-citron-900: theme(colors.citron.100)
49
- --color-citron-950: theme(colors.citron.50)
39
+ --color-citron-50: #323518
40
+ --color-citron-100: #4d5229
41
+ --color-citron-200: #666c35
42
+ --color-citron-300: #848a43
43
+ --color-citron-400: #a3a852
44
+ --color-citron-500: #bbbe64
45
+ --color-citron-600: #c7d460
46
+ --color-citron-700: #d5e184
47
+ --color-citron-800: #e4ecaa
48
+ --color-citron-900: #f1f5cf
49
+ --color-citron-950: #f9faeb
50
50
  /* Pine Color Scale - Dark mode variants */
51
- --color-pine-50: theme(colors.pine.950)
52
- --color-pine-100: theme(colors.pine.900)
53
- --color-pine-200: theme(colors.pine.800)
54
- --color-pine-300: theme(colors.pine.700)
55
- --color-pine-400: theme(colors.pine.600)
56
- --color-pine-500: theme(colors.pine.500)
57
- --color-pine-600: theme(colors.pine.400)
58
- --color-pine-700: theme(colors.pine.300)
59
- --color-pine-800: theme(colors.pine.200)
60
- --color-pine-900: theme(colors.pine.100)
61
- --color-pine-950: theme(colors.pine.50)
51
+ --color-pine-50: #02160f
52
+ --color-pine-100: #04231a
53
+ --color-pine-200: #063a2a
54
+ --color-pine-300: #084532
55
+ --color-pine-400: #0a513a
56
+ --color-pine-500: #0c5d43
57
+ --color-pine-600: #49ad91
58
+ --color-pine-700: #78c4ad
59
+ --color-pine-800: #a7d9c9
60
+ --color-pine-900: #d2ece4
61
+ --color-pine-950: #e9f6f2
62
62
  /* Iris Color Scale - Dark mode variants */
63
- --color-iris-50: theme(colors.iris.950)
64
- --color-iris-100: theme(colors.iris.900)
65
- --color-iris-200: theme(colors.iris.800)
66
- --color-iris-300: theme(colors.iris.700)
67
- --color-iris-400: theme(colors.iris.600)
68
- --color-iris-500: theme(colors.iris.500)
69
- --color-iris-600: theme(colors.iris.400)
70
- --color-iris-700: theme(colors.iris.300)
71
- --color-iris-800: theme(colors.iris.200)
72
- --color-iris-900: theme(colors.iris.100)
73
- --color-iris-950: theme(colors.iris.50)
63
+ --color-iris-50: #1b1b37
64
+ --color-iris-100: #2a2a56
65
+ --color-iris-200: #38386f
66
+ --color-iris-300: #474788
67
+ --color-iris-400: #58589e
68
+ --color-iris-500: #6969b3
69
+ --color-iris-600: #a3a3d8
70
+ --color-iris-700: #bdbde6
71
+ --color-iris-800: #d6d6f0
72
+ --color-iris-900: #e9e9f7
73
+ --color-iris-950: #f4f4fa
74
74
  /* Base Color Scale — semantic → physical mirror (1000 − step); 500 is fixed point */
75
75
  --color-base-50: #09090b
76
76
  --color-base-75: #101013
@@ -100,6 +100,11 @@
100
100
  --color-card-hover: var(--color-base-300)
101
101
  --color-card-active: var(--color-base-400)
102
102
  --color-card-elevated: var(--color-base-200)
103
+ /* Surfaces — layered UI (each step is lighter than the previous to read as "elevated") */
104
+ --color-surface-1: var(--color-base-250)
105
+ --color-surface-2: var(--color-base-300)
106
+ --color-surface-3: var(--color-base-350)
107
+ --color-surface-4: var(--color-base-400)
103
108
  /* Overlay Colors */
104
109
  --color-overlay: rgba(0, 0, 0, 0.7)
105
110
  /* Input Colors */
@@ -114,32 +119,32 @@
114
119
  /* Primary Colors - No dark mode overrides needed, brand colors are already inverted */
115
120
  /* Secondary Colors - No dark mode overrides needed, base colors are already inverted */
116
121
  /* Success Colors */
117
- --color-success: theme(colors.pine.400)
118
- --color-success-weak: theme(colors.pine.500)
119
- --color-success-medium: theme(colors.pine.300)
120
- --color-success-strong: theme(colors.pine.200)
122
+ --color-success: var(--color-pine-400)
123
+ --color-success-weak: var(--color-pine-500)
124
+ --color-success-medium: var(--color-pine-300)
125
+ --color-success-strong: var(--color-pine-200)
121
126
  /* Warning Colors */
122
- --color-warning: theme(colors.amber.500)
123
- --color-warning-weak: theme(colors.amber.600)
124
- --color-warning-medium: theme(colors.amber.400)
125
- --color-warning-strong: theme(colors.amber.300)
127
+ --color-warning: #f59e0b
128
+ --color-warning-weak: #d97706
129
+ --color-warning-medium: #fbbf24
130
+ --color-warning-strong: #fcd34d
126
131
  /* Error Colors */
127
- --color-error: theme(colors.red.500)
128
- --color-error-weak: theme(colors.red.600)
129
- --color-error-medium: theme(colors.red.400)
130
- --color-error-strong: theme(colors.red.300)
132
+ --color-error: #ef4444
133
+ --color-error-weak: #dc2626
134
+ --color-error-medium: #f87171
135
+ --color-error-strong: #fca5a5
131
136
  /* Energetic Colors (Citron) */
132
- --color-energetic: theme(colors.citron.400)
133
- --color-energetic-weak: theme(colors.citron.500)
134
- --color-energetic-medium: theme(colors.citron.300)
135
- --color-energetic-strong: theme(colors.citron.200)
137
+ --color-energetic: var(--color-citron-400)
138
+ --color-energetic-weak: var(--color-citron-500)
139
+ --color-energetic-medium: var(--color-citron-300)
140
+ --color-energetic-strong: var(--color-citron-200)
136
141
  /* Neutral Colors - No dark mode overrides needed, base colors are already inverted */
137
142
  /* Info Colors */
138
- --color-info: theme(colors.iris.500)
139
- --color-info-weak: theme(colors.iris.600)
140
- --color-info-active: theme(colors.iris.400)
141
- --color-info-medium: theme(colors.iris.400)
142
- --color-info-strong: theme(colors.iris.300)
143
+ --color-info: var(--color-iris-500)
144
+ --color-info-weak: var(--color-iris-600)
145
+ --color-info-active: var(--color-iris-400)
146
+ --color-info-medium: var(--color-iris-400)
147
+ --color-info-strong: var(--color-iris-300)
143
148
  /* Text alias */
144
149
  --color-info-text: var(--color-info)
145
150
  /* ========================================
@@ -151,12 +156,12 @@
151
156
  --color-action-primary-text: var(--color-brand-50)
152
157
  /* Secondary Actions - No dark mode overrides needed, base colors are already inverted */
153
158
  /* Danger Actions */
154
- --color-action-danger: theme(colors.red.500)
155
- --color-action-danger-hover: theme(colors.red.600)
156
- --color-action-danger-active: theme(colors.red.700)
157
- --color-action-danger-disabled: theme(colors.red.700)
158
- --color-action-danger-subtle: theme(colors.red.950)
159
- --color-action-danger-subtle-hover: theme(colors.red.900)
159
+ --color-action-danger: #ef4444
160
+ --color-action-danger-hover: #dc2626
161
+ --color-action-danger-active: #b91c1c
162
+ --color-action-danger-disabled: #b91c1c
163
+ --color-action-danger-subtle: #450a0a
164
+ --color-action-danger-subtle-hover: #7f1d1d
160
165
  /* Shadow Colors */
161
166
  --shadow-opacity: 0.3
162
167
  --shadow-sm: 0 1px 3px 0 rgb(var(--shadow-color) / var(--shadow-opacity)), 0 1px 2px -1px rgb(var(--shadow-color) / var(--shadow-opacity))