@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,162 @@
1
+ /*
2
+ * Workbench compositions.
3
+ *
4
+ * One grid for the whole page: 12 columns with a 24px gutter inside the page
5
+ * width. A section's heading takes columns 1–4 and its content an 8-column
6
+ * subgrid on columns 5–12, so every list, card and caption on the page shares
7
+ * the same vertical lines. Colour, rules and type come from the theme axes;
8
+ * the Workbench preset is `linen` + `ember` + `grotesk` + `quiet`, but these
9
+ * compositions read only roles and work under any preset.
10
+ */
11
+ @layer components {
12
+ .folio-wb-section,
13
+ .folio-wb-hero {
14
+ --wb-gap: 24px;
15
+ max-inline-size: var(--w-page);
16
+ margin-inline: auto;
17
+ padding-inline: var(--page-pad);
18
+ display: grid;
19
+ grid-template-columns: repeat(12, minmax(0, 1fr));
20
+ column-gap: var(--wb-gap);
21
+ }
22
+
23
+ /* ─── Section ─────────────────────────────────────────────────────────── */
24
+ .folio-wb-section { margin-block-start: 7.5rem; }
25
+ .folio-wb-section:last-child { margin-block-end: 7.5rem; }
26
+ .folio-wb-section::before { content: ''; grid-column: 1 / -1; border-block-start: 1px solid var(--rule); margin-block-end: 2rem; }
27
+ .folio-wb-section-head { grid-column: 1 / span 4; display: flex; flex-direction: column; gap: 1rem; padding-inline-end: 1.5rem; }
28
+ .folio-wb-section-body { grid-column: 5 / -1; min-inline-size: 0; }
29
+ .folio-wb-heading { margin: 0; font-family: var(--font-heading); font-weight: 400; font-size: 1.375rem; line-height: 1.3; letter-spacing: -0.015em; color: var(--ink); text-wrap: pretty; }
30
+ .folio-wb-heading-lead { color: var(--ink-3-aa); }
31
+ .folio-wb-section-action a,
32
+ .folio-wb-link { display: inline-flex; align-items: center; min-block-size: 44px; color: var(--accent-on-muted); text-decoration: none; font-size: .9375rem; }
33
+ .folio-wb-section-action a:hover,
34
+ .folio-wb-link:hover { text-decoration: underline; text-underline-offset: 4px; text-decoration-thickness: 1px; }
35
+
36
+ /* ─── Hero ────────────────────────────────────────────────────────────── */
37
+ .folio-wb-hero { padding-block-start: clamp(4rem, 8vw, 6rem); row-gap: 3rem; align-items: end; }
38
+ .folio-wb-hero-copy { grid-column: 1 / span 7; display: flex; flex-direction: column; gap: 1.75rem; }
39
+ .folio-wb-hero-statement { font-size: clamp(1.5rem, 2.2vw, 1.75rem); line-height: 1.3; }
40
+ .folio-wb-hero-actions { display: flex; flex-wrap: wrap; gap: .5rem; }
41
+ .folio-wb-hero-stats { grid-column: 10 / -1; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--wb-gap); margin: 0; align-self: end; }
42
+ .folio-wb-hero-stats > div { display: flex; flex-direction: column-reverse; gap: .125rem; }
43
+ .folio-wb-hero-stats dd { margin: 0; font-size: 1.25rem; color: var(--ink); font-variant-numeric: tabular-nums; }
44
+ .folio-wb-hero-stats dt { font-size: .8125rem; color: var(--ink-3-aa); }
45
+ .folio-wb-hero-figure { grid-column: 1 / -1; }
46
+
47
+ /* ─── Figure ──────────────────────────────────────────────────────────── */
48
+ .folio-wb-figure { margin: 0; }
49
+ .folio-wb-figure-frame { position: relative; display: block; overflow: hidden; border-radius: var(--radius); background: var(--paper-2); aspect-ratio: 3 / 2; }
50
+ .folio-wb-figure[data-ratio='wide'] .folio-wb-figure-frame { aspect-ratio: 16 / 9; }
51
+ .folio-wb-figure[data-ratio='portrait'] .folio-wb-figure-frame { aspect-ratio: 4 / 5; }
52
+ .folio-wb-figure[data-ratio='panorama'] .folio-wb-figure-frame { aspect-ratio: 3 / 1; }
53
+ .folio-wb-figure-frame img,
54
+ .folio-wb-mosaic-frame img,
55
+ .folio-wb-card-cover img { inline-size: 100%; block-size: 100%; object-fit: cover; transition: scale var(--slow) var(--ease); }
56
+ .folio-wb-figure figcaption { display: flex; justify-content: space-between; gap: 1rem; margin-block-start: .75rem; font-size: .8125rem; color: var(--ink-3-aa); }
57
+
58
+ /* ─── Tools ───────────────────────────────────────────────────────────── */
59
+ .folio-wb-tools { max-inline-size: var(--w-page); margin: 4.5rem auto 0; padding-inline: var(--page-pad); }
60
+ .folio-wb-tools-label { margin: 0 0 1.25rem; text-align: center; font-size: .8125rem; color: var(--ink-3-aa); }
61
+ .folio-wb-tools ul { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 24px; }
62
+ .folio-wb-tools li { display: grid; place-items: center; block-size: 4rem; border-radius: var(--radius); background: var(--paper-2); color: var(--ink-3-aa); transition: color var(--mid) var(--ease), background-color var(--mid) var(--ease); }
63
+ .folio-wb-tools li:hover { color: var(--ink); background: var(--stone); }
64
+ .folio-wb-tools li svg { inline-size: 1.375rem; block-size: 1.375rem; }
65
+
66
+ /* ─── Cards ───────────────────────────────────────────────────────────── */
67
+ .folio-wb-card-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2.5rem 24px; }
68
+ .folio-wb-card { position: relative; display: flex; flex-direction: column; gap: .375rem; }
69
+ .folio-wb-card-cover { position: relative; overflow: hidden; aspect-ratio: 16 / 10; margin-block-end: .625rem; border: 1px solid var(--rule); border-radius: var(--radius); background: var(--paper-2); transition: border-color var(--mid) var(--ease), translate var(--mid) var(--ease); }
70
+ .folio-wb-card-title { margin: 0; font-family: var(--font-heading); font-weight: 400; font-size: 1rem; line-height: 1.4; color: var(--ink); }
71
+ .folio-wb-card-title a { display: inline-flex; align-items: center; min-block-size: 44px; color: inherit; text-decoration: none; }
72
+ .folio-wb-card-title a::after { content: ''; position: absolute; inset: 0; border-radius: var(--radius); }
73
+ .folio-wb-card:has(a:focus-visible) .folio-wb-card-cover { outline: var(--focus-w) solid var(--focus); outline-offset: 2px; }
74
+ .folio-wb-card-description,
75
+ .folio-wb-card-meta { margin: 0; font-size: .875rem; line-height: 1.5; color: var(--ink-3-aa); }
76
+ .folio-wb-card-meta { font-size: .8125rem; }
77
+ .folio-wb-card:hover .folio-wb-card-cover { translate: 0 -2px; border-color: var(--rule-2); }
78
+ .folio-wb-card:hover .folio-wb-card-cover img,
79
+ .folio-wb-figure:hover .folio-wb-figure-frame img,
80
+ .folio-wb-mosaic-frame:hover img { scale: 1.02; }
81
+ .folio-wb-tile { display: grid; align-items: end; block-size: 100%; padding: 1.25rem; color: var(--paper); background-color: var(--ink); background-image: linear-gradient(color-mix(in srgb, var(--paper) 10%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--paper) 10%, transparent) 1px, transparent 1px); background-size: 24px 24px; }
82
+ .folio-wb-tile span { font-size: 1.25rem; letter-spacing: .08em; text-transform: uppercase; }
83
+
84
+ /* ─── Entries ─────────────────────────────────────────────────────────── */
85
+ .folio-wb-entries { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); column-gap: 24px; row-gap: 2rem; }
86
+ .folio-wb-entries > ul { grid-column: 1 / -1; list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
87
+ .folio-wb-entries[data-has-featured] > ul { grid-column: 5 / -1; }
88
+ .folio-wb-entries > ul > li + li { border-block-start: 1px solid var(--rule); }
89
+ .folio-wb-entries > ul > li { padding-block: 1.25rem; }
90
+ .folio-wb-entries > ul > li:first-child { padding-block-start: 0; }
91
+ .folio-wb-entry-featured { grid-column: 1 / span 4; position: relative; display: flex; flex-direction: column; gap: 1rem; padding: 1.5rem; border: 1px solid var(--rule); border-radius: var(--radius); background-color: var(--paper-2); background-image: repeating-linear-gradient(to bottom, transparent 0 calc(1.625rem - 1px), var(--rule) calc(1.625rem - 1px) 1.625rem); transition: border-color var(--mid) var(--ease), translate var(--mid) var(--ease); }
92
+ .folio-wb-entry-featured:hover { translate: 0 -2px; border-color: var(--rule-2); }
93
+ .folio-wb-entry-featured h3 { margin: 0 0 auto; font-family: var(--font-heading); font-weight: 400; font-size: 1.375rem; line-height: 1.3; color: var(--ink); }
94
+ .folio-wb-entry-featured p { margin: 0; font-size: .9375rem; line-height: 1.625rem; color: var(--ink-2); }
95
+ .folio-wb-entry-featured h3 a::after { content: ''; position: absolute; inset: 0; }
96
+ .folio-wb-entry h3 { margin: 0; font-family: var(--font-heading); font-weight: 400; font-size: 1rem; line-height: 1.4; }
97
+ .folio-wb-entry h3 a,
98
+ .folio-wb-entry-featured h3 a { display: inline-flex; align-items: center; min-block-size: 44px; color: var(--ink); text-decoration: none; }
99
+ .folio-wb-entry h3 a:hover { text-decoration: underline; text-underline-offset: 4px; text-decoration-thickness: 1px; }
100
+ .folio-wb-entry-date { margin: 0 0 .25rem; font-size: .8125rem; color: var(--ink-3-aa); }
101
+ .folio-wb-entry-excerpt { margin: .375rem 0 0; font-size: .875rem; line-height: 1.5; color: var(--ink-3-aa); }
102
+ .folio-wb-entry-meta { margin: .375rem 0 0; font-size: .8125rem; color: var(--ink-3-aa); }
103
+
104
+ /* ─── Chronology ──────────────────────────────────────────────────────── */
105
+ .folio-wb-chronology { margin: 0; }
106
+ .folio-wb-chronology ol { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 1.25rem; }
107
+ .folio-wb-chronology li p { margin: 0 0 .375rem; font-size: .8125rem; line-height: 1.4; color: var(--ink); white-space: nowrap; }
108
+ .folio-wb-chronology li[data-align='start'] p { margin-inline-start: var(--start); }
109
+ .folio-wb-chronology li[data-align='end'] p { text-align: end; padding-inline-end: calc(100% - var(--end)); }
110
+ .folio-wb-chronology-org { color: var(--ink-3-aa); }
111
+ .folio-wb-chronology-now { color: var(--accent-on-muted); }
112
+ .folio-wb-chronology-bar { display: block; margin-inline-start: var(--start); block-size: .5rem; inline-size: calc(var(--end) - var(--start)); min-inline-size: .75rem; border-radius: var(--radius-pill); }
113
+ .folio-wb-chronology li[data-kind='role'] .folio-wb-chronology-bar { background: var(--stone); }
114
+ .folio-wb-chronology li[data-kind='study'] .folio-wb-chronology-bar { box-shadow: inset 0 0 0 1px var(--rule-2); }
115
+ .folio-wb-chronology li[data-current] .folio-wb-chronology-bar { background: linear-gradient(90deg, var(--ink) calc(100% - .5rem), var(--accent) 0); }
116
+ .folio-wb-chronology-axis { display: flex; overflow: hidden; margin-block-start: 1.5rem; border-block-start: 1px solid var(--rule-2); }
117
+ .folio-wb-chronology-axis span { flex: 1; min-inline-size: 0; white-space: nowrap; padding: .5rem 0 0 .375rem; border-inline-start: 1px solid var(--rule); font-size: .8125rem; color: var(--ink-3-aa); font-variant-numeric: tabular-nums; }
118
+
119
+ /* ─── Mosaic ──────────────────────────────────────────────────────────── */
120
+ .folio-wb-mosaic { display: grid; grid-template-columns: 2fr 1fr 1fr; grid-template-rows: auto auto; gap: 24px; }
121
+ .folio-wb-mosaic-lead { grid-row: span 2; margin: 0; display: flex; flex-direction: column; }
122
+ .folio-wb-mosaic-lead .folio-wb-mosaic-frame { flex: 1; }
123
+ .folio-wb-mosaic-frame { position: relative; overflow: hidden; border-radius: var(--radius); background: var(--paper-2); aspect-ratio: 4 / 5; }
124
+ .folio-wb-mosaic-lead .folio-wb-mosaic-frame { aspect-ratio: auto; min-block-size: 100%; }
125
+ .folio-wb-mosaic-frame > a { position: absolute; inset: 0; display: block; }
126
+ .folio-wb-mosaic-lead figcaption { margin-block-start: .75rem; font-size: .8125rem; color: var(--ink-3-aa); }
127
+
128
+ /* ─── Contact ─────────────────────────────────────────────────────────── */
129
+ .folio-wb-contact { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 1rem 2rem; }
130
+ .folio-wb-contact-address a { display: inline-flex; align-items: center; min-block-size: 44px; font-size: clamp(1.25rem, 2vw, 1.625rem); color: var(--ink); text-decoration: underline; text-underline-offset: 6px; text-decoration-thickness: 1px; text-decoration-color: var(--rule-2); transition: text-decoration-color var(--mid) var(--ease); }
131
+ .folio-wb-contact-address a:hover { text-decoration-color: var(--ink); }
132
+
133
+
134
+ /* ─── Reveal ──────────────────────────────────────────────────────────── */
135
+ .folio-wb-reveal[data-reveal] { transition: opacity calc(var(--slow) * 1.2) var(--ease), translate calc(var(--slow) * 1.2) var(--ease); }
136
+ .folio-wb-reveal[data-reveal='hidden'] { opacity: 0; translate: 0 12px; }
137
+
138
+ .folio-wb-visually-hidden { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
139
+
140
+ /* ─── Narrow screens ──────────────────────────────────────────────────── */
141
+ @media (max-width: 47.5rem) {
142
+ .folio-wb-section { margin-block-start: 5rem; }
143
+ .folio-wb-section-head,
144
+ .folio-wb-section-body,
145
+ .folio-wb-hero-copy,
146
+ .folio-wb-hero-stats { grid-column: 1 / -1; }
147
+ .folio-wb-section-head { margin-block-end: 2rem; padding-inline-end: 0; }
148
+ .folio-wb-tools ul { grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 12px; }
149
+ .folio-wb-card-grid { grid-template-columns: minmax(0, 1fr); }
150
+ .folio-wb-entries > ul,
151
+ .folio-wb-entries[data-has-featured] > ul,
152
+ .folio-wb-entry-featured { grid-column: 1 / -1; }
153
+ .folio-wb-mosaic { grid-template-columns: 1fr 1fr; }
154
+ .folio-wb-mosaic-lead { grid-column: 1 / -1; grid-row: auto; }
155
+ .folio-wb-mosaic-lead .folio-wb-mosaic-frame { aspect-ratio: 4 / 5; }
156
+ .folio-wb-chronology li p { white-space: normal; }
157
+ /* A long career puts a dozen years on a phone-width axis; every other
158
+ label keeps them legible without pushing the page sideways. */
159
+ .folio-wb-chronology-axis span:nth-child(even) { color: transparent; }
160
+ }
161
+ }
162
+
package/dist/website.css CHANGED
@@ -23,3 +23,4 @@
23
23
  @import './website-conversation.css';
24
24
  @import './website-evidence.css';
25
25
  @import './website-controls.css';
26
+ @import './website-workbench.css';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@misoto22/folio",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "private": false,
5
5
  "description": "Monochrome design system — CSS tokens and accessible React primitives",
6
6
  "license": "MIT",
@@ -63,12 +63,14 @@ not just `:root`. An unset axis is the default.
63
63
  | Attribute | Values | Unset means |
64
64
  | --- | --- | --- |
65
65
  | `data-mode` | `light` `dark` | follows the app |
66
- | `data-accent` | `clay` `cobalt` `forest` `moss` `plum` | ink |
67
- | `data-surface` | `warm` `cool` `glass` | paper |
66
+ | `data-accent` | `clay` `cobalt` `ember` `forest` `moss` `plum` | ink |
67
+ | `data-action` | `ink` | accent |
68
+ | `data-surface` | `warm` `cool` `glass` `linen` | paper |
68
69
  | `data-radius` | `sharp` `round` | the default ladder |
69
70
  | `data-rules` | `quiet` `firm` | hairline |
70
71
  | `data-type` | `grotesk` `bookish` | editorial |
71
72
  | `data-motion` | `still` `snappy` | calm |
73
+ | `data-voice` | `quiet` | display |
72
74
  | `data-density` | `compact` | comfortable |
73
75
 
74
76
  ```tsx