@usefragments/ui 1.5.4 → 1.7.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 (667) hide show
  1. package/README.md +4 -4
  2. package/dist/assets/fragments-wordmark.cjs +2 -2
  3. package/dist/assets/fragments-wordmark.d.ts.map +1 -1
  4. package/dist/assets/fragments-wordmark.js +2 -2
  5. package/dist/assets/ui.css +10468 -6909
  6. package/dist/chart.cjs +31 -26
  7. package/dist/chart.js +31 -26
  8. package/dist/codeblock.cjs +55 -29
  9. package/dist/codeblock.js +55 -29
  10. package/dist/colorpicker.cjs +5 -2
  11. package/dist/colorpicker.js +5 -2
  12. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  13. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  14. package/dist/components/Alert/Alert.module.scss.cjs +15 -12
  15. package/dist/components/Alert/Alert.module.scss.js +15 -12
  16. package/dist/components/Alert/index.cjs +7 -1
  17. package/dist/components/Alert/index.d.ts +12 -6
  18. package/dist/components/Alert/index.d.ts.map +1 -1
  19. package/dist/components/Alert/index.js +7 -1
  20. package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
  21. package/dist/components/AppShell/AppShell.module.scss.js +14 -14
  22. package/dist/components/AppShell/index.cjs +5 -3
  23. package/dist/components/AppShell/index.d.ts +4 -2
  24. package/dist/components/AppShell/index.d.ts.map +1 -1
  25. package/dist/components/AppShell/index.js +5 -3
  26. package/dist/components/Avatar/Avatar.module.scss.cjs +17 -14
  27. package/dist/components/Avatar/Avatar.module.scss.js +17 -14
  28. package/dist/components/Avatar/index.cjs +100 -118
  29. package/dist/components/Avatar/index.d.ts +7 -5
  30. package/dist/components/Avatar/index.d.ts.map +1 -1
  31. package/dist/components/Avatar/index.js +100 -118
  32. package/dist/components/Badge/Badge.module.scss.cjs +19 -19
  33. package/dist/components/Badge/Badge.module.scss.js +19 -19
  34. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
  35. package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
  36. package/dist/components/Box/Box.module.scss.cjs +152 -152
  37. package/dist/components/Box/Box.module.scss.js +152 -152
  38. package/dist/components/Box/index.cjs +64 -75
  39. package/dist/components/Box/index.d.ts +16 -16
  40. package/dist/components/Box/index.d.ts.map +1 -1
  41. package/dist/components/Box/index.js +64 -75
  42. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
  43. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
  44. package/dist/components/Button/Button.module.scss.cjs +14 -14
  45. package/dist/components/Button/Button.module.scss.js +14 -14
  46. package/dist/components/ButtonGroup/ButtonGroup.module.scss.cjs +15 -15
  47. package/dist/components/ButtonGroup/ButtonGroup.module.scss.js +15 -15
  48. package/dist/components/Card/Card.module.scss.cjs +30 -18
  49. package/dist/components/Card/Card.module.scss.js +31 -19
  50. package/dist/components/Card/index.cjs +8 -0
  51. package/dist/components/Card/index.d.ts +12 -2
  52. package/dist/components/Card/index.d.ts.map +1 -1
  53. package/dist/components/Card/index.js +8 -0
  54. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  55. package/dist/components/Chart/Chart.module.scss.js +15 -15
  56. package/dist/components/Chart/index.d.ts +7 -7
  57. package/dist/components/Chart/index.d.ts.map +1 -1
  58. package/dist/components/Checkbox/Checkbox.module.scss.cjs +9 -15
  59. package/dist/components/Checkbox/Checkbox.module.scss.js +9 -15
  60. package/dist/components/Checkbox/index.cjs +6 -8
  61. package/dist/components/Checkbox/index.d.ts.map +1 -1
  62. package/dist/components/Checkbox/index.js +6 -8
  63. package/dist/components/Chip/Chip.module.scss.cjs +15 -15
  64. package/dist/components/Chip/Chip.module.scss.js +15 -15
  65. package/dist/components/Chip/index.cjs +6 -6
  66. package/dist/components/Chip/index.d.ts +1 -1
  67. package/dist/components/Chip/index.js +4 -4
  68. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +27 -24
  69. package/dist/components/CodeBlock/CodeBlock.module.scss.js +27 -24
  70. package/dist/components/CodeBlock/css-variables-theme.cjs +98 -0
  71. package/dist/components/CodeBlock/css-variables-theme.d.ts +27 -0
  72. package/dist/components/CodeBlock/css-variables-theme.d.ts.map +1 -0
  73. package/dist/components/CodeBlock/css-variables-theme.js +98 -0
  74. package/dist/components/CodeBlock/index.d.ts +17 -3
  75. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  76. package/dist/components/Collapsible/Collapsible.module.scss.cjs +9 -12
  77. package/dist/components/Collapsible/Collapsible.module.scss.js +9 -12
  78. package/dist/components/Collapsible/index.cjs +3 -2
  79. package/dist/components/Collapsible/index.d.ts +3 -3
  80. package/dist/components/Collapsible/index.d.ts.map +1 -1
  81. package/dist/components/Collapsible/index.js +3 -2
  82. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +16 -16
  83. package/dist/components/ColorPicker/ColorPicker.module.scss.js +16 -16
  84. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  85. package/dist/components/Combobox/Combobox.module.scss.cjs +21 -27
  86. package/dist/components/Combobox/Combobox.module.scss.js +21 -27
  87. package/dist/components/Combobox/index.cjs +21 -5
  88. package/dist/components/Combobox/index.d.ts.map +1 -1
  89. package/dist/components/Combobox/index.js +21 -5
  90. package/dist/components/Command/Command.module.scss.cjs +11 -11
  91. package/dist/components/Command/Command.module.scss.js +11 -11
  92. package/dist/components/Command/index.cjs +26 -15
  93. package/dist/components/Command/index.d.ts +2 -2
  94. package/dist/components/Command/index.d.ts.map +1 -1
  95. package/dist/components/Command/index.js +26 -15
  96. package/dist/components/ConversationList/ConversationList.module.scss.cjs +11 -14
  97. package/dist/components/ConversationList/ConversationList.module.scss.js +11 -14
  98. package/dist/components/ConversationList/index.cjs +40 -44
  99. package/dist/components/ConversationList/index.d.ts +3 -3
  100. package/dist/components/ConversationList/index.d.ts.map +1 -1
  101. package/dist/components/ConversationList/index.js +40 -44
  102. package/dist/components/DataTable/DataTable.icons.cjs +6 -33
  103. package/dist/components/DataTable/DataTable.icons.d.ts.map +1 -1
  104. package/dist/components/DataTable/DataTable.icons.js +6 -33
  105. package/dist/components/DataTable/DataTable.module.scss.cjs +32 -56
  106. package/dist/components/DataTable/DataTable.module.scss.js +32 -56
  107. package/dist/components/DataTable/index.d.ts +5 -4
  108. package/dist/components/DataTable/index.d.ts.map +1 -1
  109. package/dist/components/DatePicker/DatePicker.module.scss.cjs +33 -33
  110. package/dist/components/DatePicker/DatePicker.module.scss.js +33 -33
  111. package/dist/components/DatePicker/index.d.ts.map +1 -1
  112. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  113. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  114. package/dist/components/Dialog/index.cjs +11 -14
  115. package/dist/components/Dialog/index.d.ts +7 -7
  116. package/dist/components/Dialog/index.d.ts.map +1 -1
  117. package/dist/components/Dialog/index.js +11 -14
  118. package/dist/components/Drawer/Drawer.module.scss.cjs +31 -28
  119. package/dist/components/Drawer/Drawer.module.scss.js +31 -28
  120. package/dist/components/Drawer/index.cjs +1 -1
  121. package/dist/components/Drawer/index.js +1 -1
  122. package/dist/components/Editor/Editor.module.scss.cjs +23 -23
  123. package/dist/components/Editor/Editor.module.scss.js +23 -23
  124. package/dist/components/Editor/index.d.ts +10 -10
  125. package/dist/components/Editor/index.d.ts.map +1 -1
  126. package/dist/components/EmptyState/EmptyState.module.scss.cjs +15 -12
  127. package/dist/components/EmptyState/EmptyState.module.scss.js +15 -12
  128. package/dist/components/EmptyState/index.cjs +8 -6
  129. package/dist/components/EmptyState/index.d.ts +9 -4
  130. package/dist/components/EmptyState/index.d.ts.map +1 -1
  131. package/dist/components/EmptyState/index.js +8 -6
  132. package/dist/components/Field/Field.module.scss.cjs +8 -5
  133. package/dist/components/Field/Field.module.scss.js +8 -5
  134. package/dist/components/Field/index.cjs +18 -1
  135. package/dist/components/Field/index.d.ts +9 -2
  136. package/dist/components/Field/index.d.ts.map +1 -1
  137. package/dist/components/Field/index.js +18 -1
  138. package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
  139. package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
  140. package/dist/components/Form/Form.module.scss.cjs +5 -2
  141. package/dist/components/Form/Form.module.scss.js +5 -2
  142. package/dist/components/Form/index.cjs +6 -1
  143. package/dist/components/Form/index.d.ts +8 -3
  144. package/dist/components/Form/index.d.ts.map +1 -1
  145. package/dist/components/Form/index.js +6 -1
  146. package/dist/components/Grid/Grid.module.scss.cjs +54 -72
  147. package/dist/components/Grid/Grid.module.scss.js +54 -72
  148. package/dist/components/Grid/index.cjs +57 -77
  149. package/dist/components/Grid/index.d.ts +11 -11
  150. package/dist/components/Grid/index.d.ts.map +1 -1
  151. package/dist/components/Grid/index.js +57 -77
  152. package/dist/components/Header/Header.module.scss.cjs +33 -33
  153. package/dist/components/Header/Header.module.scss.js +33 -33
  154. package/dist/components/Header/index.cjs +18 -38
  155. package/dist/components/Header/index.d.ts +15 -11
  156. package/dist/components/Header/index.d.ts.map +1 -1
  157. package/dist/components/Header/index.js +18 -38
  158. package/dist/components/Icon/Icon.module.scss.cjs +29 -8
  159. package/dist/components/Icon/Icon.module.scss.js +30 -9
  160. package/dist/components/Icon/index.cjs +30 -48
  161. package/dist/components/Icon/index.d.ts +6 -6
  162. package/dist/components/Icon/index.d.ts.map +1 -1
  163. package/dist/components/Icon/index.js +30 -48
  164. package/dist/components/IconButton/IconButton.module.scss.cjs +8 -8
  165. package/dist/components/IconButton/IconButton.module.scss.js +8 -8
  166. package/dist/components/IconButton/index.cjs +2 -1
  167. package/dist/components/IconButton/index.d.ts.map +1 -1
  168. package/dist/components/IconButton/index.js +2 -1
  169. package/dist/components/Image/Image.module.scss.cjs +27 -27
  170. package/dist/components/Image/Image.module.scss.js +27 -27
  171. package/dist/components/Input/Input.module.scss.cjs +19 -25
  172. package/dist/components/Input/Input.module.scss.js +19 -25
  173. package/dist/components/Input/index.cjs +1 -2
  174. package/dist/components/Input/index.d.ts.map +1 -1
  175. package/dist/components/Input/index.js +1 -2
  176. package/dist/components/Link/Link.module.scss.cjs +14 -10
  177. package/dist/components/Link/Link.module.scss.js +14 -10
  178. package/dist/components/Link/index.d.ts +1 -1
  179. package/dist/components/Link/index.d.ts.map +1 -1
  180. package/dist/components/List/List.module.scss.cjs +19 -19
  181. package/dist/components/List/List.module.scss.js +19 -19
  182. package/dist/components/List/index.cjs +4 -7
  183. package/dist/components/List/index.d.ts.map +1 -1
  184. package/dist/components/List/index.js +4 -7
  185. package/dist/components/Listbox/Listbox.module.scss.cjs +9 -9
  186. package/dist/components/Listbox/Listbox.module.scss.js +9 -9
  187. package/dist/components/Loading/Loading.module.scss.cjs +34 -34
  188. package/dist/components/Loading/Loading.module.scss.js +34 -34
  189. package/dist/components/Loading/index.cjs +39 -67
  190. package/dist/components/Loading/index.d.ts +6 -6
  191. package/dist/components/Loading/index.d.ts.map +1 -1
  192. package/dist/components/Loading/index.js +39 -67
  193. package/dist/components/Main/Main.module.scss.cjs +7 -7
  194. package/dist/components/Main/Main.module.scss.js +7 -7
  195. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  196. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  197. package/dist/components/Markdown/index.d.ts +2 -2
  198. package/dist/components/Markdown/index.d.ts.map +1 -1
  199. package/dist/components/Menu/Menu.module.scss.cjs +16 -16
  200. package/dist/components/Menu/Menu.module.scss.js +16 -16
  201. package/dist/components/Menu/index.cjs +19 -61
  202. package/dist/components/Menu/index.d.ts +10 -10
  203. package/dist/components/Menu/index.d.ts.map +1 -1
  204. package/dist/components/Menu/index.js +19 -61
  205. package/dist/components/Message/Message.module.scss.cjs +18 -21
  206. package/dist/components/Message/Message.module.scss.js +18 -21
  207. package/dist/components/Message/index.cjs +15 -2
  208. package/dist/components/Message/index.d.ts.map +1 -1
  209. package/dist/components/Message/index.js +15 -2
  210. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +34 -31
  211. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +34 -31
  212. package/dist/components/NavigationMenu/index.cjs +32 -15
  213. package/dist/components/NavigationMenu/index.d.ts +12 -6
  214. package/dist/components/NavigationMenu/index.d.ts.map +1 -1
  215. package/dist/components/NavigationMenu/index.js +32 -15
  216. package/dist/components/Pagination/Pagination.module.scss.cjs +18 -9
  217. package/dist/components/Pagination/Pagination.module.scss.js +19 -10
  218. package/dist/components/Pagination/index.cjs +5 -2
  219. package/dist/components/Pagination/index.d.ts +3 -1
  220. package/dist/components/Pagination/index.d.ts.map +1 -1
  221. package/dist/components/Pagination/index.js +5 -2
  222. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  223. package/dist/components/Popover/Popover.module.scss.js +10 -10
  224. package/dist/components/Progress/Progress.module.scss.cjs +29 -32
  225. package/dist/components/Progress/Progress.module.scss.js +29 -32
  226. package/dist/components/Progress/geometry.cjs +30 -0
  227. package/dist/components/Progress/geometry.d.ts +8 -0
  228. package/dist/components/Progress/geometry.d.ts.map +1 -0
  229. package/dist/components/Progress/geometry.js +30 -0
  230. package/dist/components/Progress/index.cjs +40 -29
  231. package/dist/components/Progress/index.d.ts +4 -3
  232. package/dist/components/Progress/index.d.ts.map +1 -1
  233. package/dist/components/Progress/index.js +40 -29
  234. package/dist/components/Prompt/Prompt.module.scss.cjs +29 -29
  235. package/dist/components/Prompt/Prompt.module.scss.js +29 -29
  236. package/dist/components/Prompt/index.cjs +5 -4
  237. package/dist/components/Prompt/index.d.ts.map +1 -1
  238. package/dist/components/Prompt/index.js +5 -4
  239. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +15 -21
  240. package/dist/components/RadioGroup/RadioGroup.module.scss.js +15 -21
  241. package/dist/components/RadioGroup/index.cjs +7 -6
  242. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  243. package/dist/components/RadioGroup/index.js +7 -6
  244. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +7 -22
  245. package/dist/components/ScrollArea/ScrollArea.module.scss.js +7 -22
  246. package/dist/components/ScrollArea/index.cjs +66 -42
  247. package/dist/components/ScrollArea/index.d.ts +6 -5
  248. package/dist/components/ScrollArea/index.d.ts.map +1 -1
  249. package/dist/components/ScrollArea/index.js +66 -42
  250. package/dist/components/ScrollArea/scroll-state.cjs +58 -0
  251. package/dist/components/ScrollArea/scroll-state.d.ts +16 -0
  252. package/dist/components/ScrollArea/scroll-state.d.ts.map +1 -0
  253. package/dist/components/ScrollArea/scroll-state.js +58 -0
  254. package/dist/components/Select/Select.module.scss.cjs +21 -21
  255. package/dist/components/Select/Select.module.scss.js +21 -21
  256. package/dist/components/Select/index.cjs +3 -2
  257. package/dist/components/Select/index.d.ts.map +1 -1
  258. package/dist/components/Select/index.js +3 -2
  259. package/dist/components/Separator/Separator.module.scss.cjs +13 -10
  260. package/dist/components/Separator/Separator.module.scss.js +13 -10
  261. package/dist/components/Separator/index.cjs +37 -38
  262. package/dist/components/Separator/index.d.ts +4 -4
  263. package/dist/components/Separator/index.d.ts.map +1 -1
  264. package/dist/components/Separator/index.js +37 -38
  265. package/dist/components/Sidebar/Sidebar.module.scss.cjs +43 -43
  266. package/dist/components/Sidebar/Sidebar.module.scss.js +43 -43
  267. package/dist/components/Sidebar/index.cjs +17 -38
  268. package/dist/components/Sidebar/index.d.ts +23 -18
  269. package/dist/components/Sidebar/index.d.ts.map +1 -1
  270. package/dist/components/Sidebar/index.js +17 -38
  271. package/dist/components/Skeleton/Skeleton.module.scss.cjs +56 -40
  272. package/dist/components/Skeleton/Skeleton.module.scss.js +56 -40
  273. package/dist/components/Skeleton/index.cjs +41 -55
  274. package/dist/components/Skeleton/index.d.ts +7 -7
  275. package/dist/components/Skeleton/index.d.ts.map +1 -1
  276. package/dist/components/Skeleton/index.js +41 -55
  277. package/dist/components/Slider/Slider.module.scss.cjs +12 -12
  278. package/dist/components/Slider/Slider.module.scss.js +12 -12
  279. package/dist/components/Stack/Stack.module.scss.cjs +25 -45
  280. package/dist/components/Stack/Stack.module.scss.js +25 -45
  281. package/dist/components/Stack/index.cjs +106 -101
  282. package/dist/components/Stack/index.d.ts +7 -7
  283. package/dist/components/Stack/index.d.ts.map +1 -1
  284. package/dist/components/Stack/index.js +106 -101
  285. package/dist/components/Switch/Switch.module.scss.cjs +32 -0
  286. package/dist/components/Switch/Switch.module.scss.js +32 -0
  287. package/dist/components/{Toggle → Switch}/index.cjs +9 -14
  288. package/dist/components/Switch/index.d.ts +37 -1
  289. package/dist/components/Switch/index.d.ts.map +1 -1
  290. package/dist/components/{Toggle → Switch}/index.js +5 -10
  291. package/dist/components/Table/Table.module.scss.cjs +21 -30
  292. package/dist/components/Table/Table.module.scss.js +21 -30
  293. package/dist/components/Table/index.d.ts +6 -5
  294. package/dist/components/Table/index.d.ts.map +1 -1
  295. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +15 -15
  296. package/dist/components/TableOfContents/TableOfContents.module.scss.js +15 -15
  297. package/dist/components/TableOfContents/index.cjs +13 -9
  298. package/dist/components/TableOfContents/index.d.ts +5 -3
  299. package/dist/components/TableOfContents/index.d.ts.map +1 -1
  300. package/dist/components/TableOfContents/index.js +13 -9
  301. package/dist/components/Tabs/Tabs.module.scss.cjs +12 -12
  302. package/dist/components/Tabs/Tabs.module.scss.js +12 -12
  303. package/dist/components/Tabs/index.cjs +28 -8
  304. package/dist/components/Tabs/index.d.ts.map +1 -1
  305. package/dist/components/Tabs/index.js +28 -8
  306. package/dist/components/Text/Text.module.scss.cjs +105 -57
  307. package/dist/components/Text/Text.module.scss.js +105 -57
  308. package/dist/components/Text/index.cjs +49 -33
  309. package/dist/components/Text/index.d.ts +30 -19
  310. package/dist/components/Text/index.d.ts.map +1 -1
  311. package/dist/components/Text/index.js +49 -33
  312. package/dist/components/Textarea/Textarea.module.scss.cjs +26 -23
  313. package/dist/components/Textarea/Textarea.module.scss.js +26 -23
  314. package/dist/components/Textarea/index.cjs +5 -10
  315. package/dist/components/Textarea/index.d.ts.map +1 -1
  316. package/dist/components/Textarea/index.js +5 -10
  317. package/dist/components/Theme/context.cjs +39 -0
  318. package/dist/components/Theme/context.d.ts +21 -0
  319. package/dist/components/Theme/context.d.ts.map +1 -0
  320. package/dist/components/Theme/context.js +22 -0
  321. package/dist/components/Theme/index.cjs +16 -210
  322. package/dist/components/Theme/index.d.ts +4 -37
  323. package/dist/components/Theme/index.d.ts.map +1 -1
  324. package/dist/components/Theme/index.js +11 -205
  325. package/dist/components/{Theme → ThemeToggle}/ThemeToggle.module.scss.cjs +9 -6
  326. package/dist/components/ThemeToggle/ThemeToggle.module.scss.js +26 -0
  327. package/dist/components/ThemeToggle/index.cjs +140 -0
  328. package/dist/components/ThemeToggle/index.d.ts +26 -0
  329. package/dist/components/ThemeToggle/index.d.ts.map +1 -0
  330. package/dist/components/ThemeToggle/index.js +140 -0
  331. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +13 -13
  332. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +13 -13
  333. package/dist/components/ThinkingIndicator/index.cjs +34 -41
  334. package/dist/components/ThinkingIndicator/index.d.ts +4 -4
  335. package/dist/components/ThinkingIndicator/index.d.ts.map +1 -1
  336. package/dist/components/ThinkingIndicator/index.js +34 -41
  337. package/dist/components/Toast/Toast.module.scss.cjs +20 -20
  338. package/dist/components/Toast/Toast.module.scss.js +20 -20
  339. package/dist/components/Toggle/index.d.ts +2 -42
  340. package/dist/components/Toggle/index.d.ts.map +1 -1
  341. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +20 -20
  342. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +20 -20
  343. package/dist/components/ToggleGroup/index.cjs +3 -2
  344. package/dist/components/ToggleGroup/index.d.ts +2 -1
  345. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  346. package/dist/components/ToggleGroup/index.js +3 -2
  347. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  348. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  349. package/dist/components/Tooltip/index.cjs +24 -40
  350. package/dist/components/Tooltip/index.d.ts +4 -4
  351. package/dist/components/Tooltip/index.d.ts.map +1 -1
  352. package/dist/components/Tooltip/index.js +24 -40
  353. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.cjs +1 -1
  354. package/dist/components/VisuallyHidden/VisuallyHidden.module.scss.js +1 -1
  355. package/dist/components/VisuallyHidden/index.d.ts +2 -2
  356. package/dist/data-table.cjs +14 -10
  357. package/dist/data-table.js +14 -10
  358. package/dist/datepicker.cjs +5 -3
  359. package/dist/datepicker.js +5 -3
  360. package/dist/editor.cjs +68 -28
  361. package/dist/editor.js +68 -28
  362. package/dist/index.cjs +101 -99
  363. package/dist/index.d.ts +3 -3
  364. package/dist/index.d.ts.map +1 -1
  365. package/dist/index.js +6 -4
  366. package/dist/markdown.cjs +21 -29
  367. package/dist/markdown.js +22 -30
  368. package/dist/measurements/generated.cjs +304 -0
  369. package/dist/measurements/generated.d.ts +268 -0
  370. package/dist/measurements/generated.d.ts.map +1 -0
  371. package/dist/measurements/generated.js +304 -0
  372. package/dist/measurements/index.d.ts +2 -0
  373. package/dist/measurements/index.d.ts.map +1 -0
  374. package/dist/measurements.cjs +6 -0
  375. package/dist/measurements.js +6 -0
  376. package/dist/recipes/popup.cjs +14 -0
  377. package/dist/recipes/popup.d.ts +4 -0
  378. package/dist/recipes/popup.d.ts.map +1 -0
  379. package/dist/recipes/popup.js +14 -0
  380. package/dist/recipes/table-chrome.cjs +18 -0
  381. package/dist/recipes/table-chrome.d.ts +10 -0
  382. package/dist/recipes/table-chrome.d.ts.map +1 -0
  383. package/dist/recipes/table-chrome.js +18 -0
  384. package/dist/table.cjs +5 -2
  385. package/dist/table.js +5 -2
  386. package/dist/utils/a11y.cjs +5 -2
  387. package/dist/utils/a11y.d.ts +5 -5
  388. package/dist/utils/a11y.d.ts.map +1 -1
  389. package/dist/utils/a11y.js +5 -2
  390. package/dist/utils/canonical-stamp.cjs +2 -8
  391. package/dist/utils/canonical-stamp.d.ts.map +1 -1
  392. package/dist/utils/canonical-stamp.js +1 -7
  393. package/dist/utils/css-warning.cjs +1 -1
  394. package/dist/utils/css-warning.js +1 -1
  395. package/dist/utils/env.cjs +17 -0
  396. package/dist/utils/env.d.ts +3 -0
  397. package/dist/utils/env.d.ts.map +1 -0
  398. package/dist/utils/env.js +17 -0
  399. package/dist/utils/keyboard-shortcuts.cjs +3 -10
  400. package/dist/utils/keyboard-shortcuts.d.ts +4 -4
  401. package/dist/utils/keyboard-shortcuts.d.ts.map +1 -1
  402. package/dist/utils/keyboard-shortcuts.js +3 -10
  403. package/dist/utils/layout-spacing.cjs +27 -0
  404. package/dist/utils/layout-spacing.d.ts +5 -0
  405. package/dist/utils/layout-spacing.d.ts.map +1 -0
  406. package/dist/utils/layout-spacing.js +27 -0
  407. package/dist/utils/seed-derivation.cjs +14 -48
  408. package/dist/utils/seed-derivation.d.ts +4 -3
  409. package/dist/utils/seed-derivation.d.ts.map +1 -1
  410. package/dist/utils/seed-derivation.js +14 -48
  411. package/dist/utils/theme-presets.cjs +1 -0
  412. package/dist/utils/theme-presets.d.ts +3 -2
  413. package/dist/utils/theme-presets.d.ts.map +1 -1
  414. package/dist/utils/theme-presets.js +1 -0
  415. package/fragments.json +1 -1
  416. package/package.json +25 -4
  417. package/src/assets/fragments-logo.tsx +2 -2
  418. package/src/assets/fragments-wordmark.tsx +4 -2
  419. package/src/components/Accordion/Accordion.contract.json +24 -48
  420. package/src/components/Accordion/Accordion.module.scss +31 -52
  421. package/src/components/Alert/Alert.contract.json +37 -53
  422. package/src/components/Alert/Alert.module.scss +52 -44
  423. package/src/components/Alert/index.tsx +55 -29
  424. package/src/components/AppShell/AppShell.contract.json +34 -51
  425. package/src/components/AppShell/AppShell.module.scss +59 -43
  426. package/src/components/AppShell/index.tsx +8 -4
  427. package/src/components/Avatar/Avatar.contract.json +31 -48
  428. package/src/components/Avatar/Avatar.module.scss +25 -60
  429. package/src/components/Avatar/index.tsx +152 -146
  430. package/src/components/Badge/Badge.contract.json +37 -42
  431. package/src/components/Badge/Badge.module.scss +59 -47
  432. package/src/components/BentoGrid/BentoGrid.contract.json +21 -45
  433. package/src/components/BentoGrid/BentoGrid.module.scss +11 -32
  434. package/src/components/Box/Box.contract.json +40 -148
  435. package/src/components/Box/Box.module.scss +253 -81
  436. package/src/components/Box/index.tsx +92 -99
  437. package/src/components/Breadcrumbs/Breadcrumbs.contract.json +21 -34
  438. package/src/components/Breadcrumbs/Breadcrumbs.module.scss +19 -15
  439. package/src/components/Button/Button.module.scss +60 -64
  440. package/src/components/ButtonGroup/ButtonGroup.contract.json +32 -47
  441. package/src/components/ButtonGroup/ButtonGroup.module.scss +5 -5
  442. package/src/components/Card/Card.consumer-fixture.module.scss +8 -0
  443. package/src/components/Card/Card.module.scss +284 -167
  444. package/src/components/Card/index.tsx +21 -2
  445. package/src/components/Chart/Chart.contract.json +21 -29
  446. package/src/components/Chart/Chart.module.scss +28 -29
  447. package/src/components/Chart/index.tsx +72 -55
  448. package/src/components/Checkbox/Checkbox.contract.json +24 -24
  449. package/src/components/Checkbox/Checkbox.module.scss +75 -87
  450. package/src/components/Checkbox/index.tsx +8 -11
  451. package/src/components/Chip/Chip.contract.json +36 -42
  452. package/src/components/Chip/Chip.module.scss +25 -36
  453. package/src/components/Chip/index.tsx +5 -5
  454. package/src/components/CodeBlock/CodeBlock.contract.json +46 -76
  455. package/src/components/CodeBlock/CodeBlock.module.scss +129 -217
  456. package/src/components/CodeBlock/css-variables-theme.ts +102 -0
  457. package/src/components/CodeBlock/index.tsx +91 -35
  458. package/src/components/Collapsible/Collapsible.contract.json +21 -36
  459. package/src/components/Collapsible/Collapsible.module.scss +29 -63
  460. package/src/components/Collapsible/index.tsx +22 -26
  461. package/src/components/ColorPicker/ColorPicker.contract.json +29 -48
  462. package/src/components/ColorPicker/ColorPicker.module.scss +54 -33
  463. package/src/components/ColorPicker/index.tsx +7 -2
  464. package/src/components/Combobox/Combobox.contract.json +36 -37
  465. package/src/components/Combobox/Combobox.module.scss +61 -74
  466. package/src/components/Combobox/index.tsx +34 -6
  467. package/src/components/Command/Command.contract.json +21 -43
  468. package/src/components/Command/Command.module.scss +47 -77
  469. package/src/components/Command/index.tsx +58 -47
  470. package/src/components/ConversationList/ConversationList.contract.json +27 -32
  471. package/src/components/ConversationList/ConversationList.module.scss +20 -78
  472. package/src/components/ConversationList/index.tsx +55 -59
  473. package/src/components/DataTable/DataTable.icons.tsx +4 -21
  474. package/src/components/DataTable/DataTable.module.scss +81 -217
  475. package/src/components/DataTable/index.tsx +28 -32
  476. package/src/components/DatePicker/DatePicker.contract.json +27 -28
  477. package/src/components/DatePicker/DatePicker.module.scss +66 -38
  478. package/src/components/DatePicker/index.tsx +7 -3
  479. package/src/components/Dialog/Dialog.module.scss +45 -69
  480. package/src/components/Dialog/index.tsx +47 -37
  481. package/src/components/Drawer/Drawer.contract.json +22 -36
  482. package/src/components/Drawer/Drawer.module.scss +93 -99
  483. package/src/components/Drawer/index.tsx +1 -1
  484. package/src/components/Editor/Editor.contract.json +31 -48
  485. package/src/components/Editor/Editor.module.scss +137 -220
  486. package/src/components/Editor/index.tsx +240 -179
  487. package/src/components/EmptyState/EmptyState.contract.json +31 -43
  488. package/src/components/EmptyState/EmptyState.module.scss +45 -84
  489. package/src/components/EmptyState/index.tsx +48 -23
  490. package/src/components/Field/Field.contract.json +28 -45
  491. package/src/components/Field/Field.module.scss +9 -11
  492. package/src/components/Field/index.tsx +31 -1
  493. package/src/components/Fieldset/Fieldset.contract.json +21 -38
  494. package/src/components/Fieldset/Fieldset.module.scss +23 -8
  495. package/src/components/Form/Form.contract.json +27 -40
  496. package/src/components/Form/Form.module.scss +9 -4
  497. package/src/components/Form/index.tsx +22 -7
  498. package/src/components/Grid/Grid.contract.json +28 -64
  499. package/src/components/Grid/Grid.module.scss +159 -63
  500. package/src/components/Grid/index.tsx +114 -133
  501. package/src/components/Header/Header.contract.json +31 -67
  502. package/src/components/Header/Header.module.scss +56 -48
  503. package/src/components/Header/index.tsx +134 -121
  504. package/src/components/Icon/Icon.contract.json +22 -62
  505. package/src/components/Icon/Icon.module.scss +16 -0
  506. package/src/components/Icon/index.tsx +74 -86
  507. package/src/components/IconButton/IconButton.contract.json +34 -18
  508. package/src/components/IconButton/IconButton.module.scss +15 -26
  509. package/src/components/IconButton/index.tsx +2 -1
  510. package/src/components/Image/Image.contract.json +23 -56
  511. package/src/components/Input/Input.contract.json +26 -32
  512. package/src/components/Input/Input.module.scss +69 -56
  513. package/src/components/Input/index.tsx +1 -2
  514. package/src/components/Link/Link.contract.json +32 -52
  515. package/src/components/Link/Link.module.scss +29 -13
  516. package/src/components/Link/index.tsx +1 -1
  517. package/src/components/List/List.contract.json +23 -52
  518. package/src/components/List/List.module.scss +16 -21
  519. package/src/components/List/index.tsx +4 -10
  520. package/src/components/Listbox/Listbox.contract.json +21 -37
  521. package/src/components/Listbox/Listbox.module.scss +26 -54
  522. package/src/components/Loading/Loading.contract.json +37 -61
  523. package/src/components/Loading/Loading.module.scss +33 -40
  524. package/src/components/Loading/index.tsx +68 -97
  525. package/src/components/Main/Main.contract.json +17 -9
  526. package/src/components/Main/Main.module.scss +3 -5
  527. package/src/components/Markdown/Markdown.contract.json +22 -43
  528. package/src/components/Markdown/Markdown.module.scss +72 -182
  529. package/src/components/Markdown/index.tsx +50 -51
  530. package/src/components/Menu/Menu.contract.json +25 -41
  531. package/src/components/Menu/Menu.module.scss +63 -133
  532. package/src/components/Menu/index.tsx +57 -89
  533. package/src/components/Message/Message.contract.json +29 -52
  534. package/src/components/Message/Message.module.scss +60 -143
  535. package/src/components/Message/index.tsx +16 -6
  536. package/src/components/NavigationMenu/NavigationMenu.contract.json +36 -45
  537. package/src/components/NavigationMenu/NavigationMenu.module.scss +123 -71
  538. package/src/components/NavigationMenu/index.tsx +105 -81
  539. package/src/components/Pagination/Pagination.contract.json +22 -40
  540. package/src/components/Pagination/Pagination.module.scss +34 -27
  541. package/src/components/Pagination/index.tsx +7 -2
  542. package/src/components/Popover/Popover.contract.json +24 -46
  543. package/src/components/Popover/Popover.module.scss +43 -78
  544. package/src/components/Progress/Progress.contract.json +32 -28
  545. package/src/components/Progress/Progress.module.scss +64 -43
  546. package/src/components/Progress/geometry.ts +41 -0
  547. package/src/components/Progress/index.tsx +44 -30
  548. package/src/components/Prompt/Prompt.contract.json +31 -47
  549. package/src/components/Prompt/Prompt.module.scss +58 -87
  550. package/src/components/Prompt/index.tsx +6 -5
  551. package/src/components/RadioGroup/RadioGroup.contract.json +23 -24
  552. package/src/components/RadioGroup/RadioGroup.module.scss +63 -83
  553. package/src/components/RadioGroup/index.tsx +7 -9
  554. package/src/components/ScrollArea/ScrollArea.contract.json +23 -40
  555. package/src/components/ScrollArea/ScrollArea.module.scss +123 -97
  556. package/src/components/ScrollArea/index.tsx +85 -67
  557. package/src/components/ScrollArea/scroll-state.ts +87 -0
  558. package/src/components/Select/Select.module.scss +55 -43
  559. package/src/components/Select/index.tsx +6 -2
  560. package/src/components/Separator/Separator.contract.json +24 -48
  561. package/src/components/Separator/Separator.module.scss +29 -19
  562. package/src/components/Separator/index.tsx +55 -51
  563. package/src/components/Sidebar/Sidebar.contract.json +42 -62
  564. package/src/components/Sidebar/Sidebar.module.scss +117 -106
  565. package/src/components/Sidebar/index.tsx +169 -162
  566. package/src/components/Skeleton/Skeleton.contract.json +28 -54
  567. package/src/components/Skeleton/Skeleton.module.scss +51 -34
  568. package/src/components/Skeleton/index.tsx +65 -72
  569. package/src/components/Slider/Slider.contract.json +27 -39
  570. package/src/components/Slider/Slider.module.scss +33 -27
  571. package/src/components/Stack/Stack.contract.json +29 -56
  572. package/src/components/Stack/Stack.module.scss +110 -38
  573. package/src/components/Stack/index.tsx +157 -127
  574. package/src/components/{Toggle/Toggle.contract.json → Switch/Switch.contract.json} +34 -47
  575. package/src/components/Switch/Switch.module.scss +255 -0
  576. package/src/components/{Toggle → Switch}/index.tsx +5 -21
  577. package/src/components/Table/Table.contract.json +28 -46
  578. package/src/components/Table/Table.module.scss +50 -129
  579. package/src/components/Table/index.tsx +13 -6
  580. package/src/components/TableOfContents/TableOfContents.contract.json +34 -21
  581. package/src/components/TableOfContents/TableOfContents.module.scss +35 -182
  582. package/src/components/TableOfContents/index.tsx +26 -9
  583. package/src/components/Tabs/Tabs.contract.json +24 -45
  584. package/src/components/Tabs/Tabs.module.scss +28 -23
  585. package/src/components/Tabs/index.tsx +17 -5
  586. package/src/components/Text/Text.contract.json +30 -72
  587. package/src/components/Text/Text.module.scss +43 -7
  588. package/src/components/Text/index.tsx +136 -63
  589. package/src/components/Textarea/Textarea.contract.json +25 -43
  590. package/src/components/Textarea/Textarea.module.scss +58 -40
  591. package/src/components/Textarea/index.tsx +5 -12
  592. package/src/components/Theme/Theme.contract.json +32 -51
  593. package/src/components/Theme/context.ts +42 -0
  594. package/src/components/Theme/index.tsx +16 -310
  595. package/src/components/ThemeToggle/ThemeToggle.module.scss +89 -0
  596. package/src/components/ThemeToggle/index.tsx +180 -0
  597. package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +23 -40
  598. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +24 -19
  599. package/src/components/ThinkingIndicator/index.tsx +44 -54
  600. package/src/components/Toast/Toast.contract.json +35 -61
  601. package/src/components/Toast/Toast.module.scss +62 -139
  602. package/src/components/Toggle/index.ts +7 -0
  603. package/src/components/ToggleGroup/ToggleGroup.contract.json +40 -68
  604. package/src/components/ToggleGroup/ToggleGroup.module.scss +166 -89
  605. package/src/components/ToggleGroup/index.tsx +5 -3
  606. package/src/components/Tooltip/Tooltip.contract.json +31 -52
  607. package/src/components/Tooltip/Tooltip.module.scss +23 -39
  608. package/src/components/Tooltip/index.tsx +19 -24
  609. package/src/components/VisuallyHidden/VisuallyHidden.contract.json +22 -44
  610. package/src/components/VisuallyHidden/VisuallyHidden.module.scss +3 -0
  611. package/src/components/VisuallyHidden/index.tsx +5 -5
  612. package/src/index.ts +4 -3
  613. package/src/measurements/MeasurementTargets.module.scss +229 -0
  614. package/src/measurements/generated.ts +324 -0
  615. package/src/measurements/index.ts +8 -0
  616. package/src/measurements/measurements.json +368 -0
  617. package/src/recipes/_action.scss +138 -0
  618. package/src/recipes/_boolean-range.scss +116 -0
  619. package/src/recipes/_feedback.scss +171 -0
  620. package/src/recipes/_field.scss +102 -0
  621. package/src/recipes/_layout.scss +74 -0
  622. package/src/recipes/_navigation.scss +110 -0
  623. package/src/recipes/_overlay.scss +191 -0
  624. package/src/recipes/_popup.scss +102 -0
  625. package/src/recipes/_prose.scss +182 -0
  626. package/src/recipes/_representation.scss +193 -0
  627. package/src/recipes/_segmented.scss +26 -0
  628. package/src/recipes/_surface.scss +13 -0
  629. package/src/recipes/_table-chrome.scss +119 -0
  630. package/src/recipes/_target.scss +31 -0
  631. package/src/recipes/_typography.scss +38 -0
  632. package/src/recipes/popup.ts +12 -0
  633. package/src/recipes/table-chrome.ts +30 -0
  634. package/src/scss.d.ts +1 -1
  635. package/src/styles/globals.scss +21 -20
  636. package/src/tokens/_component-properties.scss +2 -2
  637. package/src/tokens/_computed.scss +14 -25
  638. package/src/tokens/_density.scss +41 -132
  639. package/src/tokens/_derive.scss +112 -210
  640. package/src/tokens/_measurements.catalog.generated.css +96 -0
  641. package/src/tokens/_measurements.generated.scss +617 -0
  642. package/src/tokens/_mixins.scss +7 -284
  643. package/src/tokens/_palettes.scss +39 -167
  644. package/src/tokens/_property-registrations.scss +96 -92
  645. package/src/tokens/_radius.scss +16 -70
  646. package/src/tokens/_seeds.scss +24 -23
  647. package/src/tokens/_variables.scss +338 -178
  648. package/src/utils/a11y.tsx +69 -69
  649. package/src/utils/aria.ts +3 -3
  650. package/src/utils/canonical-stamp.ts +2 -12
  651. package/src/utils/css-warning.ts +7 -7
  652. package/src/utils/env.ts +25 -0
  653. package/src/utils/keyboard-shortcuts.ts +131 -126
  654. package/src/utils/layout-spacing.ts +31 -0
  655. package/src/utils/seed-derivation.ts +144 -178
  656. package/src/utils/theme-presets.ts +58 -30
  657. package/dist/components/Theme/ThemeToggle.module.scss.js +0 -23
  658. package/dist/components/Toggle/Toggle.module.scss.cjs +0 -44
  659. package/dist/components/Toggle/Toggle.module.scss.js +0 -44
  660. package/src/components/Button/Button.contract.json +0 -218
  661. package/src/components/Card/Card.contract.json +0 -175
  662. package/src/components/DataTable/DataTable.contract.json +0 -302
  663. package/src/components/Dialog/Dialog.contract.json +0 -159
  664. package/src/components/Select/Select.contract.json +0 -259
  665. package/src/components/Switch/index.ts +0 -3
  666. package/src/components/Theme/ThemeToggle.module.scss +0 -91
  667. package/src/components/Toggle/Toggle.module.scss +0 -244
