@felloinnovations/brand-kit 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/AGENTS.md +198 -24
  2. package/CHANGELOG.md +197 -0
  3. package/README.md +34 -7
  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 +134 -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 +357 -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 +52 -16
  249. package/design-system/components/Skeleton/preview.html +35 -23
  250. package/design-system/components/Skeleton/style.css +22 -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 +4091 -744
  335. package/design-system/tokens.json +1314 -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 +110 -11
  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 +174 -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 +1292 -62
  361. package/tokens/tokens.md +588 -61
  362. package/tokens/tokens.root.css +1298 -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.0: 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,273 @@
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": {
787
+ "light": "#ece8e4",
788
+ "dark": "#1a2631",
789
+ "navy": "#20354b"
790
+ },
791
+ "usage": "The grey a loading shimmer sweeps over: the tray made warmer in light, the track in dark. (CSS: color-mix(in srgb, var(--ws-tray) 96%, #d4700c))"
356
792
  },
357
793
  {
358
794
  "name": "ws-chart-dot",
359
- "value": "#ebe8e6",
795
+ "value": {
796
+ "light": "#ebe8e6",
797
+ "dark": "#1c2834",
798
+ "navy": "rgba(255, 255, 255, 0.1)"
799
+ },
360
800
  "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
801
  },
362
802
  {
363
803
  "name": "ws-chart-navy-light",
364
- "value": "#2e6088",
804
+ "value": {
805
+ "light": "#2e6088",
806
+ "dark": "#6e9cc4",
807
+ "navy": "#6e9cc4"
808
+ },
365
809
  "usage": "A lighter navy for a streak's second tier and a navy bar's top."
366
810
  },
367
811
  {
368
812
  "name": "ws-chart-navy-fade",
369
- "value": "#a8c0d3",
370
- "usage": "The pale end of a navy bar's fade."
813
+ "value": {
814
+ "light": "#a8c0d3",
815
+ "dark": "#31485d",
816
+ "navy": "#4e5f70"
817
+ },
818
+ "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
819
  },
372
820
  {
373
821
  "name": "ws-chart-salmon-fade",
374
- "value": "#ffd2c8",
375
- "usage": "The pale end of a salmon bar's fade."
822
+ "value": {
823
+ "light": "#ffd2c8",
824
+ "dark": "#5f3735",
825
+ "navy": "#563740"
826
+ },
827
+ "usage": "The pale end of a salmon bar's fade. (CSS: color-mix(in srgb, var(--ws-chart-under-half) 25%, #fff2ec))"
376
828
  },
377
829
  {
378
830
  "name": "ws-chart-purple-fade",
379
- "value": "#d8ccf6",
380
- "usage": "The pale end of a purple bar's fade."
831
+ "value": {
832
+ "light": "#d8ccf6",
833
+ "dark": "#3b3a62",
834
+ "navy": "#323b6d"
835
+ },
836
+ "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
837
  },
382
838
  {
383
839
  "name": "ws-chart-teal-fade",
384
- "value": "#b0e2dd",
385
- "usage": "The pale end of a teal bar's fade."
840
+ "value": {
841
+ "light": "#b0e2dd",
842
+ "dark": "#154448",
843
+ "navy": "#0c4454"
844
+ },
845
+ "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
846
  },
387
847
  {
388
848
  "name": "ws-chart-finished-tint",
389
- "value": "#9fddd6",
390
- "usage": "A teal tint for a ring's outer tracks."
849
+ "value": {
850
+ "light": "#9fddd6",
851
+ "dark": "#164e51",
852
+ "navy": "#0e4e5c"
853
+ },
854
+ "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
855
  },
392
856
  {
393
857
  "name": "ws-chart-past-half-tint",
394
- "value": "#cbbdf3",
395
- "usage": "A purple tint for a ring's outer tracks."
858
+ "value": {
859
+ "light": "#cbbdf3",
860
+ "dark": "#3c3b64",
861
+ "navy": "#333c6f"
862
+ },
863
+ "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
864
  },
397
865
  {
398
866
  "name": "ws-chart-under-half-tint",
399
- "value": "#f9dfc6",
400
- "usage": "A salmon tint for a ring's outer tracks."
867
+ "value": {
868
+ "light": "#f9dfc6",
869
+ "dark": "#4b3a2b",
870
+ "navy": "#4b3a2b"
871
+ },
872
+ "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
873
  },
402
874
  {
403
875
  "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)))"
876
+ "value": {
877
+ "light": "#edeef3",
878
+ "dark": "#1b2637",
879
+ "navy": "#142a46"
880
+ },
881
+ "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
882
  },
407
883
  {
408
884
  "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)))"
885
+ "value": {
886
+ "light": "#e6f3f3",
887
+ "dark": "rgba(17, 40, 47, 1)",
888
+ "navy": "#062d41"
889
+ },
890
+ "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
891
  },
412
892
  {
413
893
  "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))"
894
+ "value": {
895
+ "light": "rgba(9, 53, 85, 0.35)",
896
+ "dark": "rgba(2, 6, 10, 0.62)",
897
+ "navy": "rgba(0, 8, 15, 0.62)"
898
+ },
899
+ "usage": "Behind a dialog or a drawer: navy at 35%. (CSS: color-mix(in srgb, var(--color-text-heading) 35%, transparent))"
900
+ },
901
+ {
902
+ "name": "ws-glow-rose",
903
+ "value": "#f59593",
904
+ "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))"
905
+ },
906
+ {
907
+ "name": "ws-glow-pink",
908
+ "value": "#ec67a0",
909
+ "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))"
910
+ },
911
+ {
912
+ "name": "ws-glow-blue",
913
+ "value": "#3898f0",
914
+ "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)))"
915
+ },
916
+ {
917
+ "name": "ws-veil",
918
+ "value": {
919
+ "light": "rgba(232, 232, 232, 0.3)",
920
+ "dark": "rgba(10, 17, 24, 0.3)",
921
+ "navy": "rgba(2, 26, 50, 0.3)"
922
+ },
923
+ "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
924
  },
417
925
  {
418
926
  "name": "ws-chart-cell-edge",
419
927
  "value": "{ws-edge-slot}",
420
928
  "usage": "A day cell's, an empty tick's and a chart row's hairline (the slot edge)."
929
+ },
930
+ {
931
+ "name": "ws-chart-needs-work",
932
+ "value": "#f370a4",
933
+ "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)."
934
+ },
935
+ {
936
+ "name": "ws-chart-alert",
937
+ "value": {
938
+ "light": "#b1042f",
939
+ "dark": "#ff5470",
940
+ "navy": "#ff5470"
941
+ },
942
+ "usage": "Seth's status red as a mark: 'needs a reply' ticks, an alert dot."
943
+ },
944
+ {
945
+ "name": "ws-rating-strong",
946
+ "value": "{color-stat-positive}",
947
+ "usage": "A 'strong' rating mark (D10): the teal. Its words: ws-word-positive."
948
+ },
949
+ {
950
+ "name": "ws-rating-middle",
951
+ "value": {
952
+ "light": "#495883",
953
+ "dark": "#93a6dc",
954
+ "navy": "#93a6dc"
955
+ },
956
+ "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))"
957
+ },
958
+ {
959
+ "name": "ws-mark-muted",
960
+ "value": {
961
+ "light": "#8a8a8a",
962
+ "dark": "#6c7b8b",
963
+ "navy": "#8a9aab"
964
+ },
965
+ "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))"
966
+ },
967
+ {
968
+ "name": "ws-control-off",
969
+ "value": {
970
+ "light": "#7f7f7f",
971
+ "navy": "#928a81",
972
+ "dark": "#7f7f7f"
973
+ },
974
+ "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))"
975
+ },
976
+ {
977
+ "name": "ws-rating-needs-work",
978
+ "value": "{ws-chart-needs-work}",
979
+ "usage": "A 'needs work' rating mark (D10): Seth's pink. Its words: ws-word-needs-work. Salmon stays 'needs you', for acts and alerts."
980
+ },
981
+ {
982
+ "name": "ws-hover-faint",
983
+ "value": {
984
+ "light": "rgba(9, 53, 85, 0.031)",
985
+ "dark": "rgba(232, 237, 243, 0.031)",
986
+ "navy": "rgba(255, 255, 255, 0.031)"
987
+ },
988
+ "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))"
989
+ },
990
+ {
991
+ "name": "ws-hover",
992
+ "value": {
993
+ "light": "rgba(9, 53, 85, 0.051)",
994
+ "dark": "rgba(232, 237, 243, 0.051)",
995
+ "navy": "rgba(255, 255, 255, 0.051)"
996
+ },
997
+ "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))"
998
+ },
999
+ {
1000
+ "name": "ws-hover-strong",
1001
+ "value": {
1002
+ "light": "rgba(9, 53, 85, 0.059)",
1003
+ "dark": "rgba(232, 237, 243, 0.059)",
1004
+ "navy": "rgba(255, 255, 255, 0.059)"
1005
+ },
1006
+ "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))"
1007
+ },
1008
+ {
1009
+ "name": "ws-ink",
1010
+ "value": "{color-text-heading}",
1011
+ "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."
1012
+ },
1013
+ {
1014
+ "name": "ws-shade",
1015
+ "value": {
1016
+ "light": "#093555",
1017
+ "dark": "#000",
1018
+ "navy": "#000"
1019
+ },
1020
+ "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))"
1021
+ },
1022
+ {
1023
+ "name": "ws-focus-color",
1024
+ "value": "{color-text-heading}",
1025
+ "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
1026
  }
422
1027
  ]
423
1028
  },
@@ -819,6 +1424,76 @@
819
1424
  "name": "ws-leading-title",
820
1425
  "value": "28px",
821
1426
  "usage": "A title's line height. (CSS: calc(var(--space-lg) + var(--space-xxs)))"
1427
+ },
1428
+ {
1429
+ "name": "ws-text-control",
1430
+ "value": "13px",
1431
+ "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))"
1432
+ },
1433
+ {
1434
+ "name": "ws-leading-control",
1435
+ "value": "18px",
1436
+ "usage": "The line under control words: 13 / 18 (D6)."
1437
+ },
1438
+ {
1439
+ "name": "ws-text-section",
1440
+ "value": "15px",
1441
+ "usage": "Section titles and row titles (600), row names (500): 15 px (D6). (CSS: var(--ws-text-chart))"
1442
+ },
1443
+ {
1444
+ "name": "ws-leading-section",
1445
+ "value": "22px",
1446
+ "usage": "The line under a section or row title: 15 / 22 (D6)."
1447
+ },
1448
+ {
1449
+ "name": "ws-leading-row",
1450
+ "value": "20px",
1451
+ "usage": "The line under a row's name: 15 / 20 (D6). (CSS: calc(var(--space-md) + var(--space-xxs)))"
1452
+ },
1453
+ {
1454
+ "name": "ws-leading-micro",
1455
+ "value": "13px",
1456
+ "usage": "The line under the 11 px sub-line, only as a mark or meta that passes AA: 11 / 13 (D6)."
1457
+ },
1458
+ {
1459
+ "name": "ws-text-figure-row",
1460
+ "value": "28px",
1461
+ "usage": "A list row's figure, right-aligned: 28 / 32, weight 400 (D6)."
1462
+ },
1463
+ {
1464
+ "name": "ws-leading-figure-row",
1465
+ "value": "32px",
1466
+ "usage": "The line under a row's figure: 32. (CSS: var(--space-xl))"
1467
+ },
1468
+ {
1469
+ "name": "ws-text-figure",
1470
+ "value": "32px",
1471
+ "usage": "A tile's figure: 32 / 38, weight 400 (D6). (CSS: var(--space-xl))"
1472
+ },
1473
+ {
1474
+ "name": "ws-leading-figure",
1475
+ "value": "38px",
1476
+ "usage": "The line under a tile's figure: 38."
1477
+ },
1478
+ {
1479
+ "name": "ws-text-figure-lg",
1480
+ "value": "44px",
1481
+ "usage": "A pane's figure ('1 of 6', a vendor's total): 44 / 48, weight 400 (D6)."
1482
+ },
1483
+ {
1484
+ "name": "ws-leading-figure-lg",
1485
+ "value": "48px",
1486
+ "usage": "The line under a pane's figure: 48. (CSS: var(--space-3xl))"
1487
+ },
1488
+ {
1489
+ "name": "ws-text-score",
1490
+ "value": "96px",
1491
+ "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))"
1492
+ },
1493
+ {
1494
+ "name": "ws-leading-score",
1495
+ "value": "96px",
1496
+ "usage": "The line under the hero figure: 96. (CSS: var(--space-6xl))"
822
1497
  }
823
1498
  ]
824
1499
  },
@@ -830,16 +1505,36 @@
830
1505
  "value": "4px",
831
1506
  "usage": "Inside a row, between a bar's segments, an icon and its word in a chip, a face's room on touch."
832
1507
  },
1508
+ {
1509
+ "name": "space-3xs",
1510
+ "value": "2px",
1511
+ "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)."
1512
+ },
1513
+ {
1514
+ "name": "space-xxs-plus",
1515
+ "value": "6px",
1516
+ "usage": "6 px, a step and the half step: Seth's icon gap inside a button, a hover pill's corner inset (D4)."
1517
+ },
833
1518
  {
834
1519
  "name": "space-xs",
835
1520
  "value": "8px",
836
1521
  "usage": "Between related controls, rows in a list, an icon and its word in a button; a ghost button's sides."
837
1522
  },
1523
+ {
1524
+ "name": "space-xs-plus",
1525
+ "value": "10px",
1526
+ "usage": "10 px: Seth's chip and bubble padding, a compact field's inside (D4)."
1527
+ },
838
1528
  {
839
1529
  "name": "space-sm",
840
1530
  "value": "12px",
841
1531
  "usage": "A button's and a field's sides, a plate's inside, a 12 px icon."
842
1532
  },
1533
+ {
1534
+ "name": "space-sm-plus",
1535
+ "value": "14px",
1536
+ "usage": "14 px: Seth's bubble sides, the figure edge inside a tile (D4)."
1537
+ },
843
1538
  {
844
1539
  "name": "space-md",
845
1540
  "value": "16px",
@@ -920,15 +1615,25 @@
920
1615
  "value": "24px",
921
1616
  "usage": "Between groups of components; between a card's sections. (CSS: var(--space-lg))"
922
1617
  },
1618
+ {
1619
+ "name": "ws-gap-block",
1620
+ "value": "32px",
1621
+ "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))"
1622
+ },
1623
+ {
1624
+ "name": "ws-gap-section",
1625
+ "value": "56px",
1626
+ "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)))"
1627
+ },
923
1628
  {
924
1629
  "name": "ws-gap-turn",
925
- "value": "22px",
926
- "usage": "Between a chat's turns. (CSS: calc(var(--space-lg) - var(--space-xxs) / 2))"
1630
+ "value": "28px",
1631
+ "usage": "Between a chat's turns. (CSS: calc(var(--space-lg) + var(--space-xxs)))"
927
1632
  },
928
1633
  {
929
1634
  "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))"
1635
+ "value": "32px",
1636
+ "usage": "A page's or a header's side padding from the large screen; 16 px on a phone. (CSS: var(--space-xl))"
932
1637
  },
933
1638
  {
934
1639
  "name": "ws-card-padding",
@@ -960,6 +1665,26 @@
960
1665
  "value": "6.5px",
961
1666
  "usage": "The pitch of the dotted field a drawing sits on. (CSS: calc(var(--space-xs) * 0.8125))"
962
1667
  },
1668
+ {
1669
+ "name": "ws-stage-inset-top",
1670
+ "value": "13px",
1671
+ "usage": "The stage's top inset in the window: 13 px (North, D3)."
1672
+ },
1673
+ {
1674
+ "name": "ws-stage-inset",
1675
+ "value": "12px",
1676
+ "usage": "The stage's right and bottom inset in the window: 12 px (North, D3). (CSS: var(--space-sm))"
1677
+ },
1678
+ {
1679
+ "name": "ws-nudge",
1680
+ "value": "4px",
1681
+ "usage": "A small offset: a tooltip or menu from its anchor, an arrow stepping forward (North). (CSS: var(--space-xxs))"
1682
+ },
1683
+ {
1684
+ "name": "ws-drop",
1685
+ "value": "12px",
1686
+ "usage": "How far a greeting or a placeholder rolls in from (North). (CSS: var(--space-sm))"
1687
+ },
963
1688
  {
964
1689
  "name": "layout-margin",
965
1690
  "value": "48px",
@@ -998,7 +1723,7 @@
998
1723
  {
999
1724
  "name": "radius-xl",
1000
1725
  "value": "16px",
1001
- "usage": "A dialog, a docked pane, the stage."
1726
+ "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
1727
  },
1003
1728
  {
1004
1729
  "name": "radius-2xl",
@@ -1013,37 +1738,57 @@
1013
1738
  {
1014
1739
  "name": "ws-radius-bar",
1015
1740
  "value": "1px",
1016
- "usage": "A thin bar in a strip. (CSS: calc(var(--radius-xs) / 2))"
1741
+ "usage": "A thin bar in a strip."
1017
1742
  },
1018
1743
  {
1019
1744
  "name": "ws-radius-chip",
1020
1745
  "value": "2px",
1021
- "usage": "A chip, a change chip. (CSS: var(--radius-xs))"
1746
+ "usage": "A chip, a change chip."
1022
1747
  },
1023
1748
  {
1024
1749
  "name": "ws-radius-control",
1025
1750
  "value": "4px",
1026
- "usage": "Buttons, inputs, Search, the composer, End call. (CSS: var(--radius-sm))"
1751
+ "usage": "Buttons, inputs, Search, the composer, End call."
1027
1752
  },
1028
1753
  {
1029
1754
  "name": "ws-radius-row",
1030
1755
  "value": "6px",
1031
- "usage": "A list row, a suggestion, a tab track. (CSS: var(--radius-md))"
1756
+ "usage": "A list row, a suggestion, a tab track."
1032
1757
  },
1033
1758
  {
1034
1759
  "name": "ws-radius-card",
1035
1760
  "value": "8px",
1036
- "usage": "A card, a plate, a well, a tile. (CSS: var(--radius-lg))"
1761
+ "usage": "A card, a plate, a well, a tile."
1762
+ },
1763
+ {
1764
+ "name": "ws-radius-menu",
1765
+ "value": "10px",
1766
+ "usage": "North's menus, flyouts, panels and brief rows, 10."
1767
+ },
1768
+ {
1769
+ "name": "ws-radius-card-inner",
1770
+ "value": "7px",
1771
+ "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
1772
  },
1038
1773
  {
1039
1774
  "name": "ws-radius-bubble",
1040
1775
  "value": "12px",
1041
- "usage": "The person's chat bubble. (CSS: calc(var(--radius-lg) + var(--radius-sm)))"
1776
+ "usage": "The person's chat bubble."
1777
+ },
1778
+ {
1779
+ "name": "ws-radius-drawer",
1780
+ "value": "12px",
1781
+ "usage": "A drawer's rimmed tray: 12 outside (D5). (CSS: var(--ws-radius-bubble))"
1782
+ },
1783
+ {
1784
+ "name": "ws-radius-drawer-inner",
1785
+ "value": "11px",
1786
+ "usage": "The cream inside a drawer's rim: 11 (D5). (CSS: calc(var(--ws-radius-drawer) - var(--ws-rim)))"
1042
1787
  },
1043
1788
  {
1044
1789
  "name": "ws-radius-panel",
1045
1790
  "value": "16px",
1046
- "usage": "A dialog, a docked pane, the stage. (CSS: var(--radius-xl))"
1791
+ "usage": "A dialog, a docked pane, the stage."
1047
1792
  }
1048
1793
  ]
1049
1794
  },
@@ -1055,6 +1800,11 @@
1055
1800
  "value": "0 0 0 0.5px #d3d3d3",
1056
1801
  "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
1802
  },
1803
+ {
1804
+ "name": "ws-shadow-hairline-in",
1805
+ "value": "inset 0 0 0 0.5px #d3d3d3",
1806
+ "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))"
1807
+ },
1058
1808
  {
1059
1809
  "name": "ws-shadow-band",
1060
1810
  "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 +1815,70 @@
1065
1815
  "value": "0 4px 8px rgba(9, 53, 85, 0.06), 0 8px 24px rgba(9, 53, 85, 0.08)",
1066
1816
  "usage": "A menu or a lifted card off the page (the kit's card hover). (CSS: var(--shadow-card-hover))"
1067
1817
  },
1818
+ {
1819
+ "name": "ws-float-rim",
1820
+ "value": "0 0 0 0 transparent",
1821
+ "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."
1822
+ },
1823
+ {
1824
+ "name": "ws-shadow-pop",
1825
+ "value": "0 0 0 0 transparent, 0 12px 32px -16px rgba(9, 53, 85, 0.35)",
1826
+ "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))"
1827
+ },
1828
+ {
1829
+ "name": "ws-shadow-menu",
1830
+ "value": "0 0 0 0 transparent, 0 16px 32px -16px rgba(9, 53, 85, 0.35)",
1831
+ "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))"
1832
+ },
1833
+ {
1834
+ "name": "ws-shadow-tip",
1835
+ "value": "0 0 0 0 transparent, 0 16px 32px -20px rgba(9, 53, 85, 0.45)",
1836
+ "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))"
1837
+ },
1838
+ {
1839
+ "name": "ws-shadow-float",
1840
+ "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)",
1841
+ "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))"
1842
+ },
1843
+ {
1844
+ "name": "ws-shadow-bar",
1845
+ "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)",
1846
+ "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))"
1847
+ },
1068
1848
  {
1069
1849
  "name": "ws-ring-selected",
1070
1850
  "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))"
1851
+ "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
1852
  },
1073
1853
  {
1074
1854
  "name": "ws-card-ring-lit",
1075
1855
  "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))"
1856
+ "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
1857
  },
1078
1858
  {
1079
1859
  "name": "ws-card-ring-person",
1080
1860
  "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))"
1861
+ "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
1862
  },
1083
1863
  {
1084
1864
  "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))"
1865
+ "value": "inset 0 0 0 2px #093555",
1866
+ "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
1867
  },
1088
1868
  {
1089
1869
  "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)."
1870
+ "value": "0 0 0 2px #fefbf9, 0 0 0 4px #093555",
1871
+ "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
1872
  },
1093
1873
  {
1094
1874
  "name": "shadow-card-default",
1095
1875
  "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."
1876
+ "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
1877
  },
1098
1878
  {
1099
1879
  "name": "shadow-card-hover",
1100
1880
  "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."
1881
+ "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
1882
  },
1103
1883
  {
1104
1884
  "name": "shadow-pill",
@@ -1140,6 +1920,21 @@
1140
1920
  "value": "1px",
1141
1921
  "usage": "A hairline between rows and surfaces (ws-edge), a day cell's edge, a thin bar."
1142
1922
  },
1923
+ {
1924
+ "name": "ws-rim",
1925
+ "value": "1px",
1926
+ "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))"
1927
+ },
1928
+ {
1929
+ "name": "ws-divider",
1930
+ "value": "0.5px solid #e8e8e8",
1931
+ "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))"
1932
+ },
1933
+ {
1934
+ "name": "ws-divider-inset",
1935
+ "value": "inset 0 0.5px 0 #e8e8e8",
1936
+ "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))"
1937
+ },
1143
1938
  {
1144
1939
  "name": "ws-chart-line",
1145
1940
  "value": "1.5px",
@@ -1154,6 +1949,16 @@
1154
1949
  "name": "ws-halo",
1155
1950
  "value": "3px",
1156
1951
  "usage": "The focus halo's spread."
1952
+ },
1953
+ {
1954
+ "name": "ws-focus-width",
1955
+ "value": "2px",
1956
+ "usage": "The focus outline's width: 2 px (D8). (CSS: var(--ws-ring))"
1957
+ },
1958
+ {
1959
+ "name": "ws-focus-offset",
1960
+ "value": "2px",
1961
+ "usage": "The focus outline's offset: 2 px out, on the ground around a control, never on it (D8). (CSS: var(--ws-ring))"
1157
1962
  }
1158
1963
  ]
1159
1964
  },
@@ -1180,6 +1985,31 @@
1180
1985
  "value": "40px",
1181
1986
  "usage": "The floor for a boxed control on a touch screen; words that act stand at least 24."
1182
1987
  },
1988
+ {
1989
+ "name": "ws-touch-public",
1990
+ "value": "44px",
1991
+ "usage": "Every act on a public (marketing) page on touch: 44 px (14-accessibility.md)."
1992
+ },
1993
+ {
1994
+ "name": "ws-glass-blur",
1995
+ "value": "4px",
1996
+ "usage": "The blur behind the stage glass: 4 px (North)."
1997
+ },
1998
+ {
1999
+ "name": "ws-glass-blur-chat",
2000
+ "value": "28px",
2001
+ "usage": "The blur behind the chat shell's glass: 28 px, with saturate(1.4) (North)."
2002
+ },
2003
+ {
2004
+ "name": "ws-blur-arrive",
2005
+ "value": "3px",
2006
+ "usage": "Details and chat parts arrive blurred this much, then sharpen (North). Never under reduced motion."
2007
+ },
2008
+ {
2009
+ "name": "ws-blur-panel",
2010
+ "value": "8px",
2011
+ "usage": "A panel or the greeting arrives blurred this much (North)."
2012
+ },
1183
2013
  {
1184
2014
  "name": "ws-row-h",
1185
2015
  "value": "48px",
@@ -1212,8 +2042,8 @@
1212
2042
  },
1213
2043
  {
1214
2044
  "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)))"
2045
+ "value": "64px",
2046
+ "usage": "The sidebar folded to a rail of marks. (CSS: var(--space-4xl))"
1217
2047
  },
1218
2048
  {
1219
2049
  "name": "ws-sidebar-width",
@@ -1240,6 +2070,11 @@
1240
2070
  "value": "656px",
1241
2071
  "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
2072
  },
2073
+ {
2074
+ "name": "ws-float-width",
2075
+ "value": "300px",
2076
+ "usage": "A popover's width and a note's wrap (North's pop, Seth's notes), 300. (CSS: calc(var(--space-9xl) * 1.5))"
2077
+ },
1243
2078
  {
1244
2079
  "name": "ws-icon-sm",
1245
2080
  "value": "12px",
@@ -1297,18 +2132,43 @@
1297
2132
  {
1298
2133
  "name": "ws-duration-instant",
1299
2134
  "value": "120ms",
1300
- "usage": "Hover, press, focus, a chip or tab flipping; anything leaving (opacity); a dialog's exit."
2135
+ "usage": "Press feedback: a button or chip giving under the pointer. Hover is ws-duration-hover, an exit ws-duration-exit."
2136
+ },
2137
+ {
2138
+ "name": "ws-duration-exit",
2139
+ "value": "120ms",
2140
+ "usage": "Every exit: a menu, a tooltip, details leaving. Always shorter than the entrance (North .1 to .16 s)."
1301
2141
  },
1302
2142
  {
1303
2143
  "name": "ws-duration-gentle",
1304
2144
  "value": "200ms",
1305
2145
  "usage": "The default: a row or card arriving, a menu opening, a drawer leaving, a plain transition."
1306
2146
  },
2147
+ {
2148
+ "name": "ws-duration-hover",
2149
+ "value": "200ms",
2150
+ "usage": "Hover: a colour, tint, edge or opacity change. No lift (North .2 s)."
2151
+ },
2152
+ {
2153
+ "name": "ws-duration-text",
2154
+ "value": "250ms",
2155
+ "usage": "Text colour and small fades: a segment's words, a nav label, a card's ground (North .25 s)."
2156
+ },
1307
2157
  {
1308
2158
  "name": "ws-duration-settle",
1309
2159
  "value": "320ms",
1310
2160
  "usage": "A pane, dialog or drawer coming in, a screen changing, a pop, a tile rising."
1311
2161
  },
2162
+ {
2163
+ "name": "ws-duration-reveal",
2164
+ "value": "350ms",
2165
+ "usage": "A reveal: a link's underline growing, a top bar's ground, a chevron (North .35 s)."
2166
+ },
2167
+ {
2168
+ "name": "ws-duration-shrink",
2169
+ "value": "400ms",
2170
+ "usage": "A tile closing back into its slot (North open.collapse)."
2171
+ },
1312
2172
  {
1313
2173
  "name": "ws-duration-calm",
1314
2174
  "value": "420ms",
@@ -1319,11 +2179,96 @@
1319
2179
  "value": "400ms",
1320
2180
  "usage": "A side panel sliding open or shut."
1321
2181
  },
2182
+ {
2183
+ "name": "ws-duration-morph",
2184
+ "value": "450ms",
2185
+ "usage": "A shared element in flight, a band folding (North chat.morph)."
2186
+ },
2187
+ {
2188
+ "name": "ws-duration-grow",
2189
+ "value": "550ms",
2190
+ "usage": "A tile growing open from its slot (North open.expand)."
2191
+ },
2192
+ {
2193
+ "name": "ws-duration-shift",
2194
+ "value": "550ms",
2195
+ "usage": "A panel docking, columns trading width (North chat.shift)."
2196
+ },
2197
+ {
2198
+ "name": "ws-duration-fill",
2199
+ "value": "700ms",
2200
+ "usage": "A bar filling (North health.barFill)."
2201
+ },
2202
+ {
2203
+ "name": "ws-duration-draw",
2204
+ "value": "900ms",
2205
+ "usage": "A chart drawing inside an opened card, a gauge filling (North)."
2206
+ },
2207
+ {
2208
+ "name": "ws-duration-draw-chat",
2209
+ "value": "1500ms",
2210
+ "usage": "A chart sweeping in inside chat (North chat.draw)."
2211
+ },
2212
+ {
2213
+ "name": "ws-duration-fill-page",
2214
+ "value": "1700ms",
2215
+ "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\")."
2216
+ },
2217
+ {
2218
+ "name": "ws-duration-build",
2219
+ "value": "2400ms",
2220
+ "usage": "A page's whole first-paint build-in, at most; only on first paint (North health.intro)."
2221
+ },
1322
2222
  {
1323
2223
  "name": "ws-stagger",
1324
2224
  "value": "30ms",
1325
2225
  "usage": "Between items rising in a list, at most 6 items, first paint only (40 ms slow)."
1326
2226
  },
2227
+ {
2228
+ "name": "ws-stagger-detail",
2229
+ "value": "22ms",
2230
+ "usage": "Between details inside an opening tile (North open.stagger)."
2231
+ },
2232
+ {
2233
+ "name": "ws-stagger-row",
2234
+ "value": "45ms",
2235
+ "usage": "Between rows in a tooltip or an opened card (North)."
2236
+ },
2237
+ {
2238
+ "name": "ws-stagger-part",
2239
+ "value": "70ms",
2240
+ "usage": "Between blocks arriving under a chart (North)."
2241
+ },
2242
+ {
2243
+ "name": "ws-ripple",
2244
+ "value": "4ms",
2245
+ "usage": "Per tick, a hover grow spreading along a run of ticks (North chat.ripple)."
2246
+ },
2247
+ {
2248
+ "name": "ws-hover-intent",
2249
+ "value": "40ms",
2250
+ "usage": "The wait before a hover opens a tile (North health.hoverIntent)."
2251
+ },
2252
+ {
2253
+ "name": "ws-hover-leave",
2254
+ "value": "60ms",
2255
+ "usage": "A hover-opened tile closes this long after the pointer leaves (North heatmap, js@710784)."
2256
+ },
2257
+ {
2258
+ "name": "ws-stagger-square",
2259
+ "value": "35ms",
2260
+ "usage": "Between details inside an opening heatmap square (North health.tileStagger)."
2261
+ },
2262
+ {
2263
+ "name": "ws-hover-grace",
2264
+ "value": "180ms",
2265
+ "usage": "How long a tooltip stays after the pointer leaves its mark (North hover.grace)."
2266
+ },
2267
+ {
2268
+ "name": "ws-close-delay",
2269
+ "value": "160ms",
2270
+ "usage": "How long a flyout waits to close after the pointer leaves (North 140 to 180 ms)."
2271
+ },
1327
2272
  {
1328
2273
  "name": "ws-sweep",
1329
2274
  "value": "220ms",
@@ -1331,14 +2276,29 @@
1331
2276
  },
1332
2277
  {
1333
2278
  "name": "ws-loop",
1334
- "value": "1.2s",
1335
- "usage": "The one working beat: a pressed button's dot, a live edge, typing dots."
2279
+ "value": "1s",
2280
+ "usage": "The working beat: a pressed button's dot, a live edge, typing dots. 1 s (North; it was 1.2 s)."
2281
+ },
2282
+ {
2283
+ "name": "ws-loop-status",
2284
+ "value": "1.6s",
2285
+ "usage": "One lap of a status line's shimmering words (North)."
2286
+ },
2287
+ {
2288
+ "name": "ws-loop-shimmer",
2289
+ "value": "1.8s",
2290
+ "usage": "One lap of a loading shimmer over ghost shapes (North)."
1336
2291
  },
1337
2292
  {
1338
2293
  "name": "ws-loop-slow",
1339
2294
  "value": "2.4s",
1340
2295
  "usage": "A big quiet area that waits: a placeholder bar, a ring's backdrop."
1341
2296
  },
2297
+ {
2298
+ "name": "ws-loop-ambient",
2299
+ "value": "6s",
2300
+ "usage": "One lap of the brand sheen on a selected glass edge (North). Ambient, never data."
2301
+ },
1342
2302
  {
1343
2303
  "name": "transition-fast",
1344
2304
  "value": "150ms ease-out",
@@ -1381,12 +2341,107 @@
1381
2341
  {
1382
2342
  "name": "ws-ease-spring",
1383
2343
  "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))"
2344
+ "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))"
2345
+ },
2346
+ {
2347
+ "name": "ws-ease-settle",
2348
+ "value": "cubic-bezier(0.16, 1, 0.3, 1)",
2349
+ "usage": "Things that land and rest: a chart mark, a bar fill, a note (North)."
2350
+ },
2351
+ {
2352
+ "name": "ws-ease-grow",
2353
+ "value": "cubic-bezier(0.32, 0.72, 0, 1)",
2354
+ "usage": "A shape changing size: a tile opening and closing, a switch thumb, a label pushing out of an icon (North)."
2355
+ },
2356
+ {
2357
+ "name": "ws-ease-shift",
2358
+ "value": "cubic-bezier(0.25, 1, 0.5, 1)",
2359
+ "usage": "Layout moving: the chat docking, columns trading width (North)."
2360
+ },
2361
+ {
2362
+ "name": "ws-ease-morph",
2363
+ "value": "cubic-bezier(0.5, 0, 0.15, 1)",
2364
+ "usage": "A shared element in flight: a card flying to full screen and back (North)."
2365
+ },
2366
+ {
2367
+ "name": "ws-ease-sweep",
2368
+ "value": "cubic-bezier(0.45, 0, 0.55, 1)",
2369
+ "usage": "A chart drawing left to right inside chat (North)."
2370
+ },
2371
+ {
2372
+ "name": "ws-ease-commit",
2373
+ "value": "cubic-bezier(0.65, 0, 0.35, 1)",
2374
+ "usage": "A decisive one-shot progress: sending, a check mark drawing (North)."
2375
+ },
2376
+ {
2377
+ "name": "ws-ease-shimmer",
2378
+ "value": "cubic-bezier(0.4, 0, 0.2, 1)",
2379
+ "usage": "A loading sweep (North)."
2380
+ },
2381
+ {
2382
+ "name": "ws-ease-ambient",
2383
+ "value": "cubic-bezier(0.45, 0, 0.3, 1)",
2384
+ "usage": "The slow brand sheen passing then resting (North)."
2385
+ },
2386
+ {
2387
+ "name": "ws-ease-loop",
2388
+ "value": "cubic-bezier(0.42, 0, 0.58, 1)",
2389
+ "usage": "A symmetric loop (ease-in-out): working dots, a pulse (North runs loops on ease-in-out)."
2390
+ },
2391
+ {
2392
+ "name": "ws-ease-pop",
2393
+ "value": "cubic-bezier(0.34, 1.4, 0.64, 1)",
2394
+ "usage": "Overshoot for small marks lifting (a logo spoke, a chevron, a badge). Never a card, panel, field or words."
2395
+ },
2396
+ {
2397
+ "name": "ws-ease-lift",
2398
+ "value": "cubic-bezier(0.22, 1.25, 0.36, 1)",
2399
+ "usage": "Overshoot for ticks and ring wedges growing on hover (North)."
1385
2400
  },
1386
2401
  {
1387
2402
  "name": "ws-press-scale",
1388
2403
  "value": "0.97",
1389
2404
  "usage": "How far a control gives under a press (1 with reduced motion). Rows never scale: they tint."
2405
+ },
2406
+ {
2407
+ "name": "ws-press-scale-round",
2408
+ "value": "0.94",
2409
+ "usage": "A round icon button under a press (North voice button)."
2410
+ },
2411
+ {
2412
+ "name": "ws-press-scale-send",
2413
+ "value": "0.92",
2414
+ "usage": "The send act under a press (North send button)."
2415
+ },
2416
+ {
2417
+ "name": "ws-open-scale",
2418
+ "value": "0.97",
2419
+ "usage": "A menu, a popover or the docked panel opens from this scale (North .97); 1 with reduced motion."
2420
+ },
2421
+ {
2422
+ "name": "ws-open-scale-pane",
2423
+ "value": "0.98",
2424
+ "usage": "A dialog window opens from this scale (North .98)."
2425
+ },
2426
+ {
2427
+ "name": "ws-open-scale-toast",
2428
+ "value": "0.96",
2429
+ "usage": "A toast arrives from this scale (North .96)."
2430
+ },
2431
+ {
2432
+ "name": "ws-pop-scale",
2433
+ "value": "0.94",
2434
+ "usage": "Tooltips start and leave at this scale (North)."
2435
+ },
2436
+ {
2437
+ "name": "ws-grow-scale",
2438
+ "value": "1.16",
2439
+ "usage": "A hovered tick or ring wedge grows to this scale from its base (North)."
2440
+ },
2441
+ {
2442
+ "name": "ws-dim",
2443
+ "value": "0.3",
2444
+ "usage": "The opacity the rest of a chart drops to while one part is hovered (North)."
1390
2445
  }
1391
2446
  ]
1392
2447
  },
@@ -1423,5 +2478,140 @@
1423
2478
  "usage": "A toast."
1424
2479
  }
1425
2480
  ]
2481
+ },
2482
+ "spring": {
2483
+ "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.",
2484
+ "tokens": [
2485
+ {
2486
+ "name": "spring-press",
2487
+ "value": "0.2s 0.3",
2488
+ "usage": "A button or chip under a press (scale --ws-press-scale). CSS: var(--ws-spring-press-duration) var(--ws-spring-press), 450ms."
2489
+ },
2490
+ {
2491
+ "name": "spring-follow",
2492
+ "value": "0.22s 0",
2493
+ "usage": "A tooltip following the pointer; never bounces. CSS: var(--ws-spring-follow-duration) var(--ws-spring-follow), 450ms."
2494
+ },
2495
+ {
2496
+ "name": "spring-pop",
2497
+ "value": "0.35s 0.1",
2498
+ "usage": "A chart tooltip or tip popping in from --ws-pop-scale. CSS: var(--ws-spring-pop-duration) var(--ws-spring-pop), 500ms."
2499
+ },
2500
+ {
2501
+ "name": "spring-settle",
2502
+ "value": "0.32s 0.1",
2503
+ "usage": "Menus, pickers and messages settling. CSS: var(--ws-spring-settle-duration) var(--ws-spring-settle), 450ms."
2504
+ },
2505
+ {
2506
+ "name": "spring-fold",
2507
+ "value": "0.32s 0",
2508
+ "usage": "A section opening or closing (height and the chevron). CSS: var(--ws-spring-fold-duration) var(--ws-spring-fold), 600ms."
2509
+ },
2510
+ {
2511
+ "name": "spring-indicator",
2512
+ "value": "0.38s 0.16",
2513
+ "usage": "The Segmented and tab thumb sliding to the chosen item. CSS: var(--ws-spring-indicator-duration) var(--ws-spring-indicator), 700ms."
2514
+ },
2515
+ {
2516
+ "name": "spring-highlight",
2517
+ "value": "0.45s 0.14",
2518
+ "usage": "A list's selected fill sliding between rows. CSS: var(--ws-spring-highlight-duration) var(--ws-spring-highlight), 800ms."
2519
+ },
2520
+ {
2521
+ "name": "spring-nav",
2522
+ "value": "0.4s 0.1",
2523
+ "usage": "The sidebar's current-row pill sliding. CSS: var(--ws-spring-nav-duration) var(--ws-spring-nav), 550ms."
2524
+ },
2525
+ {
2526
+ "name": "spring-reorder",
2527
+ "value": "0.4s 0",
2528
+ "usage": "List rows moving to new places. CSS: var(--ws-spring-reorder-duration) var(--ws-spring-reorder), 750ms."
2529
+ },
2530
+ {
2531
+ "name": "spring-tile",
2532
+ "value": "0.26s 0.06",
2533
+ "usage": "A heatmap square opening to two cells. CSS: var(--ws-spring-tile-duration) var(--ws-spring-tile), 450ms."
2534
+ },
2535
+ {
2536
+ "name": "spring-lane",
2537
+ "value": "0.46s 0.04",
2538
+ "usage": "A lane's detail opening. CSS: var(--ws-spring-lane-duration) var(--ws-spring-lane), 750ms."
2539
+ },
2540
+ {
2541
+ "name": "spring-lens",
2542
+ "value": "0.45s 0.04",
2543
+ "usage": "One chart swapping for another inside an open tile. CSS: var(--ws-spring-lens-duration) var(--ws-spring-lens), 750ms."
2544
+ },
2545
+ {
2546
+ "name": "spring-swap",
2547
+ "value": "0.6s 0.06",
2548
+ "usage": "A board chart going out and the new one coming in. CSS: var(--ws-spring-swap-duration) var(--ws-spring-swap), 900ms."
2549
+ },
2550
+ {
2551
+ "name": "spring-panel",
2552
+ "value": "0.42s 0.12",
2553
+ "usage": "The chat panel opening, moving or docking. CSS: var(--ws-spring-panel-duration) var(--ws-spring-panel), 550ms."
2554
+ },
2555
+ {
2556
+ "name": "spring-card",
2557
+ "value": "0.5s 0.08",
2558
+ "usage": "A chart card arriving in the thread. CSS: var(--ws-spring-card-duration) var(--ws-spring-card), 700ms."
2559
+ },
2560
+ {
2561
+ "name": "spring-text",
2562
+ "value": "0.7s 0.2",
2563
+ "usage": "A metric card's words swapping. CSS: var(--ws-spring-text-duration) var(--ws-spring-text), 1200ms."
2564
+ },
2565
+ {
2566
+ "name": "spring-badge",
2567
+ "value": "0.3s 0.4",
2568
+ "usage": "A count badge popping when it changes. CSS: var(--ws-spring-badge-duration) var(--ws-spring-badge), 650ms."
2569
+ },
2570
+ {
2571
+ "name": "spring-tab",
2572
+ "value": "0.4s 0.12",
2573
+ "usage": "A tab's underline sliding to the chosen tab (North dc-tab). CSS: var(--ws-spring-tab-duration) var(--ws-spring-tab), 500ms."
2574
+ },
2575
+ {
2576
+ "name": "spring-chip",
2577
+ "value": "0.25s 0.1",
2578
+ "usage": "An attention chip opening into its card. CSS: var(--ws-spring-chip-duration) var(--ws-spring-chip), 350ms."
2579
+ },
2580
+ {
2581
+ "name": "spring-glow",
2582
+ "value": "0.3s 0",
2583
+ "usage": "The composer's focus glow arriving. CSS: var(--ws-spring-glow-duration) var(--ws-spring-glow), 600ms."
2584
+ },
2585
+ {
2586
+ "name": "spring-roll",
2587
+ "value": "0.45s 0.05",
2588
+ "usage": "The composer's placeholder rolling to the next line. CSS: var(--ws-spring-roll-duration) var(--ws-spring-roll), 700ms."
2589
+ },
2590
+ {
2591
+ "name": "spring-flag",
2592
+ "value": "0.26s 0.06",
2593
+ "usage": "A trend read-out following the pointer along a chart. CSS: var(--ws-spring-flag-duration) var(--ws-spring-flag), 450ms."
2594
+ },
2595
+ {
2596
+ "name": "spring-mark",
2597
+ "value": "0.35s 0.35",
2598
+ "usage": "A small mark popping in: the pace dot on an opened square. CSS: var(--ws-spring-mark-duration) var(--ws-spring-mark), 550ms."
2599
+ },
2600
+ {
2601
+ "name": "spring-morphChart",
2602
+ "value": "0.85s 0.06",
2603
+ "usage": "A chart morphing between forms (bars to a line). CSS: var(--ws-spring-morph-chart-duration) var(--ws-spring-morph-chart), 1250ms."
2604
+ },
2605
+ {
2606
+ "name": "spring-orb",
2607
+ "value": "0.55s 0.35",
2608
+ "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."
2609
+ },
2610
+ {
2611
+ "name": "spring-default",
2612
+ "value": "0.4s 0.15",
2613
+ "usage": "Anything the person drives that has no tuned spring (North's fallback). CSS: var(--ws-spring-default-duration) var(--ws-spring-default), 750ms."
2614
+ }
2615
+ ]
1426
2616
  }
1427
2617
  }