@nexus-cross/design-system 1.0.13 → 1.1.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 (285) hide show
  1. package/claude-rules/nexus/CLAUDE.md +85 -0
  2. package/claude-rules/nexus/commands/nexus-audit.md +79 -0
  3. package/claude-rules/nexus/commands/nexus-component-map.md +85 -0
  4. package/claude-rules/nexus/commands/nexus-token-check.md +68 -0
  5. package/claude-rules/nexus/skills/nexus-design-system/SKILL.md +92 -0
  6. package/cursor-rules/nexus-ui-api.mdc +824 -41
  7. package/cursor-rules/nexus-ui-decisions.mdc +259 -0
  8. package/dist/accordion.js +0 -1
  9. package/dist/accordion.mjs +0 -1
  10. package/dist/alert.js +0 -1
  11. package/dist/alert.mjs +0 -1
  12. package/dist/avatar.js +0 -1
  13. package/dist/avatar.mjs +0 -1
  14. package/dist/badge.js +0 -1
  15. package/dist/badge.mjs +0 -1
  16. package/dist/breadcrumb.js +0 -1
  17. package/dist/breadcrumb.mjs +0 -1
  18. package/dist/button.js +0 -1
  19. package/dist/button.mjs +0 -1
  20. package/dist/carousel.js +0 -1
  21. package/dist/carousel.mjs +0 -1
  22. package/dist/checkbox.js +0 -1
  23. package/dist/checkbox.mjs +0 -1
  24. package/dist/chip.js +0 -1
  25. package/dist/chip.mjs +0 -1
  26. package/dist/chunks/chunk-2Z52NPWB.js +78 -0
  27. package/dist/chunks/chunk-46P52MFM.mjs +56 -0
  28. package/dist/chunks/{chunk-X3CTJ7TD.js → chunk-4KBFVIKX.js} +41 -11
  29. package/dist/chunks/chunk-56ZOOQFE.mjs +514 -0
  30. package/dist/chunks/chunk-5ASTWFJW.js +538 -0
  31. package/dist/chunks/{chunk-33UFQJIO.mjs → chunk-BJMXZJWO.mjs} +16 -5
  32. package/dist/chunks/chunk-EILXBLEV.mjs +5 -0
  33. package/dist/chunks/chunk-G3RLK2HS.js +7 -0
  34. package/dist/chunks/{chunk-YZV6FWE7.js → chunk-JLDQNDFT.js} +16 -5
  35. package/dist/chunks/{chunk-K574BYHQ.js → chunk-K3CK7NTP.js} +22 -4
  36. package/dist/chunks/{chunk-Z4YM7LU3.mjs → chunk-PIGHBDK5.mjs} +22 -4
  37. package/dist/chunks/{chunk-PEIEVKD5.js → chunk-RCIBLLSF.js} +11 -12
  38. package/dist/chunks/{chunk-MMCA33FW.mjs → chunk-RSFLNWOM.mjs} +41 -11
  39. package/dist/chunks/{chunk-K2TBLM3F.mjs → chunk-THBE27U3.mjs} +11 -12
  40. package/dist/client-only.js +0 -1
  41. package/dist/client-only.mjs +0 -1
  42. package/dist/combobox.js +16 -0
  43. package/dist/combobox.mjs +3 -0
  44. package/dist/components/Combobox.d.ts +48 -0
  45. package/dist/components/Combobox.d.ts.map +1 -0
  46. package/dist/components/DataGrid.d.ts +44 -0
  47. package/dist/components/DataGrid.d.ts.map +1 -0
  48. package/dist/components/DataList.d.ts +3 -1
  49. package/dist/components/DataList.d.ts.map +1 -1
  50. package/dist/components/RadioGroup.d.ts +4 -0
  51. package/dist/components/RadioGroup.d.ts.map +1 -1
  52. package/dist/components/Stepper.d.ts.map +1 -1
  53. package/dist/components/ToggleGroup.d.ts +2 -1
  54. package/dist/components/ToggleGroup.d.ts.map +1 -1
  55. package/dist/countdown.js +0 -1
  56. package/dist/countdown.mjs +0 -1
  57. package/dist/counter.js +0 -1
  58. package/dist/counter.mjs +0 -1
  59. package/dist/data-grid.js +14 -0
  60. package/dist/data-grid.mjs +5 -0
  61. package/dist/data-list.js +2 -3
  62. package/dist/data-list.mjs +1 -2
  63. package/dist/date-picker.js +0 -1
  64. package/dist/date-picker.mjs +0 -1
  65. package/dist/divider.js +0 -1
  66. package/dist/divider.mjs +0 -1
  67. package/dist/drawer.js +0 -1
  68. package/dist/drawer.mjs +0 -1
  69. package/dist/dropdown-menu.js +0 -1
  70. package/dist/dropdown-menu.mjs +0 -1
  71. package/dist/ellipsis.js +0 -1
  72. package/dist/ellipsis.mjs +0 -1
  73. package/dist/empty-state.js +0 -1
  74. package/dist/empty-state.mjs +0 -1
  75. package/dist/error-boundary.js +0 -1
  76. package/dist/error-boundary.mjs +0 -1
  77. package/dist/hooks/useCheckDevice.js +0 -1
  78. package/dist/hooks/useCheckDevice.mjs +0 -1
  79. package/dist/hooks/useClickOutside.js +0 -1
  80. package/dist/hooks/useClickOutside.mjs +0 -1
  81. package/dist/hooks/useDraggableBottomSheet.js +0 -1
  82. package/dist/hooks/useDraggableBottomSheet.mjs +0 -1
  83. package/dist/hooks/useDraggableWindow.js +0 -1
  84. package/dist/hooks/useDraggableWindow.mjs +0 -1
  85. package/dist/hooks/useInView.js +0 -1
  86. package/dist/hooks/useInView.mjs +0 -1
  87. package/dist/hooks/useModal.js +0 -1
  88. package/dist/hooks/useModal.mjs +0 -1
  89. package/dist/image-upload.js +0 -1
  90. package/dist/image-upload.mjs +0 -1
  91. package/dist/index.d.ts +4 -2
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +92 -88
  94. package/dist/index.mjs +12 -12
  95. package/dist/infinite-scroll.js +0 -1
  96. package/dist/infinite-scroll.mjs +0 -1
  97. package/dist/marquee.js +0 -1
  98. package/dist/marquee.mjs +0 -1
  99. package/dist/modal/index.js +11 -12
  100. package/dist/modal/index.mjs +2 -3
  101. package/dist/number-input.js +0 -1
  102. package/dist/number-input.mjs +0 -1
  103. package/dist/nx-image.js +0 -1
  104. package/dist/nx-image.mjs +0 -1
  105. package/dist/pagination.js +0 -1
  106. package/dist/pagination.mjs +0 -1
  107. package/dist/popover.js +0 -1
  108. package/dist/popover.mjs +0 -1
  109. package/dist/price-input.js +0 -1
  110. package/dist/price-input.mjs +0 -1
  111. package/dist/progress.js +0 -1
  112. package/dist/progress.mjs +0 -1
  113. package/dist/radio-group.js +5 -6
  114. package/dist/radio-group.mjs +1 -2
  115. package/dist/schemas/_all.json +308 -117
  116. package/dist/schemas/accordion.d.ts.map +1 -1
  117. package/dist/schemas/accordion.json +1 -1
  118. package/dist/schemas/alert.d.ts.map +1 -1
  119. package/dist/schemas/alert.json +1 -1
  120. package/dist/schemas/avatar.d.ts.map +1 -1
  121. package/dist/schemas/avatar.json +1 -1
  122. package/dist/schemas/badge.d.ts.map +1 -1
  123. package/dist/schemas/badge.json +1 -1
  124. package/dist/schemas/breadcrumb.d.ts.map +1 -1
  125. package/dist/schemas/breadcrumb.json +1 -1
  126. package/dist/schemas/button.d.ts.map +1 -1
  127. package/dist/schemas/button.json +1 -1
  128. package/dist/schemas/carousel.d.ts.map +1 -1
  129. package/dist/schemas/carousel.json +1 -1
  130. package/dist/schemas/checkBox.json +1 -1
  131. package/dist/schemas/checkbox.d.ts.map +1 -1
  132. package/dist/schemas/chip.d.ts.map +1 -1
  133. package/dist/schemas/chip.json +1 -1
  134. package/dist/schemas/client-only.d.ts.map +1 -1
  135. package/dist/schemas/clientOnly.json +1 -1
  136. package/dist/schemas/combobox.d.ts +85 -0
  137. package/dist/schemas/combobox.d.ts.map +1 -0
  138. package/dist/schemas/combobox.json +98 -0
  139. package/dist/schemas/comboboxOption.json +30 -0
  140. package/dist/schemas/countdown.d.ts.map +1 -1
  141. package/dist/schemas/countdown.json +1 -1
  142. package/dist/schemas/counter.d.ts.map +1 -1
  143. package/dist/schemas/counter.json +1 -1
  144. package/dist/schemas/data-grid.d.ts +74 -0
  145. package/dist/schemas/data-grid.d.ts.map +1 -0
  146. package/dist/schemas/data-list.d.ts.map +1 -1
  147. package/dist/schemas/dataGrid.json +102 -0
  148. package/dist/schemas/dataList.json +1 -1
  149. package/dist/schemas/date-picker.d.ts.map +1 -1
  150. package/dist/schemas/datePicker.json +1 -1
  151. package/dist/schemas/divider.d.ts.map +1 -1
  152. package/dist/schemas/divider.json +1 -1
  153. package/dist/schemas/drawer.d.ts.map +1 -1
  154. package/dist/schemas/drawer.json +1 -1
  155. package/dist/schemas/dropdown-menu.d.ts.map +1 -1
  156. package/dist/schemas/dropdownMenu.json +1 -1
  157. package/dist/schemas/ellipsis.d.ts.map +1 -1
  158. package/dist/schemas/ellipsis.json +1 -1
  159. package/dist/schemas/empty-state.d.ts.map +1 -1
  160. package/dist/schemas/emptyState.json +1 -1
  161. package/dist/schemas/error-boundary.d.ts.map +1 -1
  162. package/dist/schemas/errorBoundary.json +1 -1
  163. package/dist/schemas/image-upload.d.ts.map +1 -1
  164. package/dist/schemas/imageUpload.json +1 -1
  165. package/dist/schemas/index.d.ts +2 -1
  166. package/dist/schemas/index.d.ts.map +1 -1
  167. package/dist/schemas/infinite-scroll.d.ts.map +1 -1
  168. package/dist/schemas/infiniteScroll.json +1 -1
  169. package/dist/schemas/marquee.d.ts.map +1 -1
  170. package/dist/schemas/marquee.json +1 -1
  171. package/dist/schemas/modal.d.ts.map +1 -1
  172. package/dist/schemas/modalTemplate.json +1 -1
  173. package/dist/schemas/number-input.d.ts.map +1 -1
  174. package/dist/schemas/numberInput.json +1 -1
  175. package/dist/schemas/nx-image.d.ts.map +1 -1
  176. package/dist/schemas/nxImage.json +1 -1
  177. package/dist/schemas/pagination.d.ts.map +1 -1
  178. package/dist/schemas/pagination.json +1 -1
  179. package/dist/schemas/popover.d.ts.map +1 -1
  180. package/dist/schemas/popover.json +1 -1
  181. package/dist/schemas/price-input.d.ts.map +1 -1
  182. package/dist/schemas/priceInput.json +1 -1
  183. package/dist/schemas/progress.d.ts.map +1 -1
  184. package/dist/schemas/progress.json +1 -1
  185. package/dist/schemas/radio-group.d.ts +9 -0
  186. package/dist/schemas/radio-group.d.ts.map +1 -1
  187. package/dist/schemas/radioGroup.json +10 -1
  188. package/dist/schemas/radioItem.json +11 -0
  189. package/dist/schemas/select.d.ts.map +1 -1
  190. package/dist/schemas/select.json +1 -1
  191. package/dist/schemas/skeleton.d.ts.map +1 -1
  192. package/dist/schemas/skeleton.json +1 -1
  193. package/dist/schemas/slider.d.ts.map +1 -1
  194. package/dist/schemas/slider.json +1 -1
  195. package/dist/schemas/spinner.d.ts.map +1 -1
  196. package/dist/schemas/spinner.json +1 -1
  197. package/dist/schemas/stepper.d.ts.map +1 -1
  198. package/dist/schemas/stepper.json +1 -1
  199. package/dist/schemas/switch.d.ts.map +1 -1
  200. package/dist/schemas/switch.json +1 -1
  201. package/dist/schemas/tab.d.ts.map +1 -1
  202. package/dist/schemas/tab.json +1 -1
  203. package/dist/schemas/table.d.ts.map +1 -1
  204. package/dist/schemas/table.json +1 -1
  205. package/dist/schemas/tableRow.json +1 -1
  206. package/dist/schemas/tag-input.d.ts.map +1 -1
  207. package/dist/schemas/tagInput.json +1 -1
  208. package/dist/schemas/tdColumn.json +1 -1
  209. package/dist/schemas/text-area.d.ts.map +1 -1
  210. package/dist/schemas/text-input.d.ts +2 -2
  211. package/dist/schemas/text-input.d.ts.map +1 -1
  212. package/dist/schemas/textArea.json +1 -1
  213. package/dist/schemas/textInput.json +1 -1
  214. package/dist/schemas/toast.d.ts.map +1 -1
  215. package/dist/schemas/toastOptions.json +1 -1
  216. package/dist/schemas/toaster.json +1 -1
  217. package/dist/schemas/toggle-group.d.ts +6 -3
  218. package/dist/schemas/toggle-group.d.ts.map +1 -1
  219. package/dist/schemas/toggleGroup.json +9 -3
  220. package/dist/schemas/tooltip.d.ts.map +1 -1
  221. package/dist/schemas/tooltip.json +1 -1
  222. package/dist/schemas/virtual-scroll.d.ts.map +1 -1
  223. package/dist/schemas/virtualGrid.json +1 -1
  224. package/dist/schemas/virtualList.json +1 -1
  225. package/dist/schemas.js +867 -66
  226. package/dist/schemas.mjs +865 -66
  227. package/dist/select.js +0 -1
  228. package/dist/select.mjs +0 -1
  229. package/dist/skeleton.js +0 -1
  230. package/dist/skeleton.mjs +0 -1
  231. package/dist/slider.js +0 -1
  232. package/dist/slider.mjs +0 -1
  233. package/dist/spinner.js +0 -1
  234. package/dist/spinner.mjs +0 -1
  235. package/dist/stepper.js +3 -4
  236. package/dist/stepper.mjs +1 -2
  237. package/dist/styles/.generated/built.d.ts +1 -1
  238. package/dist/styles/.generated/built.d.ts.map +1 -1
  239. package/dist/styles/layer.js +2 -3
  240. package/dist/styles/layer.mjs +1 -2
  241. package/dist/styles.css +554 -51
  242. package/dist/styles.js +2 -3
  243. package/dist/styles.layered.css +554 -51
  244. package/dist/styles.mjs +1 -2
  245. package/dist/switch.js +0 -1
  246. package/dist/switch.mjs +0 -1
  247. package/dist/tab.js +0 -1
  248. package/dist/tab.mjs +0 -1
  249. package/dist/table.js +0 -1
  250. package/dist/table.mjs +0 -1
  251. package/dist/tag-input.js +0 -1
  252. package/dist/tag-input.mjs +0 -1
  253. package/dist/text-area.js +0 -1
  254. package/dist/text-area.mjs +0 -1
  255. package/dist/text-input.js +0 -1
  256. package/dist/text-input.mjs +0 -1
  257. package/dist/toast.js +0 -1
  258. package/dist/toast.mjs +0 -1
  259. package/dist/toggle-group.js +3 -4
  260. package/dist/toggle-group.mjs +1 -2
  261. package/dist/tooltip.js +0 -1
  262. package/dist/tooltip.mjs +0 -1
  263. package/dist/utils/cn.js +0 -1
  264. package/dist/utils/cn.mjs +0 -1
  265. package/dist/utils/scroll.js +0 -1
  266. package/dist/utils/scroll.mjs +0 -1
  267. package/dist/virtual-scroll.js +0 -1
  268. package/dist/virtual-scroll.mjs +0 -1
  269. package/package.json +14 -8
  270. package/scripts/setup-cursor-rules.cjs +164 -27
  271. package/dist/chunks/chunk-22ULI3BF.js +0 -21
  272. package/dist/chunks/chunk-6ECGMUT6.mjs +0 -5
  273. package/dist/chunks/chunk-CVYXRSXT.mjs +0 -8
  274. package/dist/chunks/chunk-I252NERB.mjs +0 -21
  275. package/dist/chunks/chunk-JNMCYWGY.js +0 -10
  276. package/dist/chunks/chunk-V35IEPRL.js +0 -7
  277. package/dist/components/ThemeProvider.d.ts +0 -25
  278. package/dist/components/ThemeProvider.d.ts.map +0 -1
  279. package/dist/schemas/theme-provider.d.ts +0 -36
  280. package/dist/schemas/theme-provider.d.ts.map +0 -1
  281. package/dist/schemas/themeProvider.json +0 -65
  282. package/dist/theme-provider.js +0 -15
  283. package/dist/theme-provider.mjs +0 -2
  284. package/dist/chunks/{chunk-CWMLTXOH.mjs → chunk-5ZVPTIL3.mjs} +1 -1
  285. package/dist/chunks/{chunk-HFBTS42N.js → chunk-7F4SOLAC.js} +1 -1
