@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,56 @@
1
+ .folio-evidence-status { display: flex; align-items: center; gap: .5rem; font-variant-numeric: tabular-nums; }
2
+ .folio-evidence-status > span:last-child { min-inline-size: 0; }
3
+ .folio-activity-trace > ul { display: flex; flex-direction: column; gap: .5rem; list-style: none; margin: 0; padding: 0; }
4
+ .folio-activity-trace li { display: flex; align-items: start; gap: .5rem; min-inline-size: 0; }
5
+ .folio-activity-trace li > svg, .folio-activity-trace li > span:first-child { flex-shrink: 0; margin-block-start: .3rem; }
6
+ .folio-activity-trace li[data-state='failed'] > svg { color: var(--danger); }
7
+ .folio-activity-trace li > span { overflow-wrap: anywhere; }
8
+ .folio-activity-trace__summary { margin-inline-start: auto; flex-shrink: 0; white-space: nowrap; font-variant-numeric: tabular-nums; }
9
+ .folio-evidence-panel { min-inline-size: 0; }
10
+ .folio-evidence-panel > header { display: flex; align-items: start; justify-content: space-between; gap: 1rem; padding-block-end: 1rem; border-block-end: 1px solid var(--rule-hard); }
11
+ .folio-evidence-panel > header h2 { margin-block-start: .375rem; }
12
+ .folio-evidence-panel > header > .folio-evidence-status { flex-shrink: 0; margin-block-start: .25rem; }
13
+ .folio-evidence-panel > .folio-activity-trace { border-block-end: 1px solid var(--rule); padding-block: .75rem; }
14
+ .folio-evidence-selection { border-block-end: 1px solid var(--rule); padding-block: .75rem; }
15
+ .folio-evidence-selection > div { display: flex; flex-direction: column; margin-block-start: .25rem; }
16
+ .folio-evidence-selection button { inline-size: 100%; justify-content: start; text-align: start; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
17
+ .folio-evidence-selection button[aria-pressed='true'] { background: var(--stone); color: var(--ink); }
18
+ .folio-evidence-facts { padding-block-start: 1rem; }
19
+ .folio-evidence-disclosure { margin-block-start: 1.5rem; border-block: 1px solid var(--rule); }
20
+ .folio-evidence-disclosure > button { min-block-size: var(--control-h-md); }
21
+ .folio-evidence-query { display: flex; align-items: baseline; min-inline-size: 0; gap: .75rem; border-block-end: 1px solid var(--rule); padding-block: .75rem; }
22
+ .folio-evidence-query > span:first-child, .folio-evidence-query > span:last-child { flex-shrink: 0; }
23
+ .folio-evidence-query > span:nth-child(2) { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
24
+ .folio-evidence-query > span:last-child { margin-inline-start: auto; font-variant-numeric: tabular-nums; }
25
+ .folio-evidence-stages { list-style: none; margin: 0; padding: 0; }
26
+ .folio-evidence-stage { display: grid; grid-template-columns: 1.75rem minmax(0, 1fr); gap: .75rem; border-block-end: 1px solid var(--rule); padding-block: 1rem; }
27
+ .folio-evidence-stage > span { padding-block-start: .2rem; font-variant-numeric: tabular-nums; }
28
+ .folio-evidence-stage__header, .folio-evidence-stage__description { display: flex; align-items: baseline; justify-content: space-between; gap: .75rem; }
29
+ .folio-evidence-stage__header > p { flex-shrink: 0; }
30
+ .folio-evidence-stage__description { margin-block-start: .25rem; }
31
+ .folio-evidence-stage__description > span:first-child { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
32
+ .folio-evidence-stage__description > span:last-child { flex-shrink: 0; font-variant-numeric: tabular-nums; }
33
+ .folio-evidence-scores { display: flex; flex-direction: column; gap: .75rem; margin-block-start: .75rem; }
34
+ .folio-evidence-scores > div > div:first-child { display: flex; align-items: baseline; justify-content: space-between; gap: .75rem; margin-block-end: .375rem; }
35
+ .folio-evidence-scores > div > div:first-child > span:first-child { min-inline-size: 0; overflow-wrap: anywhere; }
36
+ .folio-evidence-scores > div > div:first-child > span:last-child { flex-shrink: 0; font-variant-numeric: tabular-nums; }
37
+ .folio-signal-figure, .folio-evidence-meter { margin-block-start: .75rem; }
38
+ .folio-signal-figure__bars { display: flex; align-items: end; justify-content: space-between; gap: 1px; block-size: 2.375rem; overflow: hidden; border-block-end: 1px solid var(--rule); }
39
+ .folio-signal-figure__bars > span { inline-size: 3px; flex-shrink: 1; block-size: 3px; opacity: .4; background: var(--ink); }
40
+ .folio-evidence-meter__labels { display: flex; align-items: baseline; justify-content: space-between; gap: .75rem; margin-block-start: .5rem; font-variant-numeric: tabular-nums; }
41
+ .folio-evidence-durations { border-block-end: 1px solid var(--rule); padding-block: 1rem; }
42
+ .folio-evidence-durations__header { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; margin-block-end: .5rem; font-variant-numeric: tabular-nums; }
43
+ .folio-evidence-durations__bar { display: flex; gap: 1px; block-size: .375rem; overflow: hidden; background: var(--rule); }
44
+ .folio-evidence-durations__bar > span { block-size: 100%; background: var(--ink); }
45
+ .folio-evidence-durations__bar > span:nth-child(3n + 1) { background: var(--stone); }
46
+ .folio-evidence-durations__bar > span:nth-child(3n + 2) { background: var(--ink-3-aa); }
47
+ .folio-evidence-durations__legend { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .75rem; margin-block-start: .5rem; }
48
+ .folio-evidence-summary { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; padding-block-start: 1rem; }
49
+ .folio-evidence-summary > div:last-child { text-align: end; }
50
+ @media (prefers-reduced-motion: no-preference) {
51
+ .folio-signal-figure__bars[data-running] > span { animation: folio-signal-pulse .85s ease-in-out infinite; }
52
+ }
53
+ @media (prefers-reduced-motion: reduce) {
54
+ .folio-signal-figure__bars[data-running] > span { block-size: .7rem; opacity: .7; }
55
+ }
56
+ @keyframes folio-signal-pulse { 50% { block-size: 2rem; opacity: .85; } }
@@ -0,0 +1,227 @@
1
+ /* Website media compositions. Providers supply images, links and map canvases;
2
+ every surface, measure and responsive relationship belongs to this sheet. */
3
+ .folio-media-container,
4
+ .folio-media-masthead,
5
+ .folio-media-detail,
6
+ .folio-photograph-feature {
7
+ inline-size: 100%;
8
+ max-inline-size: var(--w-page);
9
+ margin-inline: auto;
10
+ padding-inline: var(--page-pad);
11
+ }
12
+
13
+ .folio-media-gallery-page,
14
+ .folio-media-detail-page {
15
+ background: var(--background);
16
+ color: var(--foreground);
17
+ }
18
+
19
+ .folio-media-detail-page { min-block-size: 100svh; }
20
+ .folio-media-masthead { padding-block: clamp(4.5rem, 8vw, 6.5rem) clamp(1.75rem, 3.5vw, 2.75rem); }
21
+ .folio-media-eyebrow { margin: 0; color: var(--secondary-text); font-family: var(--font-mono); font-size: 0.625rem; letter-spacing: 0.16em; text-transform: uppercase; }
22
+ .folio-media-masthead-title { max-inline-size: 22ch; margin: 0.75rem 0 0; color: var(--foreground); font-family: var(--font-heading); font-size: clamp(2rem, 3.4vw, 2.875rem); font-weight: 300; letter-spacing: -0.034em; line-height: 1.04; text-wrap: balance; }
23
+ .folio-media-description { max-inline-size: 52ch; margin-block: 1.25rem 0; color: var(--foreground-muted); font-size: 1rem; line-height: 1.7; }
24
+ .folio-media-gallery-content { padding-block: clamp(2.25rem, 4vw, 3.5rem) clamp(4rem, 9vw, 8rem); }
25
+ .folio-media-gallery { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(2.75rem, 5.5vw, 4.5rem) 1.5rem; margin: 0; padding: 0; list-style: none; }
26
+ .folio-media-gallery-item,
27
+ .folio-media-gallery-item figure { min-inline-size: 0; margin: 0; }
28
+ .folio-media-gallery-link { position: relative; display: flex; aspect-ratio: 1; align-items: flex-end; justify-content: center; }
29
+ .folio-media-gallery-link img { display: block; inline-size: auto; block-size: auto; max-inline-size: 100%; max-block-size: 100%; object-fit: contain; transition: transform var(--duration-fast) var(--ease); }
30
+ .folio-media-gallery-link:hover img { transform: translateY(-2px); }
31
+ .folio-media-gallery-link:focus-visible,
32
+ .folio-media-thumbnail:focus-visible,
33
+ .folio-media-pager-link:focus-visible { outline: 2px solid var(--focus); outline-offset: 4px; }
34
+ .folio-media-gallery-caption { display: grid; grid-template-columns: 2rem minmax(0, 1fr); align-items: baseline; gap: 0.25rem 0.625rem; padding-block-start: 0.875rem; }
35
+ .folio-media-gallery-index,
36
+ .folio-media-gallery-location { overflow: hidden; color: var(--secondary-text); font-family: var(--font-mono); font-size: 0.625rem; letter-spacing: 0.1em; text-overflow: ellipsis; white-space: nowrap; }
37
+ .folio-media-gallery-location { grid-column: 2; letter-spacing: 0.14em; }
38
+ .folio-media-gallery-title { display: -webkit-box; overflow: hidden; color: var(--foreground); font-family: var(--font-heading); font-size: 0.9375rem; font-weight: 300; line-height: 1.22; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
39
+ .folio-media-gallery-mount { block-size: auto; aspect-ratio: 1; }
40
+
41
+ .folio-photograph-feature { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); align-items: center; gap: clamp(2rem, 6vw, 6rem); padding-block: clamp(3rem, 8vw, 7rem); }
42
+ .folio-photograph-feature-title { margin-block: 1rem; color: var(--foreground); font-family: var(--font-heading); font-size: clamp(2rem, 4vw, 4rem); font-weight: 300; letter-spacing: -0.035em; line-height: 1.08; }
43
+ .folio-photograph-feature-action { margin-block-start: 2rem; }
44
+ .folio-photograph-feature-figure { min-inline-size: 0; margin: 0; }
45
+ .folio-photograph-feature-image img { display: block; inline-size: 100%; block-size: auto; object-fit: contain; }
46
+ .folio-photograph-feature-caption { margin-block-start: 0.875rem; color: var(--secondary-text); font-family: var(--font-mono); font-size: 0.6875rem; }
47
+
48
+ .folio-media-detail { padding-block: clamp(2rem, 5vw, 4.5rem) clamp(4rem, 8vw, 7rem); }
49
+ .folio-media-index-bar { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding-block-end: 1rem; border-block-end: 1px solid var(--border-subtle); }
50
+ .folio-media-index-bar > :is(a, button) { min-inline-size: 44.25px; min-block-size: 44.25px; }
51
+ .folio-media-index { color: var(--foreground-muted); font-family: var(--font-mono); font-size: 0.6875rem; font-variant-numeric: tabular-nums; letter-spacing: 0.13em; }
52
+ .folio-media-spread { display: grid; grid-template-columns: minmax(0, 1fr) clamp(20rem, 29vw, 27rem); align-items: start; gap: clamp(1.5rem, 3.5vw, 4.5rem); padding-block: clamp(1.5rem, 3.5vw, 3.75rem); }
53
+ .folio-media-well { display: flex; min-inline-size: 0; align-items: flex-start; }
54
+ .folio-media-frame {
55
+ --folio-media-max-block: 76svh;
56
+ display: block;
57
+ inline-size: min(100%, calc(var(--folio-media-max-block) * var(--folio-media-aspect, 1.5)));
58
+ min-block-size: 0;
59
+ padding: 0;
60
+ border: 0;
61
+ border-radius: 0;
62
+ background: transparent;
63
+ color: inherit;
64
+ cursor: zoom-in;
65
+ }
66
+ .folio-media-frame:hover { background: transparent; }
67
+ .folio-media-frame:focus-visible { outline: 2px solid var(--focus); outline-offset: 5px; }
68
+ .folio-media-frame img { display: block; inline-size: 100%; block-size: auto; aspect-ratio: auto var(--folio-media-aspect, 1.5); object-fit: contain; }
69
+ .folio-media-ledger { display: flex; min-inline-size: 0; flex-direction: column; border-block-start: 1px solid var(--border-color); padding-block-start: 1.25rem; }
70
+ .folio-media-ledger-narrative,
71
+ .folio-media-ledger-data { display: contents; }
72
+ .folio-media-ledger-lead .folio-media-eyebrow { margin-block-end: 0.75rem; }
73
+ .folio-media-detail-title { margin: 0; color: var(--foreground); font-family: var(--font-heading); font-size: var(--fs-title); font-weight: 400; letter-spacing: -0.025em; line-height: 1.08; text-wrap: balance; overflow-wrap: anywhere; }
74
+ .folio-media-actions { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; margin-block-start: 1.5rem; padding-block-start: 1.125rem; border-block-start: 1px solid var(--border-subtle); }
75
+ .folio-media-metadata { margin-block: 1.75rem 0; border-block-start: 1px solid var(--border-color); }
76
+ .folio-media-metadata > div { display: flex; align-items: baseline; justify-content: space-between; gap: 1.25rem; padding-block: 0.6875rem; border-block-end: 1px solid var(--border-subtle); }
77
+ .folio-media-metadata > div:first-child { padding-block-start: 0.6875rem; }
78
+ .folio-media-metadata > div:last-child { padding-block-end: 0.6875rem; border-block-end: 1px solid var(--border-subtle); }
79
+ .folio-media-metadata dt { flex: none; color: var(--secondary-text); font-family: var(--font-mono); font-size: 0.625rem; letter-spacing: 0.14em; text-transform: uppercase; }
80
+ .folio-media-metadata dd { min-inline-size: 0; margin: 0; color: var(--foreground); font-family: var(--font-mono); font-size: 0.78125rem; text-align: end; overflow-wrap: anywhere; }
81
+ .folio-media-light { display: flex; flex-direction: column; align-items: flex-start; gap: 0.5rem; padding-block: 1.1rem; border-block-end: 1px solid var(--border-subtle); }
82
+ .folio-media-light-line { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; color: var(--foreground-muted); font-family: var(--font-mono); font-size: 0.6875rem; }
83
+ .folio-media-light-line svg { flex: none; }
84
+ .folio-media-light-detail { color: var(--secondary-text); }
85
+ .folio-media-spread[data-photo-spread='wide'] { grid-template-columns: minmax(0, 1fr); row-gap: clamp(1.75rem, 3.5vw, 3rem); }
86
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-well { justify-content: center; }
87
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-frame { --folio-media-max-block: 74svh; }
88
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-ledger { display: grid; grid-template-columns: minmax(0, 1fr) clamp(20rem, 34vw, 29rem); column-gap: clamp(2rem, 6vw, 6rem); align-items: start; }
89
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-ledger-narrative,
90
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-ledger-data { display: flex; min-inline-size: 0; flex-direction: column; }
91
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-light { margin-block-start: 1.375rem; padding-block-start: 1.375rem; border-block-start: 1px solid var(--border-subtle); border-block-end: 0; }
92
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-metadata { margin-block-start: 0; border-block-start: 0; }
93
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-metadata > div:first-child { padding-block-start: 0.25rem; }
94
+
95
+ .folio-media-lightbox[role='dialog'] {
96
+ inset: 0;
97
+ display: grid;
98
+ inline-size: 100%;
99
+ block-size: 100%;
100
+ max-inline-size: none;
101
+ max-block-size: none;
102
+ place-items: center;
103
+ padding: 3.5rem 1rem 3.75rem;
104
+ border: 0;
105
+ border-radius: 0;
106
+ background: var(--photo-scrim);
107
+ color: var(--on-dark);
108
+ transform: none;
109
+ translate: none;
110
+ box-shadow: none;
111
+ backdrop-filter: none;
112
+ cursor: zoom-out;
113
+ animation: folio-fade-in var(--duration-fast) var(--ease);
114
+ }
115
+ .folio-media-lightbox-stage { display: flex; justify-content: center; cursor: default; }
116
+ .folio-media-lightbox-stage img { display: block; inline-size: min(calc(100vw - 2rem), calc((100svh - 7.25rem) * var(--folio-media-aspect, 1.5))); block-size: auto; aspect-ratio: auto var(--folio-media-aspect, 1.5); object-fit: contain; }
117
+ .folio-media-lightbox-close { position: absolute; inset-block-start: 1rem; inset-inline-end: 1rem; color: var(--on-dark); border-color: color-mix(in srgb, var(--on-dark) 40%, transparent); }
118
+ .folio-media-lightbox-close:hover { border-color: var(--on-dark); }
119
+ .folio-media-lightbox-close:focus-visible { outline: 2px solid var(--on-dark); outline-offset: 3px; }
120
+ .folio-media-lightbox-caption { position: absolute; inset-block-end: 1.25rem; inset-inline: 1.25rem; overflow: hidden; margin: 0; color: var(--on-dark); font-family: var(--font-mono); font-size: 0.6875rem; letter-spacing: 0.13em; text-transform: uppercase; text-overflow: ellipsis; white-space: nowrap; pointer-events: none; }
121
+
122
+ .folio-media-pager { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); margin-block-start: clamp(2rem, 4vw, 3.5rem); border-block-start: 1px solid var(--border-color); border-block-end: 1px solid var(--border-subtle); }
123
+ .folio-media-pager-link { display: grid; grid-template-columns: 4.5rem minmax(0, 1fr); min-block-size: 44px; align-items: center; gap: 1rem; padding-block: 1.125rem; padding-inline-end: 1.5rem; color: inherit; text-decoration: none; }
124
+ .folio-media-pager-link[data-direction='previous'] { border-inline-end: 1px solid var(--border-subtle); }
125
+ .folio-media-pager-link[data-direction='next'] { grid-template-columns: minmax(0, 1fr) 4.5rem; padding-inline: 1.5rem 0; }
126
+ .folio-media-pager-copy { min-inline-size: 0; }
127
+ .folio-media-pager-link[data-direction='next'] .folio-media-pager-copy { text-align: end; }
128
+ .folio-media-pager-image { position: relative; display: block; block-size: 3.25rem; overflow: hidden; background: var(--background-elevated); }
129
+ .folio-media-pager-image img { object-fit: contain; }
130
+ .folio-media-pager-label { display: block; color: var(--secondary-text); font-family: var(--font-mono); font-size: 0.625rem; letter-spacing: 0.16em; text-transform: uppercase; }
131
+ .folio-media-pager-title { display: block; overflow: hidden; margin-block-start: 0.3125rem; color: var(--foreground); font-family: var(--font-heading); font-size: 1.0625rem; font-weight: 300; line-height: 1.2; text-overflow: ellipsis; white-space: nowrap; }
132
+ .folio-media-thumbnails { padding-block-start: clamp(1.5rem, 3vw, 2.5rem); border-block-start: 1px solid var(--border-subtle); }
133
+ .folio-media-thumbnails h2 { margin-block: 0 0.75rem; color: var(--foreground-muted); font-family: var(--font-mono); font-size: 0.6875rem; font-weight: 400; letter-spacing: 0.13em; text-transform: uppercase; }
134
+ .folio-media-thumbnail-list { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: clamp(0.4rem, 1vw, 0.8rem); }
135
+ .folio-media-thumbnail { position: relative; min-inline-size: 44px; min-block-size: 44px; aspect-ratio: 1; overflow: hidden; background: var(--background-elevated); }
136
+ .folio-media-thumbnail img { object-fit: contain; }
137
+
138
+ .folio-media-map-section { border-block: 1px solid var(--border-subtle); background: var(--background-elevated); padding-block: clamp(4rem, 10vw, 8rem); }
139
+ .folio-media-anchor { display: block; block-size: 0; scroll-margin-block-start: var(--scroll-offset); pointer-events: none; }
140
+ .folio-media-map-section header { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 1.5rem; margin-block-end: clamp(2rem, 5vw, 4rem); padding-block-end: 1.25rem; border-block-end: 1px solid var(--border-subtle); }
141
+ .folio-media-map-section header h2 { margin: 0; color: var(--foreground); font-family: var(--font-heading); font-size: var(--fs-lead); font-weight: 400; letter-spacing: -0.025em; line-height: 1.12; }
142
+ .folio-media-map-section header p { margin: 0; color: var(--secondary-text); font-family: var(--font-mono); font-size: 0.6875rem; text-align: end; }
143
+ .folio-media-map-grid { display: grid; grid-template-columns: minmax(0, 1.62fr) minmax(0, 1fr); align-items: start; gap: clamp(1rem, 2vw, 1.75rem); }
144
+ .folio-media-map-frame { min-inline-size: 0; }
145
+ .folio-media-map-stage { position: relative; z-index: 0; isolation: isolate; overflow: hidden; border: 1px solid var(--border-color); border-radius: var(--radius); background: var(--background-elevated); }
146
+ .folio-media-map-canvas { inline-size: 100%; block-size: 38.75rem; }
147
+ .folio-media-map-stage > [role='status'] { display: grid; block-size: 38.75rem; place-items: center; padding: 1.5rem; color: var(--secondary-text); font-family: var(--font-mono); font-size: 0.6875rem; text-align: center; }
148
+ .folio-media-map-hint { position: absolute; inset-block-end: 0.875rem; inset-inline-start: 0.875rem; z-index: 2; padding: 0.375rem 0.75rem; border: 1px solid var(--border-color); border-radius: var(--radius); background: var(--background-elevated); color: var(--foreground-muted); font-family: var(--font-mono); font-size: 0.625rem; pointer-events: none; }
149
+ .folio-media-map-navigation { position: absolute; inset-block-start: 0.75rem; inset-inline-end: 0.75rem; display: flex; flex-direction: column; gap: 0.25rem; background: var(--background); }
150
+ .folio-media-map-preview { display: flex; min-inline-size: 0; flex-direction: column; overflow: hidden; border: 1px solid var(--border-color); border-radius: var(--radius); background: var(--background); }
151
+ .folio-media-map-preview-image { position: relative; inline-size: 100%; aspect-ratio: 4 / 3; overflow: hidden; border-block-end: 1px solid var(--border-subtle); background: var(--background-elevated); }
152
+ .folio-media-map-preview-image img { object-fit: contain; }
153
+ .folio-media-map-preview-action { position: absolute; inset-block-end: 0.75rem; inset-inline-end: 0.75rem; }
154
+ .folio-media-map-preview-copy { padding: 1.125rem 1.25rem 1.25rem; }
155
+ .folio-media-map-preview-copy h3 { margin: 0; color: var(--foreground); font-family: var(--font-heading); font-size: var(--fs-lead); font-weight: 400; line-height: 1.04; letter-spacing: -0.01em; overflow-wrap: anywhere; }
156
+ .folio-media-map-place { margin-block: 0.25rem 0; color: var(--foreground-muted); font-size: 0.875rem; }
157
+ .folio-media-map-coordinates { display: flex; flex-wrap: wrap; gap: 0.875rem; margin-block-start: 0.75rem; color: var(--foreground-muted); font-family: var(--font-mono); font-size: 0.6875rem; }
158
+ .folio-media-map-areas { display: flex; flex-direction: column; margin-block-start: 1rem; padding-block-start: 0.5rem; border-block-start: 1px solid var(--border-subtle); }
159
+ .folio-media-map-area { inline-size: 100%; justify-content: space-between; gap: 0.75rem; padding-inline: 0.25rem; border: 0; border-block-end: 1px solid var(--border-subtle); border-radius: 0; text-align: start; }
160
+ .folio-media-map-area[aria-pressed='true'] { color: var(--foreground); }
161
+ .folio-media-map-area-name { display: flex; align-items: center; gap: 0.6875rem; }
162
+ .folio-media-map-area-name > span { inline-size: 0.4375rem; block-size: 0.4375rem; flex: none; background: currentColor; opacity: 0.55; }
163
+ .folio-media-map-area[aria-pressed='true'] .folio-media-map-area-name > span { opacity: 1; }
164
+ .folio-media-map-area-count { color: var(--secondary-text); font-family: var(--font-mono); font-size: 0.6875rem; }
165
+ .folio-media-map-marker { position: relative; min-inline-size: 44px; min-block-size: 44px; padding: 0; border: 0; border-radius: var(--radius-pill); background: transparent; }
166
+ .folio-media-map-marker:hover { background: transparent; }
167
+ .folio-media-map-marker:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
168
+ .folio-media-map-pin { position: relative; display: grid; inline-size: 2rem; block-size: 2rem; place-items: center; border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent); border-radius: var(--radius-pill); background: color-mix(in srgb, var(--background) 70%, transparent); pointer-events: none; }
169
+ .folio-media-map-pin > span { inline-size: 0.625rem; block-size: 0.625rem; border: 1px solid var(--background); border-radius: var(--radius-pill); background: var(--accent); transition: transform var(--duration-fast) var(--ease); }
170
+ .folio-media-map-pin[data-active] { border-color: var(--accent); }
171
+ .folio-media-map-pin[data-active] > span,
172
+ .folio-media-map-marker:hover .folio-media-map-pin > span { transform: scale(1.3); }
173
+ .folio-media-map-frame-compact { display: grid; gap: 0.75rem; margin-block-start: 1.5rem; }
174
+ .folio-media-map-label { color: var(--secondary-text); font-family: var(--font-mono); font-size: 0.625rem; letter-spacing: 0.14em; text-transform: uppercase; }
175
+ .folio-media-map-frame-compact .folio-media-map-stage { block-size: 9.375rem; }
176
+ .folio-media-map-frame-compact .folio-media-map-stage img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; }
177
+ .folio-media-map-frame-compact .folio-media-map-pin { position: absolute; inset-block-start: 50%; inset-inline-start: 50%; transform: translate(-50%, -50%); }
178
+ .folio-media-map-skeleton { padding-block-end: clamp(4rem, 10vw, 8rem); }
179
+
180
+ @media (min-width: 768px) {
181
+ .folio-media-gallery { grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: 2rem; }
182
+ .folio-media-gallery-link,
183
+ .folio-media-gallery-mount { aspect-ratio: 4 / 5; }
184
+ .folio-media-gallery-caption { grid-template-columns: 2.25rem minmax(0, 1fr) auto; column-gap: 0.75rem; }
185
+ .folio-media-gallery-title { display: block; font-size: 1.03125rem; text-overflow: ellipsis; white-space: nowrap; }
186
+ .folio-media-gallery-location { grid-column: auto; max-inline-size: 12ch; }
187
+ }
188
+
189
+ @media (max-width: 939px) {
190
+ .folio-media-map-grid { grid-template-columns: minmax(0, 1fr); }
191
+ .folio-media-map-canvas,
192
+ .folio-media-map-stage > [role='status'] { block-size: 28.75rem; }
193
+ }
194
+
195
+ @media (max-width: 820px) {
196
+ .folio-media-detail { padding-block-start: 5.5rem; }
197
+ .folio-media-spread,
198
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-ledger { grid-template-columns: minmax(0, 1fr); gap: 2rem; }
199
+ .folio-media-frame { --folio-media-max-block: 72svh; }
200
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-ledger-narrative,
201
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-ledger-data { display: contents; }
202
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-light { margin-block-start: 0; padding-block-start: 1.1rem; border-block-start: 0; border-block-end: 1px solid var(--border-subtle); }
203
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-metadata { margin-block-start: 1.75rem; border-block-start: 1px solid var(--border-color); }
204
+ .folio-media-spread[data-photo-spread='wide'] .folio-media-metadata > div:first-child { padding-block-start: 0.6875rem; }
205
+ .folio-media-lightbox[role='dialog'] { padding: 4.25rem 0.75rem 3.5rem; }
206
+ .folio-media-lightbox-stage img { inline-size: min(calc(100vw - 1.5rem), calc((100svh - 7.75rem) * var(--folio-media-aspect, 1.5))); }
207
+ .folio-media-thumbnail-list { grid-template-columns: repeat(3, minmax(0, 1fr)); }
208
+ .folio-photograph-feature { grid-template-columns: minmax(0, 1fr); }
209
+ }
210
+
211
+ @media (max-width: 640px) {
212
+ .folio-media-pager { grid-template-columns: minmax(0, 1fr); }
213
+ .folio-media-pager-link[data-direction='previous'] { padding-inline-end: 0; border-inline-end: 0; border-block-end: 1px solid var(--border-subtle); }
214
+ .folio-media-pager-link[data-direction='next'] { padding-inline-start: 0; }
215
+ }
216
+
217
+ @media (prefers-reduced-motion: reduce) {
218
+ .folio-media-gallery-link img,
219
+ .folio-media-map-pin > span { transition: none; }
220
+ .folio-media-gallery-link:hover img { transform: none; }
221
+ .folio-media-lightbox[role='dialog'] { animation: none; }
222
+ }
223
+
224
+ [data-motion='none'] .folio-media-gallery-link img,
225
+ [data-motion='none'] .folio-media-map-pin > span { transition: none; }
226
+ [data-motion='none'] .folio-media-gallery-link:hover img { transform: none; }
227
+ [data-motion='none'] .folio-media-lightbox[role='dialog'] { animation: none; }
@@ -0,0 +1,15 @@
1
+ .folio-metrics-range { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem 1.25rem; border-block: 1px solid var(--rule); padding-block: 1rem; margin-block-start: 2rem; }
2
+ .folio-metrics-section { padding-block: clamp(3rem, 6vw, 5rem); }
3
+ .folio-metrics-section__header { display: flex; flex-wrap: wrap; align-items: end; justify-content: space-between; gap: 1.5rem; padding-block-end: 1rem; margin-block-end: 1.5rem; border-block-end: 1px solid var(--rule-hard); }
4
+ .folio-metrics-panel { min-inline-size: 0; }
5
+ .folio-metrics-panel > header { margin-block-end: 1.25rem; }
6
+ .folio-metrics-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 3rem; }
7
+ .folio-metrics-list { margin: 0; }
8
+ .folio-metrics-list > div { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; padding-block: .75rem; border-block-end: 1px solid var(--rule); }
9
+ .folio-metrics-list dt { display: inline-flex; align-items: center; gap: .75rem; min-inline-size: 0; }
10
+ .folio-metrics-list dd { margin: 0; white-space: nowrap; font-variant-numeric: tabular-nums; }
11
+ .folio-metrics-empty{display:grid;grid-template-columns:minmax(9rem,14rem) minmax(0,1fr);align-items:center;gap:1.5rem;min-block-size:13rem;border-block:1px solid var(--rule);padding:1.25rem 0}.folio-metrics-empty__plot{position:relative;display:flex;align-items:end;gap:.375rem;block-size:6rem;padding:.625rem;border-inline-start:1px solid var(--rule);border-block-end:1px solid var(--rule)}.folio-metrics-empty__plot span{display:block;inline-size:100%;background:var(--rule-2)}.folio-metrics-empty__plot span:nth-child(1){block-size:18%}.folio-metrics-empty__plot span:nth-child(2){block-size:34%}.folio-metrics-empty__plot span:nth-child(3){block-size:23%}.folio-metrics-empty__plot span:nth-child(4){block-size:48%}
12
+ .folio-metric-unit { margin-inline-start: .1875rem; color: var(--ink-3-aa); font-size: var(--fs-item); }
13
+ @media (min-width: 768px) { .folio-metrics-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 3rem 3.5rem; } }
14
+ @media (max-width: 520px) { .folio-metrics-empty{grid-template-columns:1fr}.folio-metrics-empty__plot{max-inline-size:12rem} }
15
+ @media (min-width: 1100px) { .folio-metrics-grid[data-columns='4'] { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 2rem; } }
@@ -0,0 +1,27 @@
1
+ .folio-media-row { display: grid; min-block-size: 4.5rem; grid-template-columns: 1.5rem 2.75rem minmax(0, 1fr) auto; align-items: center; gap: .75rem; border-block-end: 1px solid var(--rule); padding-block: .75rem; }
2
+ .folio-media-row__copy { min-inline-size: 0; }
3
+ .folio-media-row__copy a { justify-content: flex-start; max-inline-size: 100%; white-space: normal; text-align: start; }
4
+ .folio-media-row__trailing { min-inline-size: 3.25rem; max-inline-size: 6rem; white-space: nowrap; text-align: end; font-variant-numeric: tabular-nums; }
5
+ .folio-media-preview { position: relative; inline-size: 2.75rem; block-size: 2.75rem; overflow: hidden; padding: 0; }
6
+ .folio-media-preview > img, .folio-media-collection__artwork > img, .folio-media-feature__artwork > img { object-fit: cover; }
7
+ .folio-media-row[data-artwork-shape='circle'] .folio-media-preview { border-radius: var(--radius-pill); }
8
+ .folio-media-preview__control { position: absolute; inset: 0; display: grid; place-items: center; color: var(--ink); background: var(--paper-2); }
9
+ .folio-media-preview:has(img) .folio-media-preview__control { opacity: 0; transition: opacity var(--duration-fast); }
10
+ .folio-media-preview:hover .folio-media-preview__control, .folio-media-preview:focus-visible .folio-media-preview__control, .folio-media-preview .folio-media-preview__control[data-playing] { opacity: 1; }
11
+ .folio-media-preview--overlay { position: absolute; inset-block-end: 0; inset-inline-end: 0; inline-size: 3rem; block-size: 3rem; }
12
+ .folio-media-feature { display: grid; min-block-size: clamp(25rem, 52vw, 39rem); grid-template-columns: minmax(0, 1fr); align-items: center; gap: clamp(2rem, 6vw, 6rem); padding-block: clamp(3rem, 7vw, 6rem); }
13
+ .folio-media-feature__artwork { position: relative; display: grid; aspect-ratio: 1; inline-size: clamp(15rem, 34vw, 26rem); max-inline-size: 100%; place-items: center; overflow: hidden; border: 1px solid var(--rule-2); border-radius: var(--radius); background: var(--paper); text-align: center; }
14
+ .folio-media-feature__copy { min-inline-size: 0; }
15
+ .folio-media-feature__copy h2 a { font: inherit; line-height: inherit; white-space: normal; text-align: start; }
16
+ .folio-media-feature__progress { display: flex; max-inline-size: 26.25rem; align-items: center; gap: .75rem; font-variant-numeric: tabular-nums; }
17
+ .folio-media-collection { display: grid; grid-template-columns: 6.5rem minmax(0, 1fr); border-block-start: 1px solid var(--rule); }
18
+ .folio-media-collection__artwork { position: relative; aspect-ratio: 1; overflow: hidden; background: var(--paper); }
19
+ .folio-media-collection__copy { display: flex; min-inline-size: 0; flex-direction: column; justify-content: center; padding: 1rem; }
20
+ .folio-media-collection__copy h3 a { font: inherit; white-space: normal; text-align: start; }
21
+ .folio-media-collection__metadata { display: flex; flex-wrap: wrap; justify-content: space-between; gap: .5rem; }
22
+ .folio-music-section { min-inline-size: 0; }
23
+ .folio-music-section__header { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: .75rem; padding-block-end: 1rem; border-block-end: 1px solid var(--rule-hard); }
24
+ .folio-music-section__collections { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0 clamp(2rem, 5vw, 5rem); }
25
+ @media (min-width: 640px) { .folio-media-row { gap: 1rem; }.folio-media-collection { grid-template-columns: 9rem minmax(0, 1fr); }.folio-media-collection__copy { padding-inline: 1.5rem; } }
26
+ @media (min-width: 768px) { .folio-media-feature { grid-template-columns: minmax(15rem, 5fr) minmax(0, 7fr); }.folio-music-section__collections { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
27
+ @media (prefers-reduced-motion: reduce) { .folio-media-preview__control { transition: none; } }
@@ -0,0 +1,94 @@
1
+ .folio-question-card { padding: 1.5rem; border:1px solid var(--rule); border-radius: var(--radius-lg); background: var(--paper-2); color: var(--ink); }
2
+ .folio-question-card-heading { display:flex; align-items:center; gap:.625rem; }
3
+ .folio-question-card-heading>svg { flex:none; color:var(--ink-3-aa); }
4
+ .folio-question-card-heading h2 { font-family:var(--sans); font-size:1rem; font-weight:500; line-height:1.5; letter-spacing:normal; }
5
+ .folio-question-card-heading em { font-style:normal; }
6
+ .folio-question-card > p { font-family:var(--sans); font-size:.8125rem; line-height:1.8; color:var(--ink-3-aa); }
7
+ .folio-question-card form { position:relative; background:var(--paper); border:1px solid var(--rule-2); border-radius:var(--radius-md); padding:.375rem; }
8
+ .folio-question-card form:focus-within { border-color:var(--ink-3-aa); }
9
+ .folio-question-card form label { position:absolute; inline-size:1px; block-size:1px; clip-path:inset(50%); overflow:hidden; }
10
+ .folio-question-card form input { border:0; box-shadow:none; background:transparent; font-size:.8125rem; padding-inline:.5rem; }
11
+ .folio-question-card form>button { min-inline-size:44px; inline-size:44px; min-block-size:44px; block-size:44px; border-radius:var(--radius-sm); }
12
+ .folio-question-card > p { margin-block: 1rem 1.5rem; }
13
+ .folio-question-card form { display: flex; gap: .5rem; align-items: end; }
14
+ .folio-question-card form > :first-child { min-inline-size: 0; flex: 1; }
15
+ .folio-question-card form > button { flex: none; }
16
+ .folio-question-card ul { list-style: none; margin: 1.25rem 0 0; padding: 0; }
17
+ .folio-question-card li button { inline-size: 100%; text-align: start; justify-content: space-between; gap:.75rem; padding-inline:0; font-family:var(--sans); font-size:.8125rem; font-weight:400; color:var(--ink-2); white-space:normal; }
18
+ .folio-question-card li+li { border-block-start:1px solid var(--rule); }
19
+ .folio-question-card li button svg { flex:none; color:var(--ink-3-aa); }
20
+ .folio-portfolio-intro { max-inline-size: var(--w-page); margin-inline: auto; padding: clamp(7.5rem, 11vw, 10rem) var(--page-pad) clamp(3rem, 7vw, 5rem); display: grid; grid-template-columns: minmax(0, 1fr) minmax(18rem, .85fr); align-items: stretch; gap: clamp(3rem, 7vw, 7rem); }
21
+ .folio-portfolio-intro-copy { display: flex; flex-direction: column; align-items: start; }
22
+ .folio-portfolio-byline { display: flex; align-items: center; gap: 1.25rem; }
23
+ .folio-portfolio-byline h1 { font-weight: 300; font-size: clamp(2.7rem, 5vw, 4rem); }
24
+ .folio-portfolio-monogram { display: grid; place-items: center; inline-size: 44px; block-size: 44px; flex: none; border: 1px solid var(--rule); border-radius: var(--radius-pill); color: var(--ink-3-aa); font-family: var(--mono); font-size: .7rem; }
25
+ .folio-portfolio-biography { max-inline-size: 35em; margin-block-start: 2rem; font-size: 1.05rem; line-height: 1.85; color: var(--ink-2); text-wrap: pretty; }
26
+ .folio-portfolio-facts { display: flex; flex-wrap: wrap; gap: .5rem 1.75rem; margin-block: 1.5rem 3rem; }
27
+ .folio-portfolio-intro blockquote { margin: auto 0 0; padding-block-start: 1.5rem; border-block-start: 1px solid var(--rule); inline-size: 100%; font-family: var(--serif); font-size: 1.125rem; line-height: 1.7; color: var(--ink-3-aa); }
28
+ .folio-portfolio-feature { min-inline-size: 0; }
29
+ .folio-portfolio-index { max-inline-size: var(--w-page); margin-inline: auto; padding: 1rem var(--page-pad) clamp(5rem, 9vw, 8rem); }
30
+ .folio-portfolio-columns { display: grid; grid-template-columns: minmax(0, 1fr) 19rem; gap: clamp(3rem, 5vw, 5rem); align-items: start; padding-block-start: 1.5rem; }
31
+ .folio-portfolio-columns > * { min-inline-size: 0; }
32
+ .folio-portfolio-aside { display: flex; flex-direction: column; gap: 2.5rem; }
33
+ .folio-portfolio-more { margin-block-start: 2rem; }
34
+ .folio-portfolio-image { margin: 0; min-inline-size: 0; }
35
+ .folio-portfolio-image-frame { position: relative; display: block; overflow: hidden; background: var(--paper-2); border-radius: var(--radius-sm); aspect-ratio: 4 / 3; }
36
+ .folio-portfolio-image-frame img { object-fit: cover; }
37
+ .folio-portfolio-image[data-size='feature'] .folio-portfolio-image-frame { aspect-ratio: 1; }
38
+ .folio-portfolio-image[data-size='thumbnail'] .folio-portfolio-image-frame { aspect-ratio: 3 / 2; }
39
+ .folio-portfolio-image figcaption { display: flex; flex-wrap: wrap; align-items: baseline; gap: .25rem .5rem; padding-block-start: .625rem; color: var(--ink); font-family: var(--serif); font-size: .9375rem; line-height: 1.4; }
40
+ .folio-portfolio-image figcaption > [aria-hidden] { font-family: var(--mono); font-size: .7rem; color: var(--ink-3-aa); }
41
+ .folio-portfolio-image figcaption small { flex-basis:100%; margin-inline-start:0; text-align:start; color: var(--ink-3-aa); font-family: var(--sans); font-size: .75rem; }
42
+ .folio-portfolio-record { display: grid; gap: 1.5rem; }
43
+ .folio-portfolio-record[data-has-image] { grid-template-columns: 10.5rem minmax(0, 1fr); }
44
+ .folio-portfolio-record-context { margin-block-end: .6rem; font-family: var(--sans); font-size: .75rem; line-height: 1.7; color: var(--ink-3-aa); }
45
+ .folio-portfolio-record h2 { font-weight: 400; font-size: clamp(1.5rem, 2.2vw, 1.85rem); }
46
+ .folio-portfolio-record h2 a { display: inline-flex; align-items: center; min-block-size: var(--control-h-md); text-decoration: none; }
47
+ .folio-portfolio-record h2 a:hover { text-decoration: underline; text-underline-offset: 5px; text-decoration-thickness: 1px; }
48
+ .folio-portfolio-record-description { margin-block: .85rem 0; max-inline-size: var(--measure-record); line-height: 1.8; font-size: .975rem; color: var(--ink-2); text-wrap: pretty; }
49
+ .folio-portfolio-record-meta { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; margin-block-start: .65rem; }
50
+ .folio-portfolio-record-meta > span { font-family: var(--mono); font-size: .7rem; color: var(--ink-3-aa); }
51
+ .folio-portfolio-list[data-variant='records'] > div { display: flex; flex-direction: column; gap: 2.75rem; }
52
+ .folio-portfolio-list[data-variant='frames'] > div { display: flex; flex-wrap: wrap; gap: 1.25rem 12px; align-items: start; }
53
+ .folio-frame-layout-item { min-inline-size: 0; flex: 0 0 calc((100% - 24px)/3); }
54
+ .folio-frame-layout-item > figure { margin: 0; }
55
+ .folio-portfolio-list[data-variant='thumbnails'] > div { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5rem; }
56
+ .folio-portfolio-list > h2, .folio-portfolio-categories h2 { margin: 0 0 1rem; font-family: var(--sans); font-size: .85rem; color: var(--ink-3-aa); font-weight: 500; }
57
+ .folio-portfolio-categories dl { margin: 0; }
58
+ .folio-portfolio-categories dl > div { display: flex; justify-content: space-between; align-items: center; gap: 1rem; border-block-end: 1px solid var(--rule); padding-block: .35rem; }
59
+ .folio-portfolio-categories dt { font-family: var(--serif); font-size: 1.125rem; }
60
+ .folio-portfolio-categories dt a { display: flex; align-items: center; min-block-size: 44px; }
61
+ .folio-portfolio-categories dd { margin: 0; font-family: var(--mono); font-size: .75rem; color: var(--ink-3-aa); }
62
+ @media (max-width: 1023px) {
63
+ .folio-portfolio-intro { grid-template-columns: 1fr 1fr; gap: 2.5rem; }
64
+ .folio-portfolio-columns { grid-template-columns: minmax(0, 1fr) 16rem; gap: 2.5rem; }
65
+ .folio-portfolio-record[data-has-image] { grid-template-columns: 1fr; }
66
+ }
67
+ @media (max-width: 767px) {
68
+ .folio-portfolio-intro, .folio-portfolio-columns { grid-template-columns: 1fr; }
69
+ .folio-portfolio-intro { padding-block-start: 7rem; }
70
+ .folio-portfolio-feature { max-inline-size: 32rem; inline-size: 100%; }
71
+ .folio-portfolio-aside { padding-block-start: 1rem; }
72
+ .folio-frame-layout-item { flex-basis: calc((100% - 12px)/2); }
73
+ .folio-portfolio-record[data-has-image] { grid-template-columns: minmax(0, .75fr) minmax(0, 1fr); }
74
+ }
75
+ @media (max-width: 479px) {
76
+ .folio-portfolio-record[data-has-image] { grid-template-columns: 1fr; }
77
+ }
78
+ @media (max-width: 40rem) {
79
+ .folio-portfolio-index [role='tablist'] { gap: .25rem; }
80
+ .folio-portfolio-index [role='tab'] {
81
+ flex: 1 1 0;
82
+ display: flex;
83
+ flex-direction: column;
84
+ align-items: center;
85
+ min-inline-size: 0;
86
+ inline-size: 0;
87
+ gap: .375rem;
88
+ padding: .75rem .25rem;
89
+ font-size: .75rem;
90
+ white-space: normal;
91
+ overflow-wrap: anywhere;
92
+ }
93
+ .folio-portfolio-index [role='tab'] > span { margin-inline-start: 0; }
94
+ }
@@ -0,0 +1,159 @@
1
+ .folio-detail-masthead,.folio-reading-layout,.folio-record-pager,.folio-reading-figure,.folio-action-band{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad)}
2
+ .folio-detail-masthead{padding-block:.5rem 3rem;color:var(--ink)}
3
+ .folio-detail-masthead[data-width=fill],.folio-reading-figure[data-width=fill]{padding-inline:0;max-width:none}
4
+ .folio-detail-back{margin-block-end:clamp(2rem,5vw,3rem)}
5
+ .folio-detail-back a{display:inline-flex;align-items:center;min-height:44px;gap:.5rem;color:var(--ink-3-aa);font-size:.875rem;text-decoration:none}
6
+ .folio-detail-context{font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa);letter-spacing:.12em;margin-block:0 1.25rem}
7
+ .folio-detail-opening{display:grid;gap:2.5rem}
8
+ .folio-detail-opening[data-aside]{grid-template-columns:minmax(0,1fr) minmax(19rem,26rem);gap:clamp(3rem,7vw,6rem)}
9
+ .folio-detail-opening>div{min-width:0}
10
+ .folio-detail-masthead h1{font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-title);font-weight:300;line-height:1.05;letter-spacing:-.032em;text-wrap:balance;margin:0}
11
+ .folio-detail-masthead[data-display] h1{font-size:clamp(2.5rem,7vw,5.5rem)}
12
+ .folio-detail-dek{max-width:64ch;font-size:clamp(1.0625rem,1.6vw,1.25rem);line-height:1.65;color:var(--ink-2);margin-block:1.75rem 0;text-wrap:pretty}
13
+ .folio-detail-metabar{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:end;gap:1rem 2.5rem;border-block:1px solid var(--rule);padding-block:1.25rem;margin-block-start:clamp(2rem,4vw,3rem)}
14
+ .folio-detail-metabar dl{display:flex;flex-wrap:wrap;gap:1.25rem 2.75rem;margin:0;min-width:0}
15
+ .folio-detail-metabar dt{font-family:var(--mono-i18n,var(--font-mono));font-size:.625rem;letter-spacing:.12em;color:var(--ink-3-aa)}
16
+ .folio-detail-metabar dd{display:flex;align-items:center;gap:.5rem;margin:.375rem 0 0;font-size:.9375rem}
17
+ .folio-detail-actions{display:flex;flex-wrap:wrap;gap:.625rem;margin-inline-start:auto}
18
+ .folio-reading-layout{padding-block-start:clamp(2.75rem,5vw,4rem)}
19
+ .folio-reading-body{min-width:0}
20
+ .folio-reading-section{padding-block-start:clamp(3rem,7vw,5.5rem);scroll-margin-block-start:var(--scroll-offset,6rem)}
21
+ .folio-reading-section[data-compact]{padding-block-start:2rem}
22
+ .folio-reading-heading{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:1rem;border-block-end:1px solid var(--rule-hard);padding-block-end:1rem;margin-block-end:1.75rem}
23
+ .folio-reading-section[data-seamless] .folio-reading-heading{margin-block-end:0}
24
+ .folio-reading-heading:has(+ .folio-reference-rows, + .folio-feature-pairs){margin-block-end:0}
25
+ .folio-reading-heading + :is(.folio-reference-rows,.folio-feature-pairs){border-block-start:0}
26
+ .folio-reading-heading:has(+ .folio-figure-band){margin-block-end:1.25rem;padding-block-end:0;border-block-end:0}
27
+ .folio-reading-heading h2{margin:0;font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-lead);font-weight:300;line-height:1.1;letter-spacing:-.028em}
28
+ .folio-reading-heading>span{font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa)}
29
+ .folio-reading-lead{font-size:1.0625rem;line-height:1.75;color:var(--ink-2);margin-block:0 2rem}
30
+ .folio-reading-lede>p:first-child{font-family:var(--serif-i18n,var(--font-heading));font-weight:300;font-size:var(--fs-lead);line-height:1.28;letter-spacing:-.01em;margin:0}
31
+ .folio-reading-lede>p:first-child>span{color:var(--ink-3-aa)}
32
+ .folio-reading-lede>p+p{font-size:1.0625rem;line-height:1.7;color:var(--ink-2);margin-block-start:1.5rem}
33
+ .folio-record-pager{display:grid;grid-template-columns:1fr 1fr;margin-block-start:clamp(3.5rem,7vw,5rem)}
34
+ .folio-record-pager-link{display:flex;align-items:center;gap:1rem;min-height:6rem;padding-block:1.25rem;border-block:1px solid var(--rule);color:var(--ink);text-decoration:none}
35
+ .folio-record-pager-link[data-direction=prev]{border-inline-end:1px solid var(--rule);padding-inline-end:1.5rem}
36
+ .folio-record-pager-link[data-direction=next]{text-align:end;justify-content:end;padding-inline-start:1.5rem}
37
+ .folio-record-pager-direction{display:block;font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa)}
38
+ .folio-record-pager strong{display:block;margin-block-start:.5rem;font-family:var(--serif-i18n,var(--font-heading));font-weight:300;font-size:var(--fs-item);line-height:1.25}
39
+ .folio-record-pager-media{position:relative;width:4.5rem;height:3rem;overflow:hidden}
40
+ .folio-record-pager-media img{width:100%;height:100%;object-fit:cover}
41
+ .folio-toc{color:var(--ink-3-aa)}
42
+ .folio-toc>div{position:sticky;inset-block-start:7rem}
43
+ .folio-toc p{font-family:var(--mono-i18n,var(--font-mono));font-size:.625rem;letter-spacing:.12em;margin-block:0 1rem}
44
+ .folio-toc ul{list-style:none;margin:0;padding:0;border-inline-start:1px solid var(--rule)}
45
+ .folio-toc ul ul{border:0;padding-inline-start:1rem}
46
+ .folio-toc a{display:flex;align-items:baseline;gap:.625rem;min-height:2rem;padding:.375rem .5rem .375rem 1rem;color:inherit;font-size:.8125rem;line-height:1.5;text-decoration:none}
47
+ .folio-toc a[aria-current=true]{font-weight:500;color:var(--ink)}
48
+ .folio-toc a:hover{color:var(--ink)}
49
+ .folio-toc a>span{font-family:var(--mono-i18n,var(--font-mono));font-size:.625rem}
50
+ .folio-outline-trigger{position:fixed;inset-inline-start:1.5rem;inset-block-end:1.5rem;z-index:var(--z-sticky,30)}
51
+ .folio-outline-sheet .folio-toc a{min-height:44px}
52
+ .folio-reading-progress{position:fixed;inset-block-start:0;inset-inline:0;z-index:var(--z-sticky,30);height:2px;pointer-events:none}
53
+ .folio-reading-progress>div{height:100%;background:var(--accent)}
54
+ .folio-author-panel{display:grid;grid-template-columns:4.5rem minmax(0,1fr);gap:1.5rem;border-block:1px solid var(--rule);padding-block:2rem;margin-block-start:3rem}
55
+ .folio-author-avatar{width:4.5rem;height:4.5rem;display:grid;place-items:center;overflow:hidden;border-radius:var(--radius);background:var(--paper-2);font-family:var(--mono-i18n,var(--font-mono))}
56
+ .folio-author-avatar img{width:100%;height:100%;object-fit:cover}
57
+ .folio-author-panel h2{font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-item);font-weight:400;margin:0}
58
+ .folio-author-role{font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa);margin-block-start:.5rem}
59
+ .folio-author-panel p{font-size:.9375rem;color:var(--ink-2);line-height:1.65;margin-block:1rem}
60
+ .folio-author-links{display:flex;flex-wrap:wrap;gap:1rem}
61
+ .folio-author-links a{min-height:44px;display:inline-flex;align-items:center;color:var(--ink);font-size:.8125rem}
62
+ .folio-reading-figure{margin-block:.5rem 0}
63
+ .folio-reading-figure>div{position:relative;overflow:hidden;border:1px solid var(--rule);border-radius:var(--radius-sm);background:var(--paper-2)}
64
+ .folio-reading-figure img,.folio-reading-figure video{width:100%;height:100%;object-fit:cover}
65
+ .folio-reading-figure[data-fit=contain] img,.folio-reading-figure[data-fit=contain] video{object-fit:contain}
66
+ .folio-reading-figure figcaption{display:flex;flex-wrap:wrap;justify-content:space-between;gap:1rem;border-block-end:1px solid var(--rule);padding-block:.75rem;font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa)}
67
+ .folio-media-playback{position:relative;width:100%;height:100%}
68
+ .folio-media-playback video{display:block;width:100%;height:100%;object-fit:cover}
69
+ .folio-media-playback button{position:absolute;inset-inline-end:.75rem;inset-block-end:.75rem;background:var(--paper)}
70
+ .folio-action-band{display:grid;grid-template-columns:minmax(0,1fr);gap:1.5rem;border-block:1px solid var(--rule-hard);padding-block:clamp(2.5rem,6vw,4.5rem);margin-block-start:clamp(3.5rem,8vw,6rem)}
71
+ .folio-action-band__eyebrow{font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;letter-spacing:.1em;color:var(--ink-3-aa)}
72
+ .folio-action-band h2{font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-lead);font-weight:300;line-height:1.15;margin:0;text-wrap:balance}
73
+ .folio-action-band p{max-width:46ch;color:var(--ink-3-aa);line-height:1.7;margin:1rem 0 0}
74
+ .folio-action-band__actions{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem}
75
+ .folio-feature-pairs{display:grid;grid-template-columns:1fr 1fr;gap:0 clamp(2rem,5vw,4.5rem);border-block-start:1px solid var(--rule-hard)}
76
+ .folio-reading-section[data-seamless] .folio-feature-pairs{border-block-start:0}
77
+ .folio-feature-pairs>div{padding-block:clamp(1.5rem,3vw,2rem);border-block-end:1px solid var(--rule)}
78
+ .folio-feature-pairs span{font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa)}
79
+ .folio-feature-pairs h3{font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-item);font-weight:300;line-height:1.2;margin-block:0 .75rem}
80
+ .folio-feature-pairs p{color:var(--ink-2);font-size:1rem;line-height:1.7;margin:0}
81
+ .folio-preview-pair{display:grid;gap:2rem;align-items:end;padding-block-start:1.75rem}
82
+ .folio-preview-pair[data-mobile]{grid-template-columns:minmax(0,1fr) minmax(13.5rem,.3fr)}
83
+ .folio-device-preview{margin:0;width:100%;min-width:0}
84
+ .folio-device-preview>div{border:1px solid var(--rule-hard);overflow:hidden;border-radius:var(--radius-sm);background:var(--paper);box-shadow:0 1rem 2.5rem color-mix(in srgb,var(--ink) 7%,transparent)}
85
+ .folio-browser-bar{display:flex;align-items:center;gap:1rem;background:var(--paper-2);border-block-end:1px solid var(--rule);padding:.6875rem .875rem;font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa)}
86
+ .folio-browser-bar>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
87
+ .folio-device-screen{position:relative;aspect-ratio:16/10;overflow:hidden}
88
+ .folio-device-screen img{width:100%;height:100%;object-fit:cover}
89
+ .folio-device-preview[data-kind=phone]{max-width:16.625rem}
90
+ .folio-device-preview[data-kind=phone]>div{border-width:.5rem;border-radius:calc(var(--radius) * 1.5)}
91
+ .folio-device-preview[data-kind=phone] .folio-device-screen{aspect-ratio:9/19}
92
+ .folio-device-preview figcaption{font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa);margin-block-start:.75rem}
93
+ .folio-command-tabs{min-width:0}
94
+ .folio-command-tabs [role=tablist]{flex-wrap:wrap}
95
+ .folio-command-tabs [role=tabpanel]:not([hidden]){display:grid;gap:.75rem}
96
+ .folio-command-tabs p{font-size:.8125rem;color:var(--ink-2);line-height:1.65;margin:0}
97
+ .folio-command-footer{display:flex;flex-wrap:wrap;gap:.75rem;border-block-start:1px solid var(--rule);padding-block-start:.75rem;margin-block-start:1rem;font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa)}
98
+ .folio-reading-surface{min-width:0;color:var(--ink-2)}
99
+ .folio-reading-surface[data-numbered]{counter-reset:folio-section}
100
+ .folio-reading-surface[data-numbered] h2{counter-increment:folio-section}
101
+ .folio-reading-surface[data-numbered] h2::before{content:counter(folio-section,decimal-leading-zero) ' ';font-family:var(--mono-i18n,var(--font-mono));font-size:.625em;color:var(--ink-3-aa)}
102
+ @media(min-width:1200px){.folio-reading-layout{display:grid;grid-template-columns:minmax(0,var(--w-reading,54rem)) var(--toc-w,12rem);justify-content:space-between;gap:var(--toc-gap,3rem)}.folio-outline-trigger{display:none}}
103
+ @media(max-width:1199px){.folio-reading-layout>.folio-toc{display:none}}
104
+ @media(max-width:760px){.folio-detail-opening[data-aside],.folio-preview-pair[data-mobile]{grid-template-columns:1fr}.folio-preview-pair{justify-items:center}.folio-detail-metabar dl{gap:1.25rem 2rem}.folio-feature-pairs{grid-template-columns:1fr}}
105
+ @media(min-width:760px){.folio-action-band{grid-template-columns:minmax(0,1fr) auto;align-items:end}.folio-action-band__eyebrow{grid-column:1/-1}.folio-action-band__actions{justify-content:flex-end}}
106
+ @media(max-width:640px){.folio-record-pager{grid-template-columns:1fr}.folio-record-pager-link[data-direction=prev]{border-inline-end:0;padding-inline-end:0}.folio-record-pager-link[data-direction=next]{padding-inline-start:0}.folio-author-panel{grid-template-columns:3.25rem minmax(0,1fr);gap:1rem}.folio-author-avatar{width:3.25rem;height:3.25rem}}
107
+ @media print{.folio-toc,.folio-outline-trigger,.folio-reading-progress{display:none}}
108
+ :lang(zh) :is(.folio-detail-masthead h1,.folio-reading-heading h2,.folio-action-band h2){letter-spacing:var(--ls-cjk,normal);line-height:1.35}
109
+ .folio-reading-form{display:grid;gap:1rem;max-width:28rem;margin-block:1rem}
110
+ .folio-reading-form[data-inline]{grid-template-columns:minmax(0,1fr) auto;align-items:end}
111
+ @media(max-width:640px){.folio-reading-form[data-inline]{grid-template-columns:1fr}}
112
+ .folio-architecture-columns{margin-block-start:2rem}
113
+ .folio-architecture-columns>div:first-child{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:2rem}
114
+ .folio-architecture-columns>div:first-child>div{display:flex;flex-direction:column}
115
+ .folio-architecture-columns h3{font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa);margin-block:0 .75rem}
116
+ .folio-architecture-node{position:relative;border:1px solid var(--rule-2);border-radius:var(--radius-sm);padding:1rem;margin-block-end:1.5rem}
117
+ .folio-architecture-node+.folio-architecture-node::before{content:'';position:absolute;inset-inline-start:50%;inset-block-start:-1.5rem;height:1.5rem;border-inline-start:1px solid var(--rule-2)}
118
+ .folio-architecture-node strong{display:block;font-size:.875rem;font-weight:400}
119
+ .folio-architecture-node span,.folio-architecture-foundation span{display:block;font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;line-height:1.6;margin-block-start:.375rem;color:var(--ink-3-aa)}
120
+ .folio-architecture-columns [data-connected]::after{content:'';display:block;flex:1;min-height:1.5rem;width:1px;margin-inline:auto;margin-block-start:-1.5rem;background:var(--rule-2)}
121
+ .folio-architecture-foundation{background:var(--feature-surface);color:var(--on-feature);padding:1rem;border-radius:var(--radius-sm)}
122
+ .folio-architecture-foundation strong{font-size:.9375rem;font-weight:400}
123
+ .folio-architecture-foundation span{color:inherit;opacity:.8}
124
+ .folio-token-line{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .75rem;font-family:var(--sans);font-size:.8125rem;line-height:1.5;margin-block:0;color:var(--ink-2)}
125
+ .folio-token-line>ul{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem .75rem;list-style:none;padding:0;margin:0}
126
+ .folio-token-line strong{color:var(--ink);font-weight:500}
127
+ .folio-token-icon{display:inline-flex;vertical-align:-.2em;margin-inline-end:.25rem;color:var(--ink-2)}
128
+ .folio-token-separator{margin-inline-end:.75rem;color:var(--rule-2)}
129
+ .folio-token-line:not([data-flow])>ul{gap:.5rem;align-items:center}
130
+ .folio-token-line:not([data-flow]) li{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .625rem;border:1px solid var(--rule);border-radius:var(--radius-sm);background:var(--paper-2)}
131
+ .folio-token-line:not([data-flow]) .folio-token-separator{display:none}
132
+ .folio-token-line:not([data-flow]) .folio-token-icon{display:flex;flex:none;margin:0}
133
+ .folio-token-line + p{margin-block-start:.75rem}
134
+ .folio-media-playback button{border-radius:50%;inline-size:2.75rem;block-size:2.75rem;box-shadow:0 2px 12px color-mix(in srgb,var(--ink) 12%,transparent)}
135
+ .folio-command-tabs [role=tablist]{display:flex;flex-wrap:nowrap;inline-size:100%;max-inline-size:100%;gap:.25rem;padding:.25rem;border:1px solid var(--rule);border-radius:var(--radius-md);background:var(--paper-2)}
136
+ .folio-command-tabs [role=tab]{flex:1 0 auto;padding:.5rem .75rem;border:0;border-radius:var(--radius-sm);font-size:.8125rem}
137
+ .folio-command-tabs .folio-tabs-list[data-orientation=horizontal][data-measured]::before{top:var(--tab-y);height:var(--tab-height);border-radius:var(--radius-sm);background:var(--paper);box-shadow:0 1px 3px color-mix(in srgb,var(--ink) 7%,transparent)}
138
+ .folio-command-tabs [role=tab]:focus-visible{outline:1px solid var(--rule-2);outline-offset:-3px}
139
+ .folio-command-tabs [role=tab][data-state=active]{background:transparent;box-shadow:none}
140
+ .folio-command-tabs [role=tabpanel]{margin-block-start:0;padding-block-start:1rem;gap:.625rem}
141
+ .folio-command-tabs [role=tabpanel][hidden]{display:none}
142
+ @media(max-width:640px){.folio-architecture-columns>div:first-child{grid-auto-flow:row;gap:1rem}.folio-architecture-columns [data-connected]::after{display:none}}
143
+ .folio-feature-description{color:var(--ink-2);font-size:1rem;line-height:1.7}
144
+ .folio-content-figure{margin-block:2rem;margin-inline:0}
145
+ .folio-content-figure[data-wide]{max-width:64rem;margin-inline:auto}
146
+ .folio-content-figure img{width:100%;height:auto;border:1px solid var(--rule);border-radius:var(--radius-sm)}
147
+ .folio-content-figure figcaption{font-size:.875rem;color:var(--ink-3-aa);margin-block-start:.5rem}
148
+ .folio-reading-surface table{width:100%;table-layout:auto}
149
+ .folio-reading-surface :is(th,td){white-space:normal;overflow-wrap:anywhere}
150
+ .folio-reading-page{min-height:100vh;padding-block:clamp(2.5rem,7vw,5.25rem) 6rem;background:var(--paper);color:var(--ink)}
151
+ .folio-detail-opening:not([data-stacked]){grid-template-columns:minmax(0,1.35fr) minmax(17rem,.65fr);gap:clamp(3rem,7vw,6.5rem)}
152
+ .folio-detail-opening:not([data-stacked])>.folio-detail-dek{margin-block-start:.5rem;max-width:42ch}
153
+ .folio-detail-opening[data-stacked]:not([data-aside]){grid-template-columns:1fr;gap:1.75rem}
154
+ .folio-detail-opening[data-stacked]:not([data-aside])>.folio-detail-dek{margin:0}
155
+ @media(max-width:760px){.folio-detail-opening:not([data-stacked]){grid-template-columns:1fr;gap:1.75rem}}
156
+ .folio-command-snippet pre{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0;margin:0;font-family:var(--mono-i18n,var(--font-mono));font-size:.8125rem;line-height:1.7}
157
+ .folio-command-muted{color:var(--ink-3-aa)}
158
+ .folio-command-normal{color:var(--ink-2)}
159
+ .folio-command-strong{color:var(--ink);font-weight:500}