@nexus-cross/design-system 1.0.3 → 1.0.4

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 (109) hide show
  1. package/cursor-rules/nexus-ui-api.mdc +208 -0
  2. package/dist/alert.d.mts +17 -0
  3. package/dist/alert.d.ts +17 -0
  4. package/dist/alert.js +16 -0
  5. package/dist/alert.mjs +3 -0
  6. package/dist/badge.d.mts +18 -0
  7. package/dist/badge.d.ts +18 -0
  8. package/dist/badge.js +16 -0
  9. package/dist/badge.mjs +3 -0
  10. package/dist/breadcrumb.d.mts +15 -0
  11. package/dist/breadcrumb.d.ts +15 -0
  12. package/dist/breadcrumb.js +12 -0
  13. package/dist/breadcrumb.mjs +3 -0
  14. package/dist/chunks/chunk-2N2EPBO4.js +120 -0
  15. package/dist/chunks/chunk-2UPGFY6E.mjs +76 -0
  16. package/dist/chunks/chunk-3ZWN66YH.js +53 -0
  17. package/dist/chunks/chunk-5PQ3UCKF.js +99 -0
  18. package/dist/chunks/chunk-6BWOKTVQ.mjs +87 -0
  19. package/dist/chunks/chunk-6DBRL6NA.mjs +81 -0
  20. package/dist/chunks/chunk-B5O6W3Z4.mjs +73 -0
  21. package/dist/chunks/chunk-C2DSAJTL.js +109 -0
  22. package/dist/chunks/chunk-CUTMLBC3.mjs +86 -0
  23. package/dist/chunks/chunk-CV4GMFWP.js +174 -0
  24. package/dist/chunks/chunk-DICN6GKE.js +99 -0
  25. package/dist/chunks/chunk-DYPPVXQF.js +143 -0
  26. package/dist/chunks/chunk-EJY7IVSK.mjs +31 -0
  27. package/dist/chunks/chunk-FUIBYZZ4.mjs +98 -0
  28. package/dist/chunks/chunk-H2G5FMRN.mjs +75 -0
  29. package/dist/chunks/chunk-H2V7RHYV.mjs +120 -0
  30. package/dist/chunks/chunk-KZ7S5VN2.js +7 -0
  31. package/dist/chunks/chunk-MMCA33FW.mjs +85 -0
  32. package/dist/chunks/chunk-NZHK76R3.js +109 -0
  33. package/dist/chunks/chunk-P73MEU7N.mjs +150 -0
  34. package/dist/chunks/chunk-PDJTSQOC.js +59 -0
  35. package/dist/chunks/chunk-PI464222.mjs +5 -0
  36. package/dist/chunks/chunk-S2GMEC43.js +109 -0
  37. package/dist/chunks/chunk-X3CTJ7TD.js +108 -0
  38. package/dist/chunks/chunk-YO5MSDPX.mjs +36 -0
  39. package/dist/chunks/chunk-ZI4LN2B2.js +96 -0
  40. package/dist/date-picker.d.mts +17 -0
  41. package/dist/date-picker.d.ts +17 -0
  42. package/dist/date-picker.js +12 -0
  43. package/dist/date-picker.mjs +3 -0
  44. package/dist/dropdown-menu.d.mts +30 -0
  45. package/dist/dropdown-menu.d.ts +30 -0
  46. package/dist/dropdown-menu.js +32 -0
  47. package/dist/dropdown-menu.mjs +3 -0
  48. package/dist/empty-state.d.mts +16 -0
  49. package/dist/empty-state.d.ts +16 -0
  50. package/dist/empty-state.js +16 -0
  51. package/dist/empty-state.mjs +3 -0
  52. package/dist/index.d.mts +14 -0
  53. package/dist/index.d.ts +14 -0
  54. package/dist/index.js +267 -155
  55. package/dist/index.mjs +28 -16
  56. package/dist/modal/index.js +12 -12
  57. package/dist/modal/index.mjs +3 -3
  58. package/dist/nx-image.d.mts +13 -0
  59. package/dist/nx-image.d.ts +13 -0
  60. package/dist/nx-image.js +12 -0
  61. package/dist/nx-image.mjs +3 -0
  62. package/dist/progress.d.mts +18 -0
  63. package/dist/progress.d.ts +18 -0
  64. package/dist/progress.js +16 -0
  65. package/dist/progress.mjs +3 -0
  66. package/dist/schemas/_all.json +787 -4
  67. package/dist/schemas/alert.json +49 -0
  68. package/dist/schemas/badge.json +76 -0
  69. package/dist/schemas/breadcrumb.json +47 -0
  70. package/dist/schemas/datePicker.json +56 -0
  71. package/dist/schemas/dropdownMenu.json +83 -0
  72. package/dist/schemas/emptyState.json +44 -0
  73. package/dist/schemas/nxImage.json +56 -0
  74. package/dist/schemas/progress.json +63 -0
  75. package/dist/schemas/slider.json +78 -0
  76. package/dist/schemas/stepper.json +73 -0
  77. package/dist/schemas/tagInput.json +70 -0
  78. package/dist/schemas/toggleGroup.json +88 -0
  79. package/dist/schemas.d.mts +603 -143
  80. package/dist/schemas.d.ts +603 -143
  81. package/dist/schemas.js +160 -0
  82. package/dist/schemas.mjs +149 -1
  83. package/dist/slider.d.mts +20 -0
  84. package/dist/slider.d.ts +20 -0
  85. package/dist/slider.js +16 -0
  86. package/dist/slider.mjs +3 -0
  87. package/dist/stepper.d.mts +20 -0
  88. package/dist/stepper.d.ts +20 -0
  89. package/dist/stepper.js +16 -0
  90. package/dist/stepper.mjs +3 -0
  91. package/dist/styles/layer.js +2 -2
  92. package/dist/styles/layer.mjs +1 -1
  93. package/dist/styles.css +1190 -69
  94. package/dist/styles.js +2 -2
  95. package/dist/styles.layered.css +1190 -69
  96. package/dist/styles.mjs +1 -1
  97. package/dist/tag-input.d.mts +21 -0
  98. package/dist/tag-input.d.ts +21 -0
  99. package/dist/tag-input.js +16 -0
  100. package/dist/tag-input.mjs +3 -0
  101. package/dist/toggle-group.d.mts +36 -0
  102. package/dist/toggle-group.d.ts +36 -0
  103. package/dist/toggle-group.js +16 -0
  104. package/dist/toggle-group.mjs +3 -0
  105. package/package.json +67 -2
  106. package/dist/chunks/chunk-RLPPNY5F.js +0 -7
  107. package/dist/chunks/chunk-W7IPMNN2.mjs +0 -5
  108. package/dist/chunks/{chunk-3VFBPFZF.mjs → chunk-CWMLTXOH.mjs} +2 -2
  109. package/dist/chunks/{chunk-U53UA76K.js → chunk-HFBTS42N.js} +2 -2
@@ -1282,6 +1282,264 @@
1282
1282
  height: 0.75rem;
1283
1283
  }
1284
1284
 
