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
package/dist/styles.css CHANGED
@@ -284,8 +284,48 @@ button, input, textarea, select {
284
284
  }
285
285
  .cz-btn-danger:hover { opacity: 0.9; }
286
286
 
287
+ .cz-btn-link {
288
+ background-color: transparent;
289
+ color: hsl(var(--cz-color-primary));
290
+ text-decoration: underline;
291
+ text-underline-offset: 4px;
292
+ }
293
+ .cz-btn-link:hover { text-decoration-thickness: 2px; }
294
+
295
+ /* Button Icon Size */
296
+ .cz-btn-icon {
297
+ width: 2.5rem;
298
+ height: 2.5rem;
299
+ padding: 0;
300
+ }
301
+ .cz-btn-icon.cz-btn-sm { width: 2rem; height: 2rem; }
302
+ .cz-btn-icon.cz-btn-lg { width: 3rem; height: 3rem; }
303
+
304
+ /* Button Loading State */
305
+ .cz-btn-loading { position: relative; }
306
+ .cz-btn-spinner {
307
+ width: 1rem;
308
+ height: 1rem;
309
+ animation: cz-spin 0.75s linear infinite;
310
+ flex-shrink: 0;
311
+ }
312
+ .cz-btn-content { opacity: 1; }
313
+
287
314
  /* ===== INPUT ===== */
288
315
 
316
+ .cz-input-field {
317
+ display: flex;
318
+ flex-direction: column;
319
+ gap: 0.375rem;
320
+ }
321
+
322
+ .cz-input-wrapper {
323
+ position: relative;
324
+ display: flex;
325
+ align-items: center;
326
+ width: 100%;
327
+ }
328
+
289
329
  .cz-input {
290
330
  width: 100%;
291
331
  border-radius: var(--cz-radius-md);
@@ -301,7 +341,8 @@ button, input, textarea, select {
301
341
 
302
342
  .cz-input:focus {
303
343
  outline: none;
304
- box-shadow: 0 0 0 2px hsl(var(--cz-color-ring));
344
+ border-color: hsl(var(--cz-color-ring));
345
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-ring) / 0.2);
305
346
  }
306
347
 
307
348
  .cz-input:disabled {
@@ -313,7 +354,50 @@ button, input, textarea, select {
313
354
  border-color: hsl(var(--cz-color-danger));
314
355
  }
315
356
  .cz-input-error:focus {
316
- box-shadow: 0 0 0 2px hsl(var(--cz-color-danger));
357
+ border-color: hsl(var(--cz-color-danger));
358
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-danger) / 0.2);
359
+ }
360
+
361
+ /* Input with Icons */
362
+ .cz-input-has-left-icon .cz-input { padding-left: 2.5rem; }
363
+ .cz-input-has-right-icon .cz-input { padding-right: 2.5rem; }
364
+
365
+ .cz-input-icon {
366
+ position: absolute;
367
+ display: flex;
368
+ align-items: center;
369
+ justify-content: center;
370
+ width: 2.5rem;
371
+ height: 100%;
372
+ color: hsl(var(--cz-color-mutedFg));
373
+ pointer-events: none;
374
+ }
375
+ .cz-input-icon svg { width: 1rem; height: 1rem; }
376
+ .cz-input-icon-left { left: 0; }
377
+ .cz-input-icon-right { right: 0; }
378
+
379
+ /* Input Clear Button */
380
+ .cz-input-clear {
381
+ position: absolute;
382
+ right: 0;
383
+ display: flex;
384
+ align-items: center;
385
+ justify-content: center;
386
+ width: 2.5rem;
387
+ height: 100%;
388
+ color: hsl(var(--cz-color-mutedFg));
389
+ background: transparent;
390
+ border: none;
391
+ cursor: pointer;
392
+ transition: color var(--cz-transition-fast);
393
+ }
394
+ .cz-input-clear:hover { color: hsl(var(--cz-color-fg)); }
395
+ .cz-input-clear svg { width: 0.875rem; height: 0.875rem; }
396
+
397
+ /* Input Description */
398
+ .cz-input-description {
399
+ font-size: var(--cz-font-size-xs);
400
+ color: hsl(var(--cz-color-mutedFg));
317
401
  }
318
402
 
319
403
  /* Input Sizes */