@@ -23,7 +23,9 @@
23
23
 
24
24
  // Import computed values from seed system
25
25
  @use "sass:string";
26
+ @use "sass:map";
26
27
  @use "computed" as computed;
28
+ @use "measurements.generated" as measurements;
27
29
 
28
30
  // --------------------------------------------
29
31
  // Base Configuration
@@ -45,8 +47,8 @@ $fui-base-unit: computed.$computed-base-unit !default;
45
47
  // Typography
46
48
  // --------------------------------------------
47
49
  $fui-font-sans:
48
- "Inter Variable",
49
- Inter,
50
+ "Onest Variable",
51
+ Onest,
50
52
  -apple-system,
51
53
  BlinkMacSystemFont,
52
54
  "Segoe UI",
@@ -55,23 +57,18 @@ $fui-font-sans:
55
57
  $fui-font-mono:
56
58
  "JetBrains Mono Variable", "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace !default;
57
59
 
58
- // Font sizes (rem based on 14px root).
59
- // Scale ladder tuned for industry-leading docs hierarchy:
60
- // - UI chrome stays dense at 14px (sm/base).
61
- // - `md` (15px) is the prose body size — comfortable reading.
62
- // - `lg`/`xl`/`2xl` step 20 / 24 / 30 for h3 / h2 / large display.
63
- // - `3xl`/`4xl` (36 / 48) land page-title and hero sizes without
64
- // per-page clamps.
65
- $fui-font-size-2xs: 0.714rem !default; // 10px
66
- $fui-font-size-xs: 0.857rem !default; // 12px
67
- $fui-font-size-sm: 1rem !default; // 14px (base)
68
- $fui-font-size-base: 1rem !default; // 14px (= sm, body base)
69
- $fui-font-size-md: 1.071rem !default; // 15px (prose body longer reading)
70
- $fui-font-size-lg: 1.429rem !default; // 20px (h3, dialog/drawer/alert title)
71
- $fui-font-size-xl: 1.714rem !default; // 24px (h2, section heading)
72
- $fui-font-size-2xl: 2.143rem !default; // 30px (large display)
73
- $fui-font-size-3xl: 2.571rem !default; // 36px (h1, page title)
74
- $fui-font-size-4xl: 3.429rem !default; // 48px (hero display)
60
+ // Legacy public typography variables are generated compatibility views. New
61
+ // component work uses the semantic typography recipe.
62
+ $fui-font-size-2xs: map.get(measurements.$legacy, "typography", "fontSize", "2xs") !default;
63
+ $fui-font-size-xs: map.get(measurements.$legacy, "typography", "fontSize", "xs") !default;
64
+ $fui-font-size-sm: map.get(measurements.$legacy, "typography", "fontSize", "sm") !default;
65
+ $fui-font-size-base: map.get(measurements.$legacy, "typography", "fontSize", "base") !default;
66
+ $fui-font-size-md: map.get(measurements.$legacy, "typography", "fontSize", "md") !default;
67
+ $fui-font-size-lg: map.get(measurements.$legacy, "typography", "fontSize", "lg") !default;
68
+ $fui-font-size-xl: map.get(measurements.$legacy, "typography", "fontSize", "xl") !default;
69
+ $fui-font-size-2xl: map.get(measurements.$legacy, "typography", "fontSize", "2xl") !default;
70
+ $fui-font-size-3xl: map.get(measurements.$legacy, "typography", "fontSize", "3xl") !default;
71
+ $fui-font-size-4xl: map.get(measurements.$legacy, "typography", "fontSize", "4xl") !default;
75
72
 