1285
+ /* ═══════════════════════════════════════════
1286
+ Badge
1287
+ ═══════════════════════════════════════════ */
1288
+
1289
+ .nexus-badge-wrapper {
1290
+ position: relative;
1291
+ }
1292
+ .nexus-badge {
1293
+ --nexus-badge-offset-x: 0px;
1294
+ --nexus-badge-offset-y: 0px;
1295
+ box-sizing: border-box;
1296
+ display: inline-flex;
1297
+ align-items: center;
1298
+ justify-content: center;
1299
+ min-width: 1.25rem;
1300
+ height: 1.25rem;
1301
+ padding: 0 0.35rem;
1302
+ border-radius: var(--radius-corner-full, 9999px);
1303
+ font-size: var(--text-text-xs, 0.75rem);
1304
+ font-weight: var(--font-weight-label-semibold-sm, 600);
1305
+ line-height: 1;
1306
+ color: var(--color-text-inverted);
1307
+ }
1308
+ .nexus-badge--positioned {
1309
+ position: absolute;
1310
+ top: 0;
1311
+ right: 0;
1312
+ z-index: 1;
1313
+ transform: translate(
1314
+ calc(50% + var(--nexus-badge-offset-x)),
1315
+ calc(-50% + var(--nexus-badge-offset-y))
1316
+ );
1317
+ }
1318
+ .nexus-badge--dot {
1319
+ min-width: 0;
1320
+ padding: 0;
1321
+ }
1322
+ .nexus-badge--dot.nexus-badge--sm {
1323
+ width: 0.375rem;
1324
+ height: 0.375rem;
1325
+ }
1326
+ .nexus-badge--dot.nexus-badge--md {
1327
+ width: 0.5rem;
1328
+ height: 0.5rem;
1329
+ }
1330
+ .nexus-badge--dot.nexus-badge--lg {
1331
+ width: 0.625rem;
1332
+ height: 0.625rem;
1333
+ }
1334
+ .nexus-badge--danger {
1335
+ background: var(--color-status-danger);
1336
+ color: var(--color-static-white);
1337
+ }
1338
+ .nexus-badge--primary {
1339
+ background: var(--color-accent-primary);
1340
+ color: var(--color-accent-on-primary);
1341
+ }
1342
+ .nexus-badge--secondary {
1343
+ background: var(--color-accent-secondary);
1344
+ color: var(--color-accent-on-secondary);
1345
+ }
1346
+ .nexus-badge--info {
1347
+ background: var(--color-status-info);
1348
+ color: var(--color-static-white);
1349
+ }
1350
+ .nexus-badge--success {
1351
+ background: var(--color-status-success);
1352
+ color: var(--color-static-white);
1353
+ }
1354
+ .nexus-badge--warning {
1355
+ background: var(--color-status-warning);
1356
+ color: var(--color-static-black);
1357
+ }
1358
+ .nexus-badge--sm:not(.nexus-badge--dot) {
1359
+ min-width: 1rem;
1360
+ height: 1rem;
1361
+ padding: 0 0.25rem;
1362
+ font-size: 0.625rem;
1363
+ }
1364
+ .nexus-badge--lg:not(.nexus-badge--dot) {
1365
+ min-width: 1.5rem;
1366
+ height: 1.5rem;
1367
+ padding: 0 0.45rem;
1368
+ font-size: var(--text-text-sm, 0.875rem);
1369
+ }
1370
+
1371
+ /* ═══════════════════════════════════════════
1372
+ Progress
1373
+ ═══════════════════════════════════════════ */
1374
+
1375
+ .nexus-progress-wrapper {
1376
+ display: flex;
1377
+ flex-direction: column;
1378
+ gap: var(--spacing-gap-xs, 0.25rem);
1379
+ width: 100%;
1380
+ }
1381
+ .nexus-progress__header {
1382
+ display: flex;
1383
+ justify-content: space-between;
1384
+ align-items: center;
1385
+ gap: var(--spacing-gap-sm, 0.5rem);
1386
+ }
1387
+ .nexus-progress__label {
1388
+ font-size: var(--text-text-sm, 0.875rem);
1389
+ color: var(--color-text-primary);
1390
+ }
1391
+ .nexus-progress__value {
1392
+ font-size: var(--text-text-sm, 0.875rem);
1393
+ color: var(--color-text-secondary);
1394
+ font-variant-numeric: tabular-nums;
1395
+ }
1396
+ .nexus-progress {
1397
+ position: relative;
1398
+ width: 100%;
1399
+ overflow: hidden;
1400
+ border-radius: var(--radius-corner-full, 9999px);
1401
+ background: var(--color-surface-strong);
1402
+ }
1403
+ .nexus-progress--sm {
1404
+ height: 0.25rem;
1405
+ }
1406
+ .nexus-progress--md {
1407
+ height: 0.375rem;
1408
+ }
1409
+ .nexus-progress--lg {
1410
+ height: 0.5rem;
1411
+ }
1412
+ .nexus-progress__bar {
1413
+ height: 100%;
1414
+ border-radius: inherit;
1415
+ transition:
1416
+ width var(--duration-transition-normal, 200ms) var(--ease-transition-normal, cubic-bezier(0, 0, 0.2, 1));
1417
+ }
1418
+ .nexus-progress--primary .nexus-progress__bar {
1419
+ background: var(--color-accent-primary);
1420
+ }
1421
+ .nexus-progress--success .nexus-progress__bar {
1422
+ background: var(--color-status-success);
1423
+ }
1424
+ .nexus-progress--warning .nexus-progress__bar {
1425
+ background: var(--color-status-warning);
1426
+ }
1427
+ .nexus-progress--danger .nexus-progress__bar {
1428
+ background: var(--color-status-danger);
1429
+ }
1430
+ .nexus-progress--info .nexus-progress__bar {
1431
+ background: var(--color-status-info);
1432
+ }
1433
+ .nexus-progress__bar--indeterminate {
1434
+ position: absolute;
1435
+ left: 0;
1436
+ top: 0;
1437
+ bottom: 0;
1438
+ width: 35% !important;
1439
+ animation: nexus-progress-indeterminate 1.1s var(--ease-transition-normal, cubic-bezier(0, 0, 0.2, 1))
1440
+ infinite;
1441
+ }
1442
+ @keyframes nexus-progress-indeterminate {
1443
+ 0% {
1444
+ transform: translateX(-100%);
1445
+ }
1446
+ 100% {
1447
+ transform: translateX(calc(100% / 0.35 * 3));
1448
+ }
1449
+ }
1450
+
1451
+ /* ═══════════════════════════════════════════
1452
+ Alert
1453
+ ═══════════════════════════════════════════ */
1454
+
1455
+ .nexus-alert {
1456
+ display: flex;
1457
+ align-items: flex-start;
1458
+ gap: var(--spacing-gap-sm, 0.5rem);
1459
+ padding: var(--spacing-padding-md, 1rem);
1460
+ border-radius: var(--radius-corner-md, 8px);
1461
+ border-width: var(--border-width-stroke-thin, 1px);
1462
+ border-style: solid;
1463
+ }
1464
+ .nexus-alert__icon {
1465
+ flex-shrink: 0;
1466
+ margin-top: 0.125rem;
1467
+ line-height: 0;
1468
+ }
1469
+ .nexus-alert__icon-svg {
1470
+ width: 1.25rem;
1471
+ height: 1.25rem;
1472
+ }
1473
+ .nexus-alert__body {
1474
+ flex: 1;
1475
+ min-width: 0;
1476
+ }
1477
+ .nexus-alert__title {
1478
+ margin: 0;
1479
+ font-weight: var(--font-weight-heading-h7, 600);
1480
+ font-size: var(--text-text-sm, 0.875rem);
1481
+ color: var(--color-text-primary);
1482
+ }
1483
+ .nexus-alert__description {
1484
+ margin-top: var(--spacing-gap-xs, 0.25rem);
1485
+ font-size: var(--text-text-sm, 0.875rem);
1486
+ color: var(--color-text-secondary);
1487
+ }
1488
+ .nexus-alert__action {
1489
+ flex-shrink: 0;
1490
+ align-self: center;
1491
+ }
1492
+ .nexus-alert__close {
1493
+ flex-shrink: 0;
1494
+ display: inline-flex;
1495
+ align-items: center;
1496
+ justify-content: center;
1497
+ margin: 0;
1498
+ padding: var(--spacing-padding-2xs, 0.25rem);
1499
+ border: none;
1500
+ border-radius: var(--radius-corner-sm, 4px);
1501
+ background: transparent;
1502
+ cursor: pointer;
1503
+ font: inherit;
1504
+ color: var(--color-icon-secondary);
1505
+ transition: color var(--duration-transition-fast, 150ms) var(--ease-transition-fast, ease);
1506
+ }
1507
+ .nexus-alert__close:hover {
1508
+ color: var(--color-icon-primary);
1509
+ }
1510
+ .nexus-alert__close-icon {
1511
+ width: 1rem;
1512
+ height: 1rem;
1513
+ }
1514
+ .nexus-alert--info {
1515
+ background: color-mix(in srgb, var(--color-status-info-dim) 45%, var(--color-surface-default));
1516
+ border-color: color-mix(in srgb, var(--color-status-info) 28%, var(--color-border-default));
1517
+ }
1518
+ .nexus-alert--info .nexus-alert__icon {
1519
+ color: var(--color-status-info-intense);
1520
+ }
1521
+ .nexus-alert--success {
1522
+ background: color-mix(in srgb, var(--color-status-success-dim) 45%, var(--color-surface-default));
1523
+ border-color: color-mix(in srgb, var(--color-status-success) 28%, var(--color-border-default));
1524
+ }
1525
+ .nexus-alert--success .nexus-alert__icon {
1526
+ color: var(--color-status-success-intense);
1527
+ }
1528
+ .nexus-alert--warning {
1529
+ background: color-mix(in srgb, var(--color-status-warning-dim) 45%, var(--color-surface-default));
1530
+ border-color: color-mix(in srgb, var(--color-status-warning) 28%, var(--color-border-default));
1531
+ }
1532
+ .nexus-alert--warning .nexus-alert__icon {
1533
+ color: var(--color-status-warning-intense);
1534
+ }
1535
+ .nexus-alert--danger {
1536
+ background: color-mix(in srgb, var(--color-status-danger-dim) 45%, var(--color-surface-default));
1537
+ border-color: color-mix(in srgb, var(--color-status-danger) 28%, var(--color-border-default));
1538
+ }
1539
+ .nexus-alert--danger .nexus-alert__icon {
1540
+ color: var(--color-status-danger-intense);
1541
+ }
1542
+
1285
1543
  /* ═══════════════════════════════════════════
1286
1544
  Pagination
1287
1545
  ═══════════════════════════════════════════ */
