@misoto22/folio 0.0.0 → 0.16.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 (686) 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/WorkflowFigure.md +51 -0
  122. package/dist/agent/catalog.json +8006 -0
  123. package/dist/agent/index.md +182 -0
  124. package/dist/article.css +407 -0
  125. package/dist/charts/AreaChart/AreaChart.d.ts +198 -0
  126. package/dist/charts/AreaChart/AreaChart.js +479 -0
  127. package/dist/charts/AreaChart/AreaChart.js.map +1 -0
  128. package/dist/charts/BarChart/BarChart.d.ts +190 -0
  129. package/dist/charts/BarChart/BarChart.js +599 -0
  130. package/dist/charts/BarChart/BarChart.js.map +1 -0
  131. package/dist/charts/BarList/BarList.d.ts +65 -0
  132. package/dist/charts/BarList/BarList.js +79 -0
  133. package/dist/charts/BarList/BarList.js.map +1 -0
  134. package/dist/charts/BigNumber/BigNumber.d.ts +72 -0
  135. package/dist/charts/BigNumber/BigNumber.js +51 -0
  136. package/dist/charts/BigNumber/BigNumber.js.map +1 -0
  137. package/dist/charts/BoxPlot/BoxPlot.d.ts +177 -0
  138. package/dist/charts/BoxPlot/BoxPlot.js +497 -0
  139. package/dist/charts/BoxPlot/BoxPlot.js.map +1 -0
  140. package/dist/charts/BulletChart/BulletChart.d.ts +100 -0
  141. package/dist/charts/BulletChart/BulletChart.js +197 -0
  142. package/dist/charts/BulletChart/BulletChart.js.map +1 -0
  143. package/dist/charts/CalendarHeatmap/CalendarHeatmap.d.ts +106 -0
  144. package/dist/charts/CalendarHeatmap/CalendarHeatmap.js +103 -0
  145. package/dist/charts/CalendarHeatmap/CalendarHeatmap.js.map +1 -0
  146. package/dist/charts/ComposedChart/ComposedChart.d.ts +178 -0
  147. package/dist/charts/ComposedChart/ComposedChart.js +667 -0
  148. package/dist/charts/ComposedChart/ComposedChart.js.map +1 -0
  149. package/dist/charts/Facet/Facet.d.ts +240 -0
  150. package/dist/charts/Facet/Facet.js +133 -0
  151. package/dist/charts/Facet/Facet.js.map +1 -0
  152. package/dist/charts/Facet/panels.d.ts +187 -0
  153. package/dist/charts/Facet/panels.js +203 -0
  154. package/dist/charts/Facet/panels.js.map +1 -0
  155. package/dist/charts/FunnelChart/FunnelChart.d.ts +106 -0
  156. package/dist/charts/FunnelChart/FunnelChart.js +137 -0
  157. package/dist/charts/FunnelChart/FunnelChart.js.map +1 -0
  158. package/dist/charts/Heatmap/Heatmap.d.ts +101 -0
  159. package/dist/charts/Heatmap/Heatmap.js +125 -0
  160. package/dist/charts/Heatmap/Heatmap.js.map +1 -0
  161. package/dist/charts/Histogram/Histogram.d.ts +188 -0
  162. package/dist/charts/Histogram/Histogram.js +382 -0
  163. package/dist/charts/Histogram/Histogram.js.map +1 -0
  164. package/dist/charts/LineChart/LineChart.d.ts +174 -0
  165. package/dist/charts/LineChart/LineChart.js +485 -0
  166. package/dist/charts/LineChart/LineChart.js.map +1 -0
  167. package/dist/charts/PieChart/PieChart.d.ts +140 -0
  168. package/dist/charts/PieChart/PieChart.js +317 -0
  169. package/dist/charts/PieChart/PieChart.js.map +1 -0
  170. package/dist/charts/RadarChart/RadarChart.d.ts +135 -0
  171. package/dist/charts/RadarChart/RadarChart.js +303 -0
  172. package/dist/charts/RadarChart/RadarChart.js.map +1 -0
  173. package/dist/charts/RadialChart/RadialChart.d.ts +142 -0
  174. package/dist/charts/RadialChart/RadialChart.js +279 -0
  175. package/dist/charts/RadialChart/RadialChart.js.map +1 -0
  176. package/dist/charts/SankeyChart/SankeyChart.d.ts +149 -0
  177. package/dist/charts/SankeyChart/SankeyChart.js +509 -0
  178. package/dist/charts/SankeyChart/SankeyChart.js.map +1 -0
  179. package/dist/charts/ScatterChart/ScatterChart.d.ts +149 -0
  180. package/dist/charts/ScatterChart/ScatterChart.js +275 -0
  181. package/dist/charts/ScatterChart/ScatterChart.js.map +1 -0
  182. package/dist/charts/Sparkline/Sparkline.d.ts +53 -0
  183. package/dist/charts/Sparkline/Sparkline.js +95 -0
  184. package/dist/charts/Sparkline/Sparkline.js.map +1 -0
  185. package/dist/charts/TreemapChart/TreemapChart.d.ts +98 -0
  186. package/dist/charts/TreemapChart/TreemapChart.js +127 -0
  187. package/dist/charts/TreemapChart/TreemapChart.js.map +1 -0
  188. package/dist/charts/WaterfallChart/WaterfallChart.d.ts +164 -0
  189. package/dist/charts/WaterfallChart/WaterfallChart.js +321 -0
  190. package/dist/charts/WaterfallChart/WaterfallChart.js.map +1 -0
  191. package/dist/charts/index.d.ts +43 -0
  192. package/dist/charts/index.js +130 -0
  193. package/dist/charts/index.js.map +1 -0
  194. package/dist/charts/lib/annotations.d.ts +103 -0
  195. package/dist/charts/lib/annotations.js +99 -0
  196. package/dist/charts/lib/annotations.js.map +1 -0
  197. package/dist/charts/lib/axis.d.ts +18 -0
  198. package/dist/charts/lib/axis.js +21 -0
  199. package/dist/charts/lib/axis.js.map +1 -0
  200. package/dist/charts/lib/background.d.ts +33 -0
  201. package/dist/charts/lib/background.js +173 -0
  202. package/dist/charts/lib/background.js.map +1 -0
  203. package/dist/charts/lib/brush.d.ts +94 -0
  204. package/dist/charts/lib/brush.js +535 -0
  205. package/dist/charts/lib/brush.js.map +1 -0
  206. package/dist/charts/lib/chart.d.ts +94 -0
  207. package/dist/charts/lib/chart.js +149 -0
  208. package/dist/charts/lib/chart.js.map +1 -0
  209. package/dist/charts/lib/dot.d.ts +29 -0
  210. package/dist/charts/lib/dot.js +78 -0
  211. package/dist/charts/lib/dot.js.map +1 -0
  212. package/dist/charts/lib/empty.d.ts +31 -0
  213. package/dist/charts/lib/empty.js +24 -0
  214. package/dist/charts/lib/empty.js.map +1 -0
  215. package/dist/charts/lib/export.d.ts +94 -0
  216. package/dist/charts/lib/export.js +62 -0
  217. package/dist/charts/lib/export.js.map +1 -0
  218. package/dist/charts/lib/figure.d.ts +81 -0
  219. package/dist/charts/lib/figure.js +62 -0
  220. package/dist/charts/lib/figure.js.map +1 -0
  221. package/dist/charts/lib/format.d.ts +46 -0
  222. package/dist/charts/lib/format.js +56 -0
  223. package/dist/charts/lib/format.js.map +1 -0
  224. package/dist/charts/lib/legend.d.ts +45 -0
  225. package/dist/charts/lib/legend.js +117 -0
  226. package/dist/charts/lib/legend.js.map +1 -0
  227. package/dist/charts/lib/loading.d.ts +48 -0
  228. package/dist/charts/lib/loading.js +105 -0
  229. package/dist/charts/lib/loading.js.map +1 -0
  230. package/dist/charts/lib/paint.d.ts +154 -0
  231. package/dist/charts/lib/paint.js +551 -0
  232. package/dist/charts/lib/paint.js.map +1 -0
  233. package/dist/charts/lib/scale.d.ts +23 -0
  234. package/dist/charts/lib/scale.js +13 -0
  235. package/dist/charts/lib/scale.js.map +1 -0
  236. package/dist/charts/lib/selection.d.ts +20 -0
  237. package/dist/charts/lib/selection.js +18 -0
  238. package/dist/charts/lib/selection.js.map +1 -0
  239. package/dist/charts/lib/sonify-control.d.ts +163 -0
  240. package/dist/charts/lib/sonify-control.js +172 -0
  241. package/dist/charts/lib/sonify-control.js.map +1 -0
  242. package/dist/charts/lib/sonify.d.ts +248 -0
  243. package/dist/charts/lib/sonify.js +262 -0
  244. package/dist/charts/lib/sonify.js.map +1 -0
  245. package/dist/charts/lib/toolbar.d.ts +144 -0
  246. package/dist/charts/lib/toolbar.js +156 -0
  247. package/dist/charts/lib/toolbar.js.map +1 -0
  248. package/dist/charts/lib/tooltip.d.ts +59 -0
  249. package/dist/charts/lib/tooltip.js +135 -0
  250. package/dist/charts/lib/tooltip.js.map +1 -0
  251. package/dist/charts/lib/values.d.ts +56 -0
  252. package/dist/charts/lib/values.js +71 -0
  253. package/dist/charts/lib/values.js.map +1 -0
  254. package/dist/charts/lib/zoom.d.ts +139 -0
  255. package/dist/charts/lib/zoom.js +314 -0
  256. package/dist/charts/lib/zoom.js.map +1 -0
  257. package/dist/components/Accordion/Accordion.d.ts +34 -0
  258. package/dist/components/Accordion/Accordion.js +43 -0
  259. package/dist/components/Accordion/Accordion.js.map +1 -0
  260. package/dist/components/Alert/Alert.d.ts +32 -0
  261. package/dist/components/Alert/Alert.js +49 -0
  262. package/dist/components/Alert/Alert.js.map +1 -0
  263. package/dist/components/AppShell/AppShell.d.ts +58 -0
  264. package/dist/components/AppShell/AppShell.js +126 -0
  265. package/dist/components/AppShell/AppShell.js.map +1 -0
  266. package/dist/components/Article/Article.d.ts +58 -0
  267. package/dist/components/Article/Article.js +34 -0
  268. package/dist/components/Article/Article.js.map +1 -0
  269. package/dist/components/AspectRatio/AspectRatio.d.ts +46 -0
  270. package/dist/components/AspectRatio/AspectRatio.js +33 -0
  271. package/dist/components/AspectRatio/AspectRatio.js.map +1 -0
  272. package/dist/components/Avatar/Avatar.d.ts +38 -0
  273. package/dist/components/Avatar/Avatar.js +44 -0
  274. package/dist/components/Avatar/Avatar.js.map +1 -0
  275. package/dist/components/Badge/Badge.d.ts +30 -0
  276. package/dist/components/Badge/Badge.js +29 -0
  277. package/dist/components/Badge/Badge.js.map +1 -0
  278. package/dist/components/Breadcrumb/Breadcrumb.d.ts +37 -0
  279. package/dist/components/Breadcrumb/Breadcrumb.js +46 -0
  280. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -0
  281. package/dist/components/Button/Button.d.ts +70 -0
  282. package/dist/components/Button/Button.js +95 -0
  283. package/dist/components/Button/Button.js.map +1 -0
  284. package/dist/components/Calendar/Calendar.d.ts +54 -0
  285. package/dist/components/Calendar/Calendar.js +369 -0
  286. package/dist/components/Calendar/Calendar.js.map +1 -0
  287. package/dist/components/Card/Card.d.ts +55 -0
  288. package/dist/components/Card/Card.js +64 -0
  289. package/dist/components/Card/Card.js.map +1 -0
  290. package/dist/components/Checkbox/Checkbox.d.ts +26 -0
  291. package/dist/components/Checkbox/Checkbox.js +34 -0
  292. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  293. package/dist/components/Code/Code.d.ts +30 -0
  294. package/dist/components/Code/Code.js +21 -0
  295. package/dist/components/Code/Code.js.map +1 -0
  296. package/dist/components/CodeBlock/CodeBlock.d.ts +145 -0
  297. package/dist/components/CodeBlock/CodeBlock.js +114 -0
  298. package/dist/components/CodeBlock/CodeBlock.js.map +1 -0
  299. package/dist/components/Collapsible/Collapsible.d.ts +45 -0
  300. package/dist/components/Collapsible/Collapsible.js +60 -0
  301. package/dist/components/Collapsible/Collapsible.js.map +1 -0
  302. package/dist/components/ColorPicker/ColorPicker.d.ts +67 -0
  303. package/dist/components/ColorPicker/ColorPicker.js +334 -0
  304. package/dist/components/ColorPicker/ColorPicker.js.map +1 -0
  305. package/dist/components/Combobox/Combobox.d.ts +77 -0
  306. package/dist/components/Combobox/Combobox.js +170 -0
  307. package/dist/components/Combobox/Combobox.js.map +1 -0
  308. package/dist/components/Command/Command.d.ts +125 -0
  309. package/dist/components/Command/Command.js +204 -0
  310. package/dist/components/Command/Command.js.map +1 -0
  311. package/dist/components/ContextMenu/ContextMenu.d.ts +63 -0
  312. package/dist/components/ContextMenu/ContextMenu.js +109 -0
  313. package/dist/components/ContextMenu/ContextMenu.js.map +1 -0
  314. package/dist/components/DatePicker/DatePicker.d.ts +130 -0
  315. package/dist/components/DatePicker/DatePicker.js +257 -0
  316. package/dist/components/DatePicker/DatePicker.js.map +1 -0
  317. package/dist/components/DescriptionList/DescriptionList.d.ts +73 -0
  318. package/dist/components/DescriptionList/DescriptionList.js +35 -0
  319. package/dist/components/DescriptionList/DescriptionList.js.map +1 -0
  320. package/dist/components/Diagram/Diagram.d.ts +86 -0
  321. package/dist/components/Diagram/Diagram.js +211 -0
  322. package/dist/components/Diagram/Diagram.js.map +1 -0
  323. package/dist/components/Dialog/Dialog.d.ts +63 -0
  324. package/dist/components/Dialog/Dialog.js +90 -0
  325. package/dist/components/Dialog/Dialog.js.map +1 -0
  326. package/dist/components/DropdownMenu/DropdownMenu.d.ts +87 -0
  327. package/dist/components/DropdownMenu/DropdownMenu.js +120 -0
  328. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
  329. package/dist/components/EmptyState/EmptyState.d.ts +55 -0
  330. package/dist/components/EmptyState/EmptyState.js +32 -0
  331. package/dist/components/EmptyState/EmptyState.js.map +1 -0
  332. package/dist/components/ErrorState/ErrorState.d.ts +55 -0
  333. package/dist/components/ErrorState/ErrorState.js +41 -0
  334. package/dist/components/ErrorState/ErrorState.js.map +1 -0
  335. package/dist/components/Field/Field.d.ts +111 -0
  336. package/dist/components/Field/Field.js +95 -0
  337. package/dist/components/Field/Field.js.map +1 -0
  338. package/dist/components/Field/field-control.d.ts +31 -0
  339. package/dist/components/Field/field-control.js +12 -0
  340. package/dist/components/Field/field-control.js.map +1 -0
  341. package/dist/components/FigureBand/FigureBand.d.ts +31 -0
  342. package/dist/components/FigureBand/FigureBand.js +51 -0
  343. package/dist/components/FigureBand/FigureBand.js.map +1 -0
  344. package/dist/components/FloatingIconButton/FloatingIconButton.d.ts +29 -0
  345. package/dist/components/FloatingIconButton/FloatingIconButton.js +34 -0
  346. package/dist/components/FloatingIconButton/FloatingIconButton.js.map +1 -0
  347. package/dist/components/Heading/Heading.d.ts +62 -0
  348. package/dist/components/Heading/Heading.js +44 -0
  349. package/dist/components/Heading/Heading.js.map +1 -0
  350. package/dist/components/Input/Input.d.ts +22 -0
  351. package/dist/components/Input/Input.js +21 -0
  352. package/dist/components/Input/Input.js.map +1 -0
  353. package/dist/components/Kbd/Kbd.d.ts +27 -0
  354. package/dist/components/Kbd/Kbd.js +21 -0
  355. package/dist/components/Kbd/Kbd.js.map +1 -0
  356. package/dist/components/LinkArrow/LinkArrow.d.ts +24 -0
  357. package/dist/components/LinkArrow/LinkArrow.js +24 -0
  358. package/dist/components/LinkArrow/LinkArrow.js.map +1 -0
  359. package/dist/components/Markdown/Markdown.d.ts +139 -0
  360. package/dist/components/Markdown/Markdown.js +135 -0
  361. package/dist/components/Markdown/Markdown.js.map +1 -0
  362. package/dist/components/Markdown/inline.d.ts +29 -0
  363. package/dist/components/Markdown/inline.js +74 -0
  364. package/dist/components/Markdown/inline.js.map +1 -0
  365. package/dist/components/Markdown/nodes.d.ts +65 -0
  366. package/dist/components/Markdown/nodes.js +1 -0
  367. package/dist/components/Markdown/nodes.js.map +1 -0
  368. package/dist/components/Markdown/parse.d.ts +24 -0
  369. package/dist/components/Markdown/parse.js +110 -0
  370. package/dist/components/Markdown/parse.js.map +1 -0
  371. package/dist/components/Markdown/slug.d.ts +15 -0
  372. package/dist/components/Markdown/slug.js +7 -0
  373. package/dist/components/Markdown/slug.js.map +1 -0
  374. package/dist/components/Metric/Metric.d.ts +61 -0
  375. package/dist/components/Metric/Metric.js +51 -0
  376. package/dist/components/Metric/Metric.js.map +1 -0
  377. package/dist/components/NativeSelect/NativeSelect.d.ts +33 -0
  378. package/dist/components/NativeSelect/NativeSelect.js +44 -0
  379. package/dist/components/NativeSelect/NativeSelect.js.map +1 -0
  380. package/dist/components/NavItem/NavItem.d.ts +39 -0
  381. package/dist/components/NavItem/NavItem.js +31 -0
  382. package/dist/components/NavItem/NavItem.js.map +1 -0
  383. package/dist/components/NumberField/NumberField.d.ts +69 -0
  384. package/dist/components/NumberField/NumberField.js +162 -0
  385. package/dist/components/NumberField/NumberField.js.map +1 -0
  386. package/dist/components/PageHeader/PageHeader.d.ts +92 -0
  387. package/dist/components/PageHeader/PageHeader.js +37 -0
  388. package/dist/components/PageHeader/PageHeader.js.map +1 -0
  389. package/dist/components/Pagination/Pagination.d.ts +67 -0
  390. package/dist/components/Pagination/Pagination.js +112 -0
  391. package/dist/components/Pagination/Pagination.js.map +1 -0
  392. package/dist/components/Popover/Popover.d.ts +39 -0
  393. package/dist/components/Popover/Popover.js +57 -0
  394. package/dist/components/Popover/Popover.js.map +1 -0
  395. package/dist/components/Progress/Progress.d.ts +43 -0
  396. package/dist/components/Progress/Progress.js +57 -0
  397. package/dist/components/Progress/Progress.js.map +1 -0
  398. package/dist/components/RadioGroup/RadioGroup.d.ts +49 -0
  399. package/dist/components/RadioGroup/RadioGroup.js +53 -0
  400. package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
  401. package/dist/components/ScrollArea/ScrollArea.d.ts +46 -0
  402. package/dist/components/ScrollArea/ScrollArea.js +54 -0
  403. package/dist/components/ScrollArea/ScrollArea.js.map +1 -0
  404. package/dist/components/SearchableMenu/SearchableMenu.d.ts +68 -0
  405. package/dist/components/SearchableMenu/SearchableMenu.js +101 -0
  406. package/dist/components/SearchableMenu/SearchableMenu.js.map +1 -0
  407. package/dist/components/Select/Select.d.ts +87 -0
  408. package/dist/components/Select/Select.js +130 -0
  409. package/dist/components/Select/Select.js.map +1 -0
  410. package/dist/components/Separator/Separator.d.ts +48 -0
  411. package/dist/components/Separator/Separator.js +43 -0
  412. package/dist/components/Separator/Separator.js.map +1 -0
  413. package/dist/components/Sheet/Sheet.d.ts +43 -0
  414. package/dist/components/Sheet/Sheet.js +79 -0
  415. package/dist/components/Sheet/Sheet.js.map +1 -0
  416. package/dist/components/Sidebar/Sidebar.d.ts +357 -0
  417. package/dist/components/Sidebar/Sidebar.js +447 -0
  418. package/dist/components/Sidebar/Sidebar.js.map +1 -0
  419. package/dist/components/Skeleton/Skeleton.d.ts +70 -0
  420. package/dist/components/Skeleton/Skeleton.js +44 -0
  421. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  422. package/dist/components/Slider/Slider.d.ts +74 -0
  423. package/dist/components/Slider/Slider.js +143 -0
  424. package/dist/components/Slider/Slider.js.map +1 -0
  425. package/dist/components/Spinner/Spinner.d.ts +58 -0
  426. package/dist/components/Spinner/Spinner.js +49 -0
  427. package/dist/components/Spinner/Spinner.js.map +1 -0
  428. package/dist/components/StatusDot/StatusDot.d.ts +29 -0
  429. package/dist/components/StatusDot/StatusDot.js +44 -0
  430. package/dist/components/StatusDot/StatusDot.js.map +1 -0
  431. package/dist/components/StatusPill/StatusPill.d.ts +30 -0
  432. package/dist/components/StatusPill/StatusPill.js +37 -0
  433. package/dist/components/StatusPill/StatusPill.js.map +1 -0
  434. package/dist/components/Steps/Steps.d.ts +65 -0
  435. package/dist/components/Steps/Steps.js +25 -0
  436. package/dist/components/Steps/Steps.js.map +1 -0
  437. package/dist/components/Switch/Switch.d.ts +23 -0
  438. package/dist/components/Switch/Switch.js +23 -0
  439. package/dist/components/Switch/Switch.js.map +1 -0
  440. package/dist/components/Table/Table.d.ts +116 -0
  441. package/dist/components/Table/Table.js +137 -0
  442. package/dist/components/Table/Table.js.map +1 -0
  443. package/dist/components/Tabs/Tabs.d.ts +37 -0
  444. package/dist/components/Tabs/Tabs.js +205 -0
  445. package/dist/components/Tabs/Tabs.js.map +1 -0
  446. package/dist/components/Tag/Tag.d.ts +87 -0
  447. package/dist/components/Tag/Tag.js +62 -0
  448. package/dist/components/Tag/Tag.js.map +1 -0
  449. package/dist/components/Text/Text.d.ts +62 -0
  450. package/dist/components/Text/Text.js +30 -0
  451. package/dist/components/Text/Text.js.map +1 -0
  452. package/dist/components/Textarea/Textarea.d.ts +20 -0
  453. package/dist/components/Textarea/Textarea.js +32 -0
  454. package/dist/components/Textarea/Textarea.js.map +1 -0
  455. package/dist/components/Timestamp/Timestamp.d.ts +59 -0
  456. package/dist/components/Timestamp/Timestamp.js +56 -0
  457. package/dist/components/Timestamp/Timestamp.js.map +1 -0
  458. package/dist/components/Toast/Toast.d.ts +32 -0
  459. package/dist/components/Toast/Toast.js +64 -0
  460. package/dist/components/Toast/Toast.js.map +1 -0
  461. package/dist/components/ToggleGroup/ToggleGroup.d.ts +46 -0
  462. package/dist/components/ToggleGroup/ToggleGroup.js +88 -0
  463. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -0
  464. package/dist/components/Toolbar/Toolbar.d.ts +55 -0
  465. package/dist/components/Toolbar/Toolbar.js +43 -0
  466. package/dist/components/Toolbar/Toolbar.js.map +1 -0
  467. package/dist/components/Tooltip/Tooltip.d.ts +43 -0
  468. package/dist/components/Tooltip/Tooltip.js +40 -0
  469. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  470. package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.d.ts +55 -0
  471. package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.js +175 -0
  472. package/dist/diagrams/ArchitectureFigure/ArchitectureFigure.js.map +1 -0
  473. package/dist/diagrams/DataflowFigure/DataflowFigure.d.ts +28 -0
  474. package/dist/diagrams/DataflowFigure/DataflowFigure.js +148 -0
  475. package/dist/diagrams/DataflowFigure/DataflowFigure.js.map +1 -0
  476. package/dist/diagrams/DiagramCanvas/DiagramCanvas.d.ts +78 -0
  477. package/dist/diagrams/DiagramCanvas/DiagramCanvas.js +229 -0
  478. package/dist/diagrams/DiagramCanvas/DiagramCanvas.js.map +1 -0
  479. package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.d.ts +106 -0
  480. package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.js +123 -0
  481. package/dist/diagrams/DiagramExportMenu/DiagramExportMenu.js.map +1 -0
  482. package/dist/diagrams/DiagramInspector/DiagramInspector.d.ts +70 -0
  483. package/dist/diagrams/DiagramInspector/DiagramInspector.js +94 -0
  484. package/dist/diagrams/DiagramInspector/DiagramInspector.js.map +1 -0
  485. package/dist/diagrams/DiagramLegend/DiagramLegend.d.ts +42 -0
  486. package/dist/diagrams/DiagramLegend/DiagramLegend.js +35 -0
  487. package/dist/diagrams/DiagramLegend/DiagramLegend.js.map +1 -0
  488. package/dist/diagrams/DiagramMinimap/DiagramMinimap.d.ts +77 -0
  489. package/dist/diagrams/DiagramMinimap/DiagramMinimap.js +106 -0
  490. package/dist/diagrams/DiagramMinimap/DiagramMinimap.js.map +1 -0
  491. package/dist/diagrams/DiagramToolbar/DiagramToolbar.d.ts +48 -0
  492. package/dist/diagrams/DiagramToolbar/DiagramToolbar.js +53 -0
  493. package/dist/diagrams/DiagramToolbar/DiagramToolbar.js.map +1 -0
  494. package/dist/diagrams/LifecycleFigure/LifecycleFigure.d.ts +31 -0
  495. package/dist/diagrams/LifecycleFigure/LifecycleFigure.js +234 -0
  496. package/dist/diagrams/LifecycleFigure/LifecycleFigure.js.map +1 -0
  497. package/dist/diagrams/SequenceFigure/SequenceFigure.d.ts +38 -0
  498. package/dist/diagrams/SequenceFigure/SequenceFigure.js +261 -0
  499. package/dist/diagrams/SequenceFigure/SequenceFigure.js.map +1 -0
  500. package/dist/diagrams/WorkflowFigure/WorkflowFigure.d.ts +36 -0
  501. package/dist/diagrams/WorkflowFigure/WorkflowFigure.js +259 -0
  502. package/dist/diagrams/WorkflowFigure/WorkflowFigure.js.map +1 -0
  503. package/dist/diagrams/index.d.ts +17 -0
  504. package/dist/diagrams/index.js +29 -0
  505. package/dist/diagrams/index.js.map +1 -0
  506. package/dist/diagrams/lib/dev.d.ts +61 -0
  507. package/dist/diagrams/lib/dev.js +96 -0
  508. package/dist/diagrams/lib/dev.js.map +1 -0
  509. package/dist/diagrams/lib/frame.d.ts +138 -0
  510. package/dist/diagrams/lib/frame.js +131 -0
  511. package/dist/diagrams/lib/frame.js.map +1 -0
  512. package/dist/diagrams/lib/geometry.d.ts +114 -0
  513. package/dist/diagrams/lib/geometry.js +113 -0
  514. package/dist/diagrams/lib/geometry.js.map +1 -0
  515. package/dist/diagrams/lib/legend.d.ts +32 -0
  516. package/dist/diagrams/lib/legend.js +84 -0
  517. package/dist/diagrams/lib/legend.js.map +1 -0
  518. package/dist/diagrams/lib/marks.d.ts +207 -0
  519. package/dist/diagrams/lib/marks.js +480 -0
  520. package/dist/diagrams/lib/marks.js.map +1 -0
  521. package/dist/diagrams/lib/route.d.ts +106 -0
  522. package/dist/diagrams/lib/route.js +201 -0
  523. package/dist/diagrams/lib/route.js.map +1 -0
  524. package/dist/diagrams/lib/wires.d.ts +59 -0
  525. package/dist/diagrams/lib/wires.js +94 -0
  526. package/dist/diagrams/lib/wires.js.map +1 -0
  527. package/dist/diagrams/spec.d.ts +405 -0
  528. package/dist/diagrams/spec.js +1 -0
  529. package/dist/diagrams/spec.js.map +1 -0
  530. package/dist/fonts/hanken-grotesk-300.woff2 +0 -0
  531. package/dist/fonts/hanken-grotesk-400.woff2 +0 -0
  532. package/dist/fonts/hanken-grotesk-500.woff2 +0 -0
  533. package/dist/fonts/hanken-grotesk-600.woff2 +0 -0
  534. package/dist/fonts/hanken-grotesk-700.woff2 +0 -0
  535. package/dist/fonts/ibm-plex-mono-400.woff2 +0 -0
  536. package/dist/fonts/ibm-plex-mono-500.woff2 +0 -0
  537. package/dist/fonts/ibm-plex-mono-600.woff2 +0 -0
  538. package/dist/fonts/newsreader-300.woff2 +0 -0
  539. package/dist/fonts/newsreader-400.woff2 +0 -0
  540. package/dist/fonts/newsreader-500.woff2 +0 -0
  541. package/dist/fonts/newsreader-600.woff2 +0 -0
  542. package/dist/fonts.css +96 -0
  543. package/dist/index.d.ts +97 -0
  544. package/dist/index.js +80 -0
  545. package/dist/index.js.map +1 -0
  546. package/dist/keyframes.css +300 -0
  547. package/dist/lib/cn.d.ts +21 -0
  548. package/dist/lib/cn.js +9 -0
  549. package/dist/lib/cn.js.map +1 -0
  550. package/dist/lib/color.d.ts +80 -0
  551. package/dist/lib/color.js +189 -0
  552. package/dist/lib/color.js.map +1 -0
  553. package/dist/lib/control.d.ts +32 -0
  554. package/dist/lib/control.js +14 -0
  555. package/dist/lib/control.js.map +1 -0
  556. package/dist/lib/index.d.ts +4 -0
  557. package/dist/lib/index.js +11 -0
  558. package/dist/lib/index.js.map +1 -0
  559. package/dist/lib/numeric.d.ts +35 -0
  560. package/dist/lib/numeric.js +29 -0
  561. package/dist/lib/numeric.js.map +1 -0
  562. package/dist/lib/overlay-container.d.ts +48 -0
  563. package/dist/lib/overlay-container.js +15 -0
  564. package/dist/lib/overlay-container.js.map +1 -0
  565. package/dist/lib/slot-content.d.ts +8 -0
  566. package/dist/lib/slot-content.js +17 -0
  567. package/dist/lib/slot-content.js.map +1 -0
  568. package/dist/lib/step-rail.d.ts +45 -0
  569. package/dist/lib/step-rail.js +47 -0
  570. package/dist/lib/step-rail.js.map +1 -0
  571. package/dist/lib/svg-export.d.ts +138 -0
  572. package/dist/lib/svg-export.js +198 -0
  573. package/dist/lib/svg-export.js.map +1 -0
  574. package/dist/lib/useClipboardCopy.d.ts +30 -0
  575. package/dist/lib/useClipboardCopy.js +37 -0
  576. package/dist/lib/useClipboardCopy.js.map +1 -0
  577. package/dist/lib/useSelectionIndicator.d.ts +29 -0
  578. package/dist/lib/useSelectionIndicator.js +49 -0
  579. package/dist/lib/useSelectionIndicator.js.map +1 -0
  580. package/dist/lib/warn.d.ts +73 -0
  581. package/dist/lib/warn.js +38 -0
  582. package/dist/lib/warn.js.map +1 -0
  583. package/dist/semantic.css +193 -0
  584. package/dist/styles.css +98 -0
  585. package/dist/themes.css +514 -0
  586. package/dist/tokens/brand.d.ts +47 -0
  587. package/dist/tokens/brand.js +38 -0
  588. package/dist/tokens/brand.js.map +1 -0
  589. package/dist/tokens.css +652 -0
  590. package/dist/tokens.d.ts +198 -0
  591. package/dist/tokens.js +1020 -0
  592. package/dist/tokens.json +1019 -0
  593. package/dist/website/Actions/Actions.d.ts +34 -0
  594. package/dist/website/Actions/Actions.js +29 -0
  595. package/dist/website/Actions/Actions.js.map +1 -0
  596. package/dist/website/Collection/Collection.d.ts +128 -0
  597. package/dist/website/Collection/Collection.js +162 -0
  598. package/dist/website/Collection/Collection.js.map +1 -0
  599. package/dist/website/Contact/Contact.d.ts +87 -0
  600. package/dist/website/Contact/Contact.js +94 -0
  601. package/dist/website/Contact/Contact.js.map +1 -0
  602. package/dist/website/Content/CodePanel.d.ts +27 -0
  603. package/dist/website/Content/CodePanel.js +30 -0
  604. package/dist/website/Content/CodePanel.js.map +1 -0
  605. package/dist/website/Content/Content.d.ts +29 -0
  606. package/dist/website/Content/Content.js +38 -0
  607. package/dist/website/Content/Content.js.map +1 -0
  608. package/dist/website/Conversation/Conversation.d.ts +193 -0
  609. package/dist/website/Conversation/Conversation.js +252 -0
  610. package/dist/website/Conversation/Conversation.js.map +1 -0
  611. package/dist/website/Evidence/Evidence.d.ts +116 -0
  612. package/dist/website/Evidence/Evidence.js +142 -0
  613. package/dist/website/Evidence/Evidence.js.map +1 -0
  614. package/dist/website/Media/Media.d.ts +173 -0
  615. package/dist/website/Media/Media.js +225 -0
  616. package/dist/website/Media/Media.js.map +1 -0
  617. package/dist/website/Media/MediaLightbox.d.ts +18 -0
  618. package/dist/website/Media/MediaLightbox.js +38 -0
  619. package/dist/website/Media/MediaLightbox.js.map +1 -0
  620. package/dist/website/Metrics/Metrics.d.ts +74 -0
  621. package/dist/website/Metrics/Metrics.js +96 -0
  622. package/dist/website/Metrics/Metrics.js.map +1 -0
  623. package/dist/website/Music/Music.d.ts +60 -0
  624. package/dist/website/Music/Music.js +80 -0
  625. package/dist/website/Music/Music.js.map +1 -0
  626. package/dist/website/Portfolio/FrameLayout.d.ts +9 -0
  627. package/dist/website/Portfolio/FrameLayout.js +42 -0
  628. package/dist/website/Portfolio/FrameLayout.js.map +1 -0
  629. package/dist/website/Portfolio/Portfolio.d.ts +49 -0
  630. package/dist/website/Portfolio/Portfolio.js +66 -0
  631. package/dist/website/Portfolio/Portfolio.js.map +1 -0
  632. package/dist/website/Portfolio/QuestionCard.d.ts +22 -0
  633. package/dist/website/Portfolio/QuestionCard.js +33 -0
  634. package/dist/website/Portfolio/QuestionCard.js.map +1 -0
  635. package/dist/website/PortfolioIndex/PortfolioIndex.d.ts +21 -0
  636. package/dist/website/PortfolioIndex/PortfolioIndex.js +31 -0
  637. package/dist/website/PortfolioIndex/PortfolioIndex.js.map +1 -0
  638. package/dist/website/Reading/Reading.d.ts +203 -0
  639. package/dist/website/Reading/Reading.js +357 -0
  640. package/dist/website/Reading/Reading.js.map +1 -0
  641. package/dist/website/Recovery/Recovery.d.ts +39 -0
  642. package/dist/website/Recovery/Recovery.js +96 -0
  643. package/dist/website/Recovery/Recovery.js.map +1 -0
  644. package/dist/website/SearchPalette/SearchPalette.d.ts +59 -0
  645. package/dist/website/SearchPalette/SearchPalette.js +120 -0
  646. package/dist/website/SearchPalette/SearchPalette.js.map +1 -0
  647. package/dist/website/SiteNavigation/SiteNavigation.d.ts +46 -0
  648. package/dist/website/SiteNavigation/SiteNavigation.js +101 -0
  649. package/dist/website/SiteNavigation/SiteNavigation.js.map +1 -0
  650. package/dist/website/SiteShell/SiteShell.d.ts +45 -0
  651. package/dist/website/SiteShell/SiteShell.js +46 -0
  652. package/dist/website/SiteShell/SiteShell.js.map +1 -0
  653. package/dist/website/Timeline/Timeline.d.ts +80 -0
  654. package/dist/website/Timeline/Timeline.js +99 -0
  655. package/dist/website/Timeline/Timeline.js.map +1 -0
  656. package/dist/website/index.d.ts +27 -0
  657. package/dist/website/index.js +21 -0
  658. package/dist/website/index.js.map +1 -0
  659. package/dist/website-actions.css +6 -0
  660. package/dist/website-base.css +46 -0
  661. package/dist/website-collection.css +89 -0
  662. package/dist/website-contact.css +29 -0
  663. package/dist/website-content.css +17 -0
  664. package/dist/website-controls.css +91 -0
  665. package/dist/website-conversation.css +115 -0
  666. package/dist/website-evidence.css +56 -0
  667. package/dist/website-media.css +227 -0
  668. package/dist/website-metrics.css +15 -0
  669. package/dist/website-music.css +27 -0
  670. package/dist/website-portfolio.css +94 -0
  671. package/dist/website-reading.css +159 -0
  672. package/dist/website-recovery.css +28 -0
  673. package/dist/website-search.css +26 -0
  674. package/dist/website-shell.css +89 -0
  675. package/dist/website-timeline.css +43 -0
  676. package/dist/website.css +25 -0
  677. package/llms.txt +35 -0
  678. package/package.json +163 -5
  679. package/skills/folio-design/SKILL.md +228 -0
  680. package/skills/folio-design/evals/claims.json +95 -0
  681. package/skills/folio-design/evals/evals.json +84 -0
  682. package/skills/folio-design/rules/a11y.md +167 -0
  683. package/skills/folio-design/rules/composition.md +108 -0
  684. package/skills/folio-design/rules/forms.md +135 -0
  685. package/skills/folio-design/rules/naming.md +155 -0
  686. package/skills/folio-design/rules/tokens.md +133 -0
@@ -0,0 +1,1019 @@
1
+ {
2
+ "paper": {
3
+ "layer": "tokens",
4
+ "category": "colour",
5
+ "light": "#ffffff",
6
+ "dark": "#0d0d0d"
7
+ },
8
+ "paper-2": {
9
+ "layer": "tokens",
10
+ "category": "colour",
11
+ "light": "#f7f7f5",
12
+ "dark": "#161616"
13
+ },
14
+ "bar": {
15
+ "layer": "tokens",
16
+ "category": "colour",
17
+ "light": "var(--stone)",
18
+ "dark": "var(--stone)"
19
+ },
20
+ "bar-2": {
21
+ "layer": "tokens",
22
+ "category": "colour",
23
+ "light": "var(--stone)",
24
+ "dark": "var(--stone)"
25
+ },
26
+ "ink": {
27
+ "layer": "tokens",
28
+ "category": "colour",
29
+ "light": "#101010",
30
+ "comment": "Two text steps and nothing lighter. --ink-3-aa is the floor — it clears AA on white at 6.7:1, and every step above it is darker. --ink-3 is the same weight expressed as alpha, for rules and washes that must sit over a photograph as well as over paper.",
31
+ "dark": "#f4f4f2"
32
+ },
33
+ "ink-2": {
34
+ "layer": "tokens",
35
+ "category": "colour",
36
+ "light": "#4a4a4a",
37
+ "dark": "#b4b4b0"
38
+ },
39
+ "ink-3": {
40
+ "layer": "tokens",
41
+ "category": "colour",
42
+ "light": "rgba(16, 16, 16, 0.55)",
43
+ "dark": "rgba(244, 244, 242, 0.55)"
44
+ },
45
+ "ink-3-aa": {
46
+ "layer": "tokens",
47
+ "category": "colour",
48
+ "light": "#5c5c5c",
49
+ "dark": "#9a9a96"
50
+ },
51
+ "forest": {
52
+ "layer": "tokens",
53
+ "category": "colour",
54
+ "light": "#3a3a3a",
55
+ "comment": "The second editorial voice is not a hue — it is one more neutral step, sitting between --ink and --ink-2, so a byline separates from body copy without introducing colour.",
56
+ "dark": "#c9c9c5"
57
+ },
58
+ "mist": {
59
+ "layer": "tokens",
60
+ "category": "colour",
61
+ "light": "var(--stone)",
62
+ "dark": "var(--stone)"
63
+ },
64
+ "stone": {
65
+ "layer": "tokens",
66
+ "category": "colour",
67
+ "light": "#f2f1ee",
68
+ "dark": "#1f1f1f"
69
+ },
70
+ "clay": {
71
+ "layer": "tokens",
72
+ "category": "colour",
73
+ "light": "var(--ink)",
74
+ "comment": "Monochrome collapses the pointer onto the mark: the accent IS ink. What used to be carried by hue is now carried by weight, rule and reversal — an ink pill, an ink underline, an ink-filled plate.",
75
+ "dark": "var(--ink)"
76
+ },
77
+ "clay-ink": {
78
+ "layer": "tokens",
79
+ "category": "colour",
80
+ "light": "var(--clay)",
81
+ "dark": "var(--clay)"
82
+ },
83
+ "feature-surface": {
84
+ "layer": "tokens",
85
+ "category": "colour",
86
+ "light": "#262626",
87
+ "comment": "The one reversed plate, and the one place the ramp needs a tenth step. Set to var(--ink) it was the page's darkest possible mark used as a field, which on a white page reads as a hole punched through it rather than as a panel. Two steps lighter keeps the reversal — 15.1:1 for paper-white type on it — and matches the dark side.",
88
+ "dark": "#1a1a1a"
89
+ },
90
+ "on-feature": {
91
+ "layer": "tokens",
92
+ "category": "colour",
93
+ "light": "var(--paper)",
94
+ "dark": "var(--ink)"
95
+ },
96
+ "focus-on-feature": {
97
+ "layer": "tokens",
98
+ "category": "focus",
99
+ "light": "var(--on-feature)",
100
+ "dark": "var(--on-feature)"
101
+ },
102
+ "on-photo": {
103
+ "layer": "tokens",
104
+ "category": "colour",
105
+ "light": "var(--paper)",
106
+ "dark": "#fbfbfa"
107
+ },
108
+ "photo-caption-surface": {
109
+ "layer": "tokens",
110
+ "category": "colour",
111
+ "light": "var(--ink)",
112
+ "dark": "var(--paper)"
113
+ },
114
+ "photo-shadow": {
115
+ "layer": "tokens",
116
+ "category": "colour",
117
+ "light": "0 1px 6px rgb(0 0 0 / 0.72)",
118
+ "dark": "0 1px 6px rgb(0 0 0 / 0.72)"
119
+ },
120
+ "rule": {
121
+ "layer": "tokens",
122
+ "category": "colour",
123
+ "light": "#edebe6",
124
+ "comment": "Three rule weights, because a monochrome page has no colour left to separate one band from the next: hairline, edge, and hard.",
125
+ "dark": "rgba(244, 244, 242, 0.14)"
126
+ },
127
+ "rule-2": {
128
+ "layer": "tokens",
129
+ "category": "colour",
130
+ "light": "#dbdbd6",
131
+ "dark": "rgba(244, 244, 242, 0.26)"
132
+ },
133
+ "rule-hard": {
134
+ "layer": "tokens",
135
+ "category": "colour",
136
+ "light": "var(--ink)",
137
+ "dark": "var(--ink)"
138
+ },
139
+ "red": {
140
+ "layer": "tokens",
141
+ "category": "colour",
142
+ "light": "var(--clay)",
143
+ "comment": "Historic role names, kept so a consumer written against the previous palette keeps resolving. Their hue is now ink; the role remains \"the single editorial pointer\".",
144
+ "dark": "var(--clay)"
145
+ },
146
+ "red-ink": {
147
+ "layer": "tokens",
148
+ "category": "colour",
149
+ "light": "var(--clay)",
150
+ "dark": "var(--clay)"
151
+ },
152
+ "red-soft": {
153
+ "layer": "tokens",
154
+ "category": "colour",
155
+ "light": "rgba(16, 16, 16, 0.07)",
156
+ "dark": "rgba(244, 244, 242, 0.12)"
157
+ },
158
+ "on-red": {
159
+ "layer": "tokens",
160
+ "category": "colour",
161
+ "light": "var(--paper)",
162
+ "dark": "var(--paper)"
163
+ },
164
+ "shadow-offset": {
165
+ "layer": "tokens",
166
+ "category": "depth",
167
+ "light": "var(--clay)",
168
+ "dark": "var(--clay)"
169
+ },
170
+ "series-1": {
171
+ "layer": "tokens",
172
+ "category": "data",
173
+ "light": "#101010",
174
+ "comment": "─── Data ─────────────────────────────────────────────────────────────── The series ramp a chart paints with, and the one place the White Reset has to answer a question a monochrome system would rather not be asked: how do you tell six lines apart with no hue left to spend? The answer is that hue was never the primary carrier here — TEXTURE is. Every chart primitive ships a fill variant (hatched, dotted, lines, stripped, duotone) and the series ramp below is the SECOND encoding, not the first. That ordering is what makes the set legible to a colour-blind reader, in greyscale print, and under forced-colours, none of which a hue-first categorical palette survives. The eight steps are interleaved rather than sequential — light, dark, light, dark — so neighbouring series sit as far apart on the lightness ramp as eight steps allow. Adjacent separation is ΔE 21.0 (OKLab ×100) against a 15 floor, and every step clears 3:1 on its own ground. Two checks a chromatic palette would pass fail here BY DESIGN, and are stated rather than hidden: the chroma floor (these are greys) and the lightness band (--series-1 is ink, and ink is the darkest mark the system has). Texture plus a legend is the relief, and both are mandatory — `Chart.Legend` is not optional above one series. A consumer who genuinely needs hue does not hand-pick hexes: it sets `data-chart-palette=\"chroma\"` (see themes.css), which re-points these eight names onto a categorical palette validated against both grounds — or `\"accent\"`, which ladders the same eight names out of `--clay` when what the charts have to carry is a brand rather than eight categories.",
175
+ "dark": "CanvasText"
176
+ },
177
+ "series-2": {
178
+ "layer": "tokens",
179
+ "category": "data",
180
+ "light": "#565656",
181
+ "dark": "CanvasText"
182
+ },
183
+ "series-3": {
184
+ "layer": "tokens",
185
+ "category": "data",
186
+ "light": "#202020",
187
+ "dark": "CanvasText"
188
+ },
189
+ "series-4": {
190
+ "layer": "tokens",
191
+ "category": "data",
192
+ "light": "#6a6a6a",
193
+ "dark": "CanvasText"
194
+ },
195
+ "series-5": {
196
+ "layer": "tokens",
197
+ "category": "data",
198
+ "light": "#313131",
199
+ "dark": "CanvasText"
200
+ },
201
+ "series-6": {
202
+ "layer": "tokens",
203
+ "category": "data",
204
+ "light": "#7e7e7e",
205
+ "dark": "CanvasText"
206
+ },
207
+ "series-7": {
208
+ "layer": "tokens",
209
+ "category": "data",
210
+ "light": "#434343",
211
+ "dark": "CanvasText"
212
+ },
213
+ "series-8": {
214
+ "layer": "tokens",
215
+ "category": "data",
216
+ "light": "#939393",
217
+ "dark": "CanvasText"
218
+ },
219
+ "series-track": {
220
+ "layer": "tokens",
221
+ "category": "data",
222
+ "light": "#eeece7",
223
+ "comment": "The empty ground a part-of-whole mark is drawn against — the unfilled remainder of a radial bar, the track behind a gauge. Not --rule: a track is a field, and a field that reads as a hairline disappears at radius.",
224
+ "dark": "Canvas"
225
+ },
226
+ "chart-fill": {
227
+ "layer": "tokens",
228
+ "category": "data",
229
+ "light": "0.14",
230
+ "comment": "How solid a translucent mark is, and the one pair of tokens in the file that is NOT the same number on both grounds. A wash is `ink at N% over the page`. On paper, ink at 14% lands around #e3e3e3 — a legible, recessive band. Run the same 14% the other way and paper-white over near-black lands around #2c2c2c, which on a #0d0d0d ground is not a band, it is nothing. Perceived lightness is not linear and the two directions do not meet in the middle, so a single number cannot serve both: the dark side needs roughly twice the alpha to read as the same weight of mark. Every area fill, texture and flow band in the chart package reads these rather than carrying its own literal.",
231
+ "dark": "0.45"
232
+ },
233
+ "chart-texture": {
234
+ "layer": "tokens",
235
+ "category": "data",
236
+ "light": "0.42",
237
+ "dark": "1"
238
+ },
239
+ "sans": {
240
+ "layer": "tokens",
241
+ "category": "type",
242
+ "light": "var(--font-hanken, 'Hanken Grotesk'), var(--cjk-sans), 'Helvetica Neue', Arial, sans-serif",
243
+ "comment": "─── Type ─────────────────────────────────────────────────────────────── Three faces and their CJK companions. EVERY `var()` here carries a fallback, and that is load-bearing rather than tidy. A `var(--font-hanken)` with no fallback, in a host that does not define `--font-hanken`, is invalid at computed-value time — and IACVT does not skip the one term, it discards the WHOLE declaration. So the entire stack collapsed to nothing and every surface rendered in the platform's system font. It worked inside the site, where next/font defines those names, and failed everywhere else: for a package whose whole purpose is to render the same on both sides, that is the worst possible bug. With the fallback, a host that loads the faces itself (next/font, a CDN) sets `--font-*` and wins; a host that does not falls through to the literal family name, which is exactly the name `fonts.css` declares its vendored @font-face rules under. The CJK stacks deliberately end WITHOUT a generic family. They are spliced into the middle of the three stacks above, and a generic in the middle terminates a font stack — everything listed after it is unreachable."
244
+ },
245
+ "serif": {
246
+ "layer": "tokens",
247
+ "category": "type",
248
+ "light": "var(--font-newsreader, 'Newsreader'), var(--cjk-serif), Georgia, serif"
249
+ },
250
+ "mono": {
251
+ "layer": "tokens",
252
+ "category": "type",
253
+ "light": "var(--font-plex-mono, 'IBM Plex Mono'), var(--cjk-sans), ui-monospace, SFMono-Regular, Menlo,\n monospace"
254
+ },
255
+ "cjk-serif": {
256
+ "layer": "tokens",
257
+ "category": "type",
258
+ "light": "var(--font-noto-serif-sc, 'Noto Serif SC'), 'Source Han Serif SC', 'Songti SC', STSong,\n SimSun"
259
+ },
260
+ "cjk-sans": {
261
+ "layer": "tokens",
262
+ "category": "type",
263
+ "light": "var(--font-noto-sans-sc, 'Noto Sans SC'), 'PingFang SC', 'Hiragino Sans GB',\n 'Microsoft YaHei'"
264
+ },
265
+ "lh-cjk": {
266
+ "layer": "tokens",
267
+ "category": "type",
268
+ "light": "1.8"
269
+ },
270
+ "ls-cjk": {
271
+ "layer": "tokens",
272
+ "category": "type",
273
+ "light": "0"
274
+ },
275
+ "fluid": {
276
+ "layer": "tokens",
277
+ "category": "other",
278
+ "light": "1vw",
279
+ "comment": "─── The fluid base ────────────────────────────────────────────────────── Every fluid step below is one percent of THIS, not of the viewport. The default is `1vw`, which is what a page wants. A bounded frame — a device preview, a documentation canvas, an embedded console — overrides it to `1cqi` and declares itself a `container`, and the whole ramp re-bases onto the frame's width. Without the seam a 390px preview inside a 1440px window renders 54px headings and 64px gutters, which is not what a 390px screen looks like and is exactly the bug this replaces. The ramp itself is declared once, below, for BOTH `:root` and a frame — rather than composed here and inherited. A custom property substitutes `var()` where it is DECLARED, so a ramp written only on `:root` bakes in `1vw` and a deeper `--fluid` never reaches it."
280
+ },
281
+ "maxw": {
282
+ "layer": "tokens",
283
+ "category": "space",
284
+ "light": "1288px"
285
+ },
286
+ "col": {
287
+ "layer": "tokens",
288
+ "category": "space",
289
+ "light": "8.3333%"
290
+ },
291
+ "row": {
292
+ "layer": "tokens",
293
+ "category": "space",
294
+ "light": "52px"
295
+ },
296
+ "fs-title": {
297
+ "layer": "tokens",
298
+ "category": "type",
299
+ "light": "clamp(2.5rem, calc(4.6 * var(--fluid)), 3.375rem)",
300
+ "comment": "page h1 40 → 54px"
301
+ },
302
+ "fs-lead": {
303
+ "layer": "tokens",
304
+ "category": "type",
305
+ "light": "clamp(1.875rem, calc(3 * var(--fluid)), 2.625rem)",
306
+ "comment": "band heading 30 → 42px"
307
+ },
308
+ "fs-heading": {
309
+ "layer": "tokens",
310
+ "category": "type",
311
+ "light": "clamp(1.5rem, calc(2.1 * var(--fluid)), 1.8125rem)",
312
+ "comment": "record title 24 → 29px"
313
+ },
314
+ "fs-sub": {
315
+ "layer": "tokens",
316
+ "category": "type",
317
+ "light": "clamp(1.3125rem, calc(1.7 * var(--fluid)), 1.5625rem)",
318
+ "comment": "card sub-head 21 → 25px"
319
+ },
320
+ "fs-item": {
321
+ "layer": "tokens",
322
+ "category": "type",
323
+ "light": "clamp(1.125rem, calc(1.35 * var(--fluid)), 1.25rem)",
324
+ "comment": "in-card title 18 → 20px"
325
+ },
326
+ "pad": {
327
+ "layer": "tokens",
328
+ "category": "space",
329
+ "light": "clamp(18px, calc(4.4 * var(--fluid)), 64px)"
330
+ },
331
+ "sec": {
332
+ "layer": "tokens",
333
+ "category": "space",
334
+ "light": "clamp(54px, calc(7 * var(--fluid)), 96px)"
335
+ },
336
+ "sec-tight": {
337
+ "layer": "tokens",
338
+ "category": "space",
339
+ "light": "clamp(40px, calc(5 * var(--fluid)), 68px)"
340
+ },
341
+ "radius-factor": {
342
+ "layer": "tokens",
343
+ "category": "radius",
344
+ "light": "1"
345
+ },
346
+ "radius-gate": {
347
+ "layer": "tokens",
348
+ "category": "radius",
349
+ "light": "min(1, var(--radius-factor))",
350
+ "comment": "Clamps the factor at 1 for the ADDING direction only. A frame's air is a fixed number of pixels, so `--radius-lg + 16px` would leave a rounded frame around a square panel the moment the theme went square; gated, it collapses to nothing along with everything else."
351
+ },
352
+ "radius-xs": {
353
+ "layer": "tokens",
354
+ "category": "radius",
355
+ "light": "calc(4px * var(--radius-factor))",
356
+ "comment": "a mark inside a tight box"
357
+ },
358
+ "radius-sm": {
359
+ "layer": "tokens",
360
+ "category": "radius",
361
+ "light": "calc(6px * var(--radius-factor))",
362
+ "comment": "chips, keys, list rows"
363
+ },
364
+ "radius": {
365
+ "layer": "tokens",
366
+ "category": "radius",
367
+ "light": "calc(8px * var(--radius-factor))",
368
+ "comment": "inputs, code, small plates"
369
+ },
370
+ "radius-lg": {
371
+ "layer": "tokens",
372
+ "category": "radius",
373
+ "light": "calc(12px * var(--radius-factor))",
374
+ "comment": "cards, dialogs, menu panels"
375
+ },
376
+ "radius-pill": {
377
+ "layer": "tokens",
378
+ "category": "radius",
379
+ "light": "calc(999px * var(--radius-factor))",
380
+ "comment": "capsules and counters"
381
+ },
382
+ "radius-row": {
383
+ "layer": "tokens",
384
+ "category": "radius",
385
+ "light": "max(0px, calc(var(--radius-lg) - 0.375rem))",
386
+ "comment": "a row in a 6px-padded panel"
387
+ },
388
+ "radius-frame": {
389
+ "layer": "tokens",
390
+ "category": "radius",
391
+ "light": "calc(var(--radius-lg) + 1rem * var(--radius-gate))",
392
+ "comment": "a frame 16px outside a panel"
393
+ },
394
+ "control-h-sm": {
395
+ "layer": "tokens",
396
+ "category": "density",
397
+ "light": "2.25rem",
398
+ "comment": "36px"
399
+ },
400
+ "control-h-md": {
401
+ "layer": "tokens",
402
+ "category": "density",
403
+ "light": "2.75rem",
404
+ "comment": "44px — WCAG 2.5.5"
405
+ },
406
+ "control-h-lg": {
407
+ "layer": "tokens",
408
+ "category": "density",
409
+ "light": "3rem",
410
+ "comment": "48px"
411
+ },
412
+ "control-px-sm": {
413
+ "layer": "tokens",
414
+ "category": "density",
415
+ "light": "1rem"
416
+ },
417
+ "control-px-md": {
418
+ "layer": "tokens",
419
+ "category": "density",
420
+ "light": "1.5rem"
421
+ },
422
+ "control-px-lg": {
423
+ "layer": "tokens",
424
+ "category": "density",
425
+ "light": "1.75rem"
426
+ },
427
+ "control-py-sm": {
428
+ "layer": "tokens",
429
+ "category": "density",
430
+ "light": "0.5rem",
431
+ "comment": "The vertical padding is part of the axis too, and has to be: a control whose padding alone exceeds the compact height never shrinks, because `min-height` is a floor and not a ceiling."
432
+ },
433
+ "control-py-md": {
434
+ "layer": "tokens",
435
+ "category": "density",
436
+ "light": "0.75rem"
437
+ },
438
+ "control-py-lg": {
439
+ "layer": "tokens",
440
+ "category": "density",
441
+ "light": "0.75rem"
442
+ },
443
+ "control-lh": {
444
+ "layer": "tokens",
445
+ "category": "density",
446
+ "light": "1.2",
447
+ "comment": "And so is the LEADING, which is the term that guard was missing. `min-height` is a floor, and what has to stay under it is the whole box: the line, the padding and the border. The padding was scaled and the line was left inheriting the body's 1.6 — so `sm` measured 20.8 + 16 + 2 = 38.8 against a 36px token, `md` 46 against 44 and `lg` 50 against 48. Every text button in the system was two to three pixels taller than the number documenting it, and the floor never bound because the box had already cleared it. One value on both densities: the font sizes do not move with density, only the padding and the heights do, so this does not have to. It is not a reading leading — a control's label is one line, and 1.2 leaves every size at every density inside its own height with room to spare. The test in `tokens.test.ts` is what keeps that true."
448
+ },
449
+ "control-gap": {
450
+ "layer": "tokens",
451
+ "category": "density",
452
+ "light": "0.625rem"
453
+ },
454
+ "field-px": {
455
+ "layer": "tokens",
456
+ "category": "density",
457
+ "light": "0.875rem",
458
+ "comment": "Text inputs are measured separately: they are read as much as they are hit, so their padding tracks the type rather than the target."
459
+ },
460
+ "field-py": {
461
+ "layer": "tokens",
462
+ "category": "density",
463
+ "light": "0.625rem"
464
+ },
465
+ "table-pad-y": {
466
+ "layer": "tokens",
467
+ "category": "other",
468
+ "light": "0.875rem",
469
+ "comment": "A table's own row padding. Separate from the control scale because a table row is neither a control nor a field — it is a line of text with a rule under it, and it tightens on its own axis."
470
+ },
471
+ "table-pad-x": {
472
+ "layer": "tokens",
473
+ "category": "other",
474
+ "light": "0px",
475
+ "comment": "`0px`, not `0`. The cell rule adds to this inside a calc, and a unitless zero makes `calc(0 + 1.5rem)` invalid at computed-value time — the whole declaration is dropped and every column loses its gutter in silence."
476
+ },
477
+ "sidebar-w": {
478
+ "layer": "tokens",
479
+ "category": "other",
480
+ "light": "16rem",
481
+ "comment": "─── Sidebar ──────────────────────────────────────────────────────────── The two widths a navigation rail has, and the reason they are tokens rather than numbers inside the component: an application shell has to reserve exactly this much beside its content, and a shell that hard-codes 17rem while the rail believes something else is a gap or an overlap that appears only at one window size. Both sides read the same name. `--sidebar-w-icon` is what is left when the rail collapses to icons. It is `--control-h-md` plus the rail's own padding, so a 44px pointer target still fits inside it at comfortable density — a collapsed rail whose rows are too small to hit is a rail nobody can use in the state it spends most of its life in."
482
+ },
483
+ "sidebar-w-icon": {
484
+ "layer": "tokens",
485
+ "category": "other",
486
+ "light": "3.5rem"
487
+ },
488
+ "bar-h": {
489
+ "layer": "tokens",
490
+ "category": "space",
491
+ "light": "calc(var(--control-h-md) + 0.75rem)"
492
+ },
493
+ "panel-bg": {
494
+ "layer": "tokens",
495
+ "category": "other",
496
+ "light": "var(--paper)",
497
+ "comment": "─── Floating surfaces ────────────────────────────────────────────────── What a panel that FLOATS fills with, and what it does to whatever is behind it. A dialog, a menu, a popover, a palette — the surfaces that sit OVER the page rather than in it, and therefore the only ones with anything behind them to treat. Both default to the plain surface and cost nothing. `--panel-filter: none` matters more than it looks: a `backdrop-filter` of any value, `blur(0px)` included, promotes its element to its own compositing layer and makes it a containing block for fixed descendants. Paid on every menu in the system, for a theme most readers will never turn on. `none` is not a blur of zero; it is no filter at all. A card is deliberately NOT on this list. It sits on the page ground, so there is nothing behind it to see through, and a card that blurs its own background is drawing an effect rather than an object."
498
+ },
499
+ "panel-border": {
500
+ "layer": "tokens",
501
+ "category": "other",
502
+ "light": "var(--rule-2)"
503
+ },
504
+ "panel-filter": {
505
+ "layer": "tokens",
506
+ "category": "other",
507
+ "light": "none"
508
+ },
509
+ "panel-lift": {
510
+ "layer": "tokens",
511
+ "category": "other",
512
+ "light": "0 2px 0 0 var(--rule-2), 0 5px 0 -1px var(--rule)",
513
+ "comment": "The offset under a floating panel, and it does not break Law 2: the law says a box-shadow is never BLURRED, not that there is never one. This is the same hard-offset idiom as `--lift`, in the rule colour rather than the accent — every menu in the system wearing a clay drop shadow would be a louder claim than \"this sits above the page\". Two steps, because one reads as a second border: a firm edge just below the panel and a softer one below that is a stack seen from the front, which is the flattest way to say depth without drawing light."
514
+ },
515
+ "ease": {
516
+ "layer": "tokens",
517
+ "category": "motion",
518
+ "light": "cubic-bezier(0.2, 0.7, 0.3, 1)",
519
+ "comment": "─── Motion ───"
520
+ },
521
+ "fast": {
522
+ "layer": "tokens",
523
+ "category": "motion",
524
+ "light": "0.13s"
525
+ },
526
+ "mid": {
527
+ "layer": "tokens",
528
+ "category": "motion",
529
+ "light": "0.22s"
530
+ },
531
+ "slow": {
532
+ "layer": "tokens",
533
+ "category": "motion",
534
+ "light": "0.34s"
535
+ },
536
+ "z-rule": {
537
+ "layer": "tokens",
538
+ "category": "layer",
539
+ "light": "1",
540
+ "comment": "─── Stacking ─── seven ranks, named for what sits at each. Every overlay in the package portals to document.body, so all of them are siblings in the ROOT stacking context and the rank is the whole of the decision — there is no ancestor left to nest one inside another. Read it as a sentence: a sticky header clears the page, a drawer clears the header, a scrim covers both, a modal sits on its scrim, an ANCHORED panel clears the modal it was opened from, and a toast clears everything because it is the only rank that has to survive a modal asking a question. --z-anchored is the one that is not obvious, and it is the one that was wrong. A popover, a menu or a select listbox is opened FROM something, and the surface it is most often opened from is a modal — a select inside a modal form is one of the most ordinary shapes in an application. Ranked below the modal, as it was, the panel is painted behind the very dialog that summoned it. The rank it replaced, --z-palette, was read by nothing: a command palette is a Dialog, so it lands at --z-modal, and its order against a second modal is settled by document order — which is the right answer, because it moves a scrim and its panel together."
541
+ },
542
+ "z-sticky": {
543
+ "layer": "tokens",
544
+ "category": "layer",
545
+ "light": "10"
546
+ },
547
+ "z-drawer": {
548
+ "layer": "tokens",
549
+ "category": "layer",
550
+ "light": "100"
551
+ },
552
+ "z-scrim": {
553
+ "layer": "tokens",
554
+ "category": "layer",
555
+ "light": "200"
556
+ },
557
+ "z-modal": {
558
+ "layer": "tokens",
559
+ "category": "layer",
560
+ "light": "210"
561
+ },
562
+ "z-anchored": {
563
+ "layer": "tokens",
564
+ "category": "layer",
565
+ "light": "220"
566
+ },
567
+ "z-toast": {
568
+ "layer": "tokens",
569
+ "category": "layer",
570
+ "light": "300"
571
+ },
572
+ "focus": {
573
+ "layer": "tokens",
574
+ "category": "focus",
575
+ "light": "var(--red)",
576
+ "comment": "─── Focus ───"
577
+ },
578
+ "focus-w": {
579
+ "layer": "tokens",
580
+ "category": "focus",
581
+ "light": "2px"
582
+ },
583
+ "focus-off": {
584
+ "layer": "tokens",
585
+ "category": "focus",
586
+ "light": "3px"
587
+ },
588
+ "ico-s": {
589
+ "layer": "tokens",
590
+ "category": "icon",
591
+ "light": "14px",
592
+ "comment": "─── Icons ─── three sizes, and no weight: a Remix Icon glyph is a filled path."
593
+ },
594
+ "ico-m": {
595
+ "layer": "tokens",
596
+ "category": "icon",
597
+ "light": "16px"
598
+ },
599
+ "ico-l": {
600
+ "layer": "tokens",
601
+ "category": "icon",
602
+ "light": "20px"
603
+ },
604
+ "ok": {
605
+ "layer": "tokens",
606
+ "category": "colour",
607
+ "light": "#3d6b34",
608
+ "comment": "─── Status ─── the only chroma in the system, and it is bound to state.",
609
+ "dark": "#84b47b"
610
+ },
611
+ "ok-soft": {
612
+ "layer": "tokens",
613
+ "category": "colour",
614
+ "light": "rgba(61, 107, 52, 0.13)",
615
+ "dark": "rgba(132, 180, 123, 0.16)"
616
+ },
617
+ "warn": {
618
+ "layer": "tokens",
619
+ "category": "colour",
620
+ "light": "#8a5a00",
621
+ "dark": "#d9a55d"
622
+ },
623
+ "warn-soft": {
624
+ "layer": "tokens",
625
+ "category": "colour",
626
+ "light": "rgba(138, 90, 0, 0.13)",
627
+ "dark": "rgba(217, 165, 93, 0.16)"
628
+ },
629
+ "danger": {
630
+ "layer": "tokens",
631
+ "category": "colour",
632
+ "light": "#a83214",
633
+ "dark": "#ee8b68"
634
+ },
635
+ "danger-soft": {
636
+ "layer": "tokens",
637
+ "category": "colour",
638
+ "light": "rgba(168, 50, 20, 0.14)",
639
+ "dark": "rgba(238, 139, 104, 0.16)"
640
+ },
641
+ "scrim": {
642
+ "layer": "tokens",
643
+ "category": "colour",
644
+ "light": "color-mix(in srgb, var(--ink) 62%, transparent)",
645
+ "dark": "color-mix(in srgb, #000 72%, transparent)"
646
+ },
647
+ "background": {
648
+ "layer": "semantic",
649
+ "category": "colour",
650
+ "light": "var(--paper)",
651
+ "comment": "─── Surfaces ───────────────────────────────────────────────────────────"
652
+ },
653
+ "background-elevated": {
654
+ "layer": "semantic",
655
+ "category": "colour",
656
+ "light": "var(--paper-2)"
657
+ },
658
+ "code-background": {
659
+ "layer": "semantic",
660
+ "category": "colour",
661
+ "light": "var(--bar)"
662
+ },
663
+ "nav-background": {
664
+ "layer": "semantic",
665
+ "category": "colour",
666
+ "light": "var(--paper)"
667
+ },
668
+ "card-background": {
669
+ "layer": "semantic",
670
+ "category": "colour",
671
+ "light": "var(--paper)",
672
+ "comment": "Kept as an alias rather than removed: the White Reset retired the card surface, so an elevated variant has nothing left to point at. Consumers written against it keep resolving, on paper."
673
+ },
674
+ "foreground": {
675
+ "layer": "semantic",
676
+ "category": "colour",
677
+ "light": "var(--ink)",
678
+ "comment": "─── Text ───────────────────────────────────────────────────────────────"
679
+ },
680
+ "foreground-muted": {
681
+ "layer": "semantic",
682
+ "category": "colour",
683
+ "light": "var(--ink-2)"
684
+ },
685
+ "secondary-text": {
686
+ "layer": "semantic",
687
+ "category": "space",
688
+ "light": "var(--ink-3-aa)"
689
+ },
690
+ "on-dark": {
691
+ "layer": "semantic",
692
+ "category": "colour",
693
+ "light": "#fbfbfa",
694
+ "comment": "Text sitting on a PHOTOGRAPH — a hero, a lightbox, a scrim. A photograph is a dark ground in BOTH themes, so this must not follow the paper/ink swap: as var(--paper) it inverted to near-black in dark mode, which is how headings disappeared into their own images. A literal, not var(--ink)."
695
+ },
696
+ "brand-plate": {
697
+ "layer": "semantic",
698
+ "category": "colour",
699
+ "light": "#ffffff",
700
+ "comment": "The ground under a THIRD-PARTY brand mark, and for the same reason: a foreign logo is drawn against one fixed backdrop and shipped flat, with no light-ink sibling. A plate that followed the swap erased it in dark mode. Not for our own marks, which are authored against the theme."
701
+ },
702
+ "border-color": {
703
+ "layer": "semantic",
704
+ "category": "colour",
705
+ "light": "var(--rule-2)",
706
+ "comment": "─── Lines ──────────────────────────────────────────────────────────────"
707
+ },
708
+ "border-subtle": {
709
+ "layer": "semantic",
710
+ "category": "colour",
711
+ "light": "var(--rule)"
712
+ },
713
+ "accent": {
714
+ "layer": "semantic",
715
+ "category": "colour",
716
+ "light": "var(--red)",
717
+ "comment": "─── Accent ───────────────────────────────────────────────────────────── One pointer, and in a monochrome system it points at ink — law 7. Every surface that marks a CHOICE reads from here rather than from --ink directly: a primary button, a checked box, the active tab, the current page, a slider's filled range, the selected day. That distinction is the whole point of having a pointer at all. While the accent IS ink the two render identically, which is why it went unnoticed that half the system was reading the primitive — and why re-pointing this one token now re-skins the system without a component being touched."
718
+ },
719
+ "accent-hover": {
720
+ "layer": "semantic",
721
+ "category": "colour",
722
+ "light": "var(--red-ink)"
723
+ },
724
+ "accent-muted": {
725
+ "layer": "semantic",
726
+ "category": "colour",
727
+ "light": "var(--red-soft)"
728
+ },
729
+ "accent-wash": {
730
+ "layer": "semantic",
731
+ "category": "colour",
732
+ "light": "var(--red-soft)"
733
+ },
734
+ "accent-foreground": {
735
+ "layer": "semantic",
736
+ "category": "colour",
737
+ "light": "var(--on-red)"
738
+ },
739
+ "accent-on-dark": {
740
+ "layer": "semantic",
741
+ "category": "colour",
742
+ "light": "var(--red)"
743
+ },
744
+ "accent-on-muted": {
745
+ "layer": "semantic",
746
+ "category": "colour",
747
+ "light": "var(--red-ink)",
748
+ "comment": "Accent text sitting on an accent-muted panel, which --accent cannot do: it clears AA on paper by 4.58:1, and any tint of itself underneath pushes it below 4.5. This names the situation so the choice is not left to whoever writes the next panel."
749
+ },
750
+ "success": {
751
+ "layer": "semantic",
752
+ "category": "colour",
753
+ "light": "var(--ok)",
754
+ "comment": "─── Status ─── bound to state, never to brand. ─────────────────────────"
755
+ },
756
+ "success-wash": {
757
+ "layer": "semantic",
758
+ "category": "colour",
759
+ "light": "var(--ok-soft)"
760
+ },
761
+ "warning": {
762
+ "layer": "semantic",
763
+ "category": "colour",
764
+ "light": "var(--warn)"
765
+ },
766
+ "warning-wash": {
767
+ "layer": "semantic",
768
+ "category": "colour",
769
+ "light": "var(--warn-soft)"
770
+ },
771
+ "danger-wash": {
772
+ "layer": "semantic",
773
+ "category": "colour",
774
+ "light": "var(--danger-soft)"
775
+ },
776
+ "info": {
777
+ "layer": "semantic",
778
+ "category": "colour",
779
+ "light": "var(--ink-2)"
780
+ },
781
+ "info-wash": {
782
+ "layer": "semantic",
783
+ "category": "colour",
784
+ "light": "var(--red-soft)"
785
+ },
786
+ "photo-scrim": {
787
+ "layer": "semantic",
788
+ "category": "colour",
789
+ "light": "#101010",
790
+ "comment": "The photo scrim is always dark by design, so it takes the ink literal rather than the semantic token (which inverts)."
791
+ },
792
+ "chart-surface": {
793
+ "layer": "semantic",
794
+ "category": "data",
795
+ "light": "var(--paper)",
796
+ "comment": "─── Data ───────────────────────────────────────────────────────────── What a chart is allowed to read. The series ramp itself stays a primitive — a chart names a SERIES by index, and an index has no role to alias — but everything around the marks does have one, and naming it here is what keeps a chart from reaching for --rule or --ink directly. --chart-cursor is deliberately heavier than --chart-grid: the crosshair has to be findable against the grid it crosses, and at hairline weight on a dashed grid it was not."
797
+ },
798
+ "chart-grid": {
799
+ "layer": "semantic",
800
+ "category": "data",
801
+ "light": "var(--rule)"
802
+ },
803
+ "chart-cursor": {
804
+ "layer": "semantic",
805
+ "category": "data",
806
+ "light": "var(--rule-2)"
807
+ },
808
+ "chart-axis": {
809
+ "layer": "semantic",
810
+ "category": "data",
811
+ "light": "var(--ink-3-aa)"
812
+ },
813
+ "chart-track": {
814
+ "layer": "semantic",
815
+ "category": "data",
816
+ "light": "var(--series-track)"
817
+ },
818
+ "chart-pattern": {
819
+ "layer": "semantic",
820
+ "category": "data",
821
+ "light": "var(--rule)",
822
+ "comment": "The decorative plate behind the plot — a dot field, a hatch, a grid of plus marks. One step quieter than the grid, because it sits BEHIND data and must never compete with it for the same read."
823
+ },
824
+ "shadow-color": {
825
+ "layer": "semantic",
826
+ "category": "depth",
827
+ "light": "transparent",
828
+ "comment": "─── Depth ──────────────────────────────────────────────────────────── Law 2 — a box-shadow is never blurred. The system has no elevation ramp; depth is a hard offset in ink, applied per component. These three resolve to nothing on purpose, so a component ported from a shadowed system stays flat instead of drawing a blur the White Reset does not have. --lift below is the sanctioned offset idiom for anything that must read as raised."
829
+ },
830
+ "shadow-sm": {
831
+ "layer": "semantic",
832
+ "category": "depth",
833
+ "light": "none"
834
+ },
835
+ "shadow": {
836
+ "layer": "semantic",
837
+ "category": "depth",
838
+ "light": "none"
839
+ },
840
+ "shadow-lg": {
841
+ "layer": "semantic",
842
+ "category": "depth",
843
+ "light": "none"
844
+ },
845
+ "lift": {
846
+ "layer": "semantic",
847
+ "category": "depth",
848
+ "light": "3px 3px 0 0 var(--shadow-offset)",
849
+ "comment": "The one depth cue the system does have: a hard 3px ink offset, no blur, in the accent rather than a grey because --shadow-offset points at --clay. PUBLISHED, NOT CONSUMED. No component in this package sets either one — there is not a single shadow-(--lift) in src/. What the library actually separates with is a hairline, a change of ground, and the reversal that Card variant=\"plate\" reaches for. These two exist so a consumer building a raised plate of their own has the system's answer instead of inventing a blur; do not read them as describing what the library does."
850
+ },
851
+ "lift-sm": {
852
+ "layer": "semantic",
853
+ "category": "depth",
854
+ "light": "2px 2px 0 0 var(--shadow-offset)"
855
+ },
856
+ "ring": {
857
+ "layer": "semantic",
858
+ "category": "focus",
859
+ "light": "var(--focus)",
860
+ "comment": "─── Focus + motion ─── the site's long-lived names onto the primitives."
861
+ },
862
+ "ring-offset": {
863
+ "layer": "semantic",
864
+ "category": "focus",
865
+ "light": "var(--focus-off)"
866
+ },
867
+ "ease-out-expo": {
868
+ "layer": "semantic",
869
+ "category": "motion",
870
+ "light": "var(--ease)"
871
+ },
872
+ "duration-fast": {
873
+ "layer": "semantic",
874
+ "category": "motion",
875
+ "light": "var(--fast)"
876
+ },
877
+ "duration-base": {
878
+ "layer": "semantic",
879
+ "category": "motion",
880
+ "light": "var(--mid)"
881
+ },
882
+ "duration-slow": {
883
+ "layer": "semantic",
884
+ "category": "motion",
885
+ "light": "var(--slow)"
886
+ },
887
+ "overlay": {
888
+ "layer": "semantic",
889
+ "category": "colour",
890
+ "light": "var(--scrim)"
891
+ },
892
+ "disabled-opacity": {
893
+ "layer": "semantic",
894
+ "category": "depth",
895
+ "light": "0.5"
896
+ },
897
+ "z-dropdown": {
898
+ "layer": "semantic",
899
+ "category": "layer",
900
+ "light": "var(--z-anchored)",
901
+ "comment": "─── Stacking ─── two component-facing names onto the seven ranks. ────── The other five ranks are read by their own names; only these two had a component-facing spelling that outlived the rank it pointed at. --z-dropdown pointed at --z-drawer, 100, which put every anchored panel under the modal at 210 that opened it."
902
+ },
903
+ "z-overlay": {
904
+ "layer": "semantic",
905
+ "category": "layer",
906
+ "light": "var(--z-scrim)"
907
+ },
908
+ "diagram-surface": {
909
+ "layer": "semantic",
910
+ "category": "other",
911
+ "light": "var(--paper)",
912
+ "comment": "─── Diagrams ─────────────────────────────────────────────────────────── The figures in `@misoto22/folio/diagrams`, which draw in SVG and therefore cannot read a custom property from a presentation attribute — every one of these reaches a mark through a style rule. Named separately from the page's own rules rather than pointed straight at --rule-2 because a figure is a PICTURE inside a document: its hairline has to hold up against a 1200-wide raster export and a greyscale print, where the page's own hairline is chosen to disappear. Keeping the two apart is what lets a figure be tuned without touching a table. Nothing here is a hue. The seven kinds of node are separated by drawn sigils, and the only colour a figure spends is --success / --danger on a terminal lifecycle state — the same two the rest of the system reserves for state and refuses to spend on brand."
913
+ },
914
+ "diagram-node": {
915
+ "layer": "semantic",
916
+ "category": "other",
917
+ "light": "var(--paper)"
918
+ },
919
+ "diagram-node-2": {
920
+ "layer": "semantic",
921
+ "category": "other",
922
+ "light": "var(--paper-2)"
923
+ },
924
+ "diagram-band": {
925
+ "layer": "semantic",
926
+ "category": "other",
927
+ "light": "var(--stone)"
928
+ },
929
+ "diagram-chip": {
930
+ "layer": "semantic",
931
+ "category": "other",
932
+ "light": "var(--paper-2)"
933
+ },
934
+ "diagram-rule": {
935
+ "layer": "semantic",
936
+ "category": "other",
937
+ "light": "var(--rule-2)"
938
+ },
939
+ "diagram-rule-hard": {
940
+ "layer": "semantic",
941
+ "category": "other",
942
+ "light": "var(--ink-3-aa)"
943
+ },
944
+ "diagram-line": {
945
+ "layer": "semantic",
946
+ "category": "other",
947
+ "light": "var(--ink-2)"
948
+ },
949
+ "diagram-line-strong": {
950
+ "layer": "semantic",
951
+ "category": "other",
952
+ "light": "var(--ink)"
953
+ },
954
+ "diagram-line-soft": {
955
+ "layer": "semantic",
956
+ "category": "colour",
957
+ "light": "var(--ink-3-aa)"
958
+ },
959
+ "diagram-sigil": {
960
+ "layer": "semantic",
961
+ "category": "other",
962
+ "light": "var(--ink-3-aa)"
963
+ },
964
+ "diagram-ink": {
965
+ "layer": "semantic",
966
+ "category": "other",
967
+ "light": "var(--ink)"
968
+ },
969
+ "diagram-ink-2": {
970
+ "layer": "semantic",
971
+ "category": "other",
972
+ "light": "var(--ink-2)"
973
+ },
974
+ "diagram-ink-3": {
975
+ "layer": "semantic",
976
+ "category": "other",
977
+ "light": "var(--ink-3-aa)"
978
+ },
979
+ "diagram-plate": {
980
+ "layer": "semantic",
981
+ "category": "other",
982
+ "light": "var(--accent)",
983
+ "comment": "The reversed plate, and its type. A figure gets ONE of these — the node the diagram is about — for the same reason a page gets one Card variant=\"plate\"."
984
+ },
985
+ "diagram-plate-ink": {
986
+ "layer": "semantic",
987
+ "category": "other",
988
+ "light": "var(--accent-foreground)"
989
+ },
990
+ "page-pad": {
991
+ "layer": "semantic",
992
+ "category": "space",
993
+ "light": "var(--pad)",
994
+ "comment": "─── Layout ─────────────────────────────────────────────────────────────"
995
+ },
996
+ "w-page": {
997
+ "layer": "semantic",
998
+ "category": "space",
999
+ "light": "var(--maxw)"
1000
+ },
1001
+ "w-reading": {
1002
+ "layer": "semantic",
1003
+ "category": "space",
1004
+ "light": "46rem",
1005
+ "comment": "Caps the prose track only, which is what a 73ch measure is for."
1006
+ },
1007
+ "measure-record": {
1008
+ "layer": "semantic",
1009
+ "category": "space",
1010
+ "light": "66ch",
1011
+ "comment": "The cap on a listed record's description — a row, a card, a CV entry. In `ch` rather than px so it tracks the type it is set in, and one token rather than the six hand-picked widths surfaces had drifted into. A ceiling, not a width: a narrower column still wins."
1012
+ },
1013
+ "scroll-offset": {
1014
+ "layer": "semantic",
1015
+ "category": "space",
1016
+ "light": "calc(var(--bar-h) + 1.5rem)",
1017
+ "comment": "How far below the viewport top an anchored heading comes to rest — a fixed masthead plus a line of air. Both halves are now named: the masthead is `--bar-h`, so a bar that moves takes its anchors with it, where `88px` was a number somebody derived once by hand and nothing kept in step."
1018
+ }
1019
+ }