76
73
  // Dropdown/popup list items — menus, selects, comboboxes, listboxes, command
77
74
  // palettes. One step below chrome text: a popup is a dense list scanned against
@@ -81,23 +78,73 @@ $fui-font-size-4xl: 3.429rem !default; // 48px (hero display)
81
78
  // literal in the mixin would let the height calcs drift out of step with it.
82
79
  $fui-popup-item-font-size: $fui-font-size-xs !default; // 12px
83
80
 
84
- $fui-font-weight-normal: 400 !default;
85
- $fui-font-weight-medium: 500 !default;
86
- $fui-font-weight-semibold: 600 !default;
87
- $fui-font-weight-bold: 700 !default;
88
-
89
- $fui-line-height-tight: 1.25 !default;
90
- $fui-line-height-normal: 1.5 !default;
91
- $fui-line-height-relaxed: 1.625 !default;
92
- $fui-line-height-display: 1.1 !default; // h1/hero — tight for large type
93
- $fui-line-height-prose: 1.7 !default; // p/li inside long-form reading columns
81
+ $fui-font-weight-normal: map.get(
82
+ measurements.$legacy,
83
+ "typography",
84
+ "fontWeight",
85
+ "normal"
86
+ ) !default;
87
+ $fui-font-weight-medium: map.get(
88
+ measurements.$legacy,
89
+ "typography",
90
+ "fontWeight",
91
+ "medium"
92
+ ) !default;
93
+ $fui-font-weight-semibold: map.get(
94
+ measurements.$legacy,
95
+ "typography",
96
+ "fontWeight",
97
+ "semibold"
98
+ ) !default;
99
+ $fui-font-weight-bold: map.get(measurements.$legacy, "typography", "fontWeight", "bold") !default;
100
+
101
+ $fui-line-height-tight: map.get(measurements.$legacy, "typography", "lineHeight", "tight") !default;
102
+ $fui-line-height-normal: map.get(
103
+ measurements.$legacy,
104
+ "typography",
105
+ "lineHeight",
106
+ "normal"
107
+ ) !default;
108
+ $fui-line-height-relaxed: map.get(
109
+ measurements.$legacy,
110
+ "typography",
111
+ "lineHeight",
112
+ "relaxed"
113
+ ) !default;
114
+ $fui-line-height-display: map.get(
115
+ measurements.$legacy,
116
+ "typography",
117
+ "lineHeight",
118
+ "display"
119
+ ) !default;
120
+ $fui-line-height-prose: map.get(measurements.$legacy, "typography", "lineHeight", "prose") !default;
94
121
 