@@ -149,9 +149,12 @@
149
149
  }
150
150
  .nexus-btn:disabled,
151
151
  .nexus-btn[aria-disabled='true'] {
152
- pointer-events: none;
152
+ cursor: not-allowed;
153
153
  opacity: var(--opacity-comp-btn-disabled);
154
154
  }
155
+ .nexus-btn[aria-disabled='true'] {
156
+ pointer-events: none;
157
+ }
155
158
  .nexus-btn:focus-visible {
156
159
  outline: 2px solid
157
160
  color-mix(in srgb, var(--color-comp-btn-focus-ring) 50%, transparent);
@@ -856,6 +859,9 @@
856
859
  border-color: var(--color-status-danger-focus);
857
860
  outline-color: var(--color-status-danger-focus);
858
861
  }
862
+ .nexus-number-input--disabled {
863
+ cursor: not-allowed;
864
+ }
859
865
  .nexus-number-input--disabled .nexus-number-input__container {
860
866
  background: var(--color-surface-strong);
861
867
  border-color: var(--color-border-medium);
@@ -958,7 +964,7 @@
958
964
  }
959
965
  .nexus-number-input__step:disabled {
960
966
  color: var(--color-text-muted);
961
- pointer-events: none;
967
+ cursor: not-allowed;
962
968
  }
