czero 0.2.0 → 0.2.5

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 (62) hide show
  1. package/README.md +209 -209
  2. package/dist/cli/index.js +970 -72
  3. package/dist/components.css +2158 -1913
  4. package/dist/react/core/component-defaults.d.ts.map +1 -1
  5. package/dist/react/core/types/config.d.ts +161 -2
  6. package/dist/react/core/types/config.d.ts.map +1 -1
  7. package/dist/react/index.cjs +695 -12
  8. package/dist/react/index.cjs.map +1 -1
  9. package/dist/react/index.d.ts +138 -11
  10. package/dist/react/index.js +693 -13
  11. package/dist/react/index.js.map +1 -1
  12. package/dist/react/react/components/button.d.ts +1 -0
  13. package/dist/react/react/components/button.d.ts.map +1 -1
  14. package/dist/react/react/components/data-table.d.ts +39 -0
  15. package/dist/react/react/components/data-table.d.ts.map +1 -0
  16. package/dist/react/react/components/input.d.ts +5 -2
  17. package/dist/react/react/components/input.d.ts.map +1 -1
  18. package/dist/react/react/components/modal.d.ts +44 -0
  19. package/dist/react/react/components/modal.d.ts.map +1 -0
  20. package/dist/react/react/components/search-input.d.ts +13 -0
  21. package/dist/react/react/components/search-input.d.ts.map +1 -0
  22. package/dist/react/react/components/status-badge.d.ts +11 -0
  23. package/dist/react/react/components/status-badge.d.ts.map +1 -0
  24. package/dist/react/react/components/tabs.d.ts +42 -7
  25. package/dist/react/react/components/tabs.d.ts.map +1 -1
  26. package/dist/react/react/index.d.ts +4 -1
  27. package/dist/react/react/index.d.ts.map +1 -1
  28. package/dist/reset.css +6 -15
  29. package/dist/styles.css +2244 -2008
  30. package/package.json +93 -92
  31. package/dist/cli-new/cli/build-css.d.ts +0 -19
  32. package/dist/cli-new/cli/build-css.js +0 -88
  33. package/dist/cli-new/cli/generators/button.d.ts +0 -9
  34. package/dist/cli-new/cli/generators/button.js +0 -224
  35. package/dist/cli-new/cli/generators/card.d.ts +0 -9
  36. package/dist/cli-new/cli/generators/card.js +0 -104
  37. package/dist/cli-new/cli/generators/checkbox.d.ts +0 -6
  38. package/dist/cli-new/cli/generators/checkbox.js +0 -163
  39. package/dist/cli-new/cli/generators/index.d.ts +0 -10
  40. package/dist/cli-new/cli/generators/index.js +0 -40
  41. package/dist/cli-new/cli/generators/input.d.ts +0 -9
  42. package/dist/cli-new/cli/generators/input.js +0 -231
  43. package/dist/cli-new/cli/generators/switch.d.ts +0 -6
  44. package/dist/cli-new/cli/generators/switch.js +0 -156
  45. package/dist/cli-new/cli/generators/utilities.d.ts +0 -9
  46. package/dist/cli-new/cli/generators/utilities.js +0 -150
  47. package/dist/cli-new/cli/index.d.ts +0 -8
  48. package/dist/cli-new/cli/index.js +0 -288
  49. package/dist/cli-new/cli/token-resolver.d.ts +0 -44
  50. package/dist/cli-new/cli/token-resolver.js +0 -137
  51. package/dist/cli-new/cli/utils/deep-merge.d.ts +0 -15
  52. package/dist/cli-new/cli/utils/deep-merge.js +0 -41
  53. package/dist/cli-new/cli/validate-config.d.ts +0 -19
  54. package/dist/cli-new/cli/validate-config.js +0 -151
  55. package/dist/cli-new/src/core/component-defaults.d.ts +0 -7
  56. package/dist/cli-new/src/core/component-defaults.js +0 -467
  57. package/dist/cli-new/src/core/types/config.d.ts +0 -489
  58. package/dist/cli-new/src/core/types/config.js +0 -5
  59. package/dist/cli-new/src/presets/index.d.ts +0 -44
  60. package/dist/cli-new/src/presets/index.js +0 -194
  61. package/dist/react/react/lib/cn.d.ts +0 -7
  62. package/dist/react/react/lib/cn.d.ts.map +0 -1