95
122
  // Letter spacing — keep neutral by default so dense product chrome, headings,
96
123
  // and generated app surfaces do not drift into separate typographic systems.
97
- $fui-letter-spacing-tight: 0 !default; // for xl+ headings
98
- $fui-letter-spacing-normal: normal !default;
99
- $fui-letter-spacing-display: 0 !default; // for h1/display
100
- $fui-letter-spacing-wide: 0.05em !default; // uppercase micro-labels (section headings, table/column headers)
124
+ $fui-letter-spacing-tight: map.get(
125
+ measurements.$legacy,
126
+ "typography",
127
+ "letterSpacing",
128
+ "tight"
129
+ ) !default;
130
+ $fui-letter-spacing-normal: map.get(
131
+ measurements.$legacy,
132
+ "typography",
133
+ "letterSpacing",
134
+ "normal"
135
+ ) !default;
136
+ $fui-letter-spacing-display: map.get(
137
+ measurements.$legacy,
138
+ "typography",
139
+ "letterSpacing",
140
+ "display"
141
+ ) !default;
142
+ $fui-letter-spacing-wide: map.get(
143
+ measurements.$legacy,
144
+ "typography",
145
+ "letterSpacing",
146
+ "wide"
147
+ ) !default;
101
148
 
102
149
  // --------------------------------------------
