@nordcode/ui 2.0.6 → 2.1.1

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.
package/out/complete.css CHANGED
@@ -307,14 +307,8 @@
307
307
  border-width: 0;
308
308
  }
309
309
 
310
- @media (prefers-reduced-motion: no-preference) {
311
- :where(:focus-visible) {
312
- transition: outline-offset var(--transition-duration-short) var(--ease-2);
313
- }
314
-
315
- :where(:not(:active):focus-visible) {
316
- transition-duration: var(--transition-duration-base);
317
- }
310
+ :where(:focus-visible) {
311
+ transition: outline-offset var(--transition-duration-quick-1) var(--ease-2);
318
312
  }
319
313
 
320
314
  :where(:not(:active):focus-visible) {
@@ -1193,21 +1187,37 @@
1193
1187
  --ease-bounce-3: linear(0, .004, .016, .035, .062, .098, .141 11.4%, .25, .39, .562, .764, 1 30.3%, .847 34.8%, .787, .737, .699, .672, .655, .65, .656, .672, .699, .738, .787, .847 61.7%, 1 66.2%, .946, .908, .885 74.2%, .879, .878, .879, .885 79.5%, .908, .946, 1 87.4%, .981, .968, .96, .957, .96, .968, .981, 1);
1194
1188
  --ease-bounce-4: linear(0, .004, .016 3%, .062, .141, .25, .391, .562 18.2%, 1 24.3%, .81, .676 32.3%, .629, .595, .575, .568, .575, .595, .629, .676 48.2%, .811, 1 56.2%, .918, .86, .825, .814, .825, .86, .918, 1 77.2%, .94 80.6%, .925, .92, .925, .94 87.5%, 1 90.9%, .974, .965, .974, 1);
1195
1189
  --ease-bounce-5: linear(0, .004, .016 2.5%, .063, .141, .25 10.1%, .562, 1 20.2%, .783, .627, .534 30.9%, .511, .503, .511, .534 38%, .627, .782, 1 48.7%, .892, .815, .769 56.3%, .757, .753, .757, .769 61.3%, .815, .892, 1 68.8%, .908 72.4%, .885, .878, .885, .908 79.4%, 1 83%, .954 85.5%, .943, .939, .943, .954 90.5%, 1 93%, .977, .97, .977, 1);
1190
+ --easing-entry: cubic-bezier(.1, 0, 0, 1);
1191
+ --easing-exit: cubic-bezier(.3, 0, 1, .8);
1196
1192
  --transition-duration-instant: 0s;
1197
- --transition-duration-short: .1s;
1198
- --transition-duration-base: .2s;
1199
- --transition-duration-long: .3s;
1193
+ --transition-duration-quick-1: 80ms;
1194
+ --transition-duration-quick-2: .12s;
1195
+ --transition-duration-moderate-1: .18s;
1196
+ --transition-duration-moderate-2: .26s;
1197
+ --transition-duration-gentle-1: .32s;
1198
+ --transition-duration-gentle-2: .42s;
1199
+ --transition-duration-short: var(--transition-duration-quick-1);
1200
+ --transition-duration-base: var(--transition-duration-moderate-1);
1201
+ --transition-duration-long: var(--transition-duration-gentle-1);
1200
1202
  --transition-duration-entry: 0s;
1201
1203
  --transition-duration-exit: 0s;
1202
1204
  --transition-target-scale: .9;
1205
+ --animated-element-distance: 0;
1206
+ --animated-element-width: 0;
1207
+ --animated-element-height: 0;
1208
+ --transition-duration-calculated: calc(( .5 * var(--animated-element-distance, 0) + .35 * var(--animated-element-width, 0) + .3 * var(--animated-element-height, 0)) * 1ms);
1203
1209
  }
1204
1210
 
1205
1211
  @media (prefers-reduced-motion: reduce) {
1206
1212
  :where(html) {
1213
+ --transition-duration-quick-1: 80ms;
1214
+ --transition-duration-quick-2: .12s;
1215
+ --transition-duration-moderate-1: .18s;
1216
+ --transition-duration-moderate-2: .26s;
1217
+ --transition-duration-gentle-1: .32s;
1218
+ --transition-duration-gentle-2: .42s;
1219
+ --transition-duration-calculated: 0;
1207
1220
  --transition-duration-instant: 0s;
1208
- --transition-duration-short: 0s;
1209
- --transition-duration-base: 0s;
1210
- --transition-duration-long: 0s;
1211
1221
  --transition-duration-entry: 0s;
1212
1222
  --transition-duration-exit: 0s;
1213
1223
  }
@@ -1330,6 +1340,14 @@
1330
1340
  }
1331
1341
  }
