@felloinnovations/brand-kit 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/AGENTS.md +198 -24
  2. package/CHANGELOG.md +221 -0
  3. package/README.md +38 -9
  4. package/design-system/01-how-claude-decides.md +26 -17
  5. package/design-system/02-principles.md +11 -6
  6. package/design-system/03-colour.md +135 -47
  7. package/design-system/04-type.md +45 -23
  8. package/design-system/05-space-and-layout.md +175 -52
  9. package/design-system/06-sizing-profiles.md +4 -4
  10. package/design-system/07-scrolling.md +66 -20
  11. package/design-system/08-choosing-components.md +50 -22
  12. package/design-system/09-charts.md +71 -28
  13. package/design-system/10-patterns.md +33 -10
  14. package/design-system/11-page-recipes.md +110 -23
  15. package/design-system/12-content.md +2 -1
  16. package/design-system/13-motion.md +330 -47
  17. package/design-system/14-accessibility.md +47 -24
  18. package/design-system/15-ai-experiences.md +11 -6
  19. package/design-system/16-creativity.md +1 -1
  20. package/design-system/17-decisions.md +367 -1
  21. package/design-system/18-checklist.md +79 -16
  22. package/design-system/19-public-pages.md +6 -4
  23. package/design-system/20-palettes.md +275 -0
  24. package/design-system/README.md +30 -17
  25. package/design-system/components/ActionList/README.md +96 -10
  26. package/design-system/components/ActionList/preview.html +52 -7
  27. package/design-system/components/ActionList/style.css +64 -0
  28. package/design-system/components/ActivityGrid/README.md +38 -2
  29. package/design-system/components/ActivityGrid/preview.html +1 -1
  30. package/design-system/components/ActivityGrid/style.css +35 -0
  31. package/design-system/components/AppShell/README.md +205 -75
  32. package/design-system/components/AppShell/preview.html +339 -58
  33. package/design-system/components/AppShell/style.css +154 -0
  34. package/design-system/components/Avatar/README.md +37 -10
  35. package/design-system/components/Avatar/preview.html +13 -4
  36. package/design-system/components/Avatar/style.css +14 -0
  37. package/design-system/components/Badge/README.md +41 -19
  38. package/design-system/components/Badge/preview.html +13 -10
  39. package/design-system/components/Badge/style.css +23 -0
  40. package/design-system/components/Banner/README.md +30 -9
  41. package/design-system/components/Banner/preview.html +1 -1
  42. package/design-system/components/Banner/style.css +19 -0
  43. package/design-system/components/Breadcrumb/README.md +58 -46
  44. package/design-system/components/Breadcrumb/preview.html +16 -16
  45. package/design-system/components/Breadcrumb/style.css +17 -0
  46. package/design-system/components/Button/README.md +113 -55
  47. package/design-system/components/Button/preview.html +98 -25
  48. package/design-system/components/Button/style.css +86 -0
  49. package/design-system/components/Card/README.md +158 -49
  50. package/design-system/components/Card/preview.html +141 -19
  51. package/design-system/components/Card/style.css +115 -0
  52. package/design-system/components/CardBoard/README.md +58 -37
  53. package/design-system/components/CardBoard/preview.html +26 -29
  54. package/design-system/components/ChatCard/README.md +115 -29
  55. package/design-system/components/ChatCard/preview.html +149 -32
  56. package/design-system/components/ChatCard/style.css +49 -0
  57. package/design-system/components/ChatShell/README.md +116 -0
  58. package/design-system/components/ChatShell/preview.html +201 -0
  59. package/design-system/components/ChatShell/style.css +86 -0
  60. package/design-system/components/ChatTurn/README.md +78 -35
  61. package/design-system/components/ChatTurn/preview.html +60 -28
  62. package/design-system/components/ChatTurn/style.css +50 -0
  63. package/design-system/components/CheckRow/README.md +141 -0
  64. package/design-system/components/CheckRow/preview.html +140 -0
  65. package/design-system/components/CheckRow/style.css +88 -0
  66. package/design-system/components/Checkbox/README.md +58 -22
  67. package/design-system/components/Checkbox/preview.html +112 -50
  68. package/design-system/components/Checkbox/style.css +45 -0
  69. package/design-system/components/Chip/README.md +78 -47
  70. package/design-system/components/Chip/preview.html +29 -4
  71. package/design-system/components/Chip/style.css +17 -0
  72. package/design-system/components/Combobox/README.md +44 -11
  73. package/design-system/components/Combobox/preview.html +35 -12
  74. package/design-system/components/Combobox/style.css +54 -0
  75. package/design-system/components/Composer/README.md +137 -35
  76. package/design-system/components/Composer/preview.html +115 -40
  77. package/design-system/components/Composer/style.css +81 -0
  78. package/design-system/components/ConfirmDialog/README.md +73 -52
  79. package/design-system/components/ConfirmDialog/preview.html +70 -26
  80. package/design-system/components/ConfirmDialog/style.css +5 -0
  81. package/design-system/components/Cover/preview.html +3 -3
  82. package/design-system/components/Cover/style.css +19 -0
  83. package/design-system/components/DateInput/README.md +77 -12
  84. package/design-system/components/DateInput/preview.html +27 -12
  85. package/design-system/components/DateInput/style.css +38 -0
  86. package/design-system/components/Dialog/README.md +112 -44
  87. package/design-system/components/Dialog/preview.html +141 -18
  88. package/design-system/components/Dialog/style.css +74 -0
  89. package/design-system/components/EmptyState/README.md +42 -12
  90. package/design-system/components/EmptyState/preview.html +11 -11
  91. package/design-system/components/EmptyState/style.css +9 -0
  92. package/design-system/components/EntryShell/README.md +73 -48
  93. package/design-system/components/EntryShell/preview.html +60 -27
  94. package/design-system/components/EntryShell/style.css +19 -0
  95. package/design-system/components/FeatureGrid/README.md +61 -39
  96. package/design-system/components/FeatureGrid/preview.html +2 -2
  97. package/design-system/components/FeatureGrid/style.css +20 -0
  98. package/design-system/components/FileUpload/README.md +33 -3
  99. package/design-system/components/FileUpload/preview.html +18 -4
  100. package/design-system/components/FileUpload/style.css +23 -0
  101. package/design-system/components/FilterBar/README.md +114 -0
  102. package/design-system/components/FilterBar/preview.html +82 -0
  103. package/design-system/components/FilterBar/style.css +22 -0
  104. package/design-system/components/Fold/README.md +84 -26
  105. package/design-system/components/Fold/preview.html +77 -34
  106. package/design-system/components/Fold/style.css +48 -0
  107. package/design-system/components/Footer/README.md +62 -39
  108. package/design-system/components/Footer/preview.html +5 -5
  109. package/design-system/components/Footer/style.css +30 -0
  110. package/design-system/components/FunnelBars/README.md +24 -3
  111. package/design-system/components/FunnelBars/preview.html +5 -5
  112. package/design-system/components/FunnelBars/style.css +13 -0
  113. package/design-system/components/GoalBars/README.md +54 -10
  114. package/design-system/components/GoalBars/preview.html +69 -28
  115. package/design-system/components/GoalBars/style.css +51 -0
  116. package/design-system/components/GoalTicks/README.md +74 -58
  117. package/design-system/components/GoalTicks/preview.html +41 -118
  118. package/design-system/components/GoalTicks/style.css +37 -0
  119. package/design-system/components/GoalTubes/README.md +29 -3
  120. package/design-system/components/GoalTubes/preview.html +6 -6
  121. package/design-system/components/GoalTubes/style.css +23 -0
  122. package/design-system/components/Heatmap/README.md +133 -0
  123. package/design-system/components/Heatmap/preview.html +168 -0
  124. package/design-system/components/Heatmap/style.css +119 -0
  125. package/design-system/components/Hero/README.md +58 -40
  126. package/design-system/components/Hero/preview.html +1 -1
  127. package/design-system/components/Hero/style.css +19 -0
  128. package/design-system/components/HoverCard/README.md +114 -0
  129. package/design-system/components/HoverCard/preview.html +107 -0
  130. package/design-system/components/HoverCard/style.css +59 -0
  131. package/design-system/components/IconButton/README.md +69 -38
  132. package/design-system/components/IconButton/preview.html +77 -43
  133. package/design-system/components/IconButton/style.css +45 -0
  134. package/design-system/components/Input/README.md +36 -11
  135. package/design-system/components/Input/preview.html +1 -1
  136. package/design-system/components/Input/style.css +23 -0
  137. package/design-system/components/KanbanBoard/README.md +93 -45
  138. package/design-system/components/KanbanBoard/preview.html +159 -43
  139. package/design-system/components/KanbanBoard/style.css +53 -0
  140. package/design-system/components/Kbd/README.md +25 -9
  141. package/design-system/components/Kbd/preview.html +6 -2
  142. package/design-system/components/Kbd/style.css +9 -0
  143. package/design-system/components/KitButton/README.md +81 -47
  144. package/design-system/components/KitButton/preview.html +35 -13
  145. package/design-system/components/KitButton/style.css +46 -0
  146. package/design-system/components/KitCard/README.md +75 -44
  147. package/design-system/components/KitCard/preview.html +18 -10
  148. package/design-system/components/KitCard/style.css +15 -0
  149. package/design-system/components/KitInput/README.md +54 -39
  150. package/design-system/components/KitInput/preview.html +7 -7
  151. package/design-system/components/KitInput/style.css +23 -0
  152. package/design-system/components/Leaderboard/README.md +76 -49
  153. package/design-system/components/Leaderboard/preview.html +61 -26
  154. package/design-system/components/Leaderboard/style.css +44 -0
  155. package/design-system/components/ListDetail/README.md +222 -0
  156. package/design-system/components/ListDetail/preview.html +213 -0
  157. package/design-system/components/ListDetail/style.css +148 -0
  158. package/design-system/components/LoadBar/README.md +79 -0
  159. package/design-system/components/LoadBar/preview.html +40 -0
  160. package/design-system/components/LoadBar/style.css +17 -0
  161. package/design-system/components/MarketingNav/README.md +76 -42
  162. package/design-system/components/MarketingNav/preview.html +37 -8
  163. package/design-system/components/MarketingNav/style.css +45 -0
  164. package/design-system/components/Matrix/README.md +129 -0
  165. package/design-system/components/Matrix/preview.html +99 -0
  166. package/design-system/components/Matrix/style.css +84 -0
  167. package/design-system/components/Menu/README.md +117 -41
  168. package/design-system/components/Menu/preview.html +85 -23
  169. package/design-system/components/Menu/style.css +61 -0
  170. package/design-system/components/Meter/README.md +39 -4
  171. package/design-system/components/Meter/preview.html +18 -1
  172. package/design-system/components/Meter/style.css +23 -0
  173. package/design-system/components/MetricTile/README.md +237 -0
  174. package/design-system/components/MetricTile/preview.html +241 -0
  175. package/design-system/components/MetricTile/style.css +129 -0
  176. package/design-system/components/Morph/README.md +106 -0
  177. package/design-system/components/Morph/preview.html +103 -0
  178. package/design-system/components/Morph/style.css +31 -0
  179. package/design-system/components/Motion/README.md +164 -0
  180. package/design-system/components/Motion/preview.html +2537 -0
  181. package/design-system/components/NumberInput/README.md +27 -8
  182. package/design-system/components/NumberInput/preview.html +21 -5
  183. package/design-system/components/NumberInput/style.css +34 -0
  184. package/design-system/components/PaceBar/README.md +75 -0
  185. package/design-system/components/PaceBar/preview.html +67 -0
  186. package/design-system/components/PaceBar/style.css +25 -0
  187. package/design-system/components/Page/README.md +57 -18
  188. package/design-system/components/Page/preview.html +15 -17
  189. package/design-system/components/Page/style.css +7 -0
  190. package/design-system/components/PageBar/README.md +90 -34
  191. package/design-system/components/PageBar/preview.html +60 -19
  192. package/design-system/components/PageBar/style.css +35 -0
  193. package/design-system/components/PageHero/README.md +87 -51
  194. package/design-system/components/PageHero/preview.html +35 -6
  195. package/design-system/components/PageHero/style.css +31 -0
  196. package/design-system/components/Pagination/README.md +70 -49
  197. package/design-system/components/Pagination/preview.html +24 -15
  198. package/design-system/components/Pagination/style.css +12 -0
  199. package/design-system/components/Panel/README.md +109 -51
  200. package/design-system/components/Panel/preview.html +118 -20
  201. package/design-system/components/Panel/style.css +51 -0
  202. package/design-system/components/PasswordInput/README.md +50 -18
  203. package/design-system/components/PasswordInput/preview.html +71 -21
  204. package/design-system/components/PasswordInput/style.css +31 -0
  205. package/design-system/components/Plate/README.md +75 -17
  206. package/design-system/components/Plate/preview.html +40 -7
  207. package/design-system/components/Plate/style.css +37 -0
  208. package/design-system/components/Popover/README.md +70 -49
  209. package/design-system/components/Popover/preview.html +44 -22
  210. package/design-system/components/Popover/style.css +41 -0
  211. package/design-system/components/PricingTable/README.md +69 -49
  212. package/design-system/components/PricingTable/preview.html +21 -21
  213. package/design-system/components/PricingTable/style.css +21 -0
  214. package/design-system/components/ProgressPetals/README.md +31 -3
  215. package/design-system/components/ProgressPetals/preview.html +14 -15
  216. package/design-system/components/ProgressPetals/style.css +27 -0
  217. package/design-system/components/README.md +151 -0
  218. package/design-system/components/Radio/README.md +40 -17
  219. package/design-system/components/Radio/preview.html +16 -1
  220. package/design-system/components/Radio/style.css +21 -0
  221. package/design-system/components/RankBar/README.md +29 -2
  222. package/design-system/components/RankBar/preview.html +14 -12
  223. package/design-system/components/RankBar/style.css +18 -0
  224. package/design-system/components/Ring/README.md +61 -11
  225. package/design-system/components/Ring/preview.html +55 -10
  226. package/design-system/components/Ring/style.css +49 -0
  227. package/design-system/components/ScoreHero/README.md +91 -0
  228. package/design-system/components/ScoreHero/preview.html +104 -0
  229. package/design-system/components/ScoreHero/style.css +32 -0
  230. package/design-system/components/Section/README.md +72 -33
  231. package/design-system/components/Section/preview.html +46 -16
  232. package/design-system/components/Section/style.css +18 -0
  233. package/design-system/components/Segmented/README.md +100 -55
  234. package/design-system/components/Segmented/preview.html +107 -26
  235. package/design-system/components/Segmented/style.css +94 -0
  236. package/design-system/components/SegmentedProgress/README.md +64 -0
  237. package/design-system/components/SegmentedProgress/preview.html +69 -0
  238. package/design-system/components/SegmentedProgress/style.css +11 -0
  239. package/design-system/components/Select/README.md +47 -12
  240. package/design-system/components/Select/preview.html +28 -2
  241. package/design-system/components/Select/style.css +22 -0
  242. package/design-system/components/ShareBar/README.md +69 -0
  243. package/design-system/components/ShareBar/preview.html +72 -0
  244. package/design-system/components/ShareBar/style.css +25 -0
  245. package/design-system/components/SideList/README.md +147 -0
  246. package/design-system/components/SideList/preview.html +139 -0
  247. package/design-system/components/SideList/style.css +94 -0
  248. package/design-system/components/Skeleton/README.md +53 -16
  249. package/design-system/components/Skeleton/preview.html +35 -23
  250. package/design-system/components/Skeleton/style.css +17 -0
  251. package/design-system/components/Slider/README.md +95 -0
  252. package/design-system/components/Slider/preview.html +49 -0
  253. package/design-system/components/Slider/style.css +13 -0
  254. package/design-system/components/Split/README.md +112 -0
  255. package/design-system/components/Split/preview.html +105 -0
  256. package/design-system/components/Split/style.css +30 -0
  257. package/design-system/components/Starter/README.md +21 -9
  258. package/design-system/components/Starter/preview.html +5 -5
  259. package/design-system/components/Stat/README.md +64 -43
  260. package/design-system/components/Stat/preview.html +3 -3
  261. package/design-system/components/Stat/style.css +15 -0
  262. package/design-system/components/StatTiles/README.md +88 -44
  263. package/design-system/components/StatTiles/preview.html +142 -71
  264. package/design-system/components/StatTiles/style.css +64 -0
  265. package/design-system/components/StatusLine/README.md +85 -0
  266. package/design-system/components/StatusLine/preview.html +49 -0
  267. package/design-system/components/StatusLine/style.css +14 -0
  268. package/design-system/components/StatusScreen/README.md +49 -35
  269. package/design-system/components/StatusScreen/preview.html +20 -5
  270. package/design-system/components/StatusScreen/style.css +9 -0
  271. package/design-system/components/StepLine/README.md +97 -0
  272. package/design-system/components/StepLine/preview.html +108 -0
  273. package/design-system/components/StepLine/style.css +62 -0
  274. package/design-system/components/Stepper/README.md +35 -13
  275. package/design-system/components/Stepper/style.css +13 -0
  276. package/design-system/components/StreakCalendar/README.md +22 -1
  277. package/design-system/components/StreakCalendar/preview.html +10 -10
  278. package/design-system/components/StreakCalendar/style.css +12 -0
  279. package/design-system/components/SuggestionChip/README.md +87 -0
  280. package/design-system/components/SuggestionChip/preview.html +42 -0
  281. package/design-system/components/SuggestionChip/style.css +20 -0
  282. package/design-system/components/Switch/README.md +44 -24
  283. package/design-system/components/Switch/preview.html +23 -8
  284. package/design-system/components/Switch/style.css +31 -0
  285. package/design-system/components/Table/README.md +129 -58
  286. package/design-system/components/Table/preview.html +106 -72
  287. package/design-system/components/Table/style.css +104 -0
  288. package/design-system/components/Tabs/README.md +71 -46
  289. package/design-system/components/Tabs/preview.html +56 -24
  290. package/design-system/components/Tabs/style.css +44 -0
  291. package/design-system/components/Testimonial/README.md +48 -32
  292. package/design-system/components/Testimonial/preview.html +14 -14
  293. package/design-system/components/Testimonial/style.css +12 -0
  294. package/design-system/components/TextArea/README.md +27 -11
  295. package/design-system/components/TextArea/preview.html +8 -2
  296. package/design-system/components/TextArea/style.css +12 -0
  297. package/design-system/components/ThemeSwitch/README.md +116 -0
  298. package/design-system/components/ThemeSwitch/preview.html +57 -0
  299. package/design-system/components/ThemeSwitch/style.css +6 -0
  300. package/design-system/components/TickRow/README.md +52 -36
  301. package/design-system/components/TickRow/preview.html +64 -41
  302. package/design-system/components/TickRow/style.css +23 -0
  303. package/design-system/components/TickStrip/README.md +95 -0
  304. package/design-system/components/TickStrip/preview.html +88 -0
  305. package/design-system/components/TickStrip/style.css +42 -0
  306. package/design-system/components/Tile/README.md +79 -18
  307. package/design-system/components/Tile/preview.html +91 -40
  308. package/design-system/components/Tile/style.css +36 -0
  309. package/design-system/components/Timeline/README.md +68 -48
  310. package/design-system/components/Timeline/preview.html +27 -15
  311. package/design-system/components/Timeline/style.css +25 -0
  312. package/design-system/components/Toast/README.md +70 -38
  313. package/design-system/components/Toast/preview.html +43 -8
  314. package/design-system/components/Toast/style.css +25 -0
  315. package/design-system/components/Tooltip/README.md +93 -35
  316. package/design-system/components/Tooltip/preview.html +69 -15
  317. package/design-system/components/Tooltip/style.css +78 -0
  318. package/design-system/components/TopBar/README.md +67 -53
  319. package/design-system/components/TopBar/preview.html +14 -27
  320. package/design-system/components/TopBar/style.css +35 -0
  321. package/design-system/components/TopicRail/README.md +108 -0
  322. package/design-system/components/TopicRail/preview.html +58 -0
  323. package/design-system/components/TopicRail/style.css +48 -0
  324. package/design-system/components/TrendBars/README.md +52 -14
  325. package/design-system/components/TrendBars/preview.html +65 -32
  326. package/design-system/components/TrendBars/style.css +25 -0
  327. package/design-system/components/TrendLine/README.md +164 -0
  328. package/design-system/components/TrendLine/preview.html +373 -0
  329. package/design-system/components/TrendLine/style.css +155 -0
  330. package/design-system/components/Well/README.md +64 -22
  331. package/design-system/components/Well/preview.html +14 -14
  332. package/design-system/components/Well/style.css +22 -0
  333. package/design-system/components/_house.css +324 -0
  334. package/design-system/components/bundle.css +4086 -744
  335. package/design-system/tokens.json +1310 -124
  336. package/dist/fello-core.css +2 -2
  337. package/dist/fello.css +6 -1369
  338. package/dist/fello.scoped.css +7 -0
  339. package/dist/index.d.ts +109 -10
  340. package/dist/index.js +781 -96
  341. package/dist/palettes.d.ts +464 -0
  342. package/dist/palettes.js +497 -0
  343. package/dist/scoped.d.ts +3 -0
  344. package/dist/scoped.js +16 -0
  345. package/dist/toast.d.ts +14 -0
  346. package/dist/toast.js +33 -29
  347. package/dist/tokens.d.ts +1686 -62
  348. package/dist/tokens.js +1668 -61
  349. package/package.json +20 -4
  350. package/scripts/check-palette.mjs +295 -0
  351. package/scripts/token-model.mjs +552 -0
  352. package/tokens/_dark.css +173 -0
  353. package/tokens/_palettes.css +46 -0
  354. package/tokens/_product.css +266 -53
  355. package/tokens/_source.hubl.css +39 -19
  356. package/tokens/design-tokens.json +319 -0
  357. package/tokens/palettes.ts +504 -0
  358. package/tokens/shadcn-compat.css +19 -19
  359. package/tokens/shadcn-compat.hsl.css +76 -0
  360. package/tokens/tokens.css +1287 -62
  361. package/tokens/tokens.md +587 -61
  362. package/tokens/tokens.root.css +1293 -62
  363. package/tokens/tokens.ts +1677 -64
@@ -3,21 +3,29 @@
3
3
  "version": 1,
4
4
  "meta": {
5
5
  "source": "code",
6
- "repo": "@felloinnovations/brand-kit 0.4.0: tokens/_source.hubl.css (the kit) and tokens/_product.css (the product layer)",
7
- "note": "Generated by scripts/generate-tokens.mjs (yarn tokens): every value and the token list come from tokens/; the usage notes, the order and the type groups are kept from this file, so edit a note here and a value there. Kit tokens keep the kit's names (color-*, font-size-*, space-*, radius-*, shadow-*). The product layer keeps its ws-* names. A var(), calc() or color-mix() is written as the literal it resolves to, with the formula at the end of its usage note. A gradient cannot be held here, so these are in tokens.css and fello.css only: --gradient-ai, --gradient-scrim-dropdown, --gradient-btn-primary, --ws-team-glow, --ws-cool-glow."
6
+ "repo": "@felloinnovations/brand-kit 0.5.1: tokens/_source.hubl.css (the kit), tokens/_product.css (the product layer) and tokens/_dark.css (the dark theme)",
7
+ "note": "Generated by scripts/generate-tokens.mjs (yarn tokens): every value and the token list come from tokens/; the usage notes, the order and the type groups are kept from this file, so edit a note here and a value there. Kit tokens keep the kit's names (color-*, font-size-*, space-*, radius-*, shadow-*). The product layer keeps its ws-* names. A var(), calc() or color-mix() is written as the literal it resolves to, with the formula at the end of its usage note. A colour the dark theme changes has a value per theme: light, dark (data-theme=\"dark\") and navy (data-ground=\"navy\"). A gradient or a set of colour channels cannot be held here, so these are in tokens.css and fello.css only: --gradient-ai, --gradient-scrim-dropdown, --gradient-btn-primary, --ws-ink-rgb, --ws-shade-rgb, --ws-frame, --ws-stage-wash, --ws-shimmer, --ws-team-glow, --ws-cool-glow, --ws-orb."
8
8
  },
9
9
  "color": {
10
10
  "themes": [
11
11
  {
12
12
  "id": "light",
13
13
  "name": "Light"
14
+ },
15
+ {
16
+ "id": "dark",
17
+ "name": "Dark (night)"
18
+ },
19
+ {
20
+ "id": "navy",
21
+ "name": "Dark, navy ground"
14
22
  }
15
23
  ],
16
24
  "tokens": [
17
25
  {
18
26
  "name": "color-brand-salmon",
19
27
  "value": "#ff725c",
20
- "usage": "The brand's salmon. A data tone and small marks only: a needs-you dot, a count badge's tint, the focus halo. Never a button, a wash, a card or a strip. 2.6:1 on the cream: never words (use ws-word-needs)."
28
+ "usage": "The brand's salmon. A data tone and small marks only: a needs-you dot, a count badge's tint. Never a button, a wash, a card or a strip. 2.6:1 on the cream: never words (use ws-word-needs)."
21
29
  },
22
30
  {
23
31
  "name": "color-brand-navy",
@@ -59,6 +67,15 @@
59
67
  "value": "#ffffff",
60
68
  "usage": "White. A field while typing (ws-field), words on navy, the tab thumb's words, a well's row under the pointer. Not a card (cards are the cream)."
61
69
  },
70
+ {
71
+ "name": "color-surface",
72
+ "value": {
73
+ "light": "#ffffff",
74
+ "dark": "#131e28",
75
+ "navy": "#0f253c"
76
+ },
77
+ "usage": "What white is for: a marketing card, a well row under the pointer, the current AppShell mark. White in light; it swaps in dark, where white itself stays white. (CSS: var(--color-white))"
78
+ },
62
79
  {
63
80
  "name": "color-gray-1",
64
81
  "value": "#f9f9f9",
@@ -66,7 +83,7 @@
66
83
  },
67
84
  {
68
85
  "name": "color-surface-stripe",
69
- "value": "#f7f4f4",
86
+ "value": "{ws-tint-accent}",
70
87
  "usage": "Stripe. A faint accent tint behind a row (ws-tint-accent)."
71
88
  },
72
89
  {
@@ -106,8 +123,12 @@
106
123
  },
107
124
  {
108
125
  "name": "color-text-primary",
109
- "value": "#353e5a",
110
- "usage": "Kit marketing body colour. Marketing pages only; the product's body is color-text-body."
126
+ "value": {
127
+ "light": "#353e5a",
128
+ "dark": "#ced6df",
129
+ "navy": "#ededed"
130
+ },
131
+ "usage": "Kit marketing body colour. Marketing pages only; the product's body is color-text-body. (CSS: color-mix(in srgb, var(--color-text-heading) 50%, #61475f))"
111
132
  },
112
133
  {
113
134
  "name": "color-ai-cyan",
@@ -136,87 +157,143 @@
136
157
  },
137
158
  {
138
159
  "name": "color-dropdown-bg",
139
- "value": "#fcfaf9",
160
+ "value": {
161
+ "light": "#fcfaf9",
162
+ "dark": "#16222d",
163
+ "navy": "#162c42"
164
+ },
140
165
  "usage": "Kit dropdown ground. The product's menus use the cream (ws-menu)."
141
166
  },
142
167
  {
143
168
  "name": "color-feedback-error",
144
- "value": "#ef6b51",
145
- "usage": "Kit error (PROVISIONAL in the kit). 2.9:1 on the cream: never words. A field's error border only; the error's words are ws-word-needs."
169
+ "value": {
170
+ "light": "#ef6b51",
171
+ "dark": "#ff7d63",
172
+ "navy": "#ff7d63"
173
+ },
174
+ "usage": "Kit error (PROVISIONAL in the kit). 2.9:1 on the cream: never words. A field's error border only; the error's words are ws-word-needs. (CSS: color-mix(in srgb, var(--ws-chart-under-half) 87.5%, #7f3a04))"
146
175
  },
147
176
  {
148
177
  "name": "color-feedback-success-text",
149
- "value": "#4f7d24",
178
+ "value": {
179
+ "light": "#4f7d24",
180
+ "dark": "#9bcf72",
181
+ "navy": "#9bcf72"
182
+ },
150
183
  "usage": "Kit success text (PROVISIONAL). Not used in the product; good news in words is ws-word-positive."
151
184
  },
152
185
  {
153
186
  "name": "color-feedback-success-bg",
154
- "value": "#cde3cc",
155
- "usage": "Kit success ground (PROVISIONAL). Not used in the product; a done tint is ws-tint-live."
187
+ "value": {
188
+ "light": "#cde3cc",
189
+ "dark": "#1b2f22",
190
+ "navy": "#1b2f22"
191
+ },
192
+ "usage": "Kit success ground (PROVISIONAL). Not used in the product; a done tint is ws-tint-live. (CSS: color-mix(in srgb, var(--ws-chart-finished) 20%, rgb(254 250.75 221.5)))"
156
193
  },
157
194
  {
158
195
  "name": "color-alert",
159
- "value": "#e90f0f",
196
+ "value": {
197
+ "light": "#e90f0f",
198
+ "dark": "#ff5a5a",
199
+ "navy": "#ff5a5a"
200
+ },
160
201
  "usage": "Kit alert red. Not used in the product: a falling number is mid blue, something to fix is ws-word-needs."
161
202
  },
162
203
  {
163
204
  "name": "color-stat-positive",
164
- "value": "#098486",
165
- "usage": "Teal: done, passed, positive. Bars, rings, dots, a change arrow's mark. 4.4:1 on the cream: words take ws-word-positive."
205
+ "value": {
206
+ "light": "#098486",
207
+ "dark": "#3bb8b2",
208
+ "navy": "#3bb8b2"
209
+ },
210
+ "usage": "Teal: done, passed, positive. Bars, rings, dots, a change arrow's mark. 4.4:1 on the cream: words take ws-word-positive. (CSS: var(--ws-chart-finished))"
166
211
  },
167
212
  {
168
213
  "name": "color-bg-page",
169
- "value": "{color-background}",
214
+ "value": {
215
+ "light": "#fefbf9",
216
+ "dark": "#0f1922",
217
+ "navy": "#021a32"
218
+ },
170
219
  "usage": "The page and every card. The one ground."
171
220
  },
172
221
  {
173
222
  "name": "color-text-heading",
174
- "value": "{color-brand-navy}",
175
- "usage": "Titles, a row's name, figures, the primary button's fill, a quiet act's words."
223
+ "value": {
224
+ "light": "#093555",
225
+ "dark": "#e8edf3",
226
+ "navy": "#ffffff"
227
+ },
228
+ "usage": "Titles, a row's name, figures, the primary button's fill, a quiet act's words. (CSS: var(--color-brand-navy))"
176
229
  },
177
230
  {
178
231
  "name": "color-text-body",
179
- "value": "{color-gray-7}",
180
- "usage": "Body copy, a card's one sentence, rows, a ghost button's words."
232
+ "value": {
233
+ "light": "#545454",
234
+ "dark": "#b0bbc7",
235
+ "navy": "#d3d3d3"
236
+ },
237
+ "usage": "Body copy, a card's one sentence, rows, a ghost button's words. (CSS: var(--color-gray-7))"
181
238
  },
182
239
  {
183
240
  "name": "color-text-muted",
184
- "value": "#6e6e6e",
185
- "usage": "Meta, labels, a band's 'how' line, the eyebrow. The lightest a word may be: 4.95:1 on the cream, 4.5:1 on ws-surface-sunk (kit 0.3.0; it was Gray 6 at 3.9:1)."
241
+ "value": {
242
+ "light": "#666666",
243
+ "dark": "#8494a5",
244
+ "navy": "#a9a9a9"
245
+ },
246
+ "usage": "Meta, labels, a band's 'how' line, the eyebrow. The lightest a word may be: 5.57:1 on the cream, 4.90 on the tray, 4.69 on the grey shell (0.5.0, D2: it was #6E6E6E, 4.36 on the tray; Gray 6 before that)."
186
247
  },
187
248
  {
188
249
  "name": "color-text-brand-strong",
189
- "value": "#b35040",
190
- "usage": "The salmon darkened for words (kit 0.3.0): 4.9:1 on the cream. The product's ws-word-needs is this token: an error under a field, 'Try again', a needs-you chip's words."
250
+ "value": "{ws-word-needs}",
251
+ "usage": "The salmon darkened for words, hue held: 5.45:1 on the cream, 4.80 on the tray, 4.52 on a pressed row (0.5.0, D2). The product's ws-word-needs is this token: an error under a field, 'Try again', a needs-you chip's words."
191
252
  },
192
253
  {
193
254
  "name": "color-text-error-strong",
194
- "value": "#ae4e3b",
195
- "usage": "The kit's error hue darkened until it clears 4.5:1 on its own tint (kit 0.3.0). The kit's error badge words; the product writes errors in ws-word-needs."
255
+ "value": {
256
+ "light": "#a74b39",
257
+ "dark": "#ff8b78",
258
+ "navy": "#ff8b78"
259
+ },
260
+ "usage": "The kit's error hue darkened, hue held, until it clears 4.5:1 on every ground and its own tint (0.5.0). The kit's error badge words; the product writes errors in ws-word-needs. (CSS: color-mix(in srgb, var(--ws-word-needs) 95%, #944b00))"
196
261
  },
197
262
  {
198
263
  "name": "color-text-success-strong",
199
- "value": "#3c601b",
200
- "usage": "The kit's success olive darkened until it clears 4.5:1 on its own tint (kit 0.3.0). The kit's success badge words; the product's good news is ws-word-positive."
264
+ "value": {
265
+ "light": "#3c601b",
266
+ "dark": "#9bcf72",
267
+ "navy": "#9bcf72"
268
+ },
269
+ "usage": "The kit's success olive darkened until it clears 4.5:1 on its own tint (kit 0.3.0). The kit's success badge words; the product's good news is ws-word-positive. (CSS: color-mix(in srgb, var(--ws-word-positive) 20%, rgb(72.75 91.74 3.19)))"
201
270
  },
202
271
  {
203
272
  "name": "color-text-placeholder",
204
- "value": "#6e6e6e",
205
- "usage": "A field's placeholder: 4.95:1 on the cream (kit 0.3.0; Gray 5 was 2.3:1). A placeholder is never the only label."
273
+ "value": {
274
+ "light": "#6e6e6e",
275
+ "dark": "#8494a5",
276
+ "navy": "#8494a5"
277
+ },
278
+ "usage": "A field's placeholder: 5.10:1 on the white field (kit 0.3.0; Gray 5 was 2.3:1). A placeholder is never the only label. (CSS: color-mix(in srgb, var(--color-text-muted) 93.75%, #e6e6e6))"
206
279
  },
207
280
  {
208
281
  "name": "color-text-interactive",
209
- "value": "{color-brand-mid-blue}",
210
- "usage": "Links, a link button's words, a falling number, a field's focus edge."
282
+ "value": {
283
+ "light": "#495883",
284
+ "dark": "#93a6dc",
285
+ "navy": "#93a6dc"
286
+ },
287
+ "usage": "Links, a link button's words, a falling number, a field's focus edge. (CSS: var(--color-brand-mid-blue))"
211
288
  },
212
289
  {
213
290
  "name": "color-border-default",
214
- "value": "{color-gray-stroke}",
291
+ "value": "{ws-edge}",
215
292
  "usage": "A hairline between surfaces, the stage's edge (ws-edge)."
216
293
  },
217
294
  {
218
295
  "name": "color-border-hairline",
219
- "value": "{color-gray-3}",
296
+ "value": "{ws-edge-card}",
220
297
  "usage": "A card's or field's edge, drawn at ws-hairline."
221
298
  },
222
299
  {
@@ -231,117 +308,445 @@
231
308
  },
232
309
  {
233
310
  "name": "color-nav-hover-bg",
234
- "value": "rgba(73, 88, 131, 0.05)",
235
- "usage": "Kit nav hover (mid blue 5%). The product's sidebar rows use ws-sidebar-hover instead. (CSS: color-mix(in srgb, var(--color-brand-mid-blue) 5%, transparent))"
311
+ "value": {
312
+ "light": "rgba(73, 88, 131, 0.05)",
313
+ "dark": "rgba(232, 237, 243, 0.04)",
314
+ "navy": "rgba(255, 255, 255, 0.04)"
315
+ },
316
+ "usage": "Kit nav hover (mid blue 5%). The product's sidebar rows use ws-sidebar-hover instead. (CSS: color-mix(in srgb, var(--color-text-interactive) 5%, transparent))"
236
317
  },
237
318
  {
238
319
  "name": "ws-page",
239
- "value": "{color-gray-stroke}",
240
- "usage": "The grey around the stage: the window behind the one surface."
320
+ "value": {
321
+ "light": "#e8e8e8",
322
+ "dark": "#0a1118",
323
+ "navy": "#021a32"
324
+ },
325
+ "usage": "The grey around the stage: the window behind the one surface. (CSS: color-mix(in srgb, var(--ws-tray) 97.5%, #252525))"
241
326
  },
242
327
  {
243
328
  "name": "ws-surface-sunk",
244
- "value": "#f3f1ef",
329
+ "value": {
330
+ "light": "#f3f1ef",
331
+ "dark": "#17232e",
332
+ "navy": "#1b3147"
333
+ },
245
334
  "usage": "A plate, a track, a strip, a row under the pointer, the person's chat bubble: the cream 95% with gray-8. Ground for color-text-body and heading words. (CSS: color-mix(in srgb, var(--color-bg-page) 95%, var(--color-gray-8)))"
246
335
  },
247
336
  {
248
337
  "name": "ws-surface-press",
249
- "value": "#e9e6e4",
338
+ "value": {
339
+ "light": "#e9e6e4",
340
+ "dark": "#1e2b38",
341
+ "navy": "#2a3f53"
342
+ },
250
343
  "usage": "A row or card under a press (the cream 90% with gray-8), so a tap answers on touch where hover never shows. (CSS: color-mix(in srgb, var(--color-bg-page) 90%, var(--color-gray-8)))"
251
344
  },
345
+ {
346
+ "name": "ws-raised-sunk",
347
+ "value": {
348
+ "light": "#f3f1ef",
349
+ "dark": "#1e2b38",
350
+ "navy": "#2a3f53"
351
+ },
352
+ "usage": "Something sunk inside a raised surface (an active option, a range band, a disabled field in a menu, a picker, a dialog, a panel): the house sunk in light, the press step in dark, where the page sunk is 1/255 off raised. The house points --ws-surface-sunk at it inside .ws-menu, .ws-popover, .ws-dialog and .ws-panel. (CSS: var(--ws-surface-sunk))"
353
+ },
252
354
  {
253
355
  "name": "ws-sidebar-hover",
254
- "value": "#f0f0f0",
255
- "usage": "A sidebar row under the pointer (gray-2 85% with white). (CSS: color-mix(in srgb, var(--color-gray-2) 85%, var(--color-white)))"
356
+ "value": {
357
+ "light": "#f0f0f0",
358
+ "dark": "#121c25",
359
+ "navy": "#11283e"
360
+ },
361
+ "usage": "A sidebar row under the pointer (gray-2 85% with white). (CSS: color-mix(in srgb, var(--ws-tray) 85%, var(--color-surface)))"
256
362
  },
257
363
  {
258
364
  "name": "ws-sidebar-press",
259
- "value": "{color-gray-2}",
260
- "usage": "A sidebar row under a press."
365
+ "value": {
366
+ "light": "#ededed",
367
+ "dark": "#17222d",
368
+ "navy": "#1b3147"
369
+ },
370
+ "usage": "A sidebar row under a press. (CSS: var(--ws-tray))"
261
371
  },
262
372
  {
263
373
  "name": "ws-menu-line",
264
- "value": "#e2e0de",
374
+ "value": {
375
+ "light": "#e2e0de",
376
+ "dark": "#223040",
377
+ "navy": "rgba(255, 255, 255, 0.18)"
378
+ },
265
379
  "usage": "The hairline between a menu's groups (the cream 87% with gray-8). (CSS: color-mix(in srgb, var(--color-bg-page) 87%, var(--color-gray-8)))"
266
380
  },
267
381
  {
268
382
  "name": "ws-menu-hover",
269
- "value": "#f5f3f1",
383
+ "value": {
384
+ "light": "#f5f3f1",
385
+ "dark": "#1e2b38",
386
+ "navy": "#20354b"
387
+ },
270
388
  "usage": "A menu row under the pointer (the cream 96% with gray-8). (CSS: color-mix(in srgb, var(--color-bg-page) 96%, var(--color-gray-8)))"
271
389
  },
272
390
  {
273
391
  "name": "ws-well",
274
- "value": "{color-gray-2}",
275
- "usage": "The grey well: the plate behind a list of 48 px cream rows (a list of things to ask or start)."
392
+ "value": {
393
+ "light": "#ededed",
394
+ "dark": "#0b141c",
395
+ "navy": "#11283e"
396
+ },
397
+ "usage": "The grey well: the plate behind a list of 48 px cream rows (a list of things to ask or start). (CSS: var(--ws-tray))"
276
398
  },
277
399
  {
278
400
  "name": "ws-field",
279
- "value": "{color-white}",
280
- "usage": "Every field's ground (Input, Select, TextArea), so a field reads as a field on a cream card."
401
+ "value": {
402
+ "light": "#ffffff",
403
+ "dark": "#0b141c",
404
+ "navy": "#ffffff"
405
+ },
406
+ "usage": "Every field's ground (Input, Select, TextArea), so a field reads as a field on a cream card. (CSS: var(--color-surface))"
407
+ },
408
+ {
409
+ "name": "ws-field-ink",
410
+ "value": {
411
+ "light": "#292929",
412
+ "dark": "#e1e7ee",
413
+ "navy": "#093555"
414
+ },
415
+ "usage": "A field's words. Grey 8 in light, light grey in dark, navy on the navy ground's white field. (CSS: color-mix(in srgb, var(--color-text-body) 46.25%, #040404))"
416
+ },
417
+ {
418
+ "name": "ws-field-mark",
419
+ "value": {
420
+ "light": "#093555",
421
+ "navy": "#093555",
422
+ "dark": "#e8edf3"
423
+ },
424
+ "usage": "A field's marks: the Select and Combobox chevron, the DateInput calendar, the PasswordInput eye, the NumberInput steppers. The heading navy (light in dark); the field's own ink on the navy ground, whose fields are white. (CSS: var(--color-text-heading))"
425
+ },
426
+ {
427
+ "name": "ws-on-act",
428
+ "value": {
429
+ "light": "#ffffff",
430
+ "dark": "#0f1922",
431
+ "navy": "#021a32"
432
+ },
433
+ "usage": "Words and marks on the act fill (color-text-heading): the primary button, a pressed or chosen item, a checked box's tick, an on switch's thumb. White in light, the stage in dark. (CSS: var(--color-white))"
434
+ },
435
+ {
436
+ "name": "ws-inverse",
437
+ "value": {
438
+ "light": "#093555",
439
+ "dark": "#093555",
440
+ "navy": "#093555"
441
+ },
442
+ "usage": "A message on the act's own ground: a toast, a note tip, the site footer. The act fill in light; the brand navy in dark (with white words, a brand pair). (CSS: var(--color-text-heading))"
443
+ },
444
+ {
445
+ "name": "ws-on-inverse",
446
+ "value": {
447
+ "light": "#ffffff",
448
+ "dark": "#ffffff",
449
+ "navy": "#ffffff"
450
+ },
451
+ "usage": "Words and marks on --ws-inverse: the words on the act in light, white in dark. (CSS: var(--ws-on-act))"
452
+ },
453
+ {
454
+ "name": "ws-act-hover",
455
+ "value": {
456
+ "light": "#0f4a73",
457
+ "dark": "#d7dce2",
458
+ "navy": "#ebedef"
459
+ },
460
+ "usage": "The navy act a shade brighter under the pointer (North). In dark the light act eases a step toward its words."
461
+ },
462
+ {
463
+ "name": "ws-act-light",
464
+ "value": {
465
+ "light": "rgba(255, 255, 255, 0.24)",
466
+ "dark": "rgba(0, 0, 0, 0)",
467
+ "navy": "rgba(0, 0, 0, 0)"
468
+ },
469
+ "usage": "The soft light under the pointer on the navy act (North); none in dark. (CSS: color-mix(in srgb, var(--ws-on-act) 24%, transparent))"
470
+ },
471
+ {
472
+ "name": "ws-agent-tally",
473
+ "value": {
474
+ "light": "#2c4870",
475
+ "dark": "#e8edf3",
476
+ "navy": "#ffffff"
477
+ },
478
+ "usage": "Seth's agent/tally #2C4870: a softer act, for the figure tabs' current cell, a seat meter's fill, a hatch. Words on it: ws-on-act. The act itself in dark."
479
+ },
480
+ {
481
+ "name": "ws-agent-coach",
482
+ "value": "{color-stat-positive}",
483
+ "usage": "The coaching assistant's one tone, a mark (Seth's agent/coach): the teal. Its words: ws-word-positive."
484
+ },
485
+ {
486
+ "name": "ws-agent-growth",
487
+ "value": "{ws-chart-past-half}",
488
+ "usage": "The growth assistant's one tone, a mark (Seth's agent/growth): the purple. Its words: ws-word-past-half."
489
+ },
490
+ {
491
+ "name": "ws-agent-recruit",
492
+ "value": "{ws-chart-under-half}",
493
+ "usage": "The recruiting assistant's one tone, a mark (Seth's agent/recruit): the salmon. Its words: ws-word-needs."
494
+ },
495
+ {
496
+ "name": "ws-mask",
497
+ "value": "#000",
498
+ "usage": "The opaque stop of a fade or tick mask: only its alpha is read, it never paints."
281
499
  },
282
500
  {
283
501
  "name": "ws-tint-accent",
284
- "value": "{color-surface-stripe}",
285
- "usage": "A faint accent tint behind a row."
502
+ "value": {
503
+ "light": "#f7f4f4",
504
+ "dark": "#131e28",
505
+ "navy": "#11283e"
506
+ },
507
+ "usage": "A faint accent tint behind a row. (CSS: color-mix(in srgb, var(--color-bg-page) 96%, #4f4c7c))"
286
508
  },
287
509
  {
288
510
  "name": "ws-tint-needs",
289
- "value": "#fff1ef",
290
- "usage": "The needs-you chip's and count badge's tint (salmon 10% on white), with ws-word-needs words. A mark, never a wash. (CSS: color-mix(in srgb, var(--color-brand-salmon) 10%, var(--color-white)))"
511
+ "value": {
512
+ "light": "#fff1ef",
513
+ "dark": "#2e252a",
514
+ "navy": "#302a3a"
515
+ },
516
+ "usage": "The needs-you chip's and count badge's tint (salmon 10% on white), with ws-word-needs words. A mark, never a wash. (CSS: color-mix(in srgb, var(--ws-chart-under-half) 10%, var(--color-surface)))"
291
517
  },
292
518
  {
293
519
  "name": "ws-tint-live",
294
- "value": "#e1f0f0",
295
- "usage": "Done, gone well: a live chip's tint (teal 12% on white), with ws-word-positive words. (CSS: color-mix(in srgb, var(--color-stat-positive) 12%, var(--color-white)))"
520
+ "value": {
521
+ "light": "#e1f0f0",
522
+ "dark": "#112a32",
523
+ "navy": "#062d41"
524
+ },
525
+ "usage": "Done, gone well: a live chip's tint (teal 12% on white), with ws-word-positive words. (CSS: color-mix(in srgb, var(--ws-chart-finished) 12%, var(--color-surface)))"
526
+ },
527
+ {
528
+ "name": "ws-tint-needs-work",
529
+ "value": {
530
+ "light": "#fcdfe8",
531
+ "dark": "#382939",
532
+ "navy": "#2d2947"
533
+ },
534
+ "usage": "The 'needs work' tag's ground: the pink at 20% on the cream (Seth 301:1630). Its words are ws-word-needs-work. (CSS: color-mix(in srgb, var(--ws-chart-needs-work) 20%, var(--color-bg-page)))"
296
535
  },
297
536
  {
298
537
  "name": "ws-edge",
299
- "value": "{color-border-default}",
300
- "usage": "The stage's edge and the hairline between surfaces."
538
+ "value": {
539
+ "light": "#e8e8e8",
540
+ "dark": "#1e2a36",
541
+ "navy": "rgba(255, 255, 255, 0.1)"
542
+ },
543
+ "usage": "The stage's edge and the hairline between surfaces. (CSS: var(--color-gray-stroke))"
301
544
  },
302
545
  {
303
546
  "name": "ws-edge-card",
304
- "value": "{color-gray-3}",
305
- "usage": "The 0.5 px edge of a card, a field, a tab track, a secondary button (the designer's border/card)."
547
+ "value": {
548
+ "light": "#d3d3d3",
549
+ "dark": "#273544",
550
+ "navy": "rgba(255, 255, 255, 0.18)"
551
+ },
552
+ "usage": "The 0.5 px edge of a card, a field, a tab track, a secondary button (the designer's border/card). (CSS: var(--color-gray-3))"
553
+ },
554
+ {
555
+ "name": "ws-edge-hover",
556
+ "value": {
557
+ "light": "#aaa49d",
558
+ "dark": "#8494a5",
559
+ "navy": "#a9a9a9"
560
+ },
561
+ "usage": "An outlined control's 0.5 px edge under the pointer (North darkens #d3d3d3 to #aaa49d); the muted words in dark. Hover only, inside (hover: hover)."
562
+ },
563
+ {
564
+ "name": "ws-edge-card-1x",
565
+ "value": {
566
+ "light": "rgba(211, 211, 211, 0.5)",
567
+ "dark": "#273544",
568
+ "navy": "rgba(255, 255, 255, 0.18)"
569
+ },
570
+ "usage": "A card's edge on a screen under 1.5 dppx, where the 0.5 px hairline rounds up to a full pixel: half strength in light; full in dark, where half would vanish. (CSS: color-mix(in srgb, var(--ws-edge-card) 50%, transparent))"
306
571
  },
307
572
  {
308
573
  "name": "ws-edge-chip",
309
- "value": "#d9d5d0",
310
- "usage": "The 0.5 px edge of a chip and a change chip (the designer's border/chip)."
574
+ "value": {
575
+ "light": "#d9d5d0",
576
+ "dark": "#2c3b4b",
577
+ "navy": "rgba(255, 255, 255, 0.18)"
578
+ },
579
+ "usage": "The 0.5 px edge of a chip and a change chip (the designer's border/chip). (CSS: color-mix(in srgb, var(--ws-edge-card) 75%, #ebdbc7))"
311
580
  },
312
581
  {
313
582
  "name": "ws-edge-slot",
314
- "value": "#e2e2e2",
315
- "usage": "A day cell's and an empty tick's fine edge (the designer's border/slot); also ws-chart-cell-edge."
583
+ "value": {
584
+ "light": "#e2e2e2",
585
+ "dark": "#1f2c39",
586
+ "navy": "rgba(255, 255, 255, 0.18)"
587
+ },
588
+ "usage": "A day cell's and an empty tick's fine edge (the designer's border/slot); also ws-chart-cell-edge. (CSS: color-mix(in srgb, var(--ws-edge-card) 62.5%, #fbfbfb))"
316
589
  },
317
590
  {
318
591
  "name": "ws-edge-tray",
319
- "value": "#d9d3cb",
320
- "usage": "The footer band's top edge (the designer's border/tray)."
592
+ "value": {
593
+ "light": "#d9d3cb",
594
+ "dark": "#2c3b4b",
595
+ "navy": "rgba(255, 255, 255, 0.18)"
596
+ },
597
+ "usage": "The footer band's top edge (the designer's border/tray). (CSS: color-mix(in srgb, var(--ws-tray) 84%, rgb(112 74.5 24.5)))"
321
598
  },
322
599
  {
323
600
  "name": "ws-chart-foot",
324
- "value": "#f3f1ef",
601
+ "value": {
602
+ "light": "#f3f1ef",
603
+ "dark": "#0c151d",
604
+ "navy": "#0f253c"
605
+ },
325
606
  "usage": "The footer band's ground under its edge and inset shade (ws-shadow-band). (CSS: color-mix(in srgb, var(--color-bg-page) 95%, var(--color-gray-8)))"
326
607
  },
608
+ {
609
+ "name": "ws-raised",
610
+ "value": {
611
+ "light": "#fefbf9",
612
+ "dark": "#16222d",
613
+ "navy": "#162c42"
614
+ },
615
+ "usage": "A thing lifted off the page: menu, popover, tooltip, dialog, panel, toast. The cream in light; a step up from the stage in dark, since a shadow does not show there. (CSS: var(--color-bg-page))"
616
+ },
617
+ {
618
+ "name": "ws-track",
619
+ "value": {
620
+ "light": "#ededed",
621
+ "dark": "#1a2631",
622
+ "navy": "#20354b"
623
+ },
624
+ "usage": "An empty track: a meter, an upload bar, a password segment, a pending stat, the composer rule. Grey 2 in light. (CSS: var(--ws-tray))"
625
+ },
626
+ {
627
+ "name": "ws-tray",
628
+ "value": {
629
+ "light": "#ededed",
630
+ "dark": "#1e2b38",
631
+ "navy": "#2a3f53"
632
+ },
633
+ "usage": "The tray every product card sits in (D5): it shows as the 1 px rim (ws-rim) around the cream surface, and as the foot under it. Seth's #EDEDED. A word on the foot uses the word tokens, all AA on it. (CSS: var(--color-gray-2))"
634
+ },
635
+ {
636
+ "name": "ws-well-hover",
637
+ "value": {
638
+ "light": "#e4e2df",
639
+ "dark": "#273544",
640
+ "navy": "#273544"
641
+ },
642
+ "usage": "A well card's frame (its tray) under the pointer: North darkens the frame, it never lifts. Seth's value, not a kit colour."
643
+ },
644
+ {
645
+ "name": "ws-frame-top",
646
+ "value": {
647
+ "light": "#ebf0f5",
648
+ "dark": "#0a1118",
649
+ "navy": "#021a32"
650
+ },
651
+ "usage": "The top of the page wash behind a glass stage (Seth's #EBF0F5), fading into the page by 640 px. A palette sets it; dark keeps a flat shell."
652
+ },
653
+ {
654
+ "name": "ws-stage-foot",
655
+ "value": {
656
+ "light": "#fef9f6",
657
+ "dark": "#0f1922",
658
+ "navy": "#021a32"
659
+ },
660
+ "usage": "The foot of a washed stage (Seth's #FEF9F6), whose gradient starts at the page. A palette sets it."
661
+ },
662
+ {
663
+ "name": "ws-glass",
664
+ "value": {
665
+ "light": "rgba(255, 255, 255, 0.59)",
666
+ "dark": "rgba(15, 25, 34, 0.59)",
667
+ "navy": "rgba(2, 26, 50, 0.59)"
668
+ },
669
+ "usage": "The stage glass: white at 59% over the frame wash, with ws-glass-blur behind it (North). In dark the cream page at 59%, a derived interim until Seth draws one. (CSS: color-mix(in srgb, var(--color-surface) 59%, transparent))"
670
+ },
671
+ {
672
+ "name": "ws-edge-stage",
673
+ "value": {
674
+ "light": "#e8e8e8",
675
+ "dark": "#273544",
676
+ "navy": "rgba(255, 255, 255, 0.18)"
677
+ },
678
+ "usage": "The stage's and the chat shell's 1 px edge (North). (CSS: var(--ws-page))"
679
+ },
327
680
  {
328
681
  "name": "ws-word-needs",
329
- "value": "{color-text-brand-strong}",
330
- "usage": "Words that say something needs fixing or you: an error under a field, 'Try again', a needs-you chip's words. The AA step of salmon: 4.9:1 on the cream. Never for marks (they keep the salmon)."
682
+ "value": {
683
+ "light": "#a84b3c",
684
+ "dark": "#ff8b78",
685
+ "navy": "#ff8b78"
686
+ },
687
+ "usage": "Words that say something needs fixing or you: an error under a field, 'Try again', a needs-you chip's words. The AA step of salmon: 5.45:1 on the cream, 4.80 on the tray. Never for marks (they keep the salmon)."
331
688
  },
332
689
  {
333
690
  "name": "ws-word-positive",
334
- "value": "#09787f",
335
- "usage": "Good news in words: 'Passed', a saved form, a rising change chip. The AA step of teal (teal 85% with navy): 5.1:1 on the cream. (CSS: color-mix(in srgb, var(--color-stat-positive) 85%, var(--color-brand-navy)))"
691
+ "value": {
692
+ "light": "#09717a",
693
+ "dark": "#4fc7be",
694
+ "navy": "#4fc7be"
695
+ },
696
+ "usage": "Good news in words: 'Passed', a saved form, a rising change chip. The AA step of teal (teal 76% with navy, 0.5.0): 5.6:1 on the cream, 4.9 on the tray and on its live tint. (CSS: color-mix(in srgb, var(--ws-chart-finished) 76%, var(--color-text-heading)))"
697
+ },
698
+ {
699
+ "name": "ws-word-needs-work",
700
+ "value": {
701
+ "light": "#b42d68",
702
+ "dark": "#f370a4",
703
+ "navy": "#f583b0"
704
+ },
705
+ "usage": "A 'needs work' rating in words, on any ground (D10). Seth draws the words in the pink itself (2.34:1 on the tray); this is the AA step Ignite ships. 5.10 on the tray, 4.80 on its tint. (CSS: color-mix(in srgb, var(--ws-chart-needs-work) 37.5%, rgb(142.2 4.8 68)))"
706
+ },
707
+ {
708
+ "name": "ws-word-alert",
709
+ "value": {
710
+ "light": "#b1042f",
711
+ "navy": "#ff8282",
712
+ "dark": "#ff5470"
713
+ },
714
+ "usage": "Seth's status red in words: a negative number, a down chip, an alert. 6.13 on the tray. (CSS: var(--ws-chart-alert))"
715
+ },
716
+ {
717
+ "name": "ws-word-past-half",
718
+ "value": {
719
+ "light": "#6d4fc2",
720
+ "navy": "#ad9bf1",
721
+ "dark": "#9a84ee"
722
+ },
723
+ "usage": "The purple (Grow, past half) in words. 5.06 on the tray. (CSS: var(--ws-chart-past-half))"
724
+ },
725
+ {
726
+ "name": "ws-word-answer",
727
+ "value": {
728
+ "light": "#3d3d3d",
729
+ "dark": "#c9d1db",
730
+ "navy": "#e9e9e9"
731
+ },
732
+ "usage": "North's answer ink: a chat answer's words, a step softer than the field's. AA on every ground (tokens.md). (CSS: color-mix(in srgb, var(--color-text-body) 71.25%, #040404))"
336
733
  },
337
734
  {
338
735
  "name": "ws-chart-finished",
339
- "value": "{color-stat-positive}",
736
+ "value": {
737
+ "light": "#098486",
738
+ "dark": "#23a8a3",
739
+ "navy": "#23a8a3"
740
+ },
340
741
  "usage": "Chart tone: finished, done, the end of the goal gradient. Marks only."
341
742
  },
342
743
  {
343
744
  "name": "ws-chart-past-half",
344
- "value": "#6d4fc2",
745
+ "value": {
746
+ "light": "#6d4fc2",
747
+ "dark": "#9a84ee",
748
+ "navy": "#9a84ee"
749
+ },
345
750
  "usage": "Chart tone: past halfway, the middle of the goal gradient. The designer's purple (not a kit colour; reported). 5.7:1 on the cream."
346
751
  },
347
752
  {
@@ -351,73 +756,269 @@
351
756
  },
352
757
  {
353
758
  "name": "ws-chart-empty",
354
- "value": "{color-gray-1}",
355
- "usage": "A chart part not yet filled (a bar's track, a ring's backdrop)."
759
+ "value": {
760
+ "light": "#f9f9f9",
761
+ "dark": "#1a2631",
762
+ "navy": "#20354b"
763
+ },
764
+ "usage": "A chart part not yet filled (a bar's track, a ring's backdrop). (CSS: color-mix(in srgb, var(--color-surface) 97.6%, #050505))"
765
+ },
766
+ {
767
+ "name": "ws-chart-rest",
768
+ "value": {
769
+ "light": "#d9d9d9",
770
+ "dark": "#273544",
771
+ "navy": "rgba(255, 255, 255, 0.18)"
772
+ },
773
+ "usage": "Seth's 'what stays' ground under a share bar's parts. (CSS: color-mix(in srgb, var(--ws-tray) 90%, #252525))"
774
+ },
775
+ {
776
+ "name": "ws-ghost",
777
+ "value": {
778
+ "light": "#e3dfdb",
779
+ "dark": "#273544",
780
+ "navy": "#273544"
781
+ },
782
+ "usage": "North's ghost chart shape behind a loading shimmer (Skeleton). (CSS: color-mix(in srgb, var(--ws-well-hover) 98%, #b24c17))"
783
+ },
784
+ {
785
+ "name": "ws-shimmer-ground",
786
+ "value": "{ws-ghost}",
787
+ "usage": "The grey a loading shimmer sweeps over: the ghost grey (ws-ghost), the same at rest and in motion, which shows on the cream and on the tray in every theme. The pass over it is a lighter step of the same grey, never a chart hue (0.5.1)."
356
788
  },
357
789
  {
358
790
  "name": "ws-chart-dot",
359
- "value": "#ebe8e6",
791
+ "value": {
792
+ "light": "#ebe8e6",
793
+ "dark": "#1c2834",
794
+ "navy": "rgba(255, 255, 255, 0.1)"
795
+ },
360
796
  "usage": "The fine dot of the dotted field a drawing sits on (the cream 91% with gray-8), one every 6.5 px. (CSS: color-mix(in srgb, var(--color-bg-page) 91%, var(--color-gray-8)))"
361
797
  },
362
798
  {
363
799
  "name": "ws-chart-navy-light",
364
- "value": "#2e6088",
800
+ "value": {
801
+ "light": "#2e6088",
802
+ "dark": "#6e9cc4",
803
+ "navy": "#6e9cc4"
804
+ },
365
805
  "usage": "A lighter navy for a streak's second tier and a navy bar's top."
366
806
  },
367
807
  {
368
808
  "name": "ws-chart-navy-fade",
369
- "value": "#a8c0d3",
370
- "usage": "The pale end of a navy bar's fade."
809
+ "value": {
810
+ "light": "#a8c0d3",
811
+ "dark": "#31485d",
812
+ "navy": "#4e5f70"
813
+ },
814
+ "usage": "The pale end of a navy bar's fade. (CSS: color-mix(in srgb, var(--ws-chart-navy-light) 20%, rgb(198.5 216 229.75)))"
371
815
  },
372
816
  {
373
817
  "name": "ws-chart-salmon-fade",
374
- "value": "#ffd2c8",
375
- "usage": "The pale end of a salmon bar's fade."
818
+ "value": {
819
+ "light": "#ffd2c8",
820
+ "dark": "#5f3735",
821
+ "navy": "#563740"
822
+ },
823
+ "usage": "The pale end of a salmon bar's fade. (CSS: color-mix(in srgb, var(--ws-chart-under-half) 25%, #fff2ec))"
376
824
  },
377
825
  {
378
826
  "name": "ws-chart-purple-fade",
379
- "value": "#d8ccf6",
380
- "usage": "The pale end of a purple bar's fade."
827
+ "value": {
828
+ "light": "#d8ccf6",
829
+ "dark": "#3b3a62",
830
+ "navy": "#323b6d"
831
+ },
832
+ "usage": "The pale end of a purple bar's fade. (CSS: color-mix(in srgb, var(--ws-chart-past-half) 10%, rgb(227.8888888889 217.8888888889 251.7777777778)))"
381
833
  },
382
834
  {
383
835
  "name": "ws-chart-teal-fade",
384
- "value": "#b0e2dd",
385
- "usage": "The pale end of a teal bar's fade."
836
+ "value": {
837
+ "light": "#b0e2dd",
838
+ "dark": "#154448",
839
+ "navy": "#0c4454"
840
+ },
841
+ "usage": "The pale end of a teal bar's fade. (CSS: color-mix(in srgb, var(--ws-chart-finished) 20%, rgb(217.75 249.5 242.75)))"
386
842
  },
387
843
  {
388
844
  "name": "ws-chart-finished-tint",
389
- "value": "#9fddd6",
390
- "usage": "A teal tint for a ring's outer tracks."
845
+ "value": {
846
+ "light": "#9fddd6",
847
+ "dark": "#164e51",
848
+ "navy": "#0e4e5c"
849
+ },
850
+ "usage": "A teal tint for a ring's outer tracks. (CSS: color-mix(in srgb, var(--ws-chart-finished) 20%, rgb(196.5 243.25 234)))"
391
851
  },
392
852
  {
393
853
  "name": "ws-chart-past-half-tint",
394
- "value": "#cbbdf3",
395
- "usage": "A purple tint for a ring's outer tracks."
854
+ "value": {
855
+ "light": "#cbbdf3",
856
+ "dark": "#3c3b64",
857
+ "navy": "#333c6f"
858
+ },
859
+ "usage": "A purple tint for a ring's outer tracks. (CSS: color-mix(in srgb, var(--ws-chart-past-half) 15%, rgb(219.5882352941 208.4117647059 251.6470588235)))"
396
860
  },
397
861
  {
398
862
  "name": "ws-chart-under-half-tint",
399
- "value": "#f9dfc6",
400
- "usage": "A salmon tint for a ring's outer tracks."
863
+ "value": {
864
+ "light": "#f9dfc6",
865
+ "dark": "#4b3a2b",
866
+ "navy": "#4b3a2b"
867
+ },
868
+ "usage": "A salmon tint for a ring's outer tracks. (CSS: color-mix(in srgb, var(--ws-chart-under-half) 20%, rgb(247.5 250.25 224.5)))"
401
869
  },
402
870
  {
403
871
  "name": "ws-card-tint-blue",
404
- "value": "#edeef3",
405
- "usage": "A working pill on a chat card (mid blue 10% on white). (CSS: color-mix(in srgb, var(--color-brand-mid-blue) 10%, var(--color-white)))"
872
+ "value": {
873
+ "light": "#edeef3",
874
+ "dark": "#1b2637",
875
+ "navy": "#142a46"
876
+ },
877
+ "usage": "A working pill on a chat card (mid blue 10% on white). (CSS: color-mix(in srgb, var(--ws-rating-middle) 10%, var(--color-surface)))"
406
878
  },
407
879
  {
408
880
  "name": "ws-card-tint-done",
409
- "value": "#e6f3f3",
410
- "usage": "A done pill on a chat card (teal 10% on white). (CSS: color-mix(in srgb, var(--color-stat-positive) 10%, var(--color-white)))"
881
+ "value": {
882
+ "light": "#e6f3f3",
883
+ "dark": "rgba(17, 40, 47, 1)",
884
+ "navy": "#062d41"
885
+ },
886
+ "usage": "A done pill on a chat card (teal 10% on white). (CSS: color-mix(in srgb, var(--ws-chart-finished) 10%, var(--color-surface)))"
411
887
  },
412
888
  {
413
889
  "name": "ws-scrim",
414
- "value": "rgba(9, 53, 85, 0.35)",
415
- "usage": "Behind a dialog or a drawer: navy at 35%. (CSS: color-mix(in srgb, var(--color-brand-navy) 35%, transparent))"
890
+ "value": {
891
+ "light": "rgba(9, 53, 85, 0.35)",
892
+ "dark": "rgba(2, 6, 10, 0.62)",
893
+ "navy": "rgba(0, 8, 15, 0.62)"
894
+ },
895
+ "usage": "Behind a dialog or a drawer: navy at 35%. (CSS: color-mix(in srgb, var(--color-text-heading) 35%, transparent))"
896
+ },
897
+ {
898
+ "name": "ws-glow-rose",
899
+ "value": "#f59593",
900
+ "usage": "The rose of the team hero wash: the AI rose drawn from the under-half tone. A wash colour, never words. (CSS: color-mix(in srgb, var(--ws-chart-under-half) 50%, #ebb8ca))"
901
+ },
902
+ {
903
+ "name": "ws-glow-pink",
904
+ "value": "#ec67a0",
905
+ "usage": "The pink of the team hero wash: the AI pink drawn from the needs-work tone. A wash colour, never words. (CSS: color-mix(in srgb, var(--ws-chart-needs-work) 90%, #ad167c))"
906
+ },
907
+ {
908
+ "name": "ws-glow-blue",
909
+ "value": "#3898f0",
910
+ "usage": "The bright blue of the cool hero wash and the working orb: the AI blue drawn from the second navy tone. A wash colour, never words. (CSS: color-mix(in srgb, var(--ws-chart-navy-light) 10%, rgb(57.1111111111 158.2222222222 251.5555555556)))"
911
+ },
912
+ {
913
+ "name": "ws-veil",
914
+ "value": {
915
+ "light": "rgba(232, 232, 232, 0.3)",
916
+ "dark": "rgba(10, 17, 24, 0.3)",
917
+ "navy": "rgba(2, 26, 50, 0.3)"
918
+ },
919
+ "usage": "The page seen through behind a floating chat bar: the shell ground at 30%, with --ws-blur-panel. (CSS: color-mix(in srgb, var(--ws-page) 30%, transparent))"
416
920
  },
417
921
  {
418
922
  "name": "ws-chart-cell-edge",
419
923
  "value": "{ws-edge-slot}",
420
924
  "usage": "A day cell's, an empty tick's and a chart row's hairline (the slot edge)."
925
+ },
926
+ {
927
+ "name": "ws-chart-needs-work",
928
+ "value": "#f370a4",
929
+ "usage": "Seth's 'Needs work' pink as a mark: ticks, a bar, the tag's dot. 2.7:1 on the cream: never words (use ws-word-needs-work)."
930
+ },
931
+ {
932
+ "name": "ws-chart-alert",
933
+ "value": {
934
+ "light": "#b1042f",
935
+ "dark": "#ff5470",
936
+ "navy": "#ff5470"
937
+ },
938
+ "usage": "Seth's status red as a mark: 'needs a reply' ticks, an alert dot."
939
+ },
940
+ {
941
+ "name": "ws-rating-strong",
942
+ "value": "{color-stat-positive}",
943
+ "usage": "A 'strong' rating mark (D10): the teal. Its words: ws-word-positive."
944
+ },
945
+ {
946
+ "name": "ws-rating-middle",
947
+ "value": {
948
+ "light": "#495883",
949
+ "dark": "#93a6dc",
950
+ "navy": "#93a6dc"
951
+ },
952
+ "usage": "The middle 'getting there' rating mark (D10): mid blue, the kit's working/secondary meaning. Its words: color-text-interactive. (CSS: var(--color-brand-mid-blue))"
953
+ },
954
+ {
955
+ "name": "ws-mark-muted",
956
+ "value": {
957
+ "light": "#8a8a8a",
958
+ "dark": "#6c7b8b",
959
+ "navy": "#8a9aab"
960
+ },
961
+ "usage": "Seth's resting mark grey: a nav icon at rest, the not-checked dash, an axis. A mark (3:1), never words: words use color-text-muted. (CSS: color-mix(in srgb, var(--color-text-muted) 76%, #fcfcfc))"
962
+ },
963
+ {
964
+ "name": "ws-control-off",
965
+ "value": {
966
+ "light": "#7f7f7f",
967
+ "navy": "#928a81",
968
+ "dark": "#7f7f7f"
969
+ },
970
+ "usage": "An off control's fill: a switch's track at rest. The muted words a step lighter, 3:1 as a control, never words. (CSS: color-mix(in srgb, var(--color-text-muted) 80%, #e3e3e3))"
971
+ },
972
+ {
973
+ "name": "ws-rating-needs-work",
974
+ "value": "{ws-chart-needs-work}",
975
+ "usage": "A 'needs work' rating mark (D10): Seth's pink. Its words: ws-word-needs-work. Salmon stays 'needs you', for acts and alerts."
976
+ },
977
+ {
978
+ "name": "ws-hover-faint",
979
+ "value": {
980
+ "light": "rgba(9, 53, 85, 0.031)",
981
+ "dark": "rgba(232, 237, 243, 0.031)",
982
+ "navy": "rgba(255, 255, 255, 0.031)"
983
+ },
984
+ "usage": "Seth's lightest hover wash: a list or table row under the pointer. Navy at 3% (light at 3% in dark). (CSS: color-mix(in srgb, var(--ws-ink) 3.137254902%, transparent))"
985
+ },
986
+ {
987
+ "name": "ws-hover",
988
+ "value": {
989
+ "light": "rgba(9, 53, 85, 0.051)",
990
+ "dark": "rgba(232, 237, 243, 0.051)",
991
+ "navy": "rgba(255, 255, 255, 0.051)"
992
+ },
993
+ "usage": "Seth's hover wash for a nav row or a menu row. Navy at 5%. (CSS: color-mix(in srgb, var(--ws-ink) 5.0980392157%, transparent))"
994
+ },
995
+ {
996
+ "name": "ws-hover-strong",
997
+ "value": {
998
+ "light": "rgba(9, 53, 85, 0.059)",
999
+ "dark": "rgba(232, 237, 243, 0.059)",
1000
+ "navy": "rgba(255, 255, 255, 0.059)"
1001
+ },
1002
+ "usage": "Seth's hover wash for an icon button or an action. Navy at 6%. (CSS: color-mix(in srgb, var(--ws-ink) 5.8823529412%, transparent))"
1003
+ },
1004
+ {
1005
+ "name": "ws-ink",
1006
+ "value": "{color-text-heading}",
1007
+ "usage": "The ink of Seth's alpha washes and lines: a hover, a scrollbar, a track, a rule. Mix it toward transparent (5% a hover); it is the heading, so it follows a palette."
1008
+ },
1009
+ {
1010
+ "name": "ws-shade",
1011
+ "value": {
1012
+ "light": "#093555",
1013
+ "dark": "#000",
1014
+ "navy": "#000"
1015
+ },
1016
+ "usage": "The tint of a float's drop: the heading in light, black in dark. Mix it toward transparent for a shadow. (CSS: var(--color-text-heading))"
1017
+ },
1018
+ {
1019
+ "name": "ws-focus-color",
1020
+ "value": "{color-text-heading}",
1021
+ "usage": "The focus colour (D8): the 2 px outline on :focus-visible everywhere, and the inset ring. Navy in light, the light heading colour in dark."
421
1022
  }
422
1023
  ]
423
1024
  },
@@ -819,6 +1420,76 @@
819
1420
  "name": "ws-leading-title",
820
1421
  "value": "28px",
821
1422
  "usage": "A title's line height. (CSS: calc(var(--space-lg) + var(--space-xxs)))"
1423
+ },
1424
+ {
1425
+ "name": "ws-text-control",
1426
+ "value": "13px",
1427
+ "usage": "Seth's single size for control words: tabs, buttons, tags, links, status, labels; weight 500, on ws-leading-control (D6). (CSS: var(--font-size-xs))"
1428
+ },
1429
+ {
1430
+ "name": "ws-leading-control",
1431
+ "value": "18px",
1432
+ "usage": "The line under control words: 13 / 18 (D6)."
1433
+ },
1434
+ {
1435
+ "name": "ws-text-section",
1436
+ "value": "15px",
1437
+ "usage": "Section titles and row titles (600), row names (500): 15 px (D6). (CSS: var(--ws-text-chart))"
1438
+ },
1439
+ {
1440
+ "name": "ws-leading-section",
1441
+ "value": "22px",
1442
+ "usage": "The line under a section or row title: 15 / 22 (D6)."
1443
+ },
1444
+ {
1445
+ "name": "ws-leading-row",
1446
+ "value": "20px",
1447
+ "usage": "The line under a row's name: 15 / 20 (D6). (CSS: calc(var(--space-md) + var(--space-xxs)))"
1448
+ },
1449
+ {
1450
+ "name": "ws-leading-micro",
1451
+ "value": "13px",
1452
+ "usage": "The line under the 11 px sub-line, only as a mark or meta that passes AA: 11 / 13 (D6)."
1453
+ },
1454
+ {
1455
+ "name": "ws-text-figure-row",
1456
+ "value": "28px",
1457
+ "usage": "A list row's figure, right-aligned: 28 / 32, weight 400 (D6)."
1458
+ },
1459
+ {
1460
+ "name": "ws-leading-figure-row",
1461
+ "value": "32px",
1462
+ "usage": "The line under a row's figure: 32. (CSS: var(--space-xl))"
1463
+ },
1464
+ {
1465
+ "name": "ws-text-figure",
1466
+ "value": "32px",
1467
+ "usage": "A tile's figure: 32 / 38, weight 400 (D6). (CSS: var(--space-xl))"
1468
+ },
1469
+ {
1470
+ "name": "ws-leading-figure",
1471
+ "value": "38px",
1472
+ "usage": "The line under a tile's figure: 38."
1473
+ },
1474
+ {
1475
+ "name": "ws-text-figure-lg",
1476
+ "value": "44px",
1477
+ "usage": "A pane's figure ('1 of 6', a vendor's total): 44 / 48, weight 400 (D6)."
1478
+ },
1479
+ {
1480
+ "name": "ws-leading-figure-lg",
1481
+ "value": "48px",
1482
+ "usage": "The line under a pane's figure: 48. (CSS: var(--space-3xl))"
1483
+ },
1484
+ {
1485
+ "name": "ws-text-score",
1486
+ "value": "96px",
1487
+ "usage": "The report's hero figure: 96 / 96, weight 400, tracking ws-tracking-display (D6). Above the old 72 ceiling, by Seth's frames. (CSS: var(--space-6xl))"
1488
+ },
1489
+ {
1490
+ "name": "ws-leading-score",
1491
+ "value": "96px",
1492
+ "usage": "The line under the hero figure: 96. (CSS: var(--space-6xl))"
822
1493
  }
823
1494
  ]
824
1495
  },
@@ -830,16 +1501,36 @@
830
1501
  "value": "4px",
831
1502
  "usage": "Inside a row, between a bar's segments, an icon and its word in a chip, a face's room on touch."
832
1503
  },
1504
+ {
1505
+ "name": "space-3xs",
1506
+ "value": "2px",
1507
+ "usage": "The 2 px half step: a segmented track's padding, the gap between a label and its hint, Seth's 2 px tick gaps (D4)."
1508
+ },
1509
+ {
1510
+ "name": "space-xxs-plus",
1511
+ "value": "6px",
1512
+ "usage": "6 px, a step and the half step: Seth's icon gap inside a button, a hover pill's corner inset (D4)."
1513
+ },
833
1514
  {
834
1515
  "name": "space-xs",
835
1516
  "value": "8px",
836
1517
  "usage": "Between related controls, rows in a list, an icon and its word in a button; a ghost button's sides."
837
1518
  },
1519
+ {
1520
+ "name": "space-xs-plus",
1521
+ "value": "10px",
1522
+ "usage": "10 px: Seth's chip and bubble padding, a compact field's inside (D4)."
1523
+ },
838
1524
  {
839
1525
  "name": "space-sm",
840
1526
  "value": "12px",
841
1527
  "usage": "A button's and a field's sides, a plate's inside, a 12 px icon."
842
1528
  },
1529
+ {
1530
+ "name": "space-sm-plus",
1531
+ "value": "14px",
1532
+ "usage": "14 px: Seth's bubble sides, the figure edge inside a tile (D4)."
1533
+ },
843
1534
  {
844
1535
  "name": "space-md",
845
1536
  "value": "16px",
@@ -920,15 +1611,25 @@
920
1611
  "value": "24px",
921
1612
  "usage": "Between groups of components; between a card's sections. (CSS: var(--space-lg))"
922
1613
  },
1614
+ {
1615
+ "name": "ws-gap-block",
1616
+ "value": "32px",
1617
+ "usage": "Between a report's blocks (Seth's Grow, 32); .ws-stack--block. A 28 in Seth's Fixes frame snaps to it (D4). (CSS: var(--space-xl))"
1618
+ },
1619
+ {
1620
+ "name": "ws-gap-section",
1621
+ "value": "56px",
1622
+ "usage": "Between page sections: a hero, a chart row, a board (North, Tally; 56); .ws-stack--section. (CSS: calc(var(--space-3xl) + var(--space-xs)))"
1623
+ },
923
1624
  {
924
1625
  "name": "ws-gap-turn",
925
- "value": "22px",
926
- "usage": "Between a chat's turns. (CSS: calc(var(--space-lg) - var(--space-xxs) / 2))"
1626
+ "value": "28px",
1627
+ "usage": "Between a chat's turns. (CSS: calc(var(--space-lg) + var(--space-xxs)))"
927
1628
  },
928
1629
  {
929
1630
  "name": "ws-gutter",
930
- "value": "24px",
931
- "usage": "A page's or a header's side padding from the large screen; 16 px on a phone. (CSS: var(--space-lg))"
1631
+ "value": "32px",
1632
+ "usage": "A page's or a header's side padding from the large screen; 16 px on a phone. (CSS: var(--space-xl))"
932
1633
  },
933
1634
  {
934
1635
  "name": "ws-card-padding",
@@ -960,6 +1661,26 @@
960
1661
  "value": "6.5px",
961
1662
  "usage": "The pitch of the dotted field a drawing sits on. (CSS: calc(var(--space-xs) * 0.8125))"
962
1663
  },
1664
+ {
1665
+ "name": "ws-stage-inset-top",
1666
+ "value": "13px",
1667
+ "usage": "The stage's top inset in the window: 13 px (North, D3)."
1668
+ },
1669
+ {
1670
+ "name": "ws-stage-inset",
1671
+ "value": "12px",
1672
+ "usage": "The stage's right and bottom inset in the window: 12 px (North, D3). (CSS: var(--space-sm))"
1673
+ },
1674
+ {
1675
+ "name": "ws-nudge",
1676
+ "value": "4px",
1677
+ "usage": "A small offset: a tooltip or menu from its anchor, an arrow stepping forward (North). (CSS: var(--space-xxs))"
1678
+ },
1679
+ {
1680
+ "name": "ws-drop",
1681
+ "value": "12px",
1682
+ "usage": "How far a greeting or a placeholder rolls in from (North). (CSS: var(--space-sm))"
1683
+ },
963
1684
  {
964
1685
  "name": "layout-margin",
965
1686
  "value": "48px",
@@ -998,7 +1719,7 @@
998
1719
  {
999
1720
  "name": "radius-xl",
1000
1721
  "value": "16px",
1001
- "usage": "A dialog, a docked pane, the stage."
1722
+ "usage": "The website's 16 px corner. In a Tailwind host this name is Tailwind's (12 px there), so product parts use ws-radius-panel."
1002
1723
  },
1003
1724
  {
1004
1725
  "name": "radius-2xl",
@@ -1013,37 +1734,57 @@
1013
1734
  {
1014
1735
  "name": "ws-radius-bar",
1015
1736
  "value": "1px",
1016
- "usage": "A thin bar in a strip. (CSS: calc(var(--radius-xs) / 2))"
1737
+ "usage": "A thin bar in a strip."
1017
1738
  },
1018
1739
  {
1019
1740
  "name": "ws-radius-chip",
1020
1741
  "value": "2px",
1021
- "usage": "A chip, a change chip. (CSS: var(--radius-xs))"
1742
+ "usage": "A chip, a change chip."
1022
1743
  },
1023
1744
  {
1024
1745
  "name": "ws-radius-control",
1025
1746
  "value": "4px",
1026
- "usage": "Buttons, inputs, Search, the composer, End call. (CSS: var(--radius-sm))"
1747
+ "usage": "Buttons, inputs, Search, the composer, End call."
1027
1748
  },
1028
1749
  {
1029
1750
  "name": "ws-radius-row",
1030
1751
  "value": "6px",
1031
- "usage": "A list row, a suggestion, a tab track. (CSS: var(--radius-md))"
1752
+ "usage": "A list row, a suggestion, a tab track."
1032
1753
  },
1033
1754
  {
1034
1755
  "name": "ws-radius-card",
1035
1756
  "value": "8px",
1036
- "usage": "A card, a plate, a well, a tile. (CSS: var(--radius-lg))"
1757
+ "usage": "A card, a plate, a well, a tile."
1758
+ },
1759
+ {
1760
+ "name": "ws-radius-menu",
1761
+ "value": "10px",
1762
+ "usage": "North's menus, flyouts, panels and brief rows, 10."
1763
+ },
1764
+ {
1765
+ "name": "ws-radius-card-inner",
1766
+ "value": "7px",
1767
+ "usage": "The cream surface inside a card's 1 px rim: 7, so the corners stay concentric (D5). (CSS: calc(var(--ws-radius-card) - var(--ws-rim)))"
1037
1768
  },
1038
1769
  {
1039
1770
  "name": "ws-radius-bubble",
1040
1771
  "value": "12px",
1041
- "usage": "The person's chat bubble. (CSS: calc(var(--radius-lg) + var(--radius-sm)))"
1772
+ "usage": "The person's chat bubble."
1773
+ },
1774
+ {
1775
+ "name": "ws-radius-drawer",
1776
+ "value": "12px",
1777
+ "usage": "A drawer's rimmed tray: 12 outside (D5). (CSS: var(--ws-radius-bubble))"
1778
+ },
1779
+ {
1780
+ "name": "ws-radius-drawer-inner",
1781
+ "value": "11px",
1782
+ "usage": "The cream inside a drawer's rim: 11 (D5). (CSS: calc(var(--ws-radius-drawer) - var(--ws-rim)))"
1042
1783
  },
1043
1784
  {
1044
1785
  "name": "ws-radius-panel",
1045
1786
  "value": "16px",
1046
- "usage": "A dialog, a docked pane, the stage. (CSS: var(--radius-xl))"
1787
+ "usage": "A dialog, a docked pane, the stage."
1047
1788
  }
1048
1789
  ]
1049
1790
  },
@@ -1055,6 +1796,11 @@
1055
1796
  "value": "0 0 0 0.5px #d3d3d3",
1056
1797
  "usage": "The 0.5 px card edge as a ring: a secondary button, a field, a chip-sized surface. A card itself draws it as an inside outline (ws-card). (CSS: 0 0 0 var(--ws-hairline) var(--ws-edge-card))"
1057
1798
  },
1799
+ {
1800
+ "name": "ws-shadow-hairline-in",
1801
+ "value": "inset 0 0 0 0.5px #d3d3d3",
1802
+ "usage": "The card edge drawn inside (inset), so a scroller never clips it: every outlined control (a secondary button, an outline icon button, a field, a key). (CSS: inset 0 0 0 var(--ws-hairline) var(--ws-edge-card))"
1803
+ },
1058
1804
  {
1059
1805
  "name": "ws-shadow-band",
1060
1806
  "value": "inset 0 0.5px 0 #d9d3cb, inset 0 28px 8px 0 rgba(0, 0, 0, 0), inset 0 18px 7px 0 rgba(0, 0, 0, 0.01), inset 0 10px 6px 0 rgba(0, 0, 0, 0.03), inset 0 4px 4px 0 rgba(0, 0, 0, 0.05), inset 0 1px 2px 0 rgba(0, 0, 0, 0.06)",
@@ -1065,40 +1811,70 @@
1065
1811
  "value": "0 4px 8px rgba(9, 53, 85, 0.06), 0 8px 24px rgba(9, 53, 85, 0.08)",
1066
1812
  "usage": "A menu or a lifted card off the page (the kit's card hover). (CSS: var(--shadow-card-hover))"
1067
1813
  },
1814
+ {
1815
+ "name": "ws-float-rim",
1816
+ "value": "0 0 0 0 transparent",
1817
+ "usage": "The light rim a floating thing needs in dark, where a shadow does not show; nothing in light. Every ws-shadow-pop/menu/tip/float starts with it."
1818
+ },
1819
+ {
1820
+ "name": "ws-shadow-pop",
1821
+ "value": "0 0 0 0 transparent, 0 12px 32px -16px rgba(9, 53, 85, 0.35)",
1822
+ "usage": "A popover's drop: North's one family for floating things, a single negative-spread shadow tinted navy (black in dark). (CSS: var(--ws-float-rim), 0 12px 32px -16px color-mix(in srgb, var(--ws-shade) 35%, transparent))"
1823
+ },
1824
+ {
1825
+ "name": "ws-shadow-menu",
1826
+ "value": "0 0 0 0 transparent, 0 16px 32px -16px rgba(9, 53, 85, 0.35)",
1827
+ "usage": "A menu's or flyout's drop (North). (CSS: var(--ws-float-rim), 0 16px 32px -16px color-mix(in srgb, var(--ws-shade) 35%, transparent))"
1828
+ },
1829
+ {
1830
+ "name": "ws-shadow-tip",
1831
+ "value": "0 0 0 0 transparent, 0 16px 32px -20px rgba(9, 53, 85, 0.45)",
1832
+ "usage": "A tooltip's or hover card's drop (North). (CSS: var(--ws-float-rim), 0 16px 32px -20px color-mix(in srgb, var(--ws-shade) 45%, transparent))"
1833
+ },
1834
+ {
1835
+ "name": "ws-shadow-float",
1836
+ "value": "0 0 0 0 transparent, 0 40px 80px -30px rgba(9, 53, 85, 0.3), 0 10px 24px -12px rgba(9, 53, 85, 0.14)",
1837
+ "usage": "A floating chat shell's drop (North): the largest in the family. (CSS: var(--ws-float-rim), 0 40px 80px -30px color-mix(in srgb, var(--ws-shade) 30%, transparent), 0 10px 24px -12px color-mix(in srgb, var(--ws-shade) 14%, transparent))"
1838
+ },
1839
+ {
1840
+ "name": "ws-shadow-bar",
1841
+ "value": "0 0 0 0 transparent, 0 24px 60px -24px rgba(9, 53, 85, 0.32), 0 2px 10px rgba(9, 53, 85, 0.06)",
1842
+ "usage": "The centred chat bar's drop (North): the float family's rim, a long soft drop and a close one, tinted by --ws-shade-rgb. (CSS: var(--ws-float-rim), 0 24px 60px -24px color-mix(in srgb, var(--ws-shade) 32%, transparent), 0 2px 10px color-mix(in srgb, var(--ws-shade) 6%, transparent))"
1843
+ },
1068
1844
  {
1069
1845
  "name": "ws-ring-selected",
1070
1846
  "value": "0 0 0 2px rgba(9, 53, 85, 0.55)",
1071
- "usage": "A chosen card or tile: a 2 px navy ring. (CSS: 0 0 0 2px color-mix(in srgb, var(--color-brand-navy) 55%, transparent))"
1847
+ "usage": "A chosen card or tile: a 2 px navy ring. (CSS: 0 0 0 2px color-mix(in srgb, var(--ws-ink) 55%, transparent))"
1072
1848
  },
1073
1849
  {
1074
1850
  "name": "ws-card-ring-lit",
1075
1851
  "value": "0 0 0 2px rgba(9, 53, 85, 0.3)",
1076
- "usage": "A chat card lit for a moment when the chat scrolls to it. (CSS: 0 0 0 2px color-mix(in srgb, var(--color-brand-navy) 30%, transparent))"
1852
+ "usage": "A chat card lit for a moment when the chat scrolls to it. (CSS: 0 0 0 2px color-mix(in srgb, var(--ws-ink) 30%, transparent))"
1077
1853
  },
1078
1854
  {
1079
1855
  "name": "ws-card-ring-person",
1080
1856
  "value": "inset 0 0 0 1px rgba(9, 53, 85, 0.12)",
1081
- "usage": "The person's chat bubble's faint inner edge. (CSS: inset 0 0 0 1px color-mix(in srgb, var(--color-brand-navy) 12%, transparent))"
1857
+ "usage": "The person's chat bubble's faint inner edge. (CSS: inset 0 0 0 1px color-mix(in srgb, var(--ws-ink) 12%, transparent))"
1082
1858
  },
1083
1859
  {
1084
1860
  "name": "ws-focus-inset",
1085
- "value": "inset 0 0 0 2px #495883",
1086
- "usage": "A focus ring drawn inside (a row that cannot grow an outer ring). (CSS: inset 0 0 0 2px var(--color-text-interactive))"
1861
+ "value": "inset 0 0 0 2px #093555",
1862
+ "usage": "A focus ring drawn inside (a row that cannot grow an outer ring). (CSS: inset 0 0 0 var(--ws-focus-width) var(--ws-focus-color))"
1087
1863
  },
1088
1864
  {
1089
1865
  "name": "shadow-focus-ring",
1090
- "value": "0 0 0 3px rgba(255, 114, 92, 0.2)",
1091
- "usage": "The kit's focus halo on every control: 3 px of salmon at 20%. Paired with a mid-blue border on a field so focus never reads as an error (a kit gap, reported)."
1866
+ "value": "0 0 0 2px #fefbf9, 0 0 0 4px #093555",
1867
+ "usage": "The focus ring as a box-shadow, for a part that cannot take the outline: a 2 px navy ring 2 px out, the gap in the page colour (0.5.0, D8; it was a salmon halo at 1.2:1, not visible). Prefer the outline (ws-focus-*). (CSS: 0 0 0 2px var(--color-bg-page), 0 0 0 4px var(--color-text-heading))"
1092
1868
  },
1093
1869
  {
1094
1870
  "name": "shadow-card-default",
1095
1871
  "value": "0 1px 2px rgba(9, 53, 85, 0.04), 0 4px 8px rgba(9, 53, 85, 0.06)",
1096
- "usage": "Kit marketing card. Not used in the product: cards are flat."
1872
+ "usage": "Kit marketing card. Not used in the product: cards are flat. (CSS: 0 1px 2px color-mix(in srgb, var(--color-text-heading) 4%, transparent), 0 4px 8px color-mix(in srgb, var(--color-text-heading) 6%, transparent))"
1097
1873
  },
1098
1874
  {
1099
1875
  "name": "shadow-card-hover",
1100
1876
  "value": "0 4px 8px rgba(9, 53, 85, 0.06), 0 8px 24px rgba(9, 53, 85, 0.08)",
1101
- "usage": "Kit interactive card hover; the product's ws-shadow-lift."
1877
+ "usage": "Kit interactive card hover; the product's ws-shadow-lift. (CSS: 0 4px 8px color-mix(in srgb, var(--color-text-heading) 6%, transparent), 0 8px 24px color-mix(in srgb, var(--color-text-heading) 8%, transparent))"
1102
1878
  },
1103
1879
  {
1104
1880
  "name": "shadow-pill",
@@ -1140,6 +1916,21 @@
1140
1916
  "value": "1px",
1141
1917
  "usage": "A hairline between rows and surfaces (ws-edge), a day cell's edge, a thin bar."
1142
1918
  },
1919
+ {
1920
+ "name": "ws-rim",
1921
+ "value": "1px",
1922
+ "usage": "The rim: the tray shows as 1 px of padding around a card's cream surface (D5). Not a border. (CSS: var(--ws-line))"
1923
+ },
1924
+ {
1925
+ "name": "ws-divider",
1926
+ "value": "0.5px solid #e8e8e8",
1927
+ "usage": "The 0.5 px full-width rule between rows inside a tray card (D5): border-top: var(--ws-divider). (CSS: var(--ws-hairline) solid var(--ws-edge))"
1928
+ },
1929
+ {
1930
+ "name": "ws-divider-inset",
1931
+ "value": "inset 0 0.5px 0 #e8e8e8",
1932
+ "usage": "The same row rule drawn as a shadow on the row's top, so it takes no room and a selected row's fill meets it: box-shadow: var(--ws-divider-inset) (CheckRow, Matrix, ListDetail). (CSS: inset 0 var(--ws-hairline) 0 var(--ws-edge))"
1933
+ },
1143
1934
  {
1144
1935
  "name": "ws-chart-line",
1145
1936
  "value": "1.5px",
@@ -1154,6 +1945,16 @@
1154
1945
  "name": "ws-halo",
1155
1946
  "value": "3px",
1156
1947
  "usage": "The focus halo's spread."
1948
+ },
1949
+ {
1950
+ "name": "ws-focus-width",
1951
+ "value": "2px",
1952
+ "usage": "The focus outline's width: 2 px (D8). (CSS: var(--ws-ring))"
1953
+ },
1954
+ {
1955
+ "name": "ws-focus-offset",
1956
+ "value": "2px",
1957
+ "usage": "The focus outline's offset: 2 px out, on the ground around a control, never on it (D8). (CSS: var(--ws-ring))"
1157
1958
  }
1158
1959
  ]
1159
1960
  },
@@ -1180,6 +1981,31 @@
1180
1981
  "value": "40px",
1181
1982
  "usage": "The floor for a boxed control on a touch screen; words that act stand at least 24."
1182
1983
  },
1984
+ {
1985
+ "name": "ws-touch-public",
1986
+ "value": "44px",
1987
+ "usage": "Every act on a public (marketing) page on touch: 44 px (14-accessibility.md)."
1988
+ },
1989
+ {
1990
+ "name": "ws-glass-blur",
1991
+ "value": "4px",
1992
+ "usage": "The blur behind the stage glass: 4 px (North)."
1993
+ },
1994
+ {
1995
+ "name": "ws-glass-blur-chat",
1996
+ "value": "28px",
1997
+ "usage": "The blur behind the chat shell's glass: 28 px, with saturate(1.4) (North)."
1998
+ },
1999
+ {
2000
+ "name": "ws-blur-arrive",
2001
+ "value": "3px",
2002
+ "usage": "Details and chat parts arrive blurred this much, then sharpen (North). Never under reduced motion."
2003
+ },
2004
+ {
2005
+ "name": "ws-blur-panel",
2006
+ "value": "8px",
2007
+ "usage": "A panel or the greeting arrives blurred this much (North)."
2008
+ },
1183
2009
  {
1184
2010
  "name": "ws-row-h",
1185
2011
  "value": "48px",
@@ -1212,8 +2038,8 @@
1212
2038
  },
1213
2039
  {
1214
2040
  "name": "ws-rail-width",
1215
- "value": "72px",
1216
- "usage": "The sidebar folded to a rail of marks. (CSS: calc(var(--space-2xl) + var(--space-xl)))"
2041
+ "value": "64px",
2042
+ "usage": "The sidebar folded to a rail of marks. (CSS: var(--space-4xl))"
1217
2043
  },
1218
2044
  {
1219
2045
  "name": "ws-sidebar-width",
@@ -1240,6 +2066,11 @@
1240
2066
  "value": "656px",
1241
2067
  "usage": "The one centred column of the home screen and the chat. (CSS: calc(var(--space-9xl) * 3 + var(--space-3xl) + var(--space-xs)))"
1242
2068
  },
2069
+ {
2070
+ "name": "ws-float-width",
2071
+ "value": "300px",
2072
+ "usage": "A popover's width and a note's wrap (North's pop, Seth's notes), 300. (CSS: calc(var(--space-9xl) * 1.5))"
2073
+ },
1243
2074
  {
1244
2075
  "name": "ws-icon-sm",
1245
2076
  "value": "12px",
@@ -1297,18 +2128,43 @@
1297
2128
  {
1298
2129
  "name": "ws-duration-instant",
1299
2130
  "value": "120ms",
1300
- "usage": "Hover, press, focus, a chip or tab flipping; anything leaving (opacity); a dialog's exit."
2131
+ "usage": "Press feedback: a button or chip giving under the pointer. Hover is ws-duration-hover, an exit ws-duration-exit."
2132
+ },
2133
+ {
2134
+ "name": "ws-duration-exit",
2135
+ "value": "120ms",
2136
+ "usage": "Every exit: a menu, a tooltip, details leaving. Always shorter than the entrance (North .1 to .16 s)."
1301
2137
  },
1302
2138
  {
1303
2139
  "name": "ws-duration-gentle",
1304
2140
  "value": "200ms",
1305
2141
  "usage": "The default: a row or card arriving, a menu opening, a drawer leaving, a plain transition."
1306
2142
  },
2143
+ {
2144
+ "name": "ws-duration-hover",
2145
+ "value": "200ms",
2146
+ "usage": "Hover: a colour, tint, edge or opacity change. No lift (North .2 s)."
2147
+ },
2148
+ {
2149
+ "name": "ws-duration-text",
2150
+ "value": "250ms",
2151
+ "usage": "Text colour and small fades: a segment's words, a nav label, a card's ground (North .25 s)."
2152
+ },
1307
2153
  {
1308
2154
  "name": "ws-duration-settle",
1309
2155
  "value": "320ms",
1310
2156
  "usage": "A pane, dialog or drawer coming in, a screen changing, a pop, a tile rising."
1311
2157
  },
2158
+ {
2159
+ "name": "ws-duration-reveal",
2160
+ "value": "350ms",
2161
+ "usage": "A reveal: a link's underline growing, a top bar's ground, a chevron (North .35 s)."
2162
+ },
2163
+ {
2164
+ "name": "ws-duration-shrink",
2165
+ "value": "400ms",
2166
+ "usage": "A tile closing back into its slot (North open.collapse)."
2167
+ },
1312
2168
  {
1313
2169
  "name": "ws-duration-calm",
1314
2170
  "value": "420ms",
@@ -1319,11 +2175,96 @@
1319
2175
  "value": "400ms",
1320
2176
  "usage": "A side panel sliding open or shut."
1321
2177
  },
2178
+ {
2179
+ "name": "ws-duration-morph",
2180
+ "value": "450ms",
2181
+ "usage": "A shared element in flight, a band folding (North chat.morph)."
2182
+ },
2183
+ {
2184
+ "name": "ws-duration-grow",
2185
+ "value": "550ms",
2186
+ "usage": "A tile growing open from its slot (North open.expand)."
2187
+ },
2188
+ {
2189
+ "name": "ws-duration-shift",
2190
+ "value": "550ms",
2191
+ "usage": "A panel docking, columns trading width (North chat.shift)."
2192
+ },
2193
+ {
2194
+ "name": "ws-duration-fill",
2195
+ "value": "700ms",
2196
+ "usage": "A bar filling (North health.barFill)."
2197
+ },
2198
+ {
2199
+ "name": "ws-duration-draw",
2200
+ "value": "900ms",
2201
+ "usage": "A chart drawing inside an opened card, a gauge filling (North)."
2202
+ },
2203
+ {
2204
+ "name": "ws-duration-draw-chat",
2205
+ "value": "1500ms",
2206
+ "usage": "A chart sweeping in inside chat (North chat.draw)."
2207
+ },
2208
+ {
2209
+ "name": "ws-duration-fill-page",
2210
+ "value": "1700ms",
2211
+ "usage": "A dashboard building in (.ws-build): its tiles' charts and its goal bars filling, each card taking 0.79 of it (North \"Metric + goal bars fill\")."
2212
+ },
2213
+ {
2214
+ "name": "ws-duration-build",
2215
+ "value": "2400ms",
2216
+ "usage": "A page's whole first-paint build-in, at most; only on first paint (North health.intro)."
2217
+ },
1322
2218
  {
1323
2219
  "name": "ws-stagger",
1324
2220
  "value": "30ms",
1325
2221
  "usage": "Between items rising in a list, at most 6 items, first paint only (40 ms slow)."
1326
2222
  },
2223
+ {
2224
+ "name": "ws-stagger-detail",
2225
+ "value": "22ms",
2226
+ "usage": "Between details inside an opening tile (North open.stagger)."
2227
+ },
2228
+ {
2229
+ "name": "ws-stagger-row",
2230
+ "value": "45ms",
2231
+ "usage": "Between rows in a tooltip or an opened card (North)."
2232
+ },
2233
+ {
2234
+ "name": "ws-stagger-part",
2235
+ "value": "70ms",
2236
+ "usage": "Between blocks arriving under a chart (North)."
2237
+ },
2238
+ {
2239
+ "name": "ws-ripple",
2240
+ "value": "4ms",
2241
+ "usage": "Per tick, a hover grow spreading along a run of ticks (North chat.ripple)."
2242
+ },
2243
+ {
2244
+ "name": "ws-hover-intent",
2245
+ "value": "40ms",
2246
+ "usage": "The wait before a hover opens a tile (North health.hoverIntent)."
2247
+ },
2248
+ {
2249
+ "name": "ws-hover-leave",
2250
+ "value": "60ms",
2251
+ "usage": "A hover-opened tile closes this long after the pointer leaves (North heatmap, js@710784)."
2252
+ },
2253
+ {
2254
+ "name": "ws-stagger-square",
2255
+ "value": "35ms",
2256
+ "usage": "Between details inside an opening heatmap square (North health.tileStagger)."
2257
+ },
2258
+ {
2259
+ "name": "ws-hover-grace",
2260
+ "value": "180ms",
2261
+ "usage": "How long a tooltip stays after the pointer leaves its mark (North hover.grace)."
2262
+ },
2263
+ {
2264
+ "name": "ws-close-delay",
2265
+ "value": "160ms",
2266
+ "usage": "How long a flyout waits to close after the pointer leaves (North 140 to 180 ms)."
2267
+ },
1327
2268
  {
1328
2269
  "name": "ws-sweep",
1329
2270
  "value": "220ms",
@@ -1331,14 +2272,29 @@
1331
2272
  },
1332
2273
  {
1333
2274
  "name": "ws-loop",
1334
- "value": "1.2s",
1335
- "usage": "The one working beat: a pressed button's dot, a live edge, typing dots."
2275
+ "value": "1s",
2276
+ "usage": "The working beat: a pressed button's dot, a live edge, typing dots. 1 s (North; it was 1.2 s)."
2277
+ },
2278
+ {
2279
+ "name": "ws-loop-status",
2280
+ "value": "1.6s",
2281
+ "usage": "One lap of a status line's shimmering words (North)."
2282
+ },
2283
+ {
2284
+ "name": "ws-loop-shimmer",
2285
+ "value": "1.8s",
2286
+ "usage": "One lap of a loading shimmer over ghost shapes (North)."
1336
2287
  },
1337
2288
  {
1338
2289
  "name": "ws-loop-slow",
1339
2290
  "value": "2.4s",
1340
2291
  "usage": "A big quiet area that waits: a placeholder bar, a ring's backdrop."
1341
2292
  },
2293
+ {
2294
+ "name": "ws-loop-ambient",
2295
+ "value": "6s",
2296
+ "usage": "One lap of the brand sheen on a selected glass edge (North). Ambient, never data."
2297
+ },
1342
2298
  {
1343
2299
  "name": "transition-fast",
1344
2300
  "value": "150ms ease-out",
@@ -1381,12 +2337,107 @@
1381
2337
  {
1382
2338
  "name": "ws-ease-spring",
1383
2339
  "value": "cubic-bezier(0.22, 1, 0.36, 1)",
1384
- "usage": "Anything that pops into place (a chosen thumb, an unread count, a tick). No overshoot since 22 Oct 2026, so it is the soft curve itself. (CSS: var(--ws-ease-soft))"
2340
+ "usage": "Kept as the CSS stand-in for a spring: the soft curve. Real springs are the spring-* presets, in JS (tokens.ts springs). (CSS: var(--ws-ease-soft))"
2341
+ },
2342
+ {
2343
+ "name": "ws-ease-settle",
2344
+ "value": "cubic-bezier(0.16, 1, 0.3, 1)",
2345
+ "usage": "Things that land and rest: a chart mark, a bar fill, a note (North)."
2346
+ },
2347
+ {
2348
+ "name": "ws-ease-grow",
2349
+ "value": "cubic-bezier(0.32, 0.72, 0, 1)",
2350
+ "usage": "A shape changing size: a tile opening and closing, a switch thumb, a label pushing out of an icon (North)."
2351
+ },
2352
+ {
2353
+ "name": "ws-ease-shift",
2354
+ "value": "cubic-bezier(0.25, 1, 0.5, 1)",
2355
+ "usage": "Layout moving: the chat docking, columns trading width (North)."
2356
+ },
2357
+ {
2358
+ "name": "ws-ease-morph",
2359
+ "value": "cubic-bezier(0.5, 0, 0.15, 1)",
2360
+ "usage": "A shared element in flight: a card flying to full screen and back (North)."
2361
+ },
2362
+ {
2363
+ "name": "ws-ease-sweep",
2364
+ "value": "cubic-bezier(0.45, 0, 0.55, 1)",
2365
+ "usage": "A chart drawing left to right inside chat (North)."
2366
+ },
2367
+ {
2368
+ "name": "ws-ease-commit",
2369
+ "value": "cubic-bezier(0.65, 0, 0.35, 1)",
2370
+ "usage": "A decisive one-shot progress: sending, a check mark drawing (North)."
2371
+ },
2372
+ {
2373
+ "name": "ws-ease-shimmer",
2374
+ "value": "cubic-bezier(0.4, 0, 0.2, 1)",
2375
+ "usage": "A loading sweep (North)."
2376
+ },
2377
+ {
2378
+ "name": "ws-ease-ambient",
2379
+ "value": "cubic-bezier(0.45, 0, 0.3, 1)",
2380
+ "usage": "The slow brand sheen passing then resting (North)."
2381
+ },
2382
+ {
2383
+ "name": "ws-ease-loop",
2384
+ "value": "cubic-bezier(0.42, 0, 0.58, 1)",
2385
+ "usage": "A symmetric loop (ease-in-out): working dots, a pulse (North runs loops on ease-in-out)."
2386
+ },
2387
+ {
2388
+ "name": "ws-ease-pop",
2389
+ "value": "cubic-bezier(0.34, 1.4, 0.64, 1)",
2390
+ "usage": "Overshoot for small marks lifting (a logo spoke, a chevron, a badge). Never a card, panel, field or words."
2391
+ },
2392
+ {
2393
+ "name": "ws-ease-lift",
2394
+ "value": "cubic-bezier(0.22, 1.25, 0.36, 1)",
2395
+ "usage": "Overshoot for ticks and ring wedges growing on hover (North)."
1385
2396
  },
1386
2397
  {
1387
2398
  "name": "ws-press-scale",
1388
2399
  "value": "0.97",
1389
2400
  "usage": "How far a control gives under a press (1 with reduced motion). Rows never scale: they tint."
2401
+ },
2402
+ {
2403
+ "name": "ws-press-scale-round",
2404
+ "value": "0.94",
2405
+ "usage": "A round icon button under a press (North voice button)."
2406
+ },
2407
+ {
2408
+ "name": "ws-press-scale-send",
2409
+ "value": "0.92",
2410
+ "usage": "The send act under a press (North send button)."
2411
+ },
2412
+ {
2413
+ "name": "ws-open-scale",
2414
+ "value": "0.97",
2415
+ "usage": "A menu, a popover or the docked panel opens from this scale (North .97); 1 with reduced motion."
2416
+ },
2417
+ {
2418
+ "name": "ws-open-scale-pane",
2419
+ "value": "0.98",
2420
+ "usage": "A dialog window opens from this scale (North .98)."
2421
+ },
2422
+ {
2423
+ "name": "ws-open-scale-toast",
2424
+ "value": "0.96",
2425
+ "usage": "A toast arrives from this scale (North .96)."
2426
+ },
2427
+ {
2428
+ "name": "ws-pop-scale",
2429
+ "value": "0.94",
2430
+ "usage": "Tooltips start and leave at this scale (North)."
2431
+ },
2432
+ {
2433
+ "name": "ws-grow-scale",
2434
+ "value": "1.16",
2435
+ "usage": "A hovered tick or ring wedge grows to this scale from its base (North)."
2436
+ },
2437
+ {
2438
+ "name": "ws-dim",
2439
+ "value": "0.3",
2440
+ "usage": "The opacity the rest of a chart drops to while one part is hovered (North)."
1390
2441
  }
1391
2442
  ]
1392
2443
  },
@@ -1423,5 +2474,140 @@
1423
2474
  "usage": "A toast."
1424
2475
  }
1425
2476
  ]
2477
+ },
2478
+ "spring": {
2479
+ "note": "Seth's spring presets for the motion library ({type: 'spring', visualDuration, bounce}), from Seth's motion config. Value: visualDuration in seconds, then bounce. In tokens.ts as springs; in CSS as --ws-spring-<name> (a linear() curve of the same spring) over --ws-spring-<name>-duration.",
2480
+ "tokens": [
2481
+ {
2482
+ "name": "spring-press",
2483
+ "value": "0.2s 0.3",
2484
+ "usage": "A button or chip under a press (scale --ws-press-scale). CSS: var(--ws-spring-press-duration) var(--ws-spring-press), 450ms."
2485
+ },
2486
+ {
2487
+ "name": "spring-follow",
2488
+ "value": "0.22s 0",
2489
+ "usage": "A tooltip following the pointer; never bounces. CSS: var(--ws-spring-follow-duration) var(--ws-spring-follow), 450ms."
2490
+ },
2491
+ {
2492
+ "name": "spring-pop",
2493
+ "value": "0.35s 0.1",
2494
+ "usage": "A chart tooltip or tip popping in from --ws-pop-scale. CSS: var(--ws-spring-pop-duration) var(--ws-spring-pop), 500ms."
2495
+ },
2496
+ {
2497
+ "name": "spring-settle",
2498
+ "value": "0.32s 0.1",
2499
+ "usage": "Menus, pickers and messages settling. CSS: var(--ws-spring-settle-duration) var(--ws-spring-settle), 450ms."
2500
+ },
2501
+ {
2502
+ "name": "spring-fold",
2503
+ "value": "0.32s 0",
2504
+ "usage": "A section opening or closing (height and the chevron). CSS: var(--ws-spring-fold-duration) var(--ws-spring-fold), 600ms."
2505
+ },
2506
+ {
2507
+ "name": "spring-indicator",
2508
+ "value": "0.38s 0.16",
2509
+ "usage": "The Segmented and tab thumb sliding to the chosen item. CSS: var(--ws-spring-indicator-duration) var(--ws-spring-indicator), 700ms."
2510
+ },
2511
+ {
2512
+ "name": "spring-highlight",
2513
+ "value": "0.45s 0.14",
2514
+ "usage": "A list's selected fill sliding between rows. CSS: var(--ws-spring-highlight-duration) var(--ws-spring-highlight), 800ms."
2515
+ },
2516
+ {
2517
+ "name": "spring-nav",
2518
+ "value": "0.4s 0.1",
2519
+ "usage": "The sidebar's current-row pill sliding. CSS: var(--ws-spring-nav-duration) var(--ws-spring-nav), 550ms."
2520
+ },
2521
+ {
2522
+ "name": "spring-reorder",
2523
+ "value": "0.4s 0",
2524
+ "usage": "List rows moving to new places. CSS: var(--ws-spring-reorder-duration) var(--ws-spring-reorder), 750ms."
2525
+ },
2526
+ {
2527
+ "name": "spring-tile",
2528
+ "value": "0.26s 0.06",
2529
+ "usage": "A heatmap square opening to two cells. CSS: var(--ws-spring-tile-duration) var(--ws-spring-tile), 450ms."
2530
+ },
2531
+ {
2532
+ "name": "spring-lane",
2533
+ "value": "0.46s 0.04",
2534
+ "usage": "A lane's detail opening. CSS: var(--ws-spring-lane-duration) var(--ws-spring-lane), 750ms."
2535
+ },
2536
+ {
2537
+ "name": "spring-lens",
2538
+ "value": "0.45s 0.04",
2539
+ "usage": "One chart swapping for another inside an open tile. CSS: var(--ws-spring-lens-duration) var(--ws-spring-lens), 750ms."
2540
+ },
2541
+ {
2542
+ "name": "spring-swap",
2543
+ "value": "0.6s 0.06",
2544
+ "usage": "A board chart going out and the new one coming in. CSS: var(--ws-spring-swap-duration) var(--ws-spring-swap), 900ms."
2545
+ },
2546
+ {
2547
+ "name": "spring-panel",
2548
+ "value": "0.42s 0.12",
2549
+ "usage": "The chat panel opening, moving or docking. CSS: var(--ws-spring-panel-duration) var(--ws-spring-panel), 550ms."
2550
+ },
2551
+ {
2552
+ "name": "spring-card",
2553
+ "value": "0.5s 0.08",
2554
+ "usage": "A chart card arriving in the thread. CSS: var(--ws-spring-card-duration) var(--ws-spring-card), 700ms."
2555
+ },
2556
+ {
2557
+ "name": "spring-text",
2558
+ "value": "0.7s 0.2",
2559
+ "usage": "A metric card's words swapping. CSS: var(--ws-spring-text-duration) var(--ws-spring-text), 1200ms."
2560
+ },
2561
+ {
2562
+ "name": "spring-badge",
2563
+ "value": "0.3s 0.4",
2564
+ "usage": "A count badge popping when it changes. CSS: var(--ws-spring-badge-duration) var(--ws-spring-badge), 650ms."
2565
+ },
2566
+ {
2567
+ "name": "spring-tab",
2568
+ "value": "0.4s 0.12",
2569
+ "usage": "A tab's underline sliding to the chosen tab (North dc-tab). CSS: var(--ws-spring-tab-duration) var(--ws-spring-tab), 500ms."
2570
+ },
2571
+ {
2572
+ "name": "spring-chip",
2573
+ "value": "0.25s 0.1",
2574
+ "usage": "An attention chip opening into its card. CSS: var(--ws-spring-chip-duration) var(--ws-spring-chip), 350ms."
2575
+ },
2576
+ {
2577
+ "name": "spring-glow",
2578
+ "value": "0.3s 0",
2579
+ "usage": "The composer's focus glow arriving. CSS: var(--ws-spring-glow-duration) var(--ws-spring-glow), 600ms."
2580
+ },
2581
+ {
2582
+ "name": "spring-roll",
2583
+ "value": "0.45s 0.05",
2584
+ "usage": "The composer's placeholder rolling to the next line. CSS: var(--ws-spring-roll-duration) var(--ws-spring-roll), 700ms."
2585
+ },
2586
+ {
2587
+ "name": "spring-flag",
2588
+ "value": "0.26s 0.06",
2589
+ "usage": "A trend read-out following the pointer along a chart. CSS: var(--ws-spring-flag-duration) var(--ws-spring-flag), 450ms."
2590
+ },
2591
+ {
2592
+ "name": "spring-mark",
2593
+ "value": "0.35s 0.35",
2594
+ "usage": "A small mark popping in: the pace dot on an opened square. CSS: var(--ws-spring-mark-duration) var(--ws-spring-mark), 550ms."
2595
+ },
2596
+ {
2597
+ "name": "spring-morphChart",
2598
+ "value": "0.85s 0.06",
2599
+ "usage": "A chart morphing between forms (bars to a line). CSS: var(--ws-spring-morph-chart-duration) var(--ws-spring-morph-chart), 1250ms."
2600
+ },
2601
+ {
2602
+ "name": "spring-orb",
2603
+ "value": "0.55s 0.35",
2604
+ "usage": "An agent's orb arriving, from scale .3 out of a 4 px blur (North js@532276; a stack of them staggers on .5 / .35, js@531354). CSS: var(--ws-spring-orb-duration) var(--ws-spring-orb), 850ms."
2605
+ },
2606
+ {
2607
+ "name": "spring-default",
2608
+ "value": "0.4s 0.15",
2609
+ "usage": "Anything the person drives that has no tuned spring (North's fallback). CSS: var(--ws-spring-default-duration) var(--ws-spring-default), 750ms."
2610
+ }
2611
+ ]
1426
2612
  }
1427
2613
  }