czero 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +40 -0
  2. package/dist/cli/index.js +3780 -28
  3. package/dist/cli-new/cli/build-css.d.ts +19 -0
  4. package/dist/cli-new/cli/build-css.js +88 -0
  5. package/dist/cli-new/cli/generators/button.d.ts +9 -0
  6. package/dist/cli-new/cli/generators/button.js +224 -0
  7. package/dist/cli-new/cli/generators/card.d.ts +9 -0
  8. package/dist/cli-new/cli/generators/card.js +104 -0
  9. package/dist/cli-new/cli/generators/checkbox.d.ts +6 -0
  10. package/dist/cli-new/cli/generators/checkbox.js +163 -0
  11. package/dist/cli-new/cli/generators/index.d.ts +10 -0
  12. package/dist/cli-new/cli/generators/index.js +40 -0
  13. package/dist/cli-new/cli/generators/input.d.ts +9 -0
  14. package/dist/cli-new/cli/generators/input.js +231 -0
  15. package/dist/cli-new/cli/generators/switch.d.ts +6 -0
  16. package/dist/cli-new/cli/generators/switch.js +156 -0
  17. package/dist/cli-new/cli/generators/utilities.d.ts +9 -0
  18. package/dist/cli-new/cli/generators/utilities.js +150 -0
  19. package/dist/cli-new/cli/index.d.ts +8 -0
  20. package/dist/cli-new/cli/index.js +288 -0
  21. package/dist/cli-new/cli/token-resolver.d.ts +44 -0
  22. package/dist/cli-new/cli/token-resolver.js +137 -0
  23. package/dist/cli-new/cli/utils/deep-merge.d.ts +15 -0
  24. package/dist/cli-new/cli/utils/deep-merge.js +41 -0
  25. package/dist/cli-new/cli/validate-config.d.ts +19 -0
  26. package/dist/cli-new/cli/validate-config.js +151 -0
  27. package/dist/cli-new/src/core/component-defaults.d.ts +7 -0
  28. package/dist/cli-new/src/core/component-defaults.js +467 -0
  29. package/dist/cli-new/src/core/types/config.d.ts +489 -0
  30. package/dist/cli-new/src/core/types/config.js +5 -0
  31. package/dist/cli-new/src/presets/index.d.ts +44 -0
  32. package/dist/cli-new/src/presets/index.js +194 -0
  33. package/dist/components.css +1579 -2
  34. package/dist/react/core/component-defaults.d.ts +8 -0
  35. package/dist/react/core/component-defaults.d.ts.map +1 -0
  36. package/dist/react/core/types/config.d.ts +490 -0
  37. package/dist/react/core/types/config.d.ts.map +1 -0
  38. package/dist/react/index.cjs +11577 -17
  39. package/dist/react/index.cjs.map +1 -1
  40. package/dist/react/index.d.ts +407 -4
  41. package/dist/react/index.js +11532 -6
  42. package/dist/react/index.js.map +1 -1
  43. package/dist/react/presets/index.d.ts +45 -0
  44. package/dist/react/presets/index.d.ts.map +1 -0
  45. package/dist/react/react/components/accordion.d.ts +30 -0
  46. package/dist/react/react/components/accordion.d.ts.map +1 -0
  47. package/dist/react/react/components/alert.d.ts +7 -0
  48. package/dist/react/react/components/alert.d.ts.map +1 -0
  49. package/dist/react/react/components/aspect-ratio.d.ts +8 -0
  50. package/dist/react/react/components/aspect-ratio.d.ts.map +1 -0
  51. package/dist/react/react/components/avatar.d.ts +10 -0
  52. package/dist/react/react/components/avatar.d.ts.map +1 -0
  53. package/dist/react/react/components/breadcrumb.d.ts +28 -0
  54. package/dist/react/react/components/breadcrumb.d.ts.map +1 -0
  55. package/dist/react/react/components/button.d.ts +3 -2
  56. package/dist/react/react/components/button.d.ts.map +1 -1
  57. package/dist/react/react/components/checkbox.d.ts +9 -0
  58. package/dist/react/react/components/checkbox.d.ts.map +1 -0
  59. package/dist/react/react/components/code.d.ts +6 -0
  60. package/dist/react/react/components/code.d.ts.map +1 -0
  61. package/dist/react/react/components/container.d.ts +8 -0
  62. package/dist/react/react/components/container.d.ts.map +1 -0
  63. package/dist/react/react/components/dialog.d.ts +28 -0
  64. package/dist/react/react/components/dialog.d.ts.map +1 -0
  65. package/dist/react/react/components/dropdown-menu.d.ts +32 -0
  66. package/dist/react/react/components/dropdown-menu.d.ts.map +1 -0
  67. package/dist/react/react/components/grid.d.ts +8 -0
  68. package/dist/react/react/components/grid.d.ts.map +1 -0
  69. package/dist/react/react/components/input.d.ts +4 -0
  70. package/dist/react/react/components/input.d.ts.map +1 -1
  71. package/dist/react/react/components/kbd.d.ts +6 -0
  72. package/dist/react/react/components/kbd.d.ts.map +1 -0
  73. package/dist/react/react/components/label.d.ts +7 -0
  74. package/dist/react/react/components/label.d.ts.map +1 -0
  75. package/dist/react/react/components/progress.d.ts +10 -0
  76. package/dist/react/react/components/progress.d.ts.map +1 -0
  77. package/dist/react/react/components/radio-group.d.ts +15 -0
  78. package/dist/react/react/components/radio-group.d.ts.map +1 -0
  79. package/dist/react/react/components/scroll-area.d.ts +8 -0
  80. package/dist/react/react/components/scroll-area.d.ts.map +1 -0
  81. package/dist/react/react/components/select.d.ts +29 -0
  82. package/dist/react/react/components/select.d.ts.map +1 -0
  83. package/dist/react/react/components/separator.d.ts +8 -0
  84. package/dist/react/react/components/separator.d.ts.map +1 -0
  85. package/dist/react/react/components/skeleton.d.ts +8 -0
  86. package/dist/react/react/components/skeleton.d.ts.map +1 -0
  87. package/dist/react/react/components/spinner.d.ts +7 -0
  88. package/dist/react/react/components/spinner.d.ts.map +1 -0
  89. package/dist/react/react/components/stack.d.ts +11 -0
  90. package/dist/react/react/components/stack.d.ts.map +1 -0
  91. package/dist/react/react/components/switch.d.ts +10 -0
  92. package/dist/react/react/components/switch.d.ts.map +1 -0
  93. package/dist/react/react/components/table.d.ts +27 -0
  94. package/dist/react/react/components/table.d.ts.map +1 -0
  95. package/dist/react/react/components/tabs.d.ts +21 -0
  96. package/dist/react/react/components/tabs.d.ts.map +1 -0
  97. package/dist/react/react/components/tag.d.ts +10 -0
  98. package/dist/react/react/components/tag.d.ts.map +1 -0
  99. package/dist/react/react/components/textarea.d.ts +11 -0
  100. package/dist/react/react/components/textarea.d.ts.map +1 -0
  101. package/dist/react/react/components/toast.d.ts +28 -0
  102. package/dist/react/react/components/toast.d.ts.map +1 -0
  103. package/dist/react/react/components/tooltip.d.ts +16 -0
  104. package/dist/react/react/components/tooltip.d.ts.map +1 -0
  105. package/dist/react/react/components/visually-hidden.d.ts +7 -0
  106. package/dist/react/react/components/visually-hidden.d.ts.map +1 -0
  107. package/dist/react/react/hooks/index.d.ts +5 -0
  108. package/dist/react/react/hooks/index.d.ts.map +1 -0
  109. package/dist/react/react/hooks/use-theme.d.ts +17 -0
  110. package/dist/react/react/hooks/use-theme.d.ts.map +1 -0
  111. package/dist/react/react/index.d.ts +30 -0
  112. package/dist/react/react/index.d.ts.map +1 -1
  113. package/dist/styles.css +1579 -2
  114. package/package.json +35 -4