package/dist/styles.css CHANGED
@@ -1,2008 +1,2244 @@
1
- /**
2
- * CZero Minimal Reset
3
- */
4
-
5
- *, *::before, *::after {
6
- box-sizing: border-box;
7
- }
8
-
9
- * {
10
- margin: 0;
11
- }
12
-
13
- body {
14
- line-height: var(--cz-font-lineHeight-normal);
15
- -webkit-font-smoothing: antialiased;
16
- font-family: var(--cz-font-fontFamily);
17
- }
18
-
19
- button, input, textarea, select {
20
- font: inherit;
21
- }
22
- /**
23
- * CZero Design Tokens
24
- * Auto-generated from theme.config.ts - DO NOT EDIT MANUALLY
25
- */
26
-
27
- :root {
28
- --cz-color-bg: 0 0% 100%;
29
- --cz-color-fg: 220 15% 10%;
30
- --cz-color-primary: 222 47% 45%;
31
- --cz-color-primaryFg: 0 0% 100%;
32
- --cz-color-secondary: 220 10% 95%;
33
- --cz-color-secondaryFg: 220 15% 10%;
34
- --cz-color-muted: 220 10% 95%;
35
- --cz-color-mutedFg: 220 10% 40%;
36
- --cz-color-danger: 0 70% 55%;
37
- --cz-color-dangerFg: 0 0% 100%;
38
- --cz-color-success: 142 70% 45%;
39
- --cz-color-successFg: 0 0% 100%;
40
- --cz-color-warning: 38 92% 50%;
41
- --cz-color-warningFg: 0 0% 100%;
42
- --cz-color-border: 220 13% 90%;
43
- --cz-color-ring: 222 47% 45%;
44
- --cz-radius-none: 0;
45
- --cz-radius-sm: 0.25rem;
46
- --cz-radius-md: 0.5rem;
47
- --cz-radius-lg: 0.75rem;
48
- --cz-radius-xl: 1rem;
49
- --cz-radius-full: 9999px;
50
- --cz-shadow-none: none;
51
- --cz-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.05);
52
- --cz-shadow-md: 0 2px 4px rgb(0 0 0 / 0.08);
53
- --cz-shadow-lg: 0 4px 12px rgb(0 0 0 / 0.12);
54
- --cz-spacing-xs: 0.25rem;
55
- --cz-spacing-sm: 0.5rem;
56
- --cz-spacing-md: 0.75rem;
57
- --cz-spacing-lg: 1rem;
58
- --cz-spacing-xl: 1.5rem;
59
- --cz-spacing-2xl: 2rem;
60
- --cz-transition-fast: 150ms ease;
61
- --cz-transition-normal: 200ms ease;
62
- --cz-transition-slow: 300ms ease;
63
- --cz-font-fontFamily: Inter, system-ui, -apple-system, sans-serif;
64
- --cz-font-size-xs: 0.75rem;
65
- --cz-font-size-sm: 0.875rem;
66
- --cz-font-size-md: 1rem;
67
- --cz-font-size-lg: 1.125rem;
68
- --cz-font-size-xl: 1.25rem;
69
- --cz-font-weight-normal: 400;
70
- --cz-font-weight-medium: 500;
71
- --cz-font-weight-semibold: 600;
72
- --cz-font-weight-bold: 700;
73
- --cz-font-lineHeight-tight: 1.25;
74
- --cz-font-lineHeight-normal: 1.5;
75
- --cz-font-lineHeight-relaxed: 1.75;
76
- }
77
-
78
- .dark {
79
- --cz-color-bg: 220 40% 3%;
80
- --cz-color-fg: 210 40% 96%;
81
- --cz-color-primary: 210 80% 65%;
82
- --cz-color-primaryFg: 220 40% 3%;
83
- --cz-color-secondary: 220 8% 25%;
84
- --cz-color-secondaryFg: 210 40% 96%;
85
- --cz-color-muted: 220 8% 20%;
86
- --cz-color-mutedFg: 220 10% 60%;
87
- --cz-color-danger: 0 80% 65%;
88
- --cz-color-dangerFg: 0 0% 100%;
89
- --cz-color-success: 142 70% 55%;
90
- --cz-color-successFg: 0 0% 100%;
91
- --cz-color-warning: 38 92% 60%;
92
- --cz-color-warningFg: 0 0% 0%;
93
- --cz-color-border: 220 10% 20%;
94
- --cz-color-ring: 210 80% 65%;
95
- }
96
- /**
97
- * CZero Component Styles
98
- * Pure CSS using --cz-* design tokens
99
- */
100
-
101
- /* ===== UTILITIES ===== */
102
-
103
- /* Display */
104
- .cz-inline-flex { display: inline-flex; }
105
- .cz-flex { display: flex; }
106
- .cz-flex-col { flex-direction: column; }
107
- .cz-items-center { align-items: center; }
108
- .cz-justify-center { justify-content: center; }
109
- .cz-flex-wrap { flex-wrap: wrap; }
110
-
111
- /* Gap */
112
- .cz-gap-1 { gap: 0.25rem; }
113
- .cz-gap-1\.5 { gap: 0.375rem; }
114
- .cz-gap-2 { gap: 0.5rem; }
115
-
116
- /* Width */
117
- .cz-w-full { width: 100%; }
118
-
119
- /* Whitespace */
120
- .cz-whitespace-nowrap { white-space: nowrap; }
121
-
122
- /* Opacity */
123
- .cz-opacity-25 { opacity: 0.25; }
124
- .cz-opacity-50 { opacity: 0.5; }
125
- .cz-opacity-75 { opacity: 0.75; }
126
-
127
- /* Animation */
128
- @keyframes cz-spin {
129
- from { transform: rotate(0deg); }
130
- to { transform: rotate(360deg); }
131
- }
132
- .cz-animate-spin { animation: cz-spin 1s linear infinite; }
133
-
134
- /* Sizing */
135
- .cz-h-4 { height: 1rem; }
136
- .cz-w-4 { width: 1rem; }
137
- .cz-h-8 { height: 2rem; }
138
- .cz-h-10 { height: 2.5rem; }
139
- .cz-h-12 { height: 3rem; }
140
-
141
- /* Padding */
142
- .cz-px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }
143
- .cz-px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }
144
- .cz-px-4 { padding-left: 1rem; padding-right: 1rem; }
145
- .cz-px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }
146
- .cz-py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; }
147
- .cz-p-lg { padding: var(--cz-spacing-lg); }
148
- .cz-pb-md { padding-bottom: var(--cz-spacing-md); }
149
- .cz-pt-md { padding-top: var(--cz-spacing-md); }
150
- .cz-px-1\.5 { padding-left: 0.375rem; padding-right: 0.375rem; }
151
-
152
- /* Margin */
153
- .cz-mb-md { margin-bottom: var(--cz-spacing-md); }
154
- .cz-mt-md { margin-top: var(--cz-spacing-md); }
155
-
156
- /* Typography */
157
- .cz-text-xs { font-size: var(--cz-font-size-xs); }
158
- .cz-text-sm { font-size: var(--cz-font-size-sm); }
159
- .cz-text-md { font-size: var(--cz-font-size-md); }
160
- .cz-text-lg { font-size: var(--cz-font-size-lg); }
161
- .cz-font-medium { font-weight: var(--cz-font-weight-medium); }
162
- .cz-font-semibold { font-weight: var(--cz-font-weight-semibold); }
163
- .cz-leading-tight { line-height: var(--cz-font-lineHeight-tight); }
164
-
165
- /* Colors - Background */
166
- .cz-bg-bg { background-color: hsl(var(--cz-color-bg)); }
167
- .cz-bg-primary { background-color: hsl(var(--cz-color-primary)); }
168
- .cz-bg-secondary { background-color: hsl(var(--cz-color-secondary)); }
169
- .cz-bg-muted { background-color: hsl(var(--cz-color-muted)); }
170
- .cz-bg-danger { background-color: hsl(var(--cz-color-danger)); }
171
- .cz-bg-success { background-color: hsl(var(--cz-color-success)); }
172
- .cz-bg-warning { background-color: hsl(var(--cz-color-warning)); }
173
- .cz-bg-transparent { background-color: transparent; }
174
-
175
- /* Colors - Text */
176
- .cz-text-fg { color: hsl(var(--cz-color-fg)); }
177
- .cz-text-primary-fg { color: hsl(var(--cz-color-primaryFg)); }
178
- .cz-text-secondary-fg { color: hsl(var(--cz-color-secondaryFg)); }
179
- .cz-text-muted-fg { color: hsl(var(--cz-color-mutedFg)); }
180
- .cz-text-danger { color: hsl(var(--cz-color-danger)); }
181
- .cz-text-danger-fg { color: hsl(var(--cz-color-dangerFg)); }
182
- .cz-text-success-fg { color: hsl(var(--cz-color-successFg)); }
183
- .cz-text-warning-fg { color: hsl(var(--cz-color-warningFg)); }
184
-
185
- /* Border */
186
- .cz-border { border-width: 1px; border-style: solid; }
187
- .cz-border-b { border-bottom-width: 1px; border-bottom-style: solid; }
188
- .cz-border-t { border-top-width: 1px; border-top-style: solid; }
189
- .cz-border-border { border-color: hsl(var(--cz-color-border)); }
190
- .cz-border-danger { border-color: hsl(var(--cz-color-danger)); }
191
-
192
- /* Border Radius */
193
- .cz-rounded-sm { border-radius: var(--cz-radius-sm); }
194
- .cz-rounded-md { border-radius: var(--cz-radius-md); }
195
- .cz-rounded-lg { border-radius: var(--cz-radius-lg); }
196
- .cz-rounded-full { border-radius: var(--cz-radius-full); }
197
-
198
- /* Shadow */
199
- .cz-shadow-sm { box-shadow: var(--cz-shadow-sm); }
200
-
201
- /* Transitions */
202
- .cz-transition { transition: all var(--cz-transition-fast); }
203
-
204
- /* States */
205
- .cz-disabled {
206
- pointer-events: none;
207
- opacity: 0.5;
208
- cursor: not-allowed;
209
- }
210
-
211
- /* Focus */
212
- .cz-focus-ring:focus {
213
- outline: none;
214
- box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
215
- }
216
-
217
- .cz-focus-ring:focus-visible {
218
- outline: none;
219
- box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
220
- }
221
-
222
- /* Hover states */
223
- .cz-hover-opacity:hover { opacity: 0.9; }
224
- .cz-hover-muted:hover { background-color: hsl(var(--cz-color-muted)); }
225
-
226
- /* ===== BUTTON ===== */
227
-
228
- .cz-btn {
229
- display: inline-flex;
230
- align-items: center;
231
- justify-content: center;
232
- gap: 0.5rem;
233
- border-radius: var(--cz-radius-md);
234
- font-weight: var(--cz-font-weight-medium);
235
- transition: all var(--cz-transition-fast);
236
- cursor: pointer;
237
- border: none;
238
- }
239
-
240
- .cz-btn:focus-visible {
241
- outline: none;
242
- box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
243
- }
244
-
245
- .cz-btn:disabled {
246
- pointer-events: none;
247
- opacity: 0.5;
248
- }
249
-
250
- /* Button Sizes */
251
- .cz-btn-sm { height: 2rem; padding: 0 0.75rem; font-size: var(--cz-font-size-sm); }
252
- .cz-btn-md { height: 2.5rem; padding: 0 1rem; font-size: var(--cz-font-size-md); }
253
- .cz-btn-lg { height: 3rem; padding: 0 1.5rem; font-size: var(--cz-font-size-lg); }
254
-
255
- /* Button Variants */
256
- .cz-btn-primary {
257
- background-color: hsl(var(--cz-color-primary));
258
- color: hsl(var(--cz-color-primaryFg));
259
- }
260
- .cz-btn-primary:hover { opacity: 0.9; }
261
-
262
- .cz-btn-secondary {
263
- background-color: hsl(var(--cz-color-secondary));
264
- color: hsl(var(--cz-color-secondaryFg));
265
- }
266
- .cz-btn-secondary:hover { opacity: 0.8; }
267
-
268
- .cz-btn-outline {
269
- background-color: transparent;
270
- border: 1px solid hsl(var(--cz-color-border));
271
- color: hsl(var(--cz-color-fg));
272
- }
273
- .cz-btn-outline:hover { background-color: hsl(var(--cz-color-muted)); }
274
-
275
- .cz-btn-ghost {
276
- background-color: transparent;
277
- color: hsl(var(--cz-color-fg));
278
- }
279
- .cz-btn-ghost:hover { background-color: hsl(var(--cz-color-muted)); }
280
-
281
- .cz-btn-danger {
282
- background-color: hsl(var(--cz-color-danger));
283
- color: hsl(var(--cz-color-dangerFg));
284
- }
285
- .cz-btn-danger:hover { opacity: 0.9; }
286
-
287
- .cz-btn-link {
288
- background-color: transparent;
289
- color: hsl(var(--cz-color-primary));
290
- text-decoration: underline;
291
- text-underline-offset: 4px;
292
- }
293
- .cz-btn-link:hover { text-decoration-thickness: 2px; }
294
-
295
- /* Button Icon Size */
296
- .cz-btn-icon {
297
- width: 2.5rem;
298
- height: 2.5rem;
299
- padding: 0;
300
- }
301
- .cz-btn-icon.cz-btn-sm { width: 2rem; height: 2rem; }
302
- .cz-btn-icon.cz-btn-lg { width: 3rem; height: 3rem; }
303
-
304
- /* Button Loading State */
305
- .cz-btn-loading { position: relative; }
306
- .cz-btn-spinner {
307
- width: 1rem;
308
- height: 1rem;
309
- animation: cz-spin 0.75s linear infinite;
310
- flex-shrink: 0;
311
- }
312
- .cz-btn-content { opacity: 1; }
313
-
314
- /* ===== INPUT ===== */
315
-
316
- .cz-input-field {
317
- display: flex;
318
- flex-direction: column;
319
- gap: 0.375rem;
320
- }
321
-
322
- .cz-input-wrapper {
323
- position: relative;
324
- display: flex;
325
- align-items: center;
326
- width: 100%;
327
- }
328
-
329
- .cz-input {
330
- width: 100%;
331
- border-radius: var(--cz-radius-md);
332
- border: 1px solid hsl(var(--cz-color-border));
333
- background-color: hsl(var(--cz-color-bg));
334
- color: hsl(var(--cz-color-fg));
335
- transition: all var(--cz-transition-fast);
336
- }
337
-
338
- .cz-input::placeholder {
339
- color: hsl(var(--cz-color-mutedFg));
340
- }
341
-
342
- .cz-input:focus {
343
- outline: none;
344
- border-color: hsl(var(--cz-color-ring));
345
- box-shadow: 0 0 0 2px hsl(var(--cz-color-ring) / 0.2);
346
- }
347
-
348
- .cz-input:disabled {
349
- cursor: not-allowed;
350
- opacity: 0.5;
351
- }
352
-
353
- .cz-input-error {
354
- border-color: hsl(var(--cz-color-danger));
355
- }
356
- .cz-input-error:focus {
357
- border-color: hsl(var(--cz-color-danger));
358
- box-shadow: 0 0 0 2px hsl(var(--cz-color-danger) / 0.2);
359
- }
360
-
361
- /* Input with Icons */
362
- .cz-input-has-left-icon .cz-input { padding-left: 2.5rem; }
363
- .cz-input-has-right-icon .cz-input { padding-right: 2.5rem; }
364
-
365
- .cz-input-icon {
366
- position: absolute;
367
- display: flex;
368
- align-items: center;
369
- justify-content: center;
370
- width: 2.5rem;
371
- height: 100%;
372
- color: hsl(var(--cz-color-mutedFg));
373
- pointer-events: none;
374
- }
375
- .cz-input-icon svg { width: 1rem; height: 1rem; }
376
- .cz-input-icon-left { left: 0; }
377
- .cz-input-icon-right { right: 0; }
378
-
379
- /* Input Clear Button */
380
- .cz-input-clear {
381
- position: absolute;
382
- right: 0;
383
- display: flex;
384
- align-items: center;
385
- justify-content: center;
386
- width: 2.5rem;
387
- height: 100%;
388
- color: hsl(var(--cz-color-mutedFg));
389
- background: transparent;
390
- border: none;
391
- cursor: pointer;
392
- transition: color var(--cz-transition-fast);
393
- }
394
- .cz-input-clear:hover { color: hsl(var(--cz-color-fg)); }
395
- .cz-input-clear svg { width: 0.875rem; height: 0.875rem; }
396
-
397
- /* Input Description */
398
- .cz-input-description {
399
- font-size: var(--cz-font-size-xs);
400
- color: hsl(var(--cz-color-mutedFg));
401
- }
402
-
403
- /* Input Sizes */
404
- .cz-input-sm { height: 2rem; padding: 0 0.5rem; font-size: var(--cz-font-size-sm); }
405
- .cz-input-md { height: 2.5rem; padding: 0 0.75rem; font-size: var(--cz-font-size-md); }
406
- .cz-input-lg { height: 3rem; padding: 0 1rem; font-size: var(--cz-font-size-lg); }
407
-
408
-
409
- /* ===== CARD ===== */
410
-
411
- .cz-card {
412
- border-radius: var(--cz-radius-lg);
413
- border: 1px solid hsl(var(--cz-color-border));
414
- background-color: hsl(var(--cz-color-bg));
415
- box-shadow: var(--cz-shadow-sm);
416
- padding: var(--cz-spacing-lg);
417
- }
418
-
419
- .cz-card-no-padding {
420
- padding: 0;
421
- }
422
-
423
- .cz-card-header {
424
- display: flex;
425
- flex-direction: column;
426
- gap: 0.375rem;
427
- padding-bottom: var(--cz-spacing-md);
428
- border-bottom: 1px solid hsl(var(--cz-color-border));
429
- margin-bottom: var(--cz-spacing-md);
430
- }
431
-
432
- .cz-card-title {
433
- font-size: var(--cz-font-size-lg);
434
- font-weight: var(--cz-font-weight-semibold);
435
- color: hsl(var(--cz-color-fg));
436
- line-height: var(--cz-font-lineHeight-tight);
437
- }
438
-
439
- .cz-card-description {
440
- font-size: var(--cz-font-size-sm);
441
- color: hsl(var(--cz-color-mutedFg));
442
- }
443
-
444
- .cz-card-body {
445
- color: hsl(var(--cz-color-fg));
446
- }
447
-
448
- .cz-card-footer {
449
- display: flex;
450
- align-items: center;
451
- gap: 0.5rem;
452
- padding-top: var(--cz-spacing-md);
453
- margin-top: var(--cz-spacing-md);
454
- border-top: 1px solid hsl(var(--cz-color-border));
455
- }
456
-
457
- /* ===== BADGE ===== */
458
-
459
- .cz-badge {
460
- display: inline-flex;
461
- align-items: center;
462
- border-radius: var(--cz-radius-full);
463
- font-weight: var(--cz-font-weight-medium);
464
- white-space: nowrap;
465
- }
466
-
467
- /* Badge Sizes */
468
- .cz-badge-sm { padding: 0.125rem 0.375rem; font-size: 0.7rem; }
469
- .cz-badge-md { padding: 0.125rem 0.5rem; font-size: var(--cz-font-size-xs); }
470
-
471
- /* Badge Variants */
472
- .cz-badge-default {
473
- background-color: hsl(var(--cz-color-secondary));
474
- color: hsl(var(--cz-color-secondaryFg));
475
- }
476
-
477
- .cz-badge-primary {
478
- background-color: hsl(var(--cz-color-primary));
479
- color: hsl(var(--cz-color-primaryFg));
480
- }
481
-
482
- .cz-badge-success {
483
- background-color: hsl(var(--cz-color-success));
484
- color: hsl(var(--cz-color-successFg));
485
- }
486
-
487
- .cz-badge-danger {
488
- background-color: hsl(var(--cz-color-danger));
489
- color: hsl(var(--cz-color-dangerFg));
490
- }
491
-
492
- .cz-badge-warning {
493
- background-color: hsl(var(--cz-color-warning));
494
- color: hsl(var(--cz-color-warningFg));
495
- }
496
-
497
- .cz-badge-outline {
498
- background-color: transparent;
499
- border: 1px solid hsl(var(--cz-color-border));
500
- color: hsl(var(--cz-color-fg));
501
- }
502
-
503
- /* ===== LABEL ===== */
504
-
505
- .cz-label {
506
- font-size: var(--cz-font-size-sm);
507
- font-weight: var(--cz-font-weight-medium);
508
- color: hsl(var(--cz-color-fg));
509
- }
510
-
511
- /* ===== ERROR TEXT ===== */
512
-
513
- .cz-error {
514
- font-size: var(--cz-font-size-sm);
515
- color: hsl(var(--cz-color-danger));
516
- }
517
-
518
- /* ===== TEXTAREA ===== */
519
-
520
- .cz-textarea-field {
521
- display: flex;
522
- flex-direction: column;
523
- gap: 0.375rem;
524
- }
525
-
526
- .cz-textarea {
527
- width: 100%;
528
- min-height: 5rem;
529
- border-radius: var(--cz-radius-md);
530
- border: 1px solid hsl(var(--cz-color-border));
531
- background-color: hsl(var(--cz-color-bg));
532
- color: hsl(var(--cz-color-fg));
533
- transition: all var(--cz-transition-fast);
534
- resize: vertical;
535
- font-family: inherit;
536
- }
537
-
538
- .cz-textarea::placeholder {
539
- color: hsl(var(--cz-color-mutedFg));
540
- }
541
-
542
- .cz-textarea:focus {
543
- outline: none;
544
- border-color: hsl(var(--cz-color-ring));
545
- box-shadow: 0 0 0 2px hsl(var(--cz-color-ring) / 0.2);
546
- }
547
-
548
- .cz-textarea:disabled {
549
- cursor: not-allowed;
550
- opacity: 0.5;
551
- }
552
-
553
- .cz-textarea-error {
554
- border-color: hsl(var(--cz-color-danger));
555
- }
556
- .cz-textarea-error:focus {
557
- border-color: hsl(var(--cz-color-danger));
558
- box-shadow: 0 0 0 2px hsl(var(--cz-color-danger) / 0.2);
559
- }
560
-
561
- .cz-textarea-auto-resize {
562
- overflow: hidden;
563
- resize: none;
564
- }
565
-
566
- .cz-textarea-description {
567
- font-size: var(--cz-font-size-xs);
568
- color: hsl(var(--cz-color-mutedFg));
569
- }
570
-
571
- /* Textarea Sizes */
572
- .cz-textarea-sm { padding: 0.375rem 0.5rem; font-size: var(--cz-font-size-sm); }
573
- .cz-textarea-md { padding: 0.5rem 0.75rem; font-size: var(--cz-font-size-md); }
574
- .cz-textarea-lg { padding: 0.75rem 1rem; font-size: var(--cz-font-size-lg); }
575
-
576
- /* ===== SWITCH ===== */
577
-
578
- .cz-switch {
579
- all: unset;
580
- box-sizing: border-box;
581
- display: inline-flex;
582
- align-items: center;
583
- position: relative;
584
- width: 2.75rem;
585
- height: 1.5rem;
586
- border-radius: var(--cz-radius-full);
587
- background-color: hsl(var(--cz-color-muted));
588
- transition: all var(--cz-transition-fast);
589
- cursor: pointer;
590
- }
591
-
592
- .cz-switch:focus-visible {
593
- outline: none;
594
- box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
595
- }
596
-
597
- .cz-switch[data-state="checked"] {
598
- background-color: hsl(var(--cz-color-primary));
599
- }
600
-
601
- .cz-switch.cz-switch-checked {
602
- background-color: hsl(var(--cz-color-primary));
603
- }
604
-
605
- .cz-switch.cz-disabled,
606
- .cz-switch:disabled {
607
- opacity: 0.5;
608
- cursor: not-allowed;
609
- }
610
-
611
- .cz-switch-thumb {
612
- display: block;
613
- width: 1.25rem;
614
- height: 1.25rem;
615
- border-radius: var(--cz-radius-full);
616
- background-color: hsl(var(--cz-color-bg));
617
- box-shadow: var(--cz-shadow-sm);
618
- transition: transform var(--cz-transition-fast);
619
- transform: translateX(0.125rem);
620
- }
621
-
622
- .cz-switch[data-state="checked"] .cz-switch-thumb,
623
- .cz-switch.cz-switch-checked .cz-switch-thumb {
624
- transform: translateX(calc(2.75rem - 1.25rem - 0.125rem));
625
- }
626
-
627
- /* Switch Sizes */
628
- .cz-switch-sm { width: 2rem; height: 1.125rem; }
629
- .cz-switch-sm .cz-switch-thumb { width: 0.875rem; height: 0.875rem; transform: translateX(0.125rem); }
630
- .cz-switch-sm[data-state="checked"] .cz-switch-thumb,
631
- .cz-switch-sm.cz-switch-checked .cz-switch-thumb { transform: translateX(calc(2rem - 0.875rem - 0.125rem)); }
632
-
633
- .cz-switch-md { width: 2.75rem; height: 1.5rem; }
634
- .cz-switch-md .cz-switch-thumb { width: 1.25rem; height: 1.25rem; transform: translateX(0.125rem); }
635
- .cz-switch-md[data-state="checked"] .cz-switch-thumb,
636
- .cz-switch-md.cz-switch-checked .cz-switch-thumb { transform: translateX(calc(2.75rem - 1.25rem - 0.125rem)); }
637
-
638
- .cz-switch-lg { width: 3.5rem; height: 1.875rem; }
639
- .cz-switch-lg .cz-switch-thumb { width: 1.625rem; height: 1.625rem; transform: translateX(0.125rem); }
640
- .cz-switch-lg[data-state="checked"] .cz-switch-thumb,
641
- .cz-switch-lg.cz-switch-checked .cz-switch-thumb { transform: translateX(calc(3.5rem - 1.625rem - 0.125rem)); }
642
-
643
- /* Switch with Label */
644
- .cz-switch-container {
645
- display: inline-flex;
646
- align-items: flex-start;
647
- gap: 0.75rem;
648
- cursor: pointer;
649
- }
650
- .cz-switch-container.cz-disabled {
651
- opacity: 0.5;
652
- cursor: not-allowed;
653
- }
654
-
655
- .cz-switch-label-left { flex-direction: row-reverse; }
656
- .cz-switch-label-right { flex-direction: row; }
657
-
658
- .cz-switch-text {
659
- display: flex;
660
- flex-direction: column;
661
- gap: 0.125rem;
662
- }
663
-
664
- .cz-switch-label {
665
- font-size: var(--cz-font-size-sm);
666
- font-weight: var(--cz-font-weight-medium);
667
- color: hsl(var(--cz-color-fg));
668
- line-height: 1.5;
669
- }
670
-
671
- .cz-switch-description {
672
- font-size: var(--cz-font-size-xs);
673
- color: hsl(var(--cz-color-mutedFg));
674
- }
675
-
676
- /* ===== AVATAR ===== */
677
-
678
- .cz-avatar {
679
- display: inline-flex;
680
- align-items: center;
681
- justify-content: center;
682
- border-radius: var(--cz-radius-full);
683
- background-color: hsl(var(--cz-color-muted));
684
- overflow: hidden;
685
- flex-shrink: 0;
686
- }
687
-
688
- .cz-avatar-image {
689
- width: 100%;
690
- height: 100%;
691
- object-fit: cover;
692
- }
693
-
694
- .cz-avatar-fallback {
695
- font-weight: var(--cz-font-weight-medium);
696
- color: hsl(var(--cz-color-mutedFg));
697
- text-transform: uppercase;
698
- }
699
-
700
- /* Avatar Sizes */
701
- .cz-avatar-sm { width: 2rem; height: 2rem; font-size: var(--cz-font-size-xs); }
702
- .cz-avatar-md { width: 2.5rem; height: 2.5rem; font-size: var(--cz-font-size-sm); }
703
- .cz-avatar-lg { width: 3.5rem; height: 3.5rem; font-size: var(--cz-font-size-md); }
704
-
705
- /* ===== SEPARATOR ===== */
706
-
707
- .cz-separator {
708
- background-color: hsl(var(--cz-color-border));
709
- flex-shrink: 0;
710
- }
711
-
712
- .cz-separator-horizontal {
713
- height: 1px;
714
- width: 100%;
715
- }
716
-
717
- .cz-separator-vertical {
718
- width: 1px;
719
- height: 100%;
720
- align-self: stretch;
721
- }
722
-
723
- /* ===== ALERT ===== */
724
-
725
- .cz-alert {
726
- display: flex;
727
- flex-direction: column;
728
- gap: 0.25rem;
729
- padding: var(--cz-spacing-md) var(--cz-spacing-lg);
730
- border-radius: var(--cz-radius-md);
731
- border: 1px solid transparent;
732
- }
733
-
734
- .cz-alert-title {
735
- font-weight: var(--cz-font-weight-semibold);
736
- font-size: var(--cz-font-size-sm);
737
- }
738
-
739
- .cz-alert-content {
740
- font-size: var(--cz-font-size-sm);
741
- }
742
-
743
- /* Alert Variants */
744
- .cz-alert-info {
745
- background-color: hsl(var(--cz-color-primary) / 0.1);
746
- border-color: hsl(var(--cz-color-primary) / 0.3);
747
- color: hsl(var(--cz-color-primary));
748
- }
749
-
750
- .cz-alert-success {
751
- background-color: hsl(var(--cz-color-success) / 0.1);
752
- border-color: hsl(var(--cz-color-success) / 0.3);
753
- color: hsl(var(--cz-color-success));
754
- }
755
-
756
- .cz-alert-warning {
757
- background-color: hsl(var(--cz-color-warning) / 0.1);
758
- border-color: hsl(var(--cz-color-warning) / 0.3);
759
- color: hsl(var(--cz-color-warning));
760
- }
761
-
762
- .cz-alert-danger {
763
- background-color: hsl(var(--cz-color-danger) / 0.1);
764
- border-color: hsl(var(--cz-color-danger) / 0.3);
765
- color: hsl(var(--cz-color-danger));
766
- }
767
-
768
- /* ===== CHECKBOX ===== */
769
-
770
- .cz-checkbox-wrapper {
771
- display: inline-flex;
772
- align-items: center;
773
- gap: 0.5rem;
774
- cursor: pointer;
775
- user-select: none;
776
- }
777
-
778
- .cz-checkbox-wrapper.cz-disabled {
779
- cursor: not-allowed;
780
- opacity: 0.5;
781
- }
782
-
783
- .cz-checkbox {
784
- all: unset;
785
- box-sizing: border-box;
786
- display: inline-flex;
787
- align-items: center;
788
- justify-content: center;
789
- width: 1.25rem;
790
- height: 1.25rem;
791
- border-radius: var(--cz-radius-sm);
792
- border: 2px solid hsl(var(--cz-color-border));
793
- background-color: hsl(var(--cz-color-bg));
794
- transition: all var(--cz-transition-fast);
795
- flex-shrink: 0;
796
- cursor: pointer;
797
- }
798
-
799
- .cz-checkbox:hover {
800
- border-color: hsl(var(--cz-color-primary));
801
- }
802
-
803
- .cz-checkbox:focus-visible {
804
- outline: none;
805
- box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
806
- }
807
-
808
- .cz-checkbox:disabled {
809
- cursor: not-allowed;
810
- opacity: 0.5;
811
- }
812
-
813
- .cz-checkbox[data-state="checked"],
814
- .cz-checkbox[data-state="indeterminate"] {
815
- background-color: hsl(var(--cz-color-primary));
816
- border-color: hsl(var(--cz-color-primary));
817
- }
818
-
819
- .cz-checkbox-indicator {
820
- display: flex;
821
- align-items: center;
822
- justify-content: center;
823
- color: hsl(var(--cz-color-primaryFg));
824
- width: 100%;
825
- height: 100%;
826
- }
827
-
828
- .cz-checkbox-indicator svg {
829
- width: 12px;
830
- height: 12px;
831
- }
832
-
833
- .cz-checkbox-label {
834
- font-size: var(--cz-font-size-sm);
835
- color: hsl(var(--cz-color-fg));
836
- }
837
-
838
- /* Checkbox Sizes */
839
- .cz-checkbox-sm { width: 1rem; height: 1rem; }
840
- .cz-checkbox-sm .cz-checkbox-indicator svg { width: 10px; height: 10px; }
841
-
842
- .cz-checkbox-md { width: 1.25rem; height: 1.25rem; }
843
- .cz-checkbox-md .cz-checkbox-indicator svg { width: 12px; height: 12px; }
844
-
845
- .cz-checkbox-lg { width: 1.5rem; height: 1.5rem; }
846
- .cz-checkbox-lg .cz-checkbox-indicator svg { width: 14px; height: 14px; }
847
-
848
- /* Checkbox with Description */
849
- .cz-checkbox-wrapper-with-description {
850
- align-items: flex-start;
851
- }
852
- .cz-checkbox-wrapper-with-description .cz-checkbox {
853
- margin-top: 0.125rem;
854
- }
855
-
856
- .cz-checkbox-text {
857
- display: flex;
858
- flex-direction: column;
859
- gap: 0.125rem;
860
- }
861
-
862
- .cz-checkbox-description {
863
- font-size: var(--cz-font-size-xs);
864
- color: hsl(var(--cz-color-mutedFg));
865
- }
866
-
867
- /* ===== RADIO GROUP ===== */
868
-
869
- .cz-radio-group {
870
- display: flex;
871
- gap: 0.5rem;
872
- }
873
- .cz-radio-group-vertical { flex-direction: column; }
874
- .cz-radio-group-horizontal { flex-direction: row; flex-wrap: wrap; }
875
-
876
- .cz-radio-wrapper {
877
- display: inline-flex;
878
- align-items: center;
879
- gap: 0.5rem;
880
- cursor: pointer;
881
- user-select: none;
882
- }
883
-
884
- .cz-radio-wrapper.cz-disabled {
885
- cursor: not-allowed;
886
- opacity: 0.5;
887
- }
888
-
889
- .cz-radio-wrapper-with-description {
890
- align-items: flex-start;
891
- }
892
- .cz-radio-wrapper-with-description .cz-radio {
893
- margin-top: 0.125rem;
894
- }
895
-
896
- .cz-radio {
897
- all: unset;
898
- box-sizing: border-box;
899
- display: inline-flex;
900
- align-items: center;
901
- justify-content: center;
902
- width: 1.25rem;
903
- height: 1.25rem;
904
- border-radius: var(--cz-radius-full);
905
- border: 2px solid hsl(var(--cz-color-border));
906
- background-color: hsl(var(--cz-color-bg));
907
- transition: all var(--cz-transition-fast);
908
- flex-shrink: 0;
909
- cursor: pointer;
910
- }
911
-
912
- .cz-radio:hover {
913
- border-color: hsl(var(--cz-color-primary));
914
- }
915
-
916
- .cz-radio:focus-visible {
917
- outline: none;
918
- box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
919
- }
920
-
921
- .cz-radio:disabled {
922
- cursor: not-allowed;
923
- opacity: 0.5;
924
- }
925
-
926
- .cz-radio[data-state="checked"] {
927
- border-color: hsl(var(--cz-color-primary));
928
- }
929
-
930
- .cz-radio-indicator {
931
- width: 0.625rem;
932
- height: 0.625rem;
933
- border-radius: var(--cz-radius-full);
934
- background-color: hsl(var(--cz-color-primary));
935
- transform: scale(0);
936
- transition: transform var(--cz-transition-fast);
937
- }
938
-
939
- .cz-radio[data-state="checked"] .cz-radio-indicator {
940
- transform: scale(1);
941
- }
942
-
943
- .cz-radio-text {
944
- display: flex;
945
- flex-direction: column;
946
- gap: 0.125rem;
947
- }
948
-
949
- .cz-radio-label {
950
- font-size: var(--cz-font-size-sm);
951
- color: hsl(var(--cz-color-fg));
952
- }
953
-
954
- .cz-radio-description {
955
- font-size: var(--cz-font-size-xs);
956
- color: hsl(var(--cz-color-mutedFg));
957
- }
958
-
959
- /* ===== TOOLTIP ===== */
960
-
961
- .cz-tooltip-wrapper {
962
- position: relative;
963
- display: inline-flex;
964
- }
965
-
966
- .cz-tooltip {
967
- position: absolute;
968
- z-index: 50;
969
- padding: 0.375rem 0.75rem;
970
- font-size: var(--cz-font-size-sm);
971
- background-color: hsl(var(--cz-color-fg));
972
- color: hsl(var(--cz-color-bg));
973
- border-radius: var(--cz-radius-md);
974
- white-space: nowrap;
975
- pointer-events: none;
976
- box-shadow: var(--cz-shadow-md);
977
- }
978
-
979
- .cz-tooltip-top {
980
- bottom: 100%;
981
- left: 50%;
982
- transform: translateX(-50%);
983
- margin-bottom: 0.5rem;
984
- }
985
-
986
- .cz-tooltip-bottom {
987
- top: 100%;
988
- left: 50%;
989
- transform: translateX(-50%);
990
- margin-top: 0.5rem;
991
- }
992
-
993
- .cz-tooltip-left {
994
- right: 100%;
995
- top: 50%;
996
- transform: translateY(-50%);
997
- margin-right: 0.5rem;
998
- }
999
-
1000
- .cz-tooltip-right {
1001
- left: 100%;
1002
- top: 50%;
1003
- transform: translateY(-50%);
1004
- margin-left: 0.5rem;
1005
- }
1006
-
1007
- /* ===== PROGRESS ===== */
1008
-
1009
- .cz-progress {
1010
- width: 100%;
1011
- background-color: hsl(var(--cz-color-muted));
1012
- border-radius: var(--cz-radius-full);
1013
- overflow: hidden;
1014
- }
1015
-
1016
- .cz-progress-bar {
1017
- height: 100%;
1018
- width: 100%;
1019
- border-radius: var(--cz-radius-full);
1020
- transition: transform var(--cz-transition-normal);
1021
- }
1022
-
1023
- /* Progress Sizes */
1024
- .cz-progress-sm { height: 0.375rem; }
1025
- .cz-progress-md { height: 0.5rem; }
1026
- .cz-progress-lg { height: 0.75rem; }
1027
-
1028
- /* Progress Variants */
1029
- .cz-progress-default { background-color: hsl(var(--cz-color-primary)); }
1030
- .cz-progress-success { background-color: hsl(var(--cz-color-success)); }
1031
- .cz-progress-warning { background-color: hsl(var(--cz-color-warning)); }
1032
- .cz-progress-danger { background-color: hsl(var(--cz-color-danger)); }
1033
-
1034
- /* ===== SKELETON ===== */
1035
-
1036
- @keyframes cz-skeleton-pulse {
1037
- 0%, 100% { opacity: 1; }
1038
- 50% { opacity: 0.4; }
1039
- }
1040
-
1041
- .cz-skeleton {
1042
- background-color: hsl(var(--cz-color-muted));
1043
- animation: cz-skeleton-pulse 1.5s ease-in-out infinite;
1044
- }
1045
-
1046
- .cz-skeleton-text {
1047
- height: 1rem;
1048
- width: 100%;
1049
- border-radius: var(--cz-radius-sm);
1050
- }
1051
-
1052
- .cz-skeleton-circular {
1053
- border-radius: var(--cz-radius-full);
1054
- }
1055
-
1056
- .cz-skeleton-rectangular {
1057
- border-radius: var(--cz-radius-md);
1058
- }
1059
-
1060
- /* ===== TABS ===== */
1061
-
1062
- .cz-tabs {
1063
- display: flex;
1064
- flex-direction: column;
1065
- width: 100%;
1066
- }
1067
-
1068
- .cz-tabs-list {
1069
- display: inline-flex;
1070
- align-items: center;
1071
- gap: 0.25rem;
1072
- border-bottom: 1px solid hsl(var(--cz-color-border));
1073
- padding-bottom: 0;
1074
- }
1075
-
1076
- .cz-tabs-trigger {
1077
- display: inline-flex;
1078
- align-items: center;
1079
- justify-content: center;
1080
- padding: 0.5rem 1rem;
1081
- font-size: var(--cz-font-size-sm);
1082
- font-weight: var(--cz-font-weight-medium);
1083
- color: hsl(var(--cz-color-mutedFg));
1084
- background: transparent;
1085
- border: none;
1086
- border-bottom: 2px solid transparent;
1087
- margin-bottom: -1px;
1088
- cursor: pointer;
1089
- transition: all var(--cz-transition-fast);
1090
- }
1091
-
1092
- .cz-tabs-trigger:hover {
1093
- color: hsl(var(--cz-color-fg));
1094
- }
1095
-
1096
- .cz-tabs-trigger-active {
1097
- color: hsl(var(--cz-color-primary));
1098
- border-bottom-color: hsl(var(--cz-color-primary));
1099
- }
1100
-
1101
- .cz-tabs-trigger:focus-visible {
1102
- outline: none;
1103
- box-shadow: 0 0 0 2px hsl(var(--cz-color-ring));
1104
- border-radius: var(--cz-radius-sm);
1105
- }
1106
-
1107
- .cz-tabs-content {
1108
- padding-top: var(--cz-spacing-lg);
1109
- }
1110
-
1111
- /* ===== DIALOG ===== */
1112
-
1113
- .cz-dialog-overlay {
1114
- position: fixed;
1115
- inset: 0;
1116
- z-index: 50;
1117
- background-color: rgba(0, 0, 0, 0.5);
1118
- }
1119
-
1120
- .cz-dialog-content {
1121
- position: fixed;
1122
- left: 50%;
1123
- top: 50%;
1124
- transform: translate(-50%, -50%);
1125
- z-index: 51;
1126
- background-color: hsl(var(--cz-color-bg));
1127
- border-radius: var(--cz-radius-lg);
1128
- box-shadow: var(--cz-shadow-lg);
1129
- max-width: 32rem;
1130
- width: calc(100% - 2rem);
1131
- max-height: calc(100vh - 4rem);
1132
- overflow-y: auto;
1133
- padding: var(--cz-spacing-lg);
1134
- }
1135
-
1136
- .cz-dialog-close {
1137
- position: absolute;
1138
- top: 0.75rem;
1139
- right: 0.75rem;
1140
- width: 2rem;
1141
- height: 2rem;
1142
- display: flex;
1143
- align-items: center;
1144
- justify-content: center;
1145
- border: none;
1146
- background: transparent;
1147
- border-radius: var(--cz-radius-sm);
1148
- font-size: 1.25rem;
1149
- color: hsl(var(--cz-color-mutedFg));
1150
- cursor: pointer;
1151
- transition: all var(--cz-transition-fast);
1152
- }
1153
-
1154
- .cz-dialog-close:hover {
1155
- background-color: hsl(var(--cz-color-muted));
1156
- color: hsl(var(--cz-color-fg));
1157
- }
1158
-
1159
- .cz-dialog-header {
1160
- display: flex;
1161
- flex-direction: column;
1162
- gap: 0.25rem;
1163
- padding-bottom: var(--cz-spacing-md);
1164
- }
1165
-
1166
- .cz-dialog-title {
1167
- font-size: var(--cz-font-size-lg);
1168
- font-weight: var(--cz-font-weight-semibold);
1169
- color: hsl(var(--cz-color-fg));
1170
- margin: 0;
1171
- }
1172
-
1173
- .cz-dialog-description {
1174
- font-size: var(--cz-font-size-sm);
1175
- color: hsl(var(--cz-color-mutedFg));
1176
- margin: 0;
1177
- }
1178
-
1179
- .cz-dialog-footer {
1180
- display: flex;
1181
- justify-content: flex-end;
1182
- gap: 0.5rem;
1183
- padding-top: var(--cz-spacing-lg);
1184
- }
1185
-
1186
- /* ===== SELECT ===== */
1187
-
1188
- .cz-select {
1189
- all: unset;
1190
- box-sizing: border-box;
1191
- display: inline-flex;
1192
- align-items: center;
1193
- justify-content: space-between;
1194
- width: 100%;
1195
- height: 2.5rem;
1196
- padding: 0 0.75rem;
1197
- border-radius: var(--cz-radius-md);
1198
- border: 1px solid hsl(var(--cz-color-border));
1199
- background-color: hsl(var(--cz-color-bg));
1200
- color: hsl(var(--cz-color-fg));
1201
- font-size: var(--cz-font-size-md);
1202
- transition: all var(--cz-transition-fast);
1203
- cursor: pointer;
1204
- }
1205
-
1206
- .cz-select:hover {
1207
- border-color: hsl(var(--cz-color-primary));
1208
- }
1209
-
1210
- .cz-select:focus-visible {
1211
- outline: none;
1212
- box-shadow: 0 0 0 2px hsl(var(--cz-color-ring));
1213
- }
1214
-
1215
- .cz-select:disabled,
1216
- .cz-select[data-disabled] {
1217
- cursor: not-allowed;
1218
- opacity: 0.5;
1219
- }
1220
-
1221
- .cz-select[data-placeholder] {
1222
- color: hsl(var(--cz-color-mutedFg));
1223
- }
1224
-
1225
- .cz-select-icon {
1226
- color: hsl(var(--cz-color-mutedFg));
1227
- margin-left: 0.5rem;
1228
- flex-shrink: 0;
1229
- }
1230
-
1231
- /* Select Sizes */
1232
- .cz-select-sm { height: 2rem; padding: 0 0.5rem; font-size: var(--cz-font-size-sm); }
1233
- .cz-select-md { height: 2.5rem; padding: 0 0.75rem; font-size: var(--cz-font-size-md); }
1234
- .cz-select-lg { height: 3rem; padding: 0 1rem; font-size: var(--cz-font-size-lg); }
1235
-
1236
- /* Select Content (Dropdown) */
1237
- .cz-select-content {
1238
- z-index: 50;
1239
- min-width: 8rem;
1240
- max-height: 15rem;
1241
- overflow: hidden;
1242
- background-color: hsl(var(--cz-color-bg));
1243
- border: 1px solid hsl(var(--cz-color-border));
1244
- border-radius: var(--cz-radius-md);
1245
- box-shadow: var(--cz-shadow-lg);
1246
- }
1247
-
1248
- .cz-select-viewport {
1249
- padding: 0.25rem;
1250
- }
1251
-
1252
- .cz-select-item {
1253
- display: flex;
1254
- align-items: center;
1255
- gap: 0.5rem;
1256
- padding: 0.5rem 0.75rem;
1257
- font-size: var(--cz-font-size-sm);
1258
- color: hsl(var(--cz-color-fg));
1259
- border-radius: var(--cz-radius-sm);
1260
- cursor: pointer;
1261
- user-select: none;
1262
- outline: none;
1263
- }
1264
-
1265
- .cz-select-item:hover,
1266
- .cz-select-item[data-highlighted] {
1267
- background-color: hsl(var(--cz-color-muted));
1268
- }
1269
-
1270
- .cz-select-item[data-disabled] {
1271
- opacity: 0.5;
1272
- cursor: not-allowed;
1273
- }
1274
-
1275
- .cz-select-item-indicator {
1276
- width: 1rem;
1277
- display: flex;
1278
- align-items: center;
1279
- justify-content: center;
1280
- color: hsl(var(--cz-color-primary));
1281
- }
1282
-
1283
- .cz-select-separator {
1284
- height: 1px;
1285
- background-color: hsl(var(--cz-color-border));
1286
- margin: 0.25rem 0;
1287
- }
1288
-
1289
- .cz-select-label {
1290
- padding: 0.375rem 0.75rem;
1291
- font-size: var(--cz-font-size-xs);
1292
- font-weight: var(--cz-font-weight-semibold);
1293
- color: hsl(var(--cz-color-mutedFg));
1294
- }
1295
-
1296
- /* ===== RADIO GROUP ===== */
1297
-
1298
- .cz-radio-group {
1299
- display: flex;
1300
- }
1301
-
1302
- .cz-radio-group-vertical {
1303
- flex-direction: column;
1304
- gap: 0.5rem;
1305
- }
1306
-
1307
- .cz-radio-group-horizontal {
1308
- flex-direction: row;
1309
- gap: 1rem;
1310
- }
1311
-
1312
- .cz-radio-wrapper {
1313
- display: inline-flex;
1314
- align-items: center;
1315
- gap: 0.5rem;
1316
- cursor: pointer;
1317
- user-select: none;
1318
- }
1319
-
1320
- .cz-radio-wrapper.cz-disabled {
1321
- cursor: not-allowed;
1322
- opacity: 0.5;
1323
- }
1324
-
1325
- .cz-radio {
1326
- all: unset;
1327
- box-sizing: border-box;
1328
- width: 1.25rem;
1329
- height: 1.25rem;
1330
- border-radius: var(--cz-radius-full);
1331
- border: 2px solid hsl(var(--cz-color-border));
1332
- background-color: hsl(var(--cz-color-bg));
1333
- transition: all var(--cz-transition-fast);
1334
- display: inline-flex;
1335
- align-items: center;
1336
- justify-content: center;
1337
- flex-shrink: 0;
1338
- cursor: pointer;
1339
- }
1340
-
1341
- .cz-radio:hover {
1342
- border-color: hsl(var(--cz-color-primary));
1343
- }
1344
-
1345
- .cz-radio:focus-visible {
1346
- outline: none;
1347
- box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
1348
- }
1349
-
1350
- .cz-radio:disabled {
1351
- cursor: not-allowed;
1352
- opacity: 0.5;
1353
- }
1354
-
1355
- .cz-radio[data-state="checked"] {
1356
- border-color: hsl(var(--cz-color-primary));
1357
- }
1358
-
1359
- .cz-radio-indicator {
1360
- width: 0.625rem;
1361
- height: 0.625rem;
1362
- border-radius: var(--cz-radius-full);
1363
- background-color: hsl(var(--cz-color-primary));
1364
- }
1365
-
1366
- .cz-radio-label {
1367
- font-size: var(--cz-font-size-sm);
1368
- color: hsl(var(--cz-color-fg));
1369
- }
1370
-
1371
- /* ===== TABLE ===== */
1372
-
1373
- .cz-table-wrapper {
1374
- width: 100%;
1375
- overflow-x: auto;
1376
- }
1377
-
1378
- .cz-table {
1379
- width: 100%;
1380
- border-collapse: collapse;
1381
- font-size: var(--cz-font-size-sm);
1382
- }
1383
-
1384
- .cz-table-header {
1385
- background-color: hsl(var(--cz-color-muted));
1386
- }
1387
-
1388
- .cz-table-row {
1389
- border-bottom: 1px solid hsl(var(--cz-color-border));
1390
- transition: background-color var(--cz-transition-fast);
1391
- }
1392
-
1393
- .cz-table-body .cz-table-row:hover {
1394
- background-color: hsl(var(--cz-color-muted) / 0.5);
1395
- }
1396
-
1397
- .cz-table-head {
1398
- padding: 0.75rem 1rem;
1399
- text-align: left;
1400
- font-weight: var(--cz-font-weight-semibold);
1401
- color: hsl(var(--cz-color-fg));
1402
- white-space: nowrap;
1403
- }
1404
-
1405
- .cz-table-cell {
1406
- padding: 0.75rem 1rem;
1407
- color: hsl(var(--cz-color-fg));
1408
- }
1409
-
1410
- /* ===== ACCORDION ===== */
1411
-
1412
- .cz-accordion {
1413
- display: flex;
1414
- flex-direction: column;
1415
- width: 100%;
1416
- }
1417
-
1418
- .cz-accordion-item {
1419
- border-bottom: 1px solid hsl(var(--cz-color-border));
1420
- }
1421
-
1422
- .cz-accordion-trigger {
1423
- display: flex;
1424
- align-items: center;
1425
- justify-content: space-between;
1426
- width: 100%;
1427
- padding: 1rem 0;
1428
- font-size: var(--cz-font-size-md);
1429
- font-weight: var(--cz-font-weight-medium);
1430
- color: hsl(var(--cz-color-fg));
1431
- background: transparent;
1432
- border: none;
1433
- cursor: pointer;
1434
- text-align: left;
1435
- transition: all var(--cz-transition-fast);
1436
- }
1437
-
1438
- .cz-accordion-trigger:hover {
1439
- color: hsl(var(--cz-color-primary));
1440
- }
1441
-
1442
- .cz-accordion-icon {
1443
- transition: transform var(--cz-transition-fast);
1444
- color: hsl(var(--cz-color-mutedFg));
1445
- }
1446
-
1447
- .cz-accordion-icon-expanded,
1448
- .cz-accordion-trigger[data-state="open"] .cz-accordion-icon {
1449
- transform: rotate(180deg);
1450
- }
1451
-
1452
- .cz-accordion-content {
1453
- overflow: hidden;
1454
- font-size: var(--cz-font-size-sm);
1455
- color: hsl(var(--cz-color-mutedFg));
1456
- }
1457
-
1458
- .cz-accordion-content[data-state="open"] {
1459
- animation: cz-accordion-down var(--cz-transition-fast) ease-out;
1460
- }
1461
-
1462
- .cz-accordion-content[data-state="closed"] {
1463
- animation: cz-accordion-up var(--cz-transition-fast) ease-out;
1464
- }
1465
-
1466
- .cz-accordion-content-inner {
1467
- padding-bottom: 1rem;
1468
- }
1469
-
1470
- @keyframes cz-accordion-down {
1471
- from { height: 0; }
1472
- to { height: var(--radix-accordion-content-height); }
1473
- }
1474
-
1475
- @keyframes cz-accordion-up {
1476
- from { height: var(--radix-accordion-content-height); }
1477
- to { height: 0; }
1478
- }
1479
-
1480
- /* ===== STACK ===== */
1481
-
1482
- .cz-stack {
1483
- display: flex;
1484
- }
1485
-
1486
- .cz-stack-row { flex-direction: row; }
1487
- .cz-stack-column { flex-direction: column; }
1488
-
1489
- .cz-stack-gap-xs { gap: var(--cz-spacing-xs); }
1490
- .cz-stack-gap-sm { gap: var(--cz-spacing-sm); }
1491
- .cz-stack-gap-md { gap: var(--cz-spacing-md); }
1492
- .cz-stack-gap-lg { gap: var(--cz-spacing-lg); }
1493
- .cz-stack-gap-xl { gap: var(--cz-spacing-xl); }
1494
-
1495
- .cz-stack-align-start { align-items: flex-start; }
1496
- .cz-stack-align-center { align-items: center; }
1497
- .cz-stack-align-end { align-items: flex-end; }
1498
- .cz-stack-align-stretch { align-items: stretch; }
1499
-
1500
- .cz-stack-justify-start { justify-content: flex-start; }
1501
- .cz-stack-justify-center { justify-content: center; }
1502
- .cz-stack-justify-end { justify-content: flex-end; }
1503
- .cz-stack-justify-between { justify-content: space-between; }
1504
- .cz-stack-justify-around { justify-content: space-around; }
1505
-
1506
- .cz-stack-wrap { flex-wrap: wrap; }
1507
-
1508
- /* ===== SPINNER ===== */
1509
-
1510
- .cz-spinner {
1511
- display: inline-flex;
1512
- animation: cz-spin 1s linear infinite;
1513
- }
1514
-
1515
- .cz-spinner-svg {
1516
- width: 100%;
1517
- height: 100%;
1518
- }
1519
-
1520
- .cz-spinner-track {
1521
- opacity: 0.2;
1522
- }
1523
-
1524
- .cz-spinner-indicator {
1525
- opacity: 1;
1526
- }
1527
-
1528
- /* Spinner Sizes */
1529
- .cz-spinner-sm { width: 1rem; height: 1rem; }
1530
- .cz-spinner-md { width: 1.5rem; height: 1.5rem; }
1531
- .cz-spinner-lg { width: 2rem; height: 2rem; }
1532
-
1533
- /* Spinner Variants */
1534
- .cz-spinner-default { color: hsl(var(--cz-color-fg)); }
1535
- .cz-spinner-primary { color: hsl(var(--cz-color-primary)); }
1536
-
1537
- /* ===== ASPECT RATIO ===== */
1538
-
1539
- .cz-aspect-ratio {
1540
- position: relative;
1541
- width: 100%;
1542
- }
1543
-
1544
- .cz-aspect-ratio-content {
1545
- position: absolute;
1546
- inset: 0;
1547
- }
1548
-
1549
- .cz-aspect-ratio-content > * {
1550
- width: 100%;
1551
- height: 100%;
1552
- object-fit: cover;
1553
- }
1554
-
1555
- /* ===== BREADCRUMB ===== */
1556
-
1557
- .cz-breadcrumb {
1558
- display: flex;
1559
- align-items: center;
1560
- }
1561
-
1562
- .cz-breadcrumb-list {
1563
- display: flex;
1564
- align-items: center;
1565
- gap: 0.25rem;
1566
- list-style: none;
1567
- margin: 0;
1568
- padding: 0;
1569
- }
1570
-
1571
- .cz-breadcrumb-item {
1572
- display: inline-flex;
1573
- align-items: center;
1574
- gap: 0.25rem;
1575
- }
1576
-
1577
- .cz-breadcrumb-link {
1578
- font-size: var(--cz-font-size-sm);
1579
- color: hsl(var(--cz-color-mutedFg));
1580
- text-decoration: none;
1581
- transition: color var(--cz-transition-fast);
1582
- }
1583
-
1584
- .cz-breadcrumb-link:hover {
1585
- color: hsl(var(--cz-color-fg));
1586
- }
1587
-
1588
- .cz-breadcrumb-separator {
1589
- color: hsl(var(--cz-color-mutedFg));
1590
- display: inline-flex;
1591
- }
1592
-
1593
- .cz-breadcrumb-page {
1594
- font-size: var(--cz-font-size-sm);
1595
- font-weight: var(--cz-font-weight-medium);
1596
- color: hsl(var(--cz-color-fg));
1597
- }
1598
-
1599
- /* ===== LABEL (extended) ===== */
1600
-
1601
- .cz-label-required {
1602
- color: hsl(var(--cz-color-danger));
1603
- margin-left: 0.125rem;
1604
- }
1605
-
1606
- /* ===== VISUALLY HIDDEN ===== */
1607
-
1608
- .cz-visually-hidden {
1609
- position: absolute;
1610
- width: 1px;
1611
- height: 1px;
1612
- padding: 0;
1613
- margin: -1px;
1614
- overflow: hidden;
1615
- clip: rect(0, 0, 0, 0);
1616
- white-space: nowrap;
1617
- border: 0;
1618
- }
1619
-
1620
- /* ===== CONTAINER ===== */
1621
-
1622
- .cz-container {
1623
- width: 100%;
1624
- padding-left: var(--cz-spacing-lg);
1625
- padding-right: var(--cz-spacing-lg);
1626
- }
1627
-
1628
- .cz-container-centered {
1629
- margin-left: auto;
1630
- margin-right: auto;
1631
- }
1632
-
1633
- .cz-container-sm { max-width: 640px; }
1634
- .cz-container-md { max-width: 768px; }
1635
- .cz-container-lg { max-width: 1024px; }
1636
- .cz-container-xl { max-width: 1280px; }
1637
- .cz-container-full { max-width: 100%; }
1638
-
1639
- /* ===== GRID ===== */
1640
-
1641
- .cz-grid {
1642
- display: grid;
1643
- }
1644
-
1645
- .cz-grid-cols-1 { grid-template-columns: repeat(1, 1fr); }
1646
- .cz-grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
1647
- .cz-grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
1648
- .cz-grid-cols-4 { grid-template-columns: repeat(4, 1fr); }
1649
- .cz-grid-cols-5 { grid-template-columns: repeat(5, 1fr); }
1650
- .cz-grid-cols-6 { grid-template-columns: repeat(6, 1fr); }
1651
- .cz-grid-cols-12 { grid-template-columns: repeat(12, 1fr); }
1652
-
1653
- .cz-grid-gap-xs { gap: var(--cz-spacing-xs); }
1654
- .cz-grid-gap-sm { gap: var(--cz-spacing-sm); }
1655
- .cz-grid-gap-md { gap: var(--cz-spacing-md); }
1656
- .cz-grid-gap-lg { gap: var(--cz-spacing-lg); }
1657
- .cz-grid-gap-xl { gap: var(--cz-spacing-xl); }
1658
-
1659
- /* ===== KBD ===== */
1660
-
1661
- .cz-kbd {
1662
- display: inline-flex;
1663
- align-items: center;
1664
- justify-content: center;
1665
- padding: 0.125rem 0.375rem;
1666
- font-size: var(--cz-font-size-xs);
1667
- font-family: var(--cz-font-mono, ui-monospace, monospace);
1668
- font-weight: var(--cz-font-weight-medium);
1669
- background-color: hsl(var(--cz-color-muted));
1670
- color: hsl(var(--cz-color-fg));
1671
- border: 1px solid hsl(var(--cz-color-border));
1672
- border-radius: var(--cz-radius-sm);
1673
- box-shadow: 0 1px 0 hsl(var(--cz-color-border));
1674
- }
1675
-
1676
- /* ===== CODE ===== */
1677
-
1678
- .cz-code {
1679
- display: inline;
1680
- padding: 0.125rem 0.375rem;
1681
- font-size: 0.875em;
1682
- font-family: var(--cz-font-mono, ui-monospace, monospace);
1683
- background-color: hsl(var(--cz-color-muted));
1684
- color: hsl(var(--cz-color-fg));
1685
- border-radius: var(--cz-radius-sm);
1686
- }
1687
-
1688
- /* ===== SCROLL AREA ===== */
1689
-
1690
- .cz-scroll-area {
1691
- overflow: auto;
1692
- scrollbar-width: thin;
1693
- scrollbar-color: hsl(var(--cz-color-border)) transparent;
1694
- }
1695
-
1696
- .cz-scroll-area::-webkit-scrollbar {
1697
- width: 8px;
1698
- height: 8px;
1699
- }
1700
-
1701
- .cz-scroll-area::-webkit-scrollbar-track {
1702
- background: transparent;
1703
- }
1704
-
1705
- .cz-scroll-area::-webkit-scrollbar-thumb {
1706
- background-color: hsl(var(--cz-color-border));
1707
- border-radius: var(--cz-radius-full);
1708
- }
1709
-
1710
- .cz-scroll-area::-webkit-scrollbar-thumb:hover {
1711
- background-color: hsl(var(--cz-color-mutedFg));
1712
- }
1713
-
1714
- /* ===== DROPDOWN MENU ===== */
1715
-
1716
- .cz-dropdown {
1717
- position: relative;
1718
- display: inline-block;
1719
- }
1720
-
1721
- .cz-dropdown-trigger {
1722
- display: inline-flex;
1723
- align-items: center;
1724
- gap: 0.25rem;
1725
- }
1726
-
1727
- .cz-dropdown-content {
1728
- position: absolute;
1729
- top: 100%;
1730
- margin-top: 0.25rem;
1731
- z-index: 50;
1732
- min-width: 10rem;
1733
- background-color: hsl(var(--cz-color-bg));
1734
- border: 1px solid hsl(var(--cz-color-border));
1735
- border-radius: var(--cz-radius-md);
1736
- box-shadow: var(--cz-shadow-lg);
1737
- padding: 0.25rem;
1738
- animation: cz-fade-in 0.15s ease-out;
1739
- }
1740
-
1741
- .cz-dropdown-align-start { left: 0; }
1742
- .cz-dropdown-align-center { left: 50%; transform: translateX(-50%); }
1743
- .cz-dropdown-align-end { right: 0; }
1744
-
1745
- .cz-dropdown-item {
1746
- display: flex;
1747
- align-items: center;
1748
- width: 100%;
1749
- padding: 0.5rem 0.75rem;
1750
- font-size: var(--cz-font-size-sm);
1751
- color: hsl(var(--cz-color-fg));
1752
- background: transparent;
1753
- border: none;
1754
- border-radius: var(--cz-radius-sm);
1755
- cursor: pointer;
1756
- text-align: left;
1757
- transition: all var(--cz-transition-fast);
1758
- }
1759
-
1760
- .cz-dropdown-item:hover {
1761
- background-color: hsl(var(--cz-color-muted));
1762
- }
1763
-
1764
- .cz-dropdown-item:focus {
1765
- outline: none;
1766
- background-color: hsl(var(--cz-color-muted));
1767
- }
1768
-
1769
- .cz-dropdown-separator {
1770
- height: 1px;
1771
- background-color: hsl(var(--cz-color-border));
1772
- margin: 0.25rem 0;
1773
- }
1774
-
1775
- .cz-dropdown-label {
1776
- padding: 0.5rem 0.75rem;
1777
- font-size: var(--cz-font-size-xs);
1778
- font-weight: var(--cz-font-weight-semibold);
1779
- color: hsl(var(--cz-color-mutedFg));
1780
- }
1781
-
1782
- /* ===== TOAST ===== */
1783
-
1784
- .cz-toaster {
1785
- position: fixed;
1786
- z-index: 100;
1787
- display: flex;
1788
- flex-direction: column;
1789
- gap: 0.5rem;
1790
- padding: 1rem;
1791
- max-width: 24rem;
1792
- width: 100%;
1793
- pointer-events: none;
1794
- }
1795
-
1796
- .cz-toaster-top-left { top: 0; left: 0; }
1797
- .cz-toaster-top-center { top: 0; left: 50%; transform: translateX(-50%); }
1798
- .cz-toaster-top-right { top: 0; right: 0; }
1799
- .cz-toaster-bottom-left { bottom: 0; left: 0; }
1800
- .cz-toaster-bottom-center { bottom: 0; left: 50%; transform: translateX(-50%); }
1801
- .cz-toaster-bottom-right { bottom: 0; right: 0; }
1802
-
1803
- .cz-toast {
1804
- display: flex;
1805
- align-items: flex-start;
1806
- gap: 0.75rem;
1807
- padding: 1rem;
1808
- background-color: hsl(var(--cz-color-bg));
1809
- border: 1px solid hsl(var(--cz-color-border));
1810
- border-radius: var(--cz-radius-lg);
1811
- box-shadow: var(--cz-shadow-lg);
1812
- pointer-events: auto;
1813
- animation: cz-slide-in 0.3s ease-out;
1814
- }
1815
-
1816
- @keyframes cz-slide-in {
1817
- from {
1818
- opacity: 0;
1819
- transform: translateY(1rem);
1820
- }
1821
- to {
1822
- opacity: 1;
1823
- transform: translateY(0);
1824
- }
1825
- }
1826
-
1827
- .cz-toast-content {
1828
- flex: 1;
1829
- min-width: 0;
1830
- }
1831
-
1832
- .cz-toast-title {
1833
- font-size: var(--cz-font-size-sm);
1834
- font-weight: var(--cz-font-weight-semibold);
1835
- color: hsl(var(--cz-color-fg));
1836
- }
1837
-
1838
- .cz-toast-description {
1839
- font-size: var(--cz-font-size-sm);
1840
- color: hsl(var(--cz-color-mutedFg));
1841
- margin-top: 0.125rem;
1842
- }
1843
-
1844
- .cz-toast-close {
1845
- flex-shrink: 0;
1846
- width: 1.25rem;
1847
- height: 1.25rem;
1848
- display: flex;
1849
- align-items: center;
1850
- justify-content: center;
1851
- border: none;
1852
- background: transparent;
1853
- color: hsl(var(--cz-color-mutedFg));
1854
- cursor: pointer;
1855
- border-radius: var(--cz-radius-sm);
1856
- font-size: 1rem;
1857
- transition: all var(--cz-transition-fast);
1858
- }
1859
-
1860
- .cz-toast-close:hover {
1861
- background-color: hsl(var(--cz-color-muted));
1862
- color: hsl(var(--cz-color-fg));
1863
- }
1864
-
1865
- /* Toast Variants */
1866
- .cz-toast-success {
1867
- border-left: 4px solid hsl(var(--cz-color-success));
1868
- }
1869
-
1870
- .cz-toast-warning {
1871
- border-left: 4px solid hsl(var(--cz-color-warning));
1872
- }
1873
-
1874
- .cz-toast-danger {
1875
- border-left: 4px solid hsl(var(--cz-color-danger));
1876
- }
1877
-
1878
- /* ===== TAG ===== */
1879
-
1880
- .cz-tag {
1881
- display: inline-flex;
1882
- align-items: center;
1883
- gap: 0.25rem;
1884
- border-radius: var(--cz-radius-full);
1885
- font-weight: var(--cz-font-weight-medium);
1886
- transition: all var(--cz-transition-fast);
1887
- }
1888
-
1889
- .cz-tag-content {
1890
- display: inline-flex;
1891
- align-items: center;
1892
- }
1893
-
1894
- .cz-tag-remove {
1895
- display: inline-flex;
1896
- align-items: center;
1897
- justify-content: center;
1898
- border: none;
1899
- background: transparent;
1900
- cursor: pointer;
1901
- padding: 0;
1902
- color: inherit;
1903
- opacity: 0.6;
1904
- transition: opacity var(--cz-transition-fast);
1905
- border-radius: var(--cz-radius-full);
1906
- }
1907
-
1908
- .cz-tag-remove:hover {
1909
- opacity: 1;
1910
- }
1911
-
1912
- /* Tag Sizes */
1913
- .cz-tag-sm { padding: 0.125rem 0.5rem; font-size: var(--cz-font-size-xs); }
1914
- .cz-tag-md { padding: 0.25rem 0.625rem; font-size: var(--cz-font-size-sm); }
1915
- .cz-tag-lg { padding: 0.375rem 0.75rem; font-size: var(--cz-font-size-md); }
1916
-
1917
- /* Tag Variants */
1918
- .cz-tag-default {
1919
- background-color: hsl(var(--cz-color-muted));
1920
- color: hsl(var(--cz-color-fg));
1921
- }
1922
-
1923
- .cz-tag-primary {
1924
- background-color: hsl(var(--cz-color-primary));
1925
- color: hsl(var(--cz-color-primaryFg));
1926
- }
1927
-
1928
- .cz-tag-secondary {
1929
- background-color: hsl(var(--cz-color-secondary));
1930
- color: hsl(var(--cz-color-secondaryFg));
1931
- }
1932
-
1933
- .cz-tag-success {
1934
- background-color: hsl(142 76% 36%);
1935
- color: white;
1936
- }
1937
-
1938
- .cz-tag-warning {
1939
- background-color: hsl(38 92% 50%);
1940
- color: white;
1941
- }
1942
-
1943
- .cz-tag-danger {
1944
- background-color: hsl(var(--cz-color-danger));
1945
- color: white;
1946
- }
1947
-
1948
- /* ===== SCROLL AREA ===== */
1949
-
1950
- .cz-scroll-area {
1951
- overflow: hidden;
1952
- }
1953
-
1954
- .cz-scroll-area-viewport {
1955
- width: 100%;
1956
- height: 100%;
1957
- border-radius: inherit;
1958
- }
1959
-
1960
- .cz-scroll-area-scrollbar {
1961
- display: flex;
1962
- touch-action: none;
1963
- user-select: none;
1964
- padding: 2px;
1965
- background-color: transparent;
1966
- transition: background-color var(--cz-transition-fast);
1967
- }
1968
-
1969
- .cz-scroll-area-scrollbar:hover {
1970
- background-color: hsl(var(--cz-color-muted) / 0.5);
1971
- }
1972
-
1973
- .cz-scroll-area-scrollbar-vertical {
1974
- width: 10px;
1975
- }
1976
-
1977
- .cz-scroll-area-scrollbar-horizontal {
1978
- flex-direction: column;
1979
- height: 10px;
1980
- }
1981
-
1982
- .cz-scroll-area-thumb {
1983
- flex: 1;
1984
- background-color: hsl(var(--cz-color-border));
1985
- border-radius: var(--cz-radius-full);
1986
- position: relative;
1987
- transition: background-color var(--cz-transition-fast);
1988
- }
1989
-
1990
- .cz-scroll-area-thumb::before {
1991
- content: "";
1992
- position: absolute;
1993
- top: 50%;
1994
- left: 50%;
1995
- transform: translate(-50%, -50%);
1996
- width: 100%;
1997
- height: 100%;
1998
- min-width: 44px;
1999
- min-height: 44px;
2000
- }
2001
-
2002
- .cz-scroll-area-thumb:hover {
2003
- background-color: hsl(var(--cz-color-mutedFg));
2004
- }
2005
-
2006
- .cz-scroll-area-corner {
2007
- background-color: hsl(var(--cz-color-muted));
2008
- }
1
+ /**
2
+ * CZero Component Reset
3
+ * Scoped to CZero components only - won't affect other elements
4
+ */
5
+
6
+ /* Base reset for all CZero components */
7
+ [class*="cz-"],
8
+ [class*="cz-"]::before,
9
+ [class*="cz-"]::after {
10
+ box-sizing: border-box;
11
+ margin: 0;
12
+ }
13
+ /**
14
+ * CZero Design Tokens
15
+ * Auto-generated from theme.config.ts - DO NOT EDIT MANUALLY
16
+ */
17
+
18
+ :root {
19
+ --cz-color-bg: 0 0% 100%;
20
+ --cz-color-fg: 220 15% 10%;
21
+ --cz-color-primary: 222 47% 45%;
22
+ --cz-color-primaryFg: 0 0% 100%;
23
+ --cz-color-secondary: 220 10% 95%;
24
+ --cz-color-secondaryFg: 220 15% 10%;
25
+ --cz-color-muted: 220 10% 95%;
26
+ --cz-color-mutedFg: 220 10% 40%;
27
+ --cz-color-danger: 0 70% 55%;
28
+ --cz-color-dangerFg: 0 0% 100%;
29
+ --cz-color-success: 142 70% 45%;
30
+ --cz-color-successFg: 0 0% 100%;
31
+ --cz-color-warning: 38 92% 50%;
32
+ --cz-color-warningFg: 0 0% 100%;
33
+ --cz-color-border: 220 13% 90%;
34
+ --cz-color-ring: 222 47% 45%;
35
+ --cz-radius-none: 0;
36
+ --cz-radius-sm: 0.25rem;
37
+ --cz-radius-md: 0.5rem;
38
+ --cz-radius-lg: 0.75rem;
39
+ --cz-radius-xl: 1rem;
40
+ --cz-radius-full: 9999px;
41
+ --cz-shadow-none: none;
42
+ --cz-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.05);
43
+ --cz-shadow-md: 0 2px 4px rgb(0 0 0 / 0.08);
44
+ --cz-shadow-lg: 0 4px 12px rgb(0 0 0 / 0.12);
45
+ --cz-spacing-xs: 0.25rem;
46
+ --cz-spacing-sm: 0.5rem;
47
+ --cz-spacing-md: 0.75rem;
48
+ --cz-spacing-lg: 1rem;
49
+ --cz-spacing-xl: 1.5rem;
50
+ --cz-spacing-2xl: 2rem;
51
+ --cz-transition-fast: 150ms ease;
52
+ --cz-transition-normal: 200ms ease;
53
+ --cz-transition-slow: 300ms ease;
54
+ --cz-font-fontFamily: Inter, system-ui, -apple-system, sans-serif;
55
+ --cz-font-size-xs: 0.75rem;
56
+ --cz-font-size-sm: 0.875rem;
57
+ --cz-font-size-md: 1rem;
58
+ --cz-font-size-lg: 1.125rem;
59
+ --cz-font-size-xl: 1.25rem;
60
+ --cz-font-weight-normal: 400;
61
+ --cz-font-weight-medium: 500;
62
+ --cz-font-weight-semibold: 600;
63
+ --cz-font-weight-bold: 700;
64
+ --cz-font-lineHeight-tight: 1.25;
65
+ --cz-font-lineHeight-normal: 1.5;
66
+ --cz-font-lineHeight-relaxed: 1.75;
67
+ }
68
+
69
+ .dark {
70
+ --cz-color-bg: 220 40% 3%;
71
+ --cz-color-fg: 210 40% 96%;
72
+ --cz-color-primary: 210 80% 65%;
73
+ --cz-color-primaryFg: 220 40% 3%;
74
+ --cz-color-secondary: 220 8% 25%;
75
+ --cz-color-secondaryFg: 210 40% 96%;
76
+ --cz-color-muted: 220 8% 20%;
77
+ --cz-color-mutedFg: 220 10% 60%;
78
+ --cz-color-danger: 0 80% 65%;
79
+ --cz-color-dangerFg: 0 0% 100%;
80
+ --cz-color-success: 142 70% 55%;
81
+ --cz-color-successFg: 0 0% 100%;
82
+ --cz-color-warning: 38 92% 60%;
83
+ --cz-color-warningFg: 0 0% 0%;
84
+ --cz-color-border: 220 10% 20%;
85
+ --cz-color-ring: 210 80% 65%;
86
+ }
87
+ /**
88
+ * CZero Component Styles
89
+ * Pure CSS using --cz-* design tokens
90
+ */
91
+
92
+ /* ===== UTILITIES ===== */
93
+
94
+ /* Display */
95
+ .cz-inline-flex { display: inline-flex; }
96
+ .cz-flex { display: flex; }
97
+ .cz-flex-col { flex-direction: column; }
98
+ .cz-items-center { align-items: center; }
99
+ .cz-justify-center { justify-content: center; }
100
+ .cz-flex-wrap { flex-wrap: wrap; }
101
+
102
+ /* Gap */
103
+ .cz-gap-1 { gap: 0.25rem; }
104
+ .cz-gap-1\.5 { gap: 0.375rem; }
105
+ .cz-gap-2 { gap: 0.5rem; }
106
+
107
+ /* Width */
108
+ .cz-w-full { width: 100%; }
109
+
110
+ /* Whitespace */
111
+ .cz-whitespace-nowrap { white-space: nowrap; }
112
+
113
+ /* Opacity */
114
+ .cz-opacity-25 { opacity: 0.25; }
115
+ .cz-opacity-50 { opacity: 0.5; }
116
+ .cz-opacity-75 { opacity: 0.75; }
117
+
118
+ /* Animation */
119
+ @keyframes cz-spin {
120
+ from { transform: rotate(0deg); }
121
+ to { transform: rotate(360deg); }
122
+ }
123
+ .cz-animate-spin { animation: cz-spin 1s linear infinite; }
124
+
125
+ /* Sizing */
126
+ .cz-h-4 { height: 1rem; }
127
+ .cz-w-4 { width: 1rem; }
128
+ .cz-h-8 { height: 2rem; }
129
+ .cz-h-10 { height: 2.5rem; }
130
+ .cz-h-12 { height: 3rem; }
131
+
132
+ /* Padding */
133
+ .cz-px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }
134
+ .cz-px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }
135
+ .cz-px-4 { padding-left: 1rem; padding-right: 1rem; }
136
+ .cz-px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }
137
+ .cz-py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; }
138
+ .cz-p-lg { padding: var(--cz-spacing-lg); }
139
+ .cz-pb-md { padding-bottom: var(--cz-spacing-md); }
140
+ .cz-pt-md { padding-top: var(--cz-spacing-md); }
141
+ .cz-px-1\.5 { padding-left: 0.375rem; padding-right: 0.375rem; }
142
+
143
+ /* Margin */
144
+ .cz-mb-md { margin-bottom: var(--cz-spacing-md); }
145
+ .cz-mt-md { margin-top: var(--cz-spacing-md); }
146
+
147
+ /* Typography */
148
+ .cz-text-xs { font-size: var(--cz-font-size-xs); }
149
+ .cz-text-sm { font-size: var(--cz-font-size-sm); }
150
+ .cz-text-md { font-size: var(--cz-font-size-md); }
151
+ .cz-text-lg { font-size: var(--cz-font-size-lg); }
152
+ .cz-font-medium { font-weight: var(--cz-font-weight-medium); }
153
+ .cz-font-semibold { font-weight: var(--cz-font-weight-semibold); }
154
+ .cz-leading-tight { line-height: var(--cz-font-lineHeight-tight); }
155
+
156
+ /* Colors - Background */
157
+ .cz-bg-bg { background-color: hsl(var(--cz-color-bg)); }
158
+ .cz-bg-primary { background-color: hsl(var(--cz-color-primary)); }
159
+ .cz-bg-secondary { background-color: hsl(var(--cz-color-secondary)); }
160
+ .cz-bg-muted { background-color: hsl(var(--cz-color-muted)); }
161
+ .cz-bg-danger { background-color: hsl(var(--cz-color-danger)); }
162
+ .cz-bg-success { background-color: hsl(var(--cz-color-success)); }
163
+ .cz-bg-warning { background-color: hsl(var(--cz-color-warning)); }
164
+ .cz-bg-transparent { background-color: transparent; }
165
+
166
+ /* Colors - Text */
167
+ .cz-text-fg { color: hsl(var(--cz-color-fg)); }
168
+ .cz-text-primary-fg { color: hsl(var(--cz-color-primaryFg)); }
169
+ .cz-text-secondary-fg { color: hsl(var(--cz-color-secondaryFg)); }
170
+ .cz-text-muted-fg { color: hsl(var(--cz-color-mutedFg)); }
171
+ .cz-text-danger { color: hsl(var(--cz-color-danger)); }
172
+ .cz-text-danger-fg { color: hsl(var(--cz-color-dangerFg)); }
173
+ .cz-text-success-fg { color: hsl(var(--cz-color-successFg)); }
174
+ .cz-text-warning-fg { color: hsl(var(--cz-color-warningFg)); }
175
+
176
+ /* Border */
177
+ .cz-border { border-width: 1px; border-style: solid; }
178
+ .cz-border-b { border-bottom-width: 1px; border-bottom-style: solid; }
179
+ .cz-border-t { border-top-width: 1px; border-top-style: solid; }
180
+ .cz-border-border { border-color: hsl(var(--cz-color-border)); }
181
+ .cz-border-danger { border-color: hsl(var(--cz-color-danger)); }
182
+
183
+ /* Border Radius */
184
+ .cz-rounded-sm { border-radius: var(--cz-radius-sm); }
185
+ .cz-rounded-md { border-radius: var(--cz-radius-md); }
186
+ .cz-rounded-lg { border-radius: var(--cz-radius-lg); }
187
+ .cz-rounded-full { border-radius: var(--cz-radius-full); }
188
+
189
+ /* Shadow */
190
+ .cz-shadow-sm { box-shadow: var(--cz-shadow-sm); }
191
+
192
+ /* Transitions */
193
+ .cz-transition { transition: all var(--cz-transition-fast); }
194
+
195
+ /* States */
196
+ .cz-disabled {
197
+ pointer-events: none;
198
+ opacity: 0.5;
199
+ cursor: not-allowed;
200
+ }
201
+
202
+ /* Focus */
203
+ .cz-focus-ring:focus {
204
+ outline: none;
205
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
206
+ }
207
+
208
+ .cz-focus-ring:focus-visible {
209
+ outline: none;
210
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
211
+ }
212
+
213
+ /* Hover states */
214
+ .cz-hover-opacity:hover { opacity: 0.9; }
215
+ .cz-hover-muted:hover { background-color: hsl(var(--cz-color-muted)); }
216
+
217
+ /* ===== BUTTON ===== */
218
+
219
+ .cz-btn {
220
+ display: inline-flex;
221
+ align-items: center;
222
+ justify-content: center;
223
+ gap: 0.5rem;
224
+ border-radius: var(--cz-radius-md);
225
+ font-weight: var(--cz-font-weight-medium);
226
+ transition: all var(--cz-transition-fast);
227
+ cursor: pointer;
228
+ border: none;
229
+ }
230
+
231
+ .cz-btn:focus-visible {
232
+ outline: none;
233
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
234
+ }
235
+
236
+ .cz-btn:disabled {
237
+ pointer-events: none;
238
+ opacity: 0.5;
239
+ }
240
+
241
+ /* Button Sizes */
242
+ .cz-btn-sm { height: 2rem; padding: 0 0.75rem; font-size: var(--cz-font-size-sm); }
243
+ .cz-btn-md { height: 2.5rem; padding: 0 1rem; font-size: var(--cz-font-size-md); }
244
+ .cz-btn-lg { height: 3rem; padding: 0 1.5rem; font-size: var(--cz-font-size-lg); }
245
+
246
+ /* Button Variants */
247
+ .cz-btn-primary {
248
+ background-color: hsl(var(--cz-color-primary));
249
+ color: hsl(var(--cz-color-primaryFg));
250
+ }
251
+ .cz-btn-primary:hover { opacity: 0.9; }
252
+
253
+ .cz-btn-secondary {
254
+ background-color: hsl(var(--cz-color-secondary));
255
+ color: hsl(var(--cz-color-secondaryFg));
256
+ }
257
+ .cz-btn-secondary:hover { opacity: 0.8; }
258
+
259
+ .cz-btn-outline {
260
+ background-color: transparent;
261
+ border: 1px solid hsl(var(--cz-color-border));
262
+ color: hsl(var(--cz-color-fg));
263
+ }
264
+ .cz-btn-outline:hover { background-color: hsl(var(--cz-color-muted)); }
265
+
266
+ .cz-btn-ghost {
267
+ background-color: transparent;
268
+ color: hsl(var(--cz-color-fg));
269
+ }
270
+ .cz-btn-ghost:hover { background-color: hsl(var(--cz-color-muted)); }
271
+
272
+ .cz-btn-danger {
273
+ background-color: hsl(var(--cz-color-danger));
274
+ color: hsl(var(--cz-color-dangerFg));
275
+ }
276
+ .cz-btn-danger:hover { opacity: 0.9; }
277
+
278
+ .cz-btn-link {
279
+ background-color: transparent;
280
+ color: hsl(var(--cz-color-primary));
281
+ text-decoration: underline;
282
+ text-underline-offset: 4px;
283
+ }
284
+ .cz-btn-link:hover { text-decoration-thickness: 2px; }
285
+
286
+ /* Button Icon Size */
287
+ .cz-btn-icon {
288
+ width: 2.5rem;
289
+ height: 2.5rem;
290
+ padding: 0;
291
+ }
292
+ .cz-btn-icon.cz-btn-sm { width: 2rem; height: 2rem; }
293
+ .cz-btn-icon.cz-btn-lg { width: 3rem; height: 3rem; }
294
+
295
+ /* Button Loading State */
296
+ .cz-btn-loading { position: relative; }
297
+ .cz-btn-spinner {
298
+ width: 1rem;
299
+ height: 1rem;
300
+ animation: cz-spin 0.75s linear infinite;
301
+ flex-shrink: 0;
302
+ }
303
+ .cz-btn-content { opacity: 1; }
304
+
305
+ /* ===== INPUT ===== */
306
+
307
+ .cz-input-field {
308
+ display: flex;
309
+ flex-direction: column;
310
+ gap: 0.375rem;
311
+ }
312
+
313
+ .cz-input-wrapper {
314
+ position: relative;
315
+ display: flex;
316
+ align-items: center;
317
+ width: 100%;
318
+ --cz-input-icon-spacing-current: 2.5rem;
319
+ --cz-input-icon-size-current: 1rem;
320
+ --cz-input-clear-icon-size-current: var(--cz-input-icon-size-current);
321
+ }
322
+
323
+ .cz-input-wrapper-sm {
324
+ --cz-input-icon-spacing-current: 2rem;
325
+ --cz-input-icon-size-current: 0.875rem;
326
+ --cz-input-clear-icon-size-current: var(--cz-input-icon-size-current);
327
+ }
328
+
329
+ .cz-input-wrapper-md {
330
+ --cz-input-icon-spacing-current: 2.5rem;
331
+ --cz-input-icon-size-current: 1rem;
332
+ --cz-input-clear-icon-size-current: var(--cz-input-icon-size-current);
333
+ }
334
+
335
+ .cz-input-wrapper-lg {
336
+ --cz-input-icon-spacing-current: 3rem;
337
+ --cz-input-icon-size-current: 1.125rem;
338
+ --cz-input-clear-icon-size-current: var(--cz-input-icon-size-current);
339
+ }
340
+
341
+ .cz-input {
342
+ width: 100%;
343
+ border-radius: var(--cz-radius-md);
344
+ border: 1px solid hsl(var(--cz-color-border));
345
+ background-color: hsl(var(--cz-color-bg));
346
+ color: hsl(var(--cz-color-fg));
347
+ transition: all var(--cz-transition-fast);
348
+ }
349
+
350
+ .cz-input::placeholder {
351
+ color: hsl(var(--cz-color-mutedFg));
352
+ }
353
+
354
+ .cz-input:focus {
355
+ outline: none;
356
+ border-color: hsl(var(--cz-color-ring));
357
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-ring) / 0.2);
358
+ }
359
+
360
+ .cz-input:disabled {
361
+ cursor: not-allowed;
362
+ opacity: 0.5;
363
+ background-color: hsl(var(--cz-color-muted));
364
+ color: hsl(var(--cz-color-mutedFg));
365
+ }
366
+
367
+ .cz-input:read-only {
368
+ cursor: default;
369
+ background-color: hsl(var(--cz-color-muted));
370
+ color: hsl(var(--cz-color-mutedFg));
371
+ }
372
+
373
+ .cz-input-error {
374
+ border-color: hsl(var(--cz-color-danger));
375
+ }
376
+ .cz-input-error:focus {
377
+ border-color: hsl(var(--cz-color-danger));
378
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-danger) / 0.2);
379
+ }
380
+
381
+ /* Input with Icons */
382
+ .cz-input-has-left-icon .cz-input { padding-left: var(--cz-input-icon-spacing-current); }
383
+ .cz-input-has-right-icon .cz-input { padding-right: var(--cz-input-icon-spacing-current); }
384
+
385
+ .cz-input-icon {
386
+ position: absolute;
387
+ display: flex;
388
+ align-items: center;
389
+ justify-content: center;
390
+ width: var(--cz-input-icon-spacing-current);
391
+ height: 100%;
392
+ color: hsl(var(--cz-color-mutedFg));
393
+ pointer-events: none;
394
+ transition: color var(--cz-transition-fast);
395
+ }
396
+ .cz-input-icon svg {
397
+ width: var(--cz-input-icon-size-current);
398
+ height: var(--cz-input-icon-size-current);
399
+ }
400
+ .cz-input-icon-left { left: 0; }
401
+ .cz-input-icon-right { right: 0; }
402
+
403
+ .cz-input-wrapper:focus-within .cz-input-icon {
404
+ color: hsl(var(--cz-color-primary));
405
+ }
406
+
407
+ .cz-input-wrapper-error .cz-input-icon {
408
+ color: hsl(var(--cz-color-danger));
409
+ }
410
+
411
+ /* Input Clear Button */
412
+ .cz-input-clear {
413
+ position: absolute;
414
+ right: 0;
415
+ display: flex;
416
+ align-items: center;
417
+ justify-content: center;
418
+ width: var(--cz-input-icon-spacing-current);
419
+ height: 100%;
420
+ color: hsl(var(--cz-color-mutedFg));
421
+ background: transparent;
422
+ border: none;
423
+ border-radius: var(--cz-radius-sm);
424
+ cursor: pointer;
425
+ transition: color var(--cz-transition-fast), background-color var(--cz-transition-fast);
426
+ }
427
+ .cz-input-clear:hover {
428
+ color: hsl(var(--cz-color-danger));
429
+ background-color: hsl(var(--cz-color-muted));
430
+ }
431
+ .cz-input-clear svg {
432
+ width: var(--cz-input-clear-icon-size-current);
433
+ height: var(--cz-input-clear-icon-size-current);
434
+ }
435
+
436
+ /* Input Password Toggle */
437
+ .cz-input-password-toggle {
438
+ position: absolute;
439
+ right: 0;
440
+ display: flex;
441
+ align-items: center;
442
+ justify-content: center;
443
+ width: var(--cz-input-icon-spacing-current);
444
+ height: 100%;
445
+ color: hsl(var(--cz-color-mutedFg));
446
+ background: transparent;
447
+ border: none;
448
+ border-radius: var(--cz-radius-sm);
449
+ cursor: pointer;
450
+ transition: color var(--cz-transition-fast), background-color var(--cz-transition-fast);
451
+ }
452
+
453
+ .cz-input-password-toggle:hover {
454
+ color: hsl(var(--cz-color-primary));
455
+ background-color: hsl(var(--cz-color-muted));
456
+ }
457
+
458
+ .cz-input-password-toggle svg {
459
+ width: var(--cz-input-clear-icon-size-current);
460
+ height: var(--cz-input-clear-icon-size-current);
461
+ }
462
+
463
+ /* Input Description */
464
+ .cz-input-description {
465
+ font-size: var(--cz-font-size-xs);
466
+ color: hsl(var(--cz-color-mutedFg));
467
+ }
468
+
469
+ /* Input Sizes */
470
+ .cz-input-sm { height: 2rem; padding: 0 0.5rem; font-size: var(--cz-font-size-sm); }
471
+ .cz-input-md { height: 2.5rem; padding: 0 0.75rem; font-size: var(--cz-font-size-md); }
472
+ .cz-input-lg { height: 3rem; padding: 0 1rem; font-size: var(--cz-font-size-lg); }
473
+
474
+
475
+ /* ===== CARD ===== */
476
+
477
+ .cz-card {
478
+ border-radius: var(--cz-radius-lg);
479
+ border: 1px solid hsl(var(--cz-color-border));
480
+ background-color: hsl(var(--cz-color-bg));
481
+ box-shadow: var(--cz-shadow-sm);
482
+ padding: var(--cz-spacing-lg);
483
+ }
484
+
485
+ .cz-card-no-padding {
486
+ padding: 0;
487
+ }
488
+
489
+ .cz-card-header {
490
+ display: flex;
491
+ flex-direction: column;
492
+ gap: 0.375rem;
493
+ padding-bottom: var(--cz-spacing-md);
494
+ border-bottom: 1px solid hsl(var(--cz-color-border));
495
+ margin-bottom: var(--cz-spacing-md);
496
+ }
497
+
498
+ .cz-card-title {
499
+ font-size: var(--cz-font-size-lg);
500
+ font-weight: var(--cz-font-weight-semibold);
501
+ color: hsl(var(--cz-color-fg));
502
+ line-height: var(--cz-font-lineHeight-tight);
503
+ }
504
+
505
+ .cz-card-description {
506
+ font-size: var(--cz-font-size-sm);
507
+ color: hsl(var(--cz-color-mutedFg));
508
+ }
509
+
510
+ .cz-card-body {
511
+ color: hsl(var(--cz-color-fg));
512
+ }
513
+
514
+ .cz-card-footer {
515
+ display: flex;
516
+ align-items: center;
517
+ gap: 0.5rem;
518
+ padding-top: var(--cz-spacing-md);
519
+ margin-top: var(--cz-spacing-md);
520
+ border-top: 1px solid hsl(var(--cz-color-border));
521
+ }
522
+
523
+ /* ===== BADGE ===== */
524
+
525
+ .cz-badge {
526
+ display: inline-flex;
527
+ align-items: center;
528
+ border-radius: var(--cz-radius-full);
529
+ font-weight: var(--cz-font-weight-medium);
530
+ white-space: nowrap;
531
+ }
532
+
533
+ /* Badge Sizes */
534
+ .cz-badge-sm { padding: 0.125rem 0.375rem; font-size: 0.7rem; }
535
+ .cz-badge-md { padding: 0.125rem 0.5rem; font-size: var(--cz-font-size-xs); }
536
+
537
+ /* Badge Variants */
538
+ .cz-badge-default {
539
+ background-color: hsl(var(--cz-color-secondary));
540
+ color: hsl(var(--cz-color-secondaryFg));
541
+ }
542
+
543
+ .cz-badge-primary {
544
+ background-color: hsl(var(--cz-color-primary));
545
+ color: hsl(var(--cz-color-primaryFg));
546
+ }
547
+
548
+ .cz-badge-success {
549
+ background-color: hsl(var(--cz-color-success));
550
+ color: hsl(var(--cz-color-successFg));
551
+ }
552
+
553
+ .cz-badge-danger {
554
+ background-color: hsl(var(--cz-color-danger));
555
+ color: hsl(var(--cz-color-dangerFg));
556
+ }
557
+
558
+ .cz-badge-warning {
559
+ background-color: hsl(var(--cz-color-warning));
560
+ color: hsl(var(--cz-color-warningFg));
561
+ }
562
+
563
+ .cz-badge-outline {
564
+ background-color: transparent;
565
+ border: 1px solid hsl(var(--cz-color-border));
566
+ color: hsl(var(--cz-color-fg));
567
+ }
568
+
569
+ /* ===== LABEL ===== */
570
+
571
+ .cz-label {
572
+ font-size: var(--cz-font-size-sm);
573
+ font-weight: var(--cz-font-weight-medium);
574
+ color: hsl(var(--cz-color-fg));
575
+ }
576
+
577
+ /* ===== ERROR TEXT ===== */
578
+
579
+ .cz-error {
580
+ font-size: var(--cz-font-size-sm);
581
+ color: hsl(var(--cz-color-danger));
582
+ }
583
+
584
+ /* ===== TEXTAREA ===== */
585
+
586
+ .cz-textarea-field {
587
+ display: flex;
588
+ flex-direction: column;
589
+ gap: 0.375rem;
590
+ }
591
+
592
+ .cz-textarea {
593
+ width: 100%;
594
+ min-height: 5rem;
595
+ border-radius: var(--cz-radius-md);
596
+ border: 1px solid hsl(var(--cz-color-border));
597
+ background-color: hsl(var(--cz-color-bg));
598
+ color: hsl(var(--cz-color-fg));
599
+ transition: all var(--cz-transition-fast);
600
+ resize: vertical;
601
+ font-family: inherit;
602
+ }
603
+
604
+ .cz-textarea::placeholder {
605
+ color: hsl(var(--cz-color-mutedFg));
606
+ }
607
+
608
+ .cz-textarea:focus {
609
+ outline: none;
610
+ border-color: hsl(var(--cz-color-ring));
611
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-ring) / 0.2);
612
+ }
613
+
614
+ .cz-textarea:disabled {
615
+ cursor: not-allowed;
616
+ opacity: 0.5;
617
+ }
618
+
619
+ .cz-textarea-error {
620
+ border-color: hsl(var(--cz-color-danger));
621
+ }
622
+ .cz-textarea-error:focus {
623
+ border-color: hsl(var(--cz-color-danger));
624
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-danger) / 0.2);
625
+ }
626
+
627
+ .cz-textarea-auto-resize {
628
+ overflow: hidden;
629
+ resize: none;
630
+ }
631
+
632
+ .cz-textarea-description {
633
+ font-size: var(--cz-font-size-xs);
634
+ color: hsl(var(--cz-color-mutedFg));
635
+ }
636
+
637
+ /* Textarea Sizes */
638
+ .cz-textarea-sm { padding: 0.375rem 0.5rem; font-size: var(--cz-font-size-sm); }
639
+ .cz-textarea-md { padding: 0.5rem 0.75rem; font-size: var(--cz-font-size-md); }
640
+ .cz-textarea-lg { padding: 0.75rem 1rem; font-size: var(--cz-font-size-lg); }
641
+
642
+ /* ===== SWITCH ===== */
643
+
644
+ .cz-switch {
645
+ all: unset;
646
+ box-sizing: border-box;
647
+ display: inline-flex;
648
+ align-items: center;
649
+ position: relative;
650
+ width: 2.75rem;
651
+ height: 1.5rem;
652
+ border-radius: var(--cz-radius-full);
653
+ background-color: hsl(var(--cz-color-muted));
654
+ transition: all var(--cz-transition-fast);
655
+ cursor: pointer;
656
+ }
657
+
658
+ .cz-switch:focus-visible {
659
+ outline: none;
660
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
661
+ }
662
+
663
+ .cz-switch[data-state="checked"] {
664
+ background-color: hsl(var(--cz-color-primary));
665
+ }
666
+
667
+ .cz-switch.cz-switch-checked {
668
+ background-color: hsl(var(--cz-color-primary));
669
+ }
670
+
671
+ .cz-switch.cz-disabled,
672
+ .cz-switch:disabled {
673
+ opacity: 0.5;
674
+ cursor: not-allowed;
675
+ }
676
+
677
+ .cz-switch-thumb {
678
+ display: block;
679
+ width: 1.25rem;
680
+ height: 1.25rem;
681
+ border-radius: var(--cz-radius-full);
682
+ background-color: hsl(var(--cz-color-bg));
683
+ box-shadow: var(--cz-shadow-sm);
684
+ transition: transform var(--cz-transition-fast);
685
+ transform: translateX(0.125rem);
686
+ }
687
+
688
+ .cz-switch[data-state="checked"] .cz-switch-thumb,
689
+ .cz-switch.cz-switch-checked .cz-switch-thumb {
690
+ transform: translateX(calc(2.75rem - 1.25rem - 0.125rem));
691
+ }
692
+
693
+ /* Switch Sizes */
694
+ .cz-switch-sm { width: 2rem; height: 1.125rem; }
695
+ .cz-switch-sm .cz-switch-thumb { width: 0.875rem; height: 0.875rem; transform: translateX(0.125rem); }
696
+ .cz-switch-sm[data-state="checked"] .cz-switch-thumb,
697
+ .cz-switch-sm.cz-switch-checked .cz-switch-thumb { transform: translateX(calc(2rem - 0.875rem - 0.125rem)); }
698
+
699
+ .cz-switch-md { width: 2.75rem; height: 1.5rem; }
700
+ .cz-switch-md .cz-switch-thumb { width: 1.25rem; height: 1.25rem; transform: translateX(0.125rem); }
701
+ .cz-switch-md[data-state="checked"] .cz-switch-thumb,
702
+ .cz-switch-md.cz-switch-checked .cz-switch-thumb { transform: translateX(calc(2.75rem - 1.25rem - 0.125rem)); }
703
+
704
+ .cz-switch-lg { width: 3.5rem; height: 1.875rem; }
705
+ .cz-switch-lg .cz-switch-thumb { width: 1.625rem; height: 1.625rem; transform: translateX(0.125rem); }
706
+ .cz-switch-lg[data-state="checked"] .cz-switch-thumb,
707
+ .cz-switch-lg.cz-switch-checked .cz-switch-thumb { transform: translateX(calc(3.5rem - 1.625rem - 0.125rem)); }
708
+
709
+ /* Switch with Label */
710
+ .cz-switch-container {
711
+ display: inline-flex;
712
+ align-items: flex-start;
713
+ gap: 0.75rem;
714
+ cursor: pointer;
715
+ }
716
+ .cz-switch-container.cz-disabled {
717
+ opacity: 0.5;
718
+ cursor: not-allowed;
719
+ }
720
+
721
+ .cz-switch-label-left { flex-direction: row-reverse; }
722
+ .cz-switch-label-right { flex-direction: row; }
723
+
724
+ .cz-switch-text {
725
+ display: flex;
726
+ flex-direction: column;
727
+ gap: 0.125rem;
728
+ }
729
+
730
+ .cz-switch-label {
731
+ font-size: var(--cz-font-size-sm);
732
+ font-weight: var(--cz-font-weight-medium);
733
+ color: hsl(var(--cz-color-fg));
734
+ line-height: 1.5;
735
+ }
736
+
737
+ .cz-switch-description {
738
+ font-size: var(--cz-font-size-xs);
739
+ color: hsl(var(--cz-color-mutedFg));
740
+ }
741
+
742
+ /* ===== AVATAR ===== */
743
+
744
+ .cz-avatar {
745
+ display: inline-flex;
746
+ align-items: center;
747
+ justify-content: center;
748
+ border-radius: var(--cz-radius-full);
749
+ background-color: hsl(var(--cz-color-muted));
750
+ overflow: hidden;
751
+ flex-shrink: 0;
752
+ }
753
+
754
+ .cz-avatar-image {
755
+ width: 100%;
756
+ height: 100%;
757
+ object-fit: cover;
758
+ }
759
+
760
+ .cz-avatar-fallback {
761
+ font-weight: var(--cz-font-weight-medium);
762
+ color: hsl(var(--cz-color-mutedFg));
763
+ text-transform: uppercase;
764
+ }
765
+
766
+ /* Avatar Sizes */
767
+ .cz-avatar-sm { width: 2rem; height: 2rem; font-size: var(--cz-font-size-xs); }
768
+ .cz-avatar-md { width: 2.5rem; height: 2.5rem; font-size: var(--cz-font-size-sm); }
769
+ .cz-avatar-lg { width: 3.5rem; height: 3.5rem; font-size: var(--cz-font-size-md); }
770
+
771
+ /* ===== SEPARATOR ===== */
772
+
773
+ .cz-separator {
774
+ background-color: hsl(var(--cz-color-border));
775
+ flex-shrink: 0;
776
+ }
777
+
778
+ .cz-separator-horizontal {
779
+ height: 1px;
780
+ width: 100%;
781
+ }
782
+
783
+ .cz-separator-vertical {
784
+ width: 1px;
785
+ height: 100%;
786
+ align-self: stretch;
787
+ }
788
+
789
+ /* ===== ALERT ===== */
790
+
791
+ .cz-alert {
792
+ display: flex;
793
+ flex-direction: column;
794
+ gap: 0.25rem;
795
+ padding: var(--cz-spacing-md) var(--cz-spacing-lg);
796
+ border-radius: var(--cz-radius-md);
797
+ border: 1px solid transparent;
798
+ }
799
+
800
+ .cz-alert-title {
801
+ font-weight: var(--cz-font-weight-semibold);
802
+ font-size: var(--cz-font-size-sm);
803
+ }
804
+
805
+ .cz-alert-content {
806
+ font-size: var(--cz-font-size-sm);
807
+ }
808
+
809
+ /* Alert Variants */
810
+ .cz-alert-info {
811
+ background-color: hsl(var(--cz-color-primary) / 0.1);
812
+ border-color: hsl(var(--cz-color-primary) / 0.3);
813
+ color: hsl(var(--cz-color-primary));
814
+ }
815
+
816
+ .cz-alert-success {
817
+ background-color: hsl(var(--cz-color-success) / 0.1);
818
+ border-color: hsl(var(--cz-color-success) / 0.3);
819
+ color: hsl(var(--cz-color-success));
820
+ }
821
+
822
+ .cz-alert-warning {
823
+ background-color: hsl(var(--cz-color-warning) / 0.1);
824
+ border-color: hsl(var(--cz-color-warning) / 0.3);
825
+ color: hsl(var(--cz-color-warning));
826
+ }
827
+
828
+ .cz-alert-danger {
829
+ background-color: hsl(var(--cz-color-danger) / 0.1);
830
+ border-color: hsl(var(--cz-color-danger) / 0.3);
831
+ color: hsl(var(--cz-color-danger));
832
+ }
833
+
834
+ /* ===== CHECKBOX ===== */
835
+
836
+ .cz-checkbox-wrapper {
837
+ display: inline-flex;
838
+ align-items: center;
839
+ gap: 0.5rem;
840
+ cursor: pointer;
841
+ user-select: none;
842
+ }
843
+
844
+ .cz-checkbox-wrapper.cz-disabled {
845
+ cursor: not-allowed;
846
+ opacity: 0.5;
847
+ }
848
+
849
+ .cz-checkbox {
850
+ all: unset;
851
+ box-sizing: border-box;
852
+ display: inline-flex;
853
+ align-items: center;
854
+ justify-content: center;
855
+ width: 1.25rem;
856
+ height: 1.25rem;
857
+ border-radius: var(--cz-radius-sm);
858
+ border: 2px solid hsl(var(--cz-color-border));
859
+ background-color: hsl(var(--cz-color-bg));
860
+ transition: all var(--cz-transition-fast);
861
+ flex-shrink: 0;
862
+ cursor: pointer;
863
+ }
864
+
865
+ .cz-checkbox:hover {
866
+ border-color: hsl(var(--cz-color-primary));
867
+ }
868
+
869
+ .cz-checkbox:focus-visible {
870
+ outline: none;
871
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
872
+ }
873
+
874
+ .cz-checkbox:disabled {
875
+ cursor: not-allowed;
876
+ opacity: 0.5;
877
+ }
878
+
879
+ .cz-checkbox[data-state="checked"],
880
+ .cz-checkbox[data-state="indeterminate"] {
881
+ background-color: hsl(var(--cz-color-primary));
882
+ border-color: hsl(var(--cz-color-primary));
883
+ }
884
+
885
+ .cz-checkbox-indicator {
886
+ display: flex;
887
+ align-items: center;
888
+ justify-content: center;
889
+ color: hsl(var(--cz-color-primaryFg));
890
+ width: 100%;
891
+ height: 100%;
892
+ }
893
+
894
+ .cz-checkbox-indicator svg {
895
+ width: 12px;
896
+ height: 12px;
897
+ }
898
+
899
+ .cz-checkbox-label {
900
+ font-size: var(--cz-font-size-sm);
901
+ color: hsl(var(--cz-color-fg));
902
+ }
903
+
904
+ /* Checkbox Sizes */
905
+ .cz-checkbox-sm { width: 1rem; height: 1rem; }
906
+ .cz-checkbox-sm .cz-checkbox-indicator svg { width: 10px; height: 10px; }
907
+
908
+ .cz-checkbox-md { width: 1.25rem; height: 1.25rem; }
909
+ .cz-checkbox-md .cz-checkbox-indicator svg { width: 12px; height: 12px; }
910
+
911
+ .cz-checkbox-lg { width: 1.5rem; height: 1.5rem; }
912
+ .cz-checkbox-lg .cz-checkbox-indicator svg { width: 14px; height: 14px; }
913
+
914
+ /* Checkbox with Description */
915
+ .cz-checkbox-wrapper-with-description {
916
+ align-items: flex-start;
917
+ }
918
+ .cz-checkbox-wrapper-with-description .cz-checkbox {
919
+ margin-top: 0.125rem;
920
+ }
921
+
922
+ .cz-checkbox-text {
923
+ display: flex;
924
+ flex-direction: column;
925
+ gap: 0.125rem;
926
+ }
927
+
928
+ .cz-checkbox-description {
929
+ font-size: var(--cz-font-size-xs);
930
+ color: hsl(var(--cz-color-mutedFg));
931
+ }
932
+
933
+ /* ===== RADIO GROUP ===== */
934
+
935
+ .cz-radio-group {
936
+ display: flex;
937
+ gap: 0.5rem;
938
+ }
939
+ .cz-radio-group-vertical { flex-direction: column; }
940
+ .cz-radio-group-horizontal { flex-direction: row; flex-wrap: wrap; }
941
+
942
+ .cz-radio-wrapper {
943
+ display: inline-flex;
944
+ align-items: center;
945
+ gap: 0.5rem;
946
+ cursor: pointer;
947
+ user-select: none;
948
+ }
949
+
950
+ .cz-radio-wrapper.cz-disabled {
951
+ cursor: not-allowed;
952
+ opacity: 0.5;
953
+ }
954
+
955
+ .cz-radio-wrapper-with-description {
956
+ align-items: flex-start;
957
+ }
958
+ .cz-radio-wrapper-with-description .cz-radio {
959
+ margin-top: 0.125rem;
960
+ }
961
+
962
+ .cz-radio {
963
+ all: unset;
964
+ box-sizing: border-box;
965
+ display: inline-flex;
966
+ align-items: center;
967
+ justify-content: center;
968
+ width: 1.25rem;
969
+ height: 1.25rem;
970
+ border-radius: var(--cz-radius-full);
971
+ border: 2px solid hsl(var(--cz-color-border));
972
+ background-color: hsl(var(--cz-color-bg));
973
+ transition: all var(--cz-transition-fast);
974
+ flex-shrink: 0;
975
+ cursor: pointer;
976
+ }
977
+
978
+ .cz-radio:hover {
979
+ border-color: hsl(var(--cz-color-primary));
980
+ }
981
+
982
+ .cz-radio:focus-visible {
983
+ outline: none;
984
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
985
+ }
986
+
987
+ .cz-radio:disabled {
988
+ cursor: not-allowed;
989
+ opacity: 0.5;
990
+ }
991
+
992
+ .cz-radio[data-state="checked"] {
993
+ border-color: hsl(var(--cz-color-primary));
994
+ }
995
+
996
+ .cz-radio-indicator {
997
+ width: 0.625rem;
998
+ height: 0.625rem;
999
+ border-radius: var(--cz-radius-full);
1000
+ background-color: hsl(var(--cz-color-primary));
1001
+ transform: scale(0);
1002
+ transition: transform var(--cz-transition-fast);
1003
+ }
1004
+
1005
+ .cz-radio[data-state="checked"] .cz-radio-indicator {
1006
+ transform: scale(1);
1007
+ }
1008
+
1009
+ .cz-radio-text {
1010
+ display: flex;
1011
+ flex-direction: column;
1012
+ gap: 0.125rem;
1013
+ }
1014
+
1015
+ .cz-radio-label {
1016
+ font-size: var(--cz-font-size-sm);
1017
+ color: hsl(var(--cz-color-fg));
1018
+ }
1019
+
1020
+ .cz-radio-description {
1021
+ font-size: var(--cz-font-size-xs);
1022
+ color: hsl(var(--cz-color-mutedFg));
1023
+ }
1024
+
1025
+ /* ===== TOOLTIP ===== */
1026
+
1027
+ .cz-tooltip-wrapper {
1028
+ position: relative;
1029
+ display: inline-flex;
1030
+ }
1031
+
1032
+ .cz-tooltip {
1033
+ position: absolute;
1034
+ z-index: 50;
1035
+ padding: 0.375rem 0.75rem;
1036
+ font-size: var(--cz-font-size-sm);
1037
+ background-color: hsl(var(--cz-color-fg));
1038
+ color: hsl(var(--cz-color-bg));
1039
+ border-radius: var(--cz-radius-md);
1040
+ white-space: nowrap;
1041
+ pointer-events: none;
1042
+ box-shadow: var(--cz-shadow-md);
1043
+ }
1044
+
1045
+ .cz-tooltip-top {
1046
+ bottom: 100%;
1047
+ left: 50%;
1048
+ transform: translateX(-50%);
1049
+ margin-bottom: 0.5rem;
1050
+ }
1051
+
1052
+ .cz-tooltip-bottom {
1053
+ top: 100%;
1054
+ left: 50%;
1055
+ transform: translateX(-50%);
1056
+ margin-top: 0.5rem;
1057
+ }
1058
+
1059
+ .cz-tooltip-left {
1060
+ right: 100%;
1061
+ top: 50%;
1062
+ transform: translateY(-50%);
1063
+ margin-right: 0.5rem;
1064
+ }
1065
+
1066
+ .cz-tooltip-right {
1067
+ left: 100%;
1068
+ top: 50%;
1069
+ transform: translateY(-50%);
1070
+ margin-left: 0.5rem;
1071
+ }
1072
+
1073
+ /* ===== PROGRESS ===== */
1074
+
1075
+ .cz-progress {
1076
+ width: 100%;
1077
+ background-color: hsl(var(--cz-color-muted));
1078
+ border-radius: var(--cz-radius-full);
1079
+ overflow: hidden;
1080
+ }
1081
+
1082
+ .cz-progress-bar {
1083
+ height: 100%;
1084
+ width: 100%;
1085
+ border-radius: var(--cz-radius-full);
1086
+ transition: transform var(--cz-transition-normal);
1087
+ }
1088
+
1089
+ /* Progress Sizes */
1090
+ .cz-progress-sm { height: 0.375rem; }
1091
+ .cz-progress-md { height: 0.5rem; }
1092
+ .cz-progress-lg { height: 0.75rem; }
1093
+
1094
+ /* Progress Variants */
1095
+ .cz-progress-default { background-color: hsl(var(--cz-color-primary)); }
1096
+ .cz-progress-success { background-color: hsl(var(--cz-color-success)); }
1097
+ .cz-progress-warning { background-color: hsl(var(--cz-color-warning)); }
1098
+ .cz-progress-danger { background-color: hsl(var(--cz-color-danger)); }
1099
+
1100
+ /* ===== SKELETON ===== */
1101
+
1102
+ @keyframes cz-skeleton-pulse {
1103
+ 0%, 100% { opacity: 1; }
1104
+ 50% { opacity: 0.4; }
1105
+ }
1106
+
1107
+ .cz-skeleton {
1108
+ background-color: hsl(var(--cz-color-muted));
1109
+ animation: cz-skeleton-pulse 1.5s ease-in-out infinite;
1110
+ }
1111
+
1112
+ .cz-skeleton-text {
1113
+ height: 1rem;
1114
+ width: 100%;
1115
+ border-radius: var(--cz-radius-sm);
1116
+ }
1117
+
1118
+ .cz-skeleton-circular {
1119
+ border-radius: var(--cz-radius-full);
1120
+ }
1121
+
1122
+ .cz-skeleton-rectangular {
1123
+ border-radius: var(--cz-radius-md);
1124
+ }
1125
+
1126
+ /* ===== TABS ===== */
1127
+
1128
+ .cz-tabs {
1129
+ display: flex;
1130
+ flex-direction: column;
1131
+ width: 100%;
1132
+ }
1133
+
1134
+ .cz-tabs-list {
1135
+ display: inline-flex;
1136
+ align-items: center;
1137
+ gap: 0.25rem;
1138
+ border-bottom: 1px solid hsl(var(--cz-color-border));
1139
+ padding-bottom: 0;
1140
+ }
1141
+
1142
+ .cz-tabs-trigger {
1143
+ display: inline-flex;
1144
+ align-items: center;
1145
+ justify-content: center;
1146
+ padding: 0.5rem 1rem;
1147
+ font-size: var(--cz-font-size-sm);
1148
+ font-weight: var(--cz-font-weight-medium);
1149
+ color: hsl(var(--cz-color-mutedFg));
1150
+ background: transparent;
1151
+ border: none;
1152
+ border-bottom: 2px solid transparent;
1153
+ margin-bottom: -1px;
1154
+ cursor: pointer;
1155
+ transition: all var(--cz-transition-fast);
1156
+ }
1157
+
1158
+ .cz-tabs-trigger:hover {
1159
+ color: hsl(var(--cz-color-fg));
1160
+ }
1161
+
1162
+ .cz-tabs-trigger-active {
1163
+ color: hsl(var(--cz-color-primary));
1164
+ border-bottom-color: hsl(var(--cz-color-primary));
1165
+ }
1166
+
1167
+ .cz-tabs-trigger:focus-visible {
1168
+ outline: none;
1169
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-ring));
1170
+ border-radius: var(--cz-radius-sm);
1171
+ }
1172
+
1173
+ .cz-tabs-content {
1174
+ padding-top: var(--cz-spacing-lg);
1175
+ }
1176
+
1177
+ /* ===== DIALOG ===== */
1178
+
1179
+ .cz-dialog-overlay {
1180
+ position: fixed;
1181
+ inset: 0;
1182
+ z-index: 50;
1183
+ background-color: rgba(0, 0, 0, 0.5);
1184
+ }
1185
+
1186
+ .cz-dialog-content {
1187
+ position: fixed;
1188
+ left: 50%;
1189
+ top: 50%;
1190
+ transform: translate(-50%, -50%);
1191
+ z-index: 51;
1192
+ background-color: hsl(var(--cz-color-bg));
1193
+ border-radius: var(--cz-radius-lg);
1194
+ box-shadow: var(--cz-shadow-lg);
1195
+ max-width: 32rem;
1196
+ width: calc(100% - 2rem);
1197
+ max-height: calc(100vh - 4rem);
1198
+ overflow-y: auto;
1199
+ padding: var(--cz-spacing-lg);
1200
+ }
1201
+
1202
+ .cz-dialog-close {
1203
+ position: absolute;
1204
+ top: 0.75rem;
1205
+ right: 0.75rem;
1206
+ width: 2rem;
1207
+ height: 2rem;
1208
+ display: flex;
1209
+ align-items: center;
1210
+ justify-content: center;
1211
+ border: none;
1212
+ background: transparent;
1213
+ border-radius: var(--cz-radius-sm);
1214
+ font-size: 1.25rem;
1215
+ color: hsl(var(--cz-color-mutedFg));
1216
+ cursor: pointer;
1217
+ transition: all var(--cz-transition-fast);
1218
+ }
1219
+
1220
+ .cz-dialog-close:hover {
1221
+ background-color: hsl(var(--cz-color-muted));
1222
+ color: hsl(var(--cz-color-fg));
1223
+ }
1224
+
1225
+ .cz-dialog-header {
1226
+ display: flex;
1227
+ flex-direction: column;
1228
+ gap: 0.25rem;
1229
+ padding-bottom: var(--cz-spacing-md);
1230
+ }
1231
+
1232
+ .cz-dialog-title {
1233
+ font-size: var(--cz-font-size-lg);
1234
+ font-weight: var(--cz-font-weight-semibold);
1235
+ color: hsl(var(--cz-color-fg));
1236
+ margin: 0;
1237
+ }
1238
+
1239
+ .cz-dialog-description {
1240
+ font-size: var(--cz-font-size-sm);
1241
+ color: hsl(var(--cz-color-mutedFg));
1242
+ margin: 0;
1243
+ }
1244
+
1245
+ .cz-dialog-footer {
1246
+ display: flex;
1247
+ justify-content: flex-end;
1248
+ gap: 0.5rem;
1249
+ padding-top: var(--cz-spacing-lg);
1250
+ }
1251
+
1252
+ /* ===== MODAL ===== */
1253
+
1254
+ .cz-modal-overlay {
1255
+ position: fixed;
1256
+ inset: 0;
1257
+ z-index: 60;
1258
+ background-color: var(--cz-modal-overlay-bg, var(--color-bg-modal-overlay, rgba(15, 23, 42, 0.55)));
1259
+ backdrop-filter: blur(2px);
1260
+ animation: cz-modal-overlay-show 150ms ease;
1261
+ }
1262
+
1263
+ .cz-modal-content {
1264
+ position: fixed;
1265
+ left: 50%;
1266
+ top: 50%;
1267
+ transform: translate(-50%, -50%);
1268
+ z-index: 61;
1269
+ background-color: var(--cz-modal-content-bg, var(--color-bg-primary, hsl(var(--cz-color-bg))));
1270
+ border-radius: var(--cz-modal-content-border-radius, var(--radius-modal, var(--cz-radius-lg)));
1271
+ border: 1px solid var(--cz-modal-content-border-color, hsl(var(--cz-color-border)));
1272
+ box-shadow: var(--cz-modal-content-shadow, var(--shadow-modal, var(--cz-shadow-lg)));
1273
+ width: min(36rem, calc(100% - 2rem));
1274
+ max-width: calc(100% - 2rem);
1275
+ max-height: calc(100vh - 2rem);
1276
+ display: flex;
1277
+ flex-direction: column;
1278
+ overflow: hidden;
1279
+ animation: cz-modal-content-show 180ms ease;
1280
+ }
1281
+
1282
+ .cz-modal-size-sm { width: min(28rem, calc(100% - 2rem)); }
1283
+ .cz-modal-size-md { width: min(36rem, calc(100% - 2rem)); }
1284
+ .cz-modal-size-lg { width: min(48rem, calc(100% - 2rem)); }
1285
+ .cz-modal-size-xl { width: min(64rem, calc(100% - 2rem)); }
1286
+ .cz-modal-size-full { width: min(96vw, 96rem); }
1287
+
1288
+ .cz-modal-full-height {
1289
+ height: calc(100vh - 2rem);
1290
+ }
1291
+
1292
+ .cz-modal-header {
1293
+ display: flex;
1294
+ align-items: flex-start;
1295
+ justify-content: space-between;
1296
+ gap: var(--cz-spacing-md);
1297
+ padding: var(--cz-modal-header-padding, var(--cz-spacing-lg) var(--cz-spacing-lg) var(--cz-spacing-md));
1298
+ border-bottom: 1px solid hsl(var(--cz-color-border));
1299
+ flex-shrink: 0;
1300
+ }
1301
+
1302
+ .cz-modal-header-text {
1303
+ min-width: 0;
1304
+ display: flex;
1305
+ flex-direction: column;
1306
+ gap: 0.25rem;
1307
+ }
1308
+
1309
+ .cz-modal-title {
1310
+ margin: 0;
1311
+ font-size: var(--cz-font-size-xl);
1312
+ font-weight: var(--cz-font-weight-semibold);
1313
+ color: var(--color-primary, hsl(var(--cz-color-primary)));
1314
+ line-height: var(--cz-font-lineHeight-tight);
1315
+ }
1316
+
1317
+ .cz-modal-description {
1318
+ margin: 0;
1319
+ font-size: var(--cz-font-size-sm);
1320
+ color: hsl(var(--cz-color-mutedFg));
1321
+ }
1322
+
1323
+ .cz-modal-close-icon {
1324
+ display: inline-flex;
1325
+ align-items: center;
1326
+ justify-content: center;
1327
+ width: var(--cz-modal-close-icon-size, 2rem);
1328
+ height: var(--cz-modal-close-icon-size, 2rem);
1329
+ padding: var(--cz-modal-close-icon-padding, 0.5rem);
1330
+ flex-shrink: 0;
1331
+ border: 0;
1332
+ border-radius: var(--cz-modal-close-icon-radius, var(--radius-button, var(--cz-radius-md)));
1333
+ background: var(--cz-modal-close-icon-bg, transparent);
1334
+ color: var(--cz-modal-close-icon-color, var(--color-text-muted, hsl(var(--cz-color-mutedFg))));
1335
+ cursor: pointer;
1336
+ transition: all var(--cz-modal-close-icon-transition, 200ms ease);
1337
+ }
1338
+
1339
+ .cz-modal-close-icon:hover {
1340
+ background: var(--cz-modal-close-icon-hover-bg, var(--color-primary-bg, var(--color-bg-tertiary, hsl(var(--cz-color-muted)))));
1341
+ color: var(--cz-modal-close-icon-hover-color, var(--color-primary, hsl(var(--cz-color-primary))));
1342
+ }
1343
+
1344
+ .cz-modal-close-icon:focus,
1345
+ .cz-modal-close-icon:focus-visible {
1346
+ outline: none;
1347
+ box-shadow: var(--cz-modal-close-icon-focus-ring, none);
1348
+ }
1349
+
1350
+ .cz-modal-close-btn {
1351
+ flex-shrink: 0;
1352
+ }
1353
+
1354
+ .cz-modal-tab-btn:focus,
1355
+ .cz-modal-tab-btn:focus-visible {
1356
+ outline: none;
1357
+ box-shadow: none;
1358
+ }
1359
+
1360
+ .cz-modal-body {
1361
+ padding: var(--cz-modal-body-padding, var(--cz-spacing-md) var(--cz-spacing-lg) var(--cz-spacing-lg));
1362
+ overflow-y: auto;
1363
+ flex: 1;
1364
+ }
1365
+
1366
+ .cz-modal-footer {
1367
+ display: flex;
1368
+ align-items: center;
1369
+ justify-content: flex-end;
1370
+ gap: var(--cz-modal-footer-gap, var(--cz-spacing-md, 0.75rem));
1371
+ padding: var(--cz-modal-footer-padding, var(--cz-spacing-md) var(--cz-spacing-lg));
1372
+ border-top: 1px solid hsl(var(--cz-color-border));
1373
+ flex-shrink: 0;
1374
+ }
1375
+
1376
+ @supports not (gap: 0.75rem) {
1377
+ .cz-modal-footer > * + * {
1378
+ margin-left: var(--cz-modal-footer-gap, var(--cz-spacing-md, 0.75rem));
1379
+ }
1380
+ }
1381
+
1382
+ @keyframes cz-modal-overlay-show {
1383
+ from { opacity: 0; }
1384
+ to { opacity: 1; }
1385
+ }
1386
+
1387
+ @keyframes cz-modal-content-show {
1388
+ from { opacity: 0; transform: translate(-50%, -48%) scale(0.97); }
1389
+ to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
1390
+ }
1391
+
1392
+ /* ===== DATA TABLE ===== */
1393
+
1394
+ .cz-data-table-page-btn {
1395
+ transition: all var(--transition-fast, var(--cz-transition-fast));
1396
+ }
1397
+
1398
+ .cz-data-table-page-btn:hover:not(:disabled) {
1399
+ background: var(--cz-data-table-pagination-button-hover-bg, transparent);
1400
+ border-color: var(--cz-data-table-pagination-button-border-color, transparent);
1401
+ }
1402
+
1403
+ .cz-data-table-shimmer {
1404
+ background-size: 200% 100%;
1405
+ animation: cz-data-table-shimmer 1.5s infinite;
1406
+ }
1407
+
1408
+ @keyframes cz-data-table-shimmer {
1409
+ 0% { background-position: 200% 0; }
1410
+ 100% { background-position: -200% 0; }
1411
+ }
1412
+
1413
+ /* ===== SELECT ===== */
1414
+
1415
+ .cz-select {
1416
+ all: unset;
1417
+ box-sizing: border-box;
1418
+ display: inline-flex;
1419
+ align-items: center;
1420
+ justify-content: space-between;
1421
+ width: 100%;
1422
+ height: 2.5rem;
1423
+ padding: 0 0.75rem;
1424
+ border-radius: var(--cz-radius-md);
1425
+ border: 1px solid hsl(var(--cz-color-border));
1426
+ background-color: hsl(var(--cz-color-bg));
1427
+ color: hsl(var(--cz-color-fg));
1428
+ font-size: var(--cz-font-size-md);
1429
+ transition: all var(--cz-transition-fast);
1430
+ cursor: pointer;
1431
+ }
1432
+
1433
+ .cz-select:hover {
1434
+ border-color: hsl(var(--cz-color-primary));
1435
+ }
1436
+
1437
+ .cz-select:focus-visible {
1438
+ outline: none;
1439
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-ring));
1440
+ }
1441
+
1442
+ .cz-select:disabled,
1443
+ .cz-select[data-disabled] {
1444
+ cursor: not-allowed;
1445
+ opacity: 0.5;
1446
+ }
1447
+
1448
+ .cz-select[data-placeholder] {
1449
+ color: hsl(var(--cz-color-mutedFg));
1450
+ }
1451
+
1452
+ .cz-select-icon {
1453
+ color: hsl(var(--cz-color-mutedFg));
1454
+ margin-left: 0.5rem;
1455
+ flex-shrink: 0;
1456
+ }
1457
+
1458
+ /* Select Sizes */
1459
+ .cz-select-sm { height: 2rem; padding: 0 0.5rem; font-size: var(--cz-font-size-sm); }
1460
+ .cz-select-md { height: 2.5rem; padding: 0 0.75rem; font-size: var(--cz-font-size-md); }
1461
+ .cz-select-lg { height: 3rem; padding: 0 1rem; font-size: var(--cz-font-size-lg); }
1462
+
1463
+ /* Select Content (Dropdown) */
1464
+ .cz-select-content {
1465
+ z-index: 50;
1466
+ min-width: 8rem;
1467
+ max-height: 15rem;
1468
+ overflow: hidden;
1469
+ background-color: hsl(var(--cz-color-bg));
1470
+ border: 1px solid hsl(var(--cz-color-border));
1471
+ border-radius: var(--cz-radius-md);
1472
+ box-shadow: var(--cz-shadow-lg);
1473
+ }
1474
+
1475
+ .cz-select-viewport {
1476
+ padding: 0.25rem;
1477
+ }
1478
+
1479
+ .cz-select-item {
1480
+ display: flex;
1481
+ align-items: center;
1482
+ gap: 0.5rem;
1483
+ padding: 0.5rem 0.75rem;
1484
+ font-size: var(--cz-font-size-sm);
1485
+ color: hsl(var(--cz-color-fg));
1486
+ border-radius: var(--cz-radius-sm);
1487
+ cursor: pointer;
1488
+ user-select: none;
1489
+ outline: none;
1490
+ }
1491
+
1492
+ .cz-select-item:hover,
1493
+ .cz-select-item[data-highlighted] {
1494
+ background-color: hsl(var(--cz-color-muted));
1495
+ }
1496
+
1497
+ .cz-select-item[data-disabled] {
1498
+ opacity: 0.5;
1499
+ cursor: not-allowed;
1500
+ }
1501
+
1502
+ .cz-select-item-indicator {
1503
+ width: 1rem;
1504
+ display: flex;
1505
+ align-items: center;
1506
+ justify-content: center;
1507
+ color: hsl(var(--cz-color-primary));
1508
+ }
1509
+
1510
+ .cz-select-separator {
1511
+ height: 1px;
1512
+ background-color: hsl(var(--cz-color-border));
1513
+ margin: 0.25rem 0;
1514
+ }
1515
+
1516
+ .cz-select-label {
1517
+ padding: 0.375rem 0.75rem;
1518
+ font-size: var(--cz-font-size-xs);
1519
+ font-weight: var(--cz-font-weight-semibold);
1520
+ color: hsl(var(--cz-color-mutedFg));
1521
+ }
1522
+
1523
+ /* ===== RADIO GROUP ===== */
1524
+
1525
+ .cz-radio-group {
1526
+ display: flex;
1527
+ }
1528
+
1529
+ .cz-radio-group-vertical {
1530
+ flex-direction: column;
1531
+ gap: 0.5rem;
1532
+ }
1533
+
1534
+ .cz-radio-group-horizontal {
1535
+ flex-direction: row;
1536
+ gap: 1rem;
1537
+ }
1538
+
1539
+ .cz-radio-wrapper {
1540
+ display: inline-flex;
1541
+ align-items: center;
1542
+ gap: 0.5rem;
1543
+ cursor: pointer;
1544
+ user-select: none;
1545
+ }
1546
+
1547
+ .cz-radio-wrapper.cz-disabled {
1548
+ cursor: not-allowed;
1549
+ opacity: 0.5;
1550
+ }
1551
+
1552
+ .cz-radio {
1553
+ all: unset;
1554
+ box-sizing: border-box;
1555
+ width: 1.25rem;
1556
+ height: 1.25rem;
1557
+ border-radius: var(--cz-radius-full);
1558
+ border: 2px solid hsl(var(--cz-color-border));
1559
+ background-color: hsl(var(--cz-color-bg));
1560
+ transition: all var(--cz-transition-fast);
1561
+ display: inline-flex;
1562
+ align-items: center;
1563
+ justify-content: center;
1564
+ flex-shrink: 0;
1565
+ cursor: pointer;
1566
+ }
1567
+
1568
+ .cz-radio:hover {
1569
+ border-color: hsl(var(--cz-color-primary));
1570
+ }
1571
+
1572
+ .cz-radio:focus-visible {
1573
+ outline: none;
1574
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
1575
+ }
1576
+
1577
+ .cz-radio:disabled {
1578
+ cursor: not-allowed;
1579
+ opacity: 0.5;
1580
+ }
1581
+
1582
+ .cz-radio[data-state="checked"] {
1583
+ border-color: hsl(var(--cz-color-primary));
1584
+ }
1585
+
1586
+ .cz-radio-indicator {
1587
+ width: 0.625rem;
1588
+ height: 0.625rem;
1589
+ border-radius: var(--cz-radius-full);
1590
+ background-color: hsl(var(--cz-color-primary));
1591
+ }
1592
+
1593
+ .cz-radio-label {
1594
+ font-size: var(--cz-font-size-sm);
1595
+ color: hsl(var(--cz-color-fg));
1596
+ }
1597
+
1598
+ /* ===== TABLE ===== */
1599
+
1600
+ :root {
1601
+ --cz-table-border-radius: var(--cz-radius-md);
1602
+ --cz-table-border-width: 1px;
1603
+ --cz-table-cell-padding: 0.75rem 1rem;
1604
+ }
1605
+
1606
+ .cz-table-wrapper {
1607
+ width: 100%;
1608
+ overflow-x: auto;
1609
+ border-radius: var(--cz-table-border-radius);
1610
+ }
1611
+
1612
+ .cz-table {
1613
+ width: 100%;
1614
+ border-collapse: collapse;
1615
+ font-size: var(--cz-font-size-sm);
1616
+ }
1617
+
1618
+ .cz-table-header {
1619
+ background-color: hsl(var(--cz-color-muted));
1620
+ }
1621
+
1622
+ .cz-table-row {
1623
+ border-bottom: 1px solid hsl(var(--cz-color-border));
1624
+ transition: background-color var(--cz-transition-fast);
1625
+ }
1626
+
1627
+ .cz-table-body .cz-table-row:hover {
1628
+ background-color: hsl(var(--cz-color-muted) / 0.5);
1629
+ }
1630
+
1631
+ .cz-table-head {
1632
+ padding: var(--cz-table-cell-padding);
1633
+ text-align: left;
1634
+ font-weight: var(--cz-font-weight-semibold);
1635
+ color: hsl(var(--cz-color-fg));
1636
+ white-space: nowrap;
1637
+ border-bottom: var(--cz-table-border-width) solid hsl(var(--cz-color-border));
1638
+ }
1639
+
1640
+ .cz-table-cell {
1641
+ padding: var(--cz-table-cell-padding);
1642
+ color: hsl(var(--cz-color-fg));
1643
+ border-bottom: var(--cz-table-border-width) solid hsl(var(--cz-color-border));
1644
+ }
1645
+
1646
+ /* ===== ACCORDION ===== */
1647
+
1648
+ .cz-accordion {
1649
+ display: flex;
1650
+ flex-direction: column;
1651
+ width: 100%;
1652
+ }
1653
+
1654
+ .cz-accordion-item {
1655
+ border-bottom: 1px solid hsl(var(--cz-color-border));
1656
+ }
1657
+
1658
+ .cz-accordion-trigger {
1659
+ display: flex;
1660
+ align-items: center;
1661
+ justify-content: space-between;
1662
+ width: 100%;
1663
+ padding: 1rem 0;
1664
+ font-size: var(--cz-font-size-md);
1665
+ font-weight: var(--cz-font-weight-medium);
1666
+ color: hsl(var(--cz-color-fg));
1667
+ background: transparent;
1668
+ border: none;
1669
+ cursor: pointer;
1670
+ text-align: left;
1671
+ transition: all var(--cz-transition-fast);
1672
+ }
1673
+
1674
+ .cz-accordion-trigger:hover {
1675
+ color: hsl(var(--cz-color-primary));
1676
+ }
1677
+
1678
+ .cz-accordion-icon {
1679
+ transition: transform var(--cz-transition-fast);
1680
+ color: hsl(var(--cz-color-mutedFg));
1681
+ }
1682
+
1683
+ .cz-accordion-icon-expanded,
1684
+ .cz-accordion-trigger[data-state="open"] .cz-accordion-icon {
1685
+ transform: rotate(180deg);
1686
+ }
1687
+
1688
+ .cz-accordion-content {
1689
+ overflow: hidden;
1690
+ font-size: var(--cz-font-size-sm);
1691
+ color: hsl(var(--cz-color-mutedFg));
1692
+ }
1693
+
1694
+ .cz-accordion-content[data-state="open"] {
1695
+ animation: cz-accordion-down var(--cz-transition-fast) ease-out;
1696
+ }
1697
+
1698
+ .cz-accordion-content[data-state="closed"] {
1699
+ animation: cz-accordion-up var(--cz-transition-fast) ease-out;
1700
+ }
1701
+
1702
+ .cz-accordion-content-inner {
1703
+ padding-bottom: 1rem;
1704
+ }
1705
+
1706
+ @keyframes cz-accordion-down {
1707
+ from { height: 0; }
1708
+ to { height: var(--radix-accordion-content-height); }
1709
+ }
1710
+
1711
+ @keyframes cz-accordion-up {
1712
+ from { height: var(--radix-accordion-content-height); }
1713
+ to { height: 0; }
1714
+ }
1715
+
1716
+ /* ===== STACK ===== */
1717
+
1718
+ .cz-stack {
1719
+ display: flex;
1720
+ }
1721
+
1722
+ .cz-stack-row { flex-direction: row; }
1723
+ .cz-stack-column { flex-direction: column; }
1724
+
1725
+ .cz-stack-gap-xs { gap: var(--cz-spacing-xs); }
1726
+ .cz-stack-gap-sm { gap: var(--cz-spacing-sm); }
1727
+ .cz-stack-gap-md { gap: var(--cz-spacing-md); }
1728
+ .cz-stack-gap-lg { gap: var(--cz-spacing-lg); }
1729
+ .cz-stack-gap-xl { gap: var(--cz-spacing-xl); }
1730
+
1731
+ .cz-stack-align-start { align-items: flex-start; }
1732
+ .cz-stack-align-center { align-items: center; }
1733
+ .cz-stack-align-end { align-items: flex-end; }
1734
+ .cz-stack-align-stretch { align-items: stretch; }
1735
+
1736
+ .cz-stack-justify-start { justify-content: flex-start; }
1737
+ .cz-stack-justify-center { justify-content: center; }
1738
+ .cz-stack-justify-end { justify-content: flex-end; }
1739
+ .cz-stack-justify-between { justify-content: space-between; }
1740
+ .cz-stack-justify-around { justify-content: space-around; }
1741
+
1742
+ .cz-stack-wrap { flex-wrap: wrap; }
1743
+
1744
+ /* ===== SPINNER ===== */
1745
+
1746
+ .cz-spinner {
1747
+ display: inline-flex;
1748
+ animation: cz-spin 1s linear infinite;
1749
+ }
1750
+
1751
+ .cz-spinner-svg {
1752
+ width: 100%;
1753
+ height: 100%;
1754
+ }
1755
+
1756
+ .cz-spinner-track {
1757
+ opacity: 0.2;
1758
+ }
1759
+
1760
+ .cz-spinner-indicator {
1761
+ opacity: 1;
1762
+ }
1763
+
1764
+ /* Spinner Sizes */
1765
+ .cz-spinner-sm { width: 1rem; height: 1rem; }
1766
+ .cz-spinner-md { width: 1.5rem; height: 1.5rem; }
1767
+ .cz-spinner-lg { width: 2rem; height: 2rem; }
1768
+
1769
+ /* Spinner Variants */
1770
+ .cz-spinner-default { color: hsl(var(--cz-color-fg)); }
1771
+ .cz-spinner-primary { color: hsl(var(--cz-color-primary)); }
1772
+
1773
+ /* ===== ASPECT RATIO ===== */
1774
+
1775
+ .cz-aspect-ratio {
1776
+ position: relative;
1777
+ width: 100%;
1778
+ }
1779
+
1780
+ .cz-aspect-ratio-content {
1781
+ position: absolute;
1782
+ inset: 0;
1783
+ }
1784
+
1785
+ .cz-aspect-ratio-content > * {
1786
+ width: 100%;
1787
+ height: 100%;
1788
+ object-fit: cover;
1789
+ }
1790
+
1791
+ /* ===== BREADCRUMB ===== */
1792
+
1793
+ .cz-breadcrumb {
1794
+ display: flex;
1795
+ align-items: center;
1796
+ }
1797
+
1798
+ .cz-breadcrumb-list {
1799
+ display: flex;
1800
+ align-items: center;
1801
+ gap: 0.25rem;
1802
+ list-style: none;
1803
+ margin: 0;
1804
+ padding: 0;
1805
+ }
1806
+
1807
+ .cz-breadcrumb-item {
1808
+ display: inline-flex;
1809
+ align-items: center;
1810
+ gap: 0.25rem;
1811
+ }
1812
+
1813
+ .cz-breadcrumb-link {
1814
+ font-size: var(--cz-font-size-sm);
1815
+ color: hsl(var(--cz-color-mutedFg));
1816
+ text-decoration: none;
1817
+ transition: color var(--cz-transition-fast);
1818
+ }
1819
+
1820
+ .cz-breadcrumb-link:hover {
1821
+ color: hsl(var(--cz-color-fg));
1822
+ }
1823
+
1824
+ .cz-breadcrumb-separator {
1825
+ color: hsl(var(--cz-color-mutedFg));
1826
+ display: inline-flex;
1827
+ }
1828
+
1829
+ .cz-breadcrumb-page {
1830
+ font-size: var(--cz-font-size-sm);
1831
+ font-weight: var(--cz-font-weight-medium);
1832
+ color: hsl(var(--cz-color-fg));
1833
+ }
1834
+
1835
+ /* ===== LABEL (extended) ===== */
1836
+
1837
+ .cz-label-required {
1838
+ color: hsl(var(--cz-color-danger));
1839
+ margin-left: 0.125rem;
1840
+ }
1841
+
1842
+ /* ===== VISUALLY HIDDEN ===== */
1843
+
1844
+ .cz-visually-hidden {
1845
+ position: absolute;
1846
+ width: 1px;
1847
+ height: 1px;
1848
+ padding: 0;
1849
+ margin: -1px;
1850
+ overflow: hidden;
1851
+ clip: rect(0, 0, 0, 0);
1852
+ white-space: nowrap;
1853
+ border: 0;
1854
+ }
1855
+
1856
+ /* ===== CONTAINER ===== */
1857
+
1858
+ .cz-container {
1859
+ width: 100%;
1860
+ padding-left: var(--cz-spacing-lg);
1861
+ padding-right: var(--cz-spacing-lg);
1862
+ }
1863
+
1864
+ .cz-container-centered {
1865
+ margin-left: auto;
1866
+ margin-right: auto;
1867
+ }
1868
+
1869
+ .cz-container-sm { max-width: 640px; }
1870
+ .cz-container-md { max-width: 768px; }
1871
+ .cz-container-lg { max-width: 1024px; }
1872
+ .cz-container-xl { max-width: 1280px; }
1873
+ .cz-container-full { max-width: 100%; }
1874
+
1875
+ /* ===== GRID ===== */
1876
+
1877
+ .cz-grid {
1878
+ display: grid;
1879
+ }
1880
+
1881
+ .cz-grid-cols-1 { grid-template-columns: repeat(1, 1fr); }
1882
+ .cz-grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
1883
+ .cz-grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
1884
+ .cz-grid-cols-4 { grid-template-columns: repeat(4, 1fr); }
1885
+ .cz-grid-cols-5 { grid-template-columns: repeat(5, 1fr); }
1886
+ .cz-grid-cols-6 { grid-template-columns: repeat(6, 1fr); }
1887
+ .cz-grid-cols-12 { grid-template-columns: repeat(12, 1fr); }
1888
+
1889
+ .cz-grid-gap-xs { gap: var(--cz-spacing-xs); }
1890
+ .cz-grid-gap-sm { gap: var(--cz-spacing-sm); }
1891
+ .cz-grid-gap-md { gap: var(--cz-spacing-md); }
1892
+ .cz-grid-gap-lg { gap: var(--cz-spacing-lg); }
1893
+ .cz-grid-gap-xl { gap: var(--cz-spacing-xl); }
1894
+
1895
+ /* ===== KBD ===== */
1896
+
1897
+ .cz-kbd {
1898
+ display: inline-flex;
1899
+ align-items: center;
1900
+ justify-content: center;
1901
+ padding: 0.125rem 0.375rem;
1902
+ font-size: var(--cz-font-size-xs);
1903
+ font-family: var(--cz-font-mono, ui-monospace, monospace);
1904
+ font-weight: var(--cz-font-weight-medium);
1905
+ background-color: hsl(var(--cz-color-muted));
1906
+ color: hsl(var(--cz-color-fg));
1907
+ border: 1px solid hsl(var(--cz-color-border));
1908
+ border-radius: var(--cz-radius-sm);
1909
+ box-shadow: 0 1px 0 hsl(var(--cz-color-border));
1910
+ }
1911
+
1912
+ /* ===== CODE ===== */
1913
+
1914
+ .cz-code {
1915
+ display: inline;
1916
+ padding: 0.125rem 0.375rem;
1917
+ font-size: 0.875em;
1918
+ font-family: var(--cz-font-mono, ui-monospace, monospace);
1919
+ background-color: hsl(var(--cz-color-muted));
1920
+ color: hsl(var(--cz-color-fg));
1921
+ border-radius: var(--cz-radius-sm);
1922
+ }
1923
+
1924
+ /* ===== SCROLL AREA ===== */
1925
+
1926
+ .cz-scroll-area {
1927
+ overflow: auto;
1928
+ scrollbar-width: thin;
1929
+ scrollbar-color: hsl(var(--cz-color-border)) transparent;
1930
+ }
1931
+
1932
+ .cz-scroll-area::-webkit-scrollbar {
1933
+ width: 8px;
1934
+ height: 8px;
1935
+ }
1936
+
1937
+ .cz-scroll-area::-webkit-scrollbar-track {
1938
+ background: transparent;
1939
+ }
1940
+
1941
+ .cz-scroll-area::-webkit-scrollbar-thumb {
1942
+ background-color: hsl(var(--cz-color-border));
1943
+ border-radius: var(--cz-radius-full);
1944
+ }
1945
+
1946
+ .cz-scroll-area::-webkit-scrollbar-thumb:hover {
1947
+ background-color: hsl(var(--cz-color-mutedFg));
1948
+ }
1949
+
1950
+ /* ===== DROPDOWN MENU ===== */
1951
+
1952
+ .cz-dropdown {
1953
+ position: relative;
1954
+ display: inline-block;
1955
+ }
1956
+
1957
+ .cz-dropdown-trigger {
1958
+ display: inline-flex;
1959
+ align-items: center;
1960
+ gap: 0.25rem;
1961
+ }
1962
+
1963
+ .cz-dropdown-content {
1964
+ position: absolute;
1965
+ top: 100%;
1966
+ margin-top: 0.25rem;
1967
+ z-index: 50;
1968
+ min-width: 10rem;
1969
+ background-color: hsl(var(--cz-color-bg));
1970
+ border: 1px solid hsl(var(--cz-color-border));
1971
+ border-radius: var(--cz-radius-md);
1972
+ box-shadow: var(--cz-shadow-lg);
1973
+ padding: 0.25rem;
1974
+ animation: cz-fade-in 0.15s ease-out;
1975
+ }
1976
+
1977
+ .cz-dropdown-align-start { left: 0; }
1978
+ .cz-dropdown-align-center { left: 50%; transform: translateX(-50%); }
1979
+ .cz-dropdown-align-end { right: 0; }
1980
+
1981
+ .cz-dropdown-item {
1982
+ display: flex;
1983
+ align-items: center;
1984
+ width: 100%;
1985
+ padding: 0.5rem 0.75rem;
1986
+ font-size: var(--cz-font-size-sm);
1987
+ color: hsl(var(--cz-color-fg));
1988
+ background: transparent;
1989
+ border: none;
1990
+ border-radius: var(--cz-radius-sm);
1991
+ cursor: pointer;
1992
+ text-align: left;
1993
+ transition: all var(--cz-transition-fast);
1994
+ }
1995
+
1996
+ .cz-dropdown-item:hover {
1997
+ background-color: hsl(var(--cz-color-muted));
1998
+ }
1999
+
2000
+ .cz-dropdown-item:focus {
2001
+ outline: none;
2002
+ background-color: hsl(var(--cz-color-muted));
2003
+ }
2004
+
2005
+ .cz-dropdown-separator {
2006
+ height: 1px;
2007
+ background-color: hsl(var(--cz-color-border));
2008
+ margin: 0.25rem 0;
2009
+ }
2010
+
2011
+ .cz-dropdown-label {
2012
+ padding: 0.5rem 0.75rem;
2013
+ font-size: var(--cz-font-size-xs);
2014
+ font-weight: var(--cz-font-weight-semibold);
2015
+ color: hsl(var(--cz-color-mutedFg));
2016
+ }
2017
+
2018
+ /* ===== TOAST ===== */
2019
+
2020
+ .cz-toaster {
2021
+ position: fixed;
2022
+ z-index: 100;
2023
+ display: flex;
2024
+ flex-direction: column;
2025
+ gap: 0.5rem;
2026
+ padding: 1rem;
2027
+ max-width: 24rem;
2028
+ width: 100%;
2029
+ pointer-events: none;
2030
+ }
2031
+
2032
+ .cz-toaster-top-left { top: 0; left: 0; }
2033
+ .cz-toaster-top-center { top: 0; left: 50%; transform: translateX(-50%); }
2034
+ .cz-toaster-top-right { top: 0; right: 0; }
2035
+ .cz-toaster-bottom-left { bottom: 0; left: 0; }
2036
+ .cz-toaster-bottom-center { bottom: 0; left: 50%; transform: translateX(-50%); }
2037
+ .cz-toaster-bottom-right { bottom: 0; right: 0; }
2038
+
2039
+ .cz-toast {
2040
+ display: flex;
2041
+ align-items: flex-start;
2042
+ gap: 0.75rem;
2043
+ padding: 1rem;
2044
+ background-color: hsl(var(--cz-color-bg));
2045
+ border: 1px solid hsl(var(--cz-color-border));
2046
+ border-radius: var(--cz-radius-lg);
2047
+ box-shadow: var(--cz-shadow-lg);
2048
+ pointer-events: auto;
2049
+ animation: cz-slide-in 0.3s ease-out;
2050
+ }
2051
+
2052
+ @keyframes cz-slide-in {
2053
+ from {
2054
+ opacity: 0;
2055
+ transform: translateY(1rem);
2056
+ }
2057
+ to {
2058
+ opacity: 1;
2059
+ transform: translateY(0);
2060
+ }
2061
+ }
2062
+
2063
+ .cz-toast-content {
2064
+ flex: 1;
2065
+ min-width: 0;
2066
+ }
2067
+
2068
+ .cz-toast-title {
2069
+ font-size: var(--cz-font-size-sm);
2070
+ font-weight: var(--cz-font-weight-semibold);
2071
+ color: hsl(var(--cz-color-fg));
2072
+ }
2073
+
2074
+ .cz-toast-description {
2075
+ font-size: var(--cz-font-size-sm);
2076
+ color: hsl(var(--cz-color-mutedFg));
2077
+ margin-top: 0.125rem;
2078
+ }
2079
+
2080
+ .cz-toast-close {
2081
+ flex-shrink: 0;
2082
+ width: 1.25rem;
2083
+ height: 1.25rem;
2084
+ display: flex;
2085
+ align-items: center;
2086
+ justify-content: center;
2087
+ border: none;
2088
+ background: transparent;
2089
+ color: hsl(var(--cz-color-mutedFg));
2090
+ cursor: pointer;
2091
+ border-radius: var(--cz-radius-sm);
2092
+ font-size: 1rem;
2093
+ transition: all var(--cz-transition-fast);
2094
+ }
2095
+
2096
+ .cz-toast-close:hover {
2097
+ background-color: hsl(var(--cz-color-muted));
2098
+ color: hsl(var(--cz-color-fg));
2099
+ }
2100
+
2101
+ /* Toast Variants */
2102
+ .cz-toast-success {
2103
+ border-left: 4px solid hsl(var(--cz-color-success));
2104
+ }
2105
+
2106
+ .cz-toast-warning {
2107
+ border-left: 4px solid hsl(var(--cz-color-warning));
2108
+ }
2109
+
2110
+ .cz-toast-danger {
2111
+ border-left: 4px solid hsl(var(--cz-color-danger));
2112
+ }
2113
+
2114
+ /* ===== TAG ===== */
2115
+
2116
+ .cz-tag {
2117
+ display: inline-flex;
2118
+ align-items: center;
2119
+ gap: 0.25rem;
2120
+ border-radius: var(--cz-radius-full);
2121
+ font-weight: var(--cz-font-weight-medium);
2122
+ transition: all var(--cz-transition-fast);
2123
+ }
2124
+
2125
+ .cz-tag-content {
2126
+ display: inline-flex;
2127
+ align-items: center;
2128
+ }
2129
+
2130
+ .cz-tag-remove {
2131
+ display: inline-flex;
2132
+ align-items: center;
2133
+ justify-content: center;
2134
+ border: none;
2135
+ background: transparent;
2136
+ cursor: pointer;
2137
+ padding: 0;
2138
+ color: inherit;
2139
+ opacity: 0.6;
2140
+ transition: opacity var(--cz-transition-fast);
2141
+ border-radius: var(--cz-radius-full);
2142
+ }
2143
+
2144
+ .cz-tag-remove:hover {
2145
+ opacity: 1;
2146
+ }
2147
+
2148
+ /* Tag Sizes */
2149
+ .cz-tag-sm { padding: 0.125rem 0.5rem; font-size: var(--cz-font-size-xs); }
2150
+ .cz-tag-md { padding: 0.25rem 0.625rem; font-size: var(--cz-font-size-sm); }
2151
+ .cz-tag-lg { padding: 0.375rem 0.75rem; font-size: var(--cz-font-size-md); }
2152
+
2153
+ /* Tag Variants */
2154
+ .cz-tag-default {
2155
+ background-color: hsl(var(--cz-color-muted));
2156
+ color: hsl(var(--cz-color-fg));
2157
+ }
2158
+
2159
+ .cz-tag-primary {
2160
+ background-color: hsl(var(--cz-color-primary));
2161
+ color: hsl(var(--cz-color-primaryFg));
2162
+ }
2163
+
2164
+ .cz-tag-secondary {
2165
+ background-color: hsl(var(--cz-color-secondary));
2166
+ color: hsl(var(--cz-color-secondaryFg));
2167
+ }
2168
+
2169
+ .cz-tag-success {
2170
+ background-color: hsl(142 76% 36%);
2171
+ color: white;
2172
+ }
2173
+
2174
+ .cz-tag-warning {
2175
+ background-color: hsl(38 92% 50%);
2176
+ color: white;
2177
+ }
2178
+
2179
+ .cz-tag-danger {
2180
+ background-color: hsl(var(--cz-color-danger));
2181
+ color: white;
2182
+ }
2183
+
2184
+ /* ===== SCROLL AREA ===== */
2185
+
2186
+ .cz-scroll-area {
2187
+ overflow: hidden;
2188
+ }
2189
+
2190
+ .cz-scroll-area-viewport {
2191
+ width: 100%;
2192
+ height: 100%;
2193
+ border-radius: inherit;
2194
+ }
2195
+
2196
+ .cz-scroll-area-scrollbar {
2197
+ display: flex;
2198
+ touch-action: none;
2199
+ user-select: none;
2200
+ padding: 2px;
2201
+ background-color: transparent;
2202
+ transition: background-color var(--cz-transition-fast);
2203
+ }
2204
+
2205
+ .cz-scroll-area-scrollbar:hover {
2206
+ background-color: hsl(var(--cz-color-muted) / 0.5);
2207
+ }
2208
+
2209
+ .cz-scroll-area-scrollbar-vertical {
2210
+ width: 10px;
2211
+ }
2212
+
2213
+ .cz-scroll-area-scrollbar-horizontal {
2214
+ flex-direction: column;
2215
+ height: 10px;
2216
+ }
2217
+
2218
+ .cz-scroll-area-thumb {
2219
+ flex: 1;
2220
+ background-color: hsl(var(--cz-color-border));
2221
+ border-radius: var(--cz-radius-full);
2222
+ position: relative;
2223
+ transition: background-color var(--cz-transition-fast);
2224
+ }
2225
+
2226
+ .cz-scroll-area-thumb::before {
2227
+ content: "";
2228
+ position: absolute;
2229
+ top: 50%;
2230
+ left: 50%;
2231
+ transform: translate(-50%, -50%);
2232
+ width: 100%;
2233
+ height: 100%;
2234
+ min-width: 44px;
2235
+ min-height: 44px;
2236
+ }
2237
+
2238
+ .cz-scroll-area-thumb:hover {
2239
+ background-color: hsl(var(--cz-color-mutedFg));
2240
+ }
2241
+
2242
+ .cz-scroll-area-corner {
2243
+ background-color: hsl(var(--cz-color-muted));
2244
+ }