fokus-styles 2.3.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/css/components.css +583 -83
  3. package/dist/css/components.css.map +1 -1
  4. package/dist/css/components.min.css +1 -1
  5. package/dist/css/components.min.css.map +1 -1
  6. package/dist/css/fokus-components.css +583 -83
  7. package/dist/css/fokus-components.css.map +1 -1
  8. package/dist/css/fokus-components.min.css +1 -1
  9. package/dist/css/fokus-components.min.css.map +1 -1
  10. package/dist/css/fokus-core.css +22 -0
  11. package/dist/css/fokus-core.css.map +1 -1
  12. package/dist/css/fokus-core.min.css +1 -1
  13. package/dist/css/fokus-core.min.css.map +1 -1
  14. package/dist/css/fokus-dark.css +10 -0
  15. package/dist/css/fokus-dark.css.map +1 -1
  16. package/dist/css/fokus-dark.min.css +1 -1
  17. package/dist/css/fokus-dark.min.css.map +1 -1
  18. package/dist/css/fokus-rtl.css +9166 -0
  19. package/dist/css/fokus-rtl.css.map +1 -0
  20. package/dist/css/fokus-rtl.min.css +2 -0
  21. package/dist/css/fokus-rtl.min.css.map +1 -0
  22. package/dist/css/fokus-utilities.css +158 -0
  23. package/dist/css/fokus-utilities.css.map +1 -1
  24. package/dist/css/fokus-utilities.min.css +1 -1
  25. package/dist/css/fokus-utilities.min.css.map +1 -1
  26. package/dist/css/fokus.css +1018 -258
  27. package/dist/css/fokus.css.map +1 -1
  28. package/dist/css/fokus.min.css +1 -1
  29. package/dist/css/fokus.min.css.map +1 -1
  30. package/dist/css/forms.css +322 -176
  31. package/dist/css/forms.css.map +1 -1
  32. package/dist/css/forms.min.css +1 -1
  33. package/dist/css/forms.min.css.map +1 -1
  34. package/dist/css/helpers.css +158 -0
  35. package/dist/css/helpers.css.map +1 -1
  36. package/dist/css/helpers.min.css +1 -1
  37. package/dist/css/helpers.min.css.map +1 -1
  38. package/dist/css/layout.css +22 -0
  39. package/dist/css/layout.css.map +1 -1
  40. package/dist/css/layout.min.css +1 -1
  41. package/dist/css/layout.min.css.map +1 -1
  42. package/dist/js/fokus.js +270 -25
  43. package/dist/js/fokus.js.map +2 -2
  44. package/dist/js/fokus.min.js +18 -18
  45. package/dist/js/fokus.min.js.map +3 -3
  46. package/docs/components/alert.md +69 -24
  47. package/docs/components/badge.md +23 -4
  48. package/docs/components/checkbox.md +16 -3
  49. package/docs/components/popover.md +20 -7
  50. package/docs/components/radio.md +11 -1
  51. package/docs/components/responsive.md +19 -0
  52. package/docs/components/switch.md +30 -8
  53. package/docs/components/tag.md +19 -4
  54. package/docs/components/toast.md +72 -59
  55. package/docs/components/tooltip.md +38 -2
  56. package/docs/guides/accessibility.md +7 -0
  57. package/docs/guides/rtl-and-system-preferences.md +28 -0
  58. package/docs/prompts/prompt-plan.md +4 -4
  59. package/docs/reference/accessibility-matrix.md +7 -7
  60. package/docs/reference/contrast-report.md +4 -0
  61. package/docs/reference/definitions.md +5 -1
  62. package/docs/reference/design-tokens.md +14 -0
  63. package/docs/reference/size-baseline.json +13 -13
  64. package/mockup/assets/example-theme.css +11 -0
  65. package/mockup/assets/showcase-contracts.js +6 -6
  66. package/mockup/examples/alerts.html +105 -31
  67. package/mockup/examples/badges-alerts.html +91 -59
  68. package/mockup/examples/check-radio-switch.html +575 -99
  69. package/mockup/examples/popover.html +81 -0
  70. package/mockup/examples/tag.html +97 -87
  71. package/mockup/examples/toast.html +113 -0
  72. package/mockup/examples/tooltip.html +68 -0
  73. package/mockup/forms.html +1 -1
  74. package/mockup/overlays-commands.html +2 -2
  75. package/package.json +2 -1
  76. package/packages/fokus-components/scss/components/_alerts.scss +128 -6
  77. package/packages/fokus-components/scss/components/_badges.scss +26 -10
  78. package/packages/fokus-components/scss/components/_index.scss +1 -0
  79. package/packages/fokus-components/scss/components/_popover.scss +131 -21
  80. package/packages/fokus-components/scss/components/_responsive.scss +23 -0
  81. package/packages/fokus-components/scss/components/_tag.scss +37 -14
  82. package/packages/fokus-components/scss/components/_toasts.scss +156 -11
  83. package/packages/fokus-components/scss/components/_tooltips.scss +70 -18
  84. package/packages/fokus-components/scss/forms/_check-radio-switch.scss +313 -215
  85. package/packages/fokus-components/scss/forms/_forms.scss +16 -0
  86. package/packages/fokus-core/scss/base/_accessibility.scss +14 -0
  87. package/packages/fokus-core/scss/tokens/_root.scss +11 -0
  88. package/packages/fokus-js/js/carousel.d.ts +4 -0
  89. package/packages/fokus-js/js/carousel.js +8 -0
  90. package/packages/fokus-js/js/core/positioning.js +18 -9
  91. package/packages/fokus-js/js/dropdown.d.ts +4 -0
  92. package/packages/fokus-js/js/dropdown.js +7 -0
  93. package/packages/fokus-js/js/popover.js +26 -1
  94. package/packages/fokus-js/js/tabs.d.ts +3 -0
  95. package/packages/fokus-js/js/tabs.js +5 -0
  96. package/packages/fokus-js/js/tag.js +17 -0
  97. package/packages/fokus-js/js/toast.js +77 -3
  98. package/packages/fokus-js/js/tooltip.d.ts +8 -1
  99. package/packages/fokus-js/js/tooltip.js +106 -13
  100. package/packages/fokus-utilities/scss/utilities/_api.scss +48 -0
  101. package/scss/entries/rtl-entry.scss +11 -0
@@ -68,6 +68,8 @@
68
68
  --fs-component-overlay-backdrop: rgb(0 0 0 / 55%);
69
69
  --fs-component-panel-radius: var(--fs-radius-md);
70
70
  --fs-component-panel-shadow: var(--fs-shadow-lg);
71
+ --fs-contrast-border-width: var(--fs-border-width);
72
+ --fs-contrast-focus-width: var(--fs-focus-width);
71
73
  --fs-cq-sm: 320px;
72
74
  --fs-cq-md: 480px;
73
75
  --fs-cq-lg: 640px;
@@ -146,6 +148,14 @@
146
148
  --fs-feedback-info-bg: oklch(96.4918490239% 0.0173174767 286.0707018324deg);
147
149
  }
148
150
  }
151
+ @media (prefers-contrast: more) {
152
+ :root {
153
+ --fs-contrast-border-width: 2px;
154
+ --fs-contrast-focus-width: 3px;
155
+ --fs-focus-width: var(--fs-contrast-focus-width);
156
+ --fs-border-width: var(--fs-contrast-border-width);
157
+ }
158
+ }
149
159
  }
150
160
  @layer tokens {
151
161
  :root {
@@ -268,6 +278,18 @@
268
278
  outline: 2px solid CanvasText;
269
279
  outline-offset: 2px;
270
280
  }
281
+ button,
282
+ [role=button],
283
+ input,
284
+ select,
285
+ textarea,
286
+ .fs-btn {
287
+ border-color: ButtonText;
288
+ forced-color-adjust: auto;
289
+ }
290
+ .fs-u-focus-ring:focus-visible {
291
+ outline: 3px solid Highlight;
292
+ }
271
293
  }
272
294
  }
273
295
  @layer utilities {
@@ -1341,6 +1363,20 @@
1341
1363
  }
1342
1364
  }