963
969
  .nexus-number-input__step--up {
964
970
  border-bottom: 1px solid var(--color-border-default);
@@ -997,7 +1003,7 @@
997
1003
  }
998
1004
  .nexus-number-input__bind-btn:disabled {
999
1005
  color: var(--color-text-muted);
1000
- pointer-events: none;
1006
+ cursor: not-allowed;
1001
1007
  }
1002
1008
  .nexus-number-input--xl .nexus-number-input__bind-btn {
1003
1009
  width: 30px;
@@ -1276,6 +1282,15 @@
1276
1282
  .nexus-radio-item--md {
1277
1283
  font-size: var(--text-text-sm, 0.875rem);
1278
1284
  }
1285
+ /* When description is present: align radio with the first line of label */
1286
+ .nexus-radio-item--with-description {
1287
+ align-items: flex-start;
1288
+ gap: var(--spacing-gap-xs, 0.375rem);
1289
+ }
1290
+ .nexus-radio-item--with-description .nexus-radio__circle {
1291
+ /* Vertically center the circle to the label's first-line cap height */
1292
+ margin-top: 0.125rem;
1293
+ }
1279
1294
  .nexus-radio-item--pointer {
1280
1295
  cursor: pointer;
1281
1296
  }
@@ -1313,6 +1328,25 @@
1313
1328
  border-color: var(--color-border-default);
1314
1329
  background: var(--color-surface-default);
1315
1330
  }