@@ -1718,110 +1976,387 @@
1718
1976
  }
1719
1977
 
1720
1978
  /* ═══════════════════════════════════════════
1721
- Tooltip
1979
+ DropdownMenu
1722
1980
  ═══════════════════════════════════════════ */
1723
1981
 
1724
- .nexus-tooltip-content {
1725
- z-index: 50;
1726
- display: flex;
1982
+ .nexus-dropdown-content {
1983
+ position: relative;
1984
+ z-index: var(--z-index-layer-dropdown, 10);
1985
+ min-width: 10rem;
1727
1986
  overflow: hidden;
1728
- border-radius: var(--radius-corner-md, 0.375rem);
1729
- padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
1730
- font-size: var(--text-text-sm, 0.875rem);
1731
- }
1732
- .nexus-tooltip--light {
1733
- border: 1px solid var(--color-border-default);
1734
- background: var(--color-static-white);
1735
- color: var(--color-static-black);
1736
- box-shadow: var(--shadow-comp-md);
1737
- }
1738
- .nexus-tooltip--dark {
1739
- border: none;
1740
- background: var(--color-static-black);
1741
- color: var(--color-static-white);
1742
- }
1743
- .nexus-tooltip-arrow--dark {
1744
- fill: var(--color-static-black);
1745
- }
1746
- .nexus-tooltip-arrow--light {
1747
- fill: var(--color-static-white);
1748
- }
1749
- .nexus-tooltip-trigger {
1750
- cursor: default;
1751
- }
1752
-
1753
- /* ═══════════════════════════════════════════
1754
- Popover
1755
- ═══════════════════════════════════════════ */
1756
-
1757
- .nexus-popover-content {
1758
- z-index: 50;
1759
- border-radius: var(--radius-corner-lg, 0.5rem);
1987
+ border-radius: var(--radius-corner-md, 0.5rem);
1760
1988
  border: 1px solid var(--color-border-default);
1761
- padding: var(--spacing-padding-md, 1rem);
1762
- box-shadow: var(--shadow-comp-lg);
1763
- outline: none;
1764
1989
  background: var(--color-surface-default);
1990
+ padding: var(--spacing-padding-xs, 0.5rem);
1991
+ box-shadow: var(--shadow-comp-lg);
1765
1992
  color: var(--color-text-primary);
1766
- transform-origin: var(--radix-popover-content-transform-origin);
1993
+ transform-origin: var(--radix-dropdown-menu-content-transform-origin);
1767
1994
  will-change: transform, opacity;
1768
1995
  }
1769
- .nexus-popover-content[data-state='open'] {
1770
- animation: nexus-popover-in 150ms ease-out;
1996
+ .nexus-dropdown-content[data-state='open'] {
1997
+ animation: nexus-dropdown-in 150ms ease-out;
1771
1998
  }
1772
- .nexus-popover-content[data-state='closed'] {
1773
- animation: nexus-popover-out 100ms ease-in forwards;
1999
+ .nexus-dropdown-content[data-state='closed'] {
2000
+ animation: nexus-dropdown-out 100ms ease-in forwards;
1774
2001
  }
1775
- @keyframes nexus-popover-in {
2002
+ @keyframes nexus-dropdown-in {
1776
2003
  from {
1777
2004
  opacity: 0;
1778
- transform: scale(0.95);
2005
+ transform: scale(0.96);
1779
2006
  }
1780
2007
  to {
1781
2008
  opacity: 1;
1782
2009
  transform: scale(1);
1783
2010
  }
1784
2011
  }
1785
- @keyframes nexus-popover-out {
2012
+ @keyframes nexus-dropdown-out {
1786
2013
  from {
1787
2014
  opacity: 1;
1788
2015
  transform: scale(1);
1789
2016
  }
1790
2017
  to {
1791
2018
  opacity: 0;
1792
- transform: scale(0.95);
2019
+ transform: scale(0.96);
1793
2020
  }
1794
2021
  }
1795
- .nexus-popover-arrow {
1796
- fill: var(--color-surface-default);
2022
+ .nexus-dropdown-separator {
2023
+ margin: var(--spacing-padding-xs, 0.5rem) calc(-1 * var(--spacing-padding-xs, 0.5rem));
2024
+ height: 1px;
2025
+ background: var(--color-border-default);
2026
+ }
2027
+ .nexus-dropdown-item {
2028
+ position: relative;
2029
+ display: flex;
2030
+ width: 100%;
2031
+ cursor: default;
2032
+ align-items: center;
2033
+ gap: var(--spacing-gap-sm, 0.5rem);
2034
+ border-radius: var(--radius-corner-sm, 0.25rem);
2035
+ padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
2036
+ font-size: var(--text-text-sm, 0.875rem);
2037
+ color: var(--color-text-primary);
2038
+ outline: none;
2039
+ user-select: none;
2040
+ transition: background-color 150ms ease;
2041
+ }
2042
+ .nexus-dropdown-item[data-highlighted] {
2043
+ background: var(--color-surface-hover);
2044
+ }
2045
+ .nexus-dropdown-item[data-disabled] {
2046
+ pointer-events: none;
2047
+ opacity: var(--opacity-disabled-element, 0.4);
2048
+ }
2049
+ .nexus-dropdown-item--danger {
2050
+ color: var(--color-status-danger);
2051
+ }
2052
+ .nexus-dropdown-item--danger[data-highlighted] {
2053
+ background: var(--color-status-danger-dim);
2054
+ color: var(--color-status-danger-intense);
2055
+ }
2056
+ .nexus-dropdown-item__icon {
2057
+ display: inline-flex;
2058
+ flex-shrink: 0;
2059
+ color: var(--color-icon-secondary);
2060
+ }
2061
+ .nexus-dropdown-item--danger .nexus-dropdown-item__icon {
2062
+ color: var(--color-status-danger);
1797
2063
  }
1798
2064
 
1799
2065
  /* ═══════════════════════════════════════════
1800
- Drawer
2066
+ ToggleGroup
1801
2067
  ═══════════════════════════════════════════ */
1802
2068
 
1803
- .nexus-drawer-overlay {
1804
- position: fixed;
1805
- inset: 0;
1806
- z-index: 50;
1807
- background: var(--color-comp-overlay);
1808
- }
1809
- .nexus-drawer-overlay--blur-sm {
1810
- backdrop-filter: blur(4px);
2069
+ .nexus-toggle-group {
2070
+ display: inline-flex;
2071
+ align-items: stretch;
2072
+ position: relative;
2073
+ border-radius: var(--radius-corner-md, 0.5rem);
1811
2074
  }
1812
- .nexus-drawer-overlay--blur-md {
1813
- backdrop-filter: blur(12px);
2075
+ .nexus-toggle-group--default {
2076
+ background: var(--color-surface-subtle);
2077
+ padding: var(--spacing-padding-2xs, 0.25rem);
2078
+ gap: var(--spacing-gap-xs, 0.25rem);
1814
2079
  }
1815
- .nexus-drawer-content {
1816
- position: fixed;
1817
- z-index: 50;
1818
- display: flex;
1819
- flex-direction: column;
2080
+
2081
+ /* ── Sliding indicator ── */
2082
+ .nexus-toggle-group__indicator {
2083
+ position: absolute;
2084
+ top: 0;
2085
+ left: 0;
2086
+ border-radius: var(--radius-corner-sm, 0.25rem);
1820
2087
  background: var(--color-surface-default);
2088
+ box-shadow: var(--shadow-sm);
2089
+ pointer-events: none;
2090
+ z-index: 0;
2091
+ will-change: transform, width;
1821
2092
  }
1822
- .nexus-drawer-content--bottom {
1823
- inset-inline: 0;
1824
- bottom: 0;
2093
+ .nexus-toggle-group__indicator--animated {
2094
+ transition:
2095
+ transform 200ms cubic-bezier(0, 0, 0.2, 1),
2096
+ width 200ms cubic-bezier(0, 0, 0.2, 1);
2097
+ }
2098
+ .nexus-toggle-group--outline {
2099
+ border: 1px solid var(--color-border-default);
2100
+ padding: var(--spacing-padding-2xs, 0.25rem);
2101
+ gap: 0;
2102
+ }
2103
+ .nexus-toggle-group__item {
2104
+ display: inline-flex;
2105
+ align-items: center;
2106
+ justify-content: center;
2107
+ gap: var(--spacing-gap-xs, 0.25rem);
2108
+ border-radius: var(--radius-corner-sm, 0.25rem);
2109
+ border: none;
2110
+ background: transparent;
2111
+ font-size: var(--text-text-sm, 0.875rem);
2112
+ font-weight: var(--font-weight-text-medium-sm, 500);
2113
+ color: var(--color-text-secondary);
2114
+ cursor: pointer;
2115
+ transition: color var(--duration-transition-normal, 200ms) var(--ease-transition-fast);
2116
+ outline: none;
2117
+ position: relative;
2118
+ z-index: 1;
2119
+ }
2120
+ .nexus-toggle-group__item:focus-visible {
2121
+ box-shadow: 0 0 0 2px var(--color-surface-default), 0 0 0 4px var(--color-accent-primary-focus);
2122
+ }
2123
+ .nexus-toggle-group__item[data-disabled] {
2124
+ pointer-events: none;
2125
+ opacity: var(--opacity-disabled-element, 0.4);
2126
+ }
2127
+ .nexus-toggle-group--default .nexus-toggle-group__item[data-state='on'] {
2128
+ color: var(--color-text-primary);
2129
+ }
2130
+ .nexus-toggle-group--outline .nexus-toggle-group__item {
2131
+ padding-inline: var(--spacing-padding-sm, 0.75rem);
2132
+ }
2133
+ .nexus-toggle-group--outline .nexus-toggle-group__item[data-state='on'] {
2134
+ background: var(--color-accent-primary-dim);
2135
+ color: var(--color-accent-primary-intense);
2136
+ }
2137
+ .nexus-toggle-group--outline .nexus-toggle-group__item:not([data-state='on']):hover {
2138
+ background: var(--color-surface-hover);
2139
+ color: var(--color-text-primary);
2140
+ }
2141
+ .nexus-toggle-group--sm .nexus-toggle-group__item {
2142
+ min-height: var(--size-control-sm, 2rem);
2143
+ padding-inline: var(--spacing-padding-sm, 0.75rem);
2144
+ }
2145
+ .nexus-toggle-group--md .nexus-toggle-group__item {
2146
+ min-height: var(--size-control-md, 2.5rem);
2147
+ padding-inline: var(--spacing-padding-md, 1rem);
2148
+ }
2149
+ .nexus-toggle-group--lg .nexus-toggle-group__item {
2150
+ min-height: var(--size-control-lg, 3rem);
2151
+ padding-inline: var(--spacing-padding-lg, 1.5rem);
2152
+ }
2153
+ .nexus-toggle-group__icon {
2154
+ display: inline-flex;
2155
+ flex-shrink: 0;
2156
+ color: var(--color-icon-secondary);
2157
+ }
2158
+ .nexus-toggle-group__item[data-state='on'] .nexus-toggle-group__icon {
2159
+ color: var(--color-icon-primary);
2160
+ }
2161
+
2162
+ /* ═══════════════════════════════════════════
2163
+ Slider
2164
+ ═══════════════════════════════════════════ */
2165
+
2166
+ .nexus-slider-wrapper {
2167
+ display: flex;
2168
+ width: 100%;
2169
+ flex-direction: column;
2170
+ gap: var(--spacing-gap-sm, 0.5rem);
2171
+ }
2172
+ .nexus-slider__header {
2173
+ display: flex;
2174
+ align-items: center;
2175
+ justify-content: space-between;
2176
+ gap: var(--spacing-gap-md, 1rem);
2177
+ }
2178
+ .nexus-slider__label {
2179
+ font-size: var(--text-label-md, 0.875rem);
2180
+ font-weight: var(--font-weight-label-md, 500);
2181
+ color: var(--color-text-primary);
2182
+ }
2183
+ .nexus-slider__value {
2184
+ font-size: var(--text-text-sm, 0.875rem);
2185
+ font-variant-numeric: tabular-nums;
2186
+ color: var(--color-text-secondary);
2187
+ }
2188
+ .nexus-slider {
2189
+ position: relative;
2190
+ display: flex;
2191
+ width: 100%;
2192
+ touch-action: none;
2193
+ user-select: none;
2194
+ align-items: center;
2195
+ }
2196
+ .nexus-slider[data-disabled] {
2197
+ opacity: var(--opacity-disabled-element, 0.4);
2198
+ pointer-events: none;
2199
+ }
2200
+ .nexus-slider__track {
2201
+ position: relative;
2202
+ flex-grow: 1;
2203
+ overflow: hidden;
2204
+ border-radius: var(--radius-corner-full, 9999px);
2205
+ background: var(--color-surface-strong);
2206
+ }
2207
+ .nexus-slider__range {
2208
+ position: absolute;
2209
+ height: 100%;
2210
+ border-radius: var(--radius-corner-full, 9999px);
2211
+ background: var(--color-accent-primary);
2212
+ }
2213
+ .nexus-slider__thumb {
2214
+ display: block;
2215
+ flex-shrink: 0;
2216
+ border-radius: var(--radius-corner-full, 9999px);
2217
+ border: 2px solid var(--color-accent-primary);
2218
+ background: var(--color-surface-default);
2219
+ box-shadow: var(--shadow-sm);
2220
+ outline: none;
2221
+ transition:
2222
+ box-shadow 150ms ease,
2223
+ transform 150ms ease;
2224
+ }
2225
+ .nexus-slider__thumb:hover {
2226
+ box-shadow: var(--shadow-md);
2227
+ }
2228
+ .nexus-slider__thumb:focus-visible {
2229
+ box-shadow:
2230
+ 0 0 0 2px var(--color-surface-default),
2231
+ 0 0 0 4px var(--color-accent-primary-focus);
2232
+ }
2233
+ .nexus-slider--sm .nexus-slider__track {
2234
+ height: 0.25rem;
2235
+ }
2236
+ .nexus-slider--sm .nexus-slider__thumb {
2237
+ width: 0.875rem;
2238
+ height: 0.875rem;
2239
+ }
2240
+ .nexus-slider--md .nexus-slider__track {
2241
+ height: 0.375rem;
2242
+ }
2243
+ .nexus-slider--md .nexus-slider__thumb {
2244
+ width: 1.125rem;
2245
+ height: 1.125rem;
2246
+ }
2247
+ .nexus-slider--lg .nexus-slider__track {
2248
+ height: 0.5rem;
2249
+ }
2250
+ .nexus-slider--lg .nexus-slider__thumb {
2251
+ width: 1.25rem;
2252
+ height: 1.25rem;
2253
+ }
2254
+
2255
+ /* ═══════════════════════════════════════════
2256
+ Tooltip
2257
+ ═══════════════════════════════════════════ */
2258
+
2259
+ .nexus-tooltip-content {
2260
+ z-index: 50;
2261
+ display: flex;
2262
+ overflow: hidden;
2263
+ border-radius: var(--radius-corner-md, 0.375rem);
2264
+ padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
2265
+ font-size: var(--text-text-sm, 0.875rem);
2266
+ }
2267
+ .nexus-tooltip--light {
2268
+ border: 1px solid var(--color-border-default);
2269
+ background: var(--color-static-white);
2270
+ color: var(--color-static-black);
2271
+ box-shadow: var(--shadow-comp-md);
2272
+ }
2273
+ .nexus-tooltip--dark {
2274
+ border: none;
2275
+ background: var(--color-static-black);
2276
+ color: var(--color-static-white);
2277
+ }
2278
+ .nexus-tooltip-arrow--dark {
2279
+ fill: var(--color-static-black);
2280
+ }
2281
+ .nexus-tooltip-arrow--light {
2282
+ fill: var(--color-static-white);
2283
+ }
2284
+ .nexus-tooltip-trigger {
2285
+ cursor: default;
2286
+ }
2287
+
2288
+ /* ═══════════════════════════════════════════
2289
+ Popover
2290
+ ═══════════════════════════════════════════ */
2291
+
2292
+ .nexus-popover-content {
2293
+ z-index: 50;
2294
+ border-radius: var(--radius-corner-lg, 0.5rem);
2295
+ border: 1px solid var(--color-border-default);
2296
+ padding: var(--spacing-padding-md, 1rem);
2297
+ box-shadow: var(--shadow-comp-lg);
2298
+ outline: none;
2299
+ background: var(--color-surface-default);
2300
+ color: var(--color-text-primary);
2301
+ transform-origin: var(--radix-popover-content-transform-origin);
2302
+ will-change: transform, opacity;
2303
+ }
2304
+ .nexus-popover-content[data-state='open'] {
2305
+ animation: nexus-popover-in 150ms ease-out;
2306
+ }
2307
+ .nexus-popover-content[data-state='closed'] {
2308
+ animation: nexus-popover-out 100ms ease-in forwards;
2309
+ }
2310
+ @keyframes nexus-popover-in {
2311
+ from {
2312
+ opacity: 0;
2313
+ transform: scale(0.95);
2314
+ }
2315
+ to {
2316
+ opacity: 1;
2317
+ transform: scale(1);
2318
+ }
2319
+ }
2320
+ @keyframes nexus-popover-out {
2321
+ from {
2322
+ opacity: 1;
2323
+ transform: scale(1);
2324
+ }
2325
+ to {
2326
+ opacity: 0;
2327
+ transform: scale(0.95);
2328
+ }
2329
+ }
2330
+ .nexus-popover-arrow {
2331
+ fill: var(--color-surface-default);
2332
+ }
2333
+
2334
+ /* ═══════════════════════════════════════════
2335
+ Drawer
2336
+ ═══════════════════════════════════════════ */
2337
+
2338
+ .nexus-drawer-overlay {
2339
+ position: fixed;
2340
+ inset: 0;
2341
+ z-index: 50;
2342
+ background: var(--color-comp-overlay);
2343
+ }
2344
+ .nexus-drawer-overlay--blur-sm {
2345
+ backdrop-filter: blur(4px);
2346
+ }
2347
+ .nexus-drawer-overlay--blur-md {
2348
+ backdrop-filter: blur(12px);
2349
+ }
2350
+ .nexus-drawer-content {
2351
+ position: fixed;
2352
+ z-index: 50;
2353
+ display: flex;
2354
+ flex-direction: column;
2355
+ background: var(--color-surface-default);
2356
+ }
2357
+ .nexus-drawer-content--bottom {
2358
+ inset-inline: 0;
2359
+ bottom: 0;
1825
2360
  margin-top: 6rem;
1826
2361
  border-top-left-radius: 1rem;
1827
2362
  border-top-right-radius: 1rem;
@@ -2751,4 +3286,590 @@
2751
3286
  }
2752
3287
  }
2753
3288
 
3289
+ /* ═══════════════════════════════════════════
3290
+ EmptyState
3291
+ ═══════════════════════════════════════════ */
3292
+
3293
+ .nexus-empty-state {
3294
+ display: flex;
3295
+ flex-direction: column;
3296
+ align-items: center;
3297
+ justify-content: center;
3298
+ text-align: center;
3299
+ gap: var(--spacing-gap-sm, 0.5rem);
3300
+ padding: var(--spacing-padding-lg, 1.5rem);
3301
+ color: var(--color-text-primary);
3302
+ }
3303
+ .nexus-empty-state__icon {
3304
+ display: flex;
3305
+ align-items: center;
3306
+ justify-content: center;
3307
+ margin-bottom: var(--spacing-gap-xs, 0.25rem);
3308
+ color: var(--color-icon-muted);
3309
+ }
3310
+ .nexus-empty-state__default-icon {
3311
+ width: var(--size-icon-xl, 2rem);
3312
+ height: var(--size-icon-xl, 2rem);
3313
+ }
3314
+ .nexus-empty-state--sm .nexus-empty-state__default-icon {
3315
+ width: var(--size-icon-lg, 1.5rem);
3316
+ height: var(--size-icon-lg, 1.5rem);
3317
+ }
3318
+ .nexus-empty-state--lg .nexus-empty-state__default-icon {
3319
+ width: var(--size-control-md, 2.5rem);
3320
+ height: var(--size-control-md, 2.5rem);
3321
+ }
3322
+ .nexus-empty-state__title {
3323
+ margin: 0;
3324
+ font-size: var(--text-heading-h6, 1rem);
3325
+ font-weight: var(--font-weight-heading-h6, 600);
3326
+ letter-spacing: var(--letter-spacing-heading-h6, 0);
3327
+ color: var(--color-text-primary);
3328
+ }
3329
+ .nexus-empty-state__description {
3330
+ margin: 0;
3331
+ max-width: 24rem;
3332
+ font-size: var(--text-text-sm, 0.875rem);
3333
+ font-weight: var(--font-weight-text-sm, 400);
3334
+ letter-spacing: var(--letter-spacing-text-sm, -0.01em);
3335
+ color: var(--color-text-secondary);
3336
+ }
3337
+ .nexus-empty-state__action {
3338
+ margin-top: var(--spacing-gap-sm, 0.5rem);
3339
+ }
3340
+ .nexus-empty-state--sm {
3341
+ padding: var(--spacing-padding-md, 1rem);
3342
+ gap: var(--spacing-gap-xs, 0.25rem);
3343
+ }
3344
+ .nexus-empty-state--sm .nexus-empty-state__title {
3345
+ font-size: var(--text-text-semibold-sm, 0.875rem);
3346
+ }
3347
+ .nexus-empty-state--sm .nexus-empty-state__description {
3348
+ font-size: var(--text-text-xs, 0.75rem);
3349
+ }
3350
+ .nexus-empty-state--lg {
3351
+ padding: var(--spacing-padding-xl, 2rem);
3352
+ gap: var(--spacing-gap-md, 1rem);
3353
+ }
3354
+ .nexus-empty-state--lg .nexus-empty-state__title {
3355
+ font-size: var(--text-heading-h5, 1.125rem);
3356
+ }
3357
+
3358
+ /* ═══════════════════════════════════════════
3359
+ Breadcrumb
3360
+ ═══════════════════════════════════════════ */
3361
+
3362
+ .nexus-breadcrumb {
3363
+ font-size: var(--text-text-sm, 0.875rem);
3364
+ line-height: 1.25;
3365
+ }
3366
+ .nexus-breadcrumb__list {
3367
+ display: flex;
3368
+ flex-wrap: wrap;
3369
+ align-items: center;
3370
+ list-style: none;
3371
+ margin: 0;
3372
+ padding: 0;
3373
+ gap: 0;
3374
+ }
3375
+ .nexus-breadcrumb__item {
3376
+ display: inline-flex;
3377
+ align-items: center;
3378
+ }
3379
+ .nexus-breadcrumb__separator {
3380
+ display: inline-flex;
3381
+ align-items: center;
3382
+ margin: 0 var(--spacing-gap-xs, 0.25rem);
3383
+ color: var(--color-icon-tertiary);
3384
+ user-select: none;
3385
+ }
3386
+ .nexus-breadcrumb__separator-icon {
3387
+ width: var(--size-icon-xs, 0.75rem);
3388
+ height: var(--size-icon-xs, 0.75rem);
3389
+ }
3390
+ .nexus-breadcrumb__link {
3391
+ color: var(--color-text-secondary);
3392
+ text-decoration: none;
3393
+ transition: color 150ms ease;
3394
+ }
3395
+ .nexus-breadcrumb__link:hover {
3396
+ color: var(--color-text-primary);
3397
+ }
3398
+ .nexus-breadcrumb__link--btn {
3399
+ border: none;
3400
+ background: none;
3401
+ cursor: pointer;
3402
+ font: inherit;
3403
+ padding: 0;
3404
+ }
3405
+ .nexus-breadcrumb__current {
3406
+ color: var(--color-text-primary);
3407
+ font-weight: var(--font-weight-text-medium-sm, 500);
3408
+ }
3409
+ .nexus-breadcrumb__ellipsis {
3410
+ color: var(--color-text-tertiary);
3411
+ user-select: none;
3412
+ }
3413
+
3414
+ /* ═══════════════════════════════════════════
3415
+ Stepper
3416
+ ═══════════════════════════════════════════ */
3417
+
3418
+ .nexus-stepper {
3419
+ width: 100%;
3420
+ }
3421
+
3422
+ /* ── Horizontal ── */
3423
+ .nexus-stepper--horizontal {
3424
+ display: flex;
3425
+ flex-direction: row;
3426
+ align-items: flex-start;
3427
+ }
3428
+ .nexus-stepper--horizontal .nexus-stepper__step {
3429
+ flex: 1;
3430
+ min-width: 0;
3431
+ display: flex;
3432
+ flex-direction: column;
3433
+ align-items: center;
3434
+ text-align: center;
3435
+ }
3436
+ .nexus-stepper--horizontal .nexus-stepper__indicator-wrap {
3437
+ display: flex;
3438
+ flex-direction: row;
3439
+ align-items: center;
3440
+ width: 100%;
3441
+ justify-content: center;
3442
+ }
3443
+ .nexus-stepper--horizontal .nexus-stepper__connector {
3444
+ flex: 1;
3445
+ height: 2px;
3446
+ background: var(--color-border-default);
3447
+ transition: background var(--duration-transition-normal, 200ms) var(--ease-transition-normal);
3448
+ }
3449
+ .nexus-stepper--horizontal .nexus-stepper__connector--hidden {
3450
+ visibility: hidden;
3451
+ }
3452
+ .nexus-stepper--horizontal .nexus-stepper__connector--completed {
3453
+ background: var(--color-accent-primary);
3454
+ }
3455
+ .nexus-stepper--horizontal .nexus-stepper__content {
3456
+ margin-top: var(--spacing-gap-sm, 0.5rem);
3457
+ padding: 0 var(--spacing-padding-2xs, 0.25rem);
3458
+ }
3459
+
3460
+ /* ── Vertical ── */
3461
+ .nexus-stepper--vertical {
3462
+ display: flex;
3463
+ flex-direction: column;
3464
+ gap: 0;
3465
+ }
3466
+ .nexus-stepper--vertical .nexus-stepper__step {
3467
+ display: flex;
3468
+ flex-direction: row;
3469
+ align-items: stretch;
3470
+ gap: var(--spacing-gap-sm, 0.5rem);
3471
+ }
3472
+ .nexus-stepper--vertical .nexus-stepper__indicator-wrap {
3473
+ display: flex;
3474
+ flex-direction: column;
3475
+ align-items: center;
3476
+ flex-shrink: 0;
3477
+ }
3478
+ .nexus-stepper--vertical .nexus-stepper__connector {
3479
+ width: 2px;
3480
+ flex: 1;
3481
+ min-height: var(--spacing-padding-sm, 0.75rem);
3482
+ background: var(--color-border-default);
3483
+ transition: background var(--duration-transition-normal, 200ms) var(--ease-transition-normal);
3484
+ }
3485
+ .nexus-stepper--vertical .nexus-stepper__connector--completed {
3486
+ background: var(--color-accent-primary);
3487
+ }
3488
+ .nexus-stepper--vertical .nexus-stepper__content {
3489
+ padding: var(--spacing-padding-xs, 0.5rem) 0;
3490
+ }
3491
+
3492
+ /* ── Indicator (공통) ── */
3493
+ .nexus-stepper__indicator {
3494
+ display: inline-flex;
3495
+ align-items: center;
3496
+ justify-content: center;
3497
+ flex-shrink: 0;
3498
+ width: var(--size-control-sm, 2rem);
3499
+ height: var(--size-control-sm, 2rem);
3500
+ border-radius: var(--radius-corner-full, 9999px);
3501
+ border: 2px solid var(--color-border-medium);
3502
+ background: var(--color-surface-default);
3503
+ font-size: var(--text-text-sm, 0.875rem);
3504
+ font-weight: var(--font-weight-text-medium-sm, 500);
3505
+ color: var(--color-text-secondary);
3506
+ transition: all var(--duration-transition-normal, 200ms) var(--ease-transition-normal);
3507
+ }
3508
+ .nexus-stepper--sm .nexus-stepper__indicator {
3509
+ width: 1.75rem;
3510
+ height: 1.75rem;
3511
+ font-size: var(--text-text-xs, 0.75rem);
3512
+ }
3513
+ .nexus-stepper__check {
3514
+ width: var(--size-icon-sm, 1rem);
3515
+ height: var(--size-icon-sm, 1rem);
3516
+ }
3517
+ .nexus-stepper--sm .nexus-stepper__check {
3518
+ width: var(--size-icon-xs, 0.75rem);
3519
+ height: var(--size-icon-xs, 0.75rem);
3520
+ }
3521
+
3522
+ /* ── State colors ── */
3523
+ .nexus-stepper__step--completed .nexus-stepper__indicator {
3524
+ border-color: var(--color-accent-primary);
3525
+ background: var(--color-accent-primary);
3526
+ color: var(--color-accent-on-primary);
3527
+ }
3528
+ .nexus-stepper__step--active .nexus-stepper__indicator {
3529
+ border-color: var(--color-accent-primary);
3530
+ color: var(--color-accent-primary);
3531
+ background: var(--color-surface-default);
3532
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-accent-primary) 20%, transparent);
3533
+ }
3534
+ .nexus-stepper__step--error .nexus-stepper__indicator {
3535
+ border-color: var(--color-status-danger);
3536
+ color: var(--color-status-danger);
3537
+ background: var(--color-surface-default);
3538
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-status-danger) 20%, transparent);
3539
+ }
3540
+ .nexus-stepper__step--pending .nexus-stepper__indicator {
3541
+ border-color: var(--color-border-default);
3542
+ color: var(--color-text-tertiary);
3543
+ }
3544
+
3545
+ /* ── Labels ── */
3546
+ .nexus-stepper__label {
3547
+ display: block;
3548
+ font-size: var(--text-text-sm, 0.875rem);
3549
+ font-weight: var(--font-weight-text-medium-sm, 500);
3550
+ color: var(--color-text-primary);
3551
+ }
3552
+ .nexus-stepper--sm .nexus-stepper__label {
3553
+ font-size: var(--text-text-xs, 0.75rem);
3554
+ }
3555
+ .nexus-stepper__description {
3556
+ display: block;
3557
+ margin-top: var(--spacing-gap-xs, 0.25rem);
3558
+ font-size: var(--text-text-xs, 0.75rem);
3559
+ color: var(--color-text-secondary);
3560
+ }
3561
+ .nexus-stepper__step--pending .nexus-stepper__label {
3562
+ color: var(--color-text-secondary);
3563
+ }
3564
+ .nexus-stepper__step--pending .nexus-stepper__description {
3565
+ color: var(--color-text-muted);
3566
+ }
3567
+
3568
+ /* ═══════════════════════════════════════════
3569
+ TagInput
3570
+ ═══════════════════════════════════════════ */
3571
+
3572
+ .nexus-tag-input-wrapper {
3573
+ display: flex;
3574
+ flex-direction: column;
3575
+ gap: var(--spacing-gap-xs, 0.25rem);
3576
+ }
3577
+ .nexus-tag-input__label {
3578
+ font-size: var(--text-label-md, 0.875rem);
3579
+ font-weight: var(--font-weight-label-md, 500);
3580
+ color: var(--color-text-primary);
3581
+ }
3582
+ .nexus-tag-input {
3583
+ display: flex;
3584
+ flex-wrap: wrap;
3585
+ align-items: center;
3586
+ gap: var(--spacing-gap-xs, 0.25rem);
3587
+ padding: var(--spacing-padding-xs, 0.5rem);
3588
+ border: var(--border-width-stroke-default, 1px) solid var(--color-border-default);
3589
+ border-radius: var(--radius-corner-md, 0.5rem);
3590
+ background: var(--color-surface-default);
3591
+ cursor: text;
3592
+ transition: border-color 150ms ease;
3593
+ }
3594
+ .nexus-tag-input:focus-within {
3595
+ border-color: var(--color-border-default-focus, var(--color-accent-primary));
3596
+ }
3597
+ .nexus-tag-input--disabled {
3598
+ opacity: var(--opacity-disabled-element, 0.4);
3599
+ cursor: not-allowed;
3600
+ pointer-events: none;
3601
+ }
3602
+ .nexus-tag-input--sm {
3603
+ padding: var(--spacing-padding-2xs, 0.25rem);
3604
+ gap: 0.125rem;
3605
+ font-size: var(--text-text-xs, 0.75rem);
3606
+ }
3607
+ .nexus-tag-input--md {
3608
+ font-size: var(--text-text-sm, 0.875rem);
3609
+ }
3610
+ .nexus-tag-input--lg {
3611
+ padding: var(--spacing-padding-sm, 0.75rem);
3612
+ font-size: var(--text-text-base, 1rem);
3613
+ }
3614
+ .nexus-tag-input__tag {
3615
+ display: inline-flex;
3616
+ align-items: center;
3617
+ gap: 0.25rem;
3618
+ padding: 0.125rem 0.5rem;
3619
+ border-radius: var(--radius-corner-sm, 0.25rem);
3620
+ background: var(--color-surface-subtle);
3621
+ color: var(--color-text-primary);
3622
+ font-size: inherit;
3623
+ line-height: 1.5;
3624
+ white-space: nowrap;
3625
+ }
3626
+ .nexus-tag-input__tag-close {
3627
+ display: inline-flex;
3628
+ align-items: center;
3629
+ justify-content: center;
3630
+ border: none;
3631
+ background: transparent;
3632
+ cursor: pointer;
3633
+ padding: 0;
3634
+ margin: 0;
3635
+ color: var(--color-icon-tertiary);
3636
+ transition: color 150ms;
3637
+ }
3638
+ .nexus-tag-input__tag-close:hover {
3639
+ color: var(--color-icon-primary);
3640
+ }
3641
+ .nexus-tag-input__tag-close-icon {
3642
+ width: 0.75rem;
3643
+ height: 0.75rem;
3644
+ }
3645
+ .nexus-tag-input__input {
3646
+ flex: 1;
3647
+ min-width: 4rem;
3648
+ border: none;
3649
+ outline: none;
3650
+ background: transparent;
3651
+ font: inherit;
3652
+ color: var(--color-text-primary);
3653
+ padding: 0.125rem 0;
3654
+ }
3655
+ .nexus-tag-input__input::placeholder {
3656
+ color: var(--color-text-muted);
3657
+ }
3658
+ .nexus-tag-input__description {
3659
+ font-size: var(--text-text-xs, 0.75rem);
3660
+ color: var(--color-text-secondary);
3661
+ }
3662
+
3663
+ /* ═══════════════════════════════════════════
3664
+ NxImage
3665
+ ═══════════════════════════════════════════ */
3666
+
3667
+ .nexus-image {
3668
+ position: relative;
3669
+ overflow: hidden;
3670
+ display: block;
3671
+ background: var(--color-surface-subtle);
3672
+ }
3673
+ .nexus-image__fallback {
3674
+ display: flex;
3675
+ align-items: center;
3676
+ justify-content: center;
3677
+ width: 100%;
3678
+ height: 100%;
3679
+ min-height: 4rem;
3680
+ color: var(--color-icon-muted);
3681
+ }
3682
+ .nexus-image__fallback-icon {
3683
+ width: var(--size-icon-xl, 2rem);
3684
+ height: var(--size-icon-xl, 2rem);
3685
+ }
3686
+ .nexus-image__skeleton {
3687
+ position: absolute;
3688
+ inset: 0;
3689
+ background: linear-gradient(90deg, var(--color-surface-subtle) 25%, var(--color-surface-default) 50%, var(--color-surface-subtle) 75%);
3690
+ background-size: 200% 100%;
3691
+ animation: nexus-shimmer 1.5s infinite;
3692
+ }
3693
+ .nexus-image__img {
3694
+ display: block;
3695
+ width: 100%;
3696
+ height: 100%;
3697
+ opacity: 0;
3698
+ transition: opacity 300ms ease;
3699
+ }
3700
+ .nexus-image__img--loaded {
3701
+ opacity: 1;
3702
+ }
3703
+ .nexus-image__img--cover {
3704
+ object-fit: cover;
3705
+ }
3706
+ .nexus-image__img--contain {
3707
+ object-fit: contain;
3708
+ }
3709
+ .nexus-image__img--fill {
3710
+ object-fit: fill;
3711
+ }
3712
+ .nexus-image__img--none {
3713
+ object-fit: none;
3714
+ }
3715
+
3716
+ @keyframes nexus-shimmer {
3717
+ 0% { background-position: -200% 0; }
3718
+ 100% { background-position: 200% 0; }
3719
+ }
3720
+
3721
+ /* ═══════════════════════════════════════════
3722
+ DatePicker / Calendar
3723
+ ═══════════════════════════════════════════ */
3724
+
3725
+ .nexus-datepicker {
3726
+ position: relative;
3727
+ display: inline-block;
3728
+ }
3729
+ .nexus-datepicker__trigger {
3730
+ display: inline-flex;
3731
+ align-items: center;
3732
+ gap: var(--spacing-gap-sm, 0.5rem);
3733
+ padding: var(--spacing-padding-xs, 0.5rem) var(--spacing-padding-sm, 0.75rem);
3734
+ border: var(--border-width-stroke-default, 1px) solid var(--color-border-default);
3735
+ border-radius: var(--radius-corner-md, 0.5rem);
3736
+ background: var(--color-surface-default);
3737
+ font: inherit;
3738
+ font-size: var(--text-text-sm, 0.875rem);
3739
+ color: var(--color-text-primary);
3740
+ cursor: pointer;
3741
+ transition: border-color 150ms;
3742
+ min-width: 10rem;
3743
+ }
3744
+ .nexus-datepicker__trigger:hover {
3745
+ border-color: var(--color-border-default-hover);
3746
+ }
3747
+ .nexus-datepicker__trigger:disabled {
3748
+ opacity: var(--opacity-disabled-element, 0.4);
3749
+ cursor: not-allowed;
3750
+ }
3751
+ .nexus-datepicker__trigger--placeholder span {
3752
+ color: var(--color-text-muted);
3753
+ }
3754
+ .nexus-datepicker__icon {
3755
+ width: var(--size-icon-sm, 1rem);
3756
+ height: var(--size-icon-sm, 1rem);
3757
+ flex-shrink: 0;
3758
+ color: var(--color-icon-secondary);
3759
+ }
3760
+ .nexus-datepicker__popover {
3761
+ position: absolute;
3762
+ top: calc(100% + 4px);
3763
+ left: 0;
3764
+ z-index: var(--z-index-layer-popover, 30);
3765
+ background: var(--color-surface-default);
3766
+ border: var(--border-width-stroke-default, 1px) solid var(--color-border-default);
3767
+ border-radius: var(--radius-corner-lg, 0.75rem);
3768
+ box-shadow: var(--shadow-lg, 0 2px 8px -1px rgb(0 0 0 / 0.12));
3769
+ padding: var(--spacing-padding-sm, 0.75rem);
3770
+ animation: nexus-fade-in 150ms ease;
3771
+ }
3772
+
3773
+ .nexus-calendar {
3774
+ font-size: var(--text-text-sm, 0.875rem);
3775
+ }
3776
+ .nexus-calendar__months {
3777
+ display: flex;
3778
+ flex-direction: column;
3779
+ gap: var(--spacing-gap-sm, 0.5rem);
3780
+ }
3781
+ .nexus-calendar__caption {
3782
+ display: flex;
3783
+ justify-content: center;
3784
+ align-items: center;
3785
+ padding: var(--spacing-padding-2xs, 0.25rem) 0;
3786
+ font-weight: var(--font-weight-text-semibold-sm, 600);
3787
+ color: var(--color-text-primary);
3788
+ }
3789
+ .nexus-calendar__nav {
3790
+ display: flex;
3791
+ gap: var(--spacing-gap-xs, 0.25rem);
3792
+ }
3793
+ .nexus-calendar__nav-btn {
3794
+ display: inline-flex;
3795
+ align-items: center;
3796
+ justify-content: center;
3797
+ width: var(--size-control-sm, 2rem);
3798
+ height: var(--size-control-sm, 2rem);
3799
+ border: none;
3800
+ background: transparent;
3801
+ border-radius: var(--radius-corner-sm, 0.25rem);
3802
+ cursor: pointer;
3803
+ color: var(--color-icon-secondary);
3804
+ transition: background 150ms;
3805
+ }
3806
+ .nexus-calendar__nav-btn:hover {
3807
+ background: var(--color-surface-default-hover);
3808
+ }
3809
+ .nexus-calendar__grid {
3810
+ width: 100%;
3811
+ border-collapse: collapse;
3812
+ }
3813
+ .nexus-calendar__head-row {
3814
+ display: flex;
3815
+ }
3816
+ .nexus-calendar__head-cell {
3817
+ width: var(--size-control-sm, 2rem);
3818
+ text-align: center;
3819
+ font-size: var(--text-text-xs, 0.75rem);
3820
+ font-weight: var(--font-weight-text-medium-xs, 500);
3821
+ color: var(--color-text-tertiary);
3822
+ padding: var(--spacing-padding-2xs, 0.25rem) 0;
3823
+ }
3824
+ .nexus-calendar__row {
3825
+ display: flex;
3826
+ }
3827
+ .nexus-calendar__cell {
3828
+ text-align: center;
3829
+ }
3830
+ .nexus-calendar__day {
3831
+ display: inline-flex;
3832
+ align-items: center;
3833
+ justify-content: center;
3834
+ width: var(--size-control-sm, 2rem);
3835
+ height: var(--size-control-sm, 2rem);
3836
+ border: none;
3837
+ background: transparent;
3838
+ border-radius: var(--radius-corner-sm, 0.25rem);
3839
+ cursor: pointer;
3840
+ font: inherit;
3841
+ font-size: var(--text-text-sm, 0.875rem);
3842
+ color: var(--color-text-primary);
3843
+ transition: background 150ms, color 150ms;
3844
+ }
3845
+ .nexus-calendar__day:hover {
3846
+ background: var(--color-surface-default-hover);
3847
+ }
3848
+ .nexus-calendar__day--selected {
3849
+ background: var(--color-accent-primary);
3850
+ color: var(--color-accent-on-primary);
3851
+ }
3852
+ .nexus-calendar__day--selected:hover {
3853
+ background: var(--color-accent-primary-hover);
3854
+ }
3855
+ .nexus-calendar__day--today {
3856
+ font-weight: var(--font-weight-text-semibold-sm, 600);
3857
+ border: var(--border-width-stroke-default, 1px) solid var(--color-accent-primary);
3858
+ }
3859
+ .nexus-calendar__day--outside {
3860
+ color: var(--color-text-muted);
3861
+ opacity: 0.5;
3862
+ }
3863
+ .nexus-calendar__day--disabled {
3864
+ color: var(--color-text-muted);
3865
+ opacity: var(--opacity-disabled-element, 0.4);
3866
+ cursor: not-allowed;
3867
+ pointer-events: none;
3868
+ }
3869
+
3870
+ @keyframes nexus-fade-in {
3871
+ from { opacity: 0; transform: translateY(-4px); }
3872
+ to { opacity: 1; transform: translateY(0); }
3873
+ }
3874
+
2754
3875
  }