@misoto22/folio 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/dist/agent/Accordion.md +1 -1
  2. package/dist/agent/Actions.md +1 -1
  3. package/dist/agent/Alert.md +1 -1
  4. package/dist/agent/AppShell.md +1 -1
  5. package/dist/agent/ArchitectureFigure.md +1 -1
  6. package/dist/agent/AreaChart.md +1 -1
  7. package/dist/agent/Article.md +1 -1
  8. package/dist/agent/AspectRatio.md +1 -1
  9. package/dist/agent/Avatar.md +1 -1
  10. package/dist/agent/Badge.md +1 -1
  11. package/dist/agent/BarChart.md +1 -1
  12. package/dist/agent/BarList.md +1 -1
  13. package/dist/agent/BigNumber.md +1 -1
  14. package/dist/agent/BoxPlot.md +1 -1
  15. package/dist/agent/Breadcrumb.md +1 -1
  16. package/dist/agent/BulletChart.md +1 -1
  17. package/dist/agent/Button.md +1 -1
  18. package/dist/agent/Calendar.md +1 -1
  19. package/dist/agent/CalendarHeatmap.md +1 -1
  20. package/dist/agent/Card.md +1 -1
  21. package/dist/agent/Checkbox.md +1 -1
  22. package/dist/agent/Code.md +1 -1
  23. package/dist/agent/CodeBlock.md +1 -1
  24. package/dist/agent/Collapsible.md +1 -1
  25. package/dist/agent/Collection.md +1 -1
  26. package/dist/agent/ColorPicker.md +1 -1
  27. package/dist/agent/Combobox.md +1 -1
  28. package/dist/agent/Command.md +1 -1
  29. package/dist/agent/ComposedChart.md +1 -1
  30. package/dist/agent/Contact.md +1 -1
  31. package/dist/agent/Content.md +1 -1
  32. package/dist/agent/ContextMenu.md +1 -1
  33. package/dist/agent/Conversation.md +1 -1
  34. package/dist/agent/DataflowFigure.md +1 -1
  35. package/dist/agent/DatePicker.md +1 -1
  36. package/dist/agent/DescriptionList.md +1 -1
  37. package/dist/agent/Diagram.md +1 -1
  38. package/dist/agent/DiagramCanvas.md +1 -1
  39. package/dist/agent/DiagramExportMenu.md +1 -1
  40. package/dist/agent/DiagramInspector.md +1 -1
  41. package/dist/agent/DiagramLegend.md +1 -1
  42. package/dist/agent/DiagramMinimap.md +1 -1
  43. package/dist/agent/DiagramToolbar.md +1 -1
  44. package/dist/agent/Dialog.md +1 -1
  45. package/dist/agent/DropdownMenu.md +1 -1
  46. package/dist/agent/EmptyState.md +1 -1
  47. package/dist/agent/ErrorState.md +1 -1
  48. package/dist/agent/Evidence.md +1 -1
  49. package/dist/agent/Facet.md +1 -1
  50. package/dist/agent/Field.md +1 -1
  51. package/dist/agent/FigureBand.md +1 -1
  52. package/dist/agent/FloatingIconButton.md +1 -1
  53. package/dist/agent/FunnelChart.md +1 -1
  54. package/dist/agent/Heading.md +1 -1
  55. package/dist/agent/Heatmap.md +1 -1
  56. package/dist/agent/Histogram.md +1 -1
  57. package/dist/agent/Input.md +1 -1
  58. package/dist/agent/Kbd.md +1 -1
  59. package/dist/agent/LifecycleFigure.md +1 -1
  60. package/dist/agent/LineChart.md +1 -1
  61. package/dist/agent/LinkArrow.md +1 -1
  62. package/dist/agent/Markdown.md +1 -1
  63. package/dist/agent/Media.md +1 -1
  64. package/dist/agent/Metric.md +1 -1
  65. package/dist/agent/Metrics.md +1 -1
  66. package/dist/agent/Music.md +1 -1
  67. package/dist/agent/NativeSelect.md +1 -1
  68. package/dist/agent/NavItem.md +1 -1
  69. package/dist/agent/NumberField.md +1 -1
  70. package/dist/agent/PageHeader.md +1 -1
  71. package/dist/agent/Pagination.md +1 -1
  72. package/dist/agent/PieChart.md +1 -1
  73. package/dist/agent/Popover.md +1 -1
  74. package/dist/agent/Portfolio.md +1 -1
  75. package/dist/agent/PortfolioIndex.md +1 -1
  76. package/dist/agent/Progress.md +1 -1
  77. package/dist/agent/RadarChart.md +1 -1
  78. package/dist/agent/RadialChart.md +1 -1
  79. package/dist/agent/RadioGroup.md +1 -1
  80. package/dist/agent/Reading.md +1 -1
  81. package/dist/agent/Recovery.md +1 -1
  82. package/dist/agent/SankeyChart.md +1 -1
  83. package/dist/agent/ScatterChart.md +1 -1
  84. package/dist/agent/ScrollArea.md +1 -1
  85. package/dist/agent/SearchPalette.md +1 -1
  86. package/dist/agent/SearchableMenu.md +1 -1
  87. package/dist/agent/Select.md +1 -1
  88. package/dist/agent/Separator.md +1 -1
  89. package/dist/agent/SequenceFigure.md +1 -1
  90. package/dist/agent/Sheet.md +1 -1
  91. package/dist/agent/Sidebar.md +1 -1
  92. package/dist/agent/SiteNavigation.md +1 -1
  93. package/dist/agent/SiteShell.md +1 -1
  94. package/dist/agent/Skeleton.md +1 -1
  95. package/dist/agent/Slider.md +1 -1
  96. package/dist/agent/Sparkline.md +1 -1
  97. package/dist/agent/Spinner.md +1 -1
  98. package/dist/agent/StatusDot.md +1 -1
  99. package/dist/agent/StatusPill.md +1 -1
  100. package/dist/agent/Steps.md +1 -1
  101. package/dist/agent/Switch.md +1 -1
  102. package/dist/agent/Table.md +1 -1
  103. package/dist/agent/Tabs.md +1 -1
  104. package/dist/agent/Tag.md +1 -1
  105. package/dist/agent/Text.md +1 -1
  106. package/dist/agent/Textarea.md +1 -1
  107. package/dist/agent/Timeline.md +1 -1
  108. package/dist/agent/Timestamp.md +1 -1
  109. package/dist/agent/Toast.md +1 -1
  110. package/dist/agent/ToggleGroup.md +1 -1
  111. package/dist/agent/Toolbar.md +1 -1
  112. package/dist/agent/Tooltip.md +1 -1
  113. package/dist/agent/TreemapChart.md +1 -1
  114. package/dist/agent/WaterfallChart.md +1 -1
  115. package/dist/agent/Workbench.md +142 -0
  116. package/dist/agent/WorkflowFigure.md +1 -1
  117. package/dist/agent/catalog.json +51 -2
  118. package/dist/agent/index.md +6 -3
  119. package/dist/components/Badge/Badge.js +1 -1
  120. package/dist/components/Badge/Badge.js.map +1 -1
  121. package/dist/components/Button/Button.js +1 -1
  122. package/dist/components/Button/Button.js.map +1 -1
  123. package/dist/components/Heading/Heading.js +1 -1
  124. package/dist/components/Heading/Heading.js.map +1 -1
  125. package/dist/components/Tag/Tag.js +2 -2
  126. package/dist/components/Tag/Tag.js.map +1 -1
  127. package/dist/semantic.css +7 -0
  128. package/dist/styles.css +1 -1
  129. package/dist/themes.css +93 -0
  130. package/dist/tokens.css +16 -2
  131. package/dist/tokens.d.ts +7 -0
  132. package/dist/tokens.js +38 -2
  133. package/dist/tokens.json +38 -2
  134. package/dist/website/Workbench/Chronology.d.ts +32 -0
  135. package/dist/website/Workbench/Chronology.js +32 -0
  136. package/dist/website/Workbench/Chronology.js.map +1 -0
  137. package/dist/website/Workbench/ContactRow.d.ts +13 -0
  138. package/dist/website/Workbench/ContactRow.js +11 -0
  139. package/dist/website/Workbench/ContactRow.js.map +1 -0
  140. package/dist/website/Workbench/PhotoMosaic.d.ts +13 -0
  141. package/dist/website/Workbench/PhotoMosaic.js +15 -0
  142. package/dist/website/Workbench/PhotoMosaic.js.map +1 -0
  143. package/dist/website/Workbench/Reveal.d.ts +19 -0
  144. package/dist/website/Workbench/Reveal.js +29 -0
  145. package/dist/website/Workbench/Reveal.js.map +1 -0
  146. package/dist/website/Workbench/ToolStrip.d.ts +18 -0
  147. package/dist/website/Workbench/ToolStrip.js +15 -0
  148. package/dist/website/Workbench/ToolStrip.js.map +1 -0
  149. package/dist/website/Workbench/Workbench.d.ts +23 -0
  150. package/dist/website/Workbench/Workbench.js +22 -0
  151. package/dist/website/Workbench/Workbench.js.map +1 -0
  152. package/dist/website/Workbench/WorkbenchCard.d.ts +29 -0
  153. package/dist/website/Workbench/WorkbenchCard.js +21 -0
  154. package/dist/website/Workbench/WorkbenchCard.js.map +1 -0
  155. package/dist/website/Workbench/WorkbenchEntries.d.ts +22 -0
  156. package/dist/website/Workbench/WorkbenchEntries.js +24 -0
  157. package/dist/website/Workbench/WorkbenchEntries.js.map +1 -0
  158. package/dist/website/Workbench/WorkbenchFigure.d.ts +20 -0
  159. package/dist/website/Workbench/WorkbenchFigure.js +15 -0
  160. package/dist/website/Workbench/WorkbenchFigure.js.map +1 -0
  161. package/dist/website/Workbench/WorkbenchHero.d.ts +24 -0
  162. package/dist/website/Workbench/WorkbenchHero.js +24 -0
  163. package/dist/website/Workbench/WorkbenchHero.js.map +1 -0
  164. package/dist/website/Workbench/theme.d.ts +22 -0
  165. package/dist/website/Workbench/theme.js +12 -0
  166. package/dist/website/Workbench/theme.js.map +1 -0
  167. package/dist/website/index.d.ts +11 -0
  168. package/dist/website/index.js +11 -0
  169. package/dist/website/index.js.map +1 -1
  170. package/dist/website-collection.css +6 -6
  171. package/dist/website-content.css +4 -1
  172. package/dist/website-conversation.css +1 -1
  173. package/dist/website-media.css +12 -12
  174. package/dist/website-portfolio.css +4 -4
  175. package/dist/website-reading.css +10 -10
  176. package/dist/website-shell.css +1 -1
  177. package/dist/website-workbench.css +162 -0
  178. package/dist/website.css +1 -0
  179. package/package.json +1 -1
  180. package/skills/folio-design/rules/tokens.md +4 -2