1343
1365
  @layer components {
1366
+ .fs-form-fieldset {
1367
+ min-inline-size: 0;
1368
+ margin: 0;
1369
+ padding: var(--fs-space-3);
1370
+ border: var(--fs-border-width) solid var(--fs-color-border);
1371
+ border-radius: var(--fs-radius-md);
1372
+ }
1373
+ .fs-form-fieldset > legend {
1374
+ max-inline-size: 100%;
1375
+ padding-inline: var(--fs-space-1);
1376
+ color: var(--fs-color-text);
1377
+ font-size: 0.75rem;
1378
+ font-weight: 600;
1379
+ }
1344
1380
  .fs-form-row {
1345
1381
  display: flex;
1346
1382
  flex-direction: row;
@@ -1684,9 +1720,53 @@
1684
1720
  .fs-switch {
1685
1721
  display: inline-flex;
1686
1722
  align-items: center;
1723
+ min-inline-size: 0;
1687
1724
  }
1688
1725
  .fs-check {
1689
- --fs-check-mark: var(--fs-color-on-primary);
1726
+ --fs-check-size: 18px;
1727
+ --fs-check-border-width: 2px;
1728
+ --fs-check-radius: var(--fs-radius-sm);
1729
+ --fs-check-gap: var(--fs-space-2);
1730
+ --fs-check-mark-color: var(--fs-color-on-primary);
1731
+ --fs-control-hover-bg: var(--fs-color-subtle);
1732
+ --fs-control-active-bg: var(--fs-alert-primary-bg);
1733
+ --fs-control-error-color: var(--fs-color-danger);
1734
+ --fs-control-success-color: var(--fs-color-success);
1735
+ }
1736
+ .fs-radio {
1737
+ --fs-radio-size: 18px;
1738
+ --fs-radio-dot-size: 8px;
1739
+ --fs-radio-radius: 50%;
1740
+ --fs-radio-gap: var(--fs-space-2);
1741
+ --fs-control-hover-bg: var(--fs-color-subtle);
1742
+ --fs-control-active-bg: var(--fs-alert-primary-bg);
1743
+ --fs-control-error-color: var(--fs-color-danger);
1744
+ --fs-control-success-color: var(--fs-color-success);
1745
+ }
1746
+ .fs-switch {
1747
+ --fs-switch-track-width: 40px;
1748
+ --fs-switch-track-height: 24px;
1749
+ --fs-switch-thumb-width: 18px;
1750
+ --fs-switch-thumb-height: 18px;
1751
+ --fs-switch-thumb-offset: 3px;
1752
+ --fs-switch-on-offset: 19px;
1753
+ --fs-switch-radius: var(--fs-radius-md);
1754
+ --fs-switch-thumb-radius: var(--fs-radius-sm);
1755
+ --fs-switch-gap: var(--fs-space-2);
1756
+ --fs-switch-track-bg: var(--fs-color-subtle);
1757
+ --fs-switch-track-border: var(--fs-color-border-default);
1758
+ --fs-switch-track-checked-bg: var(--fs-color-primary);
1759
+ --fs-switch-thumb-bg: var(--fs-color-surface);
1760
+ --fs-switch-thumb-border: var(--fs-color-border-default);
1761
+ --fs-switch-thumb-shadow: var(--fs-shadow-sm);
1762
+ --fs-switch-track-shadow: inset 0 1px 1px rgb(15 23 42 / 12%);
1763
+ --fs-switch-hover-ring: color-mix(in srgb, var(--fs-color-primary) 18%, transparent);
1764
+ --fs-switch-hover-shadow: 0 0 0 4px var(--fs-switch-hover-ring);
1765
+ --fs-switch-active-scale: 0.92;
1766
+ --fs-control-hover-bg: var(--fs-color-subtle);
1767
+ --fs-control-active-bg: var(--fs-alert-primary-bg);
1768
+ --fs-control-error-color: var(--fs-color-danger);
1769
+ --fs-control-success-color: var(--fs-color-success);
1690
1770
  }
1691
1771
  .fs-check-input,
1692
1772
  .fs-radio-input,
@@ -1707,105 +1787,140 @@
1707
1787
  position: relative;
1708
1788
  display: inline-flex;
1709
1789
  align-items: center;
1710
- min-height: 20px;
1711
- padding-left: 28px;
1790
+ min-block-size: 24px;
1791
+ min-inline-size: 24px;
1712
1792
  color: var(--fs-color-text);
1713
1793
  font-size: 0.8125rem;
1794
+ line-height: 1.35;
1714
1795
  cursor: pointer;
1715
1796
  -webkit-user-select: none;
1716
1797
  user-select: none;
1717
1798
  }
1799
+ .fs-check-label {
1800
+ padding-inline-start: calc(var(--fs-check-size) + var(--fs-check-gap));
1801
+ }
1802
+ .fs-radio-label {
1803
+ padding-inline-start: calc(var(--fs-radio-size) + var(--fs-radio-gap));
1804
+ }
1805
+ .fs-switch-label {
1806
+ padding-inline-start: calc(var(--fs-switch-track-width) + var(--fs-switch-gap));
1807
+ }
1718
1808
  .fs-check-label::before,
1719
1809
  .fs-radio-label::before,
1720
1810
  .fs-switch-label::before {
1721
1811
  position: absolute;
1722
- left: 0;
1812
+ inset-block-start: 50%;
1723
1813
  box-sizing: border-box;
1724
- border: 1px solid var(--fs-color-border);
1814
+ border: var(--fs-border-width) solid var(--fs-color-border);
1725
1815
  background-color: var(--fs-color-surface);
1726
1816
  content: "";
1727
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
1728
- }
1729
- .fs-check-label::before,
1730
- .fs-radio-label::before {
1731
- width: 18px;
1732
- height: 18px;
1817
+ transform: translateY(-50%);
1818
+ transition: background-color var(--fs-transition-fast) var(--fs-ease-standard), border-color var(--fs-transition-fast) var(--fs-ease-standard), box-shadow var(--fs-transition-fast) var(--fs-ease-standard);
1733
1819
  }
1734
1820
  .fs-check-label::before {
1735
- border: 2px solid var(--fs-color-primary);
1736
- border-radius: 0;
1821
+ inset-inline-start: 0;
1822
+ width: var(--fs-check-size);
1823
+ height: var(--fs-check-size);
1824
+ border-width: var(--fs-check-border-width);
1825
+ border-radius: var(--fs-check-radius);
1737
1826
  }
1738
1827
  .fs-radio-label::before {
1739
- border-radius: 50%;
1828
+ inset-inline-start: 0;
1829
+ width: var(--fs-radio-size);
1830
+ height: var(--fs-radio-size);
1831
+ border-radius: var(--fs-radio-radius);
1740
1832
  }
1741
- .fs-check-label::after {
1833
+ .fs-check-label::after,
1834
+ .fs-radio-label::after,
1835
+ .fs-switch-label::after {
1742
1836
  position: absolute;
1743
- left: 4px;
1744
- width: 9px;
1745
- height: 5px;
1746
1837
  content: "";
1747
1838
  opacity: 0;
1748
- border-bottom: 2px solid var(--fs-check-mark);
1749
- border-left: 2px solid var(--fs-check-mark);
1750
- transform: translateY(-1px) rotate(-45deg);
1751
- transition: opacity 0.1s ease-in-out;
1839
+ transition: opacity var(--fs-transition-fast) var(--fs-ease-standard), background-color var(--fs-transition-fast) var(--fs-ease-standard), inset-inline-start var(--fs-transition-fast) var(--fs-ease-standard), transform var(--fs-transition-fast) var(--fs-ease-standard);
1840
+ }
1841
+ .fs-check-label::after {
1842
+ inset-inline-start: calc((var(--fs-check-size) - 9px) / 2);
1843
+ inset-block-start: 50%;
1844
+ width: 9px;
1845
+ height: 5px;
1846
+ border-block-end: 2px solid var(--fs-check-mark-color);
1847
+ border-inline-start: 2px solid var(--fs-check-mark-color);
1848
+ transform: translateY(-65%) rotate(-45deg);
1752
1849
  }
1753
1850
  .fs-radio-label::after {
1754
- position: absolute;
1755
- left: 5px;
1756
- width: 8px;
1757
- height: 8px;
1851
+ inset-inline-start: calc((var(--fs-radio-size) - var(--fs-radio-dot-size)) / 2);
1852
+ inset-block-start: 50%;
1853
+ width: var(--fs-radio-dot-size);
1854
+ height: var(--fs-radio-dot-size);
1758
1855
  border-radius: 50%;
1759
- content: "";
1760
- opacity: 0;
1761
1856
  background-color: var(--fs-color-on-primary);
1762
- transition: opacity 0.1s ease-in-out;
1857
+ transform: translateY(-50%);
1763
1858
  }
1764
1859
  .fs-check-input:checked + .fs-check-label::before,
1765
1860
  .fs-radio-input:checked + .fs-radio-label::before {
1766
- background-color: var(--fs-color-primary);
1767
1861
  border-color: var(--fs-color-primary);
1862
+ background-color: var(--fs-color-primary);
1768
1863
  }
1769
1864
  .fs-check-input:checked + .fs-check-label::after,
1770
1865
  .fs-radio-input:checked + .fs-radio-label::after {
1771
1866
  opacity: 1;
1772
1867
  }
1773
- .fs-check-input:not(:checked, :indeterminate, :disabled, .is-invalid) + .fs-check-label:hover::before {
1774
- background-color: color-mix(in srgb, var(--fs-color-primary) 10%, transparent);
1775
- }
1776
- .fs-check-input:not(:disabled, :indeterminate, .is-invalid) + .fs-check-label:active::before {
1777
- background-color: color-mix(in srgb, var(--fs-color-primary) 86%, var(--fs-color-black));
1778
- border-color: var(--fs-color-primary);
1868
+ .fs-check-input:not(:disabled, :indeterminate, .is-invalid) + .fs-check-label:hover::before,
1869
+ .fs-radio-input:not(:disabled, .is-invalid) + .fs-radio-label:hover::before,
1870
+ .fs-switch-input:not(:disabled, .is-invalid) + .fs-switch-label:hover::before {
1871
+ background-color: var(--fs-control-hover-bg);
1779
1872
  }
1780
- .fs-check-input:checked:not(:disabled, .is-invalid) + .fs-check-label:active::after {
1781
- transform: translateY(-1px) rotate(-45deg) scale(0.9);
1873
+ .fs-check-input:checked:not(:disabled, .is-invalid) + .fs-check-label:hover::before,
1874
+ .fs-radio-input:checked:not(:disabled, .is-invalid) + .fs-radio-label:hover::before,
1875
+ .fs-switch-input:checked:not(:disabled, .is-invalid) + .fs-switch-label:hover::before {
1876
+ background-color: color-mix(in srgb, var(--fs-color-primary) 88%, var(--fs-color-black));
1782
1877
  }
1783
- .fs-switch-label {
1784
- padding-left: 44px;
1878
+ .fs-check-input:not(:disabled, .is-invalid) + .fs-check-label:active::before,
1879
+ .fs-radio-input:not(:disabled, .is-invalid) + .fs-radio-label:active::before,
1880
+ .fs-switch-input:not(:disabled, .is-invalid) + .fs-switch-label:active::before {
1881
+ background-color: var(--fs-control-active-bg);
1882
+ border-color: var(--fs-color-primary);
1785
1883
  }
1786
1884
  .fs-switch-label::before {
1787
- width: 36px;
1788
- height: 20px;
1789
- border-radius: var(--fs-radius-md);
1885
+ inset-inline-start: 0;
1886
+ width: var(--fs-switch-track-width);
1887
+ height: var(--fs-switch-track-height);
1888
+ border-color: var(--fs-switch-track-border);
1889
+ border-radius: var(--fs-switch-radius);
1890
+ background-color: var(--fs-switch-track-bg);
1891
+ box-shadow: var(--fs-switch-track-shadow);
1790
1892
  }
1791
1893
  .fs-switch-label::after {
1792
- position: absolute;
1793
- left: 2px;
1794
- width: 16px;
1795
- height: 14px;
1796
- border-radius: var(--fs-radius-sm);
1797
- content: "";
1798
- background-color: var(--fs-color-border);
1799
- transition: left 0.15s ease-in-out, background-color 0.15s ease-in-out;
1894
+ inset-inline-start: var(--fs-switch-thumb-offset);
1895
+ inset-block-start: 50%;
1896
+ width: var(--fs-switch-thumb-width);
1897
+ height: var(--fs-switch-thumb-height);
1898
+ border-radius: var(--fs-switch-thumb-radius);
1899
+ border: var(--fs-border-width) solid var(--fs-switch-thumb-border);
1900
+ background-color: var(--fs-switch-thumb-bg);
1901
+ opacity: 1;
1902
+ transform: translateY(-50%);
1903
+ box-shadow: var(--fs-switch-thumb-shadow);
1800
1904
  }
1801
1905
  .fs-switch-input:checked + .fs-switch-label::before {
1802
- background-color: var(--fs-color-primary);
1803
- border-color: var(--fs-color-primary);
1906
+ border-color: var(--fs-switch-track-checked-bg);
1907
+ background-color: var(--fs-switch-track-checked-bg);
1908
+ box-shadow: none;
1804
1909
  }
1805
1910
  .fs-switch-input:checked + .fs-switch-label::after {
1806
- left: 18px;
1911
+ inset-inline-start: var(--fs-switch-on-offset);
1912
+ border-color: var(--fs-color-on-primary);
1807
1913
  background-color: var(--fs-color-on-primary);
1808
1914
  }
1915
+ .fs-switch-input:not(:disabled, .is-invalid) + .fs-switch-label:hover::before {
1916
+ box-shadow: var(--fs-switch-hover-shadow), var(--fs-switch-track-shadow);
1917
+ }
1918
+ .fs-switch-input:checked:not(:disabled, .is-invalid) + .fs-switch-label:hover::before {
1919
+ box-shadow: var(--fs-switch-hover-shadow);
1920
+ }
1921
+ .fs-switch-input:not(:disabled) + .fs-switch-label:active::after {
1922
+ transform: translateY(-50%) scale(var(--fs-switch-active-scale));
1923
+ }
1809
1924
  .fs-check-input:focus-visible + .fs-check-label::before,
1810
1925
  .fs-radio-input:focus-visible + .fs-radio-label::before,
1811
1926
  .fs-switch-input:focus-visible + .fs-switch-label::before {
@@ -1814,153 +1929,184 @@
1814
1929
  border-color: var(--fs-color-primary);
1815
1930
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--fs-color-primary) 22%, transparent);
1816
1931
  }
1932
+ .fs-check-input:disabled + .fs-check-label,
1817
1933
  .fs-radio-input:disabled + .fs-radio-label,
1818
1934
  .fs-switch-input:disabled + .fs-switch-label {
1819
- opacity: 0.5;
1820
- pointer-events: none;
1821
- }
1822
- .fs-check-input:disabled + .fs-check-label {
1823
1935
  color: var(--fs-color-muted);
1824
- opacity: 1;
1936
+ cursor: default;
1937
+ opacity: var(--fs-disabled-opacity);
1825
1938
  pointer-events: none;
1826
1939
  }
1827
- .fs-check-input:disabled:not(:checked, :indeterminate) + .fs-check-label::before {
1828
- border-color: var(--fs-color-border);
1940
+ .fs-check-input:disabled + .fs-check-label::before,
1941
+ .fs-radio-input:disabled + .fs-radio-label::before,
1942
+ .fs-switch-input:disabled + .fs-switch-label::before {
1943
+ border-color: var(--fs-switch-track-border);
1944
+ background-color: var(--fs-switch-track-bg);
1945
+ box-shadow: none;
1946
+ }
1947
+ .fs-switch-input:disabled + .fs-switch-label::after {
1829
1948
  background-color: var(--fs-color-subtle);
1949
+ box-shadow: none;
1830
1950
  }
1831
- .fs-check-input:disabled:checked + .fs-check-label::before {
1832
- border-color: color-mix(in srgb, var(--fs-color-primary) 55%, var(--fs-color-border));
1833
- background-color: color-mix(in srgb, var(--fs-color-primary) 45%, var(--fs-color-subtle));
1951
+ .fs-check-input:disabled:checked + .fs-check-label::before,
1952
+ .fs-radio-input:disabled:checked + .fs-radio-label::before,
1953
+ .fs-switch-input:disabled:checked + .fs-switch-label::before {
1954
+ border-color: color-mix(in srgb, var(--fs-switch-track-checked-bg) 55%, var(--fs-color-border));
1955
+ background-color: color-mix(in srgb, var(--fs-switch-track-checked-bg) 45%, var(--fs-switch-track-bg));
1834
1956
  }
1835
- .fs-check-input:disabled:checked + .fs-check-label::after {
1836
- opacity: 0.72;
1957
+ .fs-switch-input:disabled:checked + .fs-switch-label::after {
1958
+ background-color: var(--fs-color-on-primary);
1837
1959
  }
1838
- .fs-radio-input.is-valid + .fs-radio-label::before {
1839
- border-color: var(--fs-color-success);
1960
+ .fs-check-input.is-valid + .fs-check-label::before,
1961
+ .fs-radio-input.is-valid + .fs-radio-label::before,
1962
+ .fs-switch-input.is-valid + .fs-switch-label::before,
1963
+ .fs-check-input[aria-invalid=false] + .fs-check-label::before,
1964
+ .fs-radio-input[aria-invalid=false] + .fs-radio-label::before,
1965
+ .fs-switch-input[aria-invalid=false] + .fs-switch-label::before {
1966
+ border-color: var(--fs-control-success-color);
1840
1967
  }
1841
1968
  .fs-check-input.is-invalid + .fs-check-label::before,
1842
- .fs-radio-input.is-invalid + .fs-radio-label::before {
1843
- border-color: var(--fs-color-danger);
1844
- }
1845
- .fs-check-sm .fs-check-label,
1846
- .fs-radio-sm .fs-radio-label {
1847
- min-height: 16px;
1848
- padding-left: 24px;
1849
- font-size: 0.75rem;
1850
- }
1851
- .fs-check-sm .fs-check-label::before,
1852
- .fs-radio-sm .fs-radio-label::before {
1853
- width: 15px;
1854
- height: 15px;
1855
- }
1856
- .fs-check-sm .fs-check-label::after {
1857
- left: 3px;
1858
- width: 8px;
1859
- height: 4px;
1860
- }
1861
- .fs-radio-sm .fs-radio-label::after {
1862
- left: 4px;
1863
- width: 7px;
1864
- height: 7px;
1865
- }
1866
- .fs-check-lg .fs-check-label,
1867
- .fs-radio-lg .fs-radio-label {
1868
- min-height: 24px;
1869
- padding-left: 34px;
1870
- font-size: 1rem;
1871
- }
1872
- .fs-check-lg .fs-check-label::before,
1873
- .fs-radio-lg .fs-radio-label::before {
1874
- width: 22px;
1875
- height: 22px;
1876
- }
1877
- .fs-check-lg .fs-check-label::after {
1878
- left: 5px;
1879
- width: 11px;
1880
- height: 6px;
1881
- }
1882
- .fs-radio-lg .fs-radio-label::after {
1883
- left: 6px;
1884
- width: 10px;
1885
- height: 10px;
1969
+ .fs-radio-input.is-invalid + .fs-radio-label::before,
1970
+ .fs-switch-input.is-invalid + .fs-switch-label::before,
1971
+ .fs-check-input[aria-invalid=true] + .fs-check-label::before,
1972
+ .fs-radio-input[aria-invalid=true] + .fs-radio-label::before,
1973
+ .fs-switch-input[aria-invalid=true] + .fs-switch-label::before {
1974
+ border-color: var(--fs-control-error-color);
1975
+ }
1976
+ .fs-switch-input.is-invalid:checked + .fs-switch-label::before,
1977
+ .fs-switch-input[aria-invalid=true]:checked + .fs-switch-label::before {
1978
+ background-color: var(--fs-control-error-color);
1979
+ box-shadow: none;
1980
+ }
1981
+ .fs-switch-input.is-valid:checked + .fs-switch-label::before,
1982
+ .fs-switch-input[aria-invalid=false]:checked + .fs-switch-label::before {
1983
+ background-color: var(--fs-control-success-color);
1984
+ border-color: var(--fs-control-success-color);
1985
+ box-shadow: none;
1886
1986
  }
1887
- .fs-switch-sm .fs-switch-label {
1888
- min-height: 16px;
1889
- padding-left: 38px;
1890
- font-size: 0.75rem;
1891
- }
1892
- .fs-switch-sm .fs-switch-label::before {
1893
- width: 30px;
1894
- height: 16px;
1895
- }
1896
- .fs-switch-sm .fs-switch-label::after {
1897
- width: 12px;
1898
- height: 10px;
1899
- }
1900
- .fs-switch-sm .fs-switch-input:checked + .fs-switch-label::after {
1901
- left: 16px;
1902
- }
1903
- .fs-switch-lg .fs-switch-label {
1904
- min-height: 26px;
1905
- padding-left: 52px;
1906
- font-size: 1rem;
1907
- }
1908
- .fs-switch-lg .fs-switch-label::before {
1909
- width: 44px;
1910
- height: 24px;
1911
- }
1912
- .fs-switch-lg .fs-switch-label::after {
1913
- width: 20px;
1914
- height: 18px;
1987
+ .fs-check-input.is-invalid + .fs-check-label::before,
1988
+ .fs-check-input[aria-invalid=true] + .fs-check-label::before {
1989
+ background-color: var(--fs-control-error-color);
1915
1990
  }
1916
- .fs-switch-lg .fs-switch-input:checked + .fs-switch-label::after {
1917
- left: 22px;
1991
+ .fs-check-input.is-invalid + .fs-check-label::after,
1992
+ .fs-check-input[aria-invalid=true] + .fs-check-label::after {
1993
+ inset-inline-start: 50%;
1994
+ inset-block-start: 50%;
1995
+ width: 9px;
1996
+ height: 9px;
1997
+ border: 0;
1998
+ background-image: linear-gradient(45deg, transparent 42%, var(--fs-color-on-danger, var(--fs-color-white)) 42% 58%, transparent 58%), linear-gradient(-45deg, transparent 42%, var(--fs-color-on-danger, var(--fs-color-white)) 42% 58%, transparent 58%);
1999
+ opacity: 1;
2000
+ transform: translate(-50%, -50%);
1918
2001
  }
1919
2002
  .fs-check-input:indeterminate + .fs-check-label::before {
1920
- border: 2px dashed var(--fs-color-primary);
2003
+ border-color: var(--fs-color-primary);
1921
2004
  background-color: var(--fs-color-surface);
1922
2005
  }
1923
2006
  .fs-check-input:indeterminate + .fs-check-label::after {
1924
- left: 4px;
2007
+ inset-inline-start: calc((var(--fs-check-size) - 10px) / 2);
2008
+ inset-block-start: 50%;
1925
2009
  width: 10px;
1926
- height: 0;
2010
+ height: 2px;
2011
+ border: 0;
2012
+ border-radius: 1px;
2013
+ background-color: var(--fs-color-primary);
1927
2014
  opacity: 1;
1928
- border-bottom: 2px solid var(--fs-color-primary);
1929
- border-left: 0;
1930
- transform: translateY(3px) rotate(0deg);
2015
+ transform: translateY(-50%);
1931
2016
  }
1932
- .fs-check-sm .fs-check-input:indeterminate + .fs-check-label::after {
1933
- left: 3px;
1934
- width: 8px;
2017
+ .fs-check-sm,
2018
+ .fs-radio-sm,
2019
+ .fs-switch-sm {
2020
+ font-size: 0.75rem;
1935
2021
  }
1936
- .fs-check-lg .fs-check-input:indeterminate + .fs-check-label::after {
1937
- left: 5px;
1938
- width: 12px;
2022
+ .fs-check-sm {
2023
+ --fs-check-size: 15px;
2024
+ --fs-check-gap: 9px;
2025
+ }
2026
+ .fs-radio-sm {
2027
+ --fs-radio-size: 15px;
2028
+ --fs-radio-dot-size: 7px;
2029
+ --fs-radio-gap: 9px;
2030
+ }
2031
+ .fs-switch-sm {
2032
+ --fs-switch-track-width: 32px;
2033
+ --fs-switch-track-height: 18px;
2034
+ --fs-switch-thumb-width: 14px;
2035
+ --fs-switch-thumb-height: 14px;
2036
+ --fs-switch-thumb-offset: 2px;
2037
+ --fs-switch-on-offset: 16px;
2038
+ --fs-switch-hover-shadow: 0 0 0 3px var(--fs-switch-hover-ring);
2039
+ }
2040
+ .fs-check-lg,
2041
+ .fs-radio-lg,
2042
+ .fs-switch-lg {
2043
+ font-size: 1rem;
1939
2044
  }
1940
- .fs-check-input.is-invalid + .fs-check-label::before {
1941
- background-color: var(--fs-color-danger);
2045
+ .fs-check-lg {
2046
+ --fs-check-size: 22px;
2047
+ --fs-check-gap: 12px;
1942
2048
  }
1943
- .fs-check-input.is-invalid + .fs-check-label::after {
1944
- top: 6px;
1945
- left: 5px;
1946
- width: 8px;
1947
- height: 8px;
1948
- opacity: 1;
1949
- border: 0;
1950
- background-image: linear-gradient(45deg, transparent 42%, #ffffff 42% 58%, transparent 58%), linear-gradient(-45deg, transparent 42%, #ffffff 42% 58%, transparent 58%);
1951
- transform: none;
2049
+ .fs-radio-lg {
2050
+ --fs-radio-size: 22px;
2051
+ --fs-radio-dot-size: 10px;
2052
+ --fs-radio-gap: 12px;
1952
2053
  }
1953
- .fs-check-sm .fs-check-input.is-invalid + .fs-check-label::after {
1954
- top: 5px;
1955
- left: 4px;
1956
- width: 7px;
1957
- height: 7px;
2054
+ .fs-switch-lg {
2055
+ --fs-switch-track-width: 48px;
2056
+ --fs-switch-track-height: 28px;
2057
+ --fs-switch-thumb-width: 22px;
2058
+ --fs-switch-thumb-height: 22px;
2059
+ --fs-switch-thumb-offset: 3px;
2060
+ --fs-switch-on-offset: 23px;
2061
+ --fs-switch-hover-shadow: 0 0 0 5px var(--fs-switch-hover-ring);
1958
2062
  }
1959
- .fs-check-lg .fs-check-input.is-invalid + .fs-check-label::after {
1960
- top: 6px;
1961
- left: 6px;
1962
- width: 10px;
1963
- height: 10px;
2063
+ @media (prefers-reduced-motion: reduce) {
2064
+ .fs-check-label::before,
2065
+ .fs-check-label::after,
2066
+ .fs-radio-label::before,
2067
+ .fs-radio-label::after,
2068
+ .fs-switch-label::before,
2069
+ .fs-switch-label::after {
2070
+ transition-duration: 0ms;
2071
+ }
2072
+ }
2073
+ @media (prefers-contrast: more) {
2074
+ .fs-check,
2075
+ .fs-radio,
2076
+ .fs-switch {
2077
+ --fs-border-width: 2px;
2078
+ --fs-focus-width: 3px;
2079
+ }
2080
+ }
2081
+ @media (forced-colors: active) {
2082
+ .fs-check-label::before,
2083
+ .fs-radio-label::before,
2084
+ .fs-switch-label::before,
2085
+ .fs-switch-label::after {
2086
+ border-color: ButtonText;
2087
+ forced-color-adjust: auto;
2088
+ }
2089
+ .fs-check-input:checked + .fs-check-label::before,
2090
+ .fs-radio-input:checked + .fs-radio-label::before,
2091
+ .fs-switch-input:checked + .fs-switch-label::before {
2092
+ background-color: Highlight;
2093
+ border-color: Highlight;
2094
+ }
2095
+ .fs-switch-label::after {
2096
+ background-color: ButtonFace;
2097
+ border-color: ButtonText;
2098
+ box-shadow: none;
2099
+ }
2100
+ .fs-switch-input:checked + .fs-switch-label::after {
2101
+ background-color: HighlightText;
2102
+ border-color: HighlightText;
2103
+ }
2104
+ .fs-check-input:focus-visible + .fs-check-label::before,
2105
+ .fs-radio-input:focus-visible + .fs-radio-label::before,
2106
+ .fs-switch-input:focus-visible + .fs-switch-label::before {
2107
+ outline: 3px solid Highlight;
2108
+ outline-offset: 2px;
2109
+ }
1964
2110
  }
1965
2111
  }
1966
2112
  @layer components {
@@ -2386,46 +2532,155 @@
2386
2532
  }
2387
2533
  @layer components {
2388
2534
  .fs-alert {
2535
+ --fs-alert-padding-block: 12px;
2536
+ --fs-alert-padding-inline: 16px;
2537
+ --fs-alert-gap: 12px;
2538
+ --fs-alert-radius: var(--fs-radius-md, 6px);
2539
+ --fs-alert-border-width: 1px;
2540
+ --fs-alert-accent-width: 4px;
2541
+ --fs-alert-icon-size: 20px;
2542
+ --fs-alert-heading-gap: 4px;
2543
+ --fs-alert-actions-gap: 8px;
2389
2544
  display: flex;
2390
2545
  align-items: flex-start;
2391
- gap: 8px;
2392
- padding: 12px 16px;
2393
- border: 1px solid var(--fs-color-border);
2394
- border-left: 5px solid var(--fs-color-border);
2395
- border-radius: 0;
2546
+ gap: var(--fs-alert-gap);
2547
+ min-inline-size: 0;
2548
+ padding-block: var(--fs-alert-padding-block);
2549
+ padding-inline: var(--fs-alert-padding-inline);
2550
+ border: var(--fs-alert-border-width) solid var(--fs-color-border);
2551
+ border-inline-start: var(--fs-alert-accent-width) solid var(--fs-color-border);
2552
+ border-radius: var(--fs-alert-radius);
2396
2553
  color: var(--fs-color-text);
2397
2554
  background-color: var(--fs-color-surface-raised);
2398
2555
  font-size: 0.75rem;
2399
2556
  }
2557
+ .fs-alert-inline {
2558
+ --fs-alert-padding-block: 8px;
2559
+ --fs-alert-padding-inline: 12px;
2560
+ --fs-alert-gap: 8px;
2561
+ --fs-alert-accent-width: 3px;
2562
+ --fs-alert-icon-size: 16px;
2563
+ }
2564
+ .fs-alert-group {
2565
+ display: grid;
2566
+ gap: 12px;
2567
+ min-inline-size: 0;
2568
+ }
2569
+ .fs-alert[aria-busy=true],
2570
+ .fs-alert.is-loading {
2571
+ cursor: progress;
2572
+ }
2573
+ .fs-alert[aria-busy=true] .fs-alert-actions,
2574
+ .fs-alert.is-loading .fs-alert-actions {
2575
+ opacity: 0.75;
2576
+ }
2577
+ .fs-alert .fs-spinner {
2578
+ flex: 0 0 auto;
2579
+ align-self: flex-start;
2580
+ margin-block: 2px;
2581
+ }
2582
+ .fs-alert-icon {
2583
+ display: inline-flex;
2584
+ flex: 0 0 var(--fs-alert-icon-size);
2585
+ align-items: center;
2586
+ justify-content: center;
2587
+ inline-size: var(--fs-alert-icon-size);
2588
+ block-size: var(--fs-alert-icon-size);
2589
+ color: currentcolor;
2590
+ }
2591
+ .fs-alert-icon .fs-icon,
2592
+ .fs-alert-icon > svg {
2593
+ inline-size: 100%;
2594
+ block-size: 100%;
2595
+ }
2596
+ .fs-alert-content {
2597
+ flex: 1 1 auto;
2598
+ min-inline-size: 0;
2599
+ }
2600
+ .fs-alert-heading {
2601
+ margin: 0 0 var(--fs-alert-heading-gap);
2602
+ color: inherit;
2603
+ font-size: inherit;
2604
+ font-weight: 600;
2605
+ line-height: 1.35;
2606
+ }
2607
+ .fs-alert-text {
2608
+ margin: 0;
2609
+ line-height: 1.5;
2610
+ }
2611
+ .fs-alert-actions {
2612
+ display: flex;
2613
+ flex-wrap: wrap;
2614
+ gap: var(--fs-alert-actions-gap);
2615
+ align-items: center;
2616
+ margin-block-start: var(--fs-alert-actions-gap);
2617
+ }
2618
+ .fs-alert-link {
2619
+ color: inherit;
2620
+ font-weight: 500;
2621
+ text-decoration: underline;
2622
+ text-underline-offset: 2px;
2623
+ }
2624
+ .fs-alert-close {
2625
+ flex: 0 0 auto;
2626
+ margin-inline-start: auto;
2627
+ color: inherit;
2628
+ }
2400
2629
  .fs-alert-primary {
2401
2630
  color: var(--fs-alert-primary-text);
2402
2631
  background-color: var(--fs-alert-primary-bg);
2403
- border-color: var(--fs-color-primary);
2632
+ border-color: var(--fs-color-border);
2633
+ border-inline-start-color: var(--fs-color-primary);
2404
2634
  }
2405
2635
  .fs-alert-secondary {
2406
2636
  color: var(--fs-alert-secondary-text);
2407
2637
  background-color: var(--fs-alert-secondary-bg);
2408
- border-color: var(--fs-color-secondary);
2638
+ border-color: var(--fs-color-border);
2639
+ border-inline-start-color: var(--fs-color-secondary);
2409
2640
  }
2410
2641
  .fs-alert-success {
2411
2642
  color: var(--fs-alert-success-text);
2412
2643
  background-color: var(--fs-alert-success-bg);
2413
- border-color: var(--fs-color-success);
2644
+ border-color: var(--fs-color-border);
2645
+ border-inline-start-color: var(--fs-color-success);
2414
2646
  }
2415
2647
  .fs-alert-warning {
2416
2648
  color: var(--fs-alert-warning-text);
2417
2649
  background-color: var(--fs-alert-warning-bg);
2418
- border-color: var(--fs-color-warning);
2650
+ border-color: var(--fs-color-border);
2651
+ border-inline-start-color: var(--fs-color-warning);
2419
2652
  }
2420
2653
  .fs-alert-danger {
2421
2654
  color: var(--fs-alert-danger-text);
2422
2655
  background-color: var(--fs-alert-danger-bg);
2423
- border-color: var(--fs-color-danger);
2656
+ border-color: var(--fs-color-border);
2657
+ border-inline-start-color: var(--fs-color-danger);
2424
2658
  }
2425
2659
  .fs-alert-info {
2426
2660
  color: var(--fs-alert-info-text);
2427
2661
  background-color: var(--fs-alert-info-bg);
2428
- border-color: var(--fs-color-info);
2662
+ border-color: var(--fs-color-border);
2663
+ border-inline-start-color: var(--fs-color-info);
2664
+ }
2665
+ @media (width <= 480px) {
2666
+ .fs-alert {
2667
+ --fs-alert-padding-inline: 12px;
2668
+ }
2669
+ .fs-alert-actions {
2670
+ align-items: flex-start;
2671
+ }
2672
+ }
2673
+ @media (forced-colors: active) {
2674
+ .fs-alert {
2675
+ border-color: CanvasText;
2676
+ border-inline-start-color: Highlight;
2677
+ color: CanvasText;
2678
+ background-color: Canvas;
2679
+ }
2680
+ .fs-alert-link,
2681
+ .fs-alert .fs-btn {
2682
+ forced-color-adjust: none;
2683
+ }
2429
2684
  }
2430
2685
  }
2431
2686
  @layer components {
@@ -2434,13 +2689,16 @@
2434
2689
  --fs-badge-bg: var(--fs-color-subtle);
2435
2690
  --fs-badge-border: transparent;
2436
2691
  --fs-badge-height: 22px;
2437
- --fs-badge-radius: 0;
2692
+ --fs-badge-radius: var(--fs-radius-sm);
2693
+ --fs-badge-padding-inline: 8px;
2694
+ --fs-badge-padding-block-start: 2px;
2695
+ --fs-badge-padding-block-end: 2px;
2438
2696
  display: inline-flex;
2439
2697
  align-items: center;
2440
2698
  gap: 6px;
2441
2699
  justify-content: center;
2442
2700
  min-height: var(--fs-badge-height);
2443
- padding: 1px 8px 3px;
2701
+ padding: var(--fs-badge-padding-block-start) var(--fs-badge-padding-inline) var(--fs-badge-padding-block-end);
2444
2702
  border: 1px solid var(--fs-badge-border);
2445
2703
  border-radius: var(--fs-badge-radius);
2446
2704
  color: var(--fs-badge-color);
@@ -2537,12 +2795,16 @@
2537
2795
  }
2538
2796
  .fs-badge-sm {
2539
2797
  --fs-badge-height: 18px;
2540
- padding: 0 6px 2px;
2798
+ --fs-badge-padding-inline: 6px;
2799
+ --fs-badge-padding-block-start: 1px;
2800
+ --fs-badge-padding-block-end: 1px;
2541
2801
  font-size: 0.6875rem;
2542
2802
  }
2543
2803
  .fs-badge-lg {
2544
2804
  --fs-badge-height: 26px;
2545
- padding: 2px 10px 4px;
2805
+ --fs-badge-padding-inline: 10px;
2806
+ --fs-badge-padding-block-start: 3px;
2807
+ --fs-badge-padding-block-end: 3px;
2546
2808
  font-size: 0.8125rem;
2547
2809
  }
2548
2810
  .fs-badge-dot::before {
@@ -2559,13 +2821,19 @@
2559
2821
  padding-inline: 6px;
2560
2822
  font-variant-numeric: tabular-nums;
2561
2823
  }
2824
+ .fs-badge-count-circle {
2825
+ aspect-ratio: 1;
2826
+ min-width: var(--fs-badge-height);
2827
+ padding-inline: 0;
2828
+ border-radius: 50%;
2829
+ }
2562
2830
  .fs-badge-split {
2563
2831
  --fs-badge-split-label-bg: var(--fs-color-black);
2564
2832
  --fs-badge-split-label-color: var(--fs-color-white);
2565
2833
  --fs-badge-split-value-bg: var(--fs-color-primary);
2566
2834
  --fs-badge-split-value-color: #ffffff;
2567
2835
  --fs-badge-split-height: 22px;
2568
- --fs-badge-split-radius: 0;
2836
+ --fs-badge-split-radius: var(--fs-radius-sm);
2569
2837
  display: inline-flex;
2570
2838
  min-height: var(--fs-badge-split-height);
2571
2839
  overflow: hidden;
@@ -2581,7 +2849,8 @@
2581
2849
  display: inline-flex;
2582
2850
  align-items: center;
2583
2851
  min-height: var(--fs-badge-split-height);
2584
- padding: 1px 8px 3px;
2852
+ padding-block: 2px;
2853
+ padding-inline: 8px;
2585
2854
  }
2586
2855
  .fs-badge-split-label {
2587
2856
  color: var(--fs-badge-split-label-color);
@@ -2629,11 +2898,13 @@
2629
2898
  }
2630
2899
  .fs-badge-split.fs-badge-sm .fs-badge-split-label,
2631
2900
  .fs-badge-split.fs-badge-sm .fs-badge-split-value {
2632
- padding: 0 6px 2px;
2901
+ padding-block: 1px;
2902
+ padding-inline: 6px;
2633
2903
  }
2634
2904
  .fs-badge-split.fs-badge-lg .fs-badge-split-label,
2635
2905
  .fs-badge-split.fs-badge-lg .fs-badge-split-value {
2636
- padding: 2px 10px 4px;
2906
+ padding-block: 3px;
2907
+ padding-inline: 10px;
2637
2908
  }
2638
2909
  }
2639
2910
  @layer components {
@@ -3381,8 +3652,17 @@
3381
3652
  }
3382
3653
  @layer components {
3383
3654
  .fs-tag {
3655
+ --fs-tag-icon-size: var(--fs-tag-close-size);
3656
+ --fs-tag-icon-glyph-size: 12px;
3657
+ --fs-tag-icon-gap: 4px;
3658
+ --fs-tag-icon-color: currentcolor;
3659
+ --fs-tag-close-size: calc(var(--fs-badge-height) - 2px);
3660
+ --fs-tag-close-gap: 4px;
3661
+ --fs-tag-padding-inline-start: 8px;
3662
+ --fs-tag-padding-inline-end: 2px;
3384
3663
  gap: 0;
3385
- padding: 0 0 0 8px;
3664
+ padding-inline-start: var(--fs-tag-padding-inline-start);
3665
+ padding-inline-end: var(--fs-tag-padding-inline-end);
3386
3666
  }
3387
3667
  .fs-tag-label {
3388
3668
  min-width: 0;
@@ -3397,23 +3677,29 @@
3397
3677
  }
3398
3678
  .fs-tag-icon {
3399
3679
  display: inline-grid;
3400
- width: 12px;
3401
- height: 12px;
3402
- flex: 0 0 12px;
3403
- margin-right: 4px;
3680
+ width: var(--fs-tag-icon-size);
3681
+ height: var(--fs-tag-icon-size);
3682
+ flex: 0 0 var(--fs-tag-icon-size);
3404
3683
  place-items: center;
3684
+ color: var(--fs-tag-icon-color);
3685
+ margin-inline-end: var(--fs-tag-icon-gap);
3686
+ }
3687
+ .fs-tag-icon-end {
3688
+ margin-inline-start: auto;
3689
+ margin-inline-end: var(--fs-tag-icon-gap);
3405
3690
  }
3406
3691
  .fs-tag-icon .fs-icon {
3407
- width: 12px;
3408
- height: 12px;
3692
+ display: block;
3693
+ width: var(--fs-tag-icon-glyph-size);
3694
+ height: var(--fs-tag-icon-glyph-size);
3409
3695
  stroke: currentcolor;
3410
3696
  }
3411
3697
  .fs-tag .fs-btn-close {
3412
- width: calc(var(--fs-badge-height) - 2px);
3413
- height: calc(var(--fs-badge-height) - 2px);
3414
- flex: 0 0 calc(var(--fs-badge-height) - 2px);
3415
- margin-left: 4px;
3416
- border-radius: 0;
3698
+ width: var(--fs-tag-close-size);
3699
+ height: var(--fs-tag-close-size);
3700
+ flex: 0 0 var(--fs-tag-close-size);
3701
+ margin-inline-start: var(--fs-tag-close-gap);
3702
+ border-radius: var(--fs-badge-radius);
3417
3703
  background-color: transparent;
3418
3704
  color: inherit;
3419
3705
  opacity: 0.7;
@@ -3421,7 +3707,7 @@
3421
3707
  }
3422
3708
  .fs-tag .fs-btn-close::before,
3423
3709
  .fs-tag .fs-btn-close::after {
3424
- top: calc(50% + 1px);
3710
+ top: 50%;
3425
3711
  width: 8px;
3426
3712
  }
3427
3713
  .fs-tag .fs-btn-close:hover {
@@ -3484,6 +3770,9 @@
3484
3770
  .fs-tag-group .fs-tag:focus-within {
3485
3771
  background-color: color-mix(in srgb, currentcolor 18%, transparent);
3486
3772
  }
3773
+ .fs-tag:has(> .fs-tag-icon:not(.fs-tag-icon-end)) {
3774
+ --fs-tag-padding-inline-start: 2px;
3775
+ }
3487
3776
  .fs-tag-overflow {
3488
3777
  --fs-badge-bg: transparent;
3489
3778
  --fs-badge-color: var(--fs-alert-primary-text);
@@ -3534,7 +3823,7 @@
3534
3823
  display: inline-grid;
3535
3824
  width: calc(var(--fs-badge-height) - 2px);
3536
3825
  height: calc(var(--fs-badge-height) - 2px);
3537
- margin-left: 4px;
3826
+ margin-inline-start: var(--fs-tag-close-gap);
3538
3827
  place-items: center;
3539
3828
  }
3540
3829
  .fs-tag-lock svg {
@@ -3795,118 +4084,229 @@
3795
4084
  }
3796
4085
  @layer components {
3797
4086
  .fs-tooltip {
4087
+ --fs-tooltip-max-width: 240px;
4088
+ --fs-tooltip-padding-block: 6px;
4089
+ --fs-tooltip-padding-inline: 10px;
4090
+ --fs-tooltip-radius: var(--fs-radius-sm);
4091
+ --fs-tooltip-offset: 8px;
4092
+ --fs-tooltip-shadow: var(--fs-shadow-sm, 0 2px 8px rgb(0 0 0 / 18%));
4093
+ --fs-tooltip-arrow-size: 8px;
4094
+ --fs-tooltip-transition-duration: 120ms;
3798
4095
  position: absolute;
3799
4096
  z-index: var(--fs-z-tooltip);
3800
4097
  display: none;
3801
- max-width: 220px;
4098
+ max-inline-size: min(var(--fs-tooltip-max-width), 100vw - 16px);
4099
+ min-inline-size: 0;
4100
+ overflow-wrap: anywhere;
3802
4101
  }
3803
4102
  .fs-tooltip.is-open {
3804
4103
  display: block;
4104
+ pointer-events: none;
4105
+ animation: fs-tooltip-in var(--fs-tooltip-transition-duration) ease-out;
3805
4106
  }
3806
4107
  .fs-tooltip-inner {
3807
- padding: 6px 10px;
3808
- border-radius: var(--fs-radius-sm);
4108
+ padding-block: var(--fs-tooltip-padding-block);
4109
+ padding-inline: var(--fs-tooltip-padding-inline);
4110
+ border: 1px solid transparent;
4111
+ border-radius: var(--fs-tooltip-radius);
3809
4112
  color: var(--fs-tooltip-text);
3810
4113
  background-color: var(--fs-tooltip-bg);
4114
+ box-shadow: var(--fs-tooltip-shadow);
3811
4115
  font-size: 0.6875rem;
3812
- text-align: center;
4116
+ line-height: 1.4;
4117
+ text-align: start;
3813
4118
  }
3814
4119
  .fs-tooltip-arrow {
3815
4120
  position: absolute;
3816
- width: 8px;
3817
- height: 8px;
4121
+ inline-size: var(--fs-tooltip-arrow-size);
4122
+ block-size: var(--fs-tooltip-arrow-size);
3818
4123
  background-color: var(--fs-tooltip-bg);
3819
4124
  transform: rotate(45deg);
3820
4125
  }
3821
4126
  .fs-tooltip[data-placement=top] .fs-tooltip-arrow {
3822
- bottom: -4px;
3823
- left: 50%;
3824
- margin-left: -4px;
4127
+ inset-block-end: -4px;
4128
+ inset-inline-start: var(--fs-tooltip-arrow-offset, 50%);
4129
+ margin-inline-start: -4px;
3825
4130
  }
3826
4131
  .fs-tooltip[data-placement=bottom] .fs-tooltip-arrow {
3827
- top: -4px;
3828
- left: 50%;
3829
- margin-left: -4px;
4132
+ inset-block-start: -4px;
4133
+ inset-inline-start: var(--fs-tooltip-arrow-offset, 50%);
4134
+ margin-inline-start: -4px;
3830
4135
  }
3831
4136
  .fs-tooltip[data-placement=left] .fs-tooltip-arrow {
3832
- top: 50%;
3833
- right: -4px;
3834
- margin-top: -4px;
4137
+ inset-block-start: var(--fs-tooltip-arrow-offset, 50%);
4138
+ inset-inline-end: -4px;
4139
+ margin-block-start: -4px;
3835
4140
  }
3836
4141
  .fs-tooltip[data-placement=right] .fs-tooltip-arrow {
3837
- top: 50%;
3838
- left: -4px;
3839
- margin-top: -4px;
4142
+ inset-block-start: var(--fs-tooltip-arrow-offset, 50%);
4143
+ inset-inline-start: -4px;
4144
+ margin-block-start: -4px;
4145
+ }
4146
+ @media (prefers-reduced-motion: reduce) {
4147
+ .fs-tooltip {
4148
+ animation: none;
4149
+ }
4150
+ }
4151
+ @media (forced-colors: active) {
4152
+ .fs-tooltip-inner,
4153
+ .fs-tooltip-arrow {
4154
+ color: CanvasText;
4155
+ background-color: Canvas;
4156
+ border-color: CanvasText;
4157
+ box-shadow: none;
4158
+ }
4159
+ }
4160
+ @media (prefers-contrast: more) {
4161
+ .fs-tooltip-inner {
4162
+ border-color: currentcolor;
4163
+ box-shadow: none;
4164
+ }
4165
+ }
4166
+ @keyframes fs-tooltip-in {
4167
+ from {
4168
+ opacity: 0;
4169
+ transform: translateY(2px);
4170
+ }
4171
+ to {
4172
+ opacity: 1;
4173
+ transform: translateY(0);
4174
+ }
3840
4175
  }
3841
4176
  }
3842
4177
  @layer components {
3843
4178
  .fs-popover {
4179
+ --fs-popover-width: 320px;
4180
+ --fs-popover-max-width: min(var(--fs-popover-width), calc(100vw - 32px));
4181
+ --fs-popover-padding-block: 12px;
4182
+ --fs-popover-padding-inline: 14px;
4183
+ --fs-popover-gap: 10px;
4184
+ --fs-popover-radius: var(--fs-radius-md, 6px);
4185
+ --fs-popover-shadow: var(--fs-shadow-md);
4186
+ --fs-popover-icon-size: 20px;
4187
+ --fs-popover-heading-gap: 4px;
4188
+ --fs-popover-footer-gap: 8px;
4189
+ --fs-popover-arrow-size: 8px;
4190
+ --fs-popover-border-width: 1px;
3844
4191
  position: absolute;
3845
4192
  z-index: var(--fs-z-offcanvas);
3846
4193
  display: none;
3847
- max-width: 280px;
4194
+ inline-size: var(--fs-popover-width);
4195
+ max-inline-size: var(--fs-popover-max-width);
4196
+ min-inline-size: 0;
3848
4197
  color: var(--fs-color-text);
3849
4198
  background-color: var(--fs-color-surface);
3850
- border: 1px solid var(--fs-color-border);
3851
- border-radius: var(--fs-radius-md);
3852
- box-shadow: var(--fs-shadow-md);
4199
+ border: var(--fs-popover-border-width) solid var(--fs-color-border);
4200
+ border-radius: var(--fs-popover-radius);
4201
+ box-shadow: var(--fs-popover-shadow);
4202
+ overflow-wrap: anywhere;
3853
4203
  }
3854
4204
  .fs-popover.is-open {
3855
4205
  display: block;
3856
4206
  }
3857
4207
  .fs-popover-header {
3858
- padding: 10px 14px;
4208
+ display: flex;
4209
+ align-items: center;
4210
+ gap: var(--fs-popover-gap);
4211
+ min-inline-size: 0;
4212
+ padding-block: var(--fs-popover-padding-block);
4213
+ padding-inline: var(--fs-popover-padding-inline);
3859
4214
  background-color: var(--fs-color-subtle);
3860
4215
  border-bottom: 1px solid var(--fs-color-border);
3861
- border-radius: var(--fs-radius-md) var(--fs-radius-md) 0 0;
4216
+ border-radius: var(--fs-popover-radius) var(--fs-popover-radius) 0 0;
3862
4217
  font-size: 0.75rem;
3863
4218
  font-weight: 500;
3864
4219
  }
3865
4220
  .fs-popover-body {
3866
- padding: 14px;
4221
+ min-inline-size: 0;
4222
+ padding-block: var(--fs-popover-padding-block);
4223
+ padding-inline: var(--fs-popover-padding-inline);
3867
4224
  font-size: 0.75rem;
4225
+ line-height: 1.5;
4226
+ }
4227
+ .fs-popover-icon {
4228
+ display: inline-flex;
4229
+ flex: 0 0 var(--fs-popover-icon-size);
4230
+ align-items: center;
4231
+ justify-content: center;
4232
+ inline-size: var(--fs-popover-icon-size);
4233
+ block-size: var(--fs-popover-icon-size);
4234
+ color: currentcolor;
4235
+ }
4236
+ .fs-popover-icon .fs-icon,
4237
+ .fs-popover-icon > svg {
4238
+ inline-size: 100%;
4239
+ block-size: 100%;
4240
+ }
4241
+ .fs-popover-heading {
4242
+ display: flex;
4243
+ flex: 1 1 auto;
4244
+ flex-wrap: wrap;
4245
+ align-items: baseline;
4246
+ gap: var(--fs-popover-heading-gap);
4247
+ min-inline-size: 0;
4248
+ }
4249
+ .fs-popover-title,
4250
+ .fs-popover-meta,
4251
+ .fs-popover-text {
4252
+ min-inline-size: 0;
4253
+ }
4254
+ .fs-popover-meta {
4255
+ color: var(--fs-color-muted);
4256
+ font-size: 0.6875rem;
4257
+ font-weight: 400;
4258
+ }
4259
+ .fs-popover-text {
4260
+ margin: 0;
4261
+ }
4262
+ .fs-popover-close {
4263
+ flex: 0 0 auto;
4264
+ margin-inline-start: auto;
4265
+ color: inherit;
3868
4266
  }
3869
4267
  .fs-popover-footer {
3870
4268
  display: flex;
3871
4269
  align-items: center;
3872
4270
  justify-content: flex-end;
3873
- gap: 8px;
3874
- padding: 10px 14px;
4271
+ flex-wrap: wrap;
4272
+ gap: var(--fs-popover-footer-gap);
4273
+ padding-block: var(--fs-popover-padding-block);
4274
+ padding-inline: var(--fs-popover-padding-inline);
3875
4275
  border-top: 1px solid var(--fs-color-border);
3876
4276
  }
3877
4277
  .fs-popover-arrow {
3878
4278
  position: absolute;
3879
- width: 8px;
3880
- height: 8px;
4279
+ inline-size: var(--fs-popover-arrow-size);
4280
+ block-size: var(--fs-popover-arrow-size);
3881
4281
  background-color: var(--fs-color-surface);
3882
4282
  border: 1px solid var(--fs-color-border);
3883
4283
  transform: rotate(45deg);
3884
4284
  }
3885
4285
  .fs-popover[data-placement=top] .fs-popover-arrow {
3886
4286
  bottom: -5px;
3887
- left: 50%;
3888
- margin-left: -4px;
4287
+ inset-inline-start: var(--fs-popover-arrow-offset, 50%);
4288
+ margin-inline-start: calc(var(--fs-popover-arrow-size) / -2);
3889
4289
  border-top: 0;
3890
4290
  border-left: 0;
3891
4291
  }
3892
4292
  .fs-popover[data-placement=bottom] .fs-popover-arrow {
3893
4293
  top: -5px;
3894
- left: 50%;
3895
- margin-left: -4px;
4294
+ inset-inline-start: var(--fs-popover-arrow-offset, 50%);
4295
+ margin-inline-start: calc(var(--fs-popover-arrow-size) / -2);
3896
4296
  border-right: 0;
3897
4297
  border-bottom: 0;
3898
4298
  }
3899
4299
  .fs-popover[data-placement=left] .fs-popover-arrow {
3900
- top: 50%;
3901
- right: -5px;
3902
- margin-top: -4px;
4300
+ inset-block-start: var(--fs-popover-arrow-offset, 50%);
4301
+ inset-inline-end: calc(var(--fs-popover-arrow-size) / -2 - 1px);
4302
+ margin-block-start: calc(var(--fs-popover-arrow-size) / -2);
3903
4303
  border-bottom: 0;
3904
4304
  border-left: 0;
3905
4305
  }
3906
4306
  .fs-popover[data-placement=right] .fs-popover-arrow {
3907
- top: 50%;
3908
- left: -5px;
3909
- margin-top: -4px;
4307
+ inset-block-start: var(--fs-popover-arrow-offset, 50%);
4308
+ inset-inline-start: calc(var(--fs-popover-arrow-size) / -2 - 1px);
4309
+ margin-block-start: calc(var(--fs-popover-arrow-size) / -2);
3910
4310
  border-top: 0;
3911
4311
  border-right: 0;
3912
4312
  }
@@ -3917,66 +4317,237 @@
3917
4317
  display: flex;
3918
4318
  gap: 12px;
3919
4319
  }
4320
+ .fs-popover[aria-busy=true] {
4321
+ cursor: progress;
4322
+ }
4323
+ @media (width <= 480px) {
4324
+ .fs-popover {
4325
+ --fs-popover-padding-inline: 12px;
4326
+ --fs-popover-max-width: calc(100vw - 24px);
4327
+ }
4328
+ .fs-popover-footer {
4329
+ align-items: flex-start;
4330
+ }
4331
+ }
4332
+ @media (prefers-reduced-motion: reduce) {
4333
+ .fs-popover {
4334
+ transition: none;
4335
+ }
4336
+ }
4337
+ @media (forced-colors: active) {
4338
+ .fs-popover,
4339
+ .fs-popover-arrow {
4340
+ border-color: CanvasText;
4341
+ color: CanvasText;
4342
+ background-color: Canvas;
4343
+ box-shadow: none;
4344
+ }
4345
+ .fs-popover-header,
4346
+ .fs-popover-footer {
4347
+ border-color: CanvasText;
4348
+ background-color: Canvas;
4349
+ }
4350
+ }
3920
4351
  }
3921
4352
  @layer components {
3922
4353
  .fs-toast-container {
4354
+ --fs-toast-offset: 16px;
4355
+ --fs-toast-gap: 8px;
4356
+ --fs-toast-width: 360px;
4357
+ --fs-toast-max-width: calc(100vw - 32px);
3923
4358
  position: fixed;
3924
- right: 16px;
3925
- bottom: 16px;
4359
+ inset-inline-end: calc(var(--fs-toast-offset) + env(safe-area-inset-inline-end, 0px));
4360
+ inset-block-end: calc(var(--fs-toast-offset) + env(safe-area-inset-bottom, 0px));
3926
4361
  z-index: var(--fs-z-toast);
3927
4362
  display: flex;
3928
4363
  flex-direction: column;
3929
- gap: 8px;
3930
- width: min(360px, 100%);
3931
- max-width: calc(100vw - 2 * var(--fs-space-3));
4364
+ gap: var(--fs-toast-gap);
4365
+ inline-size: min(var(--fs-toast-width), 100%);
4366
+ max-inline-size: var(--fs-toast-max-width);
3932
4367
  }
3933
4368
  .fs-toast {
4369
+ --fs-toast-padding-block: 12px;
4370
+ --fs-toast-padding-inline: 14px;
4371
+ --fs-toast-gap: 10px;
4372
+ --fs-toast-radius: var(--fs-radius-md, 6px);
4373
+ --fs-toast-shadow: var(--fs-shadow-md);
4374
+ --fs-toast-icon-size: 20px;
4375
+ --fs-toast-title-gap: 4px;
4376
+ --fs-toast-actions-gap: 8px;
4377
+ --fs-toast-border-width: 1px;
4378
+ --fs-toast-progress-height: 3px;
3934
4379
  display: flex;
3935
4380
  overflow: hidden;
3936
4381
  flex-direction: column;
3937
- border: 1px solid var(--fs-color-border);
3938
- border-radius: var(--fs-radius-md);
4382
+ min-inline-size: 0;
4383
+ border: var(--fs-toast-border-width) solid var(--fs-color-border);
4384
+ border-inline-start: 4px solid var(--fs-color-border);
4385
+ border-radius: var(--fs-toast-radius);
3939
4386
  color: var(--fs-color-text);
3940
4387
  background-color: var(--fs-color-surface);
3941
- box-shadow: var(--fs-shadow-md);
4388
+ box-shadow: var(--fs-toast-shadow);
4389
+ overflow-wrap: anywhere;
3942
4390
  }
3943
4391
  .fs-toast-header {
3944
4392
  display: flex;
3945
4393
  align-items: center;
3946
- justify-content: space-between;
3947
- padding: 10px 12px;
4394
+ gap: var(--fs-toast-gap);
4395
+ min-inline-size: 0;
4396
+ padding-block: var(--fs-toast-padding-block);
4397
+ padding-inline: var(--fs-toast-padding-inline);
3948
4398
  border-bottom: 1px solid var(--fs-color-border);
3949
4399
  font-size: 0.75rem;
3950
4400
  font-weight: 500;
3951
4401
  }
4402
+ .fs-toast-icon {
4403
+ display: inline-flex;
4404
+ flex: 0 0 var(--fs-toast-icon-size);
4405
+ align-items: center;
4406
+ justify-content: center;
4407
+ inline-size: var(--fs-toast-icon-size);
4408
+ block-size: var(--fs-toast-icon-size);
4409
+ color: currentcolor;
4410
+ }
4411
+ .fs-toast-icon .fs-icon,
4412
+ .fs-toast-icon > svg {
4413
+ inline-size: 100%;
4414
+ block-size: 100%;
4415
+ }
4416
+ .fs-toast-heading {
4417
+ display: flex;
4418
+ flex: 1 1 auto;
4419
+ flex-wrap: wrap;
4420
+ align-items: baseline;
4421
+ gap: var(--fs-toast-title-gap);
4422
+ min-inline-size: 0;
4423
+ }
4424
+ .fs-toast-title,
4425
+ .fs-toast-meta {
4426
+ min-inline-size: 0;
4427
+ }
4428
+ .fs-toast-meta {
4429
+ color: var(--fs-color-muted);
4430
+ font-size: 0.6875rem;
4431
+ font-weight: 400;
4432
+ }
4433
+ .fs-toast-close {
4434
+ flex: 0 0 auto;
4435
+ margin-inline-start: auto;
4436
+ color: inherit;
4437
+ }
3952
4438
  .fs-toast-body {
3953
- padding: 12px;
4439
+ min-inline-size: 0;
4440
+ padding-block: var(--fs-toast-padding-block);
4441
+ padding-inline: var(--fs-toast-padding-inline);
3954
4442
  font-size: 0.75rem;
4443
+ line-height: 1.5;
4444
+ }
4445
+ .fs-toast-actions {
4446
+ display: flex;
4447
+ flex-wrap: wrap;
4448
+ gap: var(--fs-toast-actions-gap);
4449
+ align-items: center;
4450
+ padding-block: 0 var(--fs-toast-padding-block);
4451
+ padding-inline: var(--fs-toast-padding-inline);
4452
+ }
4453
+ .fs-toast-link {
4454
+ color: inherit;
4455
+ font-weight: 500;
4456
+ text-decoration: underline;
4457
+ text-underline-offset: 2px;
4458
+ }
4459
+ .fs-toast-progress {
4460
+ display: none;
4461
+ align-self: stretch;
4462
+ margin-inline-start: auto;
4463
+ inline-size: 100%;
4464
+ block-size: var(--fs-toast-progress-height);
4465
+ background-color: currentcolor;
4466
+ opacity: 0.5;
4467
+ }
4468
+ .fs-toast.is-progressing[data-toast-progress=true]:not([data-autohide=false]) .fs-toast-progress {
4469
+ display: block;
4470
+ inline-size: 100%;
4471
+ transition: inline-size 50ms linear;
4472
+ }
4473
+ .fs-toast.is-paused .fs-toast-progress,
4474
+ .fs-toast.is-progressing[data-toast-progress=true]:not([data-autohide=false]):hover .fs-toast-progress {
4475
+ animation-play-state: paused;
3955
4476
  }
3956
4477
  .fs-toast-primary .fs-toast-header {
3957
4478
  color: var(--fs-alert-primary-text);
3958
4479
  background-color: var(--fs-alert-primary-bg);
3959
4480
  }
4481
+ .fs-toast-primary {
4482
+ border-inline-start-color: var(--fs-color-primary);
4483
+ }
3960
4484
  .fs-toast-secondary .fs-toast-header {
3961
4485
  color: var(--fs-alert-secondary-text);
3962
4486
  background-color: var(--fs-alert-secondary-bg);
3963
4487
  }
4488
+ .fs-toast-secondary {
4489
+ border-inline-start-color: var(--fs-color-secondary);
4490
+ }
3964
4491
  .fs-toast-success .fs-toast-header {
3965
4492
  color: var(--fs-alert-success-text);
3966
4493
  background-color: var(--fs-alert-success-bg);
3967
4494
  }
4495
+ .fs-toast-success {
4496
+ border-inline-start-color: var(--fs-color-success);
4497
+ }
3968
4498
  .fs-toast-warning .fs-toast-header {
3969
4499
  color: var(--fs-alert-warning-text);
3970
4500
  background-color: var(--fs-alert-warning-bg);
3971
4501
  }
4502
+ .fs-toast-warning {
4503
+ border-inline-start-color: var(--fs-color-warning);
4504
+ }
3972
4505
  .fs-toast-danger .fs-toast-header {
3973
4506
  color: var(--fs-alert-danger-text);
3974
4507
  background-color: var(--fs-alert-danger-bg);
3975
4508
  }
4509
+ .fs-toast-danger {
4510
+ border-inline-start-color: var(--fs-color-danger);
4511
+ }
3976
4512
  .fs-toast-info .fs-toast-header {
3977
4513
  color: var(--fs-alert-info-text);
3978
4514
  background-color: var(--fs-alert-info-bg);
3979
4515
  }
4516
+ .fs-toast-info {
4517
+ border-inline-start-color: var(--fs-color-info);
4518
+ }
4519
+ @media (width <= 480px) {
4520
+ .fs-toast-container {
4521
+ --fs-toast-offset: 12px;
4522
+ --fs-toast-max-width: calc(100vw - 24px);
4523
+ }
4524
+ .fs-toast-actions {
4525
+ align-items: flex-start;
4526
+ }
4527
+ }
4528
+ @media (prefers-reduced-motion: reduce) {
4529
+ .fs-toast.is-progressing[data-toast-progress=true]:not([data-autohide=false]) .fs-toast-progress {
4530
+ animation: none;
4531
+ inline-size: 100%;
4532
+ transition: none;
4533
+ }
4534
+ }
4535
+ @media (forced-colors: active) {
4536
+ .fs-toast {
4537
+ border-color: CanvasText;
4538
+ border-inline-start-color: Highlight;
4539
+ color: CanvasText;
4540
+ background-color: Canvas;
4541
+ box-shadow: none;
4542
+ }
4543
+ .fs-toast-header {
4544
+ border-color: CanvasText;
4545
+ background-color: Canvas;
4546
+ }
4547
+ .fs-toast-progress {
4548
+ background-color: Highlight;
4549
+ }
4550
+ }
3980
4551
  }
3981
4552
  @layer components {
3982
4553
  .fs-pagination {
@@ -5627,6 +6198,59 @@
5627
6198
  inset-block-start: var(--fs-space-4);
5628
6199
  }
5629
6200
  }
6201
+ /* stylelint-disable declaration-block-single-line-max-declarations */
6202
+ @layer components {
6203
+ .fs-stack {
6204
+ display: flex;
6205
+ flex-direction: column;
6206
+ gap: var(--fs-stack-gap, var(--fs-space-3));
6207
+ }
6208
+ .fs-cluster {
6209
+ display: flex;
6210
+ flex-wrap: wrap;
6211
+ align-items: center;
6212
+ gap: var(--fs-cluster-gap, var(--fs-space-2));
6213
+ }
6214
+ .fs-responsive-media {
6215
+ width: 100%;
6216
+ height: auto;
6217
+ object-fit: cover;
6218
+ }
6219
+ @media (width <= 639.98px) {
6220
+ .fs-modal-dialog, .fs-offcanvas {
6221
+ max-width: 100%;
6222
+ margin-inline: 0;
6223
+ border-radius: 0;
6224
+ }
6225
+ .fs-table-responsive {
6226
+ overflow-x: auto;
6227
+ -webkit-overflow-scrolling: touch;
6228
+ }
6229
+ .fs-btn-group-responsive, .fs-btn-group-responsive > .fs-btn {
6230
+ width: 100%;
6231
+ }
6232
+ .fs-btn-group-responsive {
6233
+ flex-direction: column;
6234
+ }
6235
+ }
6236
+ @media (width >= 640px) {
6237
+ .fs-stack-md-row {
6238
+ flex-direction: row;
6239
+ align-items: center;
6240
+ }
6241
+ }
6242
+ @media (prefers-reduced-motion: reduce) {
6243
+ .fs-stack, .fs-cluster {
6244
+ scroll-behavior: auto;
6245
+ }
6246
+ }
6247
+ @media (forced-colors: active) {
6248
+ .fs-card, .fs-dropdown-menu, .fs-modal-content, .fs-offcanvas, .fs-toast {
6249
+ border: 1px solid CanvasText;
6250
+ box-shadow: none;
6251
+ }
6252
+ }
6253
+ }
5630
6254
  @layer utilities {
5631
6255
  .fs-u-cq {
5632
6256
  container-type: inline-size;
@@ -9040,6 +9664,7 @@
9040
9664
  }
9041
9665
  }
9042
9666
  }
9667
+ /* stylelint-disable declaration-block-single-line-max-declarations */
9043
9668
  @layer utilities {
9044
9669
  .fs-u-color-primary {
9045
9670
  color: var(--fs-color-primary, oklch(53.5630074284% 0.2132145174 261.6264320248deg)) !important;
@@ -9281,6 +9906,141 @@
9281
9906
  text-align: start !important;
9282
9907
  }
9283
9908
  }
9909
+ .fs-u-d-block {
9910
+ display: block !important;
9911
+ }
9912
+ .fs-u-d-inline {
9913
+ display: inline !important;
9914
+ }
9915
+ .fs-u-d-inline-block {
9916
+ display: inline-block !important;
9917
+ }
9918
+ .fs-u-d-flex {
9919
+ display: flex !important;
9920
+ }
9921
+ .fs-u-d-grid {
9922
+ display: grid !important;
9923
+ }
9924
+ .fs-u-d-none {
9925
+ display: none !important;
9926
+ }
9927
+ .fs-u-flex-row {
9928
+ flex-direction: row !important;
9929
+ }
9930
+ .fs-u-flex-column {
9931
+ flex-direction: column !important;
9932
+ }
9933
+ .fs-u-flex-row-reverse {
9934
+ flex-direction: row-reverse !important;
9935
+ }
9936
+ .fs-u-flex-column-reverse {
9937
+ flex-direction: column-reverse !important;
9938
+ }
9939
+ .fs-u-flex-wrap {
9940
+ flex-wrap: wrap !important;
9941
+ }
9942
+ .fs-u-flex-nowrap {
9943
+ flex-wrap: nowrap !important;
9944
+ }
9945
+ .fs-u-justify-start {
9946
+ justify-content: flex-start !important;
9947
+ }
9948
+ .fs-u-justify-center {
9949
+ justify-content: center !important;
9950
+ }
9951
+ .fs-u-justify-end {
9952
+ justify-content: flex-end !important;
9953
+ }
9954
+ .fs-u-justify-between {
9955
+ justify-content: space-between !important;
9956
+ }
9957
+ .fs-u-align-start {
9958
+ align-items: flex-start !important;
9959
+ }
9960
+ .fs-u-align-center {
9961
+ align-items: center !important;
9962
+ }
9963
+ .fs-u-align-end {
9964
+ align-items: flex-end !important;
9965
+ }
9966
+ .fs-u-gap-0 {
9967
+ gap: 0 !important;
9968
+ }
9969
+ .fs-u-row-gap-0 {
9970
+ row-gap: 0 !important;
9971
+ }
9972
+ .fs-u-column-gap-0 {
9973
+ column-gap: 0 !important;
9974
+ }
9975
+ .fs-u-gap-1 {
9976
+ gap: 0.25rem !important;
9977
+ }
9978
+ .fs-u-row-gap-1 {
9979
+ row-gap: 0.25rem !important;
9980
+ }
9981
+ .fs-u-column-gap-1 {
9982
+ column-gap: 0.25rem !important;
9983
+ }
9984
+ .fs-u-gap-2 {
9985
+ gap: 0.5rem !important;
9986
+ }
9987
+ .fs-u-row-gap-2 {
9988
+ row-gap: 0.5rem !important;
9989
+ }
9990
+ .fs-u-column-gap-2 {
9991
+ column-gap: 0.5rem !important;
9992
+ }
9993
+ .fs-u-gap-3 {
9994
+ gap: 1rem !important;
9995
+ }
9996
+ .fs-u-row-gap-3 {
9997
+ row-gap: 1rem !important;
9998
+ }
9999
+ .fs-u-column-gap-3 {
10000
+ column-gap: 1rem !important;
10001
+ }
10002
+ .fs-u-gap-4 {
10003
+ gap: 1.5rem !important;
10004
+ }
10005
+ .fs-u-row-gap-4 {
10006
+ row-gap: 1.5rem !important;
10007
+ }
10008
+ .fs-u-column-gap-4 {
10009
+ column-gap: 1.5rem !important;
10010
+ }
10011
+ .fs-u-gap-5 {
10012
+ gap: 3rem !important;
10013
+ }
10014
+ .fs-u-row-gap-5 {
10015
+ row-gap: 3rem !important;
10016
+ }
10017
+ .fs-u-column-gap-5 {
10018
+ column-gap: 3rem !important;
10019
+ }
10020
+ .fs-u-text-start {
10021
+ text-align: start !important;
10022
+ }
10023
+ .fs-u-text-center {
10024
+ text-align: center !important;
10025
+ }
10026
+ .fs-u-text-end {
10027
+ text-align: end !important;
10028
+ }
10029
+ .fs-u-text-wrap {
10030
+ white-space: normal !important;
10031
+ }
10032
+ .fs-u-text-nowrap {
10033
+ white-space: nowrap !important;
10034
+ }
10035
+ .fs-u-fw-normal {
10036
+ font-weight: 400 !important;
10037
+ }
10038
+ .fs-u-fw-semibold {
10039
+ font-weight: 600 !important;
10040
+ }
10041
+ .fs-u-fw-bold {
10042
+ font-weight: 700 !important;
10043
+ }
9284
10044
  }
9285
10045
  @layer tokens {
9286
10046
  [data-fs-brand=violet] {