1331
+ /* ── Ring variant: thick border replaces inner dot ── */
1332
+ .nexus-radio__circle--ring {
1333
+ background: transparent;
1334
+ transition-property: border-color, border-width;
1335
+ transition-duration: 150ms;
1336
+ }
1337
+ .nexus-radio__circle--ring.nexus-radio__circle--unchecked {
1338
+ border-width: 1px;
1339
+ border-color: var(--color-border-default);
1340
+ }
1341
+ .nexus-radio__circle--ring.nexus-radio__circle--checked {
1342
+ border-color: var(--color-accent-primary);
1343
+ }
1344
+ .nexus-radio__circle--ring.nexus-radio__circle--sm.nexus-radio__circle--checked {
1345
+ border-width: 4px;
1346
+ }
1347
+ .nexus-radio__circle--ring.nexus-radio__circle--md.nexus-radio__circle--checked {
1348
+ border-width: 5px;
1349
+ }
1316
1350
  .nexus-radio__dot {
1317
1351
  border-radius: 9999px;
1318
1352
  background: currentColor;
@@ -1327,6 +1361,20 @@
1327
1361
  }
1328
1362
  .nexus-radio__label {
1329
1363
  color: var(--color-text-primary);
1364
+ line-height: 1;
1365
+ }
1366
+ .nexus-radio__text {
1367
+ display: inline-flex;
1368
+ flex-direction: column;
1369
+ gap: var(--spacing-gap-xs, 0.25rem);
1370
+ min-width: 0;
1371
+ }
1372
+ .nexus-radio__description {
1373
+ color: var(--color-text-tertiary);
1374
+ font-size: var(--text-text-xs, 0.75rem);
1375
+ font-weight: 400;
1376
+ line-height: 1.5;
1377
+ letter-spacing: -0.01em;
1330
1378
  }
1331
1379
 
1332
1380
  /* ═══════════════════════════════════════════
@@ -1353,7 +1401,7 @@
1353
1401
  }
1354
1402
  .nexus-chip[aria-disabled='true'] {
1355
1403
  opacity: 0.5;
1356
- pointer-events: none;
1404
+ cursor: not-allowed;
1357
1405
  }
1358
1406
  .nexus-chip--default {
1359
1407
  border-color: var(--color-border-default);
@@ -1733,7 +1781,7 @@
1733
1781
  }
1734
1782
  .nexus-page-btn:disabled {
1735
1783
  opacity: 0.4;
1736
- pointer-events: none;
1784
+ cursor: not-allowed;
1737
1785
  }
1738
1786
  .nexus-page-btn--sm {
1739
1787
  width: 1.75rem;
@@ -1833,7 +1881,7 @@
1833
1881
  }
1834
1882
  .nexus-tab-trigger--disabled {
1835
1883
  opacity: 0.4;
1836
- pointer-events: none;
1884
+ cursor: not-allowed;
1837
1885
  }
1838
1886
 
1839
1887
  /* ═══════════════════════════════════════════
@@ -1923,6 +1971,84 @@
1923
1971
  color: var(--color-text-tertiary);
1924
1972
  }
1925
1973
 
1974
+ /* ═══════════════════════════════════════════
1975
+ DataGrid
1976
+ ═══════════════════════════════════════════ */
1977
+
1978
+ .nexus-data-grid {
1979
+ display: grid;
1980
+ grid-template-columns: repeat(var(--nexus-dg-cols, 1), minmax(0, 1fr));
1981
+ gap: var(--nexus-dg-gap, 0);
1982
+ }
1983
+ /* Loading / empty 상태일 때는 단일 자식이 그리드 전체 너비를 점유하도록 강제 */
1984
+ .nexus-data-grid[data-state='loading'] > *,
1985
+ .nexus-data-grid[data-state='empty'] > * {
1986
+ grid-column: 1 / -1;
1987
+ justify-self: stretch;
1988
+ }
1989
+ .nexus-data-grid > .nexus-datalist-center,
1990
+ .nexus-data-grid > .nexus-datalist-empty {
1991
+ grid-column: 1 / -1;
1992
+ }
1993
+ @media (min-width: 640px) {
1994
+ .nexus-data-grid {
1995
+ grid-template-columns: repeat(
1996
+ var(--nexus-dg-cols-sm, var(--nexus-dg-cols, 1)),
1997
+ minmax(0, 1fr)
1998
+ );
1999
+ }
2000
+ }
2001
+ @media (min-width: 768px) {
2002
+ .nexus-data-grid {
2003
+ grid-template-columns: repeat(
2004
+ var(--nexus-dg-cols-md, var(--nexus-dg-cols-sm, var(--nexus-dg-cols, 1))),
2005
+ minmax(0, 1fr)
2006
+ );
2007
+ }
2008
+ }
2009
+ @media (min-width: 1024px) {
2010
+ .nexus-data-grid {
2011
+ grid-template-columns: repeat(
2012
+ var(
2013
+ --nexus-dg-cols-lg,
2014
+ var(--nexus-dg-cols-md, var(--nexus-dg-cols-sm, var(--nexus-dg-cols, 1)))
2015
+ ),
2016
+ minmax(0, 1fr)
2017
+ );
2018
+ }
2019
+ }
2020
+ @media (min-width: 1280px) {
2021
+ .nexus-data-grid {
2022
+ grid-template-columns: repeat(
2023
+ var(
2024
+ --nexus-dg-cols-xl,
2025
+ var(
2026
+ --nexus-dg-cols-lg,
2027
+ var(--nexus-dg-cols-md, var(--nexus-dg-cols-sm, var(--nexus-dg-cols, 1)))
2028
+ )
2029
+ ),
2030
+ minmax(0, 1fr)
2031
+ );
2032
+ }
2033
+ }
2034
+ @media (min-width: 1536px) {
2035
+ .nexus-data-grid {
2036
+ grid-template-columns: repeat(
2037
+ var(
2038
+ --nexus-dg-cols-2xl,
2039
+ var(
2040
+ --nexus-dg-cols-xl,
2041
+ var(
2042
+ --nexus-dg-cols-lg,
2043
+ var(--nexus-dg-cols-md, var(--nexus-dg-cols-sm, var(--nexus-dg-cols, 1)))
2044
+ )
2045
+ )
2046
+ ),
2047
+ minmax(0, 1fr)
2048
+ );
2049
+ }
2050
+ }
2051
+
1926
2052
  /* ═══════════════════════════════════════════
1927
2053
  InfiniteScroll
1928
2054
  ═══════════════════════════════════════════ */