103
150
  // Spacing (derived from density seed)
@@ -141,6 +188,17 @@ $fui-radius-lg: computed.$computed-radius-lg !default;
141
188
  $fui-radius-xl: computed.$computed-radius-xl !default;
142
189
  $fui-radius-full: computed.$computed-radius-full !default;
143
190
 
191
+ // --------------------------------------------
192
+ // Strokes + control tracks (mirror the measurement CSS vars for SCSS fallbacks)
193
+ // --------------------------------------------
194
+ $fui-stroke-hairline: measurements.target-value("stroke", "hairline") !default;
195
+ $fui-stroke-default: measurements.target-value("stroke", "default") !default;
196
+ $fui-stroke-strong: measurements.target-value("stroke", "strong") !default;
197
+ $fui-control-track-micro: measurements.target-value("controlTrack", "micro") !default;
198
+ $fui-control-track-sm: measurements.target-value("controlTrack", "sm") !default;
199
+ $fui-control-track-md: measurements.target-value("controlTrack", "md") !default;
200
+ $fui-control-track-lg: measurements.target-value("controlTrack", "lg") !default;
201
+
144
202
  // --------------------------------------------
145
203
  // Transitions
146
204
  // --------------------------------------------
@@ -189,9 +247,10 @@ $fui-bg-elevated: computed.$computed-bg-elevated !default;
189
247
  $fui-bg-subtle: computed.$computed-bg-subtle !default;
190
248
  $fui-bg-hover: computed.$computed-bg-hover !default;
191
249
  $fui-bg-active: computed.$computed-bg-active !default;
192
- // The document canvas stays white in light mode. Component and app surfaces
193
- // continue to use the computed neutral palette.
194
- $fui-body-bg: #fff !default;
250
+ // The document canvas is the derived "paper" tone in light mode (carbon 100).
251
+ // Body and main stay on that shared plane; raised component roles provide the
252
+ // contrast instead of consumer-specific page overrides.
253
+ $fui-body-bg: computed.$computed-body-bg !default;
195
254
  $fui-main-bg: computed.$computed-main-bg !default;
196
255
 
197
256
  // Text colors (derived from $fui-neutral palette)
@@ -323,19 +382,23 @@ $fui-breakpoint-xl: 1280px !default;
323
382
  // Component-specific tokens
324
383
  // --------------------------------------------
325
384
 
326
- // Button heights (derived from density seed)
327
- $fui-button-height-xs: computed.$computed-button-height-xs !default;
328
- $fui-button-height-sm: computed.$computed-button-height-sm !default;
329
- $fui-button-height-md: computed.$computed-button-height-md !default;
330
- $fui-button-height-lg: computed.$computed-button-height-lg !default;
331
- $fui-button-outlined-shadow: inset 0 1px 0
332
- light-dark(color-mix(in srgb, white 72%, transparent), color-mix(in srgb, white 5%, transparent)) !default;
385
+ // Interactive control heights are fixed geometry. Density still governs
386
+ // composition spacing, but it cannot resize a named control.
387
+ $fui-control-height-xs: measurements.target-value("controlTrack", "micro") !default;
388
+ $fui-control-height-sm: measurements.target-value("controlTrack", "sm") !default;
389
+ $fui-control-height-md: measurements.target-value("controlTrack", "md") !default;
390
+ $fui-control-height-lg: measurements.target-value("controlTrack", "lg") !default;
391
+
392
+ // Legacy aliases — prefer --fui-control-height-* in new code
393
+ $fui-button-height-xs: $fui-control-height-xs !default;
394
+ $fui-button-height-sm: $fui-control-height-sm !default;
395
+ $fui-button-height-md: $fui-control-height-md !default;
396
+ $fui-button-height-lg: $fui-control-height-lg !default;
397
+ $fui-button-outlined-shadow: none !default;
333
398
 
