@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,28 @@
1
+ .folio-recovery-actions { display: flex; flex-wrap: wrap; align-items: center; gap: .75rem; }
2
+ .folio-recovery-links { margin-block: clamp(3.5rem, 7vw, 6rem) 3rem; }
3
+ .folio-recovery-links ul { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0 4rem; margin: .25rem 0 0; padding: 0; list-style: none; }
4
+ .folio-recovery-links li { border-block-end: 1px solid var(--rule); padding-block: .25rem; }
5
+ .folio-loading-container { inline-size: 100%; max-inline-size: var(--w-page); margin-inline: auto; padding-inline: var(--page-pad); }
6
+ .folio-loading-intro { display: grid; align-items: end; gap: clamp(2rem, 5vw, 5rem); padding-block: clamp(4.5rem, 9vw, 7rem) clamp(2.75rem, 5vw, 4.5rem); }
7
+ .folio-loading-records, .folio-loading-gallery, .folio-loading-metrics { padding-block-end: clamp(4rem, 9vw, 8rem); }
8
+ .folio-loading-records__row { display: grid; gap: 1rem 2.25rem; border-block-end: 1px solid var(--rule); padding-block: 2rem; }
9
+ .folio-loading-records__row:first-child { border-block-start: 1px solid var(--rule-hard); }
10
+ .folio-loading-filters { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 1.5rem; padding-block: 1rem; }
11
+ .folio-loading-gallery { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2rem .75rem; }
12
+ .folio-loading-media { border-block: 1px solid var(--rule); background: var(--paper-2); }
13
+ .folio-loading-metrics__figures { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); border-block: 1px solid var(--rule); }
14
+ .folio-loading-metrics__figures > div { padding: clamp(1.5rem, 4vw, 2.25rem) clamp(1rem, 3vw, 1.625rem); }
15
+ .folio-loading-identity { display: grid; align-items: center; gap: 3.5rem; padding-block: clamp(7rem, 9vw, 8rem) clamp(2.5rem, 5vw, 4rem); }
16
+ @media (min-width: 640px) {
17
+ .folio-recovery-links ul { grid-template-columns: repeat(2, minmax(0, 1fr)); }
18
+ .folio-loading-records__row { grid-template-columns: 11rem minmax(0, 1fr); }
19
+ .folio-loading-records__row[data-media] { grid-template-columns: 2rem 15.375rem minmax(0, 1fr); }
20
+ }
21
+ @media (min-width: 768px) {
22
+ .folio-loading-intro { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
23
+ .folio-loading-gallery { grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: 1.5rem; }
24
+ }
25
+ @media (min-width: 1024px) {
26
+ .folio-loading-metrics__figures { grid-template-columns: repeat(4, minmax(0, 1fr)); }
27
+ .folio-loading-identity { grid-template-columns: minmax(0, 1fr) minmax(20rem, 30rem); gap: clamp(3rem, 6vw, 6rem); }
28
+ }
@@ -0,0 +1,26 @@
1
+ .folio-search-palette__search { position: relative; }
2
+ .folio-search-palette__search:focus-within { background: var(--paper-2); }
3
+ .folio-search-palette__search input { padding-inline-end: 3rem; font-size: .875rem; }
4
+ .folio-search-palette__search input:focus, .folio-search-palette__search input:focus-visible,
5
+ .folio-search-palette__input input:focus, .folio-search-palette__input input:focus-visible { outline: none; box-shadow: none; }
6
+ .folio-search-palette__close { position: absolute; inset-block-start: 50%; inset-inline-end: .5rem; translate: 0 -50%; }
7
+ .folio-search-palette__input { display: flex; align-items: center; gap: .5rem; padding: .75rem; border-block-end: 1px solid var(--rule); }
8
+ .folio-search-palette__input input { min-inline-size: 0; }
9
+ .folio-search-palette__detail { max-block-size: calc(80svh - 6.5rem); overflow-y: auto; overscroll-behavior: contain; padding: 1.5rem; }
10
+ .folio-search-palette__result { flex: 1; min-inline-size: 0; display: grid; gap: .125rem; }
11
+ .folio-search-palette__result > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
12
+ .folio-search-palette__description { color: var(--ink-3-aa); font-size: .75rem; }
13
+ .folio-search-palette__heading { font-family: var(--sans); font-size: .75rem; letter-spacing: normal; text-transform: none; }
14
+ .folio-search-palette__item { margin: .125rem 0; border-radius: var(--radius-sm); font-size: .875rem; }
15
+ .folio-search-palette__item::before { display: none; }
16
+ .folio-search-palette__item[data-selected=true] { background: var(--paper-2); box-shadow: inset 0 0 0 1px var(--rule); }
17
+ .folio-search-palette__meta { font-family: var(--sans); font-size: .6875rem; opacity: 0; }
18
+ .folio-search-palette__item[data-selected=true] .folio-search-palette__meta { opacity: 1; }
19
+ .folio-search-palette__highlight { color: var(--ink); background: var(--stone); border-radius: var(--radius-sm); }
20
+ .folio-search-palette__footer { flex-wrap: wrap; }
21
+ @media (max-width: 40rem) {
22
+ .folio-search-palette__search input { font-size: 1rem; }
23
+ .folio-search-palette__detail { max-block-size: calc(84svh - 4.5rem); }
24
+ .folio-search-palette__meta { display: none; }
25
+ .folio-search-palette__footer { display: none; }
26
+ }
@@ -0,0 +1,89 @@
1
+ @layer base {
2
+ .folio-site-shell { min-block-size: 100svh; background: var(--background); color: var(--foreground); }
3
+ .folio-site-shell main { min-block-size: 60svh; }
4
+ }
5
+ .folio-site-container { max-inline-size: var(--w-page); margin-inline: auto; padding-inline: var(--page-pad); }
6
+ .folio-site-skip { position: fixed; inset-block-start: 1rem; inset-inline-start: 1rem; z-index: var(--z-toast); padding: .75rem 1rem; background: var(--paper); color: var(--ink); border: 1px solid var(--rule); transform: translateY(-200%); }
7
+ .folio-site-skip:focus { transform: none; }
8
+ .folio-site-navigation { position: fixed; inset: 0 0 auto; z-index: var(--z-sticky); background: var(--paper); color: var(--ink); border-block-end: 1px solid var(--rule); transition: background-color var(--duration-fast), color var(--duration-fast); }
9
+ .folio-site-navigation[data-overlay] { background: transparent; color: var(--on-dark); border-color: transparent; }
10
+ .folio-site-navigation { inset-inline-end:auto; inline-size:100%; }
11
+ .folio-navigation-search { inline-size: clamp(10rem, 16vw, 14rem); justify-content: flex-start; gap: .65rem; border: 1px solid var(--rule); border-radius: .625rem; background: var(--paper-2); color: var(--ink-2); padding-inline: .875rem; }
12
+ .folio-navigation-search-label { font-size: .8rem; }
13
+ .folio-navigation-search { block-size:44px; padding-block:0; flex-shrink:0; }
14
+ .folio-navigation-search kbd { margin-inline-start: auto; font-size: .7rem; border: 1px solid var(--rule); padding: .15rem .35rem; background: var(--paper); color: var(--ink-3-aa); }
15
+ @media (max-width: 599px) {
16
+ .folio-navigation-search-label { display: none; }
17
+ .folio-navigation-search kbd { margin-inline-start: 0; }
18
+ .folio-navigation-search { inline-size: auto; gap: .4rem; padding-inline: .5rem; }
19
+ }
20
+ .folio-site-navigation[data-overlay]::before { content: ''; position: absolute; inset: 0 0 -3rem; z-index: -1; pointer-events: none; background: linear-gradient(color-mix(in srgb, var(--photo-scrim) 45%, transparent), transparent); }
21
+ .folio-site-navigation-inner { max-inline-size: var(--w-page); padding-inline: var(--page-pad); margin-inline: auto; min-block-size: 4.25rem; display: flex; align-items: center; gap: 2rem; }
22
+ .folio-site-wordmark { font-family: var(--font-heading); font-size: 1.4rem; letter-spacing: -.025em; white-space: nowrap; }
23
+ .folio-site-wordmark a { display: inline-flex; align-items: center; min-block-size: 44px; }
24
+ .folio-site-navigation-desktop { margin-inline-start: auto; }
25
+ .folio-site-navigation-desktop ul { list-style: none; padding: 0; margin: 0; display: flex; gap: 1.6rem; }
26
+ .folio-site-navigation-link { display: inline-flex; align-items: center; min-block-size: 44px; font-family: var(--sans); font-size: .875rem; color: inherit; opacity: .7; text-decoration: none; }
27
+ .folio-site-navigation-link[aria-current] { opacity: 1; text-decoration: underline; text-underline-offset: 8px; text-decoration-thickness: 1px; }
28
+ .folio-site-navigation-link:hover { opacity: 1; }
29
+ .folio-site-navigation-actions { display: flex; align-items: center; gap: .4rem; }
30
+ .folio-site-navigation-actions>button { flex-shrink:0; }
31
+ @media(max-width:359px) {
32
+ .folio-site-navigation .folio-site-navigation-inner { padding-inline:12px; gap:4px; }
33
+ .folio-site-navigation .folio-site-wordmark { font-size:1.05rem; }
34
+ .folio-site-navigation .folio-site-navigation-actions { gap:0; }
35
+ .folio-navigation-search kbd { display:none; }
36
+ .folio-navigation-search { inline-size:44px; justify-content:center; }
37
+ }
38
+ .folio-site-navigation-toggle { display: none; }
39
+ .folio-site-navigation-sheet { padding: max(1rem, env(safe-area-inset-top)) 1rem 1rem; max-block-size: 85svh; border-radius: 0 0 1rem 1rem; background: var(--paper); backdrop-filter: none; transition: none; translate: none; }
40
+ .folio-site-navigation-sheet[data-state=open] { animation: folio-navigation-down 260ms var(--ease-out-expo) both; }
41
+ .folio-site-navigation-sheet[data-state=closed] { animation: folio-navigation-up 180ms var(--ease) both; }
42
+ .folio-site-navigation-sheet>div:first-child { margin: 0; min-block-size: 3rem; padding-inline: .75rem 3rem; justify-content: center; border-block-end: 1px solid var(--rule); }
43
+ .folio-site-navigation-sheet h2 { font-family: var(--sans); font-size: .75rem; font-weight: 500; color: var(--ink-3-aa); }
44
+ .folio-site-navigation-sheet>button { inset-block-start: max(1rem, env(safe-area-inset-top)); inset-inline-end: 1rem; inline-size: 44px; block-size: 44px; }
45
+ .folio-site-navigation-mobile { display: flex; flex-direction: column; gap: .25rem; padding-block-start: .75rem; }
46
+ .folio-site-navigation-mobile .folio-site-navigation-link { justify-content: space-between; min-block-size: 48px; padding-inline: .75rem; font-size: 1rem; border-radius: var(--radius-md); color: var(--ink-2); opacity: 1; text-decoration: none; }
47
+ .folio-site-navigation-mobile .folio-site-navigation-link[aria-current] { background: var(--paper-2); color: var(--ink); }
48
+ .folio-site-navigation-mobile .folio-site-navigation-link[aria-current]::after { content: ''; inline-size: 5px; block-size: 5px; border-radius: 50%; background: currentColor; }
49
+ .folio-site-navigation-mobile .folio-site-navigation-link:hover { background: var(--paper-2); }
50
+ @keyframes folio-navigation-down { from { transform: translateY(-100%); } to { transform: translateY(0); } }
51
+ @keyframes folio-navigation-up { from { transform: translateY(0); } to { transform: translateY(-100%); } }
52
+ .folio-site-navigation-footer { margin-block-start: auto; padding-block-start: 2rem; color: var(--ink-2); }
53
+ .folio-site-footer { border-block-start: 1px solid var(--rule); padding-block: 3rem 6rem; background: var(--paper); }
54
+ .folio-site-footer-masthead { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 1rem; }
55
+ .folio-site-footer-masthead > a { font-size: .9rem; color: var(--ink-2); min-block-size: 44px; display: inline-flex; align-items: center; }
56
+ .folio-site-footer-description { margin-block: .75rem 0; color: var(--ink-3-aa); font-size: .85rem; }
57
+ .folio-site-footer-groups { display: grid; grid-template-columns: 2fr 2fr 1fr; gap: 3rem; margin-block-start: 2rem; padding-block-start: 1.5rem; border-block-start: 1px solid var(--rule); }
58
+ .folio-site-footer h2 { font-family: var(--sans); font-size: .85rem; font-weight: 500; color: var(--ink-3-aa); margin-block-end: .75rem; }
59
+ .folio-site-footer ul { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 1rem; }
60
+ .folio-site-footer li a { min-block-size: 44px; display: inline-flex; align-items: center; font-size: .85rem; color: var(--ink-2); overflow-wrap: anywhere; }
61
+ .folio-site-footer li a:hover { color: var(--ink); text-decoration: underline; text-underline-offset: 4px; }
62
+ .folio-site-footer [data-kind='files'] a { font-family: var(--mono); font-size: .75rem; }
63
+ .folio-site-footer [data-kind='social'] ul { display: flex; flex-wrap: wrap; gap: .25rem; }
64
+ .folio-site-footer [data-kind='social'] a { min-inline-size: 44px; justify-content: center; }
65
+ .folio-site-colophon { margin-block-start: 2rem; padding-block-start: 1.5rem; border-block-start: 1px solid var(--rule); display: flex; flex-wrap: wrap; justify-content: space-between; gap: 1rem; font-family: var(--sans); font-size: .75rem; color: var(--ink-3-aa); }
66
+ .folio-site-section-heading { margin-block-end: clamp(2rem, 4vw, 3.5rem); }
67
+ .folio-site-section-heading p { max-inline-size: 42rem; margin-block-start: .8rem; }
68
+ .folio-site-link { display: inline-flex; align-items: center; gap: .5rem; min-block-size: 44px; font-family: var(--sans); font-size: .875rem; color: var(--ink-2); text-decoration: underline; text-decoration-color: var(--rule-2); text-underline-offset: 5px; transition: color var(--duration-fast); }
69
+ .folio-site-link:hover { color: var(--ink); text-decoration-color: currentColor; }
70
+ .folio-site-link-back { text-decoration: none; }
71
+ .folio-site-link-back::before { content: '↳'; }
72
+ .folio-site-link-meta { font-size: .85rem; }
73
+ .folio-site-preference-item { position: relative; display: flex; align-items: center; gap: .75rem; min-block-size: 44px; padding: .5rem 1.75rem .5rem .75rem; color: var(--ink-2); font-family: var(--sans); font-size: .875rem; outline: none; border-radius: var(--radius-sm); cursor: default; }
74
+ .folio-site-preference-item[data-highlighted] { background: var(--paper-2); color: var(--ink); }
75
+ .folio-site-preference-item > span:first-child { flex: 1; }
76
+ .folio-site-preference-indicator { position: absolute; inset-inline-end: .5rem; }
77
+ .folio-locale-mark{display:inline-flex;align-items:baseline;gap:.15rem;font-family:var(--mono-i18n,var(--font-mono));font-size:.7rem;font-weight:600;letter-spacing:-.08em;line-height:1}.folio-locale-mark>span{color:var(--ink-3-aa);font-weight:400}
78
+ @media (max-width: 899px) {
79
+ .folio-site-navigation-desktop { display: none; }
80
+ .folio-site-navigation-actions { margin-inline-start: auto; gap: .1rem; }
81
+ .folio-site-navigation-inner { gap: .5rem; }
82
+ .folio-site-navigation-toggle { display: inline-flex; }
83
+ .folio-site-wordmark { font-size: 1.2rem; }
84
+ }
85
+ @media (max-width: 767px) {
86
+ .folio-site-footer-groups { grid-template-columns: 1fr 1fr; gap: 2rem 1.25rem; }
87
+ .folio-site-footer-groups [data-kind='social'] { grid-column: 1 / -1; }
88
+ .folio-site-footer ul { grid-template-columns: 1fr; }
89
+ }
@@ -0,0 +1,43 @@
1
+ .folio-record-section { scroll-margin-block-start: var(--scroll-offset); }
2
+ .folio-record-section__header { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; padding-block-end: 1rem; border-block-end: 1px solid var(--rule-hard); }
3
+ .folio-career-record { display: grid; gap: 1rem; border-block-end: 1px solid var(--rule); padding-block: clamp(2rem, 3.5vw, 3rem); }
4
+ .folio-career-record__dates { display: flex; flex-wrap: wrap; align-items: baseline; gap: 1rem; }
5
+ .folio-career-record__dates dl, .folio-career-record__dates dd { margin: 0; }
6
+ .folio-career-record__dates dl { display: flex; flex-wrap: wrap; gap: .5rem 1rem; }
7
+ .folio-career-record__dates dd { font-variant-numeric: tabular-nums; }
8
+ .folio-career-record__body { min-inline-size: 0; }
9
+ .folio-career-record__description { margin-block: 1.25rem 0; max-inline-size: var(--measure-record); padding-inline-start: 1.25rem; list-style: disc; }
10
+ .folio-career-record__description > li + li { margin-block-start: .5rem; }
11
+ .folio-career-record__tags { display: flex; flex-wrap: wrap; gap: .5rem; margin-block: 1.25rem 0; list-style: none; padding: 0; }
12
+ .folio-career-record__mark { display: none; }
13
+ .folio-career-record__mark img { inline-size: 4rem; block-size: 4rem; object-fit: contain; }
14
+ .folio-profile-section, .folio-profile-narrative { padding-block: clamp(3rem, 6vw, 5rem); }
15
+ .folio-profile-section__header { display: flex; flex-direction: column; gap: 1rem; margin-block-end: clamp(2rem, 4vw, 3rem); }
16
+ .folio-profile-narrative { display: grid; gap: 2rem; }
17
+ .folio-profile-figure { margin: 0; padding-block: clamp(2rem, 5vw, 4rem); }
18
+ .folio-profile-figure__image { overflow: hidden; border-radius: var(--radius); }
19
+ .folio-profile-figure__image img { display: block; inline-size: 100%; block-size: auto; }
20
+ .folio-profile-skills__group { display: grid; gap: 1rem; border-block-end: 1px solid var(--rule); padding-block: 1.5rem; }
21
+ .folio-profile-skills__group:first-child { border-block-start: 1px solid var(--rule-hard); }
22
+ .folio-profile-skills__items { display: flex; flex-wrap: wrap; gap: .75rem 1.5rem; list-style: none; margin: 0; padding: 0; }
23
+ .folio-profile-skills__items > li { display: inline-flex; align-items: center; gap: .5rem; }
24
+ .folio-profile-skill__icon { display: inline-flex; }
25
+ .folio-profile-skill__icon:empty { display: none; }
26
+ .folio-profile-skill__icon [data-artwork='dark'] { display: none; }
27
+ [data-mode='dark'] .folio-profile-skill__icon[data-has-dark] [data-artwork='light'] { display: none; }
28
+ [data-mode='dark'] .folio-profile-skill__icon[data-has-dark] [data-artwork='dark'] { display: inline-flex; }
29
+ [data-mode='dark'] .folio-profile-skill__icon[data-invert]:not([data-has-dark]) img { filter: invert(1); }
30
+ .folio-profile-interests { display: grid; gap: 2rem; }
31
+ .folio-profile-interests article { border-block-start: 1px solid var(--rule); padding-block-start: 1.5rem; }
32
+ .folio-timeline { border-block-start: 1px solid var(--rule-hard); }
33
+ .folio-timeline__item { min-inline-size: 0; }
34
+ @media (min-width: 768px) {
35
+ .folio-career-record { grid-template-columns: 11rem minmax(0, 1fr) 4rem; column-gap: clamp(2rem, 4vw, 3.5rem); }
36
+ .folio-career-record__dates, .folio-career-record__dates dl { display: block; }
37
+ .folio-career-record__dates dd + dt + dd { margin-block-start: .5rem; }
38
+ .folio-career-record__dates > dl + * { margin-block-start: 1rem; }
39
+ .folio-career-record__mark { display: block; justify-self: end; }
40
+ .folio-profile-narrative { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(3rem, 7vw, 6rem); }
41
+ .folio-profile-skills__group { grid-template-columns: minmax(10rem, 3fr) minmax(0, 9fr); gap: 2rem; }
42
+ .folio-profile-interests { grid-template-columns: repeat(3, minmax(0, 1fr)); }
43
+ }
@@ -0,0 +1,162 @@
1
+ /*
2
+ * Workbench compositions.
3
+ *
4
+ * One grid for the whole page: 12 columns with a 24px gutter inside the page
5
+ * width. A section's heading takes columns 1–4 and its content an 8-column
6
+ * subgrid on columns 5–12, so every list, card and caption on the page shares
7
+ * the same vertical lines. Colour, rules and type come from the theme axes;
8
+ * the Workbench preset is `linen` + `ember` + `grotesk` + `quiet`, but these
9
+ * compositions read only roles and work under any preset.
10
+ */
11
+ @layer components {
12
+ .folio-wb-section,
13
+ .folio-wb-hero {
14
+ --wb-gap: 24px;
15
+ max-inline-size: var(--w-page);
16
+ margin-inline: auto;
17
+ padding-inline: var(--page-pad);
18
+ display: grid;
19
+ grid-template-columns: repeat(12, minmax(0, 1fr));
20
+ column-gap: var(--wb-gap);
21
+ }
22
+
23
+ /* ─── Section ─────────────────────────────────────────────────────────── */
24
+ .folio-wb-section { margin-block-start: 7.5rem; }
25
+ .folio-wb-section:last-child { margin-block-end: 7.5rem; }
26
+ .folio-wb-section::before { content: ''; grid-column: 1 / -1; border-block-start: 1px solid var(--rule); margin-block-end: 2rem; }
27
+ .folio-wb-section-head { grid-column: 1 / span 4; display: flex; flex-direction: column; gap: 1rem; padding-inline-end: 1.5rem; }
28
+ .folio-wb-section-body { grid-column: 5 / -1; min-inline-size: 0; }
29
+ .folio-wb-heading { margin: 0; font-family: var(--font-heading); font-weight: 400; font-size: 1.375rem; line-height: 1.3; letter-spacing: -0.015em; color: var(--ink); text-wrap: pretty; }
30
+ .folio-wb-heading-lead { color: var(--ink-3-aa); }
31
+ .folio-wb-section-action a,
32
+ .folio-wb-link { display: inline-flex; align-items: center; min-block-size: 44px; color: var(--accent-on-muted); text-decoration: none; font-size: .9375rem; }
33
+ .folio-wb-section-action a:hover,
34
+ .folio-wb-link:hover { text-decoration: underline; text-underline-offset: 4px; text-decoration-thickness: 1px; }
35
+
36
+ /* ─── Hero ────────────────────────────────────────────────────────────── */
37
+ .folio-wb-hero { padding-block-start: clamp(4rem, 8vw, 6rem); row-gap: 3rem; align-items: end; }
38
+ .folio-wb-hero-copy { grid-column: 1 / span 7; display: flex; flex-direction: column; gap: 1.75rem; }
39
+ .folio-wb-hero-statement { font-size: clamp(1.5rem, 2.2vw, 1.75rem); line-height: 1.3; }
40
+ .folio-wb-hero-actions { display: flex; flex-wrap: wrap; gap: .5rem; }
41
+ .folio-wb-hero-stats { grid-column: 10 / -1; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--wb-gap); margin: 0; align-self: end; }
42
+ .folio-wb-hero-stats > div { display: flex; flex-direction: column-reverse; gap: .125rem; }
43
+ .folio-wb-hero-stats dd { margin: 0; font-size: 1.25rem; color: var(--ink); font-variant-numeric: tabular-nums; }
44
+ .folio-wb-hero-stats dt { font-size: .8125rem; color: var(--ink-3-aa); }
45
+ .folio-wb-hero-figure { grid-column: 1 / -1; }
46
+
47
+ /* ─── Figure ──────────────────────────────────────────────────────────── */
48
+ .folio-wb-figure { margin: 0; }
49
+ .folio-wb-figure-frame { position: relative; display: block; overflow: hidden; border-radius: var(--radius); background: var(--paper-2); aspect-ratio: 3 / 2; }
50
+ .folio-wb-figure[data-ratio='wide'] .folio-wb-figure-frame { aspect-ratio: 16 / 9; }
51
+ .folio-wb-figure[data-ratio='portrait'] .folio-wb-figure-frame { aspect-ratio: 4 / 5; }
52
+ .folio-wb-figure[data-ratio='panorama'] .folio-wb-figure-frame { aspect-ratio: 3 / 1; }
53
+ .folio-wb-figure-frame img,
54
+ .folio-wb-mosaic-frame img,
55
+ .folio-wb-card-cover img { inline-size: 100%; block-size: 100%; object-fit: cover; transition: scale var(--slow) var(--ease); }
56
+ .folio-wb-figure figcaption { display: flex; justify-content: space-between; gap: 1rem; margin-block-start: .75rem; font-size: .8125rem; color: var(--ink-3-aa); }
57
+
58
+ /* ─── Tools ───────────────────────────────────────────────────────────── */
59
+ .folio-wb-tools { max-inline-size: var(--w-page); margin: 4.5rem auto 0; padding-inline: var(--page-pad); }
60
+ .folio-wb-tools-label { margin: 0 0 1.25rem; text-align: center; font-size: .8125rem; color: var(--ink-3-aa); }
61
+ .folio-wb-tools ul { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 24px; }
62
+ .folio-wb-tools li { display: grid; place-items: center; block-size: 4rem; border-radius: var(--radius); background: var(--paper-2); color: var(--ink-3-aa); transition: color var(--mid) var(--ease), background-color var(--mid) var(--ease); }
63
+ .folio-wb-tools li:hover { color: var(--ink); background: var(--stone); }
64
+ .folio-wb-tools li svg { inline-size: 1.375rem; block-size: 1.375rem; }
65
+
66
+ /* ─── Cards ───────────────────────────────────────────────────────────── */
67
+ .folio-wb-card-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2.5rem 24px; }
68
+ .folio-wb-card { position: relative; display: flex; flex-direction: column; gap: .375rem; }
69
+ .folio-wb-card-cover { position: relative; overflow: hidden; aspect-ratio: 16 / 10; margin-block-end: .625rem; border: 1px solid var(--rule); border-radius: var(--radius); background: var(--paper-2); transition: border-color var(--mid) var(--ease), translate var(--mid) var(--ease); }
70
+ .folio-wb-card-title { margin: 0; font-family: var(--font-heading); font-weight: 400; font-size: 1rem; line-height: 1.4; color: var(--ink); }
71
+ .folio-wb-card-title a { display: inline-flex; align-items: center; min-block-size: 44px; color: inherit; text-decoration: none; }
72
+ .folio-wb-card-title a::after { content: ''; position: absolute; inset: 0; border-radius: var(--radius); }
73
+ .folio-wb-card:has(a:focus-visible) .folio-wb-card-cover { outline: var(--focus-w) solid var(--focus); outline-offset: 2px; }
74
+ .folio-wb-card-description,
75
+ .folio-wb-card-meta { margin: 0; font-size: .875rem; line-height: 1.5; color: var(--ink-3-aa); }
76
+ .folio-wb-card-meta { font-size: .8125rem; }
77
+ .folio-wb-card:hover .folio-wb-card-cover { translate: 0 -2px; border-color: var(--rule-2); }
78
+ .folio-wb-card:hover .folio-wb-card-cover img,
79
+ .folio-wb-figure:hover .folio-wb-figure-frame img,
80
+ .folio-wb-mosaic-frame:hover img { scale: 1.02; }
81
+ .folio-wb-tile { display: grid; align-items: end; block-size: 100%; padding: 1.25rem; color: var(--paper); background-color: var(--ink); background-image: linear-gradient(color-mix(in srgb, var(--paper) 10%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--paper) 10%, transparent) 1px, transparent 1px); background-size: 24px 24px; }
82
+ .folio-wb-tile span { font-size: 1.25rem; letter-spacing: .08em; text-transform: uppercase; }
83
+
84
+ /* ─── Entries ─────────────────────────────────────────────────────────── */
85
+ .folio-wb-entries { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); column-gap: 24px; row-gap: 2rem; }
86
+ .folio-wb-entries > ul { grid-column: 1 / -1; list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
87
+ .folio-wb-entries[data-has-featured] > ul { grid-column: 5 / -1; }
88
+ .folio-wb-entries > ul > li + li { border-block-start: 1px solid var(--rule); }
89
+ .folio-wb-entries > ul > li { padding-block: 1.25rem; }
90
+ .folio-wb-entries > ul > li:first-child { padding-block-start: 0; }
91
+ .folio-wb-entry-featured { grid-column: 1 / span 4; position: relative; display: flex; flex-direction: column; gap: 1rem; padding: 1.5rem; border: 1px solid var(--rule); border-radius: var(--radius); background-color: var(--paper-2); background-image: repeating-linear-gradient(to bottom, transparent 0 calc(1.625rem - 1px), var(--rule) calc(1.625rem - 1px) 1.625rem); transition: border-color var(--mid) var(--ease), translate var(--mid) var(--ease); }
92
+ .folio-wb-entry-featured:hover { translate: 0 -2px; border-color: var(--rule-2); }
93
+ .folio-wb-entry-featured h3 { margin: 0 0 auto; font-family: var(--font-heading); font-weight: 400; font-size: 1.375rem; line-height: 1.3; color: var(--ink); }
94
+ .folio-wb-entry-featured p { margin: 0; font-size: .9375rem; line-height: 1.625rem; color: var(--ink-2); }
95
+ .folio-wb-entry-featured h3 a::after { content: ''; position: absolute; inset: 0; }
96
+ .folio-wb-entry h3 { margin: 0; font-family: var(--font-heading); font-weight: 400; font-size: 1rem; line-height: 1.4; }
97
+ .folio-wb-entry h3 a,
98
+ .folio-wb-entry-featured h3 a { display: inline-flex; align-items: center; min-block-size: 44px; color: var(--ink); text-decoration: none; }
99
+ .folio-wb-entry h3 a:hover { text-decoration: underline; text-underline-offset: 4px; text-decoration-thickness: 1px; }
100
+ .folio-wb-entry-date { margin: 0 0 .25rem; font-size: .8125rem; color: var(--ink-3-aa); }
101
+ .folio-wb-entry-excerpt { margin: .375rem 0 0; font-size: .875rem; line-height: 1.5; color: var(--ink-3-aa); }
102
+ .folio-wb-entry-meta { margin: .375rem 0 0; font-size: .8125rem; color: var(--ink-3-aa); }
103
+
104
+ /* ─── Chronology ──────────────────────────────────────────────────────── */
105
+ .folio-wb-chronology { margin: 0; }
106
+ .folio-wb-chronology ol { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 1.25rem; }
107
+ .folio-wb-chronology li p { margin: 0 0 .375rem; font-size: .8125rem; line-height: 1.4; color: var(--ink); white-space: nowrap; }
108
+ .folio-wb-chronology li[data-align='start'] p { margin-inline-start: var(--start); }
109
+ .folio-wb-chronology li[data-align='end'] p { text-align: end; padding-inline-end: calc(100% - var(--end)); }
110
+ .folio-wb-chronology-org { color: var(--ink-3-aa); }
111
+ .folio-wb-chronology-now { color: var(--accent-on-muted); }
112
+ .folio-wb-chronology-bar { display: block; margin-inline-start: var(--start); block-size: .5rem; inline-size: calc(var(--end) - var(--start)); min-inline-size: .75rem; border-radius: var(--radius-pill); }
113
+ .folio-wb-chronology li[data-kind='role'] .folio-wb-chronology-bar { background: var(--stone); }
114
+ .folio-wb-chronology li[data-kind='study'] .folio-wb-chronology-bar { box-shadow: inset 0 0 0 1px var(--rule-2); }
115
+ .folio-wb-chronology li[data-current] .folio-wb-chronology-bar { background: linear-gradient(90deg, var(--ink) calc(100% - .5rem), var(--accent) 0); }
116
+ .folio-wb-chronology-axis { display: flex; overflow: hidden; margin-block-start: 1.5rem; border-block-start: 1px solid var(--rule-2); }
117
+ .folio-wb-chronology-axis span { flex: 1; min-inline-size: 0; white-space: nowrap; padding: .5rem 0 0 .375rem; border-inline-start: 1px solid var(--rule); font-size: .8125rem; color: var(--ink-3-aa); font-variant-numeric: tabular-nums; }
118
+
119
+ /* ─── Mosaic ──────────────────────────────────────────────────────────── */
120
+ .folio-wb-mosaic { display: grid; grid-template-columns: 2fr 1fr 1fr; grid-template-rows: auto auto; gap: 24px; }
121
+ .folio-wb-mosaic-lead { grid-row: span 2; margin: 0; display: flex; flex-direction: column; }
122
+ .folio-wb-mosaic-lead .folio-wb-mosaic-frame { flex: 1; }
123
+ .folio-wb-mosaic-frame { position: relative; overflow: hidden; border-radius: var(--radius); background: var(--paper-2); aspect-ratio: 4 / 5; }
124
+ .folio-wb-mosaic-lead .folio-wb-mosaic-frame { aspect-ratio: auto; min-block-size: 100%; }
125
+ .folio-wb-mosaic-frame > a { position: absolute; inset: 0; display: block; }
126
+ .folio-wb-mosaic-lead figcaption { margin-block-start: .75rem; font-size: .8125rem; color: var(--ink-3-aa); }
127
+
128
+ /* ─── Contact ─────────────────────────────────────────────────────────── */
129
+ .folio-wb-contact { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 1rem 2rem; }
130
+ .folio-wb-contact-address a { display: inline-flex; align-items: center; min-block-size: 44px; font-size: clamp(1.25rem, 2vw, 1.625rem); color: var(--ink); text-decoration: underline; text-underline-offset: 6px; text-decoration-thickness: 1px; text-decoration-color: var(--rule-2); transition: text-decoration-color var(--mid) var(--ease); }
131
+ .folio-wb-contact-address a:hover { text-decoration-color: var(--ink); }
132
+
133
+
134
+ /* ─── Reveal ──────────────────────────────────────────────────────────── */
135
+ .folio-wb-reveal[data-reveal] { transition: opacity calc(var(--slow) * 1.2) var(--ease), translate calc(var(--slow) * 1.2) var(--ease); }
136
+ .folio-wb-reveal[data-reveal='hidden'] { opacity: 0; translate: 0 12px; }
137
+
138
+ .folio-wb-visually-hidden { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
139
+
140
+ /* ─── Narrow screens ──────────────────────────────────────────────────── */
141
+ @media (max-width: 47.5rem) {
142
+ .folio-wb-section { margin-block-start: 5rem; }
143
+ .folio-wb-section-head,
144
+ .folio-wb-section-body,
145
+ .folio-wb-hero-copy,
146
+ .folio-wb-hero-stats { grid-column: 1 / -1; }
147
+ .folio-wb-section-head { margin-block-end: 2rem; padding-inline-end: 0; }
148
+ .folio-wb-tools ul { grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 12px; }
149
+ .folio-wb-card-grid { grid-template-columns: minmax(0, 1fr); }
150
+ .folio-wb-entries > ul,
151
+ .folio-wb-entries[data-has-featured] > ul,
152
+ .folio-wb-entry-featured { grid-column: 1 / -1; }
153
+ .folio-wb-mosaic { grid-template-columns: 1fr 1fr; }
154
+ .folio-wb-mosaic-lead { grid-column: 1 / -1; grid-row: auto; }
155
+ .folio-wb-mosaic-lead .folio-wb-mosaic-frame { aspect-ratio: 4 / 5; }
156
+ .folio-wb-chronology li p { white-space: normal; }
157
+ /* A long career puts a dozen years on a phone-width axis; every other
158
+ label keeps them legible without pushing the page sideways. */
159
+ .folio-wb-chronology-axis span:nth-child(even) { color: transparent; }
160
+ }
161
+ }
162
+
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Styles for `@misoto22/folio/website`, published as `website.css`.
3
+ *
4
+ * Separate from `styles.css`, so an application that renders only the
5
+ * primitives ships none of it. Every rule here is scoped to a composition's own
6
+ * classes. The document defaults a whole website wants — body type, heading
7
+ * margins, the site-wide focus ring — are in `website-base.css`, a second
8
+ * opt-in entry, because they reach past the compositions to the page itself.
9
+ */
10
+ @import './website-shell.css';
11
+ @import './website-portfolio.css';
12
+ @import './website-collection.css';
13
+ @import './website-reading.css';
14
+ @import './website-contact.css';
15
+ @import './website-music.css';
16
+ @import './website-timeline.css';
17
+ @import './website-recovery.css';
18
+ @import './website-media.css';
19
+ @import './website-metrics.css';
20
+ @import './website-search.css';
21
+ @import './website-content.css';
22
+ @import './website-actions.css';
23
+ @import './website-conversation.css';
24
+ @import './website-evidence.css';
25
+ @import './website-controls.css';
26
+ @import './website-workbench.css';
package/llms.txt ADDED
@@ -0,0 +1,35 @@
1
+ # @misoto22/folio
2
+
3
+ > A monochrome design system for software, writing and photography: portable CSS
4
+ > tokens and accessible React 19 primitives, charts and diagrams. Components ship
5
+ > compiled — import them, do not copy them.
6
+
7
+ This file is a stub on purpose. It carries no prop tables and no version, so it
8
+ cannot go stale between releases; everything it points at is generated from the
9
+ source in this same tarball at build time.
10
+
11
+ ## In this package, offline
12
+
13
+ - [dist/agent/index.md](./dist/agent/index.md): every component, one line each, plus the theme axes read out of the stylesheets.
14
+ - [dist/agent/<Component>.md](./dist/agent/): one component in full — every prop with its type and default, the exported unions, the keyboard contract, the accessibility promises, the examples.
15
+ - [skills/folio-design/SKILL.md](./skills/folio-design/SKILL.md): the conventions an agent gets wrong from habit — the names that diverge from shadcn/ui, and colour that is never a raw class.
16
+ - [AGENTS.md](./AGENTS.md): the short version of this, plus what to know when working on the package itself.
17
+
18
+ Prefer the CLI over reading these by path — it resolves parts and types, not
19
+ just components:
20
+
21
+ ```bash
22
+ npx @misoto22/folio docs Button
23
+ npx @misoto22/folio docs --installed
24
+ ```
25
+
26
+ ## On the web
27
+
28
+ - [https://ui.misoto22.com/llms.txt](https://ui.misoto22.com/llms.txt): the site's index.
29
+ - [https://ui.misoto22.com/llms-full.txt](https://ui.misoto22.com/llms-full.txt): every component inline, in one file.
30
+ - [https://ui.misoto22.com](https://ui.misoto22.com): the rendered documentation.
31
+
32
+ ## Optional
33
+
34
+ - [README.md](./README.md): install, theming, and the same three commands for a human reader.
35
+ - [CHANGELOG.md](./CHANGELOG.md)
package/package.json CHANGED
@@ -1,14 +1,172 @@
1
1
  {
2
2
  "name": "@misoto22/folio",
3
- "version": "0.0.0",
4
- "description": "Placeholder for the Folio design system. Install @misoto22/folio@^0.16.0.",
3
+ "version": "0.17.0",
4
+ "private": false,
5
+ "description": "Monochrome design system — CSS tokens and accessible React primitives",
5
6
  "license": "MIT",
6
- "type": "commonjs",
7
+ "author": "Henry Chen",
8
+ "type": "module",
9
+ "sideEffects": [
10
+ "**/*.css"
11
+ ],
12
+ "files": [
13
+ "dist",
14
+ "skills",
15
+ "bin",
16
+ "AGENTS.md",
17
+ "CLAUDE.md",
18
+ "llms.txt",
19
+ "LICENSE",
20
+ "README.md"
21
+ ],
22
+ "bin": {
23
+ "folio-design": "./bin/folio-design.mjs"
24
+ },
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "import": "./dist/index.js"
29
+ },
30
+ "./charts": {
31
+ "types": "./dist/charts/index.d.ts",
32
+ "import": "./dist/charts/index.js"
33
+ },
34
+ "./diagrams": {
35
+ "types": "./dist/diagrams/index.d.ts",
36
+ "import": "./dist/diagrams/index.js"
37
+ },
38
+ "./website": {
39
+ "types": "./dist/website/index.d.ts",
40
+ "import": "./dist/website/index.js"
41
+ },
42
+ "./website.css": "./dist/website.css",
43
+ "./website-base.css": "./dist/website-base.css",
44
+ "./styles.css": "./dist/styles.css",
45
+ "./tokens.css": "./dist/tokens.css",
46
+ "./semantic.css": "./dist/semantic.css",
47
+ "./keyframes.css": "./dist/keyframes.css",
48
+ "./fonts.css": "./dist/fonts.css",
49
+ "./tokens.json": "./dist/tokens.json",
50
+ "./tokens": {
51
+ "types": "./dist/tokens.d.ts",
52
+ "import": "./dist/tokens.js"
53
+ },
54
+ "./themes.css": "./dist/themes.css",
55
+ "./article.css": "./dist/article.css",
56
+ "./brand": {
57
+ "types": "./dist/tokens/brand.d.ts",
58
+ "default": "./dist/tokens/brand.js"
59
+ }
60
+ },
61
+ "main": "./dist/index.js",
62
+ "types": "./dist/index.d.ts",
63
+ "peerDependencies": {
64
+ "motion": "^12.23.26",
65
+ "react": "^19.0.0",
66
+ "react-dom": "^19.0.0",
67
+ "recharts": "^3.8.0"
68
+ },
69
+ "dependencies": {
70
+ "@radix-ui/react-accordion": "^1.2.14",
71
+ "@radix-ui/react-avatar": "^1.1.14",
72
+ "@radix-ui/react-checkbox": "^1.3.11",
73
+ "@radix-ui/react-collapsible": "^1.1.20",
74
+ "@radix-ui/react-context-menu": "^2.3.7",
75
+ "@radix-ui/react-dialog": "^1.1.23",
76
+ "@radix-ui/react-dropdown-menu": "^2.1.24",
77
+ "@radix-ui/react-label": "^2.1.15",
78
+ "@radix-ui/react-popover": "^1.1.23",
79
+ "@radix-ui/react-progress": "^1.1.10",
80
+ "@radix-ui/react-radio-group": "^1.3.11",
81
+ "@radix-ui/react-scroll-area": "^1.2.18",
82
+ "@radix-ui/react-select": "^2.3.7",
83
+ "@radix-ui/react-slider": "^1.4.7",
84
+ "@radix-ui/react-slot": "^1.2.8",
85
+ "@radix-ui/react-switch": "^1.3.7",
86
+ "@radix-ui/react-tabs": "^1.1.21",
87
+ "@radix-ui/react-toggle-group": "^1.1.19",
88
+ "@radix-ui/react-tooltip": "^1.2.12",
89
+ "@remixicon/react": "^4.9.0",
90
+ "clsx": "^2.1.1",
91
+ "cmdk": "^1.1.1",
92
+ "react-day-picker": "^10.0.1",
93
+ "sonner": "^2.0.8",
94
+ "tailwind-merge": "^3.4.0"
95
+ },
96
+ "devDependencies": {
97
+ "@arethetypeswrong/cli": "^0.18.5",
98
+ "@fontsource/hanken-grotesk": "^5.2.5",
99
+ "@fontsource/ibm-plex-mono": "^5.2.5",
100
+ "@fontsource/newsreader": "^5.2.5",
101
+ "@tailwindcss/cli": "4.3.3",
102
+ "@testing-library/jest-dom": "^6.9.1",
103
+ "@testing-library/react": "^16.3.2",
104
+ "@testing-library/user-event": "^14.6.7",
105
+ "@types/culori": "^4.0.1",
106
+ "@types/react": "^19.2.18",
107
+ "@types/react-dom": "^19.2.4",
108
+ "@vitejs/plugin-react": "^6.1.0",
109
+ "axe-core": "^4.13.0",
110
+ "culori": "^4.0.2",
111
+ "esbuild": "^0.28.2",
112
+ "esbuild-fix-imports-plugin": "^1.0.23",
113
+ "jsdom": "^29.1.1",
114
+ "motion": "^12.43.0",
115
+ "publint": "^0.3.24",
116
+ "react": "^19.2.8",
117
+ "react-dom": "^19.2.8",
118
+ "recharts": "3.8.0",
119
+ "tailwindcss": "4.3.3",
120
+ "tsup": "^8.5.0",
121
+ "typescript": "^6.0.3",
122
+ "vitest": "^4.1.11"
123
+ },
124
+ "engines": {
125
+ "node": ">=24",
126
+ "pnpm": ">=11"
127
+ },
7
128
  "repository": {
8
129
  "type": "git",
9
- "url": "git+https://github.com/Misoto22/folio.git"
130
+ "url": "git+https://github.com/Misoto22/folio.git",
131
+ "directory": "packages/design"
132
+ },
133
+ "keywords": [
134
+ "design-system",
135
+ "react",
136
+ "tailwind",
137
+ "radix",
138
+ "components",
139
+ "tokens",
140
+ "accessibility"
141
+ ],
142
+ "homepage": "https://ui.misoto22.com",
143
+ "bugs": {
144
+ "url": "https://github.com/Misoto22/folio/issues"
10
145
  },
11
146
  "publishConfig": {
12
147
  "access": "public"
148
+ },
149
+ "peerDependenciesMeta": {
150
+ "motion": {
151
+ "optional": true
152
+ },
153
+ "recharts": {
154
+ "optional": true
155
+ }
156
+ },
157
+ "scripts": {
158
+ "build:fonts": "node scripts/vendor-fonts.mjs",
159
+ "build:js": "NODE_OPTIONS=--max-old-space-size=8192 tsup",
160
+ "build:css": "tailwindcss -i ./src/styles/index.css -o ./dist/styles.css --minify && node scripts/copy-portable-css.mjs && node scripts/emit-tokens.mjs",
161
+ "build:agent": "node scripts/emit-agent.mjs",
162
+ "build": "pnpm run build:fonts && pnpm run build:js && pnpm run build:css && pnpm run build:agent",
163
+ "dev": "tsup --watch",
164
+ "typecheck": "tsc --noEmit",
165
+ "lint": "eslint src scripts agent bin",
166
+ "test": "vitest run",
167
+ "test:watch": "vitest",
168
+ "clean": "rm -rf dist",
169
+ "check:size": "node scripts/check-size.mjs",
170
+ "check:publish": "node scripts/check-publish.mjs"
13
171
  }
14
- }
172
+ }