@fragments-sdk/ui 0.17.1 → 0.19.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 (286) hide show
  1. package/dist/assets/ui.css +2700 -3256
  2. package/dist/chart.cjs +0 -1
  3. package/dist/chart.js +0 -1
  4. package/dist/codeblock.cjs +0 -1
  5. package/dist/codeblock.js +0 -1
  6. package/dist/colorpicker.cjs +0 -1
  7. package/dist/colorpicker.js +0 -1
  8. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  9. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  10. package/dist/components/Alert/Alert.module.scss.cjs +12 -12
  11. package/dist/components/Alert/Alert.module.scss.js +12 -12
  12. package/dist/components/AppShell/AppShell.module.scss.cjs +12 -12
  13. package/dist/components/AppShell/AppShell.module.scss.js +12 -12
  14. package/dist/components/Avatar/Avatar.module.scss.cjs +13 -13
  15. package/dist/components/Avatar/Avatar.module.scss.js +13 -13
  16. package/dist/components/Badge/Badge.module.scss.cjs +13 -13
  17. package/dist/components/Badge/Badge.module.scss.js +13 -13
  18. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +14 -14
  19. package/dist/components/BentoGrid/BentoGrid.module.scss.js +14 -14
  20. package/dist/components/Box/Box.module.scss.cjs +152 -152
  21. package/dist/components/Box/Box.module.scss.js +152 -152
  22. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.cjs +8 -8
  23. package/dist/components/Breadcrumbs/Breadcrumbs.module.scss.js +8 -8
  24. package/dist/components/Button/Button.module.scss.cjs +12 -12
  25. package/dist/components/Button/Button.module.scss.js +12 -12
  26. package/dist/components/Card/Card.module.scss.cjs +14 -14
  27. package/dist/components/Card/Card.module.scss.js +14 -14
  28. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  29. package/dist/components/Chart/Chart.module.scss.js +15 -15
  30. package/dist/components/Chart/index.d.ts +0 -1
  31. package/dist/components/Chart/index.d.ts.map +1 -1
  32. package/dist/components/Checkbox/Checkbox.module.scss.cjs +10 -10
  33. package/dist/components/Checkbox/Checkbox.module.scss.js +10 -10
  34. package/dist/components/Chip/Chip.module.scss.cjs +15 -15
  35. package/dist/components/Chip/Chip.module.scss.js +15 -15
  36. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +21 -21
  37. package/dist/components/CodeBlock/CodeBlock.module.scss.js +21 -21
  38. package/dist/components/CodeBlock/index.d.ts +0 -1
  39. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  40. package/dist/components/Collapsible/Collapsible.module.scss.cjs +10 -10
  41. package/dist/components/Collapsible/Collapsible.module.scss.js +10 -10
  42. package/dist/components/ColorPicker/ColorPicker.module.scss.cjs +14 -14
  43. package/dist/components/ColorPicker/ColorPicker.module.scss.js +14 -14
  44. package/dist/components/ColorPicker/index.d.ts +0 -1
  45. package/dist/components/ColorPicker/index.d.ts.map +1 -1
  46. package/dist/components/Combobox/Combobox.module.scss.cjs +23 -23
  47. package/dist/components/Combobox/Combobox.module.scss.js +23 -23
  48. package/dist/components/Combobox/index.cjs +13 -10
  49. package/dist/components/Combobox/index.d.ts.map +1 -1
  50. package/dist/components/Combobox/index.js +13 -10
  51. package/dist/components/Command/Command.module.scss.cjs +11 -11
  52. package/dist/components/Command/Command.module.scss.js +11 -11
  53. package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
  54. package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
  55. package/dist/components/DataTable/DataTable.module.scss.cjs +26 -26
  56. package/dist/components/DataTable/DataTable.module.scss.js +26 -26
  57. package/dist/components/DataTable/index.cjs +0 -1
  58. package/dist/components/DataTable/index.d.ts +0 -1
  59. package/dist/components/DataTable/index.d.ts.map +1 -1
  60. package/dist/components/DataTable/index.js +0 -1
  61. package/dist/components/DatePicker/DatePicker.module.scss.cjs +31 -31
  62. package/dist/components/DatePicker/DatePicker.module.scss.js +31 -31
  63. package/dist/components/DatePicker/index.d.ts +0 -1
  64. package/dist/components/DatePicker/index.d.ts.map +1 -1
  65. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  66. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  67. package/dist/components/Drawer/Drawer.module.scss.cjs +33 -27
  68. package/dist/components/Drawer/Drawer.module.scss.js +34 -28
  69. package/dist/components/Drawer/index.cjs +36 -14
  70. package/dist/components/Drawer/index.d.ts +21 -3
  71. package/dist/components/Drawer/index.d.ts.map +1 -1
  72. package/dist/components/Drawer/index.js +36 -14
  73. package/dist/components/Editor/Editor.module.scss.cjs +17 -17
  74. package/dist/components/Editor/Editor.module.scss.js +17 -17
  75. package/dist/components/EmptyState/EmptyState.module.scss.cjs +8 -8
  76. package/dist/components/EmptyState/EmptyState.module.scss.js +8 -8
  77. package/dist/components/Field/Field.module.scss.cjs +4 -4
  78. package/dist/components/Field/Field.module.scss.js +4 -4
  79. package/dist/components/Fieldset/Fieldset.module.scss.cjs +3 -3
  80. package/dist/components/Fieldset/Fieldset.module.scss.js +3 -3
  81. package/dist/components/Header/Header.module.scss.cjs +28 -28
  82. package/dist/components/Header/Header.module.scss.js +28 -28
  83. package/dist/components/Icon/Icon.module.scss.cjs +8 -8
  84. package/dist/components/Icon/Icon.module.scss.js +8 -8
  85. package/dist/components/Image/Image.module.scss.cjs +27 -27
  86. package/dist/components/Image/Image.module.scss.js +27 -27
  87. package/dist/components/Input/Input.module.scss.cjs +19 -19
  88. package/dist/components/Input/Input.module.scss.js +19 -19
  89. package/dist/components/Link/Link.module.scss.cjs +10 -10
  90. package/dist/components/Link/Link.module.scss.js +10 -10
  91. package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
  92. package/dist/components/Listbox/Listbox.module.scss.js +8 -8
  93. package/dist/components/Loading/Loading.module.scss.cjs +30 -30
  94. package/dist/components/Loading/Loading.module.scss.js +30 -30
  95. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  96. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  97. package/dist/components/Markdown/index.d.ts +0 -1
  98. package/dist/components/Markdown/index.d.ts.map +1 -1
  99. package/dist/components/Menu/Menu.module.scss.cjs +16 -13
  100. package/dist/components/Menu/Menu.module.scss.js +17 -14
  101. package/dist/components/Menu/index.cjs +1 -1
  102. package/dist/components/Menu/index.d.ts.map +1 -1
  103. package/dist/components/Menu/index.js +1 -1
  104. package/dist/components/Message/Message.module.scss.cjs +18 -18
  105. package/dist/components/Message/Message.module.scss.js +18 -18
  106. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +28 -28
  107. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +28 -28
  108. package/dist/components/Pagination/Pagination.module.scss.cjs +7 -7
  109. package/dist/components/Pagination/Pagination.module.scss.js +7 -7
  110. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  111. package/dist/components/Popover/Popover.module.scss.js +10 -10
  112. package/dist/components/Progress/Progress.module.scss.cjs +25 -25
  113. package/dist/components/Progress/Progress.module.scss.js +25 -25
  114. package/dist/components/Prompt/Prompt.module.scss.cjs +26 -14
  115. package/dist/components/Prompt/Prompt.module.scss.js +26 -14
  116. package/dist/components/Prompt/index.cjs +16 -0
  117. package/dist/components/Prompt/index.d.ts +17 -1
  118. package/dist/components/Prompt/index.d.ts.map +1 -1
  119. package/dist/components/Prompt/index.js +16 -0
  120. package/dist/components/RadioGroup/RadioGroup.module.scss.cjs +16 -16
  121. package/dist/components/RadioGroup/RadioGroup.module.scss.js +16 -16
  122. package/dist/components/ScrollArea/ScrollArea.module.scss.cjs +10 -10
  123. package/dist/components/ScrollArea/ScrollArea.module.scss.js +10 -10
  124. package/dist/components/Select/Select.module.scss.cjs +17 -17
  125. package/dist/components/Select/Select.module.scss.js +17 -17
  126. package/dist/components/Select/index.cjs +20 -20
  127. package/dist/components/Select/index.d.ts.map +1 -1
  128. package/dist/components/Select/index.js +20 -20
  129. package/dist/components/Separator/Separator.module.scss.cjs +10 -10
  130. package/dist/components/Separator/Separator.module.scss.js +10 -10
  131. package/dist/components/Sidebar/Sidebar.module.scss.cjs +42 -42
  132. package/dist/components/Sidebar/Sidebar.module.scss.js +42 -42
  133. package/dist/components/Slider/Slider.module.scss.cjs +12 -12
  134. package/dist/components/Slider/Slider.module.scss.js +12 -12
  135. package/dist/components/Slider/index.cjs +23 -21
  136. package/dist/components/Slider/index.js +23 -21
  137. package/dist/components/Stack/Stack.module.scss.cjs +35 -35
  138. package/dist/components/Stack/Stack.module.scss.js +35 -35
  139. package/dist/components/Table/Table.module.scss.cjs +16 -16
  140. package/dist/components/Table/Table.module.scss.js +16 -16
  141. package/dist/components/Table/index.d.ts +0 -1
  142. package/dist/components/Table/index.d.ts.map +1 -1
  143. package/dist/components/TableOfContents/TableOfContents.module.scss.cjs +7 -7
  144. package/dist/components/TableOfContents/TableOfContents.module.scss.js +7 -7
  145. package/dist/components/Tabs/Tabs.module.scss.cjs +9 -9
  146. package/dist/components/Tabs/Tabs.module.scss.js +9 -9
  147. package/dist/components/Text/Text.module.scss.cjs +38 -38
  148. package/dist/components/Text/Text.module.scss.js +38 -38
  149. package/dist/components/Textarea/Textarea.module.scss.cjs +23 -23
  150. package/dist/components/Textarea/Textarea.module.scss.js +23 -23
  151. package/dist/components/Theme/ThemeToggle.module.scss.cjs +6 -6
  152. package/dist/components/Theme/ThemeToggle.module.scss.js +6 -6
  153. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +22 -22
  154. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +22 -22
  155. package/dist/components/Toast/Toast.module.scss.cjs +20 -20
  156. package/dist/components/Toast/Toast.module.scss.js +20 -20
  157. package/dist/components/Toggle/Toggle.module.scss.cjs +13 -13
  158. package/dist/components/Toggle/Toggle.module.scss.js +13 -13
  159. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +17 -17
  160. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +17 -17
  161. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  162. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  163. package/dist/components/Tooltip/index.cjs +4 -3
  164. package/dist/components/Tooltip/index.d.ts +4 -1
  165. package/dist/components/Tooltip/index.d.ts.map +1 -1
  166. package/dist/components/Tooltip/index.js +4 -3
  167. package/dist/datepicker.cjs +0 -1
  168. package/dist/datepicker.js +0 -1
  169. package/dist/index.cjs +0 -1
  170. package/dist/index.d.ts +2 -3
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +0 -1
  173. package/dist/markdown.cjs +0 -1
  174. package/dist/markdown.js +0 -1
  175. package/dist/table.cjs +0 -1
  176. package/dist/table.js +0 -1
  177. package/dist/utils/seed-derivation.cjs +29 -0
  178. package/dist/utils/seed-derivation.d.ts +1 -1
  179. package/dist/utils/seed-derivation.d.ts.map +1 -1
  180. package/dist/utils/seed-derivation.js +29 -0
  181. package/fragments.json +1 -1
  182. package/package.json +18 -14
  183. package/src/components/Accordion/Accordion.contract.json +169 -0
  184. package/src/components/Alert/Alert.contract.json +157 -0
  185. package/src/components/AppShell/AppShell.contract.json +155 -0
  186. package/src/components/Avatar/Avatar.contract.json +189 -0
  187. package/src/components/Badge/Badge.contract.json +187 -0
  188. package/src/components/BentoGrid/BentoGrid.contract.json +135 -0
  189. package/src/components/Box/Box.contract.json +423 -0
  190. package/src/components/Breadcrumbs/Breadcrumbs.contract.json +143 -0
  191. package/src/components/Button/Button.contract.json +205 -0
  192. package/src/components/Button/Button.module.scss +24 -1
  193. package/src/components/ButtonGroup/ButtonGroup.contract.json +140 -0
  194. package/src/components/Card/Card.contract.json +185 -0
  195. package/src/components/Card/Card.module.scss +5 -1
  196. package/src/components/Chart/Chart.contract.json +129 -0
  197. package/src/components/Chart/index.tsx +0 -1
  198. package/src/components/Checkbox/Checkbox.contract.json +246 -0
  199. package/src/components/Chip/Chip.contract.json +212 -0
  200. package/src/components/Chip/Chip.module.scss +4 -4
  201. package/src/components/CodeBlock/CodeBlock.contract.json +388 -0
  202. package/src/components/CodeBlock/index.tsx +0 -1
  203. package/src/components/Collapsible/Collapsible.contract.json +154 -0
  204. package/src/components/ColorPicker/ColorPicker.contract.json +212 -0
  205. package/src/components/ColorPicker/index.tsx +0 -1
  206. package/src/components/Combobox/Combobox.contract.json +297 -0
  207. package/src/components/Combobox/index.tsx +7 -8
  208. package/src/components/Command/Command.contract.json +165 -0
  209. package/src/components/Command/Command.module.scss +22 -9
  210. package/src/components/ConversationList/ConversationList.contract.json +151 -0
  211. package/src/components/DataTable/DataTable.contract.json +302 -0
  212. package/src/components/DataTable/index.tsx +0 -2
  213. package/src/components/DatePicker/DatePicker.contract.json +288 -0
  214. package/src/components/DatePicker/index.tsx +0 -2
  215. package/src/components/Dialog/Dialog.contract.json +159 -0
  216. package/src/components/Drawer/Drawer.contract.json +161 -0
  217. package/src/components/Drawer/Drawer.module.scss +45 -5
  218. package/src/components/Drawer/index.tsx +66 -23
  219. package/src/components/Editor/Editor.contract.json +263 -0
  220. package/src/components/EmptyState/EmptyState.contract.json +133 -0
  221. package/src/components/Field/Field.contract.json +157 -0
  222. package/src/components/Fieldset/Fieldset.contract.json +117 -0
  223. package/src/components/Form/Form.contract.json +145 -0
  224. package/src/components/Grid/Grid.contract.json +195 -0
  225. package/src/components/Header/Header.contract.json +196 -0
  226. package/src/components/Icon/Icon.contract.json +194 -0
  227. package/src/components/Image/Image.contract.json +209 -0
  228. package/src/components/Input/Input.contract.json +344 -0
  229. package/src/components/Input/Input.module.scss +16 -6
  230. package/src/components/Link/Link.contract.json +180 -0
  231. package/src/components/List/List.contract.json +154 -0
  232. package/src/components/Listbox/Listbox.contract.json +158 -0
  233. package/src/components/Loading/Loading.contract.json +167 -0
  234. package/src/components/Markdown/Markdown.contract.json +127 -0
  235. package/src/components/Markdown/Markdown.module.scss +0 -3
  236. package/src/components/Markdown/index.tsx +0 -1
  237. package/src/components/Menu/Menu.contract.json +177 -0
  238. package/src/components/Menu/Menu.module.scss +6 -0
  239. package/src/components/Menu/index.tsx +3 -1
  240. package/src/components/Message/Message.contract.json +183 -0
  241. package/src/components/Message/Message.module.scss +2 -2
  242. package/src/components/NavigationMenu/NavigationMenu.contract.json +203 -0
  243. package/src/components/NavigationMenu/NavigationMenu.module.scss +18 -23
  244. package/src/components/Pagination/Pagination.contract.json +163 -0
  245. package/src/components/Pagination/Pagination.module.scss +1 -1
  246. package/src/components/Popover/Popover.contract.json +163 -0
  247. package/src/components/Progress/Progress.contract.json +176 -0
  248. package/src/components/Prompt/Prompt.contract.json +211 -0
  249. package/src/components/Prompt/Prompt.module.scss +117 -3
  250. package/src/components/Prompt/index.tsx +40 -0
  251. package/src/components/RadioGroup/RadioGroup.contract.json +226 -0
  252. package/src/components/ScrollArea/ScrollArea.contract.json +131 -0
  253. package/src/components/Select/Select.contract.json +269 -0
  254. package/src/components/Select/index.tsx +20 -25
  255. package/src/components/Separator/Separator.contract.json +143 -0
  256. package/src/components/Sidebar/Sidebar.contract.json +258 -0
  257. package/src/components/Sidebar/Sidebar.module.scss +1 -1
  258. package/src/components/Skeleton/Skeleton.contract.json +166 -0
  259. package/src/components/Slider/Slider.contract.json +248 -0
  260. package/src/components/Slider/index.tsx +10 -10
  261. package/src/components/Stack/Stack.contract.json +220 -0
  262. package/src/components/Table/Table.contract.json +171 -0
  263. package/src/components/Table/index.tsx +0 -2
  264. package/src/components/TableOfContents/TableOfContents.contract.json +145 -0
  265. package/src/components/TableOfContents/TableOfContents.module.scss +19 -15
  266. package/src/components/Tabs/Tabs.contract.json +159 -0
  267. package/src/components/Text/Text.contract.json +239 -0
  268. package/src/components/Textarea/Textarea.contract.json +308 -0
  269. package/src/components/Theme/Theme.contract.json +152 -0
  270. package/src/components/ThinkingIndicator/ThinkingIndicator.contract.json +165 -0
  271. package/src/components/Toast/Toast.contract.json +181 -0
  272. package/src/components/Toggle/Toggle.contract.json +231 -0
  273. package/src/components/Toggle/Toggle.module.scss +3 -3
  274. package/src/components/ToggleGroup/ToggleGroup.contract.json +206 -0
  275. package/src/components/Tooltip/Tooltip.contract.json +214 -0
  276. package/src/components/Tooltip/index.tsx +7 -3
  277. package/src/components/VisuallyHidden/VisuallyHidden.contract.json +116 -0
  278. package/src/index.ts +8 -3
  279. package/src/styles/globals.scss +6 -1
  280. package/src/tokens/_computed.scss +3 -1
  281. package/src/tokens/_density.scss +4 -4
  282. package/src/tokens/_derive.scss +52 -56
  283. package/src/tokens/_palettes.scss +20 -1
  284. package/src/tokens/_seeds.scss +2 -2
  285. package/src/tokens/_variables.scss +45 -29
  286. package/src/utils/seed-derivation.ts +23 -1
