@nexus-cross/design-system 1.0.6-beta.2 → 1.0.6

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 (135) hide show
  1. package/DESIGN.md +185 -0
  2. package/cursor-rules/nexus-ui-api.mdc +223 -7
  3. package/cursor-rules/nexus-ui-components.mdc +44 -17
  4. package/dist/alert.d.mts +17 -0
  5. package/dist/alert.d.ts +17 -0
  6. package/dist/alert.js +16 -0
  7. package/dist/alert.mjs +3 -0
  8. package/dist/badge.d.mts +18 -0
  9. package/dist/badge.d.ts +18 -0
  10. package/dist/badge.js +16 -0
  11. package/dist/badge.mjs +3 -0
  12. package/dist/breadcrumb.d.mts +15 -0
  13. package/dist/breadcrumb.d.ts +15 -0
  14. package/dist/breadcrumb.js +12 -0
  15. package/dist/breadcrumb.mjs +3 -0
  16. package/dist/chunks/chunk-2N2EPBO4.js +120 -0
  17. package/dist/chunks/{chunk-AFSEYJZT.js → chunk-2T7RUYEK.js} +175 -50
  18. package/dist/chunks/chunk-2UPGFY6E.mjs +76 -0
  19. package/dist/chunks/chunk-3ZWN66YH.js +53 -0
  20. package/dist/chunks/chunk-5PQ3UCKF.js +99 -0
  21. package/dist/chunks/chunk-6BWOKTVQ.mjs +87 -0
  22. package/dist/chunks/chunk-6DBRL6NA.mjs +81 -0
  23. package/dist/chunks/chunk-B5O6W3Z4.mjs +73 -0
  24. package/dist/chunks/chunk-BJM3NDT2.mjs +368 -0
  25. package/dist/chunks/chunk-C2DSAJTL.js +109 -0
  26. package/dist/chunks/chunk-CUTMLBC3.mjs +86 -0
  27. package/dist/chunks/chunk-CV4GMFWP.js +174 -0
  28. package/dist/chunks/chunk-DICN6GKE.js +99 -0
  29. package/dist/chunks/chunk-DYPPVXQF.js +143 -0
  30. package/dist/chunks/chunk-EJY7IVSK.mjs +31 -0
  31. package/dist/chunks/chunk-FUIBYZZ4.mjs +98 -0
  32. package/dist/chunks/{chunk-HNLI646G.mjs → chunk-GN6X27QI.mjs} +9 -2
  33. package/dist/chunks/chunk-H2G5FMRN.mjs +75 -0
  34. package/dist/chunks/chunk-H2V7RHYV.mjs +120 -0
  35. package/dist/chunks/chunk-MMCA33FW.mjs +85 -0
  36. package/dist/chunks/chunk-NZHK76R3.js +109 -0
  37. package/dist/chunks/chunk-P73MEU7N.mjs +150 -0
  38. package/dist/chunks/chunk-PDJTSQOC.js +59 -0
  39. package/dist/chunks/chunk-PXBZEAZQ.mjs +5 -0
  40. package/dist/chunks/chunk-QRNHFOLG.js +7 -0
  41. package/dist/chunks/chunk-S2GMEC43.js +109 -0
  42. package/dist/chunks/{chunk-VGO4Z2WH.js → chunk-SUIT4XKB.js} +8 -1
  43. package/dist/chunks/chunk-X3CTJ7TD.js +108 -0
  44. package/dist/chunks/chunk-XGIJZ3NZ.js +160 -0
  45. package/dist/chunks/chunk-YO5MSDPX.mjs +36 -0
  46. package/dist/chunks/chunk-ZI4LN2B2.js +96 -0
  47. package/dist/chunks/chunk-ZU4AWAFT.mjs +137 -0
  48. package/dist/date-picker.d.mts +17 -0
  49. package/dist/date-picker.d.ts +17 -0
  50. package/dist/date-picker.js +12 -0
  51. package/dist/date-picker.mjs +3 -0
  52. package/dist/dropdown-menu.d.mts +30 -0
  53. package/dist/dropdown-menu.d.ts +30 -0
  54. package/dist/dropdown-menu.js +32 -0
  55. package/dist/dropdown-menu.mjs +3 -0
  56. package/dist/empty-state.d.mts +16 -0
  57. package/dist/empty-state.d.ts +16 -0
  58. package/dist/empty-state.js +16 -0
  59. package/dist/empty-state.mjs +3 -0
  60. package/dist/index.d.mts +14 -0
  61. package/dist/index.d.ts +14 -0
  62. package/dist/index.js +269 -157
  63. package/dist/index.mjs +30 -18
  64. package/dist/modal/index.js +12 -12
  65. package/dist/modal/index.mjs +3 -3
  66. package/dist/number-input.d.mts +5 -6
  67. package/dist/number-input.d.ts +5 -6
  68. package/dist/number-input.js +4 -4
  69. package/dist/number-input.mjs +1 -1
  70. package/dist/nx-image.d.mts +13 -0
  71. package/dist/nx-image.d.ts +13 -0
  72. package/dist/nx-image.js +12 -0
  73. package/dist/nx-image.mjs +3 -0
  74. package/dist/progress.d.mts +18 -0
  75. package/dist/progress.d.ts +18 -0
  76. package/dist/progress.js +16 -0
  77. package/dist/progress.mjs +3 -0
  78. package/dist/schemas/_all.json +840 -13
  79. package/dist/schemas/alert.json +49 -0
  80. package/dist/schemas/badge.json +76 -0
  81. package/dist/schemas/breadcrumb.json +47 -0
  82. package/dist/schemas/datePicker.json +56 -0
  83. package/dist/schemas/dropdownMenu.json +83 -0
  84. package/dist/schemas/emptyState.json +44 -0
  85. package/dist/schemas/numberInput.json +27 -8
  86. package/dist/schemas/nxImage.json +56 -0
  87. package/dist/schemas/progress.json +63 -0
  88. package/dist/schemas/slider.json +78 -0
  89. package/dist/schemas/stepper.json +73 -0
  90. package/dist/schemas/tagInput.json +70 -0
  91. package/dist/schemas/textArea.json +26 -1
  92. package/dist/schemas/toggleGroup.json +88 -0
  93. package/dist/schemas.d.mts +628 -144
  94. package/dist/schemas.d.ts +628 -144
  95. package/dist/schemas.js +177 -7
  96. package/dist/schemas.mjs +166 -8
  97. package/dist/slider.d.mts +20 -0
  98. package/dist/slider.d.ts +20 -0
  99. package/dist/slider.js +16 -0
  100. package/dist/slider.mjs +3 -0
  101. package/dist/stepper.d.mts +20 -0
  102. package/dist/stepper.d.ts +20 -0
  103. package/dist/stepper.js +16 -0
  104. package/dist/stepper.mjs +3 -0
  105. package/dist/styles/layer.js +2 -2
  106. package/dist/styles/layer.mjs +1 -1
  107. package/dist/styles.css +1615 -185
  108. package/dist/styles.js +2 -2
  109. package/dist/styles.layered.css +1615 -185
  110. package/dist/styles.mjs +1 -1
  111. package/dist/table.d.mts +40 -25
  112. package/dist/table.d.ts +40 -25
  113. package/dist/table.js +7 -7
  114. package/dist/table.mjs +1 -1
  115. package/dist/tag-input.d.mts +21 -0
  116. package/dist/tag-input.d.ts +21 -0
  117. package/dist/tag-input.js +16 -0
  118. package/dist/tag-input.mjs +3 -0
  119. package/dist/text-area.d.mts +5 -1
  120. package/dist/text-area.d.ts +5 -1
  121. package/dist/text-area.js +3 -3
  122. package/dist/text-area.mjs +1 -1
  123. package/dist/toggle-group.d.mts +36 -0
  124. package/dist/toggle-group.d.ts +36 -0
  125. package/dist/toggle-group.js +16 -0
  126. package/dist/toggle-group.mjs +3 -0
  127. package/package.json +69 -3
  128. package/scripts/setup-cursor-rules.cjs +15 -1
  129. package/dist/chunks/chunk-26BUGBOY.mjs +0 -57
  130. package/dist/chunks/chunk-CLGH2RTS.js +0 -7
  131. package/dist/chunks/chunk-ECVAVQUY.mjs +0 -243
  132. package/dist/chunks/chunk-UPCWJWXR.mjs +0 -5
  133. package/dist/chunks/chunk-WR55D4ZS.js +0 -80
  134. package/dist/chunks/{chunk-3VFBPFZF.mjs → chunk-CWMLTXOH.mjs} +2 -2
  135. package/dist/chunks/{chunk-U53UA76K.js → chunk-HFBTS42N.js} +2 -2
@@ -93,7 +93,10 @@
93
93
  /* ── Shared: Shadow ── */
94
94
  --shadow-comp-sm: var(--shadow-elevation-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));
95
95
  --shadow-comp-md: var(--shadow-elevation-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));
96
- --shadow-comp-lg: var(--shadow-elevation-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
96
+ --shadow-comp-lg: var(
97
+ --shadow-elevation-lg,
98
+ 0 10px 15px -3px rgb(0 0 0 / 0.1)
99
+ );
97
100
 
98
101
  /* ── Shared: Overlay ── */
99
102
  --color-comp-overlay: var(--color-overlay-dim, rgba(0, 0, 0, 0.6));
@@ -135,6 +138,14 @@
135
138
  box-shadow: var(--shadow-comp-btn);
136
139
  transition-property: color, background-color, border-color;
137
140
  transition-duration: 200ms;
141
+ border: none;
142
+ background: none;
143
+ cursor: pointer;
144
+ font: inherit;
145
+ color: inherit;
146
+ padding: 0;
147
+ margin: 0;
148
+ text-decoration: none;
138
149
  }
139
150
  .nexus-btn:disabled,
140
151
  .nexus-btn[aria-disabled='true'] {
@@ -369,7 +380,9 @@
369
380
  font-weight: 500;
370
381
  line-height: 1;
371
382
  color: var(--color-text-primary);
372
- transition: border-color 200ms, box-shadow 200ms;
383
+ transition:
384
+ border-color 200ms,
385
+ box-shadow 200ms;
373
386
  }
374
387
  :where(.nexus-text-input) {
375
388
  width: 100%;
@@ -398,15 +411,18 @@
398
411
 
399
412
  /* ── Sizes ── */
400
413
  .nexus-text-input--xl {
401
- padding: calc(var(--spacing-padding-md, 1rem) - 1px) var(--spacing-padding-md, 1rem);
414
+ padding: calc(var(--spacing-padding-md, 1rem) - 1px)
415
+ var(--spacing-padding-md, 1rem);
402
416
  font-size: var(--text-text-base, 1rem);
403
417
  }
404
418
  .nexus-text-input--lg {
405
- padding: calc(var(--spacing-padding-sm, 0.75rem) - 1px) var(--spacing-padding-sm, 0.75rem);
419
+ padding: calc(var(--spacing-padding-sm, 0.75rem) - 1px)
420
+ var(--spacing-padding-sm, 0.75rem);
406
421
  font-size: var(--text-text-base, 1rem);
407
422
  }
408
423
  .nexus-text-input--md {
409
- padding: calc(var(--spacing-padding-xs, 0.5rem) - 1px) var(--spacing-padding-sm, 0.75rem);
424
+ padding: calc(var(--spacing-padding-xs, 0.5rem) - 1px)
425
+ var(--spacing-padding-sm, 0.75rem);
410
426
  font-size: var(--text-text-sm, 0.875rem);
411
427
  }
412
428
 
@@ -502,13 +518,15 @@
502
518
  text-decoration: underline;
503
519
  transition: color 150ms;
504
520
  }
