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