334
- // Input heights (derived from density seed)
335
- // Note: These are dedicated input tokens, not reusing button heights
336
- $fui-input-height: computed.$computed-input-height !default;
337
- $fui-input-height-sm: computed.$computed-input-height-sm !default;
338
- $fui-input-height-lg: computed.$computed-input-height-lg !default;
399
+ $fui-input-height-sm: measurements.target-value("fieldTrack", "sm") !default;
400
+ $fui-input-height: measurements.target-value("fieldTrack", "md") !default;
401
+ $fui-input-height-lg: measurements.target-value("fieldTrack", "lg") !default;
339
402
 
340
403
  // Touch targets (derived from density seed)
341
404
  $fui-touch-sm: computed.$computed-touch-sm !default;
@@ -346,37 +409,91 @@ $fui-touch-lg: computed.$computed-touch-lg !default;
346
409
  // Keep this token globally available to preserve a product-control floor for
347
410
  // touch/pointer targets. WCAG 2.2 allows 24px, but Fragments uses 32px so
348
411
  // field controls, toolbar buttons, tabs, and picker triggers align.
349
- $fui-target-size-min: 2.286rem !default; // 32px
412
+ $fui-target-size-min: map.get(measurements.$legacy, "touch", "minimum") !default;
350
413
  $fui-target-size-comfortable: $fui-touch-md !default;
351
414
 
352
- // Icon sizes (standard conventions)
353
- $fui-icon-xs: 0.857rem !default; // 12px (inline/caption glyphs)
354
- $fui-icon-sm: 1rem !default; // 14px (2 units)
355
- $fui-icon-md: 1.143rem !default; // 16px (standard small icon)
356
- $fui-icon-lg: 1.429rem !default; // 20px (standard medium icon)
357
- $fui-icon-xl: 1.714rem !default; // 24px (standard large icon)
358
- $fui-icon-2xl: 2.286rem !default; // 32px (display/empty-state/loading)
415
+ // Fixed icon geometry. The legacy rem records remain frozen for compatibility
416
+ // auditing, while active Sass and runtime values project the accepted px targets.
417
+ $fui-icon-xs: measurements.target-value("icon", "xs") !default;
418
+ $fui-icon-sm: measurements.target-value("icon", "sm") !default;
419
+ $fui-icon-md: measurements.target-value("icon", "md") !default;
420
+ $fui-icon-lg: measurements.target-value("icon", "lg") !default;
421
+ $fui-icon-xl: measurements.target-value("icon", "xl") !default;
422
+ $fui-icon-2xl: measurements.target-value("icon", "2xl") !default;
359
423
 
360
424
  // Animation offsets
361
425
  $fui-anim-offset-sm: 4px !default; // Small slide animation
362
426
  $fui-anim-offset-md: 8px !default; // Medium slide animation
363
427
 
428
+ // Ambient loop durations — infinite animations (spinners, pulses, shimmer).
429
+ // Easing stays per-effect; duration is the system knob.
430
+ $fui-duration-spin: 800ms !default; // Busy indicators
431
+ $fui-duration-pulse: 1500ms !default; // Breathing / attention loops
432
+ $fui-duration-shimmer: 2000ms !default; // Placeholder shimmer
433
+
434
+ // Overlay stacking layers (kept adjacent so relative order is auditable)
435
+ $fui-overlay-layer-swipe: 49 !default;
436
+ $fui-overlay-layer-backdrop: 50 !default;
437
+ $fui-overlay-layer-modal: 51 !default;
438
+ $fui-overlay-layer-anchored: 52 !default;
439
+ $fui-overlay-layer-tooltip: 60 !default;
440
+
364
441
  // Sidebar (multi-consumer — used by Sidebar, NavigationMenu, Theme)
365
442
  $fui-sidebar-item-height: computed.$computed-sidebar-item-height !default; // density-responsive (compact/default: 32px, relaxed: 36px)
366
443
 
367
444
  // AppShell Layout
368
- $fui-appshell-header-height: 56px !default;
445
+ $fui-appshell-header-height: map.get(
446
+ measurements.$legacy,
447
+ "navigation",
448
+ "appShellHeaderHeight"
449
+ ) !default;
369
450
  $fui-header-z-index: 40 !default;
370
451
 
371
452
  // CodeBlock background — shared with Markdown's <pre> prose styling — and
372
453
  // selection tint are runtime hooks so consuming apps can preserve their own
373
454
  // code-surface treatment without forking either component.
