@misoto22/folio 0.0.0 → 0.17.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 (721) hide show
  1. package/AGENTS.md +88 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +21 -0
  4. package/README.md +208 -2
  5. package/bin/folio-design.mjs +277 -0
  6. package/bin/migrate-legacy.mjs +81 -0
  7. package/dist/agent/Accordion.md +65 -0
  8. package/dist/agent/Actions.md +49 -0
  9. package/dist/agent/Alert.md +65 -0
  10. package/dist/agent/AppShell.md +69 -0
  11. package/dist/agent/ArchitectureFigure.md +72 -0
  12. package/dist/agent/AreaChart.md +94 -0
  13. package/dist/agent/Article.md +65 -0
  14. package/dist/agent/AspectRatio.md +58 -0
  15. package/dist/agent/Avatar.md +53 -0
  16. package/dist/agent/Badge.md +62 -0
  17. package/dist/agent/BarChart.md +93 -0
  18. package/dist/agent/BarList.md +67 -0
  19. package/dist/agent/BigNumber.md +70 -0
  20. package/dist/agent/BoxPlot.md +82 -0
  21. package/dist/agent/Breadcrumb.md +55 -0
  22. package/dist/agent/BulletChart.md +71 -0
  23. package/dist/agent/Button.md +81 -0
  24. package/dist/agent/Calendar.md +77 -0
  25. package/dist/agent/CalendarHeatmap.md +75 -0
  26. package/dist/agent/Card.md +72 -0
  27. package/dist/agent/Checkbox.md +57 -0
  28. package/dist/agent/Code.md +51 -0
  29. package/dist/agent/CodeBlock.md +77 -0
  30. package/dist/agent/Collapsible.md +68 -0
  31. package/dist/agent/Collection.md +169 -0
  32. package/dist/agent/ColorPicker.md +76 -0
  33. package/dist/agent/Combobox.md +77 -0
  34. package/dist/agent/Command.md +122 -0
  35. package/dist/agent/ComposedChart.md +82 -0
  36. package/dist/agent/Contact.md +90 -0
  37. package/dist/agent/Content.md +70 -0
  38. package/dist/agent/ContextMenu.md +93 -0
  39. package/dist/agent/Conversation.md +247 -0
  40. package/dist/agent/DataflowFigure.md +49 -0
  41. package/dist/agent/DatePicker.md +104 -0
  42. package/dist/agent/DescriptionList.md +69 -0
  43. package/dist/agent/Diagram.md +71 -0
  44. package/dist/agent/DiagramCanvas.md +71 -0
  45. package/dist/agent/DiagramExportMenu.md +65 -0
  46. package/dist/agent/DiagramInspector.md +73 -0
  47. package/dist/agent/DiagramLegend.md +56 -0
  48. package/dist/agent/DiagramMinimap.md +69 -0
  49. package/dist/agent/DiagramToolbar.md +70 -0
  50. package/dist/agent/Dialog.md +76 -0
  51. package/dist/agent/DropdownMenu.md +110 -0
  52. package/dist/agent/EmptyState.md +63 -0
  53. package/dist/agent/ErrorState.md +67 -0
  54. package/dist/agent/Evidence.md +165 -0
  55. package/dist/agent/Facet.md +107 -0
  56. package/dist/agent/Field.md +79 -0
  57. package/dist/agent/FigureBand.md +49 -0
  58. package/dist/agent/FloatingIconButton.md +61 -0
  59. package/dist/agent/FunnelChart.md +75 -0
  60. package/dist/agent/Heading.md +65 -0
  61. package/dist/agent/Heatmap.md +78 -0
  62. package/dist/agent/Histogram.md +88 -0
  63. package/dist/agent/Input.md +52 -0
  64. package/dist/agent/Kbd.md +48 -0
  65. package/dist/agent/LifecycleFigure.md +50 -0
  66. package/dist/agent/LineChart.md +85 -0
  67. package/dist/agent/LinkArrow.md +49 -0
  68. package/dist/agent/Markdown.md +69 -0
  69. package/dist/agent/Media.md +261 -0
  70. package/dist/agent/Metric.md +70 -0
  71. package/dist/agent/Metrics.md +114 -0
  72. package/dist/agent/Music.md +86 -0
  73. package/dist/agent/NativeSelect.md +62 -0
  74. package/dist/agent/NavItem.md +56 -0
  75. package/dist/agent/NumberField.md +73 -0
  76. package/dist/agent/PageHeader.md +69 -0
  77. package/dist/agent/Pagination.md +70 -0
  78. package/dist/agent/PieChart.md +80 -0
  79. package/dist/agent/Popover.md +80 -0
  80. package/dist/agent/Portfolio.md +93 -0
  81. package/dist/agent/PortfolioIndex.md +34 -0
  82. package/dist/agent/Progress.md +58 -0
  83. package/dist/agent/RadarChart.md +79 -0
  84. package/dist/agent/RadialChart.md +81 -0
  85. package/dist/agent/RadioGroup.md +66 -0
  86. package/dist/agent/Reading.md +233 -0
  87. package/dist/agent/Recovery.md +72 -0
  88. package/dist/agent/SankeyChart.md +85 -0
  89. package/dist/agent/ScatterChart.md +80 -0
  90. package/dist/agent/ScrollArea.md +62 -0
  91. package/dist/agent/SearchPalette.md +51 -0
  92. package/dist/agent/SearchableMenu.md +69 -0
  93. package/dist/agent/Select.md +102 -0
  94. package/dist/agent/Separator.md +60 -0
  95. package/dist/agent/SequenceFigure.md +51 -0
  96. package/dist/agent/Sheet.md +82 -0
  97. package/dist/agent/Sidebar.md +194 -0
  98. package/dist/agent/SiteNavigation.md +62 -0
  99. package/dist/agent/SiteShell.md +67 -0
  100. package/dist/agent/Skeleton.md +96 -0
  101. package/dist/agent/Slider.md +67 -0
  102. package/dist/agent/Sparkline.md +68 -0
  103. package/dist/agent/Spinner.md +62 -0
  104. package/dist/agent/StatusDot.md +56 -0
  105. package/dist/agent/StatusPill.md +55 -0
  106. package/dist/agent/Steps.md +68 -0
  107. package/dist/agent/Switch.md +50 -0
  108. package/dist/agent/Table.md +111 -0
  109. package/dist/agent/Tabs.md +71 -0
  110. package/dist/agent/Tag.md +67 -0
  111. package/dist/agent/Text.md +66 -0
  112. package/dist/agent/Textarea.md +46 -0
  113. package/dist/agent/Timeline.md +114 -0
  114. package/dist/agent/Timestamp.md +65 -0
  115. package/dist/agent/Toast.md +51 -0
  116. package/dist/agent/ToggleGroup.md +67 -0
  117. package/dist/agent/Toolbar.md +72 -0
  118. package/dist/agent/Tooltip.md +74 -0
  119. package/dist/agent/TreemapChart.md +76 -0
  120. package/dist/agent/WaterfallChart.md +86 -0
  121. package/dist/agent/Workbench.md +142 -0
  122. package/dist/agent/WorkflowFigure.md +51 -0
  123. package/dist/agent/catalog.json +8055 -0
  124. package/dist/agent/index.md +185 -0
  125. package/dist/article.css +407 -0
  126. package/dist/charts/AreaChart/AreaChart.d.ts +198 -0
  127. package/dist/charts/AreaChart/AreaChart.js +479 -0
  128. package/dist/charts/AreaChart/AreaChart.js.map +1 -0
  129. package/dist/charts/BarChart/BarChart.d.ts +190 -0
  130. package/dist/charts/BarChart/BarChart.js +599 -0
  131. package/dist/charts/BarChart/BarChart.js.map +1 -0
  132. package/dist/charts/BarList/BarList.d.ts +65 -0
  133. package/dist/charts/BarList/BarList.js +79 -0
  134. package/dist/charts/BarList/BarList.js.map +1 -0
  135. package/dist/charts/BigNumber/BigNumber.d.ts +72 -0
  136. package/dist/charts/BigNumber/BigNumber.js +51 -0
  137. package/dist/charts/BigNumber/BigNumber.js.map +1 -0
  138. package/dist/charts/BoxPlot/BoxPlot.d.ts +177 -0
  139. package/dist/charts/BoxPlot/BoxPlot.js +497 -0
  140. package/dist/charts/BoxPlot/BoxPlot.js.map +1 -0
  141. package/dist/charts/BulletChart/BulletChart.d.ts +100 -0
  142. package/dist/charts/BulletChart/BulletChart.js +197 -0
  143. package/dist/charts/BulletChart/BulletChart.js.map +1 -0
  144. package/dist/charts/CalendarHeatmap/CalendarHeatmap.d.ts +106 -0
  145. package/dist/charts/CalendarHeatmap/CalendarHeatmap.js +103 -0
  146. package/dist/charts/CalendarHeatmap/CalendarHeatmap.js.map +1 -0
  147. package/dist/charts/ComposedChart/ComposedChart.d.ts +178 -0
  148. package/dist/charts/ComposedChart/ComposedChart.js +667 -0
  149. package/dist/charts/ComposedChart/ComposedChart.js.map +1 -0
  150. package/dist/charts/Facet/Facet.d.ts +240 -0
  151. package/dist/charts/Facet/Facet.js +133 -0
  152. package/dist/charts/Facet/Facet.js.map +1 -0
  153. package/dist/charts/Facet/panels.d.ts +187 -0
  154. package/dist/charts/Facet/panels.js +203 -0
  155. package/dist/charts/Facet/panels.js.map +1 -0
  156. package/dist/charts/FunnelChart/FunnelChart.d.ts +106 -0
  157. package/dist/charts/FunnelChart/FunnelChart.js +137 -0
  158. package/dist/charts/FunnelChart/FunnelChart.js.map +1 -0
  159. package/dist/charts/Heatmap/Heatmap.d.ts +101 -0
  160. package/dist/charts/Heatmap/Heatmap.js +125 -0
  161. package/dist/charts/Heatmap/Heatmap.js.map +1 -0
  162. package/dist/charts/Histogram/Histogram.d.ts +188 -0
  163. package/dist/charts/Histogram/Histogram.js +382 -0
  164. package/dist/charts/Histogram/Histogram.js.map +1 -0
  165. package/dist/charts/LineChart/LineChart.d.ts +174 -0
  166. package/dist/charts/LineChart/LineChart.js +485 -0
  167. package/dist/charts/LineChart/LineChart.js.map +1 -0
  168. package/dist/charts/PieChart/PieChart.d.ts +140 -0
  169. package/dist/charts/PieChart/PieChart.js +317 -0
  170. package/dist/charts/PieChart/PieChart.js.map +1 -0
  171. package/dist/charts/RadarChart/RadarChart.d.ts +135 -0
  172. package/dist/charts/RadarChart/RadarChart.js +303 -0
  173. package/dist/charts/RadarChart/RadarChart.js.map +1 -0
  174. package/dist/charts/RadialChart/RadialChart.d.ts +142 -0
  175. package/dist/charts/RadialChart/RadialChart.js +279 -0
  176. package/dist/charts/RadialChart/RadialChart.js.map +1 -0
  177. package/dist/charts/SankeyChart/SankeyChart.d.ts +149 -0
  178. package/dist/charts/SankeyChart/SankeyChart.js +509 -0
  179. package/dist/charts/SankeyChart/SankeyChart.js.map +1 -0
  180. package/dist/charts/ScatterChart/ScatterChart.d.ts +149 -0
  181. package/dist/charts/ScatterChart/ScatterChart.js +275 -0
  182. package/dist/charts/ScatterChart/ScatterChart.js.map +1 -0
  183. package/dist/charts/Sparkline/Sparkline.d.ts +53 -0
  184. package/dist/charts/Sparkline/Sparkline.js +95 -0
  185. package/dist/charts/Sparkline/Sparkline.js.map +1 -0
  186. package/dist/charts/TreemapChart/TreemapChart.d.ts +98 -0
  187. package/dist/charts/TreemapChart/TreemapChart.js +127 -0
  188. package/dist/charts/TreemapChart/TreemapChart.js.map +1 -0
  189. package/dist/charts/WaterfallChart/WaterfallChart.d.ts +164 -0
  190. package/dist/charts/WaterfallChart/WaterfallChart.js +321 -0
  191. package/dist/charts/WaterfallChart/WaterfallChart.js.map +1 -0
  192. package/dist/charts/index.d.ts +43 -0
  193. package/dist/charts/index.js +130 -0
  194. package/dist/charts/index.js.map +1 -0
  195. package/dist/charts/lib/annotations.d.ts +103 -0
  196. package/dist/charts/lib/annotations.js +99 -0
  197. package/dist/charts/lib/annotations.js.map +1 -0
  198. package/dist/charts/lib/axis.d.ts +18 -0
  199. package/dist/charts/lib/axis.js +21 -0
  200. package/dist/charts/lib/axis.js.map +1 -0
  201. package/dist/charts/lib/background.d.ts +33 -0
  202. package/dist/charts/lib/background.js +173 -0
  203. package/dist/charts/lib/background.js.map +1 -0
  204. package/dist/charts/lib/brush.d.ts +94 -0
  205. package/dist/charts/lib/brush.js +535 -0
  206. package/dist/charts/lib/brush.js.map +1 -0
  207. package/dist/charts/lib/chart.d.ts +94 -0
  208. package/dist/charts/lib/chart.js +149 -0
  209. package/dist/charts/lib/chart.js.map +1 -0
  210. package/dist/charts/lib/dot.d.ts +29 -0
  211. package/dist/charts/lib/dot.js +78 -0
  212. package/dist/charts/lib/dot.js.map +1 -0
  213. package/dist/charts/lib/empty.d.ts +31 -0
  214. package/dist/charts/lib/empty.js +24 -0
  215. package/dist/charts/lib/empty.js.map +1 -0
  216. package/dist/charts/lib/export.d.ts +94 -0
  217. package/dist/charts/lib/export.js +62 -0
  218. package/dist/charts/lib/export.js.map +1 -0
  219. package/dist/charts/lib/figure.d.ts +81 -0
  220. package/dist/charts/lib/figure.js +62 -0
  221. package/dist/charts/lib/figure.js.map +1 -0
  222. package/dist/charts/lib/format.d.ts +46 -0
  223. package/dist/charts/lib/format.js +56 -0
  224. package/dist/charts/lib/format.js.map +1 -0
  225. package/dist/charts/lib/legend.d.ts +45 -0
  226. package/dist/charts/lib/legend.js +117 -0
  227. package/dist/charts/lib/legend.js.map +1 -0
  228. package/dist/charts/lib/loading.d.ts +48 -0
  229. package/dist/charts/lib/loading.js +105 -0
  230. package/dist/charts/lib/loading.js.map +1 -0
  231. package/dist/charts/lib/paint.d.ts +154 -0
  232. package/dist/charts/lib/paint.js +551 -0
  233. package/dist/charts/lib/paint.js.map +1 -0
  234. package/dist/charts/lib/scale.d.ts +23 -0
  235. package/dist/charts/lib/scale.js +13 -0
  236. package/dist/charts/lib/scale.js.map +1 -0
  237. package/dist/charts/lib/selection.d.ts +20 -0
  238. package/dist/charts/lib/selection.js +18 -0
  239. package/dist/charts/lib/selection.js.map +1 -0
  240. package/dist/charts/lib/sonify-control.d.ts +163 -0
  241. package/dist/charts/lib/sonify-control.js +172 -0
  242. package/dist/charts/lib/sonify-control.js.map +1 -0
  243. package/dist/charts/lib/sonify.d.ts +248 -0
  244. package/dist/charts/lib/sonify.js +262 -0
  245. package/dist/charts/lib/sonify.js.map +1 -0
  246. package/dist/charts/lib/toolbar.d.ts +144 -0
  247. package/dist/charts/lib/toolbar.js +156 -0
  248. package/dist/charts/lib/toolbar.js.map +1 -0
  249. package/dist/charts/lib/tooltip.d.ts +59 -0
  250. package/dist/charts/lib/tooltip.js +135 -0
  251. package/dist/charts/lib/tooltip.js.map +1 -0
  252. package/dist/charts/lib/values.d.ts +56 -0
  253. package/dist/charts/lib/values.js +71 -0
  254. package/dist/charts/lib/values.js.map +1 -0
  255. package/dist/charts/lib/zoom.d.ts +139 -0
  256. package/dist/charts/lib/zoom.js +314 -0
  257. package/dist/charts/lib/zoom.js.map +1 -0
  258. package/dist/components/Accordion/Accordion.d.ts +34 -0
  259. package/dist/components/Accordion/Accordion.js +43 -0
  260. package/dist/components/Accordion/Accordion.js.map +1 -0
  261. package/dist/components/Alert/Alert.d.ts +32 -0
  262. package/dist/components/Alert/Alert.js +49 -0
  263. package/dist/components/Alert/Alert.js.map +1 -0
  264. package/dist/components/AppShell/AppShell.d.ts +58 -0
  265. package/dist/components/AppShell/AppShell.js +126 -0
  266. package/dist/components/AppShell/AppShell.js.map +1 -0
  267. package/dist/components/Article/Article.d.ts +58 -0
  268. package/dist/components/Article/Article.js +34 -0
  269. package/dist/components/Article/Article.js.map +1 -0
  270. package/dist/components/AspectRatio/AspectRatio.d.ts +46 -0
  271. package/dist/components/AspectRatio/AspectRatio.js +33 -0
  272. package/dist/components/AspectRatio/AspectRatio.js.map +1 -0
  273. package/dist/components/Avatar/Avatar.d.ts +38 -0
  274. package/dist/components/Avatar/Avatar.js +44 -0
  275. package/dist/components/Avatar/Avatar.js.map +1 -0
  276. package/dist/components/Badge/Badge.d.ts +30 -0
  277. package/dist/components/Badge/Badge.js +29 -0
  278. package/dist/components/Badge/Badge.js.map +1 -0
  279. package/dist/components/Breadcrumb/Breadcrumb.d.ts +37 -0
  280. package/dist/components/Breadcrumb/Breadcrumb.js +46 -0
  281. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
  282. package/dist/components/Button/Button.d.ts +70 -0
  283. package/dist/components/Button/Button.js +95 -0
  284. package/dist/components/Button/Button.js.map +1 -0
  285. package/dist/components/Calendar/Calendar.d.ts +54 -0
  286. package/dist/components/Calendar/Calendar.js +369 -0
  287. package/dist/components/Calendar/Calendar.js.map +1 -0
  288. package/dist/components/Card/Card.d.ts +55 -0
  289. package/dist/components/Card/Card.js +64 -0
  290. package/dist/components/Card/Card.js.map +1 -0
  291. package/dist/components/Checkbox/Checkbox.d.ts +26 -0
  292. package/dist/components/Checkbox/Checkbox.js +34 -0
  293. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  294. package/dist/components/Code/Code.d.ts +30 -0
  295. package/dist/components/Code/Code.js +21 -0
  296. package/dist/components/Code/Code.js.map +1 -0
  297. package/dist/components/CodeBlock/CodeBlock.d.ts +145 -0
  298. package/dist/components/CodeBlock/CodeBlock.js +114 -0
  299. package/dist/components/CodeBlock/CodeBlock.js.map +1 -0
  300. package/dist/components/Collapsible/Collapsible.d.ts +45 -0
  301. package/dist/components/Collapsible/Collapsible.js +60 -0
  302. package/dist/components/Collapsible/Collapsible.js.map +1 -0
  303. package/dist/components/ColorPicker/ColorPicker.d.ts +67 -0
  304. package/dist/components/ColorPicker/ColorPicker.js +334 -0
  305. package/dist/components/ColorPicker/ColorPicker.js.map +1 -0
  306. package/dist/components/Combobox/Combobox.d.ts +77 -0
  307. package/dist/components/Combobox/Combobox.js +170 -0
  308. package/dist/components/Combobox/Combobox.js.map +1 -0
  309. package/dist/components/Command/Command.d.ts +125 -0
  310. package/dist/components/Command/Command.js +204 -0
  311. package/dist/components/Command/Command.js.map +1 -0
  312. package/dist/components/ContextMenu/ContextMenu.d.ts +63 -0
  313. package/dist/components/ContextMenu/ContextMenu.js +109 -0
  314. package/dist/components/ContextMenu/ContextMenu.js.map +1 -0
  315. package/dist/components/DatePicker/DatePicker.d.ts +130 -0
  316. package/dist/components/DatePicker/DatePicker.js +257 -0
  317. package/dist/components/DatePicker/DatePicker.js.map +1 -0
  318. package/dist/components/DescriptionList/DescriptionList.d.ts +73 -0
  319. package/dist/components/DescriptionList/DescriptionList.js +35 -0
  320. package/dist/components/DescriptionList/DescriptionList.js.map +1 -0
  321. package/dist/components/Diagram/Diagram.d.ts +86 -0
  322. package/dist/components/Diagram/Diagram.js +211 -0
  323. package/dist/components/Diagram/Diagram.js.map +1 -0
  324. package/dist/components/Dialog/Dialog.d.ts +63 -0
  325. package/dist/components/Dialog/Dialog.js +90 -0
  326. package/dist/components/Dialog/Dialog.js.map +1 -0
  327. package/dist/components/DropdownMenu/DropdownMenu.d.ts +87 -0
  328. package/dist/components/DropdownMenu/DropdownMenu.js +120 -0
  329. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
  330. package/dist/components/EmptyState/EmptyState.d.ts +55 -0
  331. package/dist/components/EmptyState/EmptyState.js +32 -0
  332. package/dist/components/EmptyState/EmptyState.js.map +1 -0
  333. package/dist/components/ErrorState/ErrorState.d.ts +55 -0
  334. package/dist/components/ErrorState/ErrorState.js +41 -0
  335. package/dist/components/ErrorState/ErrorState.js.map +1 -0
  336. package/dist/components/Field/Field.d.ts +111 -0
  337. package/dist/components/Field/Field.js +95 -0
  338. package/dist/components/Field/Field.js.map +1 -0
  339. package/dist/components/Field/field-control.d.ts +31 -0
  340. package/dist/components/Field/field-control.js +12 -0
  341. package/dist/components/Field/field-control.js.map +1 -0
  342. package/dist/components/FigureBand/FigureBand.d.ts +31 -0
  343. package/dist/components/FigureBand/FigureBand.js +51 -0
  344. package/dist/components/FigureBand/FigureBand.js.map +1 -0
  345. package/dist/components/FloatingIconButton/FloatingIconButton.d.ts +29 -0
  346. package/dist/components/FloatingIconButton/FloatingIconButton.js +34 -0
  347. package/dist/components/FloatingIconButton/FloatingIconButton.js.map +1 -0
  348. package/dist/components/Heading/Heading.d.ts +62 -0
  349. package/dist/components/Heading/Heading.js +44 -0
  350. package/dist/components/Heading/Heading.js.map +1 -0
  351. package/dist/components/Input/Input.d.ts +22 -0
  352. package/dist/components/Input/Input.js +21 -0
  353. package/dist/components/Input/Input.js.map +1 -0
  354. package/dist/components/Kbd/Kbd.d.ts +27 -0
  355. package/dist/components/Kbd/Kbd.js +21 -0
  356. package/dist/components/Kbd/Kbd.js.map +1 -0
  357. package/dist/components/LinkArrow/LinkArrow.d.ts +24 -0
  358. package/dist/components/LinkArrow/LinkArrow.js +24 -0
  359. package/dist/components/LinkArrow/LinkArrow.js.map +1 -0
  360. package/dist/components/Markdown/Markdown.d.ts +139 -0
  361. package/dist/components/Markdown/Markdown.js +135 -0
  362. package/dist/components/Markdown/Markdown.js.map +1 -0
  363. package/dist/components/Markdown/inline.d.ts +29 -0
  364. package/dist/components/Markdown/inline.js +74 -0
  365. package/dist/components/Markdown/inline.js.map +1 -0
  366. package/dist/components/Markdown/nodes.d.ts +65 -0
  367. package/dist/components/Markdown/nodes.js +1 -0
  368. package/dist/components/Markdown/nodes.js.map +1 -0
  369. package/dist/components/Markdown/parse.d.ts +24 -0
  370. package/dist/components/Markdown/parse.js +110 -0
  371. package/dist/components/Markdown/parse.js.map +1 -0
  372. package/dist/components/Markdown/slug.d.ts +15 -0
  373. package/dist/components/Markdown/slug.js +7 -0
  374. package/dist/components/Markdown/slug.js.map +1 -0
  375. package/dist/components/Metric/Metric.d.ts +61 -0
  376. package/dist/components/Metric/Metric.js +51 -0
  377. package/dist/components/Metric/Metric.js.map +1 -0
  378. package/dist/components/NativeSelect/NativeSelect.d.ts +33 -0
  379. package/dist/components/NativeSelect/NativeSelect.js +44 -0
  380. package/dist/components/NativeSelect/NativeSelect.js.map +1 -0
  381. package/dist/components/NavItem/NavItem.d.ts +39 -0
  382. package/dist/components/NavItem/NavItem.js +31 -0
  383. package/dist/components/NavItem/NavItem.js.map +1 -0
  384. package/dist/components/NumberField/NumberField.d.ts +69 -0
  385. package/dist/components/NumberField/NumberField.js +162 -0
  386. package/dist/components/NumberField/NumberField.js.map +1 -0
  387. package/dist/components/PageHeader/PageHeader.d.ts +92 -0
  388. package/dist/components/PageHeader/PageHeader.js +37 -0
  389. package/dist/components/PageHeader/PageHeader.js.map +1 -0
  390. package/dist/components/Pagination/Pagination.d.ts +67 -0
  391. package/dist/components/Pagination/Pagination.js +112 -0
  392. package/dist/components/Pagination/Pagination.js.map +1 -0
  393. package/dist/components/Popover/Popover.d.ts +39 -0
  394. package/dist/components/Popover/Popover.js +57 -0
  395. package/dist/components/Popover/Popover.js.map +1 -0
  396. package/dist/components/Progress/Progress.d.ts +43 -0
  397. package/dist/components/Progress/Progress.js +57 -0
  398. package/dist/components/Progress/Progress.js.map +1 -0
  399. package/dist/components/RadioGroup/RadioGroup.d.ts +49 -0
  400. package/dist/components/RadioGroup/RadioGroup.js +53 -0
  401. package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
  402. package/dist/components/ScrollArea/ScrollArea.d.ts +46 -0
  403. package/dist/components/ScrollArea/ScrollArea.js +54 -0
  404. package/dist/components/ScrollArea/ScrollArea.js.map +1 -0
  405. package/dist/components/SearchableMenu/SearchableMenu.d.ts +68 -0
  406. package/dist/components/SearchableMenu/SearchableMenu.js +101 -0
  407. package/dist/components/SearchableMenu/SearchableMenu.js.map +1 -0
  408. package/dist/components/Select/Select.d.ts +87 -0
  409. package/dist/components/Select/Select.js +130 -0
  410. package/dist/components/Select/Select.js.map +1 -0
  411. package/dist/components/Separator/Separator.d.ts +48 -0
  412. package/dist/components/Separator/Separator.js +43 -0
  413. package/dist/components/Separator/Separator.js.map +1 -0
  414. package/dist/components/Sheet/Sheet.d.ts +43 -0
  415. package/dist/components/Sheet/Sheet.js +79 -0
  416. package/dist/components/Sheet/Sheet.js.map +1 -0
  417. package/dist/components/Sidebar/Sidebar.d.ts +357 -0
  418. package/dist/components/Sidebar/Sidebar.js +447 -0
  419. package/dist/components/Sidebar/Sidebar.js.map +1 -0
  420. package/dist/components/Skeleton/Skeleton.d.ts +70 -0
  421. package/dist/components/Skeleton/Skeleton.js +44 -0
  422. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  423. package/dist/components/Slider/Slider.d.ts +74 -0
  424. package/dist/components/Slider/Slider.js +143 -0
  425. package/dist/components/Slider/Slider.js.map +1 -0
  426. package/dist/components/Spinner/Spinner.d.ts +58 -0
  427. package/dist/components/Spinner/Spinner.js +49 -0
  428. package/dist/components/Spinner/Spinner.js.map +1 -0
  429. package/dist/components/StatusDot/StatusDot.d.ts +29 -0
  430. package/dist/components/StatusDot/StatusDot.js +44 -0
  431. package/dist/components/StatusDot/StatusDot.js.map +1 -0
  432. package/dist/components/StatusPill/StatusPill.d.ts +30 -0
  433. package/dist/components/StatusPill/StatusPill.js +37 -0
  434. package/dist/components/StatusPill/StatusPill.js.map +1 -0
  435. package/dist/components/Steps/Steps.d.ts +65 -0
  436. package/dist/components/Steps/Steps.js +25 -0
  437. package/dist/components/Steps/Steps.js.map +1 -0
  438. package/dist/components/Switch/Switch.d.ts +23 -0
  439. package/dist/components/Switch/Switch.js +23 -0
  440. package/dist/components/Switch/Switch.js.map +1 -0
  441. package/dist/components/Table/Table.d.ts +116 -0
  442. package/dist/components/Table/Table.js +137 -0
  443. package/dist/components/Table/Table.js.map +1 -0
  444. package/dist/components/Tabs/Tabs.d.ts +37 -0
  445. package/dist/components/Tabs/Tabs.js +205 -0
  446. package/dist/components/Tabs/Tabs.js.map +1 -0
  447. package/dist/components/Tag/Tag.d.ts +87 -0
  448. package/dist/components/Tag/Tag.js +62 -0
  449. package/dist/components/Tag/Tag.js.map +1 -0
  450. package/dist/components/Text/Text.d.ts +62 -0
  451. package/dist/components/Text/Text.js +30 -0
  452. package/dist/components/Text/Text.js.map +1 -0
  453. package/dist/components/Textarea/Textarea.d.ts +20 -0
  454. package/dist/components/Textarea/Textarea.js +32 -0
  455. package/dist/components/Textarea/Textarea.js.map +1 -0
  456. package/dist/components/Timestamp/Timestamp.d.ts +59 -0
  457. package/dist/components/Timestamp/Timestamp.js +56 -0
  458. package/dist/components/Timestamp/Timestamp.js.map +1 -0
  459. package/dist/components/Toast/Toast.d.ts +32 -0
  460. package/dist/components/Toast/Toast.js +64 -0
  461. package/dist/components/Toast/Toast.js.map +1 -0
  462. package/dist/components/ToggleGroup/ToggleGroup.d.ts +46 -0
  463. package/dist/components/ToggleGroup/ToggleGroup.js +88 -0
  464. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -0
  465. package/dist/components/Toolbar/Toolbar.d.ts +55 -0
  466. package/dist/components/Toolbar/Toolbar.js +43 -0
  467. package/dist/components/Toolbar/Toolbar.js.map +1 -0
  468. package/dist/components/Tooltip/Tooltip.d.ts +43 -0
  469. package/dist/components/Tooltip/Tooltip.js +40 -0
  470. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  471. package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.d.ts +55 -0
  472. package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.js +175 -0
  473. package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.js.map +1 -0
  474. package/dist/diagrams/DataflowFigure/DataflowFigure.d.ts +28 -0
  475. package/dist/diagrams/DataflowFigure/DataflowFigure.js +148 -0
  476. package/dist/diagrams/DataflowFigure/DataflowFigure.js.map +1 -0
  477. package/dist/diagrams/DiagramCanvas/DiagramCanvas.d.ts +78 -0
  478. package/dist/diagrams/DiagramCanvas/DiagramCanvas.js +229 -0
  479. package/dist/diagrams/DiagramCanvas/DiagramCanvas.js.map +1 -0
  480. package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.d.ts +106 -0
  481. package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.js +123 -0
  482. package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.js.map +1 -0
  483. package/dist/diagrams/DiagramInspector/DiagramInspector.d.ts +70 -0
  484. package/dist/diagrams/DiagramInspector/DiagramInspector.js +94 -0
  485. package/dist/diagrams/DiagramInspector/DiagramInspector.js.map +1 -0
  486. package/dist/diagrams/DiagramLegend/DiagramLegend.d.ts +42 -0
  487. package/dist/diagrams/DiagramLegend/DiagramLegend.js +35 -0
  488. package/dist/diagrams/DiagramLegend/DiagramLegend.js.map +1 -0
  489. package/dist/diagrams/DiagramMinimap/DiagramMinimap.d.ts +77 -0
  490. package/dist/diagrams/DiagramMinimap/DiagramMinimap.js +106 -0
  491. package/dist/diagrams/DiagramMinimap/DiagramMinimap.js.map +1 -0
  492. package/dist/diagrams/DiagramToolbar/DiagramToolbar.d.ts +48 -0
  493. package/dist/diagrams/DiagramToolbar/DiagramToolbar.js +53 -0
  494. package/dist/diagrams/DiagramToolbar/DiagramToolbar.js.map +1 -0
  495. package/dist/diagrams/LifecycleFigure/LifecycleFigure.d.ts +31 -0
  496. package/dist/diagrams/LifecycleFigure/LifecycleFigure.js +234 -0
  497. package/dist/diagrams/LifecycleFigure/LifecycleFigure.js.map +1 -0
  498. package/dist/diagrams/SequenceFigure/SequenceFigure.d.ts +38 -0
  499. package/dist/diagrams/SequenceFigure/SequenceFigure.js +261 -0
  500. package/dist/diagrams/SequenceFigure/SequenceFigure.js.map +1 -0
  501. package/dist/diagrams/WorkflowFigure/WorkflowFigure.d.ts +36 -0
  502. package/dist/diagrams/WorkflowFigure/WorkflowFigure.js +259 -0
  503. package/dist/diagrams/WorkflowFigure/WorkflowFigure.js.map +1 -0
  504. package/dist/diagrams/index.d.ts +17 -0
  505. package/dist/diagrams/index.js +29 -0
  506. package/dist/diagrams/index.js.map +1 -0
  507. package/dist/diagrams/lib/dev.d.ts +61 -0
  508. package/dist/diagrams/lib/dev.js +96 -0
  509. package/dist/diagrams/lib/dev.js.map +1 -0
  510. package/dist/diagrams/lib/frame.d.ts +138 -0
  511. package/dist/diagrams/lib/frame.js +131 -0
  512. package/dist/diagrams/lib/frame.js.map +1 -0
  513. package/dist/diagrams/lib/geometry.d.ts +114 -0
  514. package/dist/diagrams/lib/geometry.js +113 -0
  515. package/dist/diagrams/lib/geometry.js.map +1 -0
  516. package/dist/diagrams/lib/legend.d.ts +32 -0
  517. package/dist/diagrams/lib/legend.js +84 -0
  518. package/dist/diagrams/lib/legend.js.map +1 -0
  519. package/dist/diagrams/lib/marks.d.ts +207 -0
  520. package/dist/diagrams/lib/marks.js +480 -0
  521. package/dist/diagrams/lib/marks.js.map +1 -0
  522. package/dist/diagrams/lib/route.d.ts +106 -0
  523. package/dist/diagrams/lib/route.js +201 -0
  524. package/dist/diagrams/lib/route.js.map +1 -0
  525. package/dist/diagrams/lib/wires.d.ts +59 -0
  526. package/dist/diagrams/lib/wires.js +94 -0
  527. package/dist/diagrams/lib/wires.js.map +1 -0
  528. package/dist/diagrams/spec.d.ts +405 -0
  529. package/dist/diagrams/spec.js +1 -0
  530. package/dist/diagrams/spec.js.map +1 -0
  531. package/dist/fonts/hanken-grotesk-300.woff2 +0 -0
  532. package/dist/fonts/hanken-grotesk-400.woff2 +0 -0
  533. package/dist/fonts/hanken-grotesk-500.woff2 +0 -0
  534. package/dist/fonts/hanken-grotesk-600.woff2 +0 -0
  535. package/dist/fonts/hanken-grotesk-700.woff2 +0 -0
  536. package/dist/fonts/ibm-plex-mono-400.woff2 +0 -0
  537. package/dist/fonts/ibm-plex-mono-500.woff2 +0 -0
  538. package/dist/fonts/ibm-plex-mono-600.woff2 +0 -0
  539. package/dist/fonts/newsreader-300.woff2 +0 -0
  540. package/dist/fonts/newsreader-400.woff2 +0 -0
  541. package/dist/fonts/newsreader-500.woff2 +0 -0
  542. package/dist/fonts/newsreader-600.woff2 +0 -0
  543. package/dist/fonts.css +96 -0
  544. package/dist/index.d.ts +97 -0
  545. package/dist/index.js +80 -0
  546. package/dist/index.js.map +1 -0
  547. package/dist/keyframes.css +300 -0
  548. package/dist/lib/cn.d.ts +21 -0
  549. package/dist/lib/cn.js +9 -0
  550. package/dist/lib/cn.js.map +1 -0
  551. package/dist/lib/color.d.ts +80 -0
  552. package/dist/lib/color.js +189 -0
  553. package/dist/lib/color.js.map +1 -0
  554. package/dist/lib/control.d.ts +32 -0
  555. package/dist/lib/control.js +14 -0
  556. package/dist/lib/control.js.map +1 -0
  557. package/dist/lib/index.d.ts +4 -0
  558. package/dist/lib/index.js +11 -0
  559. package/dist/lib/index.js.map +1 -0
  560. package/dist/lib/numeric.d.ts +35 -0
  561. package/dist/lib/numeric.js +29 -0
  562. package/dist/lib/numeric.js.map +1 -0
  563. package/dist/lib/overlay-container.d.ts +48 -0
  564. package/dist/lib/overlay-container.js +15 -0
  565. package/dist/lib/overlay-container.js.map +1 -0
  566. package/dist/lib/slot-content.d.ts +8 -0
  567. package/dist/lib/slot-content.js +17 -0
  568. package/dist/lib/slot-content.js.map +1 -0
  569. package/dist/lib/step-rail.d.ts +45 -0
  570. package/dist/lib/step-rail.js +47 -0
  571. package/dist/lib/step-rail.js.map +1 -0
  572. package/dist/lib/svg-export.d.ts +138 -0
  573. package/dist/lib/svg-export.js +198 -0
  574. package/dist/lib/svg-export.js.map +1 -0
  575. package/dist/lib/useClipboardCopy.d.ts +30 -0
  576. package/dist/lib/useClipboardCopy.js +37 -0
  577. package/dist/lib/useClipboardCopy.js.map +1 -0
  578. package/dist/lib/useSelectionIndicator.d.ts +29 -0
  579. package/dist/lib/useSelectionIndicator.js +49 -0
  580. package/dist/lib/useSelectionIndicator.js.map +1 -0
  581. package/dist/lib/warn.d.ts +73 -0
  582. package/dist/lib/warn.js +38 -0
  583. package/dist/lib/warn.js.map +1 -0
  584. package/dist/semantic.css +200 -0
  585. package/dist/styles.css +98 -0
  586. package/dist/themes.css +607 -0
  587. package/dist/tokens/brand.d.ts +47 -0
  588. package/dist/tokens/brand.js +38 -0
  589. package/dist/tokens/brand.js.map +1 -0
  590. package/dist/tokens.css +666 -0
  591. package/dist/tokens.d.ts +205 -0
  592. package/dist/tokens.js +1056 -0
  593. package/dist/tokens.json +1055 -0
  594. package/dist/website/Actions/Actions.d.ts +34 -0
  595. package/dist/website/Actions/Actions.js +29 -0
  596. package/dist/website/Actions/Actions.js.map +1 -0
  597. package/dist/website/Collection/Collection.d.ts +128 -0
  598. package/dist/website/Collection/Collection.js +162 -0
  599. package/dist/website/Collection/Collection.js.map +1 -0
  600. package/dist/website/Contact/Contact.d.ts +87 -0
  601. package/dist/website/Contact/Contact.js +94 -0
  602. package/dist/website/Contact/Contact.js.map +1 -0
  603. package/dist/website/Content/CodePanel.d.ts +27 -0
  604. package/dist/website/Content/CodePanel.js +30 -0
  605. package/dist/website/Content/CodePanel.js.map +1 -0
  606. package/dist/website/Content/Content.d.ts +29 -0
  607. package/dist/website/Content/Content.js +38 -0
  608. package/dist/website/Content/Content.js.map +1 -0
  609. package/dist/website/Conversation/Conversation.d.ts +193 -0
  610. package/dist/website/Conversation/Conversation.js +252 -0
  611. package/dist/website/Conversation/Conversation.js.map +1 -0
  612. package/dist/website/Evidence/Evidence.d.ts +116 -0
  613. package/dist/website/Evidence/Evidence.js +142 -0
  614. package/dist/website/Evidence/Evidence.js.map +1 -0
  615. package/dist/website/Media/Media.d.ts +173 -0
  616. package/dist/website/Media/Media.js +225 -0
  617. package/dist/website/Media/Media.js.map +1 -0
  618. package/dist/website/Media/MediaLightbox.d.ts +18 -0
  619. package/dist/website/Media/MediaLightbox.js +38 -0
  620. package/dist/website/Media/MediaLightbox.js.map +1 -0
  621. package/dist/website/Metrics/Metrics.d.ts +74 -0
  622. package/dist/website/Metrics/Metrics.js +96 -0
  623. package/dist/website/Metrics/Metrics.js.map +1 -0
  624. package/dist/website/Music/Music.d.ts +60 -0
  625. package/dist/website/Music/Music.js +80 -0
  626. package/dist/website/Music/Music.js.map +1 -0
  627. package/dist/website/Portfolio/FrameLayout.d.ts +9 -0
  628. package/dist/website/Portfolio/FrameLayout.js +42 -0
  629. package/dist/website/Portfolio/FrameLayout.js.map +1 -0
  630. package/dist/website/Portfolio/Portfolio.d.ts +49 -0
  631. package/dist/website/Portfolio/Portfolio.js +66 -0
  632. package/dist/website/Portfolio/Portfolio.js.map +1 -0
  633. package/dist/website/Portfolio/QuestionCard.d.ts +22 -0
  634. package/dist/website/Portfolio/QuestionCard.js +33 -0
  635. package/dist/website/Portfolio/QuestionCard.js.map +1 -0
  636. package/dist/website/PortfolioIndex/PortfolioIndex.d.ts +21 -0
  637. package/dist/website/PortfolioIndex/PortfolioIndex.js +31 -0
  638. package/dist/website/PortfolioIndex/PortfolioIndex.js.map +1 -0
  639. package/dist/website/Reading/Reading.d.ts +203 -0
  640. package/dist/website/Reading/Reading.js +357 -0
  641. package/dist/website/Reading/Reading.js.map +1 -0
  642. package/dist/website/Recovery/Recovery.d.ts +39 -0
  643. package/dist/website/Recovery/Recovery.js +96 -0
  644. package/dist/website/Recovery/Recovery.js.map +1 -0
  645. package/dist/website/SearchPalette/SearchPalette.d.ts +59 -0
  646. package/dist/website/SearchPalette/SearchPalette.js +120 -0
  647. package/dist/website/SearchPalette/SearchPalette.js.map +1 -0
  648. package/dist/website/SiteNavigation/SiteNavigation.d.ts +46 -0
  649. package/dist/website/SiteNavigation/SiteNavigation.js +101 -0
  650. package/dist/website/SiteNavigation/SiteNavigation.js.map +1 -0
  651. package/dist/website/SiteShell/SiteShell.d.ts +45 -0
  652. package/dist/website/SiteShell/SiteShell.js +46 -0
  653. package/dist/website/SiteShell/SiteShell.js.map +1 -0
  654. package/dist/website/Timeline/Timeline.d.ts +80 -0
  655. package/dist/website/Timeline/Timeline.js +99 -0
  656. package/dist/website/Timeline/Timeline.js.map +1 -0
  657. package/dist/website/Workbench/Chronology.d.ts +32 -0
  658. package/dist/website/Workbench/Chronology.js +32 -0
  659. package/dist/website/Workbench/Chronology.js.map +1 -0
  660. package/dist/website/Workbench/ContactRow.d.ts +13 -0
  661. package/dist/website/Workbench/ContactRow.js +11 -0
  662. package/dist/website/Workbench/ContactRow.js.map +1 -0
  663. package/dist/website/Workbench/PhotoMosaic.d.ts +13 -0
  664. package/dist/website/Workbench/PhotoMosaic.js +15 -0
  665. package/dist/website/Workbench/PhotoMosaic.js.map +1 -0
  666. package/dist/website/Workbench/Reveal.d.ts +19 -0
  667. package/dist/website/Workbench/Reveal.js +29 -0
  668. package/dist/website/Workbench/Reveal.js.map +1 -0
  669. package/dist/website/Workbench/ToolStrip.d.ts +18 -0
  670. package/dist/website/Workbench/ToolStrip.js +15 -0
  671. package/dist/website/Workbench/ToolStrip.js.map +1 -0
  672. package/dist/website/Workbench/Workbench.d.ts +23 -0
  673. package/dist/website/Workbench/Workbench.js +22 -0
  674. package/dist/website/Workbench/Workbench.js.map +1 -0
  675. package/dist/website/Workbench/WorkbenchCard.d.ts +29 -0
  676. package/dist/website/Workbench/WorkbenchCard.js +21 -0
  677. package/dist/website/Workbench/WorkbenchCard.js.map +1 -0
  678. package/dist/website/Workbench/WorkbenchEntries.d.ts +22 -0
  679. package/dist/website/Workbench/WorkbenchEntries.js +24 -0
  680. package/dist/website/Workbench/WorkbenchEntries.js.map +1 -0
  681. package/dist/website/Workbench/WorkbenchFigure.d.ts +20 -0
  682. package/dist/website/Workbench/WorkbenchFigure.js +15 -0
  683. package/dist/website/Workbench/WorkbenchFigure.js.map +1 -0
  684. package/dist/website/Workbench/WorkbenchHero.d.ts +24 -0
  685. package/dist/website/Workbench/WorkbenchHero.js +24 -0
  686. package/dist/website/Workbench/WorkbenchHero.js.map +1 -0
  687. package/dist/website/Workbench/theme.d.ts +22 -0
  688. package/dist/website/Workbench/theme.js +12 -0
  689. package/dist/website/Workbench/theme.js.map +1 -0
  690. package/dist/website/index.d.ts +38 -0
  691. package/dist/website/index.js +32 -0
  692. package/dist/website/index.js.map +1 -0
  693. package/dist/website-actions.css +6 -0
  694. package/dist/website-base.css +46 -0
  695. package/dist/website-collection.css +89 -0
  696. package/dist/website-contact.css +29 -0
  697. package/dist/website-content.css +20 -0
  698. package/dist/website-controls.css +91 -0
  699. package/dist/website-conversation.css +115 -0
  700. package/dist/website-evidence.css +56 -0
  701. package/dist/website-media.css +227 -0
  702. package/dist/website-metrics.css +15 -0
  703. package/dist/website-music.css +27 -0
  704. package/dist/website-portfolio.css +94 -0
  705. package/dist/website-reading.css +159 -0
  706. package/dist/website-recovery.css +28 -0
  707. package/dist/website-search.css +26 -0
  708. package/dist/website-shell.css +89 -0
  709. package/dist/website-timeline.css +43 -0
  710. package/dist/website-workbench.css +162 -0
  711. package/dist/website.css +26 -0
  712. package/llms.txt +35 -0
  713. package/package.json +163 -5
  714. package/skills/folio-design/SKILL.md +228 -0
  715. package/skills/folio-design/evals/claims.json +95 -0
  716. package/skills/folio-design/evals/evals.json +84 -0
  717. package/skills/folio-design/rules/a11y.md +167 -0
  718. package/skills/folio-design/rules/composition.md +108 -0
  719. package/skills/folio-design/rules/forms.md +135 -0
  720. package/skills/folio-design/rules/naming.md +155 -0
  721. package/skills/folio-design/rules/tokens.md +135 -0
@@ -0,0 +1,607 @@
1
+ /*
2
+ * The theming axes.
3
+ *
4
+ * Seven of them, each an attribute, each re-pointing tokens that already
5
+ * exist. No component is touched by any of it, and nothing here introduces a
6
+ * token — a theme that needed a new token would be a second design system
7
+ * wearing the first one's name.
8
+ *
9
+ * The axes are independent on purpose. A named preset is a combination, not a
10
+ * block of its own, so "warm surface with sharp corners" is reachable even
11
+ * though nobody shipped it as a preset.
12
+ *
13
+ * Every axis has an unset default: the White Reset is what you get by writing
14
+ * no attribute at all.
15
+ */
16
+
17
+ /* ─── Accent ───────────────────────────────────────────────────────────────
18
+ The one token every other axis was written to prove could move.
19
+
20
+ Law 7 says the accent IS ink, and this does not walk that back — `ink` is
21
+ the default and it is the system as it ships. What this axis demonstrates is
22
+ the thing underneath the law: every component reads `--accent`, which points
23
+ at `--red`, which points at `--clay`. ONE token. A consumer whose brand is
24
+ not monochrome re-points it and the whole system follows without a component
25
+ being touched.
26
+
27
+ This lived in the documentation site's own stylesheet for four releases,
28
+ which meant the site could show it and no consumer could have it — and the
29
+ package meanwhile said in three places that no such attribute existed. It
30
+ does now, and it is derived from these selectors like every other axis.
31
+
32
+ Two values per accent, not one. `--clay` is the MARK — a fill, a rule, a
33
+ pill — and `--clay-ink` is the same colour set as TEXT, which has to clear
34
+ AA against paper and therefore cannot always be the same hex. That
35
+ distinction already existed in the token layer for exactly this reason;
36
+ these are the first accents to need it.
37
+
38
+ Measured with the WCAG 2.x relative-luminance formula, against the White
39
+ Reset's own grounds (`--paper` #ffffff light, #0d0d0d dark). AA is 4.5:1 for
40
+ text and 3:1 for a UI mark; the third column is `--clay-ink` over the 10% /
41
+ 14% wash `--accent-on-muted` is printed on.
42
+
43
+ accent light: mark / ink / on wash dark: mark / ink / on wash
44
+ ink 19.03 19.03 15.39 17.65 17.65 12.51
45
+ clay 7.45 8.77 7.51 7.41 9.13 7.51
46
+ forest 7.59 8.66 7.44 8.91 10.52 8.42
47
+ cobalt 8.05 9.21 7.86 8.41 10.23 8.27
48
+ plum 8.49 9.55 8.12 8.74 10.43 8.41
49
+ moss 5.80 8.30 7.24 8.76 11.32 9.06
50
+ ember 5.46 6.34 5.47 7.81 8.86 7.31
51
+
52
+ `--accent-foreground` resolves to `--paper`, so paper printed ON the accent
53
+ fill is the mark column read the other way up. */
54
+
55
+ /* The default, NAMED. "Ink" used to be spelled "write no attribute", which
56
+ works exactly once, at the root: inside an element that already carries an
57
+ accent, an unset accent is not ink, it is whatever the ancestor said. */
58
+ [data-accent='ink'] {
59
+ --clay: var(--ink);
60
+ --clay-ink: var(--ink);
61
+ --red-soft: rgba(16, 16, 16, 0.07);
62
+ }
63
+
64
+ /* The warm editorial red the site carried before the White Reset. */
65
+ [data-accent='clay'] {
66
+ --clay: #8a3f24;
67
+ --clay-ink: #7a3720;
68
+ --red-soft: rgba(138, 63, 36, 0.1);
69
+ }
70
+ /* A cool neutral green — quiet enough to sit under a lot of type. */
71
+ [data-accent='forest'] {
72
+ --clay: #2f5d42;
73
+ --clay-ink: #2a5439;
74
+ --red-soft: rgba(47, 93, 66, 0.1);
75
+ }
76
+ /* The most conventional software blue that still clears AA on paper. */
77
+ [data-accent='cobalt'] {
78
+ --clay: #2b4c9b;
79
+ --clay-ink: #27448a;
80
+ --red-soft: rgba(43, 76, 155, 0.1);
81
+ }
82
+ /* A darker chroma for a brand that wants presence without heat. */
83
+ [data-accent='plum'] {
84
+ --clay: #6b3a72;
85
+ --clay-ink: #613468;
86
+ --red-soft: rgba(107, 58, 114, 0.1);
87
+ }
88
+ /* A green-grey with almost no chroma left in it, for a dense working screen
89
+ where the accent has to mark a choice without becoming the loudest thing on
90
+ the page. The lowest-contrast mark of the six on paper, and deliberately so:
91
+ it is a rule and a fill more often than it is a word. */
92
+ [data-accent='moss'] {
93
+ --clay: #566b52;
94
+ --clay-ink: #41533e;
95
+ --red-soft: rgba(86, 107, 82, 0.1);
96
+ }
97
+
98
+ /* A burnt orange for the Workbench preset: it marks a link or the current
99
+ state and nothing else, so it can carry heat without competing with the
100
+ photographs it sits beside. The lowest-contrast mark after moss; its
101
+ ink is a step darker so a link on a stone panel still clears AA. */
102
+ [data-accent='ember'] {
103
+ --clay: #b8430a;
104
+ --clay-ink: #a83c08;
105
+ --red-soft: rgba(184, 67, 10, 0.1);
106
+ }
107
+
108
+ /* Re-derives the chain, on any element that names an accent.
109
+
110
+ A `var()` is substituted where it is DECLARED, not where it is read:
111
+ `--accent: var(--red)` is written on `:root` in `semantic.css`, so it
112
+ computes THERE — against the root's `--clay` — and what inherits down is the
113
+ answer, not the question. Re-pointing `--clay` on a descendant therefore
114
+ changed nothing at all, and every accent swatch, preview and thumbnail on a
115
+ themes rail painted the accent of the page rather than its own.
116
+
117
+ `--on-red` is here for the same reason: it resolves to `--paper`, so an
118
+ element naming its own surface needs the foreground re-derived against that
119
+ surface rather than against the document's. */
120
+ [data-accent] {
121
+ --red: var(--clay);
122
+ --red-ink: var(--clay);
123
+ --on-red: var(--paper);
124
+ --accent: var(--red);
125
+ --accent-hover: var(--red-ink);
126
+ --accent-muted: var(--red-soft);
127
+ --accent-wash: var(--red-soft);
128
+ --accent-foreground: var(--on-red);
129
+ --accent-on-dark: var(--red);
130
+ --accent-on-muted: var(--red-ink);
131
+ --action: var(--red);
132
+ --action-foreground: var(--on-red);
133
+ }
134
+
135
+ /* On the dark ground the same hues have to come UP to clear AA, not down. An
136
+ accent with only a light value fails contrast the moment someone switches
137
+ mode — which is why the token layer swaps by value rather than by block. */
138
+
139
+ [data-mode='dark'][data-accent='ink'],
140
+ [data-mode='dark'] [data-accent='ink'] {
141
+ --clay: var(--ink);
142
+ --clay-ink: var(--ink);
143
+ --red-soft: rgba(244, 244, 242, 0.12);
144
+ }
145
+
146
+ [data-mode='dark'][data-accent='clay'],
147
+ [data-mode='dark'] [data-accent='clay'] {
148
+ --clay: #e08a68;
149
+ --clay-ink: #e8a184;
150
+ --red-soft: rgba(224, 138, 104, 0.14);
151
+ }
152
+ [data-mode='dark'][data-accent='forest'],
153
+ [data-mode='dark'] [data-accent='forest'] {
154
+ --clay: #7fbd97;
155
+ --clay-ink: #98caab;
156
+ --red-soft: rgba(127, 189, 151, 0.14);
157
+ }
158
+ [data-mode='dark'][data-accent='cobalt'],
159
+ [data-mode='dark'] [data-accent='cobalt'] {
160
+ --clay: #8aaaf0;
161
+ --clay-ink: #a3bcf4;
162
+ --red-soft: rgba(138, 170, 240, 0.14);
163
+ }
164
+ [data-mode='dark'][data-accent='plum'],
165
+ [data-mode='dark'] [data-accent='plum'] {
166
+ --clay: #cf9dd6;
167
+ --clay-ink: #dab0e0;
168
+ --red-soft: rgba(207, 157, 214, 0.14);
169
+ }
170
+ [data-mode='dark'][data-accent='moss'],
171
+ [data-mode='dark'] [data-accent='moss'] {
172
+ --clay: #9cb597;
173
+ --clay-ink: #b8cbb3;
174
+ --red-soft: rgba(156, 181, 151, 0.14);
175
+ }
176
+ [data-mode='dark'][data-accent='ember'],
177
+ [data-mode='dark'] [data-accent='ember'] {
178
+ --clay: #f08a4b;
179
+ --clay-ink: #f29a62;
180
+ --red-soft: rgba(240, 138, 75, 0.14);
181
+ }
182
+
183
+ /* ─── Action ───────────────────────────────────────────────────────────────
184
+ What the primary button is filled with. By default it is the accent, which
185
+ is what law 7 asks for. `ink` takes the primary action back to the page's
186
+ own ink while the accent keeps marking links and the current state — the
187
+ Workbench preset's split, where a burnt-orange button would be the loudest
188
+ thing on a page of photographs. Declared after the accent block so it wins
189
+ on the same element, and re-derived on it for the same reason that block
190
+ is: a `var()` resolves where it is written. Ink and paper already swap in
191
+ dark mode, so this axis needs no dark block of its own. */
192
+ [data-action='accent'] {
193
+ --action: var(--accent);
194
+ --action-foreground: var(--accent-foreground);
195
+ }
196
+ [data-action='ink'] {
197
+ --action: var(--ink);
198
+ --action-foreground: var(--paper);
199
+ }
200
+
201
+ /* ─── Surface ──────────────────────────────────────────────────────────────
202
+ The ground and its two steps. Law 8 still holds — dark is a value swap, so
203
+ each surface defines both and neither is a separate palette.
204
+
205
+ THE RULES ARE PART OF THE SURFACE, and for four releases only half of them
206
+ swapped. `warm` and `cool` set `--rule` and `--rule-2` unqualified by mode
207
+ and then restated only the three grounds in dark, so the LIGHT hairline
208
+ survived onto the dark page: #e8e4da at 14.86:1 against warm's own dark
209
+ `--paper`, #e4e9ee at 15.82:1 against cool's, where the neutral dark rule
210
+ sits at 1.42:1. Every border and divider on the page came out near-white —
211
+ measured in a console on this package at up to 174 such elements on one of
212
+ 33 routes. `glass` restates both and was never affected.
213
+
214
+ The dark values are built the way `tokens.css` builds its own: the system's
215
+ near-white at an alpha over whatever ground is under it, at the SAME alphas,
216
+ 0.14 and 0.26, because the alpha is what a rule's WEIGHT is. Composited on
217
+ each surface's own dark `--paper` that is 1.45 / 2.19 on warm and
218
+ 1.42 / 2.17 on cool against the root's 1.42 / 2.16, at ΔE 13.5 / 23.9 and
219
+ 13.8 / 24.5 against its 13.8 / 24.6 (OKLab ×100). Same rule, same weight, a
220
+ differently tinted ground.
221
+
222
+ What moves is the near-white. `#f4f4f2` held at its own lightness (L 0.967)
223
+ and turned onto the surface's dark hue — 84.6° warm and 258.4° cool, the hue
224
+ `--paper`, `--paper-2` and `--stone` already carry there — at the chroma that
225
+ surface's LIGHT `--rule` carries (C 0.0141 and 0.0087). Tinting it is not
226
+ decoration: the light halves ladder chroma UP with rule weight, warm running
227
+ C 0.0111 at `--stone`, 0.0141 at `--rule` and 0.0185 at `--rule-2`, and the
228
+ root's neutral ink inverts that on the dark ground — at 26% it washes the
229
+ ground's tint out, leaving warm's heaviest rule at C 0.0075 over a `--stone`
230
+ of C 0.0103, the least warm thing on a warm page. Tinted, it lands at
231
+ C 0.0109, on the ground's own hue.
232
+
233
+ Not restated under forced colours, unlike the accent below. `tokens.css`
234
+ does not collapse `--rule` there because it does not have to: a border is an
235
+ element's own colour and the browser remaps it, and nothing in the package
236
+ draws these two into an SVG or a `color-mix()`, which is the gap the accent
237
+ block exists to close. */
238
+
239
+ [data-surface='warm'] {
240
+ --paper: #fdfcf9;
241
+ --paper-2: #f6f4ee;
242
+ --stone: #efece4;
243
+ --rule: #e8e4da;
244
+ --rule-2: #d8d3c6;
245
+ }
246
+ [data-mode='dark'][data-surface='warm'],
247
+ [data-mode='dark'] [data-surface='warm'] {
248
+ --paper: #12110f;
249
+ --paper-2: #1a1814;
250
+ --stone: #221f1a;
251
+ /* #f4f4f2 at L 0.967, hue 84.6°, C 0.0143 — warm's own hue at the chroma its
252
+ light `--rule` carries. */
253
+ --rule: rgba(248, 243, 233, 0.14);
254
+ --rule-2: rgba(248, 243, 233, 0.26);
255
+ }
256
+
257
+ [data-surface='cool'] {
258
+ --paper: #fcfdfe;
259
+ --paper-2: #f2f5f8;
260
+ --stone: #eceff3;
261
+ --rule: #e4e9ee;
262
+ --rule-2: #d2d9e1;
263
+ }
264
+ [data-mode='dark'][data-surface='cool'],
265
+ [data-mode='dark'] [data-surface='cool'] {
266
+ --paper: #0c0e11;
267
+ --paper-2: #14171b;
268
+ --stone: #1c2026;
269
+ /* The same construction on cool's hue, 258.4°, at C 0.0091. */
270
+ --rule: rgba(240, 244, 250, 0.14);
271
+ --rule-2: rgba(240, 244, 250, 0.26);
272
+ }
273
+
274
+ /* Linen, the Workbench ground. Unlike `warm` and `cool` it also moves the
275
+ three text steps, because the preset's warmth is carried by the ink as much
276
+ as by the paper: a neutral #101010 on a linen ground reads as a cold page
277
+ with a tinted background. The text steps keep the root's ladder — ink,
278
+ a secondary step, and an AA floor — measured on every linen ground:
279
+ light ink 14.33 / 13.60 / 12.42, --ink-2 8.13 / 7.72 / 7.05, --ink-3-aa
280
+ 6.15 / 5.84 / 5.33 against paper / paper-2 / stone; dark ink 15.57 /
281
+ 14.44 / 13.15, --ink-2 9.67 / 8.96 / 8.16, --ink-3-aa 7.18 / 6.66 / 6.07.
282
+ Rules are the ink itself at the root's two weights, so a hairline stays
283
+ the colour of the type it separates. */
284
+ [data-surface='linen'] {
285
+ --paper: #f7f7f4;
286
+ --paper-2: #f2f1ed;
287
+ --stone: #e8e7e2;
288
+ --rule: rgba(38, 37, 30, 0.1);
289
+ --rule-2: rgba(38, 37, 30, 0.2);
290
+ --ink: #26251e;
291
+ --ink-2: #4d4b44;
292
+ --ink-3: rgba(38, 37, 30, 0.55);
293
+ --ink-3-aa: #5f5d55;
294
+ }
295
+ [data-mode='dark'][data-surface='linen'],
296
+ [data-mode='dark'] [data-surface='linen'] {
297
+ --paper: #14130f;
298
+ --paper-2: #1c1b17;
299
+ --stone: #25231e;
300
+ --rule: rgba(236, 235, 230, 0.14);
301
+ --rule-2: rgba(236, 235, 230, 0.26);
302
+ --ink: #ecebe6;
303
+ --ink-2: #bdbbb3;
304
+ --ink-3: rgba(236, 235, 230, 0.55);
305
+ --ink-3-aa: #a3a199;
306
+ }
307
+
308
+ /* Glass, and the one place this system allows a blur.
309
+ *
310
+ * Law 2 says depth is a hairline and never a blur, and this does not break it:
311
+ * the blur is not UNDER a surface pretending to be a shadow, it is BEHIND one,
312
+ * which is a different claim. A shadow says "this is raised above the page"; a
313
+ * frosted panel says "the page is still there, and you are looking through
314
+ * something at it". The first is a fiction about light the White Reset has no
315
+ * source for. The second is a material, and it is honest about what it costs:
316
+ * only surfaces that actually float get it, because a card on the page ground
317
+ * has nothing behind it and would be blurring its own background.
318
+ *
319
+ * The panel's own edge is brighter than the page's rules on purpose. Glass has
320
+ * a specular edge — it is the one cue that says the surface is a sheet rather
321
+ * than a hole, and without it a translucent panel reads as a smudge.
322
+ */
323
+
324
+ [data-surface='glass'] {
325
+ --paper: #f7f8fa;
326
+ --paper-2: #eef0f4;
327
+ --stone: #e7eaf0;
328
+ --rule: #e2e5ec;
329
+ --rule-2: #ced3dd;
330
+
331
+ --panel-bg: color-mix(in srgb, #ffffff 62%, transparent);
332
+ --panel-border: color-mix(in srgb, #ffffff 85%, transparent);
333
+ /* Saturation as well as blur. A blur alone greys whatever is behind it,
334
+ because averaging colour is what a blur does; pushing saturation back is
335
+ what makes the result read as glass rather than as fog. */
336
+ --panel-filter: blur(20px) saturate(180%);
337
+ }
338
+ [data-mode='dark'][data-surface='glass'],
339
+ [data-mode='dark'] [data-surface='glass'] {
340
+ --paper: #0e1013;
341
+ --paper-2: #16191e;
342
+ --stone: #1d2127;
343
+ --rule: rgba(244, 244, 242, 0.12);
344
+ --rule-2: rgba(244, 244, 242, 0.22);
345
+
346
+ --panel-bg: color-mix(in srgb, #1b1f26 62%, transparent);
347
+ --panel-border: color-mix(in srgb, #ffffff 16%, transparent);
348
+ --panel-filter: blur(20px) saturate(160%);
349
+ }
350
+
351
+ /* ─── Radius ───────────────────────────────────────────────────────────────
352
+ One number, not four.
353
+
354
+ This axis used to re-type every step, which let the ladder go out of
355
+ proportion with itself — and a corner nested inside another corner is only
356
+ ever right when the two are in proportion. The factor scales the whole
357
+ ladder, the pill included, so `sharp` means square everywhere a corner is a
358
+ corner: a square theme that left every button a capsule was not a square
359
+ theme. A true circle is geometry and is not on this axis at all. */
360
+
361
+ [data-radius='sharp'] {
362
+ --radius-factor: 0;
363
+ }
364
+ [data-radius='round'] {
365
+ --radius-factor: 2;
366
+ }
367
+
368
+ /* ─── Rules ────────────────────────────────────────────────────────────────
369
+ How much the system draws its own edges. `firm` is the setting for a dense
370
+ console; `quiet` leans on the surface steps and is what a reading page
371
+ wants. */
372
+
373
+ [data-rules='firm'] {
374
+ --rule: #cfccc4;
375
+ --rule-2: #a8a49a;
376
+ }
377
+ [data-mode='dark'][data-rules='firm'],
378
+ [data-mode='dark'] [data-rules='firm'] {
379
+ --rule: rgba(244, 244, 242, 0.28);
380
+ --rule-2: rgba(244, 244, 242, 0.46);
381
+ }
382
+
383
+ [data-rules='quiet'] {
384
+ --rule: #f4f2ee;
385
+ --rule-2: #e8e5df;
386
+ }
387
+ [data-mode='dark'][data-rules='quiet'],
388
+ [data-mode='dark'] [data-rules='quiet'] {
389
+ --rule: rgba(244, 244, 242, 0.08);
390
+ --rule-2: rgba(244, 244, 242, 0.15);
391
+ }
392
+
393
+ /* ─── Type ─────────────────────────────────────────────────────────────────
394
+ Which face carries a heading. The ramp itself does not move: the steps are a
395
+ hierarchy, and a theme that re-sized them would be re-deciding the
396
+ hierarchy rather than re-dressing it. */
397
+
398
+ /* The default, named. It restates the two role tokens rather than any face:
399
+ `index.css` decides what `--sans` and `--serif` are, and this only says which
400
+ role each one plays — so there is no list of families to drift. */
401
+ [data-type='editorial'] {
402
+ --font-sans: var(--sans);
403
+ --font-heading: var(--serif);
404
+ }
405
+
406
+ [data-type='grotesk'] {
407
+ --font-heading: var(--sans);
408
+ }
409
+ [data-type='bookish'] {
410
+ --font-sans: var(--serif);
411
+ --font-heading: var(--serif);
412
+ }
413
+
414
+ /* ─── Voice ────────────────────────────────────────────────────────────────
415
+ How loud the page speaks, which the type axis does not decide: that axis
416
+ picks a FACE and leaves the ramp alone. `quiet` is the Workbench setting —
417
+ page titles at roughly two-thirds of the ramp, display type at a regular
418
+ weight rather than a light one, and labels set as sentence-case sans in
419
+ place of tracked mono capitals. Body, record and item steps do not move, so
420
+ a quiet page keeps its hierarchy; only its top two steps come down. */
421
+ [data-voice='display'] {
422
+ --display-scale: 1;
423
+ --display-weight: 300;
424
+ --label-font: var(--font-mono);
425
+ --label-case: uppercase;
426
+ --label-tracking-scale: 1;
427
+ }
428
+ [data-voice='quiet'] {
429
+ --display-scale: 0.62;
430
+ --display-weight: 400;
431
+ --label-font: var(--font-sans);
432
+ --label-case: none;
433
+ --label-tracking-scale: 0;
434
+ }
435
+
436
+ /* ─── Motion ───────────────────────────────────────────────────────────────
437
+ `prefers-reduced-motion` is honoured separately and is not a theme: a
438
+ reader's stated need is not one of five looks. This axis is taste. */
439
+
440
+ [data-motion='snappy'] {
441
+ --fast: 90ms;
442
+ --mid: 140ms;
443
+ --slow: 220ms;
444
+ }
445
+ [data-motion='still'] {
446
+ --fast: 1ms;
447
+ --mid: 1ms;
448
+ --slow: 1ms;
449
+ }
450
+
451
+ /* ─── Chart palette ────────────────────────────────────────────────────────
452
+ The one axis that adds hue back, and the only sanctioned way to do it.
453
+
454
+ The White Reset's default series ramp is neutral (see tokens.css): texture
455
+ carries identity, lightness supports it. That is right for a console whose
456
+ whole page is monochrome, and wrong for a chart that has to sit beside a
457
+ product whose users already read its categories by colour. So rather than
458
+ leave that consumer hand-picking hexes into a `colors` config — which is
459
+ where an unvalidated, colour-blind-hostile palette gets born — the system
460
+ ships one, as an attribute, on the same terms as every other theme here.
461
+
462
+ These eight hues are a validated categorical set: adjacent-pair separation
463
+ ΔE 9.1 light / 8.4 dark under simulated protanopia, ΔE 19.6 / 19.3 with
464
+ normal vision (OKLab ×100), every step inside its mode's lightness band and
465
+ above the chroma floor, and every dark step at or above 3:1 on the dark
466
+ ground. The ORDER is the safety mechanism, not decoration — re-ordering
467
+ these values re-opens every adjacency and invalidates the numbers above.
468
+
469
+ Three light steps (aqua, yellow, magenta) sit below 3:1 on paper. That is a
470
+ documented relief case rather than a defect: a chart using more than two
471
+ series must show its legend, and `Chart.Legend` is required above one
472
+ series for exactly this reason.
473
+
474
+ Scoped to any container, like every other axis:
475
+ <div data-chart-palette="chroma"> */
476
+
477
+ [data-chart-palette='chroma'] {
478
+ --series-1: #2a78d6; /* blue */
479
+ --series-2: #eb6834; /* orange */
480
+ --series-3: #1baf7a; /* aqua */
481
+ --series-4: #eda100; /* yellow */
482
+ --series-5: #e87ba4; /* magenta */
483
+ --series-6: #008300; /* green */
484
+ --series-7: #4a3aa7; /* violet */
485
+ --series-8: #e34948; /* red */
486
+ }
487
+ [data-mode='dark'][data-chart-palette='chroma'],
488
+ [data-mode='dark'] [data-chart-palette='chroma'] {
489
+ /* The same eight hues re-stepped for the dark ground — not an inversion and
490
+ not a second palette. Law 8 holds: the names swap, the roles do not. */
491
+ --series-1: #3987e5;
492
+ --series-2: #d95926;
493
+ --series-3: #199e70;
494
+ --series-4: #c98500;
495
+ --series-5: #d55181;
496
+ --series-6: #008300;
497
+ --series-7: #9085e9;
498
+ --series-8: #e66767;
499
+ }
500
+
501
+ /* The third value, and the one a branded consumer actually asks for.
502
+ *
503
+ * `chroma` answers "my users read categories by colour"; this answers a
504
+ * different question — "our accent is not ink, and a chart that ignores it
505
+ * looks like someone else's chart". Those are not the same need and one value
506
+ * could not serve both: eight distinguishable hues are a categorical palette,
507
+ * and one hue laddered by lightness is a brand mark. This is the second.
508
+ *
509
+ * It derives every step from `--clay` rather than listing colours, so it works
510
+ * for an accent nobody here has seen. Relative colour syntax holds the hue and
511
+ * chroma and re-states the LIGHTNESS, which is what makes the numbers below
512
+ * portable: separation and contrast are carried almost entirely by lightness,
513
+ * so pinning it pins both regardless of which hue arrives. A chroma the
514
+ * lightness cannot hold is gamut-mapped by the browser, which reduces chroma
515
+ * and preserves L — so the ladder survives the mapping intact.
516
+ *
517
+ * The ladder is eight even steps across L 0.173–0.640 on paper and
518
+ * L 0.967–0.530 on the dark ground. The top of each band is where it is
519
+ * because of the weakest hue rather than the prettiest: at maximum chroma the
520
+ * worst hue on paper (green, ~144°) clears 3:1 up to L 0.640 and fails above
521
+ * it, and the worst on the dark ground (violet, ~294°) clears it down to
522
+ * L 0.530. Measured across all 360 hues at maximum chroma: adjacent-pair
523
+ * separation ΔE 26.7 light / 25.0 dark (OKLab ×100, against a floor of 15),
524
+ * minimum contrast 3.11 on both grounds.
525
+ *
526
+ * The interleave differs from the mono ramp's by one position, and that is the
527
+ * whole point of the value. `--series-1` sits at L 0.440 — the band the five
528
+ * shipped accents already occupy — so a one-series chart paints in a colour
529
+ * within ΔE 2 of the accent itself rather than in the accent's darkest
530
+ * possible shade. Ink stays available as `--series-2`, which is the pairing a
531
+ * two-series chart wants anyway. Every adjacent index is four ladder steps
532
+ * apart, one better than the mono ramp manages.
533
+ *
534
+ * What this is NOT is a categorical palette. One hue laddered eight ways is
535
+ * legible for two or three series and is guesswork at eight; a consumer
536
+ * plotting eight categories wants `chroma`. Texture and `Chart.Legend` carry
537
+ * identity here for the same reason they do under `mono`.
538
+ */
539
+ [data-chart-palette='accent'] {
540
+ --series-1: oklch(from var(--clay) 0.44 c h);
541
+ --series-2: oklch(from var(--clay) 0.173 c h);
542
+ --series-3: oklch(from var(--clay) 0.507 c h);
543
+ --series-4: oklch(from var(--clay) 0.24 c h);
544
+ --series-5: oklch(from var(--clay) 0.573 c h);
545
+ --series-6: oklch(from var(--clay) 0.306 c h);
546
+ --series-7: oklch(from var(--clay) 0.64 c h);
547
+ --series-8: oklch(from var(--clay) 0.373 c h);
548
+ }
549
+ [data-mode='dark'][data-chart-palette='accent'],
550
+ [data-mode='dark'] [data-chart-palette='accent'] {
551
+ /* The band mirrored, not the palette rebuilt — Law 8 again. `--clay` has
552
+ already swapped to its dark value by the time this reads it, so the only
553
+ thing restated here is where the ladder sits. */
554
+ --series-1: oklch(from var(--clay) 0.717 c h);
555
+ --series-2: oklch(from var(--clay) 0.967 c h);
556
+ --series-3: oklch(from var(--clay) 0.655 c h);
557
+ --series-4: oklch(from var(--clay) 0.905 c h);
558
+ --series-5: oklch(from var(--clay) 0.592 c h);
559
+ --series-6: oklch(from var(--clay) 0.842 c h);
560
+ --series-7: oklch(from var(--clay) 0.53 c h);
561
+ --series-8: oklch(from var(--clay) 0.78 c h);
562
+ }
563
+
564
+ /* ─── Forced colours, for every axis that carries a hue ────────────────────
565
+ `tokens.css` collapses the ramp to `CanvasText` when the reader has taken
566
+ the palette away, and it writes that on `:root` — which a palette attribute
567
+ then outranks, because an element that matches `[data-chart-palette]`
568
+ directly beats a value it merely inherits from the root, and beats it on
569
+ source order even at the root itself. So a reader in Windows High Contrast
570
+ who was on `chroma` kept getting the eight hues, which is the setting being
571
+ ignored rather than honoured.
572
+
573
+ Restated here, after the palettes, at the specificity the dark blocks use.
574
+ The values are `tokens.css`'s, unchanged — this only puts them back on top.
575
+ `--chart-*` is untouched: those declarations are already unopposed. */
576
+ @media (forced-colors: active) {
577
+ [data-chart-palette],
578
+ [data-mode][data-chart-palette],
579
+ [data-mode] [data-chart-palette] {
580
+ --series-1: CanvasText;
581
+ --series-2: CanvasText;
582
+ --series-3: CanvasText;
583
+ --series-4: CanvasText;
584
+ --series-5: CanvasText;
585
+ --series-6: CanvasText;
586
+ --series-7: CanvasText;
587
+ --series-8: CanvasText;
588
+ --series-track: Canvas;
589
+ }
590
+
591
+ /* The accent has the same problem and needs the same answer.
592
+
593
+ A browser remaps an HTML element's own colours and does not reach inside
594
+ an SVG or a `color-mix()`, so a fill drawn from `--clay` survived forced
595
+ colours as a hue nobody asked for — and `[data-accent='moss']` matches the
596
+ element directly, which outranks anything the root merely offers. Under
597
+ forced colours the system owns what a chosen state looks like, so every
598
+ accent collapses to the reader's own ink. */
599
+ [data-accent],
600
+ [data-mode][data-accent],
601
+ [data-mode] [data-accent] {
602
+ --clay: CanvasText;
603
+ --clay-ink: CanvasText;
604
+ --red-soft: Canvas;
605
+ --on-red: Canvas;
606
+ }
607
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Brand colour mirrors for surfaces that cannot read CSS custom properties —
3
+ * OpenGraph/Satori cards, build-time scripts, `theme-color` in a web manifest,
4
+ * a canvas.
5
+ *
6
+ * The RUNTIME theme lives in `styles/tokens.css` (`:root` + `[data-mode="dark"]`)
7
+ * and that is the single place to recolour the system. These literals mirror
8
+ * specific tokens; `brand.test.ts` parses the CSS and fails if the two drift,
9
+ * so this file cannot quietly fall behind the thing it mirrors.
10
+ */
11
+ declare const BRAND: {
12
+ /** = light --paper. The page ground. */
13
+ readonly paper: "#ffffff";
14
+ /** = dark --paper. The dark viewport's `theme-color`. */
15
+ readonly paperDark: "#0d0d0d";
16
+ /** = light --paper-2. One step off the ground. */
17
+ readonly paperElevated: "#f7f7f5";
18
+ /** = light --ink. The mark. */
19
+ readonly ink: "#101010";
20
+ /** = dark --ink. */
21
+ readonly inkDark: "#f4f4f2";
22
+ /** = light --ink-2. Body copy that is not the mark. */
23
+ readonly body: "#4a4a4a";
24
+ /** = light --ink-3-aa. The lightest text step that still clears AA on paper. */
25
+ readonly muted: "#5c5c5c";
26
+ /** = light --stone. The fill under a skeleton, a bar, a quiet plate. */
27
+ readonly stone: "#f2f1ee";
28
+ /** = light --rule. Hairline. */
29
+ readonly rule: "#edebe6";
30
+ /** = light --rule-2. Edge. */
31
+ readonly ruleStrong: "#dbdbd6";
32
+ /** = --feature-surface. The one reversed plate. */
33
+ readonly feature: "#262626";
34
+ /** = --on-dark. Type over a photograph — a dark ground in BOTH themes. */
35
+ readonly onDark: "#fbfbfa";
36
+ /** Byline weight over a photograph. */
37
+ readonly onDarkMuted: "rgba(251,251,250,0.82)";
38
+ /** = --photo-scrim, as an "r, g, b" tuple for a gradient. */
39
+ readonly scrimRgb: "16, 16, 16";
40
+ /** = light --ok / --warn / --danger. The only chroma in the system. */
41
+ readonly success: "#3d6b34";
42
+ readonly warning: "#8a5a00";
43
+ readonly danger: "#a83214";
44
+ };
45
+ type BrandColor = keyof typeof BRAND;
46
+
47
+ export { BRAND, type BrandColor };
@@ -0,0 +1,38 @@
1
+ const BRAND = {
2
+ /** = light --paper. The page ground. */
3
+ paper: "#ffffff",
4
+ /** = dark --paper. The dark viewport's `theme-color`. */
5
+ paperDark: "#0d0d0d",
6
+ /** = light --paper-2. One step off the ground. */
7
+ paperElevated: "#f7f7f5",
8
+ /** = light --ink. The mark. */
9
+ ink: "#101010",
10
+ /** = dark --ink. */
11
+ inkDark: "#f4f4f2",
12
+ /** = light --ink-2. Body copy that is not the mark. */
13
+ body: "#4a4a4a",
14
+ /** = light --ink-3-aa. The lightest text step that still clears AA on paper. */
15
+ muted: "#5c5c5c",
16
+ /** = light --stone. The fill under a skeleton, a bar, a quiet plate. */
17
+ stone: "#f2f1ee",
18
+ /** = light --rule. Hairline. */
19
+ rule: "#edebe6",
20
+ /** = light --rule-2. Edge. */
21
+ ruleStrong: "#dbdbd6",
22
+ /** = --feature-surface. The one reversed plate. */
23
+ feature: "#262626",
24
+ /** = --on-dark. Type over a photograph — a dark ground in BOTH themes. */
25
+ onDark: "#fbfbfa",
26
+ /** Byline weight over a photograph. */
27
+ onDarkMuted: "rgba(251,251,250,0.82)",
28
+ /** = --photo-scrim, as an "r, g, b" tuple for a gradient. */
29
+ scrimRgb: "16, 16, 16",
30
+ /** = light --ok / --warn / --danger. The only chroma in the system. */
31
+ success: "#3d6b34",
32
+ warning: "#8a5a00",
33
+ danger: "#a83214"
34
+ };
35
+ export {
36
+ BRAND
37
+ };
38
+ //# sourceMappingURL=brand.js.map