@@ -2138,7 +2264,7 @@
2138
2264
  background: var(--color-surface-hover);
2139
2265
  }
2140
2266
  .nexus-select-item[data-disabled] {
2141
- pointer-events: none;
2267
+ cursor: not-allowed;
2142
2268
  opacity: 0.5;
2143
2269
  }
2144
2270
 
@@ -2211,7 +2337,7 @@
2211
2337
  background: var(--color-surface-hover);
2212
2338
  }
2213
2339
  .nexus-dropdown-item[data-disabled] {
2214
- pointer-events: none;
2340
+ cursor: not-allowed;
2215
2341
  opacity: var(--opacity-disabled-element, 0.4);
2216
2342
  }
2217
2343
  .nexus-dropdown-item--danger {
@@ -2277,6 +2403,50 @@
2277
2403
  padding: var(--spacing-padding-2xs, 0.25rem);
2278
2404
  gap: 0;
2279
2405
  }
2406
+
2407
+ /* ── Outline variant: independent bordered buttons ── */
2408
+ .nexus-toggle-group--outline {
2409
+ display: inline-flex;
2410
+ background: transparent;
2411
+ padding: 0;
2412
+ gap: var(--spacing-gap-sm, 0.5rem);
2413
+ border-radius: 0;
2414
+ }
2415
+ .nexus-toggle-group--outline .nexus-toggle-group__indicator {
2416
+ display: none;
2417
+ }
2418
+ .nexus-toggle-group--outline .nexus-toggle-group__item {
2419
+ border: 0.5px solid var(--color-border-medium);
2420
+ border-radius: var(--radius-corner-md, 0.5rem);
2421
+ background: transparent;
2422
+ color: var(--color-text-tertiary);
2423
+ font-weight: var(--font-weight-text-medium-sm, 500);
2424
+ transition:
2425
+ border-color var(--duration-transition-normal, 200ms)
2426
+ var(--ease-transition-fast),
2427
+ color var(--duration-transition-normal, 200ms) var(--ease-transition-fast);
2428
+ }
2429
+ .nexus-toggle-group--outline .nexus-toggle-group__item:hover:not([data-state='on']):not([data-disabled]) {
2430
+ border-color: var(--color-border-default-hover);
2431
+ color: var(--color-text-secondary);
2432
+ }
2433
+ .nexus-toggle-group--outline .nexus-toggle-group__item[data-state='on'] {
2434
+ border-color: var(--color-border-strong);
2435
+ color: var(--color-text-primary);
2436
+ }
2437
+ .nexus-toggle-group--outline .nexus-toggle-group__item[data-state='on'] .nexus-toggle-group__icon {
2438
+ color: var(--color-icon-primary);
2439
+ }
2440
+
2441
+ /* ── Full width: stretch group + equal-width items ── */
2442
+ .nexus-toggle-group--full-width {
2443
+ display: flex;
2444
+ width: 100%;
2445
+ }
2446
+ .nexus-toggle-group--full-width .nexus-toggle-group__item {
2447
+ flex: 1 1 0;
2448
+ min-width: 0;
2449
+ }
2280
2450
  .nexus-toggle-group__item {
2281
2451
  display: inline-flex;
2282
2452
  align-items: center;
@@ -2301,7 +2471,7 @@
2301
2471
  0 0 0 4px var(--color-accent-primary-focus);
2302
2472
  }
2303
2473
  .nexus-toggle-group__item[data-disabled] {
2304
- pointer-events: none;
2474
+ cursor: not-allowed;
2305
2475
  opacity: var(--opacity-disabled-element, 0.4);
2306
2476
  }
2307
2477
  .nexus-toggle-group--default .nexus-toggle-group__item[data-state='on'] {
@@ -2379,7 +2549,7 @@
2379
2549
  }
2380
2550
  .nexus-slider[data-disabled] {
2381
2551
  opacity: var(--opacity-disabled-element, 0.4);
2382
- pointer-events: none;
2552
+ cursor: not-allowed;
2383
2553
  }
2384
2554
  .nexus-slider__track {
2385
2555
  position: relative;
@@ -2740,7 +2910,7 @@
2740
2910
  }
2741
2911
  .nexus-carousel-btn:disabled {
2742
2912
  opacity: 0.4;
2743
- pointer-events: none;
2913
+ cursor: not-allowed;
2744
2914
  }
2745
2915
  .nexus-carousel-btn--prev {
2746
2916
  left: 0.5rem;
@@ -2915,12 +3085,14 @@
2915
3085
  display: flex;
2916
3086
  cursor: default;
2917
3087
  }
2918
- .nexus-table-skeleton-td {
3088
+ :where(.nexus-table-skeleton-td) {
3089
+ display: flex;
3090
+ align-items: center;
2919
3091
  height: 100%;
2920
3092
  width: 100%;
2921
3093
  padding-block: var(--spacing-padding-md, 1rem);
2922
3094
  }
2923
- .nexus-table-skeleton-bar {
3095
+ :where(.nexus-table-skeleton-bar) {
2924
3096
  height: 1rem;
2925
3097
  width: 100%;
2926
3098
  }
@@ -3625,17 +3797,14 @@
3625
3797
  }
3626
3798
  .nexus-stepper--horizontal .nexus-stepper__connector {
3627
3799
  flex: 1;
3628
- height: 2px;
3629
- background: var(--color-border-default);
3630
- transition: background var(--duration-transition-normal, 200ms)
3800
+ height: 0;
3801
+ border-top: 1px dashed var(--color-border-default);
3802
+ transition: border-color var(--duration-transition-normal, 200ms)
3631
3803
  var(--ease-transition-normal);
3632
3804
  }
3633
3805
  .nexus-stepper--horizontal .nexus-stepper__connector--hidden {
3634
3806
  visibility: hidden;
3635
3807
  }
3636
- .nexus-stepper--horizontal .nexus-stepper__connector--completed {
3637
- background: var(--color-accent-primary);
3638
- }
3639
3808
  .nexus-stepper--horizontal .nexus-stepper__content {
3640
3809
  margin-top: var(--spacing-gap-sm, 0.5rem);
3641
3810
  padding: 0 var(--spacing-padding-2xs, 0.25rem);
@@ -3660,16 +3829,13 @@
3660
3829
  flex-shrink: 0;
3661
3830
  }
3662
3831
  .nexus-stepper--vertical .nexus-stepper__connector {
3663
- width: 2px;
3832
+ width: 0;
3664
3833
  flex: 1;
3665
3834
  min-height: var(--spacing-padding-sm, 0.75rem);
3666
- background: var(--color-border-default);
3667
- transition: background var(--duration-transition-normal, 200ms)
3835
+ border-left: 1px dashed var(--color-border-default);
3836
+ transition: border-color var(--duration-transition-normal, 200ms)
3668
3837
  var(--ease-transition-normal);
3669
3838
  }
3670
- .nexus-stepper--vertical .nexus-stepper__connector--completed {
3671
- background: var(--color-accent-primary);
3672
- }
3673
3839
  .nexus-stepper--vertical .nexus-stepper__content {
3674
3840
  padding: var(--spacing-padding-xs, 0.5rem) 0;
3675
3841
  }
@@ -3680,25 +3846,27 @@
3680
3846
  align-items: center;
3681
3847
  justify-content: center;
3682
3848
  flex-shrink: 0;
3683
- width: var(--size-control-sm, 2rem);
3684
- height: var(--size-control-sm, 2rem);
3849
+ width: 30px;
3850
+ height: 30px;
3685
3851
  border-radius: var(--radius-corner-full, 9999px);
3686
- border: 2px solid var(--color-border-medium);
3687
- background: var(--color-surface-default);
3688
- font-size: var(--text-text-sm, 0.875rem);
3689
- font-weight: var(--font-weight-text-medium-sm, 500);
3690
- color: var(--color-text-secondary);
3691
- transition: all var(--duration-transition-normal, 200ms)
3692
- var(--ease-transition-normal);
3852
+ border: 1px solid var(--color-border-medium);
3853
+ background: transparent;
3854
+ font-size: var(--text-label-semibold-md, 0.875rem);
3855
+ font-weight: var(--font-weight-label-semibold-md, 600);
3856
+ color: var(--color-text-tertiary);
3857
+ transition:
3858
+ border-color var(--duration-transition-normal, 200ms) var(--ease-transition-normal),
3859
+ background-color var(--duration-transition-normal, 200ms) var(--ease-transition-normal),
3860
+ color var(--duration-transition-normal, 200ms) var(--ease-transition-normal);
3693
3861
  }