1332
1342
 
1343
+ @layer helpers.conditionalRadius {
1344
+ :where(html) {
1345
+ --border-radius-cond-small: clamp(0px, calc(100vw - 100%) * 100000, var(--border-radius-small));
1346
+ --border-radius-cond-medium: clamp(0px, calc(100vw - 100%) * 100000, var(--border-radius-medium));
1347
+ --border-radius-cond-large: clamp(0px, calc(100vw - 100%) * 100000, var(--border-radius-large));
1348
+ }
1349
+ }
1350
+
1333
1351
  :where(.text-assistive, .sr-only) {
1334
1352
  clip: rect(0 0 0 0);
1335
1353
  white-space: nowrap;
@@ -1516,7 +1534,7 @@
1516
1534
  }
1517
1535
 
1518
1536
  @layer components.buttons {
1519
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), input[type="file"], .nc-button) {
1537
+ :where(button, button, input[type="button"], input[type="submit"], input[type="reset"], input[type="file"], .nc-button) {
1520
1538
  --_button-background: var(--button-background, var(--surface-hover));
1521
1539
  --_button-color: var(--button-color, var(--text-hover));
1522
1540
  --_button-border-color: var(--button-border-color, var(--surface-hover));
@@ -1539,7 +1557,6 @@
1539
1557
  font-weight: var(--font-weight-default);
1540
1558
  font-size: inherit;
1541
1559
  cursor: pointer;
1542
- box-sizing: border-box;
1543
1560
  text-align: center;
1544
1561
  transition: var(--transition-duration-base) var(--ease-2);
1545
1562
  -webkit-text-decoration: unset;
@@ -1547,31 +1564,36 @@
1547
1564
  box-shadow: var(--_button-box-shadow);
1548
1565
  -webkit-user-select: none;
1549
1566
  user-select: none;
1567
+ justify-content: center;
1568
+ align-items: center;
1569
+ gap: var(--control-spacing-tiny, .25em);
1550
1570
  -webkit-tap-highlight-color: transparent;
1551
1571
  -webkit-touch-callout: none;
1552
1572
  line-height: var(--line-height-base);
1553
- justify-content: center;
1554
- align-items: center;
1555
1573
  padding-block: 0;
1556
1574
  transition-property: box-shadow, transform;
1557
1575
  display: inline-flex;
1558
1576
  position: relative;
1559
1577
  }
1560
1578
 
1561
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button):hover {
1579
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button):hover {
1562
1580
  background: var(--_button-background-hover);
1563
1581
  color: var(--_button-color-hover);
1564
1582
  border-color: var(--_button-border-color-hover);
1565
1583
  box-shadow: var(--_button-hover-shadow);
1566
1584
  }
1567
1585
 
1568
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button)[aria-pressed="true"] {
1586
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button)[aria-pressed="true"] {
1569
1587
  box-shadow: none;
1570
1588
  font-weight: var(--font-weight-active);
1571
1589
  transform: none;
1572
1590
  }
1573
1591
 
1574
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button):is(:active, .-active) {
1592
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button) > svg {
1593
+ pointer-events: none;
1594
+ }
1595
+
1596
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button):is(:active, .-active) {
1575
1597
  background-color: var(--_button-background-hover);
1576
1598
  color: var(--_button-color-hover);
1577
1599
  border-color: var(--_button-border-color-hover);
@@ -1582,58 +1604,45 @@
1582
1604
  transform: none;
1583
1605
  }
1584
1606
 