374
- $fui-code-bg: #171717 !default;
455
+ // Light stop is the paper tertiary well — not a second dark grey.
456
+ $fui-code-bg: light-dark(#{$fui-bg-tertiary}, #{$fui-dark-bg-tertiary}) !default;
457
+ // Accent capsule — the tertiary well + wash/hairline, so the earned moment
458
+ // sits *into* the page rather than floating a white slab on it (lifted-verdict
459
+ // direction, 2026-08-22). Do not mix toward black: that paints a dark slab on
460
+ // the light canvas.
461
+ $fui-card-accent-bg: $fui-bg-tertiary !default;
462
+ $fui-card-accent-border: color-mix(in srgb, $fui-color-accent 30%, $fui-border) !default;
463
+ // Softer than a panel: the capsule is a moment, not another card.
464
+ $fui-card-accent-radius: $fui-radius-xl !default;
465
+ // Selection tint tracks the accent (pine light / sage dark), not the button
466
+ // chrome — the ink-first default theme paints buttons with the inverse
467
+ // surface, which would grey out code selection.
375
468
  $fui-code-selection-bg: color-mix(
376
469
  in srgb,
377
- var(--fui-button-primary-base, #006b57) 30%,
470
+ var(--fui-color-accent, #f56138) 30%,
378
471
  transparent
379
472
  ) !default;
473
+ // Default code ink follows primary text so unhighlighted fallback and shiki
474
+ // `css-variables` foreground stay on the same contrast floor.
475
+ $fui-code-text: $fui-text-primary !default;
476
+ // Syntax ink for CodeBlock's css-variables theme. Each light stop is ≥ 4.5:1
477
+ // on the light code well; each dark stop is ≥ 4.5:1 on the dark code well
478
+ // (gated by read-safe-contrast.test.ts).
479
+ $fui-code-token-keyword: #9a3412 !default;
480
+ $fui-code-token-string: #166534 !default;
481
+ $fui-code-token-comment: #5c5348 !default;
482
+ $fui-code-token-function: #1e3a8a !default;
483
+ $fui-code-token-number: #92400e !default;
484
+ $fui-code-token-punctuation: #3d3429 !default;
485
+ $fui-code-token-variable: #3d3429 !default;
486
+ $fui-dark-code-token-keyword: #f56138 !default;
487
+ $fui-dark-code-token-string: #7dcea0 !default;
488
+ $fui-dark-code-token-comment: #a89b8c !default;
489
+ $fui-dark-code-token-function: #8cb4e8 !default;
490
+ $fui-dark-code-token-number: #e8b86d !default;
491
+ $fui-dark-code-token-punctuation: #c9c2b8 !default;
492
+ $fui-dark-code-token-variable: #f0ede9 !default;
493
+ // Prose/link ink. Light is a darker accent step so 4.5:1 holds on
494
+ // --fui-app-main-bg; dark keeps the theme accent (already ≥ 4.5).
495
+ $fui-link-ink: #9a3412 !default;
496
+ $fui-dark-link-ink: $fui-dark-color-accent !default;
380
497
 
381
498
  // --------------------------------------------
382
499
  // CSS Custom Properties Export
@@ -394,6 +511,7 @@ $fui-code-selection-bg: color-mix(
394
511
  // Base configuration
395
512
  font-size: #{$fui-base-font-size};
396
513
  --fui-base-unit: #{$fui-base-unit};
514
+ @include measurements.emit-fixed-custom-properties;
397
515
 
398
516
  // Seed colors — the 5 configurable seeds exposed as custom properties.
399
517
  // Tracks SCSS seed variables, so compile-time customization is reflected.
@@ -468,6 +586,20 @@ $fui-code-selection-bg: color-mix(
468
586
  --fui-transition-fast: #{$fui-transition-fast};
469
587
  --fui-transition-normal: #{$fui-transition-normal};
470
588
 
589
+ // Motion primitives
590
+ --fui-anim-offset-sm: #{$fui-anim-offset-sm};
591
+ --fui-anim-offset-md: #{$fui-anim-offset-md};
592
+ --fui-duration-spin: #{$fui-duration-spin};
593
+ --fui-duration-pulse: #{$fui-duration-pulse};
594
+ --fui-duration-shimmer: #{$fui-duration-shimmer};
595
+
596
+ // Overlay stacking layers
597
+ --fui-overlay-layer-swipe: #{$fui-overlay-layer-swipe};
598
+ --fui-overlay-layer-backdrop: #{$fui-overlay-layer-backdrop};
599
+ --fui-overlay-layer-modal: #{$fui-overlay-layer-modal};
600
+ --fui-overlay-layer-anchored: #{$fui-overlay-layer-anchored};
601
+ --fui-overlay-layer-tooltip: #{$fui-overlay-layer-tooltip};
602
+
471
603
  // Colors — Accent (light-dark for automatic dark mode)
472
604
  --fui-color-accent: light-dark(#{$fui-color-accent}, #{$fui-dark-color-accent});
473
605
  --fui-color-on-accent: light-dark(#{$fui-color-on-accent}, #{$fui-dark-color-on-accent});
@@ -569,15 +701,36 @@ $fui-code-selection-bg: color-mix(
569
701
  --fui-border-strong: light-dark(#{$fui-border-strong}, #{$fui-dark-border-strong});
570
702
  --fui-border-subtle: color-mix(in srgb, var(--fui-border-default) 68%, transparent);
571
703
 
704
+ // Placeholder fills. A skeleton has to read as a *missing fact* against the
705
+ // card it sits in — a hairline-weight tint is invisible on paper, so the
706
+ // base leans on the border colour and the highlight is the shimmer stop.
707
+ --fui-skeleton: color-mix(in srgb, var(--fui-border-default) 62%, var(--fui-bg-secondary));
708
+ --fui-skeleton-hi: color-mix(in srgb, var(--fui-border-default) 24%, var(--fui-bg-secondary));
709
+
572
710
  // Native browser text selection tracks the accent (pine in light, sage in
573
711
  // dark) as a soft wash — matching the Flight Recorder accent-tint.
574
712
  // Component-selected states stay tuned per control density.
575
713
  --fui-selection-bg: light-dark(
576
- color-mix(in srgb, var(--fui-color-accent, #006b57) 18%, transparent),
577
- color-mix(in srgb, var(--fui-color-accent, #7fc9b3) 22%, transparent)
714
+ color-mix(in srgb, var(--fui-color-accent, #f56138) 18%, transparent),
715
+ color-mix(in srgb, var(--fui-color-accent, #f56138) 22%, transparent)
578
716
  );
579
717
  --fui-selection-color: var(--fui-text-primary);
580
718
 
719
+ // Persistent neutral selection for navigation, segmented controls, fields,
720
+ // and rows. Keep this separate from --fui-bg-active: active is the brief
721
+ // pointer-down state; selected must remain visible without dominating its
722
+ // surrounding surface.
723
+ --fui-control-selected-bg: color-mix(in srgb, var(--fui-text-primary) 9%, transparent);
724
+
725
+ // Checked/value controls carry product meaning, so they follow the accent
726
+ // rather than button chrome. This keeps Checkbox, RadioGroup, and Switch
727
+ // stable when a consumer customizes primary actions independently.
728
+ --fui-control-checked-bg: var(--fui-color-accent);
729
+ --fui-control-checked-bg-hover: var(--fui-color-accent-hover);
730
+ --fui-control-checked-border: var(--fui-color-accent);
731
+ --fui-control-checked-border-hover: var(--fui-color-accent-hover);
732
+ --fui-control-checked-color: var(--fui-color-on-accent);
733
+
581
734
  // Form chrome (shared by Input, Textarea, Select, Combobox, DatePicker,
582
735
  // ColorPicker, Editor, and listbox-style controls).
583
736
  --fui-field-bg: color-mix(in srgb, var(--fui-bg-elevated) 72%, transparent);
@@ -589,7 +742,7 @@ $fui-code-selection-bg: color-mix(
589
742
  var(--fui-border-strong)
590
743
  );
591
744
  --fui-field-border-focus: var(--fui-text-primary);
592
- --fui-field-selection-bg: color-mix(in srgb, var(--fui-text-primary) 8%, transparent);
745
+ --fui-field-selection-bg: var(--fui-control-selected-bg);
593
746
  --fui-field-selection-bg-hover: color-mix(in srgb, var(--fui-text-primary) 11%, transparent);
594
747
  --fui-field-selection-border: var(--fui-border-strong);
595
748
  --fui-field-selection-color: var(--fui-text-primary);
@@ -614,96 +767,55 @@ $fui-code-selection-bg: color-mix(
614
767
  --fui-kbd-radius: var(--fui-radius-sm);
615
768
  --fui-kbd-reserved-width: 2.714rem; // 38px, enough for "⌘K"
616
769
 
617
- // Button chrome. Primary fill = pine. Border/color are shared; the fill
618
- // treatment and radius branch on the brand: the Fragments default renders a
619
- // FLAT solid pill (hybrid-skin), while consumer-branded builds keep the
620
- // raised-gradient recipe with crisp border, top highlight, and pressed inset.
621
- --fui-button-primary-base: light-dark(#006b57, #006b57);
622
- --fui-button-primary-hover: light-dark(#187762, #187762);
623
- --fui-button-primary-active: light-dark(#005f4c, #005f4c);
624
- --fui-button-primary-border-hover: color-mix(
625
- in srgb,
626
- var(--fui-button-primary-active) 86%,
627
- black 14%
628
- );
629
- --fui-button-primary-border: color-mix(
630
- in srgb,
631
- var(--fui-button-primary-active) 74%,
632
- black 26%
633
- );
634
- --fui-button-primary-color: #fff;
635
-
770
+ // Button chrome. Every theme uses flat fills: hierarchy comes from colour,
771
+ // border, and state contrast rather than a second raised/gradient material.
772
+ //
773
+ // The Fragments default is ink-first: the primary action wears the inverse
774
+ // surface (near-black on paper, near-white on charcoal) with the accent
775
+ // reserved for meaning — links, selection, focus, "contract passing".
776
+ // A consumer-supplied $fui-brand switches primary chrome to the accent
777
+ // ramp so their brand colour actually paints their buttons (previously the
778
+ // chrome stayed pine regardless of seed).
636
779
  @if $fui-brand-is-default {
637
- // Flat solid pill — hybrid-skin treatment.
638
- --fui-button-radius: var(--fui-radius-full);
639
- --fui-button-primary-bg: var(--fui-button-primary-base);
640
- --fui-button-primary-bg-hover: var(--fui-button-primary-hover);
641
- --fui-button-primary-bg-active: var(--fui-button-primary-active);
642
- --fui-button-primary-shadow: none;
643
- --fui-button-primary-shadow-active: inset
644
- 0
645
- 1px
646
- 2px
647
- color-mix(in srgb, black 22%, transparent);
648
- } @else {
649
- // Raised-gradient recipe for consumer-branded builds.
650
- --fui-button-radius: var(--fui-radius-lg);
651
- --fui-button-primary-bg: linear-gradient(
652
- to bottom,
653
- color-mix(in srgb, var(--fui-button-primary-base) 78%, white 22%) 0%,
654
- var(--fui-button-primary-base) 52%,
655
- color-mix(in srgb, var(--fui-button-primary-active) 88%, black 12%) 100%
656
- );
657
- --fui-button-primary-bg-hover: linear-gradient(
658
- to bottom,
659
- color-mix(in srgb, var(--fui-button-primary-hover) 76%, white 24%) 0%,
660
- var(--fui-button-primary-hover) 52%,
661
- color-mix(in srgb, var(--fui-button-primary-active) 84%, black 16%) 100%
780
+ --fui-button-primary-base: var(--fui-bg-inverse);
781
+ --fui-button-primary-hover: light-dark(
782
+ color-mix(in srgb, var(--fui-bg-inverse) 88%, white),
783
+ #ffffff
662
784
  );
663
- --fui-button-primary-bg-active: linear-gradient(
664
- to bottom,
665
- color-mix(in srgb, var(--fui-button-primary-active) 88%, black 12%) 0%,
666
- var(--fui-button-primary-active) 100%
785
+ --fui-button-primary-active: light-dark(
786
+ color-mix(in srgb, var(--fui-bg-inverse) 92%, black),
787
+ color-mix(in srgb, var(--fui-bg-inverse) 94%, black)
667
788
  );
668
- --fui-button-primary-shadow:
669
- inset 0 1px 0 color-mix(in srgb, white 30%, transparent),
670
- inset 0 -1px 0 color-mix(in srgb, black 18%, transparent),
671
- 0 1px 1px color-mix(in srgb, black 16%, transparent);
672
- --fui-button-primary-shadow-active:
673
- inset 0 1px 2px color-mix(in srgb, black 30%, transparent),
674
- 0 1px 0 color-mix(in srgb, white 8%, transparent);
789
+ --fui-button-primary-color: var(--fui-text-inverse);
790
+ --fui-button-radius: var(--fui-radius-xl);
791
+ } @else {
792
+ --fui-button-primary-base: var(--fui-color-accent);
793
+ --fui-button-primary-hover: var(--fui-color-accent-hover);
794
+ --fui-button-primary-active: var(--fui-color-accent-active);
795
+ --fui-button-primary-color: var(--fui-color-on-accent);
796
+ --fui-button-radius: var(--fui-radius-lg);
675
797
  }
676
798
 
677
- --fui-button-neutral-bg: linear-gradient(
678
- to bottom,
679
- light-dark(
680
- color-mix(in srgb, var(--fui-bg-elevated) 97%, var(--fui-text-primary) 3%),
681
- color-mix(in srgb, var(--fui-bg-elevated) 88%, var(--fui-text-primary) 12%)
682
- )
683
- 0%,
684
- light-dark(
685
- color-mix(in srgb, var(--fui-bg-elevated) 92%, var(--fui-text-primary) 8%),
686
- color-mix(in srgb, var(--fui-bg-elevated) 96%, var(--fui-text-primary) 4%)
687
- )
688
- 100%
799
+ --fui-button-primary-border: var(--fui-button-primary-base);
800
+ --fui-button-primary-border-hover: var(--fui-button-primary-hover);
801
+
802
+ --fui-button-primary-bg: var(--fui-button-primary-base);
803
+ --fui-button-primary-bg-hover: var(--fui-button-primary-hover);
804
+ --fui-button-primary-bg-active: var(--fui-button-primary-active);
805
+ --fui-button-primary-shadow: none;
806
+ --fui-button-primary-shadow-active: none;
807
+
808
+ --fui-button-neutral-bg: light-dark(
809
+ color-mix(in srgb, var(--fui-bg-elevated) 94%, var(--fui-text-primary) 6%),
810
+ color-mix(in srgb, var(--fui-bg-elevated) 92%, var(--fui-text-primary) 8%)
689
811
  );
690
- --fui-button-neutral-bg-hover: linear-gradient(
691
- to bottom,
692
- light-dark(
693
- color-mix(in srgb, var(--fui-bg-elevated) 99%, var(--fui-text-primary) 1%),
694
- color-mix(in srgb, var(--fui-bg-elevated) 82%, var(--fui-text-primary) 18%)
695
- )
696
- 0%,
697
- light-dark(
698
- color-mix(in srgb, var(--fui-bg-elevated) 88%, var(--fui-text-primary) 12%),
699
- color-mix(in srgb, var(--fui-bg-elevated) 92%, var(--fui-text-primary) 8%)
700
- )
701
- 100%
812
+ --fui-button-neutral-bg-hover: light-dark(
813
+ color-mix(in srgb, var(--fui-bg-elevated) 90%, var(--fui-text-primary) 10%),
814
+ color-mix(in srgb, var(--fui-bg-elevated) 86%, var(--fui-text-primary) 14%)
702
815
  );
703
- --fui-button-neutral-bg-active: linear-gradient(
704
- to bottom,
705
- color-mix(in srgb, var(--fui-bg-elevated) 82%, var(--fui-text-primary) 18%) 0%,
706
- color-mix(in srgb, var(--fui-bg-elevated) 90%, var(--fui-text-primary) 10%) 100%
816
+ --fui-button-neutral-bg-active: light-dark(
817
+ color-mix(in srgb, var(--fui-bg-elevated) 84%, var(--fui-text-primary) 16%),
818
+ color-mix(in srgb, var(--fui-bg-elevated) 80%, var(--fui-text-primary) 20%)
707
819
  );
708
820
  --fui-button-neutral-border: color-mix(
709
821
  in srgb,
@@ -716,21 +828,39 @@ $fui-code-selection-bg: color-mix(
716
828
  var(--fui-text-primary) 42%
717
829
  );
718
830
  --fui-button-neutral-color: var(--fui-text-primary);
719
- --fui-button-outlined-shadow: #{$fui-button-outlined-shadow};
720
- --fui-button-neutral-shadow:
721
- inset 0 1px 0
722
- light-dark(
723
- color-mix(in srgb, white 88%, transparent),
724
- color-mix(in srgb, white 7%, transparent)
725
- ),
726
- inset 0 -1px 0 color-mix(in srgb, var(--fui-text-primary) 7%, transparent),
727
- 0 1px 1px color-mix(in srgb, black 12%, transparent);
728
- --fui-button-neutral-shadow-active:
729
- inset 0 1px 2px color-mix(in srgb, black 16%, transparent),
730
- inset 0 0 0 1px color-mix(in srgb, var(--fui-text-primary) 6%, transparent);
831
+ --fui-button-outlined-shadow: none;
832
+ --fui-button-neutral-shadow: none;
833
+ --fui-button-neutral-shadow-active: none;
731
834
 
732
835
  --fui-code-bg: #{$fui-code-bg};
733
836
  --fui-code-selection-bg: #{$fui-code-selection-bg};
837
+ --fui-code-text: var(--fui-text-primary);
838
+ --fui-code-token-keyword: light-dark(
839
+ #{$fui-code-token-keyword},
840
+ #{$fui-dark-code-token-keyword}
841
+ );
842
+ --fui-code-token-string: light-dark(#{$fui-code-token-string}, #{$fui-dark-code-token-string});
843
+ --fui-code-token-comment: light-dark(
844
+ #{$fui-code-token-comment},
845
+ #{$fui-dark-code-token-comment}
846
+ );
847
+ --fui-code-token-function: light-dark(
848
+ #{$fui-code-token-function},
849
+ #{$fui-dark-code-token-function}
850
+ );
851
+ --fui-code-token-number: light-dark(#{$fui-code-token-number}, #{$fui-dark-code-token-number});
852
+ --fui-code-token-punctuation: light-dark(
853
+ #{$fui-code-token-punctuation},
854
+ #{$fui-dark-code-token-punctuation}
855
+ );
856
+ --fui-code-token-variable: light-dark(
857
+ #{$fui-code-token-variable},
858
+ #{$fui-dark-code-token-variable}
859
+ );
860
+ --fui-link-ink: light-dark(#{$fui-link-ink}, #{$fui-dark-link-ink});
861
+ --fui-card-accent-bg: var(--fui-bg-tertiary);
862
+ --fui-card-accent-border: color-mix(in srgb, var(--fui-color-accent) 30%, var(--fui-border));
863
+ --fui-card-accent-radius: #{$fui-card-accent-radius};
734
864
 
735
865
  // Popup/menu active-item highlight — neutral, deliberately stronger than
736
866
  // --fui-bg-hover (which is tuned for subtle surface hovers and reads as ~invisible
@@ -741,15 +871,18 @@ $fui-code-selection-bg: color-mix(
741
871
  // Product shell and navigation chrome. These stay neutral-first so a
742
872
  // dashboard page reads as one system instead of brand-tinted islands.
743
873
  --fui-app-canvas-bg: var(--fui-body-bg);
744
- --fui-app-main-bg: var(--fui-main-bg);
745
- --fui-app-sidebar-bg: color-mix(in srgb, var(--fui-bg-primary) 78%, var(--fui-bg-secondary));
874
+ // Same surface order in both themes: the rail is recessed, the main
875
+ // reading sheet is raised. Light: tertiary paper rail, body-bg sheet.
876
+ // Dark keeps the lifted rail on a deeper body.
877
+ --fui-app-main-bg: var(--fui-body-bg);
878
+ --fui-app-sidebar-bg: var(--fui-bg-tertiary);
746
879
  --fui-sidebar-bg: var(--fui-app-sidebar-bg);
747
880
  --fui-sidebar-border: var(--fui-border-default);
748
881
  --fui-sidebar-item-color: var(--fui-text-secondary);
749
882
  --fui-sidebar-item-icon-color: var(--fui-text-tertiary);
750
883
  --fui-sidebar-item-hover-bg: var(--fui-bg-hover);
751
884
  --fui-sidebar-item-hover-color: var(--fui-text-primary);
752
- --fui-sidebar-item-active-bg: color-mix(in srgb, var(--fui-text-primary) 8%, transparent);
885
+ --fui-sidebar-item-active-bg: var(--fui-control-selected-bg);
753
886
  --fui-sidebar-item-active-border: transparent;
754
887
  --fui-sidebar-item-active-color: var(--fui-text-primary);
755
888
  --fui-sidebar-item-active-indicator: transparent;
@@ -760,6 +893,11 @@ $fui-code-selection-bg: color-mix(
760
893
  --fui-badge-dot-color: currentColor;
761
894
  --fui-card-radius: var(--fui-radius-lg);
762
895
  --fui-card-bg: color-mix(in srgb, var(--fui-bg-elevated) 92%, transparent);
896
+ // Full-bleed card chrome (for example `Card.Header divided`) shares the
897
+ // raised-neutral plane with shell controls. Keep the semantic alias
898
+ // component-specific so consumers can tune card hierarchy without
899
+ // changing every subtle surface.
900
+ --fui-card-header-bg: var(--fui-bg-subtle);
763
901
  --fui-card-border: color-mix(in srgb, var(--fui-border-default) 86%, transparent);
764
902
  --fui-card-outlined-border: var(--fui-card-border);
765
903
  --fui-card-shadow: inset 0 1px 0
@@ -792,7 +930,7 @@ $fui-code-selection-bg: color-mix(
792
930
  --fui-table-header-border: var(--fui-border-strong);
793
931
  --fui-table-row-hover-bg: var(--fui-bg-hover);
794
932
  --fui-table-row-active-bg: var(--fui-bg-active);
795
- --fui-table-row-selected-bg: color-mix(in srgb, var(--fui-text-primary) 8%, transparent);
933
+ --fui-table-row-selected-bg: var(--fui-control-selected-bg);
796
934
  --fui-table-row-selected-border: var(--fui-border-strong);
797
935
  --fui-table-subrow-bg: color-mix(in srgb, var(--fui-bg-secondary) 62%, transparent);
798
936
 
@@ -800,13 +938,18 @@ $fui-code-selection-bg: color-mix(
800
938
  --fui-tabs-pills-bg: color-mix(in srgb, var(--fui-text-primary) 5%, transparent);
801
939
  --fui-tabs-pills-border: var(--fui-border-default);
802
940
  --fui-tabs-pill-hover-bg: transparent;
803
- --fui-tabs-pill-active-bg: color-mix(in srgb, var(--fui-text-primary) 9%, transparent);
941
+ --fui-tabs-pill-active-bg: var(--fui-control-selected-bg);
804
942
  --fui-tabs-pill-active-border: transparent;
805
943
  --fui-tabs-pill-active-shadow: none;
806
- --fui-toggle-group-selected-bg: color-mix(in srgb, var(--fui-text-primary) 9%, transparent);
944
+ --fui-toggle-group-selected-bg: var(--fui-control-selected-bg);
807
945
  --fui-toggle-group-selected-border: transparent;
808
946
  --fui-toggle-group-selected-shadow: none;
809
947
 
948
+ // Header search is persistent shell chrome rather than a ghost action.
949
+ // One surface step above divided card headers keeps this global affordance
950
+ // easy to find in both themes without turning it into a selected control.
951
+ --fui-header-search-bg: var(--fui-bg-hover);
952
+
810
953
  // Shadows (not <color> type — light-dark() can't be used, handled in dark overrides)
811
954
  --fui-shadow-sm: #{$fui-shadow-sm};
812
955
  --fui-shadow-md: #{$fui-shadow-md};
@@ -826,14 +969,18 @@ $fui-code-selection-bg: color-mix(
826
969
  #{$fui-dark-scrollbar-thumb-hover}
827
970
  );
828
971
 
829
- // Component heights (density-responsive)
830
- --fui-button-height-xs: #{$fui-button-height-xs};
831
- --fui-button-height-sm: #{$fui-button-height-sm};
832
- --fui-button-height-md: #{$fui-button-height-md};
833
- --fui-button-height-lg: #{$fui-button-height-lg};
834
- --fui-input-height-sm: #{$fui-input-height-sm};
835
- --fui-input-height: #{$fui-input-height};
836
- --fui-input-height-lg: #{$fui-input-height-lg};
972
+ // Fixed component tracks plus compatibility aliases.
973
+ --fui-control-height-xs: #{$fui-control-height-xs};
974
+ --fui-control-height-sm: #{$fui-control-height-sm};
975
+ --fui-control-height-md: #{$fui-control-height-md};
976
+ --fui-control-height-lg: #{$fui-control-height-lg};
977
+ --fui-button-height-xs: var(--fui-control-height-xs);
978
+ --fui-button-height-sm: var(--fui-control-height-sm);
979
+ --fui-button-height-md: var(--fui-control-height-md);
980
+ --fui-button-height-lg: var(--fui-control-height-lg);
981
+ --fui-input-height-sm: var(--fui-field-track-sm);
982
+ --fui-input-height: var(--fui-field-track-md);
983
+ --fui-input-height-lg: var(--fui-field-track-lg);
837
984
 
838
985
  // Touch targets (density-responsive, Fragments control floor: ≥32px)
839
986
  --fui-touch-sm: #{$fui-touch-sm};
@@ -847,14 +994,22 @@ $fui-code-selection-bg: color-mix(
847
994
  // AppShell Layout
848
995
  --fui-appshell-header-height: #{$fui-appshell-header-height};
849
996
  --fui-header-z-index: #{$fui-header-z-index};
997
+ }
998
+
999
+ // Named runtime selectors use the same generated profiles as compile-time
1000
+ // Sass seeds. Attribute specificity intentionally matches :root so these
1001
+ // later rules can override the compiled default on either the document root
1002
+ // or a scoped provider without inline numeric maps.
1003
+ @each $density in measurements.$density-profile-names {
1004
+ [data-fui-density="#{$density}"] {
1005
+ @include measurements.emit-density-profile($density);
1006
+ }
1007
+ }
850
1008
 
851
- // Icon sizes (single source of truth — components must not hardcode SVG box sizes)
852
- --fui-icon-xs: #{$fui-icon-xs};
853
- --fui-icon-sm: #{$fui-icon-sm};
854
- --fui-icon-md: #{$fui-icon-md};
855
- --fui-icon-lg: #{$fui-icon-lg};
856
- --fui-icon-xl: #{$fui-icon-xl};
857
- --fui-icon-2xl: #{$fui-icon-2xl};
1009
+ @each $radius-style in measurements.$radius-profile-names {
1010
+ [data-fui-radius-style="#{$radius-style}"] {
1011
+ @include measurements.emit-radius-profile($radius-style);
1012
+ }
858
1013
  }
859
1014
 
860
1015
  // Dark mode via data-theme attribute (manual toggle).
@@ -1076,6 +1231,11 @@ $fui-code-selection-bg: color-mix(
1076
1231
  --fui-bg-highlight: color-mix(in srgb, var(--fui-text-primary) 10%, transparent);
1077
1232
  --fui-body-bg: #{$fui-dark-body-bg};
1078
1233
  --fui-main-bg: #{$fui-dark-main-bg};
1234
+ --fui-app-main-bg: var(--fui-main-bg);
1235
+ // Paper primary == secondary in dark, so a mix of the two is a no-op.
1236
+ // Tertiary is the lifted rail; main stays the deeper body.
1237
+ --fui-app-sidebar-bg: var(--fui-bg-tertiary);
1238
+ --fui-sidebar-bg: var(--fui-app-sidebar-bg);
1079
1239
  --fui-bg-inverse: #{$fui-dark-bg-inverse};
1080
1240
 
1081
1241
  // Text