fokus-styles 2.4.0 → 2.6.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 (212) hide show
  1. package/dist/css/components.css +561 -83
  2. package/dist/css/components.min.css +1 -1
  3. package/dist/css/fokus-components.css +561 -83
  4. package/dist/css/fokus-components.min.css +1 -1
  5. package/dist/css/fokus-rtl.css +697 -83
  6. package/dist/css/fokus-rtl.min.css +1 -1
  7. package/dist/css/fokus-utilities.css +136 -0
  8. package/dist/css/fokus-utilities.min.css +1 -1
  9. package/dist/css/fokus.css +996 -258
  10. package/dist/css/fokus.min.css +1 -1
  11. package/dist/css/forms.css +300 -176
  12. package/dist/css/forms.min.css +1 -1
  13. package/dist/css/helpers.css +136 -0
  14. package/dist/css/helpers.min.css +1 -1
  15. package/dist/js/fokus.js +270 -25
  16. package/dist/js/fokus.min.js +18 -18
  17. package/package.json +17 -15
  18. package/packages/fokus-components/scss/components/_alerts.scss +128 -6
  19. package/packages/fokus-components/scss/components/_badges.scss +26 -10
  20. package/packages/fokus-components/scss/components/_index.scss +1 -0
  21. package/packages/fokus-components/scss/components/_popover.scss +131 -21
  22. package/packages/fokus-components/scss/components/_responsive.scss +23 -0
  23. package/packages/fokus-components/scss/components/_tag.scss +37 -14
  24. package/packages/fokus-components/scss/components/_toasts.scss +156 -11
  25. package/packages/fokus-components/scss/components/_tooltips.scss +70 -18
  26. package/packages/fokus-components/scss/forms/_check-radio-switch.scss +313 -215
  27. package/packages/fokus-components/scss/forms/_forms.scss +16 -0
  28. package/packages/fokus-js/js/carousel.d.ts +4 -0
  29. package/packages/fokus-js/js/carousel.js +8 -0
  30. package/packages/fokus-js/js/core/positioning.js +18 -9
  31. package/packages/fokus-js/js/dropdown.d.ts +4 -0
  32. package/packages/fokus-js/js/dropdown.js +7 -0
  33. package/packages/fokus-js/js/popover.js +26 -1
  34. package/packages/fokus-js/js/tabs.d.ts +3 -0
  35. package/packages/fokus-js/js/tabs.js +5 -0
  36. package/packages/fokus-js/js/tag.js +17 -0
  37. package/packages/fokus-js/js/toast.js +77 -3
  38. package/packages/fokus-js/js/tooltip.d.ts +8 -1
  39. package/packages/fokus-js/js/tooltip.js +106 -13
  40. package/packages/fokus-utilities/scss/utilities/_api.scss +48 -0
  41. package/CHANGELOG.md +0 -910
  42. package/dist/css/components.css.map +0 -1
  43. package/dist/css/components.min.css.map +0 -1
  44. package/dist/css/fokus-components.css.map +0 -1
  45. package/dist/css/fokus-components.min.css.map +0 -1
  46. package/dist/css/fokus-core.css.map +0 -1
  47. package/dist/css/fokus-core.min.css.map +0 -1
  48. package/dist/css/fokus-dark.css.map +0 -1
  49. package/dist/css/fokus-dark.min.css.map +0 -1
  50. package/dist/css/fokus-rtl.css.map +0 -1
  51. package/dist/css/fokus-rtl.min.css.map +0 -1
  52. package/dist/css/fokus-utilities.css.map +0 -1
  53. package/dist/css/fokus-utilities.min.css.map +0 -1
  54. package/dist/css/fokus.css.map +0 -1
  55. package/dist/css/fokus.min.css.map +0 -1
  56. package/dist/css/fonts.css.map +0 -1
  57. package/dist/css/fonts.min.css.map +0 -1
  58. package/dist/css/forms.css.map +0 -1
  59. package/dist/css/forms.min.css.map +0 -1
  60. package/dist/css/helpers.css.map +0 -1
  61. package/dist/css/helpers.min.css.map +0 -1
  62. package/dist/css/layout.css.map +0 -1
  63. package/dist/css/layout.min.css.map +0 -1
  64. package/dist/js/fokus.js.map +0 -7
  65. package/dist/js/fokus.min.js.map +0 -7
  66. package/docs/README.md +0 -86
  67. package/docs/comparison.md +0 -124
  68. package/docs/components/accordion.md +0 -104
  69. package/docs/components/alert-dialog.md +0 -99
  70. package/docs/components/alert.md +0 -59
  71. package/docs/components/avatar.md +0 -13
  72. package/docs/components/badge.md +0 -82
  73. package/docs/components/breadcrumb.md +0 -93
  74. package/docs/components/button-group.md +0 -13
  75. package/docs/components/button.md +0 -98
  76. package/docs/components/card.md +0 -111
  77. package/docs/components/carousel.md +0 -167
  78. package/docs/components/checkbox.md +0 -97
  79. package/docs/components/close-button.md +0 -13
  80. package/docs/components/code.md +0 -13
  81. package/docs/components/collapse.md +0 -78
  82. package/docs/components/combobox.md +0 -123
  83. package/docs/components/command-palette.md +0 -131
  84. package/docs/components/datatable.md +0 -173
  85. package/docs/components/datepicker.md +0 -137
  86. package/docs/components/divider.md +0 -57
  87. package/docs/components/dropdown.md +0 -103
  88. package/docs/components/empty-state.md +0 -65
  89. package/docs/components/file-upload-advanced.md +0 -116
  90. package/docs/components/file-upload.md +0 -93
  91. package/docs/components/icon-link.md +0 -13
  92. package/docs/components/input-group.md +0 -73
  93. package/docs/components/input.md +0 -90
  94. package/docs/components/list-group.md +0 -13
  95. package/docs/components/modal.md +0 -120
  96. package/docs/components/navbar.md +0 -74
  97. package/docs/components/nested-menu.md +0 -90
  98. package/docs/components/notification-center.md +0 -116
  99. package/docs/components/offcanvas.md +0 -102
  100. package/docs/components/pagination.md +0 -145
  101. package/docs/components/placeholder.md +0 -13
  102. package/docs/components/popover.md +0 -105
  103. package/docs/components/progress.md +0 -126
  104. package/docs/components/radio.md +0 -70
  105. package/docs/components/range.md +0 -83
  106. package/docs/components/rating.md +0 -91
  107. package/docs/components/ratio.md +0 -13
  108. package/docs/components/scrollspy.md +0 -13
  109. package/docs/components/segmented-control.md +0 -82
  110. package/docs/components/select.md +0 -89
  111. package/docs/components/skeleton.md +0 -70
  112. package/docs/components/stepper.md +0 -107
  113. package/docs/components/switch.md +0 -75
  114. package/docs/components/table.md +0 -90
  115. package/docs/components/tabs.md +0 -104
  116. package/docs/components/tag.md +0 -129
  117. package/docs/components/tile.md +0 -112
  118. package/docs/components/timeline.md +0 -78
  119. package/docs/components/toast.md +0 -95
  120. package/docs/components/tooltip.md +0 -77
  121. package/docs/components/tree-view.md +0 -118
  122. package/docs/contributing/contributing.md +0 -18
  123. package/docs/getting-started/installation.md +0 -70
  124. package/docs/getting-started/usage.md +0 -105
  125. package/docs/guides/accessibility.md +0 -102
  126. package/docs/guides/charts.md +0 -73
  127. package/docs/guides/dark-mode.md +0 -90
  128. package/docs/guides/icons.md +0 -99
  129. package/docs/guides/javascript-api.md +0 -9
  130. package/docs/guides/layout-advanced.md +0 -118
  131. package/docs/guides/migration-clarus-to-fokus.md +0 -48
  132. package/docs/guides/migration-external.md +0 -123
  133. package/docs/guides/migration-v1.md +0 -63
  134. package/docs/guides/print.md +0 -30
  135. package/docs/guides/rtl-and-system-preferences.md +0 -28
  136. package/docs/guides/theming.md +0 -140
  137. package/docs/guides/utility-api.md +0 -9
  138. package/docs/prompts/prompt-plan.md +0 -45
  139. package/docs/reference/accessibility-matrix.md +0 -77
  140. package/docs/reference/browser-support.md +0 -75
  141. package/docs/reference/contrast-report.md +0 -50
  142. package/docs/reference/definitions.md +0 -864
  143. package/docs/reference/design-tokens.md +0 -194
  144. package/docs/reference/scss-architecture.md +0 -227
  145. package/docs/reference/size-baseline.json +0 -34
  146. package/docs/reference/stability.md +0 -89
  147. package/docs/showcase.md +0 -25
  148. package/mockup/README.md +0 -41
  149. package/mockup/assets/carousel-planning.png +0 -0
  150. package/mockup/assets/carousel-workspace.png +0 -0
  151. package/mockup/assets/example-theme.css +0 -8
  152. package/mockup/assets/example-theme.js +0 -11
  153. package/mockup/assets/showcase-contracts.js +0 -84
  154. package/mockup/assets/showcase.css +0 -91
  155. package/mockup/assets/showcase.js +0 -724
  156. package/mockup/content-data.html +0 -9
  157. package/mockup/examples/accordion-tabs-toast.html +0 -149
  158. package/mockup/examples/alert-dialog.html +0 -84
  159. package/mockup/examples/alerts.html +0 -41
  160. package/mockup/examples/badges-alerts.html +0 -77
  161. package/mockup/examples/buttons.html +0 -58
  162. package/mockup/examples/cards.html +0 -132
  163. package/mockup/examples/carousel.html +0 -126
  164. package/mockup/examples/charts.html +0 -102
  165. package/mockup/examples/check-radio-switch.html +0 -144
  166. package/mockup/examples/collapse.html +0 -69
  167. package/mockup/examples/combobox.html +0 -60
  168. package/mockup/examples/command-palette.html +0 -64
  169. package/mockup/examples/datatable.html +0 -113
  170. package/mockup/examples/datepicker.html +0 -62
  171. package/mockup/examples/divider.html +0 -45
  172. package/mockup/examples/dropdown-tooltip.html +0 -77
  173. package/mockup/examples/empty-state.html +0 -56
  174. package/mockup/examples/file-drop.html +0 -74
  175. package/mockup/examples/file-upload-advanced.html +0 -68
  176. package/mockup/examples/forms-advanced.html +0 -77
  177. package/mockup/examples/hover-card.html +0 -86
  178. package/mockup/examples/icons.html +0 -157
  179. package/mockup/examples/input-group.html +0 -74
  180. package/mockup/examples/js-foundation.html +0 -215
  181. package/mockup/examples/layout.html +0 -134
  182. package/mockup/examples/modal-select.html +0 -127
  183. package/mockup/examples/nested-menu.html +0 -73
  184. package/mockup/examples/notification-center.html +0 -86
  185. package/mockup/examples/offcanvas-popover.html +0 -133
  186. package/mockup/examples/pagination-breadcrumbs.html +0 -92
  187. package/mockup/examples/range.html +0 -69
  188. package/mockup/examples/rating.html +0 -103
  189. package/mockup/examples/segmented-control.html +0 -96
  190. package/mockup/examples/skeletons.html +0 -82
  191. package/mockup/examples/spinner-progress.html +0 -130
  192. package/mockup/examples/stepper.html +0 -119
  193. package/mockup/examples/tables-navbar.html +0 -89
  194. package/mockup/examples/tag.html +0 -105
  195. package/mockup/examples/theming.html +0 -68
  196. package/mockup/examples/tile.html +0 -107
  197. package/mockup/examples/timeline.html +0 -108
  198. package/mockup/examples/tree-view.html +0 -68
  199. package/mockup/feedback-actions.html +0 -9
  200. package/mockup/forms.html +0 -13
  201. package/mockup/foundations.html +0 -7
  202. package/mockup/kitchen-sink.html +0 -696
  203. package/mockup/navigation-disclosure.html +0 -11
  204. package/mockup/overlays-commands.html +0 -12
  205. package/mockup/templates/README.md +0 -20
  206. package/mockup/templates/admin.html +0 -334
  207. package/mockup/templates/auth.html +0 -234
  208. package/mockup/templates/dashboard.html +0 -442
  209. package/mockup/templates/landing.html +0 -397
  210. package/packages/fokus-icons/package.json +0 -46
  211. package/scripts/migrate-fokus-map.json +0 -1366
  212. package/scripts/migrate-fokus.mjs +0 -97