505
- .nexus-price-input-field__balance:hover .nexus-price-input-field__balance-value {
521
+ .nexus-price-input-field__balance:hover
522
+ .nexus-price-input-field__balance-value {
506
523
  color: var(--color-text-primary);
507
524
  }
508
525
  .nexus-price-input-field__balance-value--exceeded {
509
526
  color: var(--color-status-danger);
510
527
  }
511
- .nexus-price-input-field__balance:hover .nexus-price-input-field__balance-value--exceeded {
528
+ .nexus-price-input-field__balance:hover
529
+ .nexus-price-input-field__balance-value--exceeded {
512
530
  color: var(--color-status-danger);
513
531
  }
514
532
  .nexus-price-input-field__description {
@@ -533,7 +551,9 @@
533
551
  font-weight: 500;
534
552
  line-height: 1;
535
553
  color: var(--color-text-primary);
536
- transition: border-color 200ms, box-shadow 200ms;
554
+ transition:
555
+ border-color 200ms,
556
+ box-shadow 200ms;
537
557
  }
538
558
  :where(.nexus-price-input) {
539
559
  width: 100%;
@@ -562,15 +582,18 @@
562
582
 
563
583
  /* ── Sizes ── */
564
584
  .nexus-price-input--xl {
565
- padding: calc(var(--spacing-padding-md, 1rem) - 1px) var(--spacing-padding-md, 1rem);
585
+ padding: calc(var(--spacing-padding-md, 1rem) - 1px)
586
+ var(--spacing-padding-md, 1rem);
566
587
  font-size: var(--text-text-base, 1rem);
567
588
  }
568
589
  .nexus-price-input--lg {
569
- padding: calc(var(--spacing-padding-sm, 0.75rem) - 1px) var(--spacing-padding-sm, 0.75rem);
590
+ padding: calc(var(--spacing-padding-sm, 0.75rem) - 1px)
591
+ var(--spacing-padding-sm, 0.75rem);
570
592
  font-size: var(--text-text-base, 1rem);
571
593
  }
572
594
  .nexus-price-input--md {
573
- padding: calc(var(--spacing-padding-xs, 0.5rem) - 1px) var(--spacing-padding-sm, 0.75rem);
595
+ padding: calc(var(--spacing-padding-xs, 0.5rem) - 1px)
596
+ var(--spacing-padding-sm, 0.75rem);
574
597
  font-size: var(--text-text-sm, 0.875rem);
575
598
  }
576
599
 
@@ -612,52 +635,137 @@
612
635
  TextArea
613
636
  ═══════════════════════════════════════════ */
614
637
 
638
+ /* ── Field wrapper ── */
639
+ .nexus-textarea-field {
640
+ display: flex;
641
+ flex-direction: column;
642
+ gap: 0.25rem;
643
+ }
644
+ .nexus-textarea-field__label {
645
+ font-size: var(--text-label-semibold-md, 0.875rem);
646
+ font-weight: 600;
647
+ color: var(--color-text-tertiary);
648
+ line-height: 1;
649
+ }
650
+ .nexus-textarea-field__footer {
651
+ display: flex;
652
+ align-items: center;
653
+ gap: 0.5rem;
654
+ }
655
+ .nexus-textarea-field__description {
656
+ flex: 1;
657
+ min-width: 0;
658
+ font-size: var(--text-text-xs, 0.75rem);
659
+ color: var(--color-text-tertiary);
660
+ line-height: 1.5;
661
+ letter-spacing: -0.12px;
662
+ }
663
+ .nexus-textarea-field__description--error {
664
+ color: var(--color-status-danger-intense, #d20625);
665
+ }
666
+ .nexus-textarea-field__count {
667
+ font-size: var(--text-text-xs, 0.75rem);
668
+ color: var(--color-text-tertiary);
669
+ line-height: 1.5;
670
+ letter-spacing: -0.12px;
671
+ text-align: right;
672
+ flex-shrink: 0;
673
+ margin-left: auto;
674
+ }
675
+ .nexus-textarea-field__count--error {
676
+ color: var(--color-status-danger-intense, #d20625);
677
+ }
678
+
679
+ /* ── Textarea box ── */
615
680
  .nexus-textarea {
616
- border-radius: var(--radius-corner-md, 0.375rem);
681
+ border-radius: var(--radius-corner-md, 0.5rem);
617
682
  border: 1px solid var(--color-border-default);
618
683
  background: var(--color-surface-default);
619
- padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
620
- font-size: var(--text-text-sm, 0.875rem);
621
684
  color: var(--color-text-primary);
622
- transition-property: border-color;
623
- transition-duration: 200ms;
685
+ font-weight: 500;
686
+ line-height: 1.5;
687
+ transition:
688
+ border-color 200ms,
689
+ box-shadow 200ms;
624
690
  resize: none;
691
+ min-height: 100px;
692
+ padding: var(--spacing-padding-sm, 0.75rem);
625
693
  }
626
694
  :where(.nexus-textarea) {
627
695
  width: 100%;
628
696
  }
629
697
  .nexus-textarea::placeholder {
630
- color: var(--color-text-tertiary);
698
+ color: var(--color-text-muted);
631
699
  }
632
700
  .nexus-textarea:focus-visible {
633
701
  outline: none;
634
702
  }
635
- .nexus-textarea:disabled {
636
- cursor: not-allowed;
637
- opacity: 0.5;
703
+
704
+ /* Hover */
705
+ .nexus-textarea:hover:not(.nexus-textarea--disabled):not(:focus) {
706
+ border-color: var(--color-border-default-hover);
707
+ box-shadow: 0 0 0 0.5px var(--color-border-default-hover);
638
708
  }
709
+
710
+ /* Focus — default */
639
711
  .nexus-textarea--default:focus {
640
- border-color: var(--color-text-primary);
712
+ border-color: var(--color-accent-primary);
713
+ box-shadow: 0 0 0 0.5px var(--color-accent-primary);
641
714
  }
715
+
716
+ /* Error */
642
717
  .nexus-textarea--error {
643
- border-color: var(--color-status-danger);
718
+ border-color: var(--color-status-danger-focus, #e62848);
719
+ box-shadow: 0 0 0 0.5px var(--color-status-danger-focus, #e62848);
644
720
  }
645
721
  .nexus-textarea--error:focus {
646
- border-color: var(--color-status-danger);
722
+ border-color: var(--color-status-danger-focus, #e62848);
723
+ box-shadow: 0 0 0 0.5px var(--color-status-danger-focus, #e62848);
647
724
  }
648
- .nexus-textarea-wrap {
649
- display: flex;
650
- flex-direction: column;
725
+
726
+ /* Disabled */
727
+ .nexus-textarea--disabled {
728
+ cursor: not-allowed;
729
+ background: var(
730
+ --color-surface-default-disabled,
731
+ var(--color-surface-strong)
732
+ );
733
+ border-color: var(--color-border-medium);
734
+ color: var(--color-text-muted);
651
735
  }
652
- .nexus-textarea-count {
653
- margin-top: 0.25rem;
654
- text-align: right;
655
- font-size: var(--text-text-xs, 0.75rem);
656
- color: var(--color-text-tertiary);
736
+
737
+ /* ── Sizes ── */
738
+ .nexus-textarea--lg {
739
+ font-size: var(--text-text-medium-base, 1rem);
740
+ letter-spacing: -0.16px;
657
741
  }
658
- .nexus-textarea-count__current {
659
- color: var(--color-text-primary);
660
- font-weight: 500;
742
+ .nexus-textarea--md {
743
+ font-size: var(--text-text-medium-sm, 0.875rem);
744
+ letter-spacing: -0.14px;
745
+ }
746
+
747
+ /* ── Resize modes ── */
748
+ .nexus-textarea--resize-default {
749
+ resize: vertical;
750
+ }
751
+ .nexus-textarea--resize-auto {
752
+ resize: none;
753
+ overflow: hidden;
754
+ }
755
+
756
+ /* ── Custom scrollbar ── */
757
+ .nexus-textarea:not(.nexus-textarea--resize-auto) {
758
+ overflow-y: auto;
759
+ }
760
+ .nexus-textarea::-webkit-scrollbar {
761
+ width: 5px;
762
+ }
763
+ .nexus-textarea::-webkit-scrollbar-track {
764
+ background: transparent;
765
+ }
766
+ .nexus-textarea::-webkit-scrollbar-thumb {
767
+ background: var(--color-icon-muted, #c6d0da);
768
+ border-radius: var(--radius-corner-full, 9999px);
661
769
  }
662
770
 
663
771
  /* ═══════════════════════════════════════════
@@ -666,81 +774,167 @@
666
774
 
667
775
  .nexus-number-input {
668
776
  display: flex;
669
- align-items: center;
670
- border-radius: var(--radius-corner-md, 0.375rem);
671
- border: 1px solid var(--color-border-default);
672
- background: var(--color-surface-default);
673
- color: var(--color-text-primary);
674
- transition: border-color 200ms, box-shadow 200ms;
777
+ flex-direction: column;
778
+ align-items: stretch;
675
779
  }
676
780
  :where(.nexus-number-input) {
677
781
  width: 100%;
678
782
  }
679
- .nexus-number-input:hover:not(.nexus-number-input--disabled):not(:focus-within) {
680
- box-shadow: 0 0 0 0.5px var(--color-border-default);
783
+
784
+ /* ── Header (label + max) ── */
785
+ .nexus-number-input__header {
786
+ display: flex;
787
+ align-items: center;
788
+ justify-content: space-between;
789
+ margin-bottom: 4px;
681
790
  }
682
- .nexus-number-input--default:focus-within {
683
- border-color: var(--color-accent-primary);
684
- box-shadow: 0 0 0 0.5px var(--color-accent-primary);
791
+ .nexus-number-input__label {
792
+ font-size: var(--text-label-semibold-md, 0.875rem);
793
+ font-weight: var(--font-weight-label-semibold-md, 600);
794
+ line-height: 1;
795
+ color: var(--color-text-tertiary);
685
796
  }
686
- .nexus-number-input--error {
687
- border-color: var(--color-status-danger);
797
+ .nexus-number-input__max {
798
+ display: flex;
799
+ align-items: center;
800
+ gap: 4px;
801
+ margin: 0;
802
+ margin-left: auto;
803
+ padding: 0;
804
+ border: none;
805
+ background: none;
806
+ font-size: var(--text-text-xs, 0.75rem);
807
+ font-weight: 400;
808
+ line-height: 1.5;
809
+ letter-spacing: -0.01em;
810
+ cursor: pointer;
688
811
  }
689
- .nexus-number-input--error:focus-within {
690
- border-color: var(--color-status-danger);
691
- box-shadow: 0 0 0 0.5px var(--color-status-danger);
812
+ .nexus-number-input__max:disabled {
813
+ cursor: default;
692
814
  }
693
- .nexus-number-input--xl {
694
- height: 3.5rem;
695
- font-size: var(--text-text-base, 1rem);
815
+ .nexus-number-input__max-text {
816
+ color: var(--color-text-tertiary);
696
817
  }
697
- .nexus-number-input--lg {
698
- height: 3rem;
699
- font-size: var(--text-text-base, 1rem);
818
+ .nexus-number-input__max-value {
819
+ color: var(--color-text-secondary);
820
+ text-decoration: underline;
700
821
  }
701
- .nexus-number-input--md {
702
- height: 2.5rem;
703
- font-size: var(--text-text-sm, 0.875rem);
822
+ .nexus-number-input__max-value--exceeded {
823
+ color: var(--color-status-danger-intense);
704
824
  }
705
- .nexus-number-input--sm {
706
- height: 2rem;
707
- font-size: var(--text-text-xs, 0.75rem);
825
+
826
+ /* ── Container (the bordered input box) ── */
827
+ .nexus-number-input__container {
828
+ display: flex;
829
+ align-items: center;
830
+ border-radius: var(--radius-corner-md, 0.5rem);
831
+ border: 1px solid var(--color-border-default);
832
+ background: var(--color-surface-default);
833
+ outline: 0.5px solid transparent;
834
+ transition:
835
+ border-color var(--duration-transition-fast, 150ms),
836
+ outline-color var(--duration-transition-fast, 150ms);
837
+ }
838
+ .nexus-number-input--basic .nexus-number-input__container {
839
+ overflow: clip;
840
+ }
841
+ .nexus-number-input:not(.nexus-number-input--disabled):not(
842
+ .nexus-number-input--error
843
+ )
844
+ .nexus-number-input__container:hover {
845
+ border-color: var(--color-border-default-hover);
846
+ outline-color: var(--color-border-default-hover);
708
847
  }
709
- .nexus-number-input--disabled {
710
- opacity: 0.5;
711
- cursor: not-allowed;
848
+ .nexus-number-input:not(.nexus-number-input--disabled):not(
849
+ .nexus-number-input--error
850
+ )
851
+ .nexus-number-input__container:focus-within {
852
+ border-color: var(--color-accent-primary-focus);
853
+ outline-color: var(--color-accent-primary-focus);
854
+ }
855
+ .nexus-number-input--error .nexus-number-input__container {
856
+ border-color: var(--color-status-danger-focus);
857
+ outline-color: var(--color-status-danger-focus);
858
+ }
859
+ .nexus-number-input--disabled .nexus-number-input__container {
860
+ background: var(--color-surface-strong);
861
+ border-color: var(--color-border-medium);
862
+ pointer-events: none;
863
+ }
864
+ .nexus-number-input--disabled .nexus-number-input__label {
865
+ color: var(--color-text-muted);
866
+ }
867
+ .nexus-number-input--disabled .nexus-number-input__max {
868
+ cursor: default;
869
+ }
870
+ .nexus-number-input--disabled .nexus-number-input__max-text,
871
+ .nexus-number-input--disabled .nexus-number-input__max-value {
872
+ color: var(--color-text-muted);
873
+ text-decoration: none;
874
+ }
875
+ .nexus-number-input--disabled .nexus-number-input__step {
876
+ color: var(--color-text-muted);
877
+ }
878
+ .nexus-number-input--disabled .nexus-number-input__bind-btn {
879
+ background: var(--color-surface-strong);
880
+ color: var(--color-text-muted);
712
881
  }
882
+ .nexus-number-input--disabled .nexus-number-input__description {
883
+ color: var(--color-text-muted);
884
+ }
885
+
886
+ /* ── Input field ── */
713
887
  .nexus-number-input__field {
714
- height: 100%;
715
- width: 100%;
716
- min-width: 0;
717
888
  flex: 1;
889
+ min-width: 0;
890
+ border: none;
718
891
  background: transparent;
719
892
  outline: none;
893
+ font-size: var(--text-label-lg, 1rem);
894
+ font-weight: var(--font-weight-label-lg, 500);
895
+ line-height: 1;
896
+ color: var(--color-text-primary);
720
897
  }
721
898
  .nexus-number-input__field::placeholder {
722
- color: var(--color-text-tertiary);
899
+ color: var(--color-text-muted);
723
900
  }
724
901
  .nexus-number-input__field:focus-visible {
725
902
  outline: none;
726
903
  }
727
- .nexus-number-input__field--xl {
728
- padding-inline: var(--spacing-padding-lg, 1.25rem);
904
+ .nexus-number-input--disabled .nexus-number-input__field {
905
+ color: var(--color-text-muted);
906
+ cursor: not-allowed;
729
907
  }
730
- .nexus-number-input__field--lg {
731
- padding-inline: var(--spacing-padding-md, 1rem);
908
+
909
+ /* ── Size: field padding (basic) ── */
910
+ .nexus-number-input--basic.nexus-number-input--lg .nexus-number-input__field {
911
+ padding: var(--spacing-padding-sm, 0.75rem);
732
912
  }
733
- .nexus-number-input__field--md {
734
- padding-inline: var(--spacing-padding-sm, 0.75rem);
913
+ .nexus-number-input--basic.nexus-number-input--xl .nexus-number-input__field {
914
+ padding: var(--spacing-padding-md, 1rem);
735
915
  }
736
- .nexus-number-input__field--sm {
737
- padding-inline: 0.625rem;
916
+
917
+ /* ── Size: field padding (bind) ── */
918
+ .nexus-number-input--bind .nexus-number-input__container {
919
+ padding-inline: var(--spacing-padding-xs, 0.5rem);
920
+ }
921
+ .nexus-number-input--bind .nexus-number-input__field {
922
+ text-align: center;
923
+ }
924
+ .nexus-number-input--bind.nexus-number-input--lg .nexus-number-input__field {
925
+ padding: var(--spacing-padding-sm, 0.75rem);
738
926
  }
927
+ .nexus-number-input--bind.nexus-number-input--xl .nexus-number-input__field {
928
+ padding: var(--spacing-padding-md, 1rem) var(--spacing-padding-sm, 0.75rem);
929
+ }
930
+
931
+ /* ── Basic variant: chevron buttons column ── */
739
932
  .nexus-number-input__buttons {
740
933
  display: flex;
741
934
  flex-direction: column;
935
+ align-self: stretch;
742
936
  border-left: 1px solid var(--color-border-default);
743
- height: 100%;
937
+ width: 24px;
744
938
  flex-shrink: 0;
745
939
  }
746
940
  .nexus-number-input__step {
@@ -748,29 +942,84 @@
748
942
  flex: 1;
749
943
  align-items: center;
750
944
  justify-content: center;
751
- padding-inline: 0.375rem;
752
- color: var(--color-text-tertiary);
753
- transition-property: color, background-color;
754
- transition-duration: 150ms;
945
+ padding: 0;
946
+ margin: 0;
947
+ border: none;
948
+ background: var(--color-surface-subtle);
949
+ cursor: pointer;
950
+ color: var(--color-icon-secondary);
951
+ transition:
952
+ color var(--duration-transition-fast, 150ms),
953
+ background-color var(--duration-transition-fast, 150ms);
755
954
  }
756
955
  .nexus-number-input__step:hover {
757
- color: var(--color-text-primary);
758
- background: var(--color-surface-hover);
956
+ background: var(--color-surface-subtle-hover);
957
+ color: var(--color-icon-primary);
759
958
  }
760
959
  .nexus-number-input__step:disabled {
761
- opacity: 0.4;
960
+ color: var(--color-text-muted);
762
961
  pointer-events: none;
763
962
  }
764
963
  .nexus-number-input__step--up {
765
- border-top-right-radius: var(--radius-corner-md, 0.375rem);
766
964
  border-bottom: 1px solid var(--color-border-default);
767
965
  }
768
- .nexus-number-input__step--down {
769
- border-bottom-right-radius: var(--radius-corner-md, 0.375rem);
966
+ .nexus-number-input__chevron-icon {
967
+ width: 8px;
968
+ height: 5px;
770
969
  }
771
- .nexus-number-input__step-icon {
772
- width: 0.75rem;
773
- height: 0.75rem;
970
+ .nexus-number-input__chevron-icon--down {
971
+ transform: scaleY(-1);
972
+ }
973
+
974
+ /* ── Bind variant: +/- buttons ── */
975
+ .nexus-number-input__bind-btn {
976
+ display: flex;
977
+ align-items: center;
978
+ justify-content: center;
979
+ flex-shrink: 0;
980
+ width: 24px;
981
+ height: 24px;
982
+ padding: 0;
983
+ margin: 0;
984
+ border: none;
985
+ border-radius: var(--radius-corner-sm, 0.25rem);
986
+ background: var(--color-surface-subtle);
987
+ color: var(--color-icon-secondary);
988
+ cursor: pointer;
989
+ overflow: clip;
990
+ transition:
991
+ color var(--duration-transition-fast, 150ms),
992
+ background-color var(--duration-transition-fast, 150ms);
993
+ }
994
+ .nexus-number-input__bind-btn:hover {
995
+ background: var(--color-surface-subtle-hover);
996
+ color: var(--color-icon-primary);
997
+ }
998
+ .nexus-number-input__bind-btn:disabled {
999
+ color: var(--color-text-muted);
1000
+ pointer-events: none;
1001
+ }
1002
+ .nexus-number-input--xl .nexus-number-input__bind-btn {
1003
+ width: 30px;
1004
+ height: 30px;
1005
+ }
1006
+ .nexus-number-input__bind-icon {
1007
+ width: 16px;
1008
+ height: 16px;
1009
+ }
1010
+
1011
+ /* ── Description ── */
1012
+ .nexus-number-input__description {
1013
+ margin: 0;
1014
+ font-size: var(--text-text-xs, 0.75rem);
1015
+ font-weight: 400;
1016
+ line-height: 1.5;
1017
+ letter-spacing: -0.01em;
1018
+ color: var(--color-text-tertiary);
1019
+ height: 18px;
1020
+ }
1021
+ .nexus-number-input__description--error {
1022
+ color: var(--color-status-danger-intense);
774
1023
  }
775
1024
 
776
1025
  /* ═══════════════════════════════════════════
@@ -1095,6 +1344,12 @@
1095
1344
  user-select: none;
1096
1345
  border-radius: 9999px;
1097
1346
  border: 1px solid transparent;
1347
+ background: transparent;
1348
+ cursor: pointer;
1349
+ font-family: inherit;
1350
+ padding: 0;
1351
+ margin: 0;
1352
+ text-decoration: none;
1098
1353
  }
1099
1354
  .nexus-chip[aria-disabled='true'] {
1100
1355
  opacity: 0.5;
@@ -1155,45 +1410,308 @@
1155
1410
  }
1156
1411
 
1157
1412
  /* ═══════════════════════════════════════════
1158
- Pagination
1413
+ Badge
1159
1414
  ═══════════════════════════════════════════ */
1160
1415
 
1161
- .nexus-pagination {
1162
- display: flex;
1163
- align-items: center;
1164
- gap: var(--spacing-gap-xs, 0.25rem);
1165
- }
1166
- .nexus-pagination--sm {
1167
- font-size: var(--text-text-xs, 0.75rem);
1168
- }
1169
- .nexus-pagination--md {
1170
- font-size: var(--text-text-sm, 0.875rem);
1416
+ .nexus-badge-wrapper {
1417
+ position: relative;
1171
1418
  }
1172
- .nexus-page-btn {
1419
+ .nexus-badge {
1420
+ --nexus-badge-offset-x: 0px;
1421
+ --nexus-badge-offset-y: 0px;
1422
+ box-sizing: border-box;
1173
1423
  display: inline-flex;
1174
1424
  align-items: center;
1175
1425
  justify-content: center;
1176
- border-radius: var(--radius-corner-md, 0.375rem);
1177
- font-weight: 500;
1178
- transition-property: color, background-color;
1179
- transition-duration: 150ms;
1180
- user-select: none;
1181
- border: 1px solid transparent;
1182
- }
1183
- .nexus-page-btn:disabled {
1184
- opacity: 0.4;
1185
- pointer-events: none;
1186
- }
1187
- .nexus-page-btn--sm {
1188
- width: 1.75rem;
1189
- height: 1.75rem;
1426
+ min-width: 1.25rem;
1427
+ height: 1.25rem;
1428
+ padding: 0 0.35rem;
1429
+ border-radius: var(--radius-corner-full, 9999px);
1190
1430
  font-size: var(--text-text-xs, 0.75rem);
1431
+ font-weight: var(--font-weight-label-semibold-sm, 600);
1432
+ line-height: 1;
1433
+ color: var(--color-text-inverted);
1434
+ }
1435
+ .nexus-badge--positioned {
1436
+ position: absolute;
1437
+ top: 0;
1438
+ right: 0;
1439
+ z-index: 1;
1440
+ transform: translate(
1441
+ calc(50% + var(--nexus-badge-offset-x)),
1442
+ calc(-50% + var(--nexus-badge-offset-y))
1443
+ );
1444
+ }
1445
+ .nexus-badge--dot {
1446
+ min-width: 0;
1447
+ padding: 0;
1448
+ }
1449
+ .nexus-badge--dot.nexus-badge--sm {
1450
+ width: 0.375rem;
1451
+ height: 0.375rem;
1452
+ }
1453
+ .nexus-badge--dot.nexus-badge--md {
1454
+ width: 0.5rem;
1455
+ height: 0.5rem;
1456
+ }
1457
+ .nexus-badge--dot.nexus-badge--lg {
1458
+ width: 0.625rem;
1459
+ height: 0.625rem;
1460
+ }
1461
+ .nexus-badge--danger {
1462
+ background: var(--color-status-danger);
1463
+ color: var(--color-static-white);
1464
+ }
1465
+ .nexus-badge--primary {
1466
+ background: var(--color-accent-primary);
1467
+ color: var(--color-accent-on-primary);
1468
+ }
1469
+ .nexus-badge--secondary {
1470
+ background: var(--color-accent-secondary);
1471
+ color: var(--color-accent-on-secondary);
1472
+ }
1473
+ .nexus-badge--info {
1474
+ background: var(--color-status-info);
1475
+ color: var(--color-static-white);
1476
+ }
1477
+ .nexus-badge--success {
1478
+ background: var(--color-status-success);
1479
+ color: var(--color-static-white);
1480
+ }
1481
+ .nexus-badge--warning {
1482
+ background: var(--color-status-warning);
1483
+ color: var(--color-static-black);
1484
+ }
1485
+ .nexus-badge--sm:not(.nexus-badge--dot) {
1486
+ min-width: 1rem;
1487
+ height: 1rem;
1488
+ padding: 0 0.25rem;
1489
+ font-size: 0.625rem;
1490
+ }
1491
+ .nexus-badge--lg:not(.nexus-badge--dot) {
1492
+ min-width: 1.5rem;
1493
+ height: 1.5rem;
1494
+ padding: 0 0.45rem;
1495
+ font-size: var(--text-text-sm, 0.875rem);
1496
+ }
1497
+
1498
+ /* ═══════════════════════════════════════════
1499
+ Progress
1500
+ ═══════════════════════════════════════════ */
1501
+
1502
+ .nexus-progress-wrapper {
1503
+ display: flex;
1504
+ flex-direction: column;
1505
+ gap: var(--spacing-gap-xs, 0.25rem);
1506
+ width: 100%;
1507
+ }
1508
+ .nexus-progress__header {
1509
+ display: flex;
1510
+ justify-content: space-between;
1511
+ align-items: center;
1512
+ gap: var(--spacing-gap-sm, 0.5rem);
1513
+ }
1514
+ .nexus-progress__label {
1515
+ font-size: var(--text-text-sm, 0.875rem);
1516
+ color: var(--color-text-primary);
1517
+ }
1518
+ .nexus-progress__value {
1519
+ font-size: var(--text-text-sm, 0.875rem);
1520
+ color: var(--color-text-secondary);
1521
+ font-variant-numeric: tabular-nums;
1522
+ }
1523
+ .nexus-progress {
1524
+ position: relative;
1525
+ width: 100%;
1526
+ overflow: hidden;
1527
+ border-radius: var(--radius-corner-full, 9999px);
1528
+ background: var(--color-surface-strong);
1529
+ }
1530
+ .nexus-progress--sm {
1531
+ height: 0.25rem;
1532
+ }
1533
+ .nexus-progress--md {
1534
+ height: 0.375rem;
1535
+ }
1536
+ .nexus-progress--lg {
1537
+ height: 0.5rem;
1538
+ }
1539
+ .nexus-progress__bar {
1540
+ height: 100%;
1541
+ border-radius: inherit;
1542
+ transition:
1543
+ width var(--duration-transition-normal, 200ms) var(--ease-transition-normal, cubic-bezier(0, 0, 0.2, 1));
1544
+ }
1545
+ .nexus-progress--primary .nexus-progress__bar {
1546
+ background: var(--color-accent-primary);
1547
+ }
1548
+ .nexus-progress--success .nexus-progress__bar {
1549
+ background: var(--color-status-success);
1550
+ }
1551
+ .nexus-progress--warning .nexus-progress__bar {
1552
+ background: var(--color-status-warning);
1553
+ }
1554
+ .nexus-progress--danger .nexus-progress__bar {
1555
+ background: var(--color-status-danger);
1556
+ }
1557
+ .nexus-progress--info .nexus-progress__bar {
1558
+ background: var(--color-status-info);
1559
+ }
1560
+ .nexus-progress__bar--indeterminate {
1561
+ position: absolute;
1562
+ left: 0;
1563
+ top: 0;
1564
+ bottom: 0;
1565
+ width: 35% !important;
1566
+ animation: nexus-progress-indeterminate 1.1s var(--ease-transition-normal, cubic-bezier(0, 0, 0.2, 1))
1567
+ infinite;
1568
+ }
1569
+ @keyframes nexus-progress-indeterminate {
1570
+ 0% {
1571
+ transform: translateX(-100%);
1572
+ }
1573
+ 100% {
1574
+ transform: translateX(calc(100% / 0.35 * 3));
1575
+ }
1576
+ }
1577
+
1578
+ /* ═══════════════════════════════════════════
1579
+ Alert
1580
+ ═══════════════════════════════════════════ */
1581
+
1582
+ .nexus-alert {
1583
+ display: flex;
1584
+ align-items: flex-start;
1585
+ gap: var(--spacing-gap-sm, 0.5rem);
1586
+ padding: var(--spacing-padding-md, 1rem);
1587
+ border-radius: var(--radius-corner-md, 8px);
1588
+ border-width: var(--border-width-stroke-thin, 1px);
1589
+ border-style: solid;
1590
+ }
1591
+ .nexus-alert__icon {
1592
+ flex-shrink: 0;
1593
+ margin-top: 0.125rem;
1594
+ line-height: 0;
1595
+ }
1596
+ .nexus-alert__icon-svg {
1597
+ width: 1.25rem;
1598
+ height: 1.25rem;
1599
+ }
1600
+ .nexus-alert__body {
1601
+ flex: 1;
1602
+ min-width: 0;
1603
+ }
1604
+ .nexus-alert__title {
1605
+ margin: 0;
1606
+ font-weight: var(--font-weight-heading-h7, 600);
1607
+ font-size: var(--text-text-sm, 0.875rem);
1608
+ color: var(--color-text-primary);
1609
+ }
1610
+ .nexus-alert__description {
1611
+ margin-top: var(--spacing-gap-xs, 0.25rem);
1612
+ font-size: var(--text-text-sm, 0.875rem);
1613
+ color: var(--color-text-secondary);
1614
+ }
1615
+ .nexus-alert__action {
1616
+ flex-shrink: 0;
1617
+ align-self: center;
1618
+ }
1619
+ .nexus-alert__close {
1620
+ flex-shrink: 0;
1621
+ display: inline-flex;
1622
+ align-items: center;
1623
+ justify-content: center;
1624
+ margin: 0;
1625
+ padding: var(--spacing-padding-2xs, 0.25rem);
1626
+ border: none;
1627
+ border-radius: var(--radius-corner-sm, 4px);
1628
+ background: transparent;
1629
+ cursor: pointer;
1630
+ font: inherit;
1631
+ color: var(--color-icon-secondary);
1632
+ transition: color var(--duration-transition-fast, 150ms) var(--ease-transition-fast, ease);
1633
+ }
1634
+ .nexus-alert__close:hover {
1635
+ color: var(--color-icon-primary);
1636
+ }
1637
+ .nexus-alert__close-icon {
1638
+ width: 1rem;
1639
+ height: 1rem;
1640
+ }
1641
+ .nexus-alert--info {
1642
+ background: color-mix(in srgb, var(--color-status-info-dim) 45%, var(--color-surface-default));
1643
+ border-color: color-mix(in srgb, var(--color-status-info) 28%, var(--color-border-default));
1644
+ }
1645
+ .nexus-alert--info .nexus-alert__icon {
1646
+ color: var(--color-status-info-intense);
1647
+ }
1648
+ .nexus-alert--success {
1649
+ background: color-mix(in srgb, var(--color-status-success-dim) 45%, var(--color-surface-default));
1650
+ border-color: color-mix(in srgb, var(--color-status-success) 28%, var(--color-border-default));
1651
+ }
1652
+ .nexus-alert--success .nexus-alert__icon {
1653
+ color: var(--color-status-success-intense);
1654
+ }
1655
+ .nexus-alert--warning {
1656
+ background: color-mix(in srgb, var(--color-status-warning-dim) 45%, var(--color-surface-default));
1657
+ border-color: color-mix(in srgb, var(--color-status-warning) 28%, var(--color-border-default));
1658
+ }
1659
+ .nexus-alert--warning .nexus-alert__icon {
1660
+ color: var(--color-status-warning-intense);
1661
+ }
1662
+ .nexus-alert--danger {
1663
+ background: color-mix(in srgb, var(--color-status-danger-dim) 45%, var(--color-surface-default));
1664
+ border-color: color-mix(in srgb, var(--color-status-danger) 28%, var(--color-border-default));
1665
+ }
1666
+ .nexus-alert--danger .nexus-alert__icon {
1667
+ color: var(--color-status-danger-intense);
1668
+ }
1669
+
1670
+ /* ═══════════════════════════════════════════
1671
+ Pagination
1672
+ ═══════════════════════════════════════════ */
1673
+
1674
+ .nexus-pagination {
1675
+ display: flex;
1676
+ align-items: center;
1677
+ gap: var(--spacing-gap-xs, 0.25rem);
1678
+ }
1679
+ .nexus-pagination--sm {
1680
+ font-size: var(--text-text-xs, 0.75rem);
1681
+ }
1682
+ .nexus-pagination--md {
1683
+ font-size: var(--text-text-sm, 0.875rem);
1684
+ }
1685
+ .nexus-page-btn {
1686
+ display: inline-flex;
1687
+ align-items: center;
1688
+ justify-content: center;
1689
+ border-radius: var(--radius-corner-md, 0.375rem);
1690
+ font-weight: 500;
1691
+ transition-property: color, background-color;
1692
+ transition-duration: 150ms;
1693
+ user-select: none;
1694
+ border: 1px solid transparent;
1695
+ background: transparent;
1696
+ cursor: pointer;
1697
+ font-family: inherit;
1698
+ padding: 0;
1699
+ margin: 0;
1700
+ }
1701
+ .nexus-page-btn:disabled {
1702
+ opacity: 0.4;
1703
+ pointer-events: none;
1704
+ }
1705
+ .nexus-page-btn--sm {
1706
+ width: 1.75rem;
1707
+ height: 1.75rem;
1708
+ font-size: var(--text-text-xs, 0.75rem);
1709
+ }
1710
+ .nexus-page-btn--md {
1711
+ width: 2.25rem;
1712
+ height: 2.25rem;
1713
+ font-size: var(--text-text-sm, 0.875rem);
1191
1714
  }
1192
- .nexus-page-btn--md {
1193
- width: 2.25rem;
1194
- height: 2.25rem;
1195
- font-size: var(--text-text-sm, 0.875rem);
1196
- }
1197
1715
  .nexus-page-btn--active {
1198
1716
  background: var(--color-accent-primary);
1199
1717
  color: var(--color-static-white);
@@ -1241,6 +1759,12 @@
1241
1759
  outline: none;
1242
1760
  transition-property: color, background-color, border-color;
1243
1761
  transition-duration: 150ms;
1762
+ border: none;
1763
+ background: transparent;
1764
+ cursor: pointer;
1765
+ font-family: inherit;
1766
+ padding: 0;
1767
+ margin: 0;
1244
1768
  }
1245
1769
  .nexus-tab-trigger--line {
1246
1770
  padding: 0.625rem var(--spacing-padding-md, 1rem);
@@ -1426,8 +1950,13 @@
1426
1950
  justify-content: space-between;
1427
1951
  border-radius: var(--radius-corner-sm, 0.25rem);
1428
1952
  border: 1px solid var(--color-border-default);
1953
+ background: var(--color-surface-default, transparent);
1429
1954
  color: var(--color-text-primary);
1430
1955
  font-size: var(--text-text-sm, 0.875rem);
1956
+ font-family: inherit;
1957
+ cursor: pointer;
1958
+ padding: 0;
1959
+ margin: 0;
1431
1960
  transition-property: border-color;
1432
1961
  transition-duration: 200ms;
1433
1962
  }
@@ -1513,12 +2042,24 @@
1513
2042
  animation: nexus-select-slide-out 100ms ease-in forwards;
1514
2043
  }
1515
2044
  @keyframes nexus-select-slide-in {
1516
- from { opacity: 0; transform: translateY(-4px) scaleY(0.96); }
1517
- to { opacity: 1; transform: translateY(0) scaleY(1); }
2045
+ from {
2046
+ opacity: 0;
2047
+ transform: translateY(-4px) scaleY(0.96);
2048
+ }
2049
+ to {
2050
+ opacity: 1;
2051
+ transform: translateY(0) scaleY(1);
2052
+ }
1518
2053
  }
1519
2054
  @keyframes nexus-select-slide-out {
1520
- from { opacity: 1; transform: translateY(0) scaleY(1); }
1521
- to { opacity: 0; transform: translateY(-4px) scaleY(0.96); }
2055
+ from {
2056
+ opacity: 1;
2057
+ transform: translateY(0) scaleY(1);
2058
+ }
2059
+ to {
2060
+ opacity: 0;
2061
+ transform: translateY(-4px) scaleY(0.96);
2062
+ }
1522
2063
  }
1523
2064
  .nexus-select-content--sm {
1524
2065
  width: 4rem;
@@ -1562,70 +2103,359 @@
1562
2103
  }
1563
2104
 
1564
2105
  /* ═══════════════════════════════════════════
1565
- Tooltip
2106
+ DropdownMenu
1566
2107
  ═══════════════════════════════════════════ */
1567
2108
 
1568
- .nexus-tooltip-content {
1569
- z-index: 50;
1570
- display: flex;
2109
+ .nexus-dropdown-content {
2110
+ position: relative;
2111
+ z-index: var(--z-index-layer-dropdown, 10);
2112
+ min-width: 10rem;
1571
2113
  overflow: hidden;
1572
- border-radius: var(--radius-corner-md, 0.375rem);
1573
- padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
1574
- font-size: var(--text-text-sm, 0.875rem);
1575
- }
1576
- .nexus-tooltip--light {
1577
- border: 1px solid var(--color-border-default);
1578
- background: var(--color-static-white);
1579
- color: var(--color-static-black);
1580
- box-shadow: var(--shadow-comp-md);
1581
- }
1582
- .nexus-tooltip--dark {
1583
- border: none;
1584
- background: var(--color-static-black);
1585
- color: var(--color-static-white);
1586
- }
1587
- .nexus-tooltip-arrow--dark {
1588
- fill: var(--color-static-black);
1589
- }
1590
- .nexus-tooltip-arrow--light {
1591
- fill: var(--color-static-white);
1592
- }
1593
- .nexus-tooltip-trigger {
1594
- cursor: default;
1595
- }
1596
-
1597
- /* ═══════════════════════════════════════════
1598
- Popover
1599
- ═══════════════════════════════════════════ */
1600
-
1601
- .nexus-popover-content {
1602
- z-index: 50;
1603
- border-radius: var(--radius-corner-lg, 0.5rem);
2114
+ border-radius: var(--radius-corner-md, 0.5rem);
1604
2115
  border: 1px solid var(--color-border-default);
1605
- padding: var(--spacing-padding-md, 1rem);
1606
- box-shadow: var(--shadow-comp-lg);
1607
- outline: none;
1608
2116
  background: var(--color-surface-default);
2117
+ padding: var(--spacing-padding-xs, 0.5rem);
2118
+ box-shadow: var(--shadow-comp-lg);
1609
2119
  color: var(--color-text-primary);
1610
- transform-origin: var(--radix-popover-content-transform-origin);
2120
+ transform-origin: var(--radix-dropdown-menu-content-transform-origin);
1611
2121
  will-change: transform, opacity;
1612
2122
  }
1613
- .nexus-popover-content[data-state='open'] {
1614
- animation: nexus-popover-in 150ms ease-out;
1615
- }
1616
- .nexus-popover-content[data-state='closed'] {
1617
- animation: nexus-popover-out 100ms ease-in forwards;
1618
- }
1619
- @keyframes nexus-popover-in {
1620
- from { opacity: 0; transform: scale(0.95); }
1621
- to { opacity: 1; transform: scale(1); }
2123
+ .nexus-dropdown-content[data-state='open'] {
2124
+ animation: nexus-dropdown-in 150ms ease-out;
1622
2125
  }
1623
- @keyframes nexus-popover-out {
1624
- from { opacity: 1; transform: scale(1); }
1625
- to { opacity: 0; transform: scale(0.95); }
2126
+ .nexus-dropdown-content[data-state='closed'] {
2127
+ animation: nexus-dropdown-out 100ms ease-in forwards;
1626
2128
  }
1627
- .nexus-popover-arrow {
1628
- fill: var(--color-surface-default);
2129
+ @keyframes nexus-dropdown-in {
2130
+ from {
2131
+ opacity: 0;
2132
+ transform: scale(0.96);
2133
+ }
2134
+ to {
2135
+ opacity: 1;
2136
+ transform: scale(1);
2137
+ }
2138
+ }
2139
+ @keyframes nexus-dropdown-out {
2140
+ from {
2141
+ opacity: 1;
2142
+ transform: scale(1);
2143
+ }
2144
+ to {
2145
+ opacity: 0;
2146
+ transform: scale(0.96);
2147
+ }
2148
+ }
2149
+ .nexus-dropdown-separator {
2150
+ margin: var(--spacing-padding-xs, 0.5rem) calc(-1 * var(--spacing-padding-xs, 0.5rem));
2151
+ height: 1px;
2152
+ background: var(--color-border-default);
2153
+ }
2154
+ .nexus-dropdown-item {
2155
+ position: relative;
2156
+ display: flex;
2157
+ width: 100%;
2158
+ cursor: default;
2159
+ align-items: center;
2160
+ gap: var(--spacing-gap-sm, 0.5rem);
2161
+ border-radius: var(--radius-corner-sm, 0.25rem);
2162
+ padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
2163
+ font-size: var(--text-text-sm, 0.875rem);
2164
+ color: var(--color-text-primary);
2165
+ outline: none;
2166
+ user-select: none;
2167
+ transition: background-color 150ms ease;
2168
+ }
2169
+ .nexus-dropdown-item[data-highlighted] {
2170
+ background: var(--color-surface-hover);
2171
+ }
2172
+ .nexus-dropdown-item[data-disabled] {
2173
+ pointer-events: none;
2174
+ opacity: var(--opacity-disabled-element, 0.4);
2175
+ }
2176
+ .nexus-dropdown-item--danger {
2177
+ color: var(--color-status-danger);
2178
+ }
2179
+ .nexus-dropdown-item--danger[data-highlighted] {
2180
+ background: var(--color-status-danger-dim);
2181
+ color: var(--color-status-danger-intense);
2182
+ }
2183
+ .nexus-dropdown-item__icon {
2184
+ display: inline-flex;
2185
+ flex-shrink: 0;
2186
+ color: var(--color-icon-secondary);
2187
+ }
2188
+ .nexus-dropdown-item--danger .nexus-dropdown-item__icon {
2189
+ color: var(--color-status-danger);
2190
+ }
2191
+
2192
+ /* ═══════════════════════════════════════════
2193
+ ToggleGroup
2194
+ ═══════════════════════════════════════════ */
2195
+
2196
+ .nexus-toggle-group {
2197
+ display: inline-flex;
2198
+ align-items: stretch;
2199
+ position: relative;
2200
+ border-radius: var(--radius-corner-md, 0.5rem);
2201
+ }
2202
+ .nexus-toggle-group--default {
2203
+ background: var(--color-surface-subtle);
2204
+ padding: var(--spacing-padding-2xs, 0.25rem);
2205
+ gap: var(--spacing-gap-xs, 0.25rem);
2206
+ }
2207
+
2208
+ /* ── Sliding indicator ── */
2209
+ .nexus-toggle-group__indicator {
2210
+ position: absolute;
2211
+ top: 0;
2212
+ left: 0;
2213
+ border-radius: var(--radius-corner-sm, 0.25rem);
2214
+ background: var(--color-surface-default);
2215
+ box-shadow: var(--shadow-sm);
2216
+ pointer-events: none;
2217
+ z-index: 0;
2218
+ will-change: transform, width;
2219
+ }
2220
+ .nexus-toggle-group__indicator--animated {
2221
+ transition:
2222
+ transform 200ms cubic-bezier(0, 0, 0.2, 1),
2223
+ width 200ms cubic-bezier(0, 0, 0.2, 1);
2224
+ }
2225
+ .nexus-toggle-group--outline {
2226
+ border: 1px solid var(--color-border-default);
2227
+ padding: var(--spacing-padding-2xs, 0.25rem);
2228
+ gap: 0;
2229
+ }
2230
+ .nexus-toggle-group__item {
2231
+ display: inline-flex;
2232
+ align-items: center;
2233
+ justify-content: center;
2234
+ gap: var(--spacing-gap-xs, 0.25rem);
2235
+ border-radius: var(--radius-corner-sm, 0.25rem);
2236
+ border: none;
2237
+ background: transparent;
2238
+ font-size: var(--text-text-sm, 0.875rem);
2239
+ font-weight: var(--font-weight-text-medium-sm, 500);
2240
+ color: var(--color-text-secondary);
2241
+ cursor: pointer;
2242
+ transition: color var(--duration-transition-normal, 200ms) var(--ease-transition-fast);
2243
+ outline: none;
2244
+ position: relative;
2245
+ z-index: 1;
2246
+ }
2247
+ .nexus-toggle-group__item:focus-visible {
2248
+ box-shadow: 0 0 0 2px var(--color-surface-default), 0 0 0 4px var(--color-accent-primary-focus);
2249
+ }
2250
+ .nexus-toggle-group__item[data-disabled] {
2251
+ pointer-events: none;
2252
+ opacity: var(--opacity-disabled-element, 0.4);
2253
+ }
2254
+ .nexus-toggle-group--default .nexus-toggle-group__item[data-state='on'] {
2255
+ color: var(--color-text-primary);
2256
+ }
2257
+ .nexus-toggle-group--outline .nexus-toggle-group__item {
2258
+ padding-inline: var(--spacing-padding-sm, 0.75rem);
2259
+ }
2260
+ .nexus-toggle-group--outline .nexus-toggle-group__item[data-state='on'] {
2261
+ background: var(--color-accent-primary-dim);
2262
+ color: var(--color-accent-primary-intense);
2263
+ }
2264
+ .nexus-toggle-group--outline .nexus-toggle-group__item:not([data-state='on']):hover {
2265
+ background: var(--color-surface-hover);
2266
+ color: var(--color-text-primary);
2267
+ }
2268
+ .nexus-toggle-group--sm .nexus-toggle-group__item {
2269
+ min-height: var(--size-control-sm, 2rem);
2270
+ padding-inline: var(--spacing-padding-sm, 0.75rem);
2271
+ }
2272
+ .nexus-toggle-group--md .nexus-toggle-group__item {
2273
+ min-height: var(--size-control-md, 2.5rem);
2274
+ padding-inline: var(--spacing-padding-md, 1rem);
2275
+ }
2276
+ .nexus-toggle-group--lg .nexus-toggle-group__item {
2277
+ min-height: var(--size-control-lg, 3rem);
2278
+ padding-inline: var(--spacing-padding-lg, 1.5rem);
2279
+ }
2280
+ .nexus-toggle-group__icon {
2281
+ display: inline-flex;
2282
+ flex-shrink: 0;
2283
+ color: var(--color-icon-secondary);
2284
+ }
2285
+ .nexus-toggle-group__item[data-state='on'] .nexus-toggle-group__icon {
2286
+ color: var(--color-icon-primary);
2287
+ }
2288
+
2289
+ /* ═══════════════════════════════════════════
2290
+ Slider
2291
+ ═══════════════════════════════════════════ */
2292
+
2293
+ .nexus-slider-wrapper {
2294
+ display: flex;
2295
+ width: 100%;
2296
+ flex-direction: column;
2297
+ gap: var(--spacing-gap-sm, 0.5rem);
2298
+ }
2299
+ .nexus-slider__header {
2300
+ display: flex;
2301
+ align-items: center;
2302
+ justify-content: space-between;
2303
+ gap: var(--spacing-gap-md, 1rem);
2304
+ }
2305
+ .nexus-slider__label {
2306
+ font-size: var(--text-label-md, 0.875rem);
2307
+ font-weight: var(--font-weight-label-md, 500);
2308
+ color: var(--color-text-primary);
2309
+ }
2310
+ .nexus-slider__value {
2311
+ font-size: var(--text-text-sm, 0.875rem);
2312
+ font-variant-numeric: tabular-nums;
2313
+ color: var(--color-text-secondary);
2314
+ }
2315
+ .nexus-slider {
2316
+ position: relative;
2317
+ display: flex;
2318
+ width: 100%;
2319
+ touch-action: none;
2320
+ user-select: none;
2321
+ align-items: center;
2322
+ }
2323
+ .nexus-slider[data-disabled] {
2324
+ opacity: var(--opacity-disabled-element, 0.4);
2325
+ pointer-events: none;
2326
+ }
2327
+ .nexus-slider__track {
2328
+ position: relative;
2329
+ flex-grow: 1;
2330
+ overflow: hidden;
2331
+ border-radius: var(--radius-corner-full, 9999px);
2332
+ background: var(--color-surface-strong);
2333
+ }
2334
+ .nexus-slider__range {
2335
+ position: absolute;
2336
+ height: 100%;
2337
+ border-radius: var(--radius-corner-full, 9999px);
2338
+ background: var(--color-accent-primary);
2339
+ }
2340
+ .nexus-slider__thumb {
2341
+ display: block;
2342
+ flex-shrink: 0;
2343
+ border-radius: var(--radius-corner-full, 9999px);
2344
+ border: 2px solid var(--color-accent-primary);
2345
+ background: var(--color-surface-default);
2346
+ box-shadow: var(--shadow-sm);
2347
+ outline: none;
2348
+ transition:
2349
+ box-shadow 150ms ease,
2350
+ transform 150ms ease;
2351
+ }
2352
+ .nexus-slider__thumb:hover {
2353
+ box-shadow: var(--shadow-md);
2354
+ }
2355
+ .nexus-slider__thumb:focus-visible {
2356
+ box-shadow:
2357
+ 0 0 0 2px var(--color-surface-default),
2358
+ 0 0 0 4px var(--color-accent-primary-focus);
2359
+ }
2360
+ .nexus-slider--sm .nexus-slider__track {
2361
+ height: 0.25rem;
2362
+ }
2363
+ .nexus-slider--sm .nexus-slider__thumb {
2364
+ width: 0.875rem;
2365
+ height: 0.875rem;
2366
+ }
2367
+ .nexus-slider--md .nexus-slider__track {
2368
+ height: 0.375rem;
2369
+ }
2370
+ .nexus-slider--md .nexus-slider__thumb {
2371
+ width: 1.125rem;
2372
+ height: 1.125rem;
2373
+ }
2374
+ .nexus-slider--lg .nexus-slider__track {
2375
+ height: 0.5rem;
2376
+ }
2377
+ .nexus-slider--lg .nexus-slider__thumb {
2378
+ width: 1.25rem;
2379
+ height: 1.25rem;
2380
+ }
2381
+
2382
+ /* ═══════════════════════════════════════════
2383
+ Tooltip
2384
+ ═══════════════════════════════════════════ */
2385
+
2386
+ .nexus-tooltip-content {
2387
+ z-index: 50;
2388
+ display: flex;
2389
+ overflow: hidden;
2390
+ border-radius: var(--radius-corner-md, 0.375rem);
2391
+ padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
2392
+ font-size: var(--text-text-sm, 0.875rem);
2393
+ }
2394
+ .nexus-tooltip--light {
2395
+ border: 1px solid var(--color-border-default);
2396
+ background: var(--color-static-white);
2397
+ color: var(--color-static-black);
2398
+ box-shadow: var(--shadow-comp-md);
2399
+ }
2400
+ .nexus-tooltip--dark {
2401
+ border: none;
2402
+ background: var(--color-static-black);
2403
+ color: var(--color-static-white);
2404
+ }
2405
+ .nexus-tooltip-arrow--dark {
2406
+ fill: var(--color-static-black);
2407
+ }
2408
+ .nexus-tooltip-arrow--light {
2409
+ fill: var(--color-static-white);
2410
+ }
2411
+ .nexus-tooltip-trigger {
2412
+ cursor: default;
2413
+ }
2414
+
2415
+ /* ═══════════════════════════════════════════
2416
+ Popover
2417
+ ═══════════════════════════════════════════ */
2418
+
2419
+ .nexus-popover-content {
2420
+ z-index: 50;
2421
+ border-radius: var(--radius-corner-lg, 0.5rem);
2422
+ border: 1px solid var(--color-border-default);
2423
+ padding: var(--spacing-padding-md, 1rem);
2424
+ box-shadow: var(--shadow-comp-lg);
2425
+ outline: none;
2426
+ background: var(--color-surface-default);
2427
+ color: var(--color-text-primary);
2428
+ transform-origin: var(--radix-popover-content-transform-origin);
2429
+ will-change: transform, opacity;
2430
+ }
2431
+ .nexus-popover-content[data-state='open'] {
2432
+ animation: nexus-popover-in 150ms ease-out;
2433
+ }
2434
+ .nexus-popover-content[data-state='closed'] {
2435
+ animation: nexus-popover-out 100ms ease-in forwards;
2436
+ }
2437
+ @keyframes nexus-popover-in {
2438
+ from {
2439
+ opacity: 0;
2440
+ transform: scale(0.95);
2441
+ }
2442
+ to {
2443
+ opacity: 1;
2444
+ transform: scale(1);
2445
+ }
2446
+ }
2447
+ @keyframes nexus-popover-out {
2448
+ from {
2449
+ opacity: 1;
2450
+ transform: scale(1);
2451
+ }
2452
+ to {
2453
+ opacity: 0;
2454
+ transform: scale(0.95);
2455
+ }
2456
+ }
2457
+ .nexus-popover-arrow {
2458
+ fill: var(--color-surface-default);
1629
2459
  }
1630
2460
 
1631
2461
  /* ═══════════════════════════════════════════
@@ -1728,7 +2558,15 @@
1728
2558
  flex: 1;
1729
2559
  align-items: center;
1730
2560
  justify-content: space-between;
2561
+ padding: 0;
1731
2562
  padding-block: var(--spacing-padding-md, 1rem);
2563
+ margin: 0;
2564
+ border: none;
2565
+ background: transparent;
2566
+ cursor: pointer;
2567
+ font: inherit;
2568
+ color: inherit;
2569
+ text-align: left;
1732
2570
  transition: all 150ms;
1733
2571
  }
1734
2572
  .nexus-accordion-trigger[data-state='open'] > .nexus-accordion-chevron {
@@ -1833,6 +2671,10 @@
1833
2671
  border: 1px solid var(--color-border-default);
1834
2672
  box-shadow: var(--shadow-comp-sm);
1835
2673
  color: var(--color-text-primary);
2674
+ cursor: pointer;
2675
+ font: inherit;
2676
+ padding: 0;
2677
+ margin: 0;
1836
2678
  transition-property: background-color;
1837
2679
  transition-duration: 150ms;
1838
2680
  }
@@ -1863,6 +2705,9 @@
1863
2705
  width: 0.5rem;
1864
2706
  height: 0.5rem;
1865
2707
  border-radius: 9999px;
2708
+ border: none;
2709
+ padding: 0;
2710
+ cursor: pointer;
1866
2711
  transition-property: background-color;
1867
2712
  transition-duration: 150ms;
1868
2713
  }
@@ -1909,11 +2754,7 @@
1909
2754
  color: var(--color-status-positive);
1910
2755
  }
1911
2756
  .nexus-toast--error {
1912
- border-color: color-mix(
1913
- in srgb,
1914
- var(--color-status-danger) 30%,
1915
- transparent
1916
- );
2757
+ border-color: color-mix(in srgb, var(--color-status-danger) 30%, transparent);
1917
2758
  background: color-mix(in srgb, var(--color-status-danger) 10%, transparent);
1918
2759
  color: var(--color-status-danger);
1919
2760
  }
@@ -2210,6 +3051,9 @@
2210
3051
  cursor: pointer;
2211
3052
  align-items: center;
2212
3053
  justify-content: flex-end;
3054
+ border: none;
3055
+ background: transparent;
3056
+ padding: 0;
2213
3057
  }
2214
3058
  .nexus-modal-close-btn--bottom-sheet {
2215
3059
  position: relative;
@@ -2569,4 +3413,590 @@
2569
3413
  }
2570
3414
  }
2571
3415
 
3416
+ /* ═══════════════════════════════════════════
3417
+ EmptyState
3418
+ ═══════════════════════════════════════════ */
3419
+
3420
+ .nexus-empty-state {
3421
+ display: flex;
3422
+ flex-direction: column;
3423
+ align-items: center;
3424
+ justify-content: center;
3425
+ text-align: center;
3426
+ gap: var(--spacing-gap-sm, 0.5rem);
3427
+ padding: var(--spacing-padding-lg, 1.5rem);
3428
+ color: var(--color-text-primary);
3429
+ }
3430
+ .nexus-empty-state__icon {
3431
+ display: flex;
3432
+ align-items: center;
3433
+ justify-content: center;
3434
+ margin-bottom: var(--spacing-gap-xs, 0.25rem);
3435
+ color: var(--color-icon-muted);
3436
+ }
3437
+ .nexus-empty-state__default-icon {
3438
+ width: var(--size-icon-xl, 2rem);
3439
+ height: var(--size-icon-xl, 2rem);
3440
+ }
3441
+ .nexus-empty-state--sm .nexus-empty-state__default-icon {
3442
+ width: var(--size-icon-lg, 1.5rem);
3443
+ height: var(--size-icon-lg, 1.5rem);
3444
+ }
3445
+ .nexus-empty-state--lg .nexus-empty-state__default-icon {
3446
+ width: var(--size-control-md, 2.5rem);
3447
+ height: var(--size-control-md, 2.5rem);
3448
+ }
3449
+ .nexus-empty-state__title {
3450
+ margin: 0;
3451
+ font-size: var(--text-heading-h6, 1rem);
3452
+ font-weight: var(--font-weight-heading-h6, 600);
3453
+ letter-spacing: var(--letter-spacing-heading-h6, 0);
3454
+ color: var(--color-text-primary);
3455
+ }
3456
+ .nexus-empty-state__description {
3457
+ margin: 0;
3458
+ max-width: 24rem;
3459
+ font-size: var(--text-text-sm, 0.875rem);
3460
+ font-weight: var(--font-weight-text-sm, 400);
3461
+ letter-spacing: var(--letter-spacing-text-sm, -0.01em);
3462
+ color: var(--color-text-secondary);
3463
+ }
3464
+ .nexus-empty-state__action {
3465
+ margin-top: var(--spacing-gap-sm, 0.5rem);
3466
+ }
3467
+ .nexus-empty-state--sm {
3468
+ padding: var(--spacing-padding-md, 1rem);
3469
+ gap: var(--spacing-gap-xs, 0.25rem);
3470
+ }
3471
+ .nexus-empty-state--sm .nexus-empty-state__title {
3472
+ font-size: var(--text-text-semibold-sm, 0.875rem);
3473
+ }
3474
+ .nexus-empty-state--sm .nexus-empty-state__description {
3475
+ font-size: var(--text-text-xs, 0.75rem);
3476
+ }
3477
+ .nexus-empty-state--lg {
3478
+ padding: var(--spacing-padding-xl, 2rem);
3479
+ gap: var(--spacing-gap-md, 1rem);
3480
+ }
3481
+ .nexus-empty-state--lg .nexus-empty-state__title {
3482
+ font-size: var(--text-heading-h5, 1.125rem);
3483
+ }
3484
+
3485
+ /* ═══════════════════════════════════════════
3486
+ Breadcrumb
3487
+ ═══════════════════════════════════════════ */
3488
+
3489
+ .nexus-breadcrumb {
3490
+ font-size: var(--text-text-sm, 0.875rem);
3491
+ line-height: 1.25;
3492
+ }
3493
+ .nexus-breadcrumb__list {
3494
+ display: flex;
3495
+ flex-wrap: wrap;
3496
+ align-items: center;
3497
+ list-style: none;
3498
+ margin: 0;
3499
+ padding: 0;
3500
+ gap: 0;
3501
+ }
3502
+ .nexus-breadcrumb__item {
3503
+ display: inline-flex;
3504
+ align-items: center;
3505
+ }
3506
+ .nexus-breadcrumb__separator {
3507
+ display: inline-flex;
3508
+ align-items: center;
3509
+ margin: 0 var(--spacing-gap-xs, 0.25rem);
3510
+ color: var(--color-icon-tertiary);
3511
+ user-select: none;
3512
+ }
3513
+ .nexus-breadcrumb__separator-icon {
3514
+ width: var(--size-icon-xs, 0.75rem);
3515
+ height: var(--size-icon-xs, 0.75rem);
3516
+ }
3517
+ .nexus-breadcrumb__link {
3518
+ color: var(--color-text-secondary);
3519
+ text-decoration: none;
3520
+ transition: color 150ms ease;
3521
+ }
3522
+ .nexus-breadcrumb__link:hover {
3523
+ color: var(--color-text-primary);
3524
+ }
3525
+ .nexus-breadcrumb__link--btn {
3526
+ border: none;
3527
+ background: none;
3528
+ cursor: pointer;
3529
+ font: inherit;
3530
+ padding: 0;
3531
+ }
3532
+ .nexus-breadcrumb__current {
3533
+ color: var(--color-text-primary);
3534
+ font-weight: var(--font-weight-text-medium-sm, 500);
3535
+ }
3536
+ .nexus-breadcrumb__ellipsis {
3537
+ color: var(--color-text-tertiary);
3538
+ user-select: none;
3539
+ }
3540
+
3541
+ /* ═══════════════════════════════════════════
3542
+ Stepper
3543
+ ═══════════════════════════════════════════ */
3544
+
3545
+ .nexus-stepper {
3546
+ width: 100%;
3547
+ }
3548
+
3549
+ /* ── Horizontal ── */
3550
+ .nexus-stepper--horizontal {
3551
+ display: flex;
3552
+ flex-direction: row;
3553
+ align-items: flex-start;
3554
+ }
3555
+ .nexus-stepper--horizontal .nexus-stepper__step {
3556
+ flex: 1;
3557
+ min-width: 0;
3558
+ display: flex;
3559
+ flex-direction: column;
3560
+ align-items: center;
3561
+ text-align: center;
3562
+ }
3563
+ .nexus-stepper--horizontal .nexus-stepper__indicator-wrap {
3564
+ display: flex;
3565
+ flex-direction: row;
3566
+ align-items: center;
3567
+ width: 100%;
3568
+ justify-content: center;
3569
+ }
3570
+ .nexus-stepper--horizontal .nexus-stepper__connector {
3571
+ flex: 1;
3572
+ height: 2px;
3573
+ background: var(--color-border-default);
3574
+ transition: background var(--duration-transition-normal, 200ms) var(--ease-transition-normal);
3575
+ }
3576
+ .nexus-stepper--horizontal .nexus-stepper__connector--hidden {
3577
+ visibility: hidden;
3578
+ }
3579
+ .nexus-stepper--horizontal .nexus-stepper__connector--completed {
3580
+ background: var(--color-accent-primary);
3581
+ }
3582
+ .nexus-stepper--horizontal .nexus-stepper__content {
3583
+ margin-top: var(--spacing-gap-sm, 0.5rem);
3584
+ padding: 0 var(--spacing-padding-2xs, 0.25rem);
3585
+ }
3586
+
3587
+ /* ── Vertical ── */
3588
+ .nexus-stepper--vertical {
3589
+ display: flex;
3590
+ flex-direction: column;
3591
+ gap: 0;
3592
+ }
3593
+ .nexus-stepper--vertical .nexus-stepper__step {
3594
+ display: flex;
3595
+ flex-direction: row;
3596
+ align-items: stretch;
3597
+ gap: var(--spacing-gap-sm, 0.5rem);
3598
+ }
3599
+ .nexus-stepper--vertical .nexus-stepper__indicator-wrap {
3600
+ display: flex;
3601
+ flex-direction: column;
3602
+ align-items: center;
3603
+ flex-shrink: 0;
3604
+ }
3605
+ .nexus-stepper--vertical .nexus-stepper__connector {
3606
+ width: 2px;
3607
+ flex: 1;
3608
+ min-height: var(--spacing-padding-sm, 0.75rem);
3609
+ background: var(--color-border-default);
3610
+ transition: background var(--duration-transition-normal, 200ms) var(--ease-transition-normal);
3611
+ }
3612
+ .nexus-stepper--vertical .nexus-stepper__connector--completed {
3613
+ background: var(--color-accent-primary);
3614
+ }
3615
+ .nexus-stepper--vertical .nexus-stepper__content {
3616
+ padding: var(--spacing-padding-xs, 0.5rem) 0;
3617
+ }
3618
+
3619
+ /* ── Indicator (공통) ── */
3620
+ .nexus-stepper__indicator {
3621
+ display: inline-flex;
3622
+ align-items: center;
3623
+ justify-content: center;
3624
+ flex-shrink: 0;
3625
+ width: var(--size-control-sm, 2rem);
3626
+ height: var(--size-control-sm, 2rem);
3627
+ border-radius: var(--radius-corner-full, 9999px);
3628
+ border: 2px solid var(--color-border-medium);
3629
+ background: var(--color-surface-default);
3630
+ font-size: var(--text-text-sm, 0.875rem);
3631
+ font-weight: var(--font-weight-text-medium-sm, 500);
3632
+ color: var(--color-text-secondary);
3633
+ transition: all var(--duration-transition-normal, 200ms) var(--ease-transition-normal);
3634
+ }
3635
+ .nexus-stepper--sm .nexus-stepper__indicator {
3636
+ width: 1.75rem;
3637
+ height: 1.75rem;
3638
+ font-size: var(--text-text-xs, 0.75rem);
3639
+ }
3640
+ .nexus-stepper__check {
3641
+ width: var(--size-icon-sm, 1rem);
3642
+ height: var(--size-icon-sm, 1rem);
3643
+ }
3644
+ .nexus-stepper--sm .nexus-stepper__check {
3645
+ width: var(--size-icon-xs, 0.75rem);
3646
+ height: var(--size-icon-xs, 0.75rem);
3647
+ }
3648
+
3649
+ /* ── State colors ── */
3650
+ .nexus-stepper__step--completed .nexus-stepper__indicator {
3651
+ border-color: var(--color-accent-primary);
3652
+ background: var(--color-accent-primary);
3653
+ color: var(--color-accent-on-primary);
3654
+ }
3655
+ .nexus-stepper__step--active .nexus-stepper__indicator {
3656
+ border-color: var(--color-accent-primary);
3657
+ color: var(--color-accent-primary);
3658
+ background: var(--color-surface-default);
3659
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-accent-primary) 20%, transparent);
3660
+ }
3661
+ .nexus-stepper__step--error .nexus-stepper__indicator {
3662
+ border-color: var(--color-status-danger);
3663
+ color: var(--color-status-danger);
3664
+ background: var(--color-surface-default);
3665
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-status-danger) 20%, transparent);
3666
+ }
3667
+ .nexus-stepper__step--pending .nexus-stepper__indicator {
3668
+ border-color: var(--color-border-default);
3669
+ color: var(--color-text-tertiary);
3670
+ }
3671
+
3672
+ /* ── Labels ── */
3673
+ .nexus-stepper__label {
3674
+ display: block;
3675
+ font-size: var(--text-text-sm, 0.875rem);
3676
+ font-weight: var(--font-weight-text-medium-sm, 500);
3677
+ color: var(--color-text-primary);
3678
+ }
3679
+ .nexus-stepper--sm .nexus-stepper__label {
3680
+ font-size: var(--text-text-xs, 0.75rem);
3681
+ }
3682
+ .nexus-stepper__description {
3683
+ display: block;
3684
+ margin-top: var(--spacing-gap-xs, 0.25rem);
3685
+ font-size: var(--text-text-xs, 0.75rem);
3686
+ color: var(--color-text-secondary);
3687
+ }
3688
+ .nexus-stepper__step--pending .nexus-stepper__label {
3689
+ color: var(--color-text-secondary);
3690
+ }
3691
+ .nexus-stepper__step--pending .nexus-stepper__description {
3692
+ color: var(--color-text-muted);
3693
+ }
3694
+
3695
+ /* ═══════════════════════════════════════════
3696
+ TagInput
3697
+ ═══════════════════════════════════════════ */
3698
+
3699
+ .nexus-tag-input-wrapper {
3700
+ display: flex;
3701
+ flex-direction: column;
3702
+ gap: var(--spacing-gap-xs, 0.25rem);
3703
+ }
3704
+ .nexus-tag-input__label {
3705
+ font-size: var(--text-label-md, 0.875rem);
3706
+ font-weight: var(--font-weight-label-md, 500);
3707
+ color: var(--color-text-primary);
3708
+ }
3709
+ .nexus-tag-input {
3710
+ display: flex;
3711
+ flex-wrap: wrap;
3712
+ align-items: center;
3713
+ gap: var(--spacing-gap-xs, 0.25rem);
3714
+ padding: var(--spacing-padding-xs, 0.5rem);
3715
+ border: var(--border-width-stroke-default, 1px) solid var(--color-border-default);
3716
+ border-radius: var(--radius-corner-md, 0.5rem);
3717
+ background: var(--color-surface-default);
3718
+ cursor: text;
3719
+ transition: border-color 150ms ease;
3720
+ }
3721
+ .nexus-tag-input:focus-within {
3722
+ border-color: var(--color-border-default-focus, var(--color-accent-primary));
3723
+ }
3724
+ .nexus-tag-input--disabled {
3725
+ opacity: var(--opacity-disabled-element, 0.4);
3726
+ cursor: not-allowed;
3727
+ pointer-events: none;
3728
+ }
3729
+ .nexus-tag-input--sm {
3730
+ padding: var(--spacing-padding-2xs, 0.25rem);
3731
+ gap: 0.125rem;
3732
+ font-size: var(--text-text-xs, 0.75rem);
3733
+ }
3734
+ .nexus-tag-input--md {
3735
+ font-size: var(--text-text-sm, 0.875rem);
3736
+ }
3737
+ .nexus-tag-input--lg {
3738
+ padding: var(--spacing-padding-sm, 0.75rem);
3739
+ font-size: var(--text-text-base, 1rem);
3740
+ }
3741
+ .nexus-tag-input__tag {
3742
+ display: inline-flex;
3743
+ align-items: center;
3744
+ gap: 0.25rem;
3745
+ padding: 0.125rem 0.5rem;
3746
+ border-radius: var(--radius-corner-sm, 0.25rem);
3747
+ background: var(--color-surface-subtle);
3748
+ color: var(--color-text-primary);
3749
+ font-size: inherit;
3750
+ line-height: 1.5;
3751
+ white-space: nowrap;
3752
+ }
3753
+ .nexus-tag-input__tag-close {
3754
+ display: inline-flex;
3755
+ align-items: center;
3756
+ justify-content: center;
3757
+ border: none;
3758
+ background: transparent;
3759
+ cursor: pointer;
3760
+ padding: 0;
3761
+ margin: 0;
3762
+ color: var(--color-icon-tertiary);
3763
+ transition: color 150ms;
3764
+ }
3765
+ .nexus-tag-input__tag-close:hover {
3766
+ color: var(--color-icon-primary);
3767
+ }
3768
+ .nexus-tag-input__tag-close-icon {
3769
+ width: 0.75rem;
3770
+ height: 0.75rem;
3771
+ }
3772
+ .nexus-tag-input__input {
3773
+ flex: 1;
3774
+ min-width: 4rem;
3775
+ border: none;
3776
+ outline: none;
3777
+ background: transparent;
3778
+ font: inherit;
3779
+ color: var(--color-text-primary);
3780
+ padding: 0.125rem 0;
3781
+ }
3782
+ .nexus-tag-input__input::placeholder {
3783
+ color: var(--color-text-muted);
3784
+ }
3785
+ .nexus-tag-input__description {
3786
+ font-size: var(--text-text-xs, 0.75rem);
3787
+ color: var(--color-text-secondary);
3788
+ }
3789
+
3790
+ /* ═══════════════════════════════════════════
3791
+ NxImage
3792
+ ═══════════════════════════════════════════ */
3793
+
3794
+ .nexus-image {
3795
+ position: relative;
3796
+ overflow: hidden;
3797
+ display: block;
3798
+ background: var(--color-surface-subtle);
3799
+ }
3800
+ .nexus-image__fallback {
3801
+ display: flex;
3802
+ align-items: center;
3803
+ justify-content: center;
3804
+ width: 100%;
3805
+ height: 100%;
3806
+ min-height: 4rem;
3807
+ color: var(--color-icon-muted);
3808
+ }
3809
+ .nexus-image__fallback-icon {
3810
+ width: var(--size-icon-xl, 2rem);
3811
+ height: var(--size-icon-xl, 2rem);
3812
+ }
3813
+ .nexus-image__skeleton {
3814
+ position: absolute;
3815
+ inset: 0;
3816
+ background: linear-gradient(90deg, var(--color-surface-subtle) 25%, var(--color-surface-default) 50%, var(--color-surface-subtle) 75%);
3817
+ background-size: 200% 100%;
3818
+ animation: nexus-shimmer 1.5s infinite;
3819
+ }
3820
+ .nexus-image__img {
3821
+ display: block;
3822
+ width: 100%;
3823
+ height: 100%;
3824
+ opacity: 0;
3825
+ transition: opacity 300ms ease;
3826
+ }
3827
+ .nexus-image__img--loaded {
3828
+ opacity: 1;
3829
+ }
3830
+ .nexus-image__img--cover {
3831
+ object-fit: cover;
3832
+ }
3833
+ .nexus-image__img--contain {
3834
+ object-fit: contain;
3835
+ }
3836
+ .nexus-image__img--fill {
3837
+ object-fit: fill;
3838
+ }
3839
+ .nexus-image__img--none {
3840
+ object-fit: none;
3841
+ }
3842
+
3843
+ @keyframes nexus-shimmer {
3844
+ 0% { background-position: -200% 0; }
3845
+ 100% { background-position: 200% 0; }
3846
+ }
3847
+
3848
+ /* ═══════════════════════════════════════════
3849
+ DatePicker / Calendar
3850
+ ═══════════════════════════════════════════ */
3851
+
3852
+ .nexus-datepicker {
3853
+ position: relative;
3854
+ display: inline-block;
3855
+ }
3856
+ .nexus-datepicker__trigger {
3857
+ display: inline-flex;
3858
+ align-items: center;
3859
+ gap: var(--spacing-gap-sm, 0.5rem);
3860
+ padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
3861
+ border: var(--border-width-stroke-default, 1px) solid var(--color-border-default);
3862
+ border-radius: var(--radius-corner-md, 0.5rem);
3863
+ background: var(--color-surface-default);
3864
+ font: inherit;
3865
+ font-size: var(--text-text-sm, 0.875rem);
3866
+ color: var(--color-text-primary);
3867
+ cursor: pointer;
3868
+ transition: border-color 150ms;
3869
+ min-width: 10rem;
3870
+ }
3871
+ .nexus-datepicker__trigger:hover {
3872
+ border-color: var(--color-border-default-hover);
3873
+ }
3874
+ .nexus-datepicker__trigger:disabled {
3875
+ opacity: var(--opacity-disabled-element, 0.4);
3876
+ cursor: not-allowed;
3877
+ }
3878
+ .nexus-datepicker__trigger--placeholder span {
3879
+ color: var(--color-text-muted);
3880
+ }
3881
+ .nexus-datepicker__icon {
3882
+ width: var(--size-icon-sm, 1rem);
3883
+ height: var(--size-icon-sm, 1rem);
3884
+ flex-shrink: 0;
3885
+ color: var(--color-icon-secondary);
3886
+ }
3887
+ .nexus-datepicker__popover {
3888
+ position: absolute;
3889
+ top: calc(100% + 4px);
3890
+ left: 0;
3891
+ z-index: var(--z-index-layer-popover, 30);
3892
+ background: var(--color-surface-default);
3893
+ border: var(--border-width-stroke-default, 1px) solid var(--color-border-default);
3894
+ border-radius: var(--radius-corner-lg, 0.75rem);
3895
+ box-shadow: var(--shadow-lg, 0 2px 8px -1px rgb(0 0 0 / 0.12));
3896
+ padding: var(--spacing-padding-sm, 0.75rem);
3897
+ animation: nexus-fade-in 150ms ease;
3898
+ }
3899
+
3900
+ .nexus-calendar {
3901
+ font-size: var(--text-text-sm, 0.875rem);
3902
+ }
3903
+ .nexus-calendar__months {
3904
+ display: flex;
3905
+ flex-direction: column;
3906
+ gap: var(--spacing-gap-sm, 0.5rem);
3907
+ }
3908
+ .nexus-calendar__caption {
3909
+ display: flex;
3910
+ justify-content: center;
3911
+ align-items: center;
3912
+ padding: var(--spacing-padding-2xs, 0.25rem) 0;
3913
+ font-weight: var(--font-weight-text-semibold-sm, 600);
3914
+ color: var(--color-text-primary);
3915
+ }
3916
+ .nexus-calendar__nav {
3917
+ display: flex;
3918
+ gap: var(--spacing-gap-xs, 0.25rem);
3919
+ }
3920
+ .nexus-calendar__nav-btn {
3921
+ display: inline-flex;
3922
+ align-items: center;
3923
+ justify-content: center;
3924
+ width: var(--size-control-sm, 2rem);
3925
+ height: var(--size-control-sm, 2rem);
3926
+ border: none;
3927
+ background: transparent;
3928
+ border-radius: var(--radius-corner-sm, 0.25rem);
3929
+ cursor: pointer;
3930
+ color: var(--color-icon-secondary);
3931
+ transition: background 150ms;
3932
+ }
3933
+ .nexus-calendar__nav-btn:hover {
3934
+ background: var(--color-surface-default-hover);
3935
+ }
3936
+ .nexus-calendar__grid {
3937
+ width: 100%;
3938
+ border-collapse: collapse;
3939
+ }
3940
+ .nexus-calendar__head-row {
3941
+ display: flex;
3942
+ }
3943
+ .nexus-calendar__head-cell {
3944
+ width: var(--size-control-sm, 2rem);
3945
+ text-align: center;
3946
+ font-size: var(--text-text-xs, 0.75rem);
3947
+ font-weight: var(--font-weight-text-medium-xs, 500);
3948
+ color: var(--color-text-tertiary);
3949
+ padding: var(--spacing-padding-2xs, 0.25rem) 0;
3950
+ }
3951
+ .nexus-calendar__row {
3952
+ display: flex;
3953
+ }
3954
+ .nexus-calendar__cell {
3955
+ text-align: center;
3956
+ }
3957
+ .nexus-calendar__day {
3958
+ display: inline-flex;
3959
+ align-items: center;
3960
+ justify-content: center;
3961
+ width: var(--size-control-sm, 2rem);
3962
+ height: var(--size-control-sm, 2rem);
3963
+ border: none;
3964
+ background: transparent;
3965
+ border-radius: var(--radius-corner-sm, 0.25rem);
3966
+ cursor: pointer;
3967
+ font: inherit;
3968
+ font-size: var(--text-text-sm, 0.875rem);
3969
+ color: var(--color-text-primary);
3970
+ transition: background 150ms, color 150ms;
3971
+ }
3972
+ .nexus-calendar__day:hover {
3973
+ background: var(--color-surface-default-hover);
3974
+ }
3975
+ .nexus-calendar__day--selected {
3976
+ background: var(--color-accent-primary);
3977
+ color: var(--color-accent-on-primary);
3978
+ }
3979
+ .nexus-calendar__day--selected:hover {
3980
+ background: var(--color-accent-primary-hover);
3981
+ }
3982
+ .nexus-calendar__day--today {
3983
+ font-weight: var(--font-weight-text-semibold-sm, 600);
3984
+ border: var(--border-width-stroke-default, 1px) solid var(--color-accent-primary);
3985
+ }
3986
+ .nexus-calendar__day--outside {
3987
+ color: var(--color-text-muted);
3988
+ opacity: 0.5;
3989
+ }
3990
+ .nexus-calendar__day--disabled {
3991
+ color: var(--color-text-muted);
3992
+ opacity: var(--opacity-disabled-element, 0.4);
3993
+ cursor: not-allowed;
3994
+ pointer-events: none;
3995
+ }
3996
+
3997
+ @keyframes nexus-fade-in {
3998
+ from { opacity: 0; transform: translateY(-4px); }
3999
+ to { opacity: 1; transform: translateY(0); }
4000
+ }
4001
+
2572
4002
  }