3694
3862
  .nexus-stepper--sm .nexus-stepper__indicator {
3695
- width: 1.75rem;
3696
- height: 1.75rem;
3863
+ width: 1.5rem;
3864
+ height: 1.5rem;
3697
3865
  font-size: var(--text-text-xs, 0.75rem);
3698
3866
  }
3699
3867
  .nexus-stepper__check {
3700
- width: var(--size-icon-sm, 1rem);
3701
- height: var(--size-icon-sm, 1rem);
3868
+ width: 13px;
3869
+ height: 13px;
3702
3870
  }
3703
3871
  .nexus-stepper--sm .nexus-stepper__check {
3704
3872
  width: var(--size-icon-xs, 0.75rem);
@@ -3708,33 +3876,31 @@
3708
3876
  /* ── State colors ── */
3709
3877
  .nexus-stepper__step--completed .nexus-stepper__indicator {
3710
3878
  border-color: var(--color-accent-primary);
3711
- background: var(--color-accent-primary);
3712
- color: var(--color-accent-on-primary);
3879
+ background: transparent;
3880
+ color: var(--color-accent-primary);
3713
3881
  }
3714
3882
  .nexus-stepper__step--active .nexus-stepper__indicator {
3715
3883
  border-color: var(--color-accent-primary);
3716
- color: var(--color-accent-primary);
3717
- background: var(--color-surface-default);
3718
- box-shadow: 0 0 0 3px
3719
- color-mix(in srgb, var(--color-accent-primary) 20%, transparent);
3884
+ background: var(--color-accent-primary);
3885
+ color: var(--color-accent-on-primary);
3720
3886
  }
3721
3887
  .nexus-stepper__step--error .nexus-stepper__indicator {
3722
3888
  border-color: var(--color-status-danger);
3723
3889
  color: var(--color-status-danger);
3724
- background: var(--color-surface-default);
3725
- box-shadow: 0 0 0 3px
3726
- color-mix(in srgb, var(--color-status-danger) 20%, transparent);
3890
+ background: transparent;
3727
3891
  }
3728
3892
  .nexus-stepper__step--pending .nexus-stepper__indicator {
3729
- border-color: var(--color-border-default);
3893
+ border-color: var(--color-border-medium);
3730
3894
  color: var(--color-text-tertiary);
3731
3895
  }
3732
3896
 
3733
3897
  /* ── Labels ── */
3734
3898
  .nexus-stepper__label {
3735
3899
  display: block;
3736
- font-size: var(--text-text-sm, 0.875rem);
3737
- font-weight: var(--font-weight-text-medium-sm, 500);
3900
+ font-size: var(--text-text-medium-xs, 0.75rem);
3901
+ font-weight: var(--font-weight-text-medium-xs, 500);
3902
+ line-height: 1.5;
3903
+ letter-spacing: var(--letter-spacing-text-medium-xs, -0.01em);
3738
3904
  color: var(--color-text-primary);
3739
3905
  }
3740
3906
  .nexus-stepper--sm .nexus-stepper__label {
@@ -3746,13 +3912,64 @@
3746
3912
  font-size: var(--text-text-xs, 0.75rem);
3747
3913
  color: var(--color-text-secondary);
3748
3914
  }
3749
- .nexus-stepper__step--pending .nexus-stepper__label {
3915
+ .nexus-stepper__step--completed .nexus-stepper__label {
3750
3916
  color: var(--color-text-secondary);
3751
3917
  }
3918
+ .nexus-stepper__step--completed .nexus-stepper__description {
3919
+ color: var(--color-text-muted);
3920
+ }
3921
+ .nexus-stepper__step--pending .nexus-stepper__label {
3922
+ color: var(--color-text-tertiary);
3923
+ }
3752
3924
  .nexus-stepper__step--pending .nexus-stepper__description {
3753
3925
  color: var(--color-text-muted);
3754
3926
  }
3755
3927
 
3928
+ /* ── Animations ── */
3929
+
3930
+ @keyframes nexus-stepper-pulse {
3931
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(9, 180, 152, 0.25); }
3932
+ 50% { box-shadow: 0 0 0 3px rgba(9, 180, 152, 0.25); }
3933
+ }
3934
+ @keyframes nexus-stepper-pop {
3935
+ 0% { transform: scale(0.7); opacity: 0.5; }
3936
+ 60% { transform: scale(1.15); opacity: 1; }
3937
+ 100% { transform: scale(1); opacity: 1; }
3938
+ }
3939
+ @keyframes nexus-stepper-check-in {
3940
+ 0% { opacity: 0; transform: scale(0) rotate(-45deg); }
3941
+ 60% { opacity: 1; transform: scale(1.2) rotate(0deg); }
3942
+ 100% { opacity: 1; transform: scale(1) rotate(0deg); }
3943
+ }
3944
+ @keyframes nexus-stepper-label-slide {
3945
+ 0% { opacity: 0; transform: translateY(4px); }
3946
+ 100% { opacity: 1; transform: translateY(0); }
3947
+ }
3948
+
3949
+ .nexus-stepper__step--active .nexus-stepper__indicator {
3950
+ animation: nexus-stepper-pulse 2s ease-in-out infinite;
3951
+ }
3952
+
3953
+ .nexus-stepper__step--animating.nexus-stepper__step--active .nexus-stepper__indicator {
3954
+ animation:
3955
+ nexus-stepper-pop 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275) both,
3956
+ nexus-stepper-pulse 2s ease-in-out 500ms infinite;
3957
+ }
3958
+ .nexus-stepper__step--animating.nexus-stepper__step--active .nexus-stepper__label {
3959
+ animation: nexus-stepper-label-slide 350ms ease-out both;
3960
+ }
3961
+ .nexus-stepper__step--animating.nexus-stepper__step--active .nexus-stepper__description {
3962
+ animation: nexus-stepper-label-slide 350ms ease-out 50ms both;
3963
+ }
3964
+
3965
+ @media (prefers-reduced-motion: reduce) {
3966
+ .nexus-stepper__step--active .nexus-stepper__indicator,
3967
+ .nexus-stepper__step--animating .nexus-stepper__indicator,
3968
+ .nexus-stepper__step--animating .nexus-stepper__label,
3969
+ .nexus-stepper__step--animating .nexus-stepper__description,
3970
+ .nexus-stepper__check { animation: none !important; }
3971
+ }
3972
+
3756
3973
  /* ═══════════════════════════════════════════
3757
3974
  TagInput
3758
3975
  ═══════════════════════════════════════════ */