@@ -189,8 +189,48 @@
189
189
  }
190
190
  .cz-btn-danger:hover { opacity: 0.9; }
191
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
+
192
219
  /* ===== INPUT ===== */
193
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
+
194
234
  .cz-input {
195
235
  width: 100%;
196
236
  border-radius: var(--cz-radius-md);
@@ -206,7 +246,8 @@
206
246
 
207
247
  .cz-input:focus {
208
248
  outline: none;
209
- box-shadow: 0 0 0 2px hsl(var(--cz-color-ring));
249
+ border-color: hsl(var(--cz-color-ring));
250
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-ring) / 0.2);
210
251
  }
211
252
 
212
253
  .cz-input:disabled {
@@ -218,7 +259,50 @@
218
259
  border-color: hsl(var(--cz-color-danger));
219
260
  }
220
261
  .cz-input-error:focus {
221
- box-shadow: 0 0 0 2px hsl(var(--cz-color-danger));
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));
222
306
  }
223
307
 
224
308
  /* Input Sizes */
@@ -226,6 +310,7 @@
226
310
  .cz-input-md { height: 2.5rem; padding: 0 0.75rem; font-size: var(--cz-font-size-md); }
227
311
  .cz-input-lg { height: 3rem; padding: 0 1rem; font-size: var(--cz-font-size-lg); }
228
312
 
313
+
229
314
  /* ===== CARD ===== */
230
315
 
231
316
  .cz-card {
@@ -334,3 +419,1495 @@
334
419
  font-size: var(--cz-font-size-sm);
335
420
  color: hsl(var(--cz-color-danger));
336
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
+ }