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