@@ -321,6 +405,7 @@ button, input, textarea, select {
321
405
  .cz-input-md { height: 2.5rem; padding: 0 0.75rem; font-size: var(--cz-font-size-md); }
322
406
  .cz-input-lg { height: 3rem; padding: 0 1rem; font-size: var(--cz-font-size-lg); }
323
407
 
408
+
324
409
  /* ===== CARD ===== */
325
410
 
326
411
  .cz-card {
@@ -429,3 +514,1495 @@ button, input, textarea, select {
429
514
  font-size: var(--cz-font-size-sm);
430
515
  color: hsl(var(--cz-color-danger));
431
516
  }
517
+
518
+ /* ===== TEXTAREA ===== */
519
+
520
+ .cz-textarea-field {
521
+ display: flex;
522
+ flex-direction: column;
523
+ gap: 0.375rem;
524
+ }
525
+
526
+ .cz-textarea {
527
+ width: 100%;
528
+ min-height: 5rem;
529
+ border-radius: var(--cz-radius-md);
530
+ border: 1px solid hsl(var(--cz-color-border));
531
+ background-color: hsl(var(--cz-color-bg));
532
+ color: hsl(var(--cz-color-fg));
533
+ transition: all var(--cz-transition-fast);
534
+ resize: vertical;
535
+ font-family: inherit;
536
+ }
537
+
538
+ .cz-textarea::placeholder {
539
+ color: hsl(var(--cz-color-mutedFg));
540
+ }
541
+
542
+ .cz-textarea:focus {
543
+ outline: none;
544
+ border-color: hsl(var(--cz-color-ring));
545
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-ring) / 0.2);
546
+ }
547
+
548
+ .cz-textarea:disabled {
549
+ cursor: not-allowed;
550
+ opacity: 0.5;
551
+ }
552
+
553
+ .cz-textarea-error {
554
+ border-color: hsl(var(--cz-color-danger));
555
+ }
556
+ .cz-textarea-error:focus {
557
+ border-color: hsl(var(--cz-color-danger));
558
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-danger) / 0.2);
559
+ }
560
+
561
+ .cz-textarea-auto-resize {
562
+ overflow: hidden;
563
+ resize: none;
564
+ }
565
+
566
+ .cz-textarea-description {
567
+ font-size: var(--cz-font-size-xs);
568
+ color: hsl(var(--cz-color-mutedFg));
569
+ }
570
+
571
+ /* Textarea Sizes */
572
+ .cz-textarea-sm { padding: 0.375rem 0.5rem; font-size: var(--cz-font-size-sm); }
573
+ .cz-textarea-md { padding: 0.5rem 0.75rem; font-size: var(--cz-font-size-md); }
574
+ .cz-textarea-lg { padding: 0.75rem 1rem; font-size: var(--cz-font-size-lg); }
575
+
576
+ /* ===== SWITCH ===== */
577
+
578
+ .cz-switch {
579
+ all: unset;
580
+ box-sizing: border-box;
581
+ display: inline-flex;
582
+ align-items: center;
583
+ position: relative;
584
+ width: 2.75rem;
585
+ height: 1.5rem;
586
+ border-radius: var(--cz-radius-full);
587
+ background-color: hsl(var(--cz-color-muted));
588
+ transition: all var(--cz-transition-fast);
589
+ cursor: pointer;
590
+ }
591
+
592
+ .cz-switch:focus-visible {
593
+ outline: none;
594
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
595
+ }
596
+
597
+ .cz-switch[data-state="checked"] {
598
+ background-color: hsl(var(--cz-color-primary));
599
+ }
600
+
601
+ .cz-switch.cz-switch-checked {
602
+ background-color: hsl(var(--cz-color-primary));
603
+ }
604
+
605
+ .cz-switch.cz-disabled,
606
+ .cz-switch:disabled {
607
+ opacity: 0.5;
608
+ cursor: not-allowed;
609
+ }
610
+
611
+ .cz-switch-thumb {
612
+ display: block;
613
+ width: 1.25rem;
614
+ height: 1.25rem;
615
+ border-radius: var(--cz-radius-full);
616
+ background-color: hsl(var(--cz-color-bg));
617
+ box-shadow: var(--cz-shadow-sm);
618
+ transition: transform var(--cz-transition-fast);
619
+ transform: translateX(0.125rem);
620
+ }
621
+
622
+ .cz-switch[data-state="checked"] .cz-switch-thumb,
623
+ .cz-switch.cz-switch-checked .cz-switch-thumb {
624
+ transform: translateX(calc(2.75rem - 1.25rem - 0.125rem));
625
+ }
626
+
627
+ /* Switch Sizes */
628
+ .cz-switch-sm { width: 2rem; height: 1.125rem; }
629
+ .cz-switch-sm .cz-switch-thumb { width: 0.875rem; height: 0.875rem; transform: translateX(0.125rem); }
630
+ .cz-switch-sm[data-state="checked"] .cz-switch-thumb,
631
+ .cz-switch-sm.cz-switch-checked .cz-switch-thumb { transform: translateX(calc(2rem - 0.875rem - 0.125rem)); }
632
+
633
+ .cz-switch-md { width: 2.75rem; height: 1.5rem; }
634
+ .cz-switch-md .cz-switch-thumb { width: 1.25rem; height: 1.25rem; transform: translateX(0.125rem); }
635
+ .cz-switch-md[data-state="checked"] .cz-switch-thumb,
636
+ .cz-switch-md.cz-switch-checked .cz-switch-thumb { transform: translateX(calc(2.75rem - 1.25rem - 0.125rem)); }
637
+
638
+ .cz-switch-lg { width: 3.5rem; height: 1.875rem; }
639
+ .cz-switch-lg .cz-switch-thumb { width: 1.625rem; height: 1.625rem; transform: translateX(0.125rem); }
640
+ .cz-switch-lg[data-state="checked"] .cz-switch-thumb,
641
+ .cz-switch-lg.cz-switch-checked .cz-switch-thumb { transform: translateX(calc(3.5rem - 1.625rem - 0.125rem)); }
642
+
643
+ /* Switch with Label */
644
+ .cz-switch-container {
645
+ display: inline-flex;
646
+ align-items: flex-start;
647
+ gap: 0.75rem;
648
+ cursor: pointer;
649
+ }
650
+ .cz-switch-container.cz-disabled {
651
+ opacity: 0.5;
652
+ cursor: not-allowed;
653
+ }
654
+
655
+ .cz-switch-label-left { flex-direction: row-reverse; }
656
+ .cz-switch-label-right { flex-direction: row; }
657
+
658
+ .cz-switch-text {
659
+ display: flex;
660
+ flex-direction: column;
661
+ gap: 0.125rem;
662
+ }
663
+
664
+ .cz-switch-label {
665
+ font-size: var(--cz-font-size-sm);
666
+ font-weight: var(--cz-font-weight-medium);
667
+ color: hsl(var(--cz-color-fg));
668
+ line-height: 1.5;
669
+ }
670
+
671
+ .cz-switch-description {
672
+ font-size: var(--cz-font-size-xs);
673
+ color: hsl(var(--cz-color-mutedFg));
674
+ }
675
+
676
+ /* ===== AVATAR ===== */
677
+
678
+ .cz-avatar {
679
+ display: inline-flex;
680
+ align-items: center;
681
+ justify-content: center;
682
+ border-radius: var(--cz-radius-full);
683
+ background-color: hsl(var(--cz-color-muted));
684
+ overflow: hidden;
685
+ flex-shrink: 0;
686
+ }
687
+
688
+ .cz-avatar-image {
689
+ width: 100%;
690
+ height: 100%;
691
+ object-fit: cover;
692
+ }
693
+
694
+ .cz-avatar-fallback {
695
+ font-weight: var(--cz-font-weight-medium);
696
+ color: hsl(var(--cz-color-mutedFg));
697
+ text-transform: uppercase;
698
+ }
699
+
700
+ /* Avatar Sizes */
701
+ .cz-avatar-sm { width: 2rem; height: 2rem; font-size: var(--cz-font-size-xs); }
702
+ .cz-avatar-md { width: 2.5rem; height: 2.5rem; font-size: var(--cz-font-size-sm); }
703
+ .cz-avatar-lg { width: 3.5rem; height: 3.5rem; font-size: var(--cz-font-size-md); }
704
+
705
+ /* ===== SEPARATOR ===== */
706
+
707
+ .cz-separator {
708
+ background-color: hsl(var(--cz-color-border));
709
+ flex-shrink: 0;
710
+ }
711
+
712
+ .cz-separator-horizontal {
713
+ height: 1px;
714
+ width: 100%;
715
+ }
716
+
717
+ .cz-separator-vertical {
718
+ width: 1px;
719
+ height: 100%;
720
+ align-self: stretch;
721
+ }
722
+
723
+ /* ===== ALERT ===== */
724
+
725
+ .cz-alert {
726
+ display: flex;
727
+ flex-direction: column;
728
+ gap: 0.25rem;
729
+ padding: var(--cz-spacing-md) var(--cz-spacing-lg);
730
+ border-radius: var(--cz-radius-md);
731
+ border: 1px solid transparent;
732
+ }
733
+
734
+ .cz-alert-title {
735
+ font-weight: var(--cz-font-weight-semibold);
736
+ font-size: var(--cz-font-size-sm);
737
+ }
738
+
739
+ .cz-alert-content {
740
+ font-size: var(--cz-font-size-sm);
741
+ }
742
+
743
+ /* Alert Variants */
744
+ .cz-alert-info {
745
+ background-color: hsl(var(--cz-color-primary) / 0.1);
746
+ border-color: hsl(var(--cz-color-primary) / 0.3);
747
+ color: hsl(var(--cz-color-primary));
748
+ }
749
+
750
+ .cz-alert-success {
751
+ background-color: hsl(var(--cz-color-success) / 0.1);
752
+ border-color: hsl(var(--cz-color-success) / 0.3);
753
+ color: hsl(var(--cz-color-success));
754
+ }
755
+
756
+ .cz-alert-warning {
757
+ background-color: hsl(var(--cz-color-warning) / 0.1);
758
+ border-color: hsl(var(--cz-color-warning) / 0.3);
759
+ color: hsl(var(--cz-color-warning));
760
+ }
761
+
762
+ .cz-alert-danger {
763
+ background-color: hsl(var(--cz-color-danger) / 0.1);
764
+ border-color: hsl(var(--cz-color-danger) / 0.3);
765
+ color: hsl(var(--cz-color-danger));
766
+ }
767
+
768
+ /* ===== CHECKBOX ===== */
769
+
770
+ .cz-checkbox-wrapper {
771
+ display: inline-flex;
772
+ align-items: center;
773
+ gap: 0.5rem;
774
+ cursor: pointer;
775
+ user-select: none;
776
+ }
777
+
778
+ .cz-checkbox-wrapper.cz-disabled {
779
+ cursor: not-allowed;
780
+ opacity: 0.5;
781
+ }
782
+
783
+ .cz-checkbox {
784
+ all: unset;
785
+ box-sizing: border-box;
786
+ display: inline-flex;
787
+ align-items: center;
788
+ justify-content: center;
789
+ width: 1.25rem;
790
+ height: 1.25rem;
791
+ border-radius: var(--cz-radius-sm);
792
+ border: 2px solid hsl(var(--cz-color-border));
793
+ background-color: hsl(var(--cz-color-bg));
794
+ transition: all var(--cz-transition-fast);
795
+ flex-shrink: 0;
796
+ cursor: pointer;
797
+ }
798
+
799
+ .cz-checkbox:hover {
800
+ border-color: hsl(var(--cz-color-primary));
801
+ }
802
+
803
+ .cz-checkbox:focus-visible {
804
+ outline: none;
805
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
806
+ }
807
+
808
+ .cz-checkbox:disabled {
809
+ cursor: not-allowed;
810
+ opacity: 0.5;
811
+ }
812
+
813
+ .cz-checkbox[data-state="checked"],
814
+ .cz-checkbox[data-state="indeterminate"] {
815
+ background-color: hsl(var(--cz-color-primary));
816
+ border-color: hsl(var(--cz-color-primary));
817
+ }
818
+
819
+ .cz-checkbox-indicator {
820
+ display: flex;
821
+ align-items: center;
822
+ justify-content: center;
823
+ color: hsl(var(--cz-color-primaryFg));
824
+ width: 100%;
825
+ height: 100%;
826
+ }
827
+
828
+ .cz-checkbox-indicator svg {
829
+ width: 12px;
830
+ height: 12px;
831
+ }
832
+
833
+ .cz-checkbox-label {
834
+ font-size: var(--cz-font-size-sm);
835
+ color: hsl(var(--cz-color-fg));
836
+ }
837
+
838
+ /* Checkbox Sizes */
839
+ .cz-checkbox-sm { width: 1rem; height: 1rem; }
840
+ .cz-checkbox-sm .cz-checkbox-indicator svg { width: 10px; height: 10px; }
841
+
842
+ .cz-checkbox-md { width: 1.25rem; height: 1.25rem; }
843
+ .cz-checkbox-md .cz-checkbox-indicator svg { width: 12px; height: 12px; }
844
+
845
+ .cz-checkbox-lg { width: 1.5rem; height: 1.5rem; }
846
+ .cz-checkbox-lg .cz-checkbox-indicator svg { width: 14px; height: 14px; }
847
+
848
+ /* Checkbox with Description */
849
+ .cz-checkbox-wrapper-with-description {
850
+ align-items: flex-start;
851
+ }
852
+ .cz-checkbox-wrapper-with-description .cz-checkbox {
853
+ margin-top: 0.125rem;
854
+ }
855
+
856
+ .cz-checkbox-text {
857
+ display: flex;
858
+ flex-direction: column;
859
+ gap: 0.125rem;
860
+ }
861
+
862
+ .cz-checkbox-description {
863
+ font-size: var(--cz-font-size-xs);
864
+ color: hsl(var(--cz-color-mutedFg));
865
+ }
866
+
867
+ /* ===== RADIO GROUP ===== */
868
+
869
+ .cz-radio-group {
870
+ display: flex;
871
+ gap: 0.5rem;
872
+ }
873
+ .cz-radio-group-vertical { flex-direction: column; }
874
+ .cz-radio-group-horizontal { flex-direction: row; flex-wrap: wrap; }
875
+
876
+ .cz-radio-wrapper {
877
+ display: inline-flex;
878
+ align-items: center;
879
+ gap: 0.5rem;
880
+ cursor: pointer;
881
+ user-select: none;
882
+ }
883
+
884
+ .cz-radio-wrapper.cz-disabled {
885
+ cursor: not-allowed;
886
+ opacity: 0.5;
887
+ }
888
+
889
+ .cz-radio-wrapper-with-description {
890
+ align-items: flex-start;
891
+ }
892
+ .cz-radio-wrapper-with-description .cz-radio {
893
+ margin-top: 0.125rem;
894
+ }
895
+
896
+ .cz-radio {
897
+ all: unset;
898
+ box-sizing: border-box;
899
+ display: inline-flex;
900
+ align-items: center;
901
+ justify-content: center;
902
+ width: 1.25rem;
903
+ height: 1.25rem;
904
+ border-radius: var(--cz-radius-full);
905
+ border: 2px solid hsl(var(--cz-color-border));
906
+ background-color: hsl(var(--cz-color-bg));
907
+ transition: all var(--cz-transition-fast);
908
+ flex-shrink: 0;
909
+ cursor: pointer;
910
+ }
911
+
912
+ .cz-radio:hover {
913
+ border-color: hsl(var(--cz-color-primary));
914
+ }
915
+
916
+ .cz-radio:focus-visible {
917
+ outline: none;
918
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
919
+ }
920
+
921
+ .cz-radio:disabled {
922
+ cursor: not-allowed;
923
+ opacity: 0.5;
924
+ }
925
+
926
+ .cz-radio[data-state="checked"] {
927
+ border-color: hsl(var(--cz-color-primary));
928
+ }
929
+
930
+ .cz-radio-indicator {
931
+ width: 0.625rem;
932
+ height: 0.625rem;
933
+ border-radius: var(--cz-radius-full);
934
+ background-color: hsl(var(--cz-color-primary));
935
+ transform: scale(0);
936
+ transition: transform var(--cz-transition-fast);
937
+ }
938
+
939
+ .cz-radio[data-state="checked"] .cz-radio-indicator {
940
+ transform: scale(1);
941
+ }
942
+
943
+ .cz-radio-text {
944
+ display: flex;
945
+ flex-direction: column;
946
+ gap: 0.125rem;
947
+ }
948
+
949
+ .cz-radio-label {
950
+ font-size: var(--cz-font-size-sm);
951
+ color: hsl(var(--cz-color-fg));
952
+ }
953
+
954
+ .cz-radio-description {
955
+ font-size: var(--cz-font-size-xs);
956
+ color: hsl(var(--cz-color-mutedFg));
957
+ }
958
+
959
+ /* ===== TOOLTIP ===== */
960
+
961
+ .cz-tooltip-wrapper {
962
+ position: relative;
963
+ display: inline-flex;
964
+ }
965
+
966
+ .cz-tooltip {
967
+ position: absolute;
968
+ z-index: 50;
969
+ padding: 0.375rem 0.75rem;
970
+ font-size: var(--cz-font-size-sm);
971
+ background-color: hsl(var(--cz-color-fg));
972
+ color: hsl(var(--cz-color-bg));
973
+ border-radius: var(--cz-radius-md);
974
+ white-space: nowrap;
975
+ pointer-events: none;
976
+ box-shadow: var(--cz-shadow-md);
977
+ }
978
+
979
+ .cz-tooltip-top {
980
+ bottom: 100%;
981
+ left: 50%;
982
+ transform: translateX(-50%);
983
+ margin-bottom: 0.5rem;
984
+ }
985
+
986
+ .cz-tooltip-bottom {
987
+ top: 100%;
988
+ left: 50%;
989
+ transform: translateX(-50%);
990
+ margin-top: 0.5rem;
991
+ }
992
+
993
+ .cz-tooltip-left {
994
+ right: 100%;
995
+ top: 50%;
996
+ transform: translateY(-50%);
997
+ margin-right: 0.5rem;
998
+ }
999
+
1000
+ .cz-tooltip-right {
1001
+ left: 100%;
1002
+ top: 50%;
1003
+ transform: translateY(-50%);
1004
+ margin-left: 0.5rem;
1005
+ }
1006
+
1007
+ /* ===== PROGRESS ===== */
1008
+
1009
+ .cz-progress {
1010
+ width: 100%;
1011
+ background-color: hsl(var(--cz-color-muted));
1012
+ border-radius: var(--cz-radius-full);
1013
+ overflow: hidden;
1014
+ }
1015
+
1016
+ .cz-progress-bar {
1017
+ height: 100%;
1018
+ width: 100%;
1019
+ border-radius: var(--cz-radius-full);
1020
+ transition: transform var(--cz-transition-normal);
1021
+ }
1022
+
1023
+ /* Progress Sizes */
1024
+ .cz-progress-sm { height: 0.375rem; }
1025
+ .cz-progress-md { height: 0.5rem; }
1026
+ .cz-progress-lg { height: 0.75rem; }
1027
+
1028
+ /* Progress Variants */
1029
+ .cz-progress-default { background-color: hsl(var(--cz-color-primary)); }
1030
+ .cz-progress-success { background-color: hsl(var(--cz-color-success)); }
1031
+ .cz-progress-warning { background-color: hsl(var(--cz-color-warning)); }
1032
+ .cz-progress-danger { background-color: hsl(var(--cz-color-danger)); }
1033
+
1034
+ /* ===== SKELETON ===== */
1035
+
1036
+ @keyframes cz-skeleton-pulse {
1037
+ 0%, 100% { opacity: 1; }
1038
+ 50% { opacity: 0.4; }
1039
+ }
1040
+
1041
+ .cz-skeleton {
1042
+ background-color: hsl(var(--cz-color-muted));
1043
+ animation: cz-skeleton-pulse 1.5s ease-in-out infinite;
1044
+ }
1045
+
1046
+ .cz-skeleton-text {
1047
+ height: 1rem;
1048
+ width: 100%;
1049
+ border-radius: var(--cz-radius-sm);
1050
+ }
1051
+
1052
+ .cz-skeleton-circular {
1053
+ border-radius: var(--cz-radius-full);
1054
+ }
1055
+
1056
+ .cz-skeleton-rectangular {
1057
+ border-radius: var(--cz-radius-md);
1058
+ }
1059
+
1060
+ /* ===== TABS ===== */
1061
+
1062
+ .cz-tabs {
1063
+ display: flex;
1064
+ flex-direction: column;
1065
+ width: 100%;
1066
+ }
1067
+
1068
+ .cz-tabs-list {
1069
+ display: inline-flex;
1070
+ align-items: center;
1071
+ gap: 0.25rem;
1072
+ border-bottom: 1px solid hsl(var(--cz-color-border));
1073
+ padding-bottom: 0;
1074
+ }
1075
+
1076
+ .cz-tabs-trigger {
1077
+ display: inline-flex;
1078
+ align-items: center;
1079
+ justify-content: center;
1080
+ padding: 0.5rem 1rem;
1081
+ font-size: var(--cz-font-size-sm);
1082
+ font-weight: var(--cz-font-weight-medium);
1083
+ color: hsl(var(--cz-color-mutedFg));
1084
+ background: transparent;
1085
+ border: none;
1086
+ border-bottom: 2px solid transparent;
1087
+ margin-bottom: -1px;
1088
+ cursor: pointer;
1089
+ transition: all var(--cz-transition-fast);
1090
+ }
1091
+
1092
+ .cz-tabs-trigger:hover {
1093
+ color: hsl(var(--cz-color-fg));
1094
+ }
1095
+
1096
+ .cz-tabs-trigger-active {
1097
+ color: hsl(var(--cz-color-primary));
1098
+ border-bottom-color: hsl(var(--cz-color-primary));
1099
+ }
1100
+
1101
+ .cz-tabs-trigger:focus-visible {
1102
+ outline: none;
1103
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-ring));
1104
+ border-radius: var(--cz-radius-sm);
1105
+ }
1106
+
1107
+ .cz-tabs-content {
1108
+ padding-top: var(--cz-spacing-lg);
1109
+ }
1110
+
1111
+ /* ===== DIALOG ===== */
1112
+
1113
+ .cz-dialog-overlay {
1114
+ position: fixed;
1115
+ inset: 0;
1116
+ z-index: 50;
1117
+ background-color: rgba(0, 0, 0, 0.5);
1118
+ }
1119
+
1120
+ .cz-dialog-content {
1121
+ position: fixed;
1122
+ left: 50%;
1123
+ top: 50%;
1124
+ transform: translate(-50%, -50%);
1125
+ z-index: 51;
1126
+ background-color: hsl(var(--cz-color-bg));
1127
+ border-radius: var(--cz-radius-lg);
1128
+ box-shadow: var(--cz-shadow-lg);
1129
+ max-width: 32rem;
1130
+ width: calc(100% - 2rem);
1131
+ max-height: calc(100vh - 4rem);
1132
+ overflow-y: auto;
1133
+ padding: var(--cz-spacing-lg);
1134
+ }
1135
+
1136
+ .cz-dialog-close {
1137
+ position: absolute;
1138
+ top: 0.75rem;
1139
+ right: 0.75rem;
1140
+ width: 2rem;
1141
+ height: 2rem;
1142
+ display: flex;
1143
+ align-items: center;
1144
+ justify-content: center;
1145
+ border: none;
1146
+ background: transparent;
1147
+ border-radius: var(--cz-radius-sm);
1148
+ font-size: 1.25rem;
1149
+ color: hsl(var(--cz-color-mutedFg));
1150
+ cursor: pointer;
1151
+ transition: all var(--cz-transition-fast);
1152
+ }
1153
+
1154
+ .cz-dialog-close:hover {
1155
+ background-color: hsl(var(--cz-color-muted));
1156
+ color: hsl(var(--cz-color-fg));
1157
+ }
1158
+
1159
+ .cz-dialog-header {
1160
+ display: flex;
1161
+ flex-direction: column;
1162
+ gap: 0.25rem;
1163
+ padding-bottom: var(--cz-spacing-md);
1164
+ }
1165
+
1166
+ .cz-dialog-title {
1167
+ font-size: var(--cz-font-size-lg);
1168
+ font-weight: var(--cz-font-weight-semibold);
1169
+ color: hsl(var(--cz-color-fg));
1170
+ margin: 0;
1171
+ }
1172
+
1173
+ .cz-dialog-description {
1174
+ font-size: var(--cz-font-size-sm);
1175
+ color: hsl(var(--cz-color-mutedFg));
1176
+ margin: 0;
1177
+ }
1178
+
1179
+ .cz-dialog-footer {
1180
+ display: flex;
1181
+ justify-content: flex-end;
1182
+ gap: 0.5rem;
1183
+ padding-top: var(--cz-spacing-lg);
1184
+ }
1185
+
1186
+ /* ===== SELECT ===== */
1187
+
1188
+ .cz-select {
1189
+ all: unset;
1190
+ box-sizing: border-box;
1191
+ display: inline-flex;
1192
+ align-items: center;
1193
+ justify-content: space-between;
1194
+ width: 100%;
1195
+ height: 2.5rem;
1196
+ padding: 0 0.75rem;
1197
+ border-radius: var(--cz-radius-md);
1198
+ border: 1px solid hsl(var(--cz-color-border));
1199
+ background-color: hsl(var(--cz-color-bg));
1200
+ color: hsl(var(--cz-color-fg));
1201
+ font-size: var(--cz-font-size-md);
1202
+ transition: all var(--cz-transition-fast);
1203
+ cursor: pointer;
1204
+ }
1205
+
1206
+ .cz-select:hover {
1207
+ border-color: hsl(var(--cz-color-primary));
1208
+ }
1209
+
1210
+ .cz-select:focus-visible {
1211
+ outline: none;
1212
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-ring));
1213
+ }
1214
+
1215
+ .cz-select:disabled,
1216
+ .cz-select[data-disabled] {
1217
+ cursor: not-allowed;
1218
+ opacity: 0.5;
1219
+ }
1220
+
1221
+ .cz-select[data-placeholder] {
1222
+ color: hsl(var(--cz-color-mutedFg));
1223
+ }
1224
+
1225
+ .cz-select-icon {
1226
+ color: hsl(var(--cz-color-mutedFg));
1227
+ margin-left: 0.5rem;
1228
+ flex-shrink: 0;
1229
+ }
1230
+
1231
+ /* Select Sizes */
1232
+ .cz-select-sm { height: 2rem; padding: 0 0.5rem; font-size: var(--cz-font-size-sm); }
1233
+ .cz-select-md { height: 2.5rem; padding: 0 0.75rem; font-size: var(--cz-font-size-md); }
1234
+ .cz-select-lg { height: 3rem; padding: 0 1rem; font-size: var(--cz-font-size-lg); }
1235
+
1236
+ /* Select Content (Dropdown) */
1237
+ .cz-select-content {
1238
+ z-index: 50;
1239
+ min-width: 8rem;
1240
+ max-height: 15rem;
1241
+ overflow: hidden;
1242
+ background-color: hsl(var(--cz-color-bg));
1243
+ border: 1px solid hsl(var(--cz-color-border));
1244
+ border-radius: var(--cz-radius-md);
1245
+ box-shadow: var(--cz-shadow-lg);
1246
+ }
1247
+
1248
+ .cz-select-viewport {
1249
+ padding: 0.25rem;
1250
+ }
1251
+
1252
+ .cz-select-item {
1253
+ display: flex;
1254
+ align-items: center;
1255
+ gap: 0.5rem;
1256
+ padding: 0.5rem 0.75rem;
1257
+ font-size: var(--cz-font-size-sm);
1258
+ color: hsl(var(--cz-color-fg));
1259
+ border-radius: var(--cz-radius-sm);
1260
+ cursor: pointer;
1261
+ user-select: none;
1262
+ outline: none;
1263
+ }
1264
+
1265
+ .cz-select-item:hover,
1266
+ .cz-select-item[data-highlighted] {
1267
+ background-color: hsl(var(--cz-color-muted));
1268
+ }
1269
+
1270
+ .cz-select-item[data-disabled] {
1271
+ opacity: 0.5;
1272
+ cursor: not-allowed;
1273
+ }
1274
+
1275
+ .cz-select-item-indicator {
1276
+ width: 1rem;
1277
+ display: flex;
1278
+ align-items: center;
1279
+ justify-content: center;
1280
+ color: hsl(var(--cz-color-primary));
1281
+ }
1282
+
1283
+ .cz-select-separator {
1284
+ height: 1px;
1285
+ background-color: hsl(var(--cz-color-border));
1286
+ margin: 0.25rem 0;
1287
+ }
1288
+
1289
+ .cz-select-label {
1290
+ padding: 0.375rem 0.75rem;
1291
+ font-size: var(--cz-font-size-xs);
1292
+ font-weight: var(--cz-font-weight-semibold);
1293
+ color: hsl(var(--cz-color-mutedFg));
1294
+ }
1295
+
1296
+ /* ===== RADIO GROUP ===== */
1297
+
1298
+ .cz-radio-group {
1299
+ display: flex;
1300
+ }
1301
+
1302
+ .cz-radio-group-vertical {
1303
+ flex-direction: column;
1304
+ gap: 0.5rem;
1305
+ }
1306
+
1307
+ .cz-radio-group-horizontal {
1308
+ flex-direction: row;
1309
+ gap: 1rem;
1310
+ }
1311
+
1312
+ .cz-radio-wrapper {
1313
+ display: inline-flex;
1314
+ align-items: center;
1315
+ gap: 0.5rem;
1316
+ cursor: pointer;
1317
+ user-select: none;
1318
+ }
1319
+
1320
+ .cz-radio-wrapper.cz-disabled {
1321
+ cursor: not-allowed;
1322
+ opacity: 0.5;
1323
+ }
1324
+
1325
+ .cz-radio {
1326
+ all: unset;
1327
+ box-sizing: border-box;
1328
+ width: 1.25rem;
1329
+ height: 1.25rem;
1330
+ border-radius: var(--cz-radius-full);
1331
+ border: 2px solid hsl(var(--cz-color-border));
1332
+ background-color: hsl(var(--cz-color-bg));
1333
+ transition: all var(--cz-transition-fast);
1334
+ display: inline-flex;
1335
+ align-items: center;
1336
+ justify-content: center;
1337
+ flex-shrink: 0;
1338
+ cursor: pointer;
1339
+ }
1340
+
1341
+ .cz-radio:hover {
1342
+ border-color: hsl(var(--cz-color-primary));
1343
+ }
1344
+
1345
+ .cz-radio:focus-visible {
1346
+ outline: none;
1347
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
1348
+ }
1349
+
1350
+ .cz-radio:disabled {
1351
+ cursor: not-allowed;
1352
+ opacity: 0.5;
1353
+ }
1354
+
1355
+ .cz-radio[data-state="checked"] {
1356
+ border-color: hsl(var(--cz-color-primary));
1357
+ }
1358
+
1359
+ .cz-radio-indicator {
1360
+ width: 0.625rem;
1361
+ height: 0.625rem;
1362
+ border-radius: var(--cz-radius-full);
1363
+ background-color: hsl(var(--cz-color-primary));
1364
+ }
1365
+
1366
+ .cz-radio-label {
1367
+ font-size: var(--cz-font-size-sm);
1368
+ color: hsl(var(--cz-color-fg));
1369
+ }
1370
+
1371
+ /* ===== TABLE ===== */
1372
+
1373
+ .cz-table-wrapper {
1374
+ width: 100%;
1375
+ overflow-x: auto;
1376
+ }
1377
+
1378
+ .cz-table {
1379
+ width: 100%;
1380
+ border-collapse: collapse;
1381
+ font-size: var(--cz-font-size-sm);
1382
+ }
1383
+
1384
+ .cz-table-header {
1385
+ background-color: hsl(var(--cz-color-muted));
1386
+ }
1387
+
1388
+ .cz-table-row {
1389
+ border-bottom: 1px solid hsl(var(--cz-color-border));
1390
+ transition: background-color var(--cz-transition-fast);
1391
+ }
1392
+
1393
+ .cz-table-body .cz-table-row:hover {
1394
+ background-color: hsl(var(--cz-color-muted) / 0.5);
1395
+ }
1396
+
1397
+ .cz-table-head {
1398
+ padding: 0.75rem 1rem;
1399
+ text-align: left;
1400
+ font-weight: var(--cz-font-weight-semibold);
1401
+ color: hsl(var(--cz-color-fg));
1402
+ white-space: nowrap;
1403
+ }
1404
+
1405
+ .cz-table-cell {
1406
+ padding: 0.75rem 1rem;
1407
+ color: hsl(var(--cz-color-fg));
1408
+ }
1409
+
1410
+ /* ===== ACCORDION ===== */
1411
+
1412
+ .cz-accordion {
1413
+ display: flex;
1414
+ flex-direction: column;
1415
+ width: 100%;
1416
+ }
1417
+
1418
+ .cz-accordion-item {
1419
+ border-bottom: 1px solid hsl(var(--cz-color-border));
1420
+ }
1421
+
1422
+ .cz-accordion-trigger {
1423
+ display: flex;
1424
+ align-items: center;
1425
+ justify-content: space-between;
1426
+ width: 100%;
1427
+ padding: 1rem 0;
1428
+ font-size: var(--cz-font-size-md);
1429
+ font-weight: var(--cz-font-weight-medium);
1430
+ color: hsl(var(--cz-color-fg));
1431
+ background: transparent;
1432
+ border: none;
1433
+ cursor: pointer;
1434
+ text-align: left;
1435
+ transition: all var(--cz-transition-fast);
1436
+ }
1437
+
1438
+ .cz-accordion-trigger:hover {
1439
+ color: hsl(var(--cz-color-primary));
1440
+ }
1441
+
1442
+ .cz-accordion-icon {
1443
+ transition: transform var(--cz-transition-fast);
1444
+ color: hsl(var(--cz-color-mutedFg));
1445
+ }
1446
+
1447
+ .cz-accordion-icon-expanded,
1448
+ .cz-accordion-trigger[data-state="open"] .cz-accordion-icon {
1449
+ transform: rotate(180deg);
1450
+ }
1451
+
1452
+ .cz-accordion-content {
1453
+ overflow: hidden;
1454
+ font-size: var(--cz-font-size-sm);
1455
+ color: hsl(var(--cz-color-mutedFg));
1456
+ }
1457
+
1458
+ .cz-accordion-content[data-state="open"] {
1459
+ animation: cz-accordion-down var(--cz-transition-fast) ease-out;
1460
+ }
1461
+
1462
+ .cz-accordion-content[data-state="closed"] {
1463
+ animation: cz-accordion-up var(--cz-transition-fast) ease-out;
1464
+ }
1465
+
1466
+ .cz-accordion-content-inner {
1467
+ padding-bottom: 1rem;
1468
+ }
1469
+
1470
+ @keyframes cz-accordion-down {
1471
+ from { height: 0; }
1472
+ to { height: var(--radix-accordion-content-height); }
1473
+ }
1474
+
1475
+ @keyframes cz-accordion-up {
1476
+ from { height: var(--radix-accordion-content-height); }
1477
+ to { height: 0; }
1478
+ }
1479
+
1480
+ /* ===== STACK ===== */
1481
+
1482
+ .cz-stack {
1483
+ display: flex;
1484
+ }
1485
+
1486
+ .cz-stack-row { flex-direction: row; }
1487
+ .cz-stack-column { flex-direction: column; }
1488
+
1489
+ .cz-stack-gap-xs { gap: var(--cz-spacing-xs); }
1490
+ .cz-stack-gap-sm { gap: var(--cz-spacing-sm); }
1491
+ .cz-stack-gap-md { gap: var(--cz-spacing-md); }
1492
+ .cz-stack-gap-lg { gap: var(--cz-spacing-lg); }
1493
+ .cz-stack-gap-xl { gap: var(--cz-spacing-xl); }
1494
+
1495
+ .cz-stack-align-start { align-items: flex-start; }
1496
+ .cz-stack-align-center { align-items: center; }
1497
+ .cz-stack-align-end { align-items: flex-end; }
1498
+ .cz-stack-align-stretch { align-items: stretch; }
1499
+
1500
+ .cz-stack-justify-start { justify-content: flex-start; }
1501
+ .cz-stack-justify-center { justify-content: center; }
1502
+ .cz-stack-justify-end { justify-content: flex-end; }
1503
+ .cz-stack-justify-between { justify-content: space-between; }
1504
+ .cz-stack-justify-around { justify-content: space-around; }
1505
+
1506
+ .cz-stack-wrap { flex-wrap: wrap; }
1507
+
1508
+ /* ===== SPINNER ===== */
1509
+
1510
+ .cz-spinner {
1511
+ display: inline-flex;
1512
+ animation: cz-spin 1s linear infinite;
1513
+ }
1514
+
1515
+ .cz-spinner-svg {
1516
+ width: 100%;
1517
+ height: 100%;
1518
+ }
1519
+
1520
+ .cz-spinner-track {
1521
+ opacity: 0.2;
1522
+ }
1523
+
1524
+ .cz-spinner-indicator {
1525
+ opacity: 1;
1526
+ }
1527
+
1528
+ /* Spinner Sizes */
1529
+ .cz-spinner-sm { width: 1rem; height: 1rem; }
1530
+ .cz-spinner-md { width: 1.5rem; height: 1.5rem; }
1531
+ .cz-spinner-lg { width: 2rem; height: 2rem; }
1532
+
1533
+ /* Spinner Variants */
1534
+ .cz-spinner-default { color: hsl(var(--cz-color-fg)); }
1535
+ .cz-spinner-primary { color: hsl(var(--cz-color-primary)); }
1536
+
1537
+ /* ===== ASPECT RATIO ===== */
1538
+
1539
+ .cz-aspect-ratio {
1540
+ position: relative;
1541
+ width: 100%;
1542
+ }
1543
+
1544
+ .cz-aspect-ratio-content {
1545
+ position: absolute;
1546
+ inset: 0;
1547
+ }
1548
+
1549
+ .cz-aspect-ratio-content > * {
1550
+ width: 100%;
1551
+ height: 100%;
1552
+ object-fit: cover;
1553
+ }
1554
+
1555
+ /* ===== BREADCRUMB ===== */
1556
+
1557
+ .cz-breadcrumb {
1558
+ display: flex;
1559
+ align-items: center;
1560
+ }
1561
+
1562
+ .cz-breadcrumb-list {
1563
+ display: flex;
1564
+ align-items: center;
1565
+ gap: 0.25rem;
1566
+ list-style: none;
1567
+ margin: 0;
1568
+ padding: 0;
1569
+ }
1570
+
1571
+ .cz-breadcrumb-item {
1572
+ display: inline-flex;
1573
+ align-items: center;
1574
+ gap: 0.25rem;
1575
+ }
1576
+
1577
+ .cz-breadcrumb-link {
1578
+ font-size: var(--cz-font-size-sm);
1579
+ color: hsl(var(--cz-color-mutedFg));
1580
+ text-decoration: none;
1581
+ transition: color var(--cz-transition-fast);
1582
+ }
1583
+
1584
+ .cz-breadcrumb-link:hover {
1585
+ color: hsl(var(--cz-color-fg));
1586
+ }
1587
+
1588
+ .cz-breadcrumb-separator {
1589
+ color: hsl(var(--cz-color-mutedFg));
1590
+ display: inline-flex;
1591
+ }
1592
+
1593
+ .cz-breadcrumb-page {
1594
+ font-size: var(--cz-font-size-sm);
1595
+ font-weight: var(--cz-font-weight-medium);
1596
+ color: hsl(var(--cz-color-fg));
1597
+ }
1598
+
1599
+ /* ===== LABEL (extended) ===== */
1600
+
1601
+ .cz-label-required {
1602
+ color: hsl(var(--cz-color-danger));
1603
+ margin-left: 0.125rem;
1604
+ }
1605
+
1606
+ /* ===== VISUALLY HIDDEN ===== */
1607
+
1608
+ .cz-visually-hidden {
1609
+ position: absolute;
1610
+ width: 1px;
1611
+ height: 1px;
1612
+ padding: 0;
1613
+ margin: -1px;
1614
+ overflow: hidden;
1615
+ clip: rect(0, 0, 0, 0);
1616
+ white-space: nowrap;
1617
+ border: 0;
1618
+ }
1619
+
1620
+ /* ===== CONTAINER ===== */
1621
+
1622
+ .cz-container {
1623
+ width: 100%;
1624
+ padding-left: var(--cz-spacing-lg);
1625
+ padding-right: var(--cz-spacing-lg);
1626
+ }
1627
+
1628
+ .cz-container-centered {
1629
+ margin-left: auto;
1630
+ margin-right: auto;
1631
+ }
1632
+
1633
+ .cz-container-sm { max-width: 640px; }
1634
+ .cz-container-md { max-width: 768px; }
1635
+ .cz-container-lg { max-width: 1024px; }
1636
+ .cz-container-xl { max-width: 1280px; }
1637
+ .cz-container-full { max-width: 100%; }
1638
+
1639
+ /* ===== GRID ===== */
1640
+
1641
+ .cz-grid {
1642
+ display: grid;
1643
+ }
1644
+
1645
+ .cz-grid-cols-1 { grid-template-columns: repeat(1, 1fr); }
1646
+ .cz-grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
1647
+ .cz-grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
1648
+ .cz-grid-cols-4 { grid-template-columns: repeat(4, 1fr); }
1649
+ .cz-grid-cols-5 { grid-template-columns: repeat(5, 1fr); }
1650
+ .cz-grid-cols-6 { grid-template-columns: repeat(6, 1fr); }
1651
+ .cz-grid-cols-12 { grid-template-columns: repeat(12, 1fr); }
1652
+
1653
+ .cz-grid-gap-xs { gap: var(--cz-spacing-xs); }
1654
+ .cz-grid-gap-sm { gap: var(--cz-spacing-sm); }
1655
+ .cz-grid-gap-md { gap: var(--cz-spacing-md); }
1656
+ .cz-grid-gap-lg { gap: var(--cz-spacing-lg); }
1657
+ .cz-grid-gap-xl { gap: var(--cz-spacing-xl); }
1658
+
1659
+ /* ===== KBD ===== */
1660
+
1661
+ .cz-kbd {
1662
+ display: inline-flex;
1663
+ align-items: center;
1664
+ justify-content: center;
1665
+ padding: 0.125rem 0.375rem;
1666
+ font-size: var(--cz-font-size-xs);
1667
+ font-family: var(--cz-font-mono, ui-monospace, monospace);
1668
+ font-weight: var(--cz-font-weight-medium);
1669
+ background-color: hsl(var(--cz-color-muted));
1670
+ color: hsl(var(--cz-color-fg));
1671
+ border: 1px solid hsl(var(--cz-color-border));
1672
+ border-radius: var(--cz-radius-sm);
1673
+ box-shadow: 0 1px 0 hsl(var(--cz-color-border));
1674
+ }
1675
+
1676
+ /* ===== CODE ===== */
1677
+
1678
+ .cz-code {
1679
+ display: inline;
1680
+ padding: 0.125rem 0.375rem;
1681
+ font-size: 0.875em;
1682
+ font-family: var(--cz-font-mono, ui-monospace, monospace);
1683
+ background-color: hsl(var(--cz-color-muted));
1684
+ color: hsl(var(--cz-color-fg));
1685
+ border-radius: var(--cz-radius-sm);
1686
+ }
1687
+
1688
+ /* ===== SCROLL AREA ===== */
1689
+
1690
+ .cz-scroll-area {
1691
+ overflow: auto;
1692
+ scrollbar-width: thin;
1693
+ scrollbar-color: hsl(var(--cz-color-border)) transparent;
1694
+ }
1695
+
1696
+ .cz-scroll-area::-webkit-scrollbar {
1697
+ width: 8px;
1698
+ height: 8px;
1699
+ }
1700
+
1701
+ .cz-scroll-area::-webkit-scrollbar-track {
1702
+ background: transparent;
1703
+ }
1704
+
1705
+ .cz-scroll-area::-webkit-scrollbar-thumb {
1706
+ background-color: hsl(var(--cz-color-border));
1707
+ border-radius: var(--cz-radius-full);
1708
+ }
1709
+
1710
+ .cz-scroll-area::-webkit-scrollbar-thumb:hover {
1711
+ background-color: hsl(var(--cz-color-mutedFg));
1712
+ }
1713
+
1714
+ /* ===== DROPDOWN MENU ===== */
1715
+
1716
+ .cz-dropdown {
1717
+ position: relative;
1718
+ display: inline-block;
1719
+ }
1720
+
1721
+ .cz-dropdown-trigger {
1722
+ display: inline-flex;
1723
+ align-items: center;
1724
+ gap: 0.25rem;
1725
+ }
1726
+
1727
+ .cz-dropdown-content {
1728
+ position: absolute;
1729
+ top: 100%;
1730
+ margin-top: 0.25rem;
1731
+ z-index: 50;
1732
+ min-width: 10rem;
1733
+ background-color: hsl(var(--cz-color-bg));
1734
+ border: 1px solid hsl(var(--cz-color-border));
1735
+ border-radius: var(--cz-radius-md);
1736
+ box-shadow: var(--cz-shadow-lg);
1737
+ padding: 0.25rem;
1738
+ animation: cz-fade-in 0.15s ease-out;
1739
+ }
1740
+
1741
+ .cz-dropdown-align-start { left: 0; }
1742
+ .cz-dropdown-align-center { left: 50%; transform: translateX(-50%); }
1743
+ .cz-dropdown-align-end { right: 0; }
1744
+
1745
+ .cz-dropdown-item {
1746
+ display: flex;
1747
+ align-items: center;
1748
+ width: 100%;
1749
+ padding: 0.5rem 0.75rem;
1750
+ font-size: var(--cz-font-size-sm);
1751
+ color: hsl(var(--cz-color-fg));
1752
+ background: transparent;
1753
+ border: none;
1754
+ border-radius: var(--cz-radius-sm);
1755
+ cursor: pointer;
1756
+ text-align: left;
1757
+ transition: all var(--cz-transition-fast);
1758
+ }
1759
+
1760
+ .cz-dropdown-item:hover {
1761
+ background-color: hsl(var(--cz-color-muted));
1762
+ }
1763
+
1764
+ .cz-dropdown-item:focus {
1765
+ outline: none;
1766
+ background-color: hsl(var(--cz-color-muted));
1767
+ }
1768
+
1769
+ .cz-dropdown-separator {
1770
+ height: 1px;
1771
+ background-color: hsl(var(--cz-color-border));
1772
+ margin: 0.25rem 0;
1773
+ }
1774
+
1775
+ .cz-dropdown-label {
1776
+ padding: 0.5rem 0.75rem;
1777
+ font-size: var(--cz-font-size-xs);
1778
+ font-weight: var(--cz-font-weight-semibold);
1779
+ color: hsl(var(--cz-color-mutedFg));
1780
+ }
1781
+
1782
+ /* ===== TOAST ===== */
1783
+
1784
+ .cz-toaster {
1785
+ position: fixed;
1786
+ z-index: 100;
1787
+ display: flex;
1788
+ flex-direction: column;
1789
+ gap: 0.5rem;
1790
+ padding: 1rem;
1791
+ max-width: 24rem;
1792
+ width: 100%;
1793
+ pointer-events: none;
1794
+ }
1795
+
1796
+ .cz-toaster-top-left { top: 0; left: 0; }
1797
+ .cz-toaster-top-center { top: 0; left: 50%; transform: translateX(-50%); }
1798
+ .cz-toaster-top-right { top: 0; right: 0; }
1799
+ .cz-toaster-bottom-left { bottom: 0; left: 0; }
1800
+ .cz-toaster-bottom-center { bottom: 0; left: 50%; transform: translateX(-50%); }
1801
+ .cz-toaster-bottom-right { bottom: 0; right: 0; }
1802
+
1803
+ .cz-toast {
1804
+ display: flex;
1805
+ align-items: flex-start;
1806
+ gap: 0.75rem;
1807
+ padding: 1rem;
1808
+ background-color: hsl(var(--cz-color-bg));
1809
+ border: 1px solid hsl(var(--cz-color-border));
1810
+ border-radius: var(--cz-radius-lg);
1811
+ box-shadow: var(--cz-shadow-lg);
1812
+ pointer-events: auto;
1813
+ animation: cz-slide-in 0.3s ease-out;
1814
+ }
1815
+
1816
+ @keyframes cz-slide-in {
1817
+ from {
1818
+ opacity: 0;
1819
+ transform: translateY(1rem);
1820
+ }
1821
+ to {
1822
+ opacity: 1;
1823
+ transform: translateY(0);
1824
+ }
1825
+ }
1826
+
1827
+ .cz-toast-content {
1828
+ flex: 1;
1829
+ min-width: 0;
1830
+ }
1831
+
1832
+ .cz-toast-title {
1833
+ font-size: var(--cz-font-size-sm);
1834
+ font-weight: var(--cz-font-weight-semibold);
1835
+ color: hsl(var(--cz-color-fg));
1836
+ }
1837
+
1838
+ .cz-toast-description {
1839
+ font-size: var(--cz-font-size-sm);
1840
+ color: hsl(var(--cz-color-mutedFg));
1841
+ margin-top: 0.125rem;
1842
+ }
1843
+
1844
+ .cz-toast-close {
1845
+ flex-shrink: 0;
1846
+ width: 1.25rem;
1847
+ height: 1.25rem;
1848
+ display: flex;
1849
+ align-items: center;
1850
+ justify-content: center;
1851
+ border: none;
1852
+ background: transparent;
1853
+ color: hsl(var(--cz-color-mutedFg));
1854
+ cursor: pointer;
1855
+ border-radius: var(--cz-radius-sm);
1856
+ font-size: 1rem;
1857
+ transition: all var(--cz-transition-fast);
1858
+ }
1859
+
1860
+ .cz-toast-close:hover {
1861
+ background-color: hsl(var(--cz-color-muted));
1862
+ color: hsl(var(--cz-color-fg));
1863
+ }
1864
+
1865
+ /* Toast Variants */
1866
+ .cz-toast-success {
1867
+ border-left: 4px solid hsl(var(--cz-color-success));
1868
+ }
1869
+
1870
+ .cz-toast-warning {
1871
+ border-left: 4px solid hsl(var(--cz-color-warning));
1872
+ }
1873
+
1874
+ .cz-toast-danger {
1875
+ border-left: 4px solid hsl(var(--cz-color-danger));
1876
+ }
1877
+
1878
+ /* ===== TAG ===== */
1879
+
1880
+ .cz-tag {
1881
+ display: inline-flex;
1882
+ align-items: center;
1883
+ gap: 0.25rem;
1884
+ border-radius: var(--cz-radius-full);
1885
+ font-weight: var(--cz-font-weight-medium);
1886
+ transition: all var(--cz-transition-fast);
1887
+ }
1888
+
1889
+ .cz-tag-content {
1890
+ display: inline-flex;
1891
+ align-items: center;
1892
+ }
1893
+
1894
+ .cz-tag-remove {
1895
+ display: inline-flex;
1896
+ align-items: center;
1897
+ justify-content: center;
1898
+ border: none;
1899
+ background: transparent;
1900
+ cursor: pointer;
1901
+ padding: 0;
1902
+ color: inherit;
1903
+ opacity: 0.6;
1904
+ transition: opacity var(--cz-transition-fast);
1905
+ border-radius: var(--cz-radius-full);
1906
+ }
1907
+
1908
+ .cz-tag-remove:hover {
1909
+ opacity: 1;
1910
+ }
1911
+
1912
+ /* Tag Sizes */
1913
+ .cz-tag-sm { padding: 0.125rem 0.5rem; font-size: var(--cz-font-size-xs); }
1914
+ .cz-tag-md { padding: 0.25rem 0.625rem; font-size: var(--cz-font-size-sm); }
1915
+ .cz-tag-lg { padding: 0.375rem 0.75rem; font-size: var(--cz-font-size-md); }
1916
+
1917
+ /* Tag Variants */
1918
+ .cz-tag-default {
1919
+ background-color: hsl(var(--cz-color-muted));
1920
+ color: hsl(var(--cz-color-fg));
1921
+ }
1922
+
1923
+ .cz-tag-primary {
1924
+ background-color: hsl(var(--cz-color-primary));
1925
+ color: hsl(var(--cz-color-primaryFg));
1926
+ }
1927
+
1928
+ .cz-tag-secondary {
1929
+ background-color: hsl(var(--cz-color-secondary));
1930
+ color: hsl(var(--cz-color-secondaryFg));
1931
+ }
1932
+
1933
+ .cz-tag-success {
1934
+ background-color: hsl(142 76% 36%);
1935
+ color: white;
1936
+ }
1937
+
1938
+ .cz-tag-warning {
1939
+ background-color: hsl(38 92% 50%);
1940
+ color: white;
1941
+ }
1942
+
1943
+ .cz-tag-danger {
1944
+ background-color: hsl(var(--cz-color-danger));
1945
+ color: white;
1946
+ }
1947
+
1948
+ /* ===== SCROLL AREA ===== */
1949
+
1950
+ .cz-scroll-area {
1951
+ overflow: hidden;
1952
+ }
1953
+
1954
+ .cz-scroll-area-viewport {
1955
+ width: 100%;
1956
+ height: 100%;
1957
+ border-radius: inherit;
1958
+ }
1959
+
1960
+ .cz-scroll-area-scrollbar {
1961
+ display: flex;
1962
+ touch-action: none;
1963
+ user-select: none;
1964
+ padding: 2px;
1965
+ background-color: transparent;
1966
+ transition: background-color var(--cz-transition-fast);
1967
+ }
1968
+
1969
+ .cz-scroll-area-scrollbar:hover {
1970
+ background-color: hsl(var(--cz-color-muted) / 0.5);
1971
+ }
1972
+
1973
+ .cz-scroll-area-scrollbar-vertical {
1974
+ width: 10px;
1975
+ }
1976
+
1977
+ .cz-scroll-area-scrollbar-horizontal {
1978
+ flex-direction: column;
1979
+ height: 10px;
1980
+ }
1981
+
1982
+ .cz-scroll-area-thumb {
1983
+ flex: 1;
1984
+ background-color: hsl(var(--cz-color-border));
1985
+ border-radius: var(--cz-radius-full);
1986
+ position: relative;
1987
+ transition: background-color var(--cz-transition-fast);
1988
+ }
1989
+
1990
+ .cz-scroll-area-thumb::before {
1991
+ content: "";
1992
+ position: absolute;
1993
+ top: 50%;
1994
+ left: 50%;
1995
+ transform: translate(-50%, -50%);
1996
+ width: 100%;
1997
+ height: 100%;
1998
+ min-width: 44px;
1999
+ min-height: 44px;
2000
+ }
2001
+
2002
+ .cz-scroll-area-thumb:hover {
2003
+ background-color: hsl(var(--cz-color-mutedFg));
2004
+ }
2005
+
2006
+ .cz-scroll-area-corner {
2007
+ background-color: hsl(var(--cz-color-muted));
2008
+ }