@@ -57,13 +57,15 @@ $fui-font-mono:
57
57
  "Geist Mono", "SF Mono", SFMono-Regular, ui-monospace, "Cascadia Code", Menlo, monospace !default;
58
58
 
59
59
  // Font sizes (rem based on 14px root)
60
+ // Compressed scale: base/md = 14px (1rem). No 16px step.
61
+ // Hierarchy driven by weight, not size jumps.
60
62
  $fui-font-size-2xs: 0.714rem !default; // 10px
61
63
  $fui-font-size-xs: 0.857rem !default; // 12px
62
64
  $fui-font-size-sm: 1rem !default; // 14px (base)
63
- $fui-font-size-base: 1.143rem !default; // 16px
65
+ $fui-font-size-base: 1rem !default; // 14px (= sm, body base)
64
66
  $fui-font-size-lg: 1.286rem !default; // 18px
65
- $fui-font-size-xl: 1.714rem !default; // 24px
66
- $fui-font-size-2xl: 2.143rem !default; // 30px
67
+ $fui-font-size-xl: 1.429rem !default; // 20px
68
+ $fui-font-size-2xl: 1.714rem !default; // 24px
67
69
 
68
70
  $fui-font-weight-normal: 400 !default;
69
71
  $fui-font-weight-medium: 500 !default;
@@ -74,6 +76,10 @@ $fui-line-height-tight: 1.25 !default;
74
76
  $fui-line-height-normal: 1.5 !default;
75
77
  $fui-line-height-relaxed: 1.625 !default;
76
78
 
79
+ // Letter spacing (Linear-inspired tight tracking for headings)
80
+ $fui-letter-spacing-tight: -0.02em !default; // for xl+ headings
81
+ $fui-letter-spacing-normal: normal !default;
82
+
77
83
  // --------------------------------------------
78
84
  // Spacing (derived from density seed)
79
85
  // --------------------------------------------
@@ -105,14 +111,15 @@ $fui-radius-full: computed.$computed-radius-full !default;
105
111
  // --------------------------------------------
106
112
  // Transitions
107
113
  // --------------------------------------------
108
- $fui-transition-fast: 150ms ease !default;
109
- $fui-transition-normal: 200ms ease !default;
114
+ $fui-transition-fast: 160ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !default; // Linear's easing
115
+ $fui-transition-normal: 200ms cubic-bezier(0.4, 0, 0.2, 1) !default; // ChatGPT's easing
110
116
 
111
117
  // --------------------------------------------
112
118
  // Colors - Light Mode (derived from brand/neutral seeds)
113
119
  // --------------------------------------------
114
120
  // Accent colors (derived from $fui-brand seed)
115
121
  $fui-color-accent: computed.$computed-color-accent !default;
122
+ $fui-color-on-accent: computed.$computed-color-on-accent !default;
116
123
  $fui-color-accent-hover: computed.$computed-color-accent-hover !default;
117
124
  $fui-color-accent-active: computed.$computed-color-accent-active !default;
118
125
 
@@ -174,8 +181,9 @@ $fui-scrollbar-thumb-hover: computed.$computed-scrollbar-thumb-hover !default;
174
181
  // --------------------------------------------
175
182
  // Colors - Dark Mode (derived from seeds)
176
183
  // --------------------------------------------
177
- // Accent colors (light on dark background)
184
+ // Accent colors (brand used directly in dark mode; on-accent handles text contrast)
178
185
  $fui-dark-color-accent: computed.$computed-dark-color-accent !default;
186
+ $fui-dark-color-on-accent: computed.$computed-dark-color-on-accent !default;
179
187
  $fui-dark-color-accent-hover: computed.$computed-dark-color-accent-hover !default;
180
188
  $fui-dark-color-accent-active: computed.$computed-dark-color-accent-active !default;
181
189
 
@@ -265,15 +273,15 @@ $fui-touch-lg: computed.$computed-touch-lg !default;
265
273
  $fui-target-size-min: 1.714rem !default; // 24px
266
274
  $fui-target-size-comfortable: $fui-touch-md !default;
267
275
 
268
- // Toggle/Switch (iOS-proportioned: ~1.65:1 width:height ratio)
269
- $fui-toggle-width-sm: 2.857rem !default; // 40px
270
- $fui-toggle-width-md: 3.643rem !default; // 51px (iOS standard)
271
- $fui-toggle-width-lg: 4.286rem !default; // 60px
272
- $fui-toggle-height-sm: $fui-target-size-min !default; // 24px
273
- $fui-toggle-height-md: 2.214rem !default; // 31px (iOS standard)
274
- $fui-toggle-height-lg: 2.571rem !default; // 36px
275
- $fui-toggle-thumb-sm: 1.286rem !default; // 18px
276
- $fui-toggle-thumb-md: 1.929rem !default; // 27px (iOS standard)
276
+ // Toggle/Switch (web-proportioned: ~1.8:1 width:height ratio)
277
+ $fui-toggle-width-sm: 1.857rem !default; // 26px
278
+ $fui-toggle-width-md: 2.571rem !default; // 36px
279
+ $fui-toggle-width-lg: 3.286rem !default; // 46px
280
+ $fui-toggle-height-sm: 1.143rem !default; // 16px
281
+ $fui-toggle-height-md: 1.429rem !default; // 20px
282
+ $fui-toggle-height-lg: 1.857rem !default; // 26px
283
+ $fui-toggle-thumb-sm: 0.857rem !default; // 12px
284
+ $fui-toggle-thumb-md: 1.143rem !default; // 16px
277
285
  $fui-toggle-thumb-offset: 2px !default; // Thumb inset from track edge
278
286
 
279
287
  // Badge
@@ -430,6 +438,8 @@ $fui-dark-tooltip-shadow:
430
438
  --fui-line-height-tight: #{$fui-line-height-tight};
431
439
  --fui-line-height-normal: #{$fui-line-height-normal};
432
440
  --fui-line-height-relaxed: #{$fui-line-height-relaxed};
441
+ --fui-letter-spacing-tight: #{$fui-letter-spacing-tight};
442
+ --fui-letter-spacing-normal: #{$fui-letter-spacing-normal};
433
443
 
434
444
  // Spacing (micro)
435
445
  --fui-space-px: #{$fui-space-px};
@@ -460,6 +470,7 @@ $fui-dark-tooltip-shadow:
460
470
 
461
471
  // Colors — Accent (light-dark for automatic dark mode)
462
472
  --fui-color-accent: light-dark(#{$fui-color-accent}, #{$fui-dark-color-accent});
473
+ --fui-color-on-accent: light-dark(#{$fui-color-on-accent}, #{$fui-dark-color-on-accent});
463
474
  --fui-color-accent-hover: light-dark(#{$fui-color-accent-hover}, #{$fui-dark-color-accent-hover});
464
475
  --fui-color-accent-active: light-dark(#{$fui-color-accent-active}, #{$fui-dark-color-accent-active});
465
476
 
@@ -506,7 +517,7 @@ $fui-dark-tooltip-shadow:
506
517
  --fui-border-strong: light-dark(#{$fui-border-strong}, #{$fui-dark-border-strong});
507
518
 
508
519
  // Form chrome (derived from theme surfaces + seed-driven accent)
509
- --fui-field-bg: color-mix(in srgb, var(--fui-bg-elevated) 92%, var(--fui-bg-primary));
520
+ --fui-field-bg: var(--fui-bg-tertiary);
510
521
  --fui-field-bg-disabled: color-mix(in srgb, var(--fui-bg-tertiary) 88%, var(--fui-bg-primary));
511
522
  --fui-field-border: color-mix(in srgb, var(--fui-border-strong) 78%, var(--fui-bg-primary));
512
523
  --fui-field-border-hover: color-mix(in srgb, var(--fui-text-tertiary) 58%, var(--fui-border-strong));
@@ -590,18 +601,22 @@ $fui-dark-tooltip-shadow:
590
601
  @supports (color: oklch(from red l c h)) {
591
602
  :root {
592
603
  // Accent derived from seed-brand
593
- // Light mode: brand as-is; dark mode: inverted lightness, reduced chroma
604
+ // Light mode: brand as-is. Dark mode: lightened for visibility on dark surfaces.
594
605
  --fui-color-accent: light-dark(
595
606
  var(--fui-seed-brand),
596
- oklch(from var(--fui-seed-brand) clamp(0.88, calc(1 - l + 0.1), 0.96) min(c, 0.05) h)
607
+ oklch(from var(--fui-seed-brand) clamp(0.45, l, 0.85) min(c, 0.12) h)
597
608
  );
609
+
610
+ // Auto-contrast text for elements on accent backgrounds (buttons, chips, etc.)
611
+ // Lightness > 0.6 → dark text; otherwise → white. Users can override this token.
612
+ --fui-color-on-accent: oklch(from var(--fui-color-accent) calc(0 + (1 - clamp(0, calc((l - 0.6) * 999), 1))) 0 0);
598
613
  --fui-color-accent-hover: light-dark(
599
614
  oklch(from var(--fui-seed-brand) max(0.05, calc(l - 0.06)) c h),
600
- oklch(from var(--fui-seed-brand) clamp(0.80, calc(1 - l + 0.02), 0.90) min(c, 0.05) h)
615
+ oklch(from var(--fui-seed-brand) clamp(0.52, calc(l + 0.07), 0.90) min(c, 0.12) h)
601
616
  );
602
617
  --fui-color-accent-active: light-dark(
603
618
  oklch(from var(--fui-seed-brand) max(0.05, calc(l - 0.12)) c h),
604
- oklch(from var(--fui-seed-brand) clamp(0.73, calc(1 - l - 0.05), 0.85) min(c, 0.05) h)
619
+ oklch(from var(--fui-seed-brand) clamp(0.40, calc(l - 0.05), 0.80) min(c, 0.12) h)
605
620
  );
606
621
 
607
622
  // Semantic hover derived from seed
@@ -626,23 +641,23 @@ $fui-dark-tooltip-shadow:
626
641
  );
627
642
 
628
643
  // Focus ring derived from seed-brand
629
- --fui-focus-ring-color: light-dark(
630
- var(--fui-seed-brand),
631
- oklch(from var(--fui-seed-brand) clamp(0.88, calc(1 - l + 0.1), 0.96) min(c, 0.05) h)
632
- );
644
+ --fui-focus-ring-color: var(--fui-seed-brand);
633
645
  }
634
646
 
635
647
  // Runtime-derived dark mode overrides (replaces SCSS-computed when supported)
648
+ // Dark brands are lightened so the button stands out against dark backgrounds.
649
+ // Hover goes slightly lighter, active slightly darker. on-accent handles text.
636
650
  :root[data-theme="dark"],
637
651
  :root.dark {
638
- --fui-color-accent: oklch(from var(--fui-seed-brand) clamp(0.88, calc(1 - l + 0.1), 0.96) min(c, 0.05) h);
639
- --fui-color-accent-hover: oklch(from var(--fui-seed-brand) clamp(0.80, calc(1 - l + 0.02), 0.90) min(c, 0.05) h);
640
- --fui-color-accent-active: oklch(from var(--fui-seed-brand) clamp(0.73, calc(1 - l - 0.05), 0.85) min(c, 0.05) h);
652
+ --fui-color-accent: oklch(from var(--fui-seed-brand) clamp(0.45, l, 0.85) min(c, 0.12) h);
653
+ --fui-color-on-accent: oklch(from var(--fui-color-accent) calc(0 + (1 - clamp(0, calc((l - 0.6) * 999), 1))) 0 0);
654
+ --fui-color-accent-hover: oklch(from var(--fui-seed-brand) clamp(0.52, calc(l + 0.07), 0.90) min(c, 0.12) h);
655
+ --fui-color-accent-active: oklch(from var(--fui-seed-brand) clamp(0.40, calc(l - 0.05), 0.80) min(c, 0.12) h);
641
656
  --fui-color-danger-bg: color-mix(in oklch, var(--fui-seed-danger) 15%, transparent);
642
657
  --fui-color-success-bg: color-mix(in oklch, var(--fui-seed-success) 15%, transparent);
643
658
  --fui-color-warning-bg: color-mix(in oklch, var(--fui-seed-warning) 15%, transparent);
644
659
  --fui-color-info-bg: color-mix(in oklch, var(--fui-seed-info) 15%, transparent);
645
- --fui-focus-ring-color: oklch(from var(--fui-seed-brand) clamp(0.88, calc(1 - l + 0.1), 0.96) min(c, 0.05) h);
660
+ --fui-focus-ring-color: var(--fui-seed-brand);
646
661
  }
647
662
  }
648
663
 
@@ -717,8 +732,9 @@ $fui-dark-tooltip-shadow:
717
732
 
718
733
  // Private mixin for dark mode token values
719
734
  @mixin _fui-dark-tokens {
720
- // Accent colors invert for dark mode (light on dark)
735
+ // Accent colors brand used directly; on-accent handles text contrast
721
736
  --fui-color-accent: #{$fui-dark-color-accent};
737
+ --fui-color-on-accent: #{$fui-dark-color-on-accent};
722
738
  --fui-color-accent-hover: #{$fui-dark-color-accent-hover};
723
739
  --fui-color-accent-active: #{$fui-dark-color-accent-active};
724
740
 
@@ -13,7 +13,7 @@
13
13
  // Types
14
14
  // ============================================
15
15
 
16
- export type NeutralPalette = 'stone' | 'ice' | 'sand' | 'earth' | 'fire';
16
+ export type NeutralPalette = 'stone' | 'ice' | 'sand' | 'earth' | 'fire' | 'fragments';
17
17
  export type DensityPreset = 'compact' | 'default' | 'relaxed';
18
18
  export type RadiusStyle = 'sharp' | 'subtle' | 'default' | 'rounded' | 'pill';
19
19
 
@@ -128,6 +128,21 @@ export const PALETTES: Record<NeutralPalette, PaletteShades> = {
128
128
  900: '#1c100a', // Darkened and desaturated for dark mode
129
129
  950: '#120a06', // Very dark warm gray for dark mode bg
130
130
  },
131
+ // Fragments - Rich saturated green tones (the Fragments brand palette)
132
+ // Dark shades anchor to the Fragments marketing aesthetic
133
+ fragments: {
134
+ 50: '#f0f7f3',
135
+ 100: '#dceee3',
136
+ 200: '#b8ddc6',
137
+ 300: '#88c5a0',
138
+ 400: '#5aaa7a',
139
+ 500: '#3d8f60',
140
+ 600: '#2d7049',
141
+ 700: '#235536',
142
+ 800: '#1a3025', // Dark card surface
143
+ 900: '#142318', // Dark surface
144
+ 950: '#0d1f17', // Darkest bg
145
+ },
131
146
  };
132
147
 
133
148
  // ============================================
@@ -181,6 +196,13 @@ export const PALETTE_SEMANTIC_COLORS: Record<NeutralPalette, SemanticColors> = {
181
196
  danger: '#dc2626', // Red 600 (complements orange)
182
197
  info: '#2563eb', // Blue 600
183
198
  },
199
+ // Fragments - Brand-complementary semantic colors
200
+ fragments: {
201
+ success: '#39d98a', // Vibrant green (brand signature)
202
+ warning: '#f59e0b', // Amber 500
203
+ danger: '#ef4444', // Red 500
204
+ info: '#3b82f6', // Blue 500
205
+ },
184
206
  };
185
207
 
186
208
  /**