@@ -0,0 +1,21 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ function WorkbenchCard({ cover, title, description, meta }) {
3
+ return /* @__PURE__ */ jsxs("article", { className: "folio-wb-card", children: [
4
+ /* @__PURE__ */ jsx("div", { className: "folio-wb-card-cover", children: cover }),
5
+ /* @__PURE__ */ jsx("h3", { className: "folio-wb-card-title", children: title }),
6
+ description && /* @__PURE__ */ jsx("p", { className: "folio-wb-card-description", children: description }),
7
+ meta && /* @__PURE__ */ jsx("p", { className: "folio-wb-card-meta", children: meta })
8
+ ] });
9
+ }
10
+ function WorkbenchCardGrid({ children }) {
11
+ return /* @__PURE__ */ jsx("div", { className: "folio-wb-card-grid", children });
12
+ }
13
+ function WorkbenchTile({ label }) {
14
+ return /* @__PURE__ */ jsx("div", { className: "folio-wb-tile", children: /* @__PURE__ */ jsx("span", { children: label }) });
15
+ }
16
+ export {
17
+ WorkbenchCard,
18
+ WorkbenchCardGrid,
19
+ WorkbenchTile
20
+ };
21
+ //# sourceMappingURL=WorkbenchCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/website/Workbench/WorkbenchCard.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nexport interface WorkbenchCardProps {\n /** A cover image, or a `WorkbenchTile` when there is no picture. */\n cover: ReactNode\n /** The title, usually a link; the whole card becomes its hit area. */\n title: ReactNode\n description?: ReactNode\n meta?: ReactNode\n}\n\n/**\n * An image-led record. The title's link is stretched over the card, so the\n * card is one target without nesting interactive elements.\n */\nexport function WorkbenchCard({ cover, title, description, meta }: WorkbenchCardProps) {\n return (\n <article className=\"folio-wb-card\">\n <div className=\"folio-wb-card-cover\">{cover}</div>\n <h3 className=\"folio-wb-card-title\">{title}</h3>\n {description && <p className=\"folio-wb-card-description\">{description}</p>}\n {meta && <p className=\"folio-wb-card-meta\">{meta}</p>}\n </article>\n )\n}\n\nexport interface WorkbenchCardGridProps {\n children: ReactNode\n}\n\n/** Two cards per row on the content subgrid, one on a phone. */\nexport function WorkbenchCardGrid({ children }: WorkbenchCardGridProps) {\n return <div className=\"folio-wb-card-grid\">{children}</div>\n}\n\nexport interface WorkbenchTileProps {\n /** Large word set on the tile, such as a product name. */\n label: ReactNode\n}\n\n/** A typographic stand-in cover: ink ground, a fine grid, one word. */\nexport function WorkbenchTile({ label }: WorkbenchTileProps) {\n return (\n <div className=\"folio-wb-tile\">\n <span>{label}</span>\n </div>\n )\n}\n"],"mappings":"AAiBI,SACE,KADF;AAFG,SAAS,cAAc,EAAE,OAAO,OAAO,aAAa,KAAK,GAAuB;AACrF,SACE,qBAAC,aAAQ,WAAU,iBACjB;AAAA,wBAAC,SAAI,WAAU,uBAAuB,iBAAM;AAAA,IAC5C,oBAAC,QAAG,WAAU,uBAAuB,iBAAM;AAAA,IAC1C,eAAe,oBAAC,OAAE,WAAU,6BAA6B,uBAAY;AAAA,IACrE,QAAQ,oBAAC,OAAE,WAAU,sBAAsB,gBAAK;AAAA,KACnD;AAEJ;AAOO,SAAS,kBAAkB,EAAE,SAAS,GAA2B;AACtE,SAAO,oBAAC,SAAI,WAAU,sBAAsB,UAAS;AACvD;AAQO,SAAS,cAAc,EAAE,MAAM,GAAuB;AAC3D,SACE,oBAAC,SAAI,WAAU,iBACb,8BAAC,UAAM,iBAAM,GACf;AAEJ;","names":[]}
@@ -0,0 +1,22 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+
4
+ interface WorkbenchEntry {
5
+ id: string;
6
+ /** The title, usually a link. */
7
+ title: ReactNode;
8
+ excerpt?: ReactNode;
9
+ /** A short date such as "Jun 25". */
10
+ date?: ReactNode;
11
+ /** Category and reading time. */
12
+ meta?: ReactNode;
13
+ }
14
+ interface WorkbenchEntriesProps {
15
+ /** Shown as a typographic notebook tile; the rest list beside it. */
16
+ featured?: WorkbenchEntry;
17
+ entries: WorkbenchEntry[];
18
+ }
19
+ /** A featured entry set as a tile, with the next few entries stacked beside it. */
20
+ declare function WorkbenchEntries({ featured, entries }: WorkbenchEntriesProps): react.JSX.Element;
21
+
22
+ export { WorkbenchEntries, type WorkbenchEntriesProps, type WorkbenchEntry };
@@ -0,0 +1,24 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ function WorkbenchEntries({ featured, entries }) {
3
+ return /* @__PURE__ */ jsxs("div", { className: "folio-wb-entries", "data-has-featured": featured ? true : void 0, children: [
4
+ featured && /* @__PURE__ */ jsxs("article", { className: "folio-wb-entry-featured", children: [
5
+ /* @__PURE__ */ jsx("h3", { children: featured.title }),
6
+ featured.excerpt && /* @__PURE__ */ jsx("p", { children: featured.excerpt }),
7
+ /* @__PURE__ */ jsxs("p", { className: "folio-wb-entry-meta", children: [
8
+ featured.meta,
9
+ featured.meta && featured.date && " \xB7 ",
10
+ featured.date
11
+ ] })
12
+ ] }),
13
+ /* @__PURE__ */ jsx("ul", { children: entries.map((entry) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("article", { className: "folio-wb-entry", children: [
14
+ entry.date && /* @__PURE__ */ jsx("p", { className: "folio-wb-entry-date", children: entry.date }),
15
+ /* @__PURE__ */ jsx("h3", { children: entry.title }),
16
+ entry.excerpt && /* @__PURE__ */ jsx("p", { className: "folio-wb-entry-excerpt", children: entry.excerpt }),
17
+ entry.meta && /* @__PURE__ */ jsx("p", { className: "folio-wb-entry-meta", children: entry.meta })
18
+ ] }) }, entry.id)) })
19
+ ] });
20
+ }
21
+ export {
22
+ WorkbenchEntries
23
+ };
24
+ //# sourceMappingURL=WorkbenchEntries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/website/Workbench/WorkbenchEntries.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nexport interface WorkbenchEntry {\n id: string\n /** The title, usually a link. */\n title: ReactNode\n excerpt?: ReactNode\n /** A short date such as \"Jun 25\". */\n date?: ReactNode\n /** Category and reading time. */\n meta?: ReactNode\n}\n\nexport interface WorkbenchEntriesProps {\n /** Shown as a typographic notebook tile; the rest list beside it. */\n featured?: WorkbenchEntry\n entries: WorkbenchEntry[]\n}\n\n/** A featured entry set as a tile, with the next few entries stacked beside it. */\nexport function WorkbenchEntries({ featured, entries }: WorkbenchEntriesProps) {\n return (\n <div className=\"folio-wb-entries\" data-has-featured={featured ? true : undefined}>\n {featured && (\n <article className=\"folio-wb-entry-featured\">\n <h3>{featured.title}</h3>\n {featured.excerpt && <p>{featured.excerpt}</p>}\n <p className=\"folio-wb-entry-meta\">\n {featured.meta}\n {featured.meta && featured.date && ' · '}\n {featured.date}\n </p>\n </article>\n )}\n <ul>\n {entries.map((entry) => (\n <li key={entry.id}>\n <article className=\"folio-wb-entry\">\n {entry.date && <p className=\"folio-wb-entry-date\">{entry.date}</p>}\n <h3>{entry.title}</h3>\n {entry.excerpt && <p className=\"folio-wb-entry-excerpt\">{entry.excerpt}</p>}\n {entry.meta && <p className=\"folio-wb-entry-meta\">{entry.meta}</p>}\n </article>\n </li>\n ))}\n </ul>\n </div>\n )\n}\n"],"mappings":"AAyBU,cAEA,YAFA;AALH,SAAS,iBAAiB,EAAE,UAAU,QAAQ,GAA0B;AAC7E,SACE,qBAAC,SAAI,WAAU,oBAAmB,qBAAmB,WAAW,OAAO,QACpE;AAAA,gBACC,qBAAC,aAAQ,WAAU,2BACjB;AAAA,0BAAC,QAAI,mBAAS,OAAM;AAAA,MACnB,SAAS,WAAW,oBAAC,OAAG,mBAAS,SAAQ;AAAA,MAC1C,qBAAC,OAAE,WAAU,uBACV;AAAA,iBAAS;AAAA,QACT,SAAS,QAAQ,SAAS,QAAQ;AAAA,QAClC,SAAS;AAAA,SACZ;AAAA,OACF;AAAA,IAEF,oBAAC,QACE,kBAAQ,IAAI,CAAC,UACZ,oBAAC,QACC,+BAAC,aAAQ,WAAU,kBAChB;AAAA,YAAM,QAAQ,oBAAC,OAAE,WAAU,uBAAuB,gBAAM,MAAK;AAAA,MAC9D,oBAAC,QAAI,gBAAM,OAAM;AAAA,MAChB,MAAM,WAAW,oBAAC,OAAE,WAAU,0BAA0B,gBAAM,SAAQ;AAAA,MACtE,MAAM,QAAQ,oBAAC,OAAE,WAAU,uBAAuB,gBAAM,MAAK;AAAA,OAChE,KANO,MAAM,EAOf,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,20 @@
1
+ import * as react from 'react';
2
+ import { ReactElement, ReactNode } from 'react';
3
+
4
+ interface WorkbenchFigureProps {
5
+ /** The image element (or a host image component); it fills the frame. */
6
+ children: ReactElement;
7
+ /** Caption start: the photograph's title. */
8
+ title?: ReactNode;
9
+ /** Caption end: place and year, right-aligned. */
10
+ meta?: ReactNode;
11
+ /** Frame proportion. */
12
+ ratio?: 'wide' | 'landscape' | 'portrait' | 'panorama';
13
+ }
14
+ /**
15
+ * A photograph shown as a photograph: its own proportion, an 8px corner, and a
16
+ * caption line beneath — never a backdrop for something else.
17
+ */
18
+ declare function WorkbenchFigure({ children, title, meta, ratio }: WorkbenchFigureProps): react.JSX.Element;
19
+
20
+ export { WorkbenchFigure, type WorkbenchFigureProps };
@@ -0,0 +1,15 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Slot } from "@radix-ui/react-slot";
3
+ function WorkbenchFigure({ children, title, meta, ratio = "landscape" }) {
4
+ return /* @__PURE__ */ jsxs("figure", { className: "folio-wb-figure", "data-ratio": ratio, children: [
5
+ /* @__PURE__ */ jsx(Slot, { className: "folio-wb-figure-frame", children }),
6
+ (title || meta) && /* @__PURE__ */ jsxs("figcaption", { children: [
7
+ title && /* @__PURE__ */ jsx("span", { children: title }),
8
+ meta && /* @__PURE__ */ jsx("span", { className: "folio-wb-figure-meta", children: meta })
9
+ ] })
10
+ ] });
11
+ }
12
+ export {
13
+ WorkbenchFigure
14
+ };
15
+ //# sourceMappingURL=WorkbenchFigure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/website/Workbench/WorkbenchFigure.tsx"],"sourcesContent":["import { Slot } from '@radix-ui/react-slot'\nimport type { ReactElement, ReactNode } from 'react'\n\nexport interface WorkbenchFigureProps {\n /** The image element (or a host image component); it fills the frame. */\n children: ReactElement\n /** Caption start: the photograph's title. */\n title?: ReactNode\n /** Caption end: place and year, right-aligned. */\n meta?: ReactNode\n /** Frame proportion. */\n ratio?: 'wide' | 'landscape' | 'portrait' | 'panorama'\n}\n\n/**\n * A photograph shown as a photograph: its own proportion, an 8px corner, and a\n * caption line beneath — never a backdrop for something else.\n */\nexport function WorkbenchFigure({ children, title, meta, ratio = 'landscape' }: WorkbenchFigureProps) {\n return (\n <figure className=\"folio-wb-figure\" data-ratio={ratio}>\n <Slot className=\"folio-wb-figure-frame\">{children}</Slot>\n {(title || meta) && (\n <figcaption>\n {title && <span>{title}</span>}\n {meta && <span className=\"folio-wb-figure-meta\">{meta}</span>}\n </figcaption>\n )}\n </figure>\n )\n}\n"],"mappings":"AAqBM,cAEE,YAFF;AArBN,SAAS,YAAY;AAkBd,SAAS,gBAAgB,EAAE,UAAU,OAAO,MAAM,QAAQ,YAAY,GAAyB;AACpG,SACE,qBAAC,YAAO,WAAU,mBAAkB,cAAY,OAC9C;AAAA,wBAAC,QAAK,WAAU,yBAAyB,UAAS;AAAA,KAChD,SAAS,SACT,qBAAC,gBACE;AAAA,eAAS,oBAAC,UAAM,iBAAM;AAAA,MACtB,QAAQ,oBAAC,UAAK,WAAU,wBAAwB,gBAAK;AAAA,OACxD;AAAA,KAEJ;AAEJ;","names":[]}
@@ -0,0 +1,24 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+
4
+ interface WorkbenchStat {
5
+ id: string;
6
+ value: ReactNode;
7
+ label: ReactNode;
8
+ }
9
+ interface WorkbenchHeroProps {
10
+ /** The ink clause of the statement; it is the page's h1. */
11
+ statement: ReactNode;
12
+ /** The muted continuation of the statement. */
13
+ lead?: ReactNode;
14
+ /** Up to two buttons or links, primary first. */
15
+ actions?: ReactNode;
16
+ /** Small counts beside the statement, such as projects and posts. */
17
+ stats?: WorkbenchStat[];
18
+ /** One captioned photograph under the statement — a `WorkbenchFigure`. */
19
+ figure?: ReactNode;
20
+ }
21
+ /** The Workbench opening: a two-tone statement, its actions, a few counts and one photograph. */
22
+ declare function WorkbenchHero({ statement, lead, actions, stats, figure }: WorkbenchHeroProps): react.JSX.Element;
23
+
24
+ export { WorkbenchHero, type WorkbenchHeroProps, type WorkbenchStat };
@@ -0,0 +1,24 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ function WorkbenchHero({ statement, lead, actions, stats = [], figure }) {
3
+ return /* @__PURE__ */ jsxs("section", { className: "folio-wb-hero", children: [
4
+ /* @__PURE__ */ jsxs("div", { className: "folio-wb-hero-copy", children: [
5
+ /* @__PURE__ */ jsxs("h1", { className: "folio-wb-heading folio-wb-hero-statement", children: [
6
+ /* @__PURE__ */ jsx("span", { children: statement }),
7
+ lead && /* @__PURE__ */ jsxs(Fragment, { children: [
8
+ " ",
9
+ /* @__PURE__ */ jsx("span", { className: "folio-wb-heading-lead", children: lead })
10
+ ] })
11
+ ] }),
12
+ actions && /* @__PURE__ */ jsx("div", { className: "folio-wb-hero-actions", children: actions })
13
+ ] }),
14
+ stats.length > 0 && /* @__PURE__ */ jsx("dl", { className: "folio-wb-hero-stats", children: stats.map((stat) => /* @__PURE__ */ jsxs("div", { children: [
15
+ /* @__PURE__ */ jsx("dt", { children: stat.label }),
16
+ /* @__PURE__ */ jsx("dd", { children: stat.value })
17
+ ] }, stat.id)) }),
18
+ figure && /* @__PURE__ */ jsx("div", { className: "folio-wb-hero-figure", children: figure })
19
+ ] });
20
+ }
21
+ export {
22
+ WorkbenchHero
23
+ };
24
+ //# sourceMappingURL=WorkbenchHero.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/website/Workbench/WorkbenchHero.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nexport interface WorkbenchStat {\n id: string\n value: ReactNode\n label: ReactNode\n}\n\nexport interface WorkbenchHeroProps {\n /** The ink clause of the statement; it is the page's h1. */\n statement: ReactNode\n /** The muted continuation of the statement. */\n lead?: ReactNode\n /** Up to two buttons or links, primary first. */\n actions?: ReactNode\n /** Small counts beside the statement, such as projects and posts. */\n stats?: WorkbenchStat[]\n /** One captioned photograph under the statement — a `WorkbenchFigure`. */\n figure?: ReactNode\n}\n\n/** The Workbench opening: a two-tone statement, its actions, a few counts and one photograph. */\nexport function WorkbenchHero({ statement, lead, actions, stats = [], figure }: WorkbenchHeroProps) {\n return (\n <section className=\"folio-wb-hero\">\n <div className=\"folio-wb-hero-copy\">\n <h1 className=\"folio-wb-heading folio-wb-hero-statement\">\n <span>{statement}</span>\n {lead && <> <span className=\"folio-wb-heading-lead\">{lead}</span></>}\n </h1>\n {actions && <div className=\"folio-wb-hero-actions\">{actions}</div>}\n </div>\n {stats.length > 0 && (\n <dl className=\"folio-wb-hero-stats\">\n {stats.map((stat) => (\n <div key={stat.id}>\n <dt>{stat.label}</dt>\n <dd>{stat.value}</dd>\n </div>\n ))}\n </dl>\n )}\n {figure && <div className=\"folio-wb-hero-figure\">{figure}</div>}\n </section>\n )\n}\n"],"mappings":"AA2BU,SACS,UADT,KACS,YADT;AALH,SAAS,cAAc,EAAE,WAAW,MAAM,SAAS,QAAQ,CAAC,GAAG,OAAO,GAAuB;AAClG,SACE,qBAAC,aAAQ,WAAU,iBACjB;AAAA,yBAAC,SAAI,WAAU,sBACb;AAAA,2BAAC,QAAG,WAAU,4CACZ;AAAA,4BAAC,UAAM,qBAAU;AAAA,QAChB,QAAQ,iCAAE;AAAA;AAAA,UAAC,oBAAC,UAAK,WAAU,yBAAyB,gBAAK;AAAA,WAAO;AAAA,SACnE;AAAA,MACC,WAAW,oBAAC,SAAI,WAAU,yBAAyB,mBAAQ;AAAA,OAC9D;AAAA,IACC,MAAM,SAAS,KACd,oBAAC,QAAG,WAAU,uBACX,gBAAM,IAAI,CAAC,SACV,qBAAC,SACC;AAAA,0BAAC,QAAI,eAAK,OAAM;AAAA,MAChB,oBAAC,QAAI,eAAK,OAAM;AAAA,SAFR,KAAK,EAGf,CACD,GACH;AAAA,IAED,UAAU,oBAAC,SAAI,WAAU,wBAAwB,kBAAO;AAAA,KAC3D;AAEJ;","names":[]}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The Workbench preset as the attributes a host writes on `<html>`.
3
+ *
4
+ * A preset is a combination of theme axes, never a block of its own, so this
5
+ * is the whole of it: linen ground and warm ink, an ember accent for links and
6
+ * the current state, primary buttons in ink, headings in the grotesk at a quiet voice, and quiet rules. Radius, motion
7
+ * and density stay on their defaults. Spread it onto the root element:
8
+ *
9
+ * ```tsx
10
+ * <html {...WORKBENCH_THEME} data-mode="light">
11
+ * ```
12
+ */
13
+ declare const WORKBENCH_THEME: {
14
+ readonly 'data-surface': "linen";
15
+ readonly 'data-accent': "ember";
16
+ readonly 'data-action': "ink";
17
+ readonly 'data-type': "grotesk";
18
+ readonly 'data-rules': "quiet";
19
+ readonly 'data-voice': "quiet";
20
+ };
21
+
22
+ export { WORKBENCH_THEME };
@@ -0,0 +1,12 @@
1
+ const WORKBENCH_THEME = {
2
+ "data-surface": "linen",
3
+ "data-accent": "ember",
4
+ "data-action": "ink",
5
+ "data-type": "grotesk",
6
+ "data-rules": "quiet",
7
+ "data-voice": "quiet"
8
+ };
9
+ export {
10
+ WORKBENCH_THEME
11
+ };
12
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/website/Workbench/theme.ts"],"sourcesContent":["/**\n * The Workbench preset as the attributes a host writes on `<html>`.\n *\n * A preset is a combination of theme axes, never a block of its own, so this\n * is the whole of it: linen ground and warm ink, an ember accent for links and\n * the current state, primary buttons in ink, headings in the grotesk at a quiet voice, and quiet rules. Radius, motion\n * and density stay on their defaults. Spread it onto the root element:\n *\n * ```tsx\n * <html {...WORKBENCH_THEME} data-mode=\"light\">\n * ```\n */\nexport const WORKBENCH_THEME = {\n 'data-surface': 'linen',\n 'data-accent': 'ember',\n 'data-action': 'ink',\n 'data-type': 'grotesk',\n 'data-rules': 'quiet',\n 'data-voice': 'quiet',\n} as const\n"],"mappings":"AAYO,MAAM,kBAAkB;AAAA,EAC7B,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAChB;","names":[]}
@@ -18,6 +18,17 @@ export { ClipboardButton, ClipboardButtonProps, CodePanel, CodePanelProps } from
18
18
  export { ActionMenu, ActionMenuItem, ActionMenuProps, ScrollControl, ScrollControlProps } from './Actions/Actions.js';