1585
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button)[disabled] {
1586
- --_button-border-color-hover: var(--_button-border-color);
1587
- filter: contrast(.72) opacity(.72);
1588
- cursor: not-allowed;
1589
- --_button-background: none !important;
1590
- --_button-background-hover: none !important;
1591
- --_button-color: var(--color-text-subtle) !important;
1592
- --_button-color-hover: var(--_button-color) !important;
1593
- --_button-border-color: var(--color-text-subtle) !important;
1594
- box-shadow: none !important;
1595
- transform: none !important;
1596
- }
1597
-
1598
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-outline {
1607
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button).-outline {
1599
1608
  color: var(--text);
1600
1609
  border-color: var(--border);
1601
1610
  background-color: #0000;
1602
1611
  }
1603
1612
 
1604
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-outline:hover {
1613
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button).-outline:hover {
1605
1614
  background-color: var(--_button-background-hover-light);
1606
1615
  color: var(--text);
1607
1616
  border-color: var(--border-hover);
1608
1617
  }
1609
1618
 
1610
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-stealth {
1619
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button).-stealth {
1611
1620
  color: var(--text);
1612
1621
  background-color: #0000;
1613
1622
  border-color: #0000;
1614
1623
  }
1615
1624
 
1616
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-stealth:hover {
1625
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button).-stealth:hover {
1617
1626
  background-color: var(--_button-background-hover-light);
1618
1627
  color: var(--text);
1619
1628
  border-color: #0000;
1620
1629
  }
1621
1630
 
1622
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-stealth {
1631
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button).-stealth {
1623
1632
  box-shadow: none !important;
1624
1633
  transform: none !important;
1625
1634
  }
1626
1635
 
1627
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-small {
1636
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button).-small {
1628
1637
  --_button-padding-inline: var(--control-spacing-near, .5em);
1629
1638
  min-block-size: var(--control-height-small);
1630
1639
  }
1631
1640
 
1632
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-round {
1641
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button).-round {
1633
1642
  --_button-border-radius: var(--border-radius-round);
1634
1643
  }
1635
1644
 
1636
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-offset {
1645
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button).-offset {
1637
1646
  --_button-offset-distance: var(--button-offset-distance, calc(-1 * var(--control-spacing-minimal)));
1638
1647
  --_button-offset-distance-hover: var(--button-offset-distance-hover, calc(-.5 * var(--control-spacing-minimal)));
1639
1648
  --_button-transform: translate(var(--_button-offset-distance), var(--_button-offset-distance));
@@ -1645,22 +1654,26 @@
1645
1654
  inset-inline-start: calc(var(--_button-offset-distance) * -1);
1646
1655
  }
1647
1656
 
1648
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-offset:hover {
1657
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button).-offset:hover {
1649
1658
  transform: var(--_button-hover-transform);
1650
1659
  }
1651
1660
 
1652
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button):has(svg) {
1653
- gap: var(--control-spacing-tiny, .25em);
1661
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button).-icon.-small {
1662
+ padding: 0;
1663
+ }
1664
+
1665
+ :where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button).-aligned {
1666
+ margin-inline: calc(-1 * var(--_button-padding-inline));
1654
1667
  }
1655
1668
 
1656
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button)[aria-label], :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-icon {
1669
+ :is([aria-label], .-icon):where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button) {
1657
1670
  --_button-border-radius: var(--border-radius-round);
1658
1671
  aspect-ratio: 1;
1659
1672
  fill: currentColor;
1660
1673
  padding: 0;
1661
1674
  }
1662
1675
 
1663
- :is(:where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button)[aria-label], :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-icon):after {
1676
+ :is([aria-label], .-icon):where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button):after {
1664
1677
  content: "";
1665
1678
  inline-size: max(var(--control-height-base), 100%);
1666
1679
  block-size: max(var(--control-height-base), 100%);
@@ -1673,16 +1686,17 @@
1673
1686
  inset-inline-start: calc(-.5 * (var(--control-height-base) - 100%));
1674
1687
  }
1675
1688
 
1676
- :is(:where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button)[aria-label], :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-icon) > svg {
1677
- pointer-events: none;
1678
- }
1679
-
1680
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-icon.-small {
1681
- padding: 0;
1682
- }
1683
-
1684
- :where(button:not([class]), button[type]:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class]), .nc-button).-aligned {
1685
- margin-inline: calc(-1 * var(--_button-padding-inline));
1689
+ [disabled]:where(button, button[type], input[type="button"], input[type="submit"], input[type="reset"], .nc-button) {
1690
+ --_button-border-color-hover: var(--_button-border-color);
1691
+ filter: contrast(.72) opacity(.72);
1692
+ cursor: not-allowed;
1693
+ --_button-background: none !important;
1694
+ --_button-background-hover: none !important;
1695
+ --_button-color: var(--color-text-subtle) !important;
1696
+ --_button-color-hover: var(--_button-color) !important;
1697
+ --_button-border-color: var(--color-text-subtle) !important;
1698
+ box-shadow: none !important;
1699
+ transform: none !important;
1686
1700
  }
1687
1701
 
1688
1702
  :where(input[type="file"]) {
@@ -1727,7 +1741,7 @@
1727
1741
  transform: none;
1728
1742
  }
1729
1743
 
1730
- :where(button[type="reset"]:not([class]), .nc-button.-destructive) {
1744
+ :where(button[type="reset"], .nc-button.-destructive) {
1731
1745
  --text: var(--color-status-danger-emphasis);
1732
1746
  --color: var(--color-status-danger-base);
1733
1747
  --surface: var(--color-status-danger-surface);
@@ -1772,7 +1786,7 @@
1772
1786
  background-color: var(--_card-background-color);
1773
1787
  border-radius: var(--_card-border-radius);
1774
1788
  box-shadow: var(--_card-shadow);
1775
- transition: border-color var(--transition-duration-base) var(--ease-2);
1789
+ transition: border-color var(--transition-duration-quick-2) var(--ease-2);
1776
1790
  display: inline-block;
1777
1791
  overflow: hidden;
1778
1792
  }
@@ -1831,13 +1845,13 @@
1831
1845
  --_dialog-padding-inline: var(--dialog-padding-inline, var(--spacing-base));
1832
1846
  --_dialog-layout-padding: var(--layout-padding, var(--spacing-base));
1833
1847
  --_dialog-close-size: var(--dialog-close-size, var(--control-height-base));
1834
- --_dialog-transition-duration: var(--dialog-transition-duration, var(--transition-duration-base));
1848
+ --_dialog-transition-duration: var(--dialog-transition-duration, var(--transition-duration-moderate-2));
1835
1849
  --_dialog-max-block-size: var(--dialog-max-block-size, 90dvh);
1836
1850
  --_dialog-max-inline-size: var(--dialog-max-inline-size, 28rem);
1837
1851
  --_dialog-radius: 0;
1838
1852
  z-index: var(--layer-important);
1839
- animation: close-dialog var(--_dialog-transition-duration) cubic-bezier(.7, 0, 1, 1) forwards;
1840
- transition: opacity var(--_dialog-transition-duration) cubic-bezier(.7, 0, 1, 1);
1853
+ animation: close-dialog var(--_dialog-transition-duration) var(--easing-exit) forwards;
1854
+ transition: opacity var(--_dialog-transition-duration) var(--easing-exit);
1841
1855
  border: var(--border-width-thin) solid var(--color-border-base);
1842
1856
  block-size: max-content;
1843
1857
  inline-size: 100dvw;
@@ -1866,7 +1880,7 @@
1866
1880
  }
1867
1881
 
1868
1882
  :where(.nc-dialog)[open] {
1869
- animation: open-dialog var(--_dialog-transition-duration) cubic-bezier(0, .6, .58, 1);
1883
+ animation: open-dialog var(--_dialog-transition-duration) var(--easing-entry);
1870
1884
  }
1871
1885
 
1872
1886
  :where(.nc-dialog):not([open]) {
@@ -2115,8 +2129,8 @@
2115
2129
  }
2116
2130
  }
2117
2131
 
2118
- @layer components.inputs {
2119
- :where(label:not([class]), .nc-input-label) {
2132
+ @layer base.inputs {
2133
+ :where(label, .nc-input-label) {
2120
2134
  font-family: var(--font-family-default);
2121
2135
  letter-spacing: var(--tracking-tight);
2122
2136
  font-weight: var(--font-weight-active);
@@ -2127,7 +2141,7 @@
2127
2141
  display: inline-flex;
2128
2142
  }
2129
2143
 
2130
- :where(input[type="text"], input[type="email"], input[type="password"], input[type="number"], input[type="url"], input[type="search"], input[type="date"], input[type="month"], input[type="week"], input[type="text"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="tel"], input[type="color"], input[type="file"], input[type="checkbox"], input[type="radio"], textarea, select, .nc-input, .nc-select, .nc-textarea, .nc-input-checkbox, .nc-input-radio, .nc-input-label, .nc-input-color, .nc-input-field, .nc-input-error, .nc-checkbox-wrapper, .nc-input-switch, .nc-radio-field, .nc-checkbox-field) {
2144
+ :where(input, textarea, select, .nc-input, .nc-select, .nc-textarea, .nc-input-checkbox, .nc-input-radio, .nc-input-label, .nc-input-color, .nc-input-field, .nc-input-error, .nc-checkbox-wrapper, .nc-input-switch, .nc-radio-field, .nc-checkbox-field) {
2131
2145
  --_input-background: var(--input-background, var(--color-surface-subtle));
2132
2146
  --_input-background-active: var(--input-background-active, var(--color-surface-base));
2133
2147
  --_input-color: var(--input-color, var(--color-text-base));
@@ -2141,7 +2155,7 @@
2141
2155
  --_input-hover-background: var(--input-hover-background, var(--color-brand-primary-hover));
2142
2156
  }
2143
2157
 
2144
- :where(input[type="text"], input[type="email"], input[type="password"], input[type="number"], input[type="url"], input[type="search"], input[type="date"], input[type="month"], input[type="week"], input[type="text"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="tel"], input[type="color"], input[type="file"], textarea, select, .nc-input) {
2158
+ :where(input, textarea, select, .nc-input) {
2145
2159
  font: inherit;
2146
2160
  letter-spacing: inherit;
2147
2161
  word-spacing: inherit;
@@ -2157,39 +2171,51 @@
2157
2171
  line-height: var(--line-height-base);
2158
2172
  }
2159
2173
 
2160
- :where(input[type="text"], input[type="email"], input[type="password"], input[type="number"], input[type="url"], input[type="search"], input[type="date"], input[type="month"], input[type="week"], input[type="text"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="tel"], input[type="color"], input[type="file"], textarea, select, .nc-input):focus, :where(input[type="text"], input[type="email"], input[type="password"], input[type="number"], input[type="url"], input[type="search"], input[type="date"], input[type="month"], input[type="week"], input[type="text"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="tel"], input[type="color"], input[type="file"], textarea, select, .nc-input):hover:focus {
2174
+ :where(input, textarea, select, .nc-input):focus, :where(input, textarea, select, .nc-input):hover:focus {
2161
2175
  --current-background: var(--_input-background-active);
2162
2176
  outline: var(--_input-outline);
2163
2177
  outline-offset: 0;
2164
2178
  background-color: var(--_input-background-active);
2165
2179
  }
2166
2180
 
2167
- :where(input[type="text"], input[type="email"], input[type="password"], input[type="number"], input[type="url"], input[type="search"], input[type="date"], input[type="month"], input[type="week"], input[type="text"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="tel"], input[type="color"], input[type="file"], textarea, select, .nc-input):disabled {
2181
+ :where(input, textarea, select, .nc-input):disabled {
2168
2182
  filter: var(--_input-disabled-filter);
2169
2183
  cursor: not-allowed;
2170
2184
  }
2171
2185
 
2172
- :where(input[type="text"], input[type="email"], input[type="password"], input[type="number"], input[type="url"], input[type="search"], input[type="date"], input[type="month"], input[type="week"], input[type="text"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="tel"], input[type="color"], input[type="file"], textarea, select, .nc-input):hover {
2186
+ :where(input, textarea, select, .nc-input):hover {
2173
2187
  --current-background: var(--_input-hover-background);
2174
2188
  background-color: var(--_input-hover-background);
2175
2189
  }
2176
2190
 
2177
- :where(input[type="text"], input[type="email"], input[type="password"], input[type="number"], input[type="url"], input[type="search"], input[type="date"], input[type="month"], input[type="week"], input[type="text"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="tel"], input[type="color"], input[type="file"], textarea, select, .nc-input)[required] {
2191
+ :where(input, textarea, select, .nc-input)[required] {
2178
2192
  border-inline-start-width: var(--border-width-thick);
2179
2193
  }
2180
2194
 
2181
- :where(input[type="text"], input[type="email"], input[type="password"], input[type="number"], input[type="url"], input[type="search"], input[type="date"], input[type="month"], input[type="week"], input[type="text"], input[type="datetime"], input[type="datetime-local"], input[type="time"], input[type="tel"], input[type="color"], input[type="file"], textarea, select, .nc-input)::placeholder {
2195
+ :where(input, textarea, select, .nc-input)::placeholder {
2182
2196
  color: var(--color-text-subtle);
2183
2197
  }
2184
2198
 
2185
- :where(select:not([class]), .nc-select) {
2199
+ :where(input, textarea, select, .nc-input).-validate:user-valid {
2200
+ outline: var(--_input-outline);
2201
+ outline-offset: 0;
2202
+ outline-color: var(--color-status-success-base);
2203
+ }
2204
+
2205
+ :where(input, textarea, select, .nc-input).-validate:user-invalid {
2206
+ outline: var(--_input-outline);
2207
+ outline-offset: 0;
2208
+ outline-color: var(--color-status-danger-base);
2209
+ }
2210
+
2211
+ :where(select, .nc-select) {
2186
2212
  background-image: var(--triangle-down-url);
2187
2213
  background-position: right .5em top 50%;
2188
2214
  background-size: 1em .75em;
2189
2215
  padding-inline-end: 1.75em;
2190
2216
  }
2191
2217
 
2192
- :where(textarea:not([class]), .nc-textarea) {
2218
+ :where(textarea, .nc-textarea) {
2193
2219
  min-block-size: calc(8lh + 2 * var(--_input-padding-block));
2194
2220
  max-block-size: 80svh;
2195
2221
  min-inline-size: var(--input-inline-size, 100%);
@@ -2199,14 +2225,14 @@
2199
2225
  field-sizing: content;
2200
2226
  }
2201
2227
 
2202
- :where(input[type="checkbox"]:not([class]), input[type="radio"]:not([class]), .nc-input-checkbox, .nc-input-radio, .nc-input-switch) {
2228
+ :where(input[type="checkbox"], input[type="radio"], .nc-input-checkbox, .nc-input-radio, .nc-input-switch) {
2203
2229
  appearance: none;
2204
2230
  border: var(--_input-border);
2205
2231
  --current-background: var(--_input-background);
2206
2232
  background: var(--current-background);
2207
2233
  block-size: 1lh;
2208
2234
  inline-size: 1lh;
2209
- transition: var(--transition-duration-short) background var(--ease-2);
2235
+ transition: var(--transition-duration-quick-1) background var(--ease-2);
2210
2236
  box-shadow: var(--_input-box-shadow);
2211
2237
  justify-content: center;
2212
2238
  align-items: center;
@@ -2214,18 +2240,18 @@
2214
2240
  display: inline-flex;
2215
2241
  }
2216
2242
 
2217
- :where(input[type="checkbox"]:not([class]), .nc-input-checkbox) {
2243
+ :where(input[type="checkbox"], .nc-input-checkbox) {
2218
2244
  --_transition-duration: 0s;
2219
2245
  border-radius: var(--_input-border-radius);
2220
2246
  overflow: hidden;
2221
2247
  }
2222
2248
 
2223
- :where(input[type="checkbox"]:not([class]), .nc-input-checkbox):before {
2249
+ :where(input[type="checkbox"], .nc-input-checkbox):before {
2224
2250
  content: "";
2225
2251
  background-color: var(--color-brand-primary-contrast);
2226
2252
  block-size: .75lh;
2227
2253
  inline-size: .75lh;
2228
- transition: transform var(--ease-out-2) var(--transition-duration-short);
2254
+ transition: transform var(--ease-out-2) var(--transition-duration-quick-1);
2229
2255
  font-family: var(--font-family-sans);
2230
2256
  --font-weight: var(--font-weight-active);
2231
2257
  color: var(--_input-background);
@@ -2237,11 +2263,11 @@
2237
2263
  transform: scale(.8)translateY(2em);
2238
2264
  }
2239
2265
 
2240
- :where(input[type="checkbox"]:not([class]), .nc-input-checkbox):checked {
2266
+ :where(input[type="checkbox"], .nc-input-checkbox):checked {
2241
2267
  --current-background: var(--color-brand-primary-base);
2242
2268
  }
2243
2269
 
2244
- :where(input[type="checkbox"]:not([class]), .nc-input-checkbox):checked:before {
2270
+ :where(input[type="checkbox"], .nc-input-checkbox):checked:before {
2245
2271
  transform: scale(1)translateY(0%);
2246
2272
  }
2247
2273
 
@@ -2256,7 +2282,7 @@
2256
2282
  background-color: var(--color-brand-primary-contrast);
2257
2283
  block-size: 50%;
2258
2284
  inline-size: 50%;
2259
- transition: transform var(--ease-out-2) var(--transition-duration-short);
2285
+ transition: transform var(--ease-out-2) var(--transition-duration-quick-1);
2260
2286
  display: inline-flex;
2261
2287
  transform: scale(.8)translateY(2em);
2262
2288
  }
@@ -2272,7 +2298,7 @@
2272
2298
  :where(input[type="color"], .nc-input-color) {
2273
2299
  aspect-ratio: 1;
2274
2300
  inline-size: auto;
2275
- padding: var(--control-spacing-minimal, .125em);
2301
+ padding: var(--control-spacing-nearest, .125em);
2276
2302
  }
2277
2303
 
2278
2304
  :where(input[type="date"], .nc-input-date) {
@@ -2316,43 +2342,6 @@
2316
2342
  background-color: var(--color-brand-primary-base);
2317
2343
  border-color: var(--color-brand-primary-base);
2318
2344
  }
2319
-
2320
- :where(.nc-tag-select-field) {
2321
- --_tag-select-checked-text-color: var(--tag-select-checked-text-color, var(--color-brand-primary-contrast));
2322
- --_tag-select-checked-surface-color: var(--tag-select-checked-surface-color, var(--color-brand-primary-base));
2323
- --_tag-select-border-radius: var(--tag-select-border-radius, var(--_input-border-radius));
2324
- --nc-legend-spacing: var(--control-spacing-near, .5em);
2325
- }
2326
-
2327
- :where(.nc-tag-select-field):focus-within:has(:focus-visible) {
2328
- outline-offset: var(--controls-spacing-near, .5em);
2329
- outline: var(--_input-outline);
2330
- border-radius: var(--_tag-select-border-radius);
2331
- }
2332
-
2333
- :where(.nc-tag-select-field) input {
2334
- opacity: 0;
2335
- position: absolute;
2336
- }
2337
-
2338
- :where(.nc-tag-select-field) label {
2339
- display: grid;
2340
- }
2341
-
2342
- :where(.nc-tag-select-field) label:hover, :where(.nc-tag-select-field) label:focus-within {
2343
- background-color: var(--_input-hover-background);
2344
- }
2345
-
2346
- :where(.nc-tag-select-field) label:has(input:checked) {
2347
- background: var(--_tag-select-checked-surface-color);
2348
- color: var(--_tag-select-checked-text-color);
2349
- box-shadow: var(--shadow-near);
2350
- }
2351
-
2352
- :where(.nc-tag-select-field) label:has(input:disabled) {
2353
- filter: var(--_input-disabled-filter);
2354
- cursor: not-allowed;
2355
- }
2356
2345
  }
2357
2346
 
2358
2347
  @layer components.input-fields {
@@ -2563,7 +2552,7 @@
2563
2552
  border-radius: var(--_input-border-radius);
2564
2553
  box-shadow: var(--shadow-near);
2565
2554
  transition: transform, background-color;
2566
- transition-duration: var(--transition-duration-base);
2555
+ transition-duration: var(--transition-duration-quick-2);
2567
2556
  transition-timing-function: var(--ease-2);
2568
2557
  display: block;
2569
2558
  }
@@ -2577,6 +2566,45 @@
2577
2566
  }
2578
2567
  }
2579
2568
 
2569
+ @layer components.inputs {
2570
+ :where(.nc-tag-select-field) {
2571
+ --_tag-select-checked-text-color: var(--tag-select-checked-text-color, var(--color-brand-primary-contrast));
2572
+ --_tag-select-checked-surface-color: var(--tag-select-checked-surface-color, var(--color-brand-primary-base));
2573
+ --_tag-select-border-radius: var(--tag-select-border-radius, var(--_input-border-radius));
2574
+ --nc-legend-spacing: var(--control-spacing-near, .5em);
2575
+ }
2576
+
2577
+ :where(.nc-tag-select-field):focus-within:has(:focus-visible) {
2578
+ outline-offset: var(--controls-spacing-near, .5em);
2579
+ outline: var(--_input-outline);
2580
+ border-radius: var(--_tag-select-border-radius);
2581
+ }
2582
+
2583
+ :where(.nc-tag-select-field) input {
2584
+ opacity: 0;
2585
+ position: absolute;
2586
+ }
2587
+
2588
+ :where(.nc-tag-select-field) label {
2589
+ display: grid;
2590
+ }
2591
+
2592
+ :where(.nc-tag-select-field) label:hover, :where(.nc-tag-select-field) label:focus-within {
2593
+ background-color: var(--_input-hover-background);
2594
+ }
2595
+
2596
+ :where(.nc-tag-select-field) label:has(input:checked) {
2597
+ background: var(--_tag-select-checked-surface-color);
2598
+ color: var(--_tag-select-checked-text-color);
2599
+ box-shadow: var(--shadow-near);
2600
+ }
2601
+
2602
+ :where(.nc-tag-select-field) label:has(input:disabled) {
2603
+ filter: var(--_input-disabled-filter);
2604
+ cursor: not-allowed;
2605
+ }
2606
+ }
2607
+
2580
2608
  @layer components.lists {
2581
2609
  :where(.nc-meta-list) {
2582
2610
  inline-size: 100%;
@@ -2643,7 +2671,7 @@
2643
2671
  backdrop-filter: blur(3px);
2644
2672
  background-color: var(--_notification-center-background);
2645
2673
  block-size: 100%;
2646
- transition: transform var(--transition-duration-base) ease-in-out;
2674
+ transition: transform var(--transition-duration-moderate-2) var(--ease-in-out-2);
2647
2675
  transform: translate(100%);
2648
2676
  }
2649
2677
 
@@ -2686,7 +2714,7 @@
2686
2714
  border-radius: var(--border-radius-small);
2687
2715
  inline-size: 100%;
2688
2716
  box-shadow: var(--shadow-far);
2689
- animation: pop-in var(--transition-duration-base) cubic-bezier(0, .6, .58, 1);
2717
+ animation: pop-in var(--transition-duration-moderate-2) var(--easing-entry);
2690
2718
  color: var(--color-text-base);
2691
2719
  pointer-events: all;
2692
2720
  flex-direction: column;
@@ -2726,7 +2754,7 @@
2726
2754
  }
2727
2755
 
2728
2756
  :where(.nc-notification.-closing) {
2729
- animation: remove-notification var(--transition-duration-base) cubic-bezier(.7, 0, 1, 1) forwards;
2757
+ animation: remove-notification var(--transition-duration-moderate-2) var(--easing-exit) forwards;
2730
2758
  }
2731
2759
 
2732
2760
  @keyframes pop-in {