@@ -4415,4 +4632,290 @@
4415
4632
  margin: 0;
4416
4633
  }
4417
4634
 
4635
+ /* ═══════════════════════════════════════════
4636
+ Combobox (Searchable Select)
4637
+ ═══════════════════════════════════════════ */
4638
+ .nexus-combobox {
4639
+ display: flex;
4640
+ align-items: center;
4641
+ flex-wrap: nowrap;
4642
+ gap: var(--spacing-gap-xs, 0.25rem);
4643
+ border-radius: var(--radius-corner-md, 0.5rem);
4644
+ border: 1px solid var(--color-border-default);
4645
+ background: var(--color-surface-default);
4646
+ font-size: var(--text-text-sm, 0.875rem);
4647
+ font-weight: 500;
4648
+ line-height: 1;
4649
+ color: var(--color-text-primary);
4650
+ cursor: text;
4651
+ transition:
4652
+ border-color 200ms,
4653
+ box-shadow 200ms;
4654
+ }
4655
+
4656
+ /* Left content area: chips + input wrap together, suffix stays vertically centered */
4657
+ .nexus-combobox__content {
4658
+ display: flex;
4659
+ flex: 1 1 auto;
4660
+ align-items: center;
4661
+ flex-wrap: wrap;
4662
+ gap: var(--spacing-gap-xs, 0.25rem);
4663
+ min-width: 0;
4664
+ }
4665
+
4666
+ /* Right suffix area: clear / loading / chevron — always vertically centered */
4667
+ .nexus-combobox__suffix {
4668
+ display: inline-flex;
4669
+ align-items: center;
4670
+ flex-shrink: 0;
4671
+ gap: var(--spacing-gap-xs, 0.25rem);
4672
+ align-self: center;
4673
+ }
4674
+ :where(.nexus-combobox) {
4675
+ width: 100%;
4676
+ }
4677
+ .nexus-combobox:hover:not(.nexus-combobox--disabled):not(:focus-within) {
4678
+ border-color: var(--color-border-default-hover);
4679
+ box-shadow: 0 0 0 0.5px var(--color-border-default-hover);
4680
+ }
4681
+ .nexus-combobox--default:focus-within,
4682
+ .nexus-combobox--default.nexus-combobox--open {
4683
+ border-color: var(--color-accent-primary);
4684
+ box-shadow: 0 0 0 0.5px var(--color-accent-primary);
4685
+ }
4686
+ .nexus-combobox--error {
4687
+ border-color: var(--color-status-danger);
4688
+ }
4689
+ .nexus-combobox--error:focus-within,
4690
+ .nexus-combobox--error.nexus-combobox--open {
4691
+ border-color: var(--color-status-danger);
4692
+ box-shadow: 0 0 0 0.5px var(--color-status-danger);
4693
+ }
4694
+ .nexus-combobox--disabled {
4695
+ cursor: not-allowed;
4696
+ background: var(--color-surface-strong);
4697
+ border-color: var(--color-border-medium);
4698
+ color: var(--color-text-muted);
4699
+ }
4700
+ .nexus-combobox--disabled .nexus-combobox__input {
4701
+ cursor: not-allowed;
4702
+ }
4703
+
4704
+ /* ── Sizes (mirror TextInput tokens) ── */
4705
+ .nexus-combobox--xl {
4706
+ padding: calc(var(--spacing-padding-md, 1rem) - 1px)
4707
+ var(--spacing-padding-md, 1rem);
4708
+ font-size: var(--text-text-base, 1rem);
4709
+ }
4710
+ .nexus-combobox--lg {
4711
+ padding: calc(var(--spacing-padding-sm, 0.75rem) - 1px)
4712
+ var(--spacing-padding-sm, 0.75rem);
4713
+ font-size: var(--text-text-base, 1rem);
4714
+ }
4715
+ .nexus-combobox--md {
4716
+ padding: calc(var(--spacing-padding-xs, 0.5rem) - 1px)
4717
+ var(--spacing-padding-sm, 0.75rem);
4718
+ font-size: var(--text-text-sm, 0.875rem);
4719
+ }
4720
+
4721
+ /* ── Inner input ── */
4722
+ .nexus-combobox__input {
4723
+ flex: 1 1 auto;
4724
+ min-width: 4rem;
4725
+ background: transparent;
4726
+ border: 0;
4727
+ outline: none;
4728
+ box-shadow: none;
4729
+ color: inherit;
4730
+ font: inherit;
4731
+ padding: 0;
4732
+ appearance: none;
4733
+ -webkit-appearance: none;
4734
+ }
4735
+ .nexus-combobox__input:focus,
4736
+ .nexus-combobox__input:focus-visible {
4737
+ outline: none;
4738
+ box-shadow: none;
4739
+ border: 0;
4740
+ }
4741
+ .nexus-combobox__input::placeholder {
4742
+ color: var(--color-text-muted);
4743
+ }
4744
+ .nexus-combobox__input:disabled {
4745
+ color: var(--color-text-muted);
4746
+ }
4747
+
4748
+ /* ── Suffix icons (clear / loading / chevron) ── */
4749
+ .nexus-combobox__icon {
4750
+ display: inline-flex;
4751
+ align-items: center;
4752
+ justify-content: center;
4753
+ flex-shrink: 0;
4754
+ color: var(--color-icon-secondary);
4755
+ }
4756
+ .nexus-combobox__icon--loading {
4757
+ color: var(--color-accent-primary);
4758
+ }
4759
+ .nexus-combobox__clear {
4760
+ display: inline-flex;
4761
+ align-items: center;
4762
+ justify-content: center;
4763
+ flex-shrink: 0;
4764
+ width: 1.125rem;
4765
+ height: 1.125rem;
4766
+ border-radius: 999px;
4767
+ border: 0;
4768
+ background: transparent;
4769
+ color: var(--color-icon-secondary);
4770
+ cursor: pointer;
4771
+ padding: 0;
4772
+ }
4773
+ .nexus-combobox__clear:hover {
4774
+ background: var(--color-surface-hover);
4775
+ color: var(--color-icon-primary);
4776
+ }
4777
+ .nexus-combobox__chevron {
4778
+ display: inline-flex;
4779
+ align-items: center;
4780
+ justify-content: center;
4781
+ flex-shrink: 0;
4782
+ color: var(--color-icon-secondary);
4783
+ transition: transform 150ms ease;
4784
+ }
4785
+ .nexus-combobox__chevron--open {
4786
+ transform: rotate(180deg);
4787
+ }
4788
+
4789
+ /* ── Multi-select chips inside input ── */
4790
+ .nexus-combobox__chip {
4791
+ display: inline-flex;
4792
+ align-items: center;
4793
+ gap: 0.25rem;
4794
+ padding: 0.125rem 0.375rem 0.125rem 0.5rem;
4795
+ border-radius: var(--radius-corner-sm, 0.25rem);
4796
+ background: var(--color-surface-subtle);
4797
+ color: var(--color-text-primary);
4798
+ font-size: var(--text-text-xs, 0.75rem);
4799
+ font-weight: 500;
4800
+ line-height: 1.25;
4801
+ max-width: 100%;
4802
+ }
4803
+ .nexus-combobox__chip-label {
4804
+ overflow: hidden;
4805
+ text-overflow: ellipsis;
4806
+ white-space: nowrap;
4807
+ }
4808
+ .nexus-combobox__chip-remove {
4809
+ display: inline-flex;
4810
+ align-items: center;
4811
+ justify-content: center;
4812
+ width: 1rem;
4813
+ height: 1rem;
4814
+ border-radius: 999px;
4815
+ border: 0;
4816
+ background: transparent;
4817
+ color: var(--color-icon-secondary);
4818
+ cursor: pointer;
4819
+ padding: 0;
4820
+ flex-shrink: 0;
4821
+ }
4822
+ .nexus-combobox__chip-remove:hover {
4823
+ background: var(--color-surface-hover);
4824
+ color: var(--color-icon-primary);
4825
+ }
4826
+
4827
+ /* ── Field wrapper (label/description) ── */
4828
+ .nexus-combobox-field {
4829
+ display: flex;
4830
+ flex-direction: column;
4831
+ gap: var(--spacing-gap-xs, 0.25rem);
4832
+ }
4833
+ .nexus-combobox-field__label {
4834
+ font-size: var(--text-label-semibold-md);
4835
+ font-weight: var(--font-weight-label-semibold-md, 600);
4836
+ line-height: 1;
4837
+ color: var(--color-text-tertiary);
4838
+ }
4839
+ .nexus-combobox-field__description {
4840
+ font-size: var(--text-text-xs);
4841
+ font-weight: var(--font-weight-text-xs, 400);
4842
+ line-height: 1.5;
4843
+ color: var(--color-text-tertiary);
4844
+ margin: 0;
4845
+ }
4846
+ .nexus-combobox-field__description--error {
4847
+ color: var(--color-status-danger);
4848
+ }
4849
+
4850
+ /* ── Popover / Listbox ── */
4851
+ .nexus-combobox-popover {
4852
+ z-index: 50;
4853
+ border-radius: var(--radius-corner-md, 0.5rem);
4854
+ border: 1px solid var(--color-border-default);
4855
+ background: var(--color-surface-default);
4856
+ box-shadow: var(--shadow-md, 0 8px 24px rgba(0, 0, 0, 0.08));
4857
+ overflow: hidden;
4858
+ }
4859
+ .nexus-combobox-listbox {
4860
+ max-height: 18rem;
4861
+ overflow-y: auto;
4862
+ padding: 0.25rem;
4863
+ }
4864
+ .nexus-combobox-popover__status {
4865
+ display: flex;
4866
+ align-items: center;
4867
+ justify-content: center;
4868
+ gap: 0.5rem;
4869
+ padding: 1rem;
4870
+ color: var(--color-text-muted);
4871
+ font-size: var(--text-text-sm, 0.875rem);
4872
+ }
4873
+
4874
+ /* ── Option ── */
4875
+ .nexus-combobox-option {
4876
+ display: flex;
4877
+ align-items: center;
4878
+ gap: 0.5rem;
4879
+ padding: 0.5rem 0.625rem;
4880
+ border-radius: var(--radius-corner-sm, 0.25rem);
4881
+ cursor: pointer;
4882
+ color: var(--color-text-primary);
4883
+ font-size: var(--text-text-sm, 0.875rem);
4884
+ line-height: 1.25;
4885
+ user-select: none;
4886
+ }
4887
+ .nexus-combobox-option--active {
4888
+ background: var(--color-surface-hover);
4889
+ }
4890
+ .nexus-combobox-option--selected {
4891
+ color: var(--color-accent-primary);
4892
+ font-weight: 600;
4893
+ }
4894
+ .nexus-combobox-option--disabled {
4895
+ opacity: 0.5;
4896
+ cursor: not-allowed;
4897
+ }
4898
+ .nexus-combobox-option__body {
4899
+ flex: 1 1 auto;
4900
+ min-width: 0;
4901
+ }
4902
+ .nexus-combobox-option__label {
4903
+ overflow: hidden;
4904
+ text-overflow: ellipsis;
4905
+ white-space: nowrap;
4906
+ }
4907
+ .nexus-combobox-option__description {
4908
+ margin-top: 0.125rem;
4909
+ color: var(--color-text-muted);
4910
+ font-size: var(--text-text-xs, 0.75rem);
4911
+ font-weight: 400;
4912
+ overflow: hidden;
4913
+ text-overflow: ellipsis;
4914
+ white-space: nowrap;
4915
+ }
4916
+ .nexus-combobox-option__check {
4917
+ flex-shrink: 0;
4918
+ color: var(--color-accent-primary);
4919
+ }
4920
+
4418
4921
  }