@@ -1363,6 +1363,20 @@
1363
1363
  }
1364
1364
  }
1365
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
+ }
1366
1380
  .fs-form-row {
1367
1381
  display: flex;
1368
1382
  flex-direction: row;
@@ -1706,9 +1720,53 @@
1706
1720
  .fs-switch {
1707
1721
  display: inline-flex;
1708
1722
  align-items: center;
1723
+ min-inline-size: 0;
1709
1724
  }
1710
1725
  .fs-check {
1711
- --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);
1712
1770
  }
1713
1771
  .fs-check-input,
1714
1772
  .fs-radio-input,
@@ -1729,105 +1787,140 @@
1729
1787
  position: relative;
1730
1788
  display: inline-flex;
1731
1789
  align-items: center;
1732
- min-height: 20px;
1733
- padding-left: 28px;
1790
+ min-block-size: 24px;
1791
+ min-inline-size: 24px;
1734
1792
  color: var(--fs-color-text);
1735
1793
  font-size: 0.8125rem;
1794
+ line-height: 1.35;
1736
1795
  cursor: pointer;
1737
1796
  -webkit-user-select: none;
1738
1797
  user-select: none;
1739
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
+ }
1740
1808
  .fs-check-label::before,
1741
1809
  .fs-radio-label::before,
1742
1810
  .fs-switch-label::before {
1743
1811
  position: absolute;
1744
- left: 0;
1812
+ inset-block-start: 50%;
1745
1813
  box-sizing: border-box;
1746
- border: 1px solid var(--fs-color-border);
1814
+ border: var(--fs-border-width) solid var(--fs-color-border);
1747
1815
  background-color: var(--fs-color-surface);
1748
1816
  content: "";
1749
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
1750
- }
1751
- .fs-check-label::before,
1752
- .fs-radio-label::before {
1753
- width: 18px;
1754
- 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);
1755
1819
  }
1756
1820
  .fs-check-label::before {
1757
- border: 2px solid var(--fs-color-primary);
1758
- 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);
1759
1826
  }
1760
1827
  .fs-radio-label::before {
1761
- 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);
1762
1832
  }
1763
- .fs-check-label::after {
1833
+ .fs-check-label::after,
1834
+ .fs-radio-label::after,
1835
+ .fs-switch-label::after {
1764
1836
  position: absolute;
1765
- left: 4px;
1766
- width: 9px;
1767
- height: 5px;
1768
1837
  content: "";
1769
1838
  opacity: 0;
1770
- border-bottom: 2px solid var(--fs-check-mark);
1771
- border-left: 2px solid var(--fs-check-mark);
1772
- transform: translateY(-1px) rotate(-45deg);
1773
- 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);
1774
1849
  }
1775
1850
  .fs-radio-label::after {
1776
- position: absolute;
1777
- left: 5px;
1778
- width: 8px;
1779
- 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);
1780
1855
  border-radius: 50%;
1781
- content: "";
1782
- opacity: 0;
1783
1856
  background-color: var(--fs-color-on-primary);
1784
- transition: opacity 0.1s ease-in-out;
1857
+ transform: translateY(-50%);
1785
1858
  }
1786
1859
  .fs-check-input:checked + .fs-check-label::before,
1787
1860
  .fs-radio-input:checked + .fs-radio-label::before {
1788
- background-color: var(--fs-color-primary);
1789
1861
  border-color: var(--fs-color-primary);
1862
+ background-color: var(--fs-color-primary);
1790
1863
  }
1791
1864
  .fs-check-input:checked + .fs-check-label::after,
1792
1865
  .fs-radio-input:checked + .fs-radio-label::after {
1793
1866
  opacity: 1;
1794
1867
  }
1795
- .fs-check-input:not(:checked, :indeterminate, :disabled, .is-invalid) + .fs-check-label:hover::before {
1796
- background-color: color-mix(in srgb, var(--fs-color-primary) 10%, transparent);
1797
- }
1798
- .fs-check-input:not(:disabled, :indeterminate, .is-invalid) + .fs-check-label:active::before {
1799
- background-color: color-mix(in srgb, var(--fs-color-primary) 86%, var(--fs-color-black));
1800
- 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);
1801
1872
  }
1802
- .fs-check-input:checked:not(:disabled, .is-invalid) + .fs-check-label:active::after {
1803
- 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));
1804
1877
  }
1805
- .fs-switch-label {
1806
- 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);
1807
1883
  }
1808
1884
  .fs-switch-label::before {
1809
- width: 36px;
1810
- height: 20px;
1811
- 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);
1812
1892
  }
1813
1893
  .fs-switch-label::after {
1814
- position: absolute;
1815
- left: 2px;
1816
- width: 16px;
1817
- height: 14px;
1818
- border-radius: var(--fs-radius-sm);
1819
- content: "";
1820
- background-color: var(--fs-color-border);
1821
- 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);
1822
1904
  }
1823
1905
  .fs-switch-input:checked + .fs-switch-label::before {
1824
- background-color: var(--fs-color-primary);
1825
- 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;
1826
1909
  }
1827
1910
  .fs-switch-input:checked + .fs-switch-label::after {
1828
- left: 18px;
1911
+ inset-inline-start: var(--fs-switch-on-offset);
1912
+ border-color: var(--fs-color-on-primary);
1829
1913
  background-color: var(--fs-color-on-primary);
1830
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
+ }
1831
1924
  .fs-check-input:focus-visible + .fs-check-label::before,
1832
1925
  .fs-radio-input:focus-visible + .fs-radio-label::before,
1833
1926
  .fs-switch-input:focus-visible + .fs-switch-label::before {
@@ -1836,153 +1929,184 @@
1836
1929
  border-color: var(--fs-color-primary);
1837
1930
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--fs-color-primary) 22%, transparent);
1838
1931
  }
1932
+ .fs-check-input:disabled + .fs-check-label,
1839
1933
  .fs-radio-input:disabled + .fs-radio-label,
1840
1934
  .fs-switch-input:disabled + .fs-switch-label {
1841
- opacity: 0.5;
1842
- pointer-events: none;
1843
- }
1844
- .fs-check-input:disabled + .fs-check-label {
1845
1935
  color: var(--fs-color-muted);
1846
- opacity: 1;
1936
+ cursor: default;
1937
+ opacity: var(--fs-disabled-opacity);
1847
1938
  pointer-events: none;
1848
1939
  }
1849
- .fs-check-input:disabled:not(:checked, :indeterminate) + .fs-check-label::before {
1850
- 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 {
1851
1948
  background-color: var(--fs-color-subtle);
1949
+ box-shadow: none;
1852
1950
  }
1853
- .fs-check-input:disabled:checked + .fs-check-label::before {
1854
- border-color: color-mix(in srgb, var(--fs-color-primary) 55%, var(--fs-color-border));
1855
- 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));
1856
1956
  }
1857
- .fs-check-input:disabled:checked + .fs-check-label::after {
1858
- opacity: 0.72;
1957
+ .fs-switch-input:disabled:checked + .fs-switch-label::after {
1958
+ background-color: var(--fs-color-on-primary);
1859
1959
  }
1860
- .fs-radio-input.is-valid + .fs-radio-label::before {
1861
- 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);
1862
1967
  }
1863
1968
  .fs-check-input.is-invalid + .fs-check-label::before,
1864
- .fs-radio-input.is-invalid + .fs-radio-label::before {
1865
- border-color: var(--fs-color-danger);
1866
- }
1867
- .fs-check-sm .fs-check-label,
1868
- .fs-radio-sm .fs-radio-label {
1869
- min-height: 16px;
1870
- padding-left: 24px;
1871
- font-size: 0.75rem;
1872
- }
1873
- .fs-check-sm .fs-check-label::before,
1874
- .fs-radio-sm .fs-radio-label::before {
1875
- width: 15px;
1876
- height: 15px;
1877
- }
1878
- .fs-check-sm .fs-check-label::after {
1879
- left: 3px;
1880
- width: 8px;
1881
- height: 4px;
1882
- }
1883
- .fs-radio-sm .fs-radio-label::after {
1884
- left: 4px;
1885
- width: 7px;
1886
- height: 7px;
1887
- }
1888
- .fs-check-lg .fs-check-label,
1889
- .fs-radio-lg .fs-radio-label {
1890
- min-height: 24px;
1891
- padding-left: 34px;
1892
- font-size: 1rem;
1893
- }
1894
- .fs-check-lg .fs-check-label::before,
1895
- .fs-radio-lg .fs-radio-label::before {
1896
- width: 22px;
1897
- height: 22px;
1898
- }
1899
- .fs-check-lg .fs-check-label::after {
1900
- left: 5px;
1901
- width: 11px;
1902
- height: 6px;
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;
1903
1986
  }
1904
- .fs-radio-lg .fs-radio-label::after {
1905
- left: 6px;
1906
- width: 10px;
1907
- height: 10px;
1908
- }
1909
- .fs-switch-sm .fs-switch-label {
1910
- min-height: 16px;
1911
- padding-left: 38px;
1912
- font-size: 0.75rem;
1913
- }
1914
- .fs-switch-sm .fs-switch-label::before {
1915
- width: 30px;
1916
- height: 16px;
1917
- }
1918
- .fs-switch-sm .fs-switch-label::after {
1919
- width: 12px;
1920
- height: 10px;
1921
- }
1922
- .fs-switch-sm .fs-switch-input:checked + .fs-switch-label::after {
1923
- left: 16px;
1924
- }
1925
- .fs-switch-lg .fs-switch-label {
1926
- min-height: 26px;
1927
- padding-left: 52px;
1928
- font-size: 1rem;
1929
- }
1930
- .fs-switch-lg .fs-switch-label::before {
1931
- width: 44px;
1932
- height: 24px;
1933
- }
1934
- .fs-switch-lg .fs-switch-label::after {
1935
- width: 20px;
1936
- 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);
1937
1990
  }
1938
- .fs-switch-lg .fs-switch-input:checked + .fs-switch-label::after {
1939
- 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%);
1940
2001
  }
1941
2002
  .fs-check-input:indeterminate + .fs-check-label::before {
1942
- border: 2px dashed var(--fs-color-primary);
2003
+ border-color: var(--fs-color-primary);
1943
2004
  background-color: var(--fs-color-surface);
1944
2005
  }
1945
2006
  .fs-check-input:indeterminate + .fs-check-label::after {
1946
- left: 4px;
2007
+ inset-inline-start: calc((var(--fs-check-size) - 10px) / 2);
2008
+ inset-block-start: 50%;
1947
2009
  width: 10px;
1948
- height: 0;
2010
+ height: 2px;
2011
+ border: 0;
2012
+ border-radius: 1px;
2013
+ background-color: var(--fs-color-primary);
1949
2014
  opacity: 1;
1950
- border-bottom: 2px solid var(--fs-color-primary);
1951
- border-left: 0;
1952
- transform: translateY(3px) rotate(0deg);
2015
+ transform: translateY(-50%);
1953
2016
  }
1954
- .fs-check-sm .fs-check-input:indeterminate + .fs-check-label::after {
1955
- left: 3px;
1956
- width: 8px;
2017
+ .fs-check-sm,
2018
+ .fs-radio-sm,
2019
+ .fs-switch-sm {
2020
+ font-size: 0.75rem;
1957
2021
  }
1958
- .fs-check-lg .fs-check-input:indeterminate + .fs-check-label::after {
1959
- left: 5px;
1960
- 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;
1961
2044
  }
1962
- .fs-check-input.is-invalid + .fs-check-label::before {
1963
- background-color: var(--fs-color-danger);
2045
+ .fs-check-lg {
2046
+ --fs-check-size: 22px;
2047
+ --fs-check-gap: 12px;
1964
2048
  }
1965
- .fs-check-input.is-invalid + .fs-check-label::after {
1966
- top: 6px;
1967
- left: 5px;
1968
- width: 8px;
1969
- height: 8px;
1970
- opacity: 1;
1971
- border: 0;
1972
- background-image: linear-gradient(45deg, transparent 42%, #ffffff 42% 58%, transparent 58%), linear-gradient(-45deg, transparent 42%, #ffffff 42% 58%, transparent 58%);
1973
- transform: none;
2049
+ .fs-radio-lg {
2050
+ --fs-radio-size: 22px;
2051
+ --fs-radio-dot-size: 10px;
2052
+ --fs-radio-gap: 12px;
1974
2053
  }
1975
- .fs-check-sm .fs-check-input.is-invalid + .fs-check-label::after {
1976
- top: 5px;
1977
- left: 4px;
1978
- width: 7px;
1979
- 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);
1980
2062
  }
1981
- .fs-check-lg .fs-check-input.is-invalid + .fs-check-label::after {
1982
- top: 6px;
1983
- left: 6px;
1984
- width: 10px;
1985
- 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
+ }
1986
2110
  }
1987
2111
  }
1988
2112
  @layer components {
@@ -2408,46 +2532,155 @@
2408
2532
  }
2409
2533
  @layer components {
2410
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;
2411
2544
  display: flex;
2412
2545
  align-items: flex-start;
2413
- gap: 8px;
2414
- padding: 12px 16px;
2415
- border: 1px solid var(--fs-color-border);
2416
- border-left: 5px solid var(--fs-color-border);
2417
- 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);
2418
2553
  color: var(--fs-color-text);
2419
2554
  background-color: var(--fs-color-surface-raised);
2420
2555
  font-size: 0.75rem;
2421
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
+ }
2422
2629
  .fs-alert-primary {
2423
2630
  color: var(--fs-alert-primary-text);
2424
2631
  background-color: var(--fs-alert-primary-bg);
2425
- border-color: var(--fs-color-primary);
2632
+ border-color: var(--fs-color-border);
2633
+ border-inline-start-color: var(--fs-color-primary);
2426
2634
  }
2427
2635
  .fs-alert-secondary {
2428
2636
  color: var(--fs-alert-secondary-text);
2429
2637
  background-color: var(--fs-alert-secondary-bg);
2430
- border-color: var(--fs-color-secondary);
2638
+ border-color: var(--fs-color-border);
2639
+ border-inline-start-color: var(--fs-color-secondary);
2431
2640
  }
2432
2641
  .fs-alert-success {
2433
2642
  color: var(--fs-alert-success-text);
2434
2643
  background-color: var(--fs-alert-success-bg);
2435
- border-color: var(--fs-color-success);
2644
+ border-color: var(--fs-color-border);
2645
+ border-inline-start-color: var(--fs-color-success);
2436
2646
  }
2437
2647
  .fs-alert-warning {
2438
2648
  color: var(--fs-alert-warning-text);
2439
2649
  background-color: var(--fs-alert-warning-bg);
2440
- border-color: var(--fs-color-warning);
2650
+ border-color: var(--fs-color-border);
2651
+ border-inline-start-color: var(--fs-color-warning);
2441
2652
  }
2442
2653
  .fs-alert-danger {
2443
2654
  color: var(--fs-alert-danger-text);
2444
2655
  background-color: var(--fs-alert-danger-bg);
2445
- border-color: var(--fs-color-danger);
2656
+ border-color: var(--fs-color-border);
2657
+ border-inline-start-color: var(--fs-color-danger);
2446
2658
  }
2447
2659
  .fs-alert-info {
2448
2660
  color: var(--fs-alert-info-text);
2449
2661
  background-color: var(--fs-alert-info-bg);
2450
- 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
+ }
2451
2684
  }
2452
2685
  }
2453
2686
  @layer components {
@@ -2456,13 +2689,16 @@
2456
2689
  --fs-badge-bg: var(--fs-color-subtle);
2457
2690
  --fs-badge-border: transparent;
2458
2691
  --fs-badge-height: 22px;
2459
- --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;
2460
2696
  display: inline-flex;
2461
2697
  align-items: center;
2462
2698
  gap: 6px;
2463
2699
  justify-content: center;
2464
2700
  min-height: var(--fs-badge-height);
2465
- padding: 1px 8px 3px;
2701
+ padding: var(--fs-badge-padding-block-start) var(--fs-badge-padding-inline) var(--fs-badge-padding-block-end);
2466
2702
  border: 1px solid var(--fs-badge-border);
2467
2703
  border-radius: var(--fs-badge-radius);
2468
2704
  color: var(--fs-badge-color);
@@ -2559,12 +2795,16 @@
2559
2795
  }
2560
2796
  .fs-badge-sm {
2561
2797
  --fs-badge-height: 18px;
2562
- padding: 0 6px 2px;
2798
+ --fs-badge-padding-inline: 6px;
2799
+ --fs-badge-padding-block-start: 1px;
2800
+ --fs-badge-padding-block-end: 1px;
2563
2801
  font-size: 0.6875rem;
2564
2802
  }
2565
2803
  .fs-badge-lg {
2566
2804
  --fs-badge-height: 26px;
2567
- padding: 2px 10px 4px;
2805
+ --fs-badge-padding-inline: 10px;
2806
+ --fs-badge-padding-block-start: 3px;
2807
+ --fs-badge-padding-block-end: 3px;
2568
2808
  font-size: 0.8125rem;
2569
2809
  }
2570
2810
  .fs-badge-dot::before {
@@ -2581,13 +2821,19 @@
2581
2821
  padding-inline: 6px;
2582
2822
  font-variant-numeric: tabular-nums;
2583
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
+ }
2584
2830
  .fs-badge-split {
2585
2831
  --fs-badge-split-label-bg: var(--fs-color-black);
2586
2832
  --fs-badge-split-label-color: var(--fs-color-white);
2587
2833
  --fs-badge-split-value-bg: var(--fs-color-primary);
2588
2834
  --fs-badge-split-value-color: #ffffff;
2589
2835
  --fs-badge-split-height: 22px;
2590
- --fs-badge-split-radius: 0;
2836
+ --fs-badge-split-radius: var(--fs-radius-sm);
2591
2837
  display: inline-flex;
2592
2838
  min-height: var(--fs-badge-split-height);
2593
2839
  overflow: hidden;
@@ -2603,7 +2849,8 @@
2603
2849
  display: inline-flex;
2604
2850
  align-items: center;
2605
2851
  min-height: var(--fs-badge-split-height);
2606
- padding: 1px 8px 3px;
2852
+ padding-block: 2px;
2853
+ padding-inline: 8px;
2607
2854
  }
2608
2855
  .fs-badge-split-label {
2609
2856
  color: var(--fs-badge-split-label-color);
@@ -2651,11 +2898,13 @@
2651
2898
  }
2652
2899
  .fs-badge-split.fs-badge-sm .fs-badge-split-label,
2653
2900
  .fs-badge-split.fs-badge-sm .fs-badge-split-value {
2654
- padding: 0 6px 2px;
2901
+ padding-block: 1px;
2902
+ padding-inline: 6px;
2655
2903
  }
2656
2904
  .fs-badge-split.fs-badge-lg .fs-badge-split-label,
2657
2905
  .fs-badge-split.fs-badge-lg .fs-badge-split-value {
2658
- padding: 2px 10px 4px;
2906
+ padding-block: 3px;
2907
+ padding-inline: 10px;
2659
2908
  }
2660
2909
  }
2661
2910
  @layer components {
@@ -3403,8 +3652,17 @@
3403
3652
  }
3404
3653
  @layer components {
3405
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;
3406
3663
  gap: 0;
3407
- 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);
3408
3666
  }
3409
3667
  .fs-tag-label {
3410
3668
  min-width: 0;
@@ -3419,23 +3677,29 @@
3419
3677
  }
3420
3678
  .fs-tag-icon {
3421
3679
  display: inline-grid;
3422
- width: 12px;
3423
- height: 12px;
3424
- flex: 0 0 12px;
3425
- 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);
3426
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);
3427
3690
  }
3428
3691
  .fs-tag-icon .fs-icon {
3429
- width: 12px;
3430
- height: 12px;
3692
+ display: block;
3693
+ width: var(--fs-tag-icon-glyph-size);
3694
+ height: var(--fs-tag-icon-glyph-size);
3431
3695
  stroke: currentcolor;
3432
3696
  }
3433
3697
  .fs-tag .fs-btn-close {
3434
- width: calc(var(--fs-badge-height) - 2px);
3435
- height: calc(var(--fs-badge-height) - 2px);
3436
- flex: 0 0 calc(var(--fs-badge-height) - 2px);
3437
- margin-left: 4px;
3438
- 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);
3439
3703
  background-color: transparent;
3440
3704
  color: inherit;
3441
3705
  opacity: 0.7;
@@ -3443,7 +3707,7 @@
3443
3707
  }
3444
3708
  .fs-tag .fs-btn-close::before,
3445
3709
  .fs-tag .fs-btn-close::after {
3446
- top: calc(50% + 1px);
3710
+ top: 50%;
3447
3711
  width: 8px;
3448
3712
  }
3449
3713
  .fs-tag .fs-btn-close:hover {
@@ -3506,6 +3770,9 @@
3506
3770
  .fs-tag-group .fs-tag:focus-within {
3507
3771
  background-color: color-mix(in srgb, currentcolor 18%, transparent);
3508
3772
  }
3773
+ .fs-tag:has(> .fs-tag-icon:not(.fs-tag-icon-end)) {
3774
+ --fs-tag-padding-inline-start: 2px;
3775
+ }
3509
3776
  .fs-tag-overflow {
3510
3777
  --fs-badge-bg: transparent;
3511
3778
  --fs-badge-color: var(--fs-alert-primary-text);
@@ -3556,7 +3823,7 @@
3556
3823
  display: inline-grid;
3557
3824
  width: calc(var(--fs-badge-height) - 2px);
3558
3825
  height: calc(var(--fs-badge-height) - 2px);
3559
- margin-left: 4px;
3826
+ margin-inline-start: var(--fs-tag-close-gap);
3560
3827
  place-items: center;
3561
3828
  }
3562
3829
  .fs-tag-lock svg {
@@ -3817,118 +4084,229 @@
3817
4084
  }
3818
4085
  @layer components {
3819
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;
3820
4095
  position: absolute;
3821
4096
  z-index: var(--fs-z-tooltip);
3822
4097
  display: none;
3823
- max-width: 220px;
4098
+ max-inline-size: min(var(--fs-tooltip-max-width), 100vw - 16px);
4099
+ min-inline-size: 0;
4100
+ overflow-wrap: anywhere;
3824
4101
  }
3825
4102
  .fs-tooltip.is-open {
3826
4103
  display: block;
4104
+ pointer-events: none;
4105
+ animation: fs-tooltip-in var(--fs-tooltip-transition-duration) ease-out;
3827
4106
  }
3828
4107
  .fs-tooltip-inner {
3829
- padding: 6px 10px;
3830
- 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);
3831
4112
  color: var(--fs-tooltip-text);
3832
4113
  background-color: var(--fs-tooltip-bg);
4114
+ box-shadow: var(--fs-tooltip-shadow);
3833
4115
  font-size: 0.6875rem;
3834
- text-align: center;
4116
+ line-height: 1.4;
4117
+ text-align: start;
3835
4118
  }
3836
4119
  .fs-tooltip-arrow {
3837
4120
  position: absolute;
3838
- width: 8px;
3839
- height: 8px;
4121
+ inline-size: var(--fs-tooltip-arrow-size);
4122
+ block-size: var(--fs-tooltip-arrow-size);
3840
4123
  background-color: var(--fs-tooltip-bg);
3841
4124
  transform: rotate(45deg);
3842
4125
  }
3843
4126
  .fs-tooltip[data-placement=top] .fs-tooltip-arrow {
3844
- bottom: -4px;
3845
- left: 50%;
3846
- margin-left: -4px;
4127
+ inset-block-end: -4px;
4128
+ inset-inline-start: var(--fs-tooltip-arrow-offset, 50%);
4129
+ margin-inline-start: -4px;
3847
4130
  }
3848
4131
  .fs-tooltip[data-placement=bottom] .fs-tooltip-arrow {
3849
- top: -4px;
3850
- left: 50%;
3851
- margin-left: -4px;
4132
+ inset-block-start: -4px;
4133
+ inset-inline-start: var(--fs-tooltip-arrow-offset, 50%);
4134
+ margin-inline-start: -4px;
3852
4135
  }
3853
4136
  .fs-tooltip[data-placement=left] .fs-tooltip-arrow {
3854
- top: 50%;
3855
- right: -4px;
3856
- margin-top: -4px;
4137
+ inset-block-start: var(--fs-tooltip-arrow-offset, 50%);
4138
+ inset-inline-end: -4px;
4139
+ margin-block-start: -4px;
3857
4140
  }
3858
4141
  .fs-tooltip[data-placement=right] .fs-tooltip-arrow {
3859
- top: 50%;
3860
- left: -4px;
3861
- 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
+ }
3862
4175
  }
3863
4176
  }
3864
4177
  @layer components {
3865
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;
3866
4191
  position: absolute;
3867
4192
  z-index: var(--fs-z-offcanvas);
3868
4193
  display: none;
3869
- max-width: 280px;
4194
+ inline-size: var(--fs-popover-width);
4195
+ max-inline-size: var(--fs-popover-max-width);
4196
+ min-inline-size: 0;
3870
4197
  color: var(--fs-color-text);
3871
4198
  background-color: var(--fs-color-surface);
3872
- border: 1px solid var(--fs-color-border);
3873
- border-radius: var(--fs-radius-md);
3874
- 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;
3875
4203
  }
3876
4204
  .fs-popover.is-open {
3877
4205
  display: block;
3878
4206
  }
3879
4207
  .fs-popover-header {
3880
- 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);
3881
4214
  background-color: var(--fs-color-subtle);
3882
4215
  border-bottom: 1px solid var(--fs-color-border);
3883
- 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;
3884
4217
  font-size: 0.75rem;
3885
4218
  font-weight: 500;
3886
4219
  }
3887
4220
  .fs-popover-body {
3888
- padding: 14px;
4221
+ min-inline-size: 0;
4222
+ padding-block: var(--fs-popover-padding-block);
4223
+ padding-inline: var(--fs-popover-padding-inline);
3889
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;
3890
4266
  }
3891
4267
  .fs-popover-footer {
3892
4268
  display: flex;
3893
4269
  align-items: center;
3894
4270
  justify-content: flex-end;
3895
- gap: 8px;
3896
- 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);
3897
4275
  border-top: 1px solid var(--fs-color-border);
3898
4276
  }
3899
4277
  .fs-popover-arrow {
3900
4278
  position: absolute;
3901
- width: 8px;
3902
- height: 8px;
4279
+ inline-size: var(--fs-popover-arrow-size);
4280
+ block-size: var(--fs-popover-arrow-size);
3903
4281
  background-color: var(--fs-color-surface);
3904
4282
  border: 1px solid var(--fs-color-border);
3905
4283
  transform: rotate(45deg);
3906
4284
  }
3907
4285
  .fs-popover[data-placement=top] .fs-popover-arrow {
3908
4286
  bottom: -5px;
3909
- left: 50%;
3910
- margin-left: -4px;
4287
+ inset-inline-start: var(--fs-popover-arrow-offset, 50%);
4288
+ margin-inline-start: calc(var(--fs-popover-arrow-size) / -2);
3911
4289
  border-top: 0;
3912
4290
  border-left: 0;
3913
4291
  }
3914
4292
  .fs-popover[data-placement=bottom] .fs-popover-arrow {
3915
4293
  top: -5px;
3916
- left: 50%;
3917
- margin-left: -4px;
4294
+ inset-inline-start: var(--fs-popover-arrow-offset, 50%);
4295
+ margin-inline-start: calc(var(--fs-popover-arrow-size) / -2);
3918
4296
  border-right: 0;
3919
4297
  border-bottom: 0;
3920
4298
  }
3921
4299
  .fs-popover[data-placement=left] .fs-popover-arrow {
3922
- top: 50%;
3923
- right: -5px;
3924
- 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);
3925
4303
  border-bottom: 0;
3926
4304
  border-left: 0;
3927
4305
  }
3928
4306
  .fs-popover[data-placement=right] .fs-popover-arrow {
3929
- top: 50%;
3930
- left: -5px;
3931
- 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);
3932
4310
  border-top: 0;
3933
4311
  border-right: 0;
3934
4312
  }
@@ -3939,66 +4317,237 @@
3939
4317
  display: flex;
3940
4318
  gap: 12px;
3941
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
+ }
3942
4351
  }
3943
4352
  @layer components {
3944
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);
3945
4358
  position: fixed;
3946
- right: 16px;
3947
- 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));
3948
4361
  z-index: var(--fs-z-toast);
3949
4362
  display: flex;
3950
4363
  flex-direction: column;
3951
- gap: 8px;
3952
- width: min(360px, 100%);
3953
- 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);
3954
4367
  }
3955
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;
3956
4379
  display: flex;
3957
4380
  overflow: hidden;
3958
4381
  flex-direction: column;
3959
- border: 1px solid var(--fs-color-border);
3960
- 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);
3961
4386
  color: var(--fs-color-text);
3962
4387
  background-color: var(--fs-color-surface);
3963
- box-shadow: var(--fs-shadow-md);
4388
+ box-shadow: var(--fs-toast-shadow);
4389
+ overflow-wrap: anywhere;
3964
4390
  }
3965
4391
  .fs-toast-header {
3966
4392
  display: flex;
3967
4393
  align-items: center;
3968
- justify-content: space-between;
3969
- 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);
3970
4398
  border-bottom: 1px solid var(--fs-color-border);
3971
4399
  font-size: 0.75rem;
3972
4400
  font-weight: 500;
3973
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
+ }
3974
4438
  .fs-toast-body {
3975
- padding: 12px;
4439
+ min-inline-size: 0;
4440
+ padding-block: var(--fs-toast-padding-block);
4441
+ padding-inline: var(--fs-toast-padding-inline);
3976
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;
3977
4476
  }
3978
4477
  .fs-toast-primary .fs-toast-header {
3979
4478
  color: var(--fs-alert-primary-text);
3980
4479
  background-color: var(--fs-alert-primary-bg);
3981
4480
  }
4481
+ .fs-toast-primary {
4482
+ border-inline-start-color: var(--fs-color-primary);
4483
+ }
3982
4484
  .fs-toast-secondary .fs-toast-header {
3983
4485
  color: var(--fs-alert-secondary-text);
3984
4486
  background-color: var(--fs-alert-secondary-bg);
3985
4487
  }
4488
+ .fs-toast-secondary {
4489
+ border-inline-start-color: var(--fs-color-secondary);
4490
+ }
3986
4491
  .fs-toast-success .fs-toast-header {
3987
4492
  color: var(--fs-alert-success-text);
3988
4493
  background-color: var(--fs-alert-success-bg);
3989
4494
  }
4495
+ .fs-toast-success {
4496
+ border-inline-start-color: var(--fs-color-success);
4497
+ }
3990
4498
  .fs-toast-warning .fs-toast-header {
3991
4499
  color: var(--fs-alert-warning-text);
3992
4500
  background-color: var(--fs-alert-warning-bg);
3993
4501
  }
4502
+ .fs-toast-warning {
4503
+ border-inline-start-color: var(--fs-color-warning);
4504
+ }
3994
4505
  .fs-toast-danger .fs-toast-header {
3995
4506
  color: var(--fs-alert-danger-text);
3996
4507
  background-color: var(--fs-alert-danger-bg);
3997
4508
  }
4509
+ .fs-toast-danger {
4510
+ border-inline-start-color: var(--fs-color-danger);
4511
+ }
3998
4512
  .fs-toast-info .fs-toast-header {
3999
4513
  color: var(--fs-alert-info-text);
4000
4514
  background-color: var(--fs-alert-info-bg);
4001
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
+ }
4002
4551
  }
4003
4552
  @layer components {
4004
4553
  .fs-pagination {
@@ -5649,6 +6198,59 @@
5649
6198
  inset-block-start: var(--fs-space-4);
5650
6199
  }
5651
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
+ }
5652
6254
  @layer utilities {
5653
6255
  .fs-u-cq {
5654
6256
  container-type: inline-size;
@@ -9062,6 +9664,7 @@
9062
9664
  }
9063
9665
  }
9064
9666
  }
9667
+ /* stylelint-disable declaration-block-single-line-max-declarations */
9065
9668
  @layer utilities {
9066
9669
  .fs-u-color-primary {
9067
9670
  color: var(--fs-color-primary, oklch(53.5630074284% 0.2132145174 261.6264320248deg)) !important;
@@ -9303,6 +9906,141 @@
9303
9906
  text-align: start !important;
9304
9907
  }
9305
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
+ }
9306
10044
  }
9307
10045
  @layer tokens {
9308
10046
  [data-fs-brand=violet] {