19
19
  export { ActionProposal, ActionProposalProps, ConversationAnswer, ConversationAnswerHeading, ConversationAnswerProps, ConversationControl, ConversationDock, ConversationDockCorner, ConversationDockProps, ConversationDockWelcome, ConversationDockWelcomeProps, ConversationFacts, ConversationFactsProps, ConversationLauncher, ConversationLauncherProps, ConversationLayout, ConversationLayoutProps, ConversationLog, ConversationLogProps, ConversationProse, ConversationQuote, ConversationQuoteProps, ConversationResizeHandle, ConversationResizeHandleProps, ConversationRoomLink, ConversationSource, ConversationSources, ConversationSourcesProps, ConversationSuggestion, ConversationSuggestions, ConversationSuggestionsProps, ConversationThread, ConversationThreadProps, ConversationTurn, ConversationTurnProps, QuestionComposer, QuestionComposerProps, SelectionToolbar, SelectionToolbarAction, SelectionToolbarProps, StreamingCaret } from './Conversation/Conversation.js';
20
20
  export { ActivityTrace, ActivityTraceItem, ActivityTraceProps, EvidenceDisclosure, EvidenceDisclosureProps, EvidenceDuration, EvidenceDurations, EvidenceDurationsProps, EvidenceFacts, EvidenceFactsProps, EvidenceMeter, EvidenceMeterProps, EvidencePanel, EvidencePanelProps, EvidenceQuery, EvidenceQueryProps, EvidenceScore, EvidenceScores, EvidenceScoresProps, EvidenceSelection, EvidenceSelectionProps, EvidenceStage, EvidenceStageProps, EvidenceStages, EvidenceState, EvidenceStatus, EvidenceStatusProps, EvidenceSummary, EvidenceSummaryProps, SignalFigure, SignalFigureProps } from './Evidence/Evidence.js';
21
+ export { Reveal, RevealProps } from './Workbench/Reveal.js';
22
+ export { WorkbenchSection, WorkbenchSectionProps } from './Workbench/Workbench.js';
23
+ export { WorkbenchHero, WorkbenchHeroProps, WorkbenchStat } from './Workbench/WorkbenchHero.js';
24
+ export { WorkbenchFigure, WorkbenchFigureProps } from './Workbench/WorkbenchFigure.js';
25
+ export { ToolStrip, ToolStripItem, ToolStripProps } from './Workbench/ToolStrip.js';
26
+ export { WorkbenchCard, WorkbenchCardGrid, WorkbenchCardGridProps, WorkbenchCardProps, WorkbenchTile, WorkbenchTileProps } from './Workbench/WorkbenchCard.js';
27
+ export { WorkbenchEntries, WorkbenchEntriesProps, WorkbenchEntry } from './Workbench/WorkbenchEntries.js';
28
+ export { Chronology, ChronologyItem, ChronologyProps } from './Workbench/Chronology.js';
29
+ export { PhotoMosaic, PhotoMosaicProps } from './Workbench/PhotoMosaic.js';
30
+ export { ContactRow, ContactRowProps } from './Workbench/ContactRow.js';
31
+ export { WORKBENCH_THEME } from './Workbench/theme.js';
21
32
  import 'react';
22
33
  import '../components/DescriptionList/DescriptionList.js';
23
34
  import '../components/ErrorState/ErrorState.js';
@@ -18,4 +18,15 @@ export * from "./Content/CodePanel.js";
18
18
  export * from "./Actions/Actions.js";
19
19
  export * from "./Conversation/Conversation.js";
20
20
  export * from "./Evidence/Evidence.js";
21
+ export * from "./Workbench/Reveal.js";
22
+ export * from "./Workbench/Workbench.js";
23
+ export * from "./Workbench/WorkbenchHero.js";
24
+ export * from "./Workbench/WorkbenchFigure.js";
25
+ export * from "./Workbench/ToolStrip.js";
26
+ export * from "./Workbench/WorkbenchCard.js";
27
+ export * from "./Workbench/WorkbenchEntries.js";
28
+ export * from "./Workbench/Chronology.js";
29
+ export * from "./Workbench/PhotoMosaic.js";
30
+ export * from "./Workbench/ContactRow.js";
31
+ export * from "./Workbench/theme.js";
21
32
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/website/index.ts"],"sourcesContent":["export * from './SiteShell/SiteShell'\nexport * from './SiteNavigation/SiteNavigation'\nexport * from './Portfolio/Portfolio'\nexport * from './Portfolio/QuestionCard'\nexport * from './PortfolioIndex/PortfolioIndex'\nexport * from './Collection/Collection'\nexport * from './Reading/Reading'\nexport * from './Contact/Contact'\nexport * from './Music/Music'\nexport * from './Timeline/Timeline'\nexport * from './Recovery/Recovery'\nexport * from './Media/Media'\nexport * from './Media/MediaLightbox'\nexport * from './Metrics/Metrics'\nexport * from './SearchPalette/SearchPalette'\nexport * from './Content/Content'\nexport * from './Content/CodePanel'\nexport * from './Actions/Actions'\nexport * from './Conversation/Conversation'\nexport * from './Evidence/Evidence'\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../src/website/index.ts"],"sourcesContent":["export * from './SiteShell/SiteShell'\nexport * from './SiteNavigation/SiteNavigation'\nexport * from './Portfolio/Portfolio'\nexport * from './Portfolio/QuestionCard'\nexport * from './PortfolioIndex/PortfolioIndex'\nexport * from './Collection/Collection'\nexport * from './Reading/Reading'\nexport * from './Contact/Contact'\nexport * from './Music/Music'\nexport * from './Timeline/Timeline'\nexport * from './Recovery/Recovery'\nexport * from './Media/Media'\nexport * from './Media/MediaLightbox'\nexport * from './Metrics/Metrics'\nexport * from './SearchPalette/SearchPalette'\nexport * from './Content/Content'\nexport * from './Content/CodePanel'\nexport * from './Actions/Actions'\nexport * from './Conversation/Conversation'\nexport * from './Evidence/Evidence'\nexport * from './Workbench/Reveal'\nexport * from './Workbench/Workbench'\nexport * from './Workbench/WorkbenchHero'\nexport * from './Workbench/WorkbenchFigure'\nexport * from './Workbench/ToolStrip'\nexport * from './Workbench/WorkbenchCard'\nexport * from './Workbench/WorkbenchEntries'\nexport * from './Workbench/Chronology'\nexport * from './Workbench/PhotoMosaic'\nexport * from './Workbench/ContactRow'\nexport * from './Workbench/theme'\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -6,13 +6,13 @@
6
6
  .folio-content-band[data-spacing=section]{padding-block:clamp(3rem,7vw,6rem)}
7
7
  .folio-collection-intro{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.65fr);align-items:center;gap:clamp(2rem,5vw,5rem);padding-block:clamp(3.5rem,8vw,6.5rem) clamp(2.5rem,5vw,4.5rem)}
8
8
  .folio-collection-intro:has(>div:only-child){grid-template-columns:minmax(0,1fr)}
9
- .folio-collection-intro h1{margin:0;font-family:var(--serif-i18n,var(--font-heading));font-weight:300;font-size:var(--fs-title);line-height:1.05;letter-spacing:-.032em;text-wrap:balance}
9
+ .folio-collection-intro h1{margin:0;font-family:var(--serif-i18n,var(--font-heading));font-weight:var(--display-weight);font-size:var(--fs-title);line-height:1.05;letter-spacing:-.032em;text-wrap:balance}
10
10
  .folio-collection-intro>div:first-child>p{max-width:54ch;margin-block:1.5rem 0;color:var(--ink-2);font-size:clamp(1.0625rem,1.6vw,1.25rem);line-height:1.65;text-wrap:pretty}
11
11
  .folio-collection-intro[data-compact] h1{font-size:var(--fs-lead)}
12
12
  .folio-collection-intro-media{min-width:0}
13
13
  .folio-collection-intro-media img{width:100%;height:auto}
14
- .folio-collection-context,.folio-record-context,.folio-record-metadata,.folio-collection-count{font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;line-height:1.65;letter-spacing:.09em;color:var(--ink-3-aa)}
15
- .folio-collection-context{margin-block-end:1rem;text-transform:uppercase}
14
+ .folio-collection-context,.folio-record-context,.folio-record-metadata,.folio-collection-count{font-family:var(--mono-i18n,var(--label-font));font-size:.6875rem;line-height:1.65;letter-spacing:calc(.09em * var(--label-tracking-scale));color:var(--ink-3-aa)}
15
+ .folio-collection-context{margin-block-end:1rem;text-transform:var(--label-case)}
16
16
  .folio-collection-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-block-start:1.5rem}
17
17
  .folio-collection-metadata{display:flex;flex-wrap:wrap;gap:1.5rem 3rem;margin:0;padding-block:1.25rem;border-block:1px solid var(--rule)}
18
18
  .folio-collection-metadata dt{font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa)}
@@ -20,7 +20,7 @@
20
20
  .folio-collection-group{padding-block-start:clamp(3rem,7vw,6rem)}
21
21
  .folio-collection-group[data-compact]{padding-block-start:1.5rem}
22
22
  .folio-collection-group-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:1rem}
23
- .folio-collection-group-heading h2{margin:0;font-family:var(--serif-i18n,var(--font-heading));font-weight:300;font-size:var(--fs-lead);line-height:1.1;letter-spacing:-.028em}
23
+ .folio-collection-group-heading h2{margin:0;font-family:var(--serif-i18n,var(--font-heading));font-weight:var(--display-weight);font-size:var(--fs-lead);line-height:1.1;letter-spacing:-.028em}
24
24
  .folio-collection-group-heading>span{font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa)}
25
25
  .folio-collection-controls{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem 2rem;border-block:1px solid var(--rule);padding-block:1rem}
26
26
  .folio-collection-controls[data-quiet]{border:0}
@@ -38,7 +38,7 @@
38
38
  .folio-record-media[data-empty]{border:0;background:transparent}
39
39
  .folio-record-media img{display:block;width:100%;height:100%;object-fit:cover}
40
40
  .folio-record-copy{min-width:0}
41
- .folio-record-copy h2,.folio-record-copy h3{margin:.375rem 0 0;font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-heading);font-weight:300;line-height:1.16;letter-spacing:-.022em}
41
+ .folio-record-copy h2,.folio-record-copy h3{margin:.375rem 0 0;font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-heading);font-weight:var(--display-weight);line-height:1.16;letter-spacing:-.022em}
42
42
  .folio-record-link:hover h2,.folio-record-link:hover h3{color:var(--ink-2)}
43
43
  .folio-record-context{display:flex;flex-wrap:wrap;gap:.75rem}
44
44
  .folio-record-summary{max-width:var(--measure-record,62ch);margin:.875rem 0 0;color:var(--ink-2);line-height:1.66;text-wrap:pretty}
@@ -59,7 +59,7 @@
59
59
  .folio-featured-record-media{position:relative;aspect-ratio:4/3;overflow:hidden;background:var(--paper-2);border-radius:var(--radius-sm)}
60
60
  .folio-featured-record-media>a{display:block;width:100%;height:100%}
61
61
  .folio-featured-record-media img{width:100%;height:100%;object-fit:cover}
62
- .folio-featured-record h2{margin-block:1.125rem 0;font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-lead);font-weight:300;line-height:1.1;letter-spacing:-.028em}
62
+ .folio-featured-record h2{margin-block:1.125rem 0;font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-lead);font-weight:var(--display-weight);line-height:1.1;letter-spacing:-.028em}
63
63
  .folio-featured-record h2 a{display:inline-flex;align-items:center;min-height:44px;color:inherit;text-decoration:none}
64
64
  .folio-featured-record p{max-width:49ch;margin-block:1.25rem 0;color:var(--ink-2);line-height:1.7}
65
65
  .folio-collection-footer{padding-block-start:clamp(2rem,5vw,4rem)}
@@ -1,4 +1,7 @@
1
1
  .folio-step-sequence { margin: 0; }
2
+ /* A sequence's anchor is emphasis, not progress, so it takes the primary
3
+ action's fill: the accent by default, ink where `data-action` says so. */
4
+ .folio-sequence-step[data-anchor] .folio-sequence-counter { border-color: var(--action); background: var(--action); color: var(--action-foreground); }
2
5
  /* The rail itself is the core Steps rendering; only what Steps has no slot for lives here. The column's own 0.25rem gap plus this margin keeps tags 0.625rem under the note. */
3
6
  .folio-sequence-tags { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-block-start: 0.375rem; }
4
7
  .folio-sequence-caption { max-inline-size: 62ch; margin-block-start: 1.5rem; padding-block-start: 1rem; border-block-start: 1px solid var(--border-subtle); color: var(--foreground-muted); font-size: 0.875rem; line-height: 1.65; }
@@ -8,7 +11,7 @@
8
11
  .folio-code-panel,
9
12
  figure:has(> .folio-code-panel-head) { min-inline-size: 0; margin-block: 2rem; margin-inline: 0; overflow: hidden; border: 1px solid var(--border-subtle); border-radius: var(--radius); background: var(--background); }
10
13
  .folio-code-panel-head { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding-block: 0.25rem; padding-inline: 1rem 0.375rem; border-block-end: 1px solid var(--border-subtle); background: var(--background-elevated); }
11
- .folio-code-panel-head > span { color: var(--secondary-text); font-family: var(--font-mono); font-size: 0.625rem; letter-spacing: 0.14em; }
14
+ .folio-code-panel-head > span { color: var(--secondary-text); font-family: var(--label-font); font-size: 0.625rem; letter-spacing: calc(0.14em * var(--label-tracking-scale)); }
12
15
  .folio-clipboard-button { min-inline-size: 44px; min-block-size: 44px; }
13
16
  pre.folio-code-panel-pre,
14
17
  [data-folio-article] pre.folio-code-panel-pre { min-inline-size: 0; margin: 0; padding: 1rem 1.125rem; overflow-x: auto; border: 0; border-radius: 0; background: var(--background); color: var(--foreground); font-family: var(--font-mono); font-size: 0.8125rem; line-height: 1.7; scrollbar-width: thin; }
@@ -32,7 +32,7 @@
32
32
  .folio-conversation-turn__body { max-inline-size: 64ch; padding-block-start: .75rem; }
33
33
  .folio-conversation-turn__preview { max-inline-size: 64ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
34
34
  .folio-conversation-quote { margin: 0 0 1.5rem; border-inline-start: 1px solid var(--rule-2); padding-inline-start: 1.25rem; }
35
- .folio-conversation-quote > blockquote { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4; overflow: hidden; margin: .5rem 0 0; font-family: var(--font-heading); font-weight: 300; font-style: italic; font-size: 1rem; line-height: 1.6; color: var(--ink-2); }
35
+ .folio-conversation-quote > blockquote { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4; overflow: hidden; margin: .5rem 0 0; font-family: var(--font-heading); font-weight: var(--display-weight); font-style: italic; font-size: 1rem; line-height: 1.6; color: var(--ink-2); }
36
36
  .folio-conversation-quote[data-compact] { margin-block-end: 1rem; padding-inline-start: .875rem; }
37
37
  .folio-conversation-quote[data-compact] > blockquote { -webkit-line-clamp: 3; font-size: .875rem; }
38
38
  .folio-conversation-answer__question { margin-block: .375rem 1rem; font-family: var(--font-heading); }
@@ -18,8 +18,8 @@
18
18
 
19
19
  .folio-media-detail-page { min-block-size: 100svh; }
20
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; }
21
+ .folio-media-eyebrow { margin: 0; color: var(--secondary-text); font-family: var(--label-font); font-size: 0.625rem; letter-spacing: calc(0.16em * var(--label-tracking-scale)); text-transform: var(--label-case); }
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: var(--display-weight); letter-spacing: -0.034em; line-height: 1.04; text-wrap: balance; }
23
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
24
  .folio-media-gallery-content { padding-block: clamp(2.25rem, 4vw, 3.5rem) clamp(4rem, 9vw, 8rem); }
25
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; }
@@ -33,13 +33,13 @@
33
33
  .folio-media-pager-link:focus-visible { outline: 2px solid var(--focus); outline-offset: 4px; }
34
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
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; }
36
+ .folio-media-gallery-location { overflow: hidden; color: var(--secondary-text); font-family: var(--label-font); font-size: 0.625rem; letter-spacing: calc(0.1em * var(--label-tracking-scale)); text-overflow: ellipsis; white-space: nowrap; }
37
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; }
38
+ .folio-media-gallery-title { display: -webkit-box; overflow: hidden; color: var(--foreground); font-family: var(--font-heading); font-size: 0.9375rem; font-weight: var(--display-weight); line-height: 1.22; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
39
39
  .folio-media-gallery-mount { block-size: auto; aspect-ratio: 1; }
40
40
 
41
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; }
42
+ .folio-photograph-feature-title { margin-block: 1rem; color: var(--foreground); font-family: var(--font-heading); font-size: clamp(2rem, 4vw, 4rem); font-weight: var(--display-weight); letter-spacing: -0.035em; line-height: 1.08; }
43
43
  .folio-photograph-feature-action { margin-block-start: 2rem; }
44
44
  .folio-photograph-feature-figure { min-inline-size: 0; margin: 0; }
45
45
  .folio-photograph-feature-image img { display: block; inline-size: 100%; block-size: auto; object-fit: contain; }
@@ -48,7 +48,7 @@
48
48
  .folio-media-detail { padding-block: clamp(2rem, 5vw, 4.5rem) clamp(4rem, 8vw, 7rem); }
49
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
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; }
51
+ .folio-media-index { color: var(--foreground-muted); font-family: var(--label-font); font-size: 0.6875rem; font-variant-numeric: tabular-nums; letter-spacing: calc(0.13em * var(--label-tracking-scale)); }
52
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
53
  .folio-media-well { display: flex; min-inline-size: 0; align-items: flex-start; }
54
54
  .folio-media-frame {
@@ -76,7 +76,7 @@
76
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
77
  .folio-media-metadata > div:first-child { padding-block-start: 0.6875rem; }
78
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; }
79
+ .folio-media-metadata dt { flex: none; color: var(--secondary-text); font-family: var(--label-font); font-size: 0.625rem; letter-spacing: calc(0.14em * var(--label-tracking-scale)); text-transform: var(--label-case); }
80
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
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
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; }
@@ -117,7 +117,7 @@
117
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
118
  .folio-media-lightbox-close:hover { border-color: var(--on-dark); }
119
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; }
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(--label-font); font-size: 0.6875rem; letter-spacing: calc(0.13em * var(--label-tracking-scale)); text-transform: var(--label-case); text-overflow: ellipsis; white-space: nowrap; pointer-events: none; }
121
121
 
122
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
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; }
@@ -127,10 +127,10 @@
127
127
  .folio-media-pager-link[data-direction='next'] .folio-media-pager-copy { text-align: end; }
128
128
  .folio-media-pager-image { position: relative; display: block; block-size: 3.25rem; overflow: hidden; background: var(--background-elevated); }
129
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; }
130
+ .folio-media-pager-label { display: block; color: var(--secondary-text); font-family: var(--label-font); font-size: 0.625rem; letter-spacing: calc(0.16em * var(--label-tracking-scale)); text-transform: var(--label-case); }
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: var(--display-weight); line-height: 1.2; text-overflow: ellipsis; white-space: nowrap; }
132
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; }
133
+ .folio-media-thumbnails h2 { margin-block: 0 0.75rem; color: var(--foreground-muted); font-family: var(--label-font); font-size: 0.6875rem; font-weight: 400; letter-spacing: calc(0.13em * var(--label-tracking-scale)); text-transform: var(--label-case); }
134
134
  .folio-media-thumbnail-list { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: clamp(0.4rem, 1vw, 0.8rem); }
135
135
  .folio-media-thumbnail { position: relative; min-inline-size: 44px; min-block-size: 44px; aspect-ratio: 1; overflow: hidden; background: var(--background-elevated); }
136
136
  .folio-media-thumbnail img { object-fit: contain; }
@@ -171,7 +171,7 @@
171
171
  .folio-media-map-pin[data-active] > span,
172
172
  .folio-media-map-marker:hover .folio-media-map-pin > span { transform: scale(1.3); }
173
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; }
174
+ .folio-media-map-label { color: var(--secondary-text); font-family: var(--label-font); font-size: 0.625rem; letter-spacing: calc(0.14em * var(--label-tracking-scale)); text-transform: var(--label-case); }
175
175
  .folio-media-map-frame-compact .folio-media-map-stage { block-size: 9.375rem; }
176
176
  .folio-media-map-frame-compact .folio-media-map-stage img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; }
177
177
  .folio-media-map-frame-compact .folio-media-map-pin { position: absolute; inset-block-start: 50%; inset-inline-start: 50%; transform: translate(-50%, -50%); }
@@ -20,11 +20,11 @@
20
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
21
  .folio-portfolio-intro-copy { display: flex; flex-direction: column; align-items: start; }
22
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); }
23
+ .folio-portfolio-byline h1 { font-weight: var(--display-weight); font-size: clamp(2.7rem, 5vw, 4rem); }
24
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
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
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); }
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(--font-heading); font-size: 1.125rem; line-height: 1.7; color: var(--ink-3-aa); }
28
28
  .folio-portfolio-feature { min-inline-size: 0; }
29
29
  .folio-portfolio-index { max-inline-size: var(--w-page); margin-inline: auto; padding: 1rem var(--page-pad) clamp(5rem, 9vw, 8rem); }
30
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; }
@@ -36,7 +36,7 @@
36
36
  .folio-portfolio-image-frame img { object-fit: cover; }
37
37
  .folio-portfolio-image[data-size='feature'] .folio-portfolio-image-frame { aspect-ratio: 1; }
38
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; }
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(--font-heading); font-size: .9375rem; line-height: 1.4; }
40
40
  .folio-portfolio-image figcaption > [aria-hidden] { font-family: var(--mono); font-size: .7rem; color: var(--ink-3-aa); }
41
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
42
  .folio-portfolio-record { display: grid; gap: 1.5rem; }
@@ -56,7 +56,7 @@
56
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
57
  .folio-portfolio-categories dl { margin: 0; }
58
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; }
59
+ .folio-portfolio-categories dt { font-family: var(--font-heading); font-size: 1.125rem; }
60
60
  .folio-portfolio-categories dt a { display: flex; align-items: center; min-block-size: 44px; }
61
61
  .folio-portfolio-categories dd { margin: 0; font-family: var(--mono); font-size: .75rem; color: var(--ink-3-aa); }
62
62
  @media (max-width: 1023px) {
@@ -3,16 +3,16 @@
3
3
  .folio-detail-masthead[data-width=fill],.folio-reading-figure[data-width=fill]{padding-inline:0;max-width:none}
4
4
  .folio-detail-back{margin-block-end:clamp(2rem,5vw,3rem)}
5
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}
6
+ .folio-detail-context{font-family:var(--mono-i18n,var(--label-font));font-size:.6875rem;color:var(--ink-3-aa);letter-spacing:calc(.12em * var(--label-tracking-scale));margin-block:0 1.25rem}
7
7
  .folio-detail-opening{display:grid;gap:2.5rem}
8
8
  .folio-detail-opening[data-aside]{grid-template-columns:minmax(0,1fr) minmax(19rem,26rem);gap:clamp(3rem,7vw,6rem)}
9
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}
10
+ .folio-detail-masthead h1{font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-title);font-weight:var(--display-weight);line-height:1.05;letter-spacing:-.032em;text-wrap:balance;margin:0}
11
11
  .folio-detail-masthead[data-display] h1{font-size:clamp(2.5rem,7vw,5.5rem)}
12
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
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
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)}
15
+ .folio-detail-metabar dt{font-family:var(--mono-i18n,var(--label-font));font-size:.625rem;letter-spacing:calc(.12em * var(--label-tracking-scale));color:var(--ink-3-aa)}
16
16
  .folio-detail-metabar dd{display:flex;align-items:center;gap:.5rem;margin:.375rem 0 0;font-size:.9375rem}
17
17
  .folio-detail-actions{display:flex;flex-wrap:wrap;gap:.625rem;margin-inline-start:auto}
18
18
  .folio-reading-layout{padding-block-start:clamp(2.75rem,5vw,4rem)}
@@ -24,10 +24,10 @@
24
24
  .folio-reading-heading:has(+ .folio-reference-rows, + .folio-feature-pairs){margin-block-end:0}
25
25
  .folio-reading-heading + :is(.folio-reference-rows,.folio-feature-pairs){border-block-start:0}
26
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}
27
+ .folio-reading-heading h2{margin:0;font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-lead);font-weight:var(--display-weight);line-height:1.1;letter-spacing:-.028em}
28
28
  .folio-reading-heading>span{font-family:var(--mono-i18n,var(--font-mono));font-size:.6875rem;color:var(--ink-3-aa)}
29
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}
30
+ .folio-reading-lede>p:first-child{font-family:var(--serif-i18n,var(--font-heading));font-weight:var(--display-weight);font-size:var(--fs-lead);line-height:1.28;letter-spacing:-.01em;margin:0}
31
31
  .folio-reading-lede>p:first-child>span{color:var(--ink-3-aa)}
32
32
  .folio-reading-lede>p+p{font-size:1.0625rem;line-height:1.7;color:var(--ink-2);margin-block-start:1.5rem}
33
33
  .folio-record-pager{display:grid;grid-template-columns:1fr 1fr;margin-block-start:clamp(3.5rem,7vw,5rem)}
@@ -35,12 +35,12 @@
35
35
  .folio-record-pager-link[data-direction=prev]{border-inline-end:1px solid var(--rule);padding-inline-end:1.5rem}
36
36
  .folio-record-pager-link[data-direction=next]{text-align:end;justify-content:end;padding-inline-start:1.5rem}
37
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}
38
+ .folio-record-pager strong{display:block;margin-block-start:.5rem;font-family:var(--serif-i18n,var(--font-heading));font-weight:var(--display-weight);font-size:var(--fs-item);line-height:1.25}
39
39
  .folio-record-pager-media{position:relative;width:4.5rem;height:3rem;overflow:hidden}
40
40
  .folio-record-pager-media img{width:100%;height:100%;object-fit:cover}
41
41
  .folio-toc{color:var(--ink-3-aa)}
42
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}
43
+ .folio-toc p{font-family:var(--mono-i18n,var(--label-font));font-size:.625rem;letter-spacing:calc(.12em * var(--label-tracking-scale));margin-block:0 1rem}
44
44
  .folio-toc ul{list-style:none;margin:0;padding:0;border-inline-start:1px solid var(--rule)}
45
45
  .folio-toc ul ul{border:0;padding-inline-start:1rem}
46
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}
@@ -68,15 +68,15 @@
68
68
  .folio-media-playback video{display:block;width:100%;height:100%;object-fit:cover}
69
69
  .folio-media-playback button{position:absolute;inset-inline-end:.75rem;inset-block-end:.75rem;background:var(--paper)}
70
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}
71
+ .folio-action-band__eyebrow{font-family:var(--mono-i18n,var(--label-font));font-size:.6875rem;letter-spacing:calc(.1em * var(--label-tracking-scale));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:var(--display-weight);line-height:1.15;margin:0;text-wrap:balance}
73
73
  .folio-action-band p{max-width:46ch;color:var(--ink-3-aa);line-height:1.7;margin:1rem 0 0}
74
74
  .folio-action-band__actions{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem}
75
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
76
  .folio-reading-section[data-seamless] .folio-feature-pairs{border-block-start:0}
77
77
  .folio-feature-pairs>div{padding-block:clamp(1.5rem,3vw,2rem);border-block-end:1px solid var(--rule)}
78
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}
79
+ .folio-feature-pairs h3{font-family:var(--serif-i18n,var(--font-heading));font-size:var(--fs-item);font-weight:var(--display-weight);line-height:1.2;margin-block:0 .75rem}
80
80
  .folio-feature-pairs p{color:var(--ink-2);font-size:1rem;line-height:1.7;margin:0}
81
81
  .folio-preview-pair{display:grid;gap:2rem;align-items:end;padding-block-start:1.75rem}
82
82
  .folio-preview-pair[data-mobile]{grid-template-columns:minmax(0,1fr) minmax(13.5rem,.3fr)}
@@ -19,7 +19,7 @@
19
19
  }
20
20
  .folio-site-navigation[data-overlay]::before { content: ''; position: absolute; inset: 0 0 -3rem; z-index: -1; pointer-events: none; background: linear-gradient(color-mix(in srgb, var(--photo-scrim) 45%, transparent), transparent); }
21
21
  .folio-site-navigation-inner { max-inline-size: var(--w-page); padding-inline: var(--page-pad); margin-inline: auto; min-block-size: 4.25rem; display: flex; align-items: center; gap: 2rem; }
22
- .folio-site-wordmark { font-family: var(--serif); font-size: 1.4rem; letter-spacing: -.025em; white-space: nowrap; }
22
+ .folio-site-wordmark { font-family: var(--font-heading); font-size: 1.4rem; letter-spacing: -.025em; white-space: nowrap; }
23
23
  .folio-site-wordmark a { display: inline-flex; align-items: center; min-block-size: 44px; }
24
24
  .folio-site-navigation-desktop { margin-inline-start: auto; }
25
25
  .folio-site-navigation-desktop ul { list-style: none; padding: 0; margin: 0; display: flex; gap: 1.6rem; }