@takazudo/zudo-doc 3.2.0 → 4.0.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 (439) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +2 -2
  3. package/bin/tag-cli-config.ts +126 -0
  4. package/bin/tags-audit-runner.ts +60 -76
  5. package/bin/tags-audit.mjs +17 -36
  6. package/bin/tags-suggest-runner.ts +429 -0
  7. package/bin/tags-suggest.mjs +30 -0
  8. package/bin/zudo-doc.mjs +78 -25
  9. package/dist/breadcrumb/breadcrumb.d.ts +4 -4
  10. package/dist/breadcrumb/find-path.d.ts +2 -2
  11. package/dist/breadcrumb/index.d.ts +1 -1
  12. package/dist/breadcrumb/types.d.ts +0 -5
  13. package/dist/chrome/derive.d.ts +16 -4
  14. package/dist/chrome/derive.js +64 -4
  15. package/dist/chrome/index.d.ts +13 -10
  16. package/dist/chrome/index.js +12 -6
  17. package/dist/chrome/primary-slots.d.ts +21 -0
  18. package/dist/chrome/primary-slots.js +59 -0
  19. package/dist/chrome-bindings.d.ts +227 -0
  20. package/dist/chrome-bindings.js +6 -0
  21. package/dist/code-syntax/code-block-enhancer-script.d.ts +4 -0
  22. package/dist/code-syntax/code-block-enhancer-script.js +7 -4
  23. package/dist/code-syntax/code-block-enhancer.d.ts +2 -2
  24. package/dist/code-syntax/code-block-enhancer.js +1 -3
  25. package/dist/code-syntax/index.d.ts +5 -5
  26. package/dist/code-syntax/index.js +4 -13
  27. package/dist/code-syntax/mermaid-init-script.d.ts +1 -22
  28. package/dist/code-syntax/mermaid-init-script.js +0 -2
  29. package/dist/code-syntax/mermaid-init.d.ts +0 -1
  30. package/dist/code-syntax/mermaid-init.js +3 -4
  31. package/dist/code-syntax/tabs-init.d.ts +0 -1
  32. package/dist/code-syntax/tabs-init.js +1 -3
  33. package/dist/code-syntax/tabs.d.ts +0 -1
  34. package/dist/code-syntax/tabs.js +1 -3
  35. package/dist/color-scheme-utils.d.ts +72 -4
  36. package/dist/color-scheme-utils.js +137 -0
  37. package/dist/color-schemes-defaults/index.d.ts +23 -0
  38. package/dist/color-schemes-defaults/index.js +134 -0
  39. package/dist/config.d.ts +459 -0
  40. package/dist/config.js +125 -0
  41. package/dist/content/component-map.d.ts +0 -16
  42. package/dist/content/component-map.js +2 -4
  43. package/dist/content/index.d.ts +1 -1
  44. package/dist/content/index.js +2 -3
  45. package/dist/content.css +1 -1
  46. package/dist/design-token-panel-bootstrap.d.ts +82 -27
  47. package/dist/design-token-panel-bootstrap.js +110 -21
  48. package/dist/design-token-panel-config/index.d.ts +49 -0
  49. package/dist/design-token-panel-config/index.js +211 -0
  50. package/dist/design-token-panel-config/manifest.d.ts +46 -0
  51. package/dist/design-token-panel-config/manifest.js +105 -0
  52. package/dist/directive-vocabulary-defaults/index.d.ts +16 -0
  53. package/dist/directive-vocabulary-defaults/index.js +12 -0
  54. package/dist/doc-body-end-islands/design-token-panel-island.d.ts +15 -0
  55. package/dist/doc-body-end-islands/design-token-panel-island.js +31 -0
  56. package/dist/doc-body-end-islands/index.d.ts +52 -7
  57. package/dist/doc-body-end-islands/index.js +19 -0
  58. package/dist/doc-body-end-islands/theme-pack-switcher-island.d.ts +37 -0
  59. package/dist/doc-body-end-islands/theme-pack-switcher-island.js +18 -0
  60. package/dist/doc-content-header/index.js +1 -1
  61. package/dist/doc-history-area/index.d.ts +10 -4
  62. package/dist/doc-history-area/index.js +3 -2
  63. package/dist/doc-metainfo-area/index.d.ts +1 -0
  64. package/dist/doc-page-props/index.d.ts +7 -23
  65. package/dist/doc-page-renderer/index.d.ts +1 -0
  66. package/dist/doc-page-renderer/index.js +1 -0
  67. package/dist/doc-page-shell/index.js +19 -12
  68. package/dist/doc-pager/index.js +1 -1
  69. package/dist/doc-route-entries/index.d.ts +2 -2
  70. package/dist/doclayout/doc-layout-with-defaults.js +4 -4
  71. package/dist/doclayout/doc-layout.d.ts +8 -0
  72. package/dist/doclayout/doc-layout.js +10 -1
  73. package/dist/docs-schema/index.d.ts +67 -0
  74. package/dist/docs-schema/index.js +43 -0
  75. package/dist/eject/index.d.ts +16 -0
  76. package/dist/eject/index.js +122 -28
  77. package/dist/extract-headings/index.d.ts +5 -8
  78. package/dist/extract-headings/index.js +2 -9
  79. package/dist/factory-context/index.d.ts +56 -4
  80. package/dist/features.css +65 -43
  81. package/dist/find-in-page/find-bar.d.ts +9 -0
  82. package/dist/find-in-page/find-bar.js +114 -0
  83. package/dist/find-in-page/find-in-page.d.ts +17 -0
  84. package/dist/find-in-page/find-in-page.js +131 -0
  85. package/dist/find-in-page/index.d.ts +11 -0
  86. package/dist/find-in-page/index.js +49 -0
  87. package/dist/footer/footer.js +1 -0
  88. package/dist/frontmatter-preview-defaults/index.d.ts +16 -0
  89. package/dist/frontmatter-preview-defaults/index.js +25 -0
  90. package/dist/head-with-defaults/index.d.ts +2 -0
  91. package/dist/head-with-defaults/index.js +16 -0
  92. package/dist/header/header.d.ts +10 -5
  93. package/dist/header/header.js +45 -5
  94. package/dist/header/index.d.ts +1 -1
  95. package/dist/header/types.d.ts +30 -1
  96. package/dist/header-with-defaults/index.js +1 -0
  97. package/dist/home-page/index.d.ts +2 -0
  98. package/dist/home-page/index.js +11 -5
  99. package/dist/home-page/prepare-home-data.js +1 -1
  100. package/dist/i18n-defaults/index.d.ts +22 -0
  101. package/dist/i18n-defaults/index.js +167 -0
  102. package/dist/locale-merge/index.d.ts +9 -14
  103. package/dist/locale-merge/index.js +6 -4
  104. package/dist/mdx-components/index.js +4 -4
  105. package/dist/plugins/claude-resources.d.ts +1 -0
  106. package/dist/plugins/claude-resources.js +4 -2
  107. package/dist/plugins/doc-history.js +1 -1
  108. package/dist/{integrations → plugins/internal}/claude-resources/index.d.ts +1 -16
  109. package/dist/{integrations → plugins/internal}/claude-resources/index.js +0 -9
  110. package/dist/{integrations → plugins/internal}/doc-history/index.d.ts +0 -17
  111. package/dist/{integrations → plugins/internal}/doc-history/index.js +0 -4
  112. package/dist/{integrations → plugins/internal}/doc-history/pre-build.d.ts +2 -4
  113. package/dist/plugins/internal/llms-txt/index.d.ts +7 -0
  114. package/dist/{integrations → plugins/internal}/llms-txt/load.d.ts +1 -1
  115. package/dist/{integrations → plugins/internal}/llms-txt/load.js +2 -2
  116. package/dist/{integrations → plugins/internal}/llms-txt/strip.d.ts +2 -3
  117. package/dist/{integrations → plugins/internal}/llms-txt/strip.js +1 -1
  118. package/dist/{integrations → plugins/internal}/llms-txt/types.d.ts +13 -22
  119. package/dist/{integrations → plugins/internal}/search-index/collect.js +1 -1
  120. package/dist/plugins/internal/theme-packs/copy.d.ts +32 -0
  121. package/dist/plugins/internal/theme-packs/copy.js +45 -0
  122. package/dist/plugins/internal/theme-packs/dev-middleware.d.ts +22 -0
  123. package/dist/plugins/internal/theme-packs/dev-middleware.js +80 -0
  124. package/dist/plugins/internal/theme-packs/index.d.ts +6 -0
  125. package/dist/plugins/internal/theme-packs/index.js +9 -0
  126. package/dist/plugins/internal/theme-packs/resolve.d.ts +17 -0
  127. package/dist/plugins/internal/theme-packs/resolve.js +17 -0
  128. package/dist/plugins/internal/theme-packs/types.d.ts +22 -0
  129. package/dist/plugins/internal/theme-packs/types.js +0 -0
  130. package/dist/plugins/llms-txt.js +1 -1
  131. package/dist/plugins/routes.js +55 -21
  132. package/dist/plugins/search-index.js +1 -1
  133. package/dist/plugins/theme-packs.d.ts +3 -0
  134. package/dist/plugins/theme-packs.js +40 -0
  135. package/dist/preset.d.ts +28 -14
  136. package/dist/preset.js +24 -9
  137. package/dist/route-context/index.js +4 -6
  138. package/dist/route-enumerators/index.d.ts +6 -18
  139. package/dist/route-enumerators/index.js +8 -6
  140. package/dist/routes/404.js +3 -1
  141. package/dist/routes/_chrome.js +3 -2
  142. package/dist/routes/_context.d.ts +7 -3
  143. package/dist/routes/_context.js +2 -0
  144. package/dist/routes/_docs-helpers.js +9 -21
  145. package/dist/safelist.css +1 -1
  146. package/dist/settings.d.ts +64 -12
  147. package/dist/sidebar-tree/build-tree.d.ts +3 -4
  148. package/dist/sidebar-tree/build-tree.js +4 -3
  149. package/dist/sidebar-tree/index.d.ts +2 -2
  150. package/dist/sidebar-tree/types.d.ts +6 -17
  151. package/dist/site-tree-nav-island/index.d.ts +3 -1
  152. package/dist/site-tree-nav-island/index.js +17 -5
  153. package/dist/site-tree-nav-island/state.d.ts +4 -0
  154. package/dist/site-tree-nav-island/state.js +10 -0
  155. package/dist/tag-helpers/index.d.ts +6 -13
  156. package/dist/tag-helpers/index.js +5 -23
  157. package/dist/tag-pages/index.d.ts +8 -21
  158. package/dist/tag-pages/index.js +14 -10
  159. package/dist/tags-audit.d.ts +16 -44
  160. package/dist/tags-audit.js +9 -172
  161. package/dist/theme/color-scheme-provider.d.ts +2 -3
  162. package/dist/theme/color-scheme-provider.js +2 -10
  163. package/dist/theme/index.d.ts +1 -4
  164. package/dist/theme/index.js +2 -30
  165. package/dist/theme/theme-pack-provider.d.ts +42 -0
  166. package/dist/theme/theme-pack-provider.js +75 -0
  167. package/dist/theme-cli/apply.d.ts +16 -0
  168. package/dist/theme-cli/apply.js +61 -0
  169. package/dist/theme-cli/config-io.d.ts +15 -0
  170. package/dist/theme-cli/config-io.js +51 -0
  171. package/dist/theme-cli/config-rewriter.d.ts +21 -0
  172. package/dist/theme-cli/config-rewriter.js +141 -0
  173. package/dist/theme-cli/config-scanner.d.ts +63 -0
  174. package/dist/theme-cli/config-scanner.js +288 -0
  175. package/dist/theme-cli/index.d.ts +7 -0
  176. package/dist/theme-cli/index.js +38 -0
  177. package/dist/theme-cli/list.d.ts +27 -0
  178. package/dist/theme-cli/list.js +64 -0
  179. package/dist/theme-cli/provenance.d.ts +17 -0
  180. package/dist/theme-cli/provenance.js +35 -0
  181. package/dist/theme-cli/registry.d.ts +14 -0
  182. package/dist/theme-cli/registry.js +13 -0
  183. package/dist/theme-pack-dialog/dialog-state.d.ts +25 -0
  184. package/dist/theme-pack-dialog/dialog-state.js +40 -0
  185. package/dist/theme-pack-dialog/index.d.ts +5 -0
  186. package/dist/theme-pack-dialog/index.js +152 -0
  187. package/dist/theme-pack-dialog/theme-pack-card.d.ts +25 -0
  188. package/dist/theme-pack-dialog/theme-pack-card.js +72 -0
  189. package/dist/theme-pack-switcher/index.d.ts +49 -0
  190. package/dist/theme-pack-switcher/index.js +205 -0
  191. package/dist/theme-pack-switcher/switcher-state.d.ts +56 -0
  192. package/dist/theme-pack-switcher/switcher-state.js +43 -0
  193. package/dist/theme-pack-switcher/theme-pack-sync.d.ts +85 -0
  194. package/dist/theme-pack-switcher/theme-pack-sync.js +121 -0
  195. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-400-latin.woff2 +0 -0
  196. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-700-latin.woff2 +0 -0
  197. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-italic-400-latin.woff2 +0 -0
  198. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegible-italic-700-latin.woff2 +0 -0
  199. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegibleMono-italic-latin.woff2 +0 -0
  200. package/dist/theme-packs/beacon/fonts/AtkinsonHyperlegibleMono-latin.woff2 +0 -0
  201. package/dist/theme-packs/beacon/fonts/OFL.txt +94 -0
  202. package/dist/theme-packs/beacon/meta.json +37 -0
  203. package/dist/theme-packs/beacon/pack.css +442 -0
  204. package/dist/theme-packs/broadsheet/fonts/CourierPrime-400-latin.woff2 +0 -0
  205. package/dist/theme-packs/broadsheet/fonts/CourierPrime-700-latin.woff2 +0 -0
  206. package/dist/theme-packs/broadsheet/fonts/OFL.txt +95 -0
  207. package/dist/theme-packs/broadsheet/fonts/PlayfairDisplay-italic-latin.woff2 +0 -0
  208. package/dist/theme-packs/broadsheet/fonts/PlayfairDisplay-latin.woff2 +0 -0
  209. package/dist/theme-packs/broadsheet/fonts/SourceSerif4-italic-latin.woff2 +0 -0
  210. package/dist/theme-packs/broadsheet/fonts/SourceSerif4-latin.woff2 +0 -0
  211. package/dist/theme-packs/broadsheet/meta.json +38 -0
  212. package/dist/theme-packs/broadsheet/pack.css +448 -0
  213. package/dist/theme-packs/brutalist/fonts/ArchivoBlack-latin.woff2 +0 -0
  214. package/dist/theme-packs/brutalist/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  215. package/dist/theme-packs/brutalist/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  216. package/dist/theme-packs/brutalist/fonts/IBMPlexMono-700-latin.woff2 +0 -0
  217. package/dist/theme-packs/brutalist/fonts/OFL.txt +95 -0
  218. package/dist/theme-packs/brutalist/fonts/SpaceGrotesk-latin.woff2 +0 -0
  219. package/dist/theme-packs/brutalist/meta.json +38 -0
  220. package/dist/theme-packs/brutalist/pack.css +546 -0
  221. package/dist/theme-packs/default/meta.json +37 -0
  222. package/dist/theme-packs/drift/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
  223. package/dist/theme-packs/drift/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  224. package/dist/theme-packs/drift/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
  225. package/dist/theme-packs/drift/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  226. package/dist/theme-packs/drift/fonts/IBMPlexSans-italic-latin.woff2 +0 -0
  227. package/dist/theme-packs/drift/fonts/IBMPlexSans-latin-ext.woff2 +0 -0
  228. package/dist/theme-packs/drift/fonts/IBMPlexSans-latin.woff2 +0 -0
  229. package/dist/theme-packs/drift/fonts/OFL.txt +93 -0
  230. package/dist/theme-packs/drift/meta.json +37 -0
  231. package/dist/theme-packs/drift/pack.css +478 -0
  232. package/dist/theme-packs/fjord/fonts/Inter-latin-ext.woff2 +0 -0
  233. package/dist/theme-packs/fjord/fonts/Inter-latin.woff2 +0 -0
  234. package/dist/theme-packs/fjord/fonts/JetBrainsMono-latin-ext.woff2 +0 -0
  235. package/dist/theme-packs/fjord/fonts/JetBrainsMono-latin.woff2 +0 -0
  236. package/dist/theme-packs/fjord/fonts/OFL.txt +94 -0
  237. package/dist/theme-packs/fjord/meta.json +37 -0
  238. package/dist/theme-packs/fjord/pack.css +375 -0
  239. package/dist/theme-packs/foundry/fonts/Inter-latin-ext.woff2 +0 -0
  240. package/dist/theme-packs/foundry/fonts/Inter-latin.woff2 +0 -0
  241. package/dist/theme-packs/foundry/fonts/OFL.txt +93 -0
  242. package/dist/theme-packs/foundry/meta.json +37 -0
  243. package/dist/theme-packs/foundry/pack.css +202 -0
  244. package/dist/theme-packs/futura-editorial/fonts/Jost-latin.woff2 +0 -0
  245. package/dist/theme-packs/futura-editorial/fonts/NotoSans-italic-latin.woff2 +0 -0
  246. package/dist/theme-packs/futura-editorial/fonts/NotoSans-latin.woff2 +0 -0
  247. package/dist/theme-packs/futura-editorial/fonts/OFL.txt +95 -0
  248. package/dist/theme-packs/futura-editorial/fonts/SpaceMono-400-latin.woff2 +0 -0
  249. package/dist/theme-packs/futura-editorial/fonts/SpaceMono-700-latin.woff2 +0 -0
  250. package/dist/theme-packs/futura-editorial/meta.json +38 -0
  251. package/dist/theme-packs/futura-editorial/pack.css +313 -0
  252. package/dist/theme-packs/hearth/fonts/Fraunces-italic-latin.woff2 +0 -0
  253. package/dist/theme-packs/hearth/fonts/Fraunces-latin.woff2 +0 -0
  254. package/dist/theme-packs/hearth/fonts/Nunito-latin.woff2 +0 -0
  255. package/dist/theme-packs/hearth/fonts/OFL.txt +95 -0
  256. package/dist/theme-packs/hearth/fonts/SplineSansMono-latin.woff2 +0 -0
  257. package/dist/theme-packs/hearth/meta.json +38 -0
  258. package/dist/theme-packs/hearth/pack.css +385 -0
  259. package/dist/theme-packs/hollow/fonts/OFL.txt +94 -0
  260. package/dist/theme-packs/hollow/fonts/SpaceGrotesk-latin.woff2 +0 -0
  261. package/dist/theme-packs/hollow/fonts/SpaceMono-400-italic-latin.woff2 +0 -0
  262. package/dist/theme-packs/hollow/fonts/SpaceMono-400-latin.woff2 +0 -0
  263. package/dist/theme-packs/hollow/fonts/SpaceMono-700-latin.woff2 +0 -0
  264. package/dist/theme-packs/hollow/meta.json +37 -0
  265. package/dist/theme-packs/hollow/pack.css +428 -0
  266. package/dist/theme-packs/ledger/fonts/CrimsonPro-latin-ext-italic.woff2 +0 -0
  267. package/dist/theme-packs/ledger/fonts/CrimsonPro-latin-ext.woff2 +0 -0
  268. package/dist/theme-packs/ledger/fonts/CrimsonPro-latin-italic.woff2 +0 -0
  269. package/dist/theme-packs/ledger/fonts/CrimsonPro-latin.woff2 +0 -0
  270. package/dist/theme-packs/ledger/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
  271. package/dist/theme-packs/ledger/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  272. package/dist/theme-packs/ledger/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
  273. package/dist/theme-packs/ledger/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  274. package/dist/theme-packs/ledger/fonts/OFL.txt +94 -0
  275. package/dist/theme-packs/ledger/meta.json +37 -0
  276. package/dist/theme-packs/ledger/pack.css +463 -0
  277. package/dist/theme-packs/manuscript/fonts/CourierPrime-400-latin-ext.woff2 +0 -0
  278. package/dist/theme-packs/manuscript/fonts/CourierPrime-400-latin.woff2 +0 -0
  279. package/dist/theme-packs/manuscript/fonts/CourierPrime-700-latin-ext.woff2 +0 -0
  280. package/dist/theme-packs/manuscript/fonts/CourierPrime-700-latin.woff2 +0 -0
  281. package/dist/theme-packs/manuscript/fonts/EBGaramond-latin-italic.woff2 +0 -0
  282. package/dist/theme-packs/manuscript/fonts/EBGaramond-latin.woff2 +0 -0
  283. package/dist/theme-packs/manuscript/fonts/OFL.txt +94 -0
  284. package/dist/theme-packs/manuscript/meta.json +37 -0
  285. package/dist/theme-packs/manuscript/pack.css +376 -0
  286. package/dist/theme-packs/matcha/fonts/MPLUS1Code-latin.woff2 +0 -0
  287. package/dist/theme-packs/matcha/fonts/OFL.txt +95 -0
  288. package/dist/theme-packs/matcha/fonts/ShipporiMincho-500-latin.woff2 +0 -0
  289. package/dist/theme-packs/matcha/fonts/ShipporiMincho-700-latin.woff2 +0 -0
  290. package/dist/theme-packs/matcha/fonts/ZenKakuGothicNew-400-latin.woff2 +0 -0
  291. package/dist/theme-packs/matcha/fonts/ZenKakuGothicNew-500-latin.woff2 +0 -0
  292. package/dist/theme-packs/matcha/meta.json +38 -0
  293. package/dist/theme-packs/matcha/pack.css +409 -0
  294. package/dist/theme-packs/nocturne/fonts/CormorantGaramond-italic-latin.woff2 +0 -0
  295. package/dist/theme-packs/nocturne/fonts/CormorantGaramond-latin.woff2 +0 -0
  296. package/dist/theme-packs/nocturne/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  297. package/dist/theme-packs/nocturne/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  298. package/dist/theme-packs/nocturne/fonts/IBMPlexMono-italic-latin.woff2 +0 -0
  299. package/dist/theme-packs/nocturne/fonts/Manrope-latin.woff2 +0 -0
  300. package/dist/theme-packs/nocturne/fonts/OFL.txt +95 -0
  301. package/dist/theme-packs/nocturne/meta.json +38 -0
  302. package/dist/theme-packs/nocturne/pack.css +502 -0
  303. package/dist/theme-packs/observatory/fonts/JosefinSans-latin.woff2 +0 -0
  304. package/dist/theme-packs/observatory/fonts/Jost-italic-latin.woff2 +0 -0
  305. package/dist/theme-packs/observatory/fonts/Jost-latin.woff2 +0 -0
  306. package/dist/theme-packs/observatory/fonts/OFL.txt +95 -0
  307. package/dist/theme-packs/observatory/fonts/SpaceMono-400-latin.woff2 +0 -0
  308. package/dist/theme-packs/observatory/fonts/SpaceMono-700-latin.woff2 +0 -0
  309. package/dist/theme-packs/observatory/fonts/SpaceMono-italic-latin.woff2 +0 -0
  310. package/dist/theme-packs/observatory/meta.json +38 -0
  311. package/dist/theme-packs/observatory/pack.css +728 -0
  312. package/dist/theme-packs/onyx/fonts/CormorantGaramond-italic-latin.woff2 +0 -0
  313. package/dist/theme-packs/onyx/fonts/CormorantGaramond-latin.woff2 +0 -0
  314. package/dist/theme-packs/onyx/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
  315. package/dist/theme-packs/onyx/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  316. package/dist/theme-packs/onyx/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
  317. package/dist/theme-packs/onyx/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  318. package/dist/theme-packs/onyx/fonts/Jost-latin.woff2 +0 -0
  319. package/dist/theme-packs/onyx/fonts/OFL.txt +95 -0
  320. package/dist/theme-packs/onyx/meta.json +38 -0
  321. package/dist/theme-packs/onyx/pack.css +497 -0
  322. package/dist/theme-packs/phosphor/fonts/JetBrainsMono-latin-ext.woff2 +0 -0
  323. package/dist/theme-packs/phosphor/fonts/JetBrainsMono-latin.woff2 +0 -0
  324. package/dist/theme-packs/phosphor/fonts/OFL.txt +94 -0
  325. package/dist/theme-packs/phosphor/fonts/VT323-latin-ext.woff2 +0 -0
  326. package/dist/theme-packs/phosphor/fonts/VT323-latin.woff2 +0 -0
  327. package/dist/theme-packs/phosphor/meta.json +38 -0
  328. package/dist/theme-packs/phosphor/pack.css +493 -0
  329. package/dist/theme-packs/solar/fonts/OFL.txt +94 -0
  330. package/dist/theme-packs/solar/fonts/SourceCodePro-italic-latin.woff2 +0 -0
  331. package/dist/theme-packs/solar/fonts/SourceCodePro-latin.woff2 +0 -0
  332. package/dist/theme-packs/solar/fonts/SourceSans3-italic-latin.woff2 +0 -0
  333. package/dist/theme-packs/solar/fonts/SourceSans3-latin.woff2 +0 -0
  334. package/dist/theme-packs/solar/meta.json +37 -0
  335. package/dist/theme-packs/solar/pack.css +380 -0
  336. package/dist/theme-packs/sumi/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
  337. package/dist/theme-packs/sumi/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  338. package/dist/theme-packs/sumi/fonts/IBMPlexMono-500-latin-ext.woff2 +0 -0
  339. package/dist/theme-packs/sumi/fonts/IBMPlexMono-500-latin.woff2 +0 -0
  340. package/dist/theme-packs/sumi/fonts/OFL.txt +95 -0
  341. package/dist/theme-packs/sumi/fonts/ShipporiMinchoB1-600-latin.woff2 +0 -0
  342. package/dist/theme-packs/sumi/fonts/ShipporiMinchoB1-700-latin.woff2 +0 -0
  343. package/dist/theme-packs/sumi/fonts/ShipporiMinchoB1-800-latin.woff2 +0 -0
  344. package/dist/theme-packs/sumi/fonts/ZenKakuGothicNew-400-latin.woff2 +0 -0
  345. package/dist/theme-packs/sumi/fonts/ZenKakuGothicNew-500-latin.woff2 +0 -0
  346. package/dist/theme-packs/sumi/meta.json +38 -0
  347. package/dist/theme-packs/sumi/pack.css +502 -0
  348. package/dist/theme-packs/swissgrid/fonts/IBMPlexMono-400-latin-ext.woff2 +0 -0
  349. package/dist/theme-packs/swissgrid/fonts/IBMPlexMono-400-latin.woff2 +0 -0
  350. package/dist/theme-packs/swissgrid/fonts/IBMPlexMono-600-latin.woff2 +0 -0
  351. package/dist/theme-packs/swissgrid/fonts/Inter-latin-ext.woff2 +0 -0
  352. package/dist/theme-packs/swissgrid/fonts/Inter-latin.woff2 +0 -0
  353. package/dist/theme-packs/swissgrid/fonts/InterTight-latin.woff2 +0 -0
  354. package/dist/theme-packs/swissgrid/fonts/OFL.txt +95 -0
  355. package/dist/theme-packs/swissgrid/meta.json +38 -0
  356. package/dist/theme-packs/swissgrid/pack.css +518 -0
  357. package/dist/theme-packs/washi/fonts/MPlus1Code-400-latin.woff2 +0 -0
  358. package/dist/theme-packs/washi/fonts/MPlus1Code-500-latin.woff2 +0 -0
  359. package/dist/theme-packs/washi/fonts/OFL.txt +95 -0
  360. package/dist/theme-packs/washi/fonts/ShipporiMincho-500-latin.woff2 +0 -0
  361. package/dist/theme-packs/washi/fonts/ShipporiMincho-600-latin.woff2 +0 -0
  362. package/dist/theme-packs/washi/fonts/ShipporiMincho-700-latin.woff2 +0 -0
  363. package/dist/theme-packs/washi/fonts/ZenKakuGothicNew-400-latin.woff2 +0 -0
  364. package/dist/theme-packs/washi/fonts/ZenKakuGothicNew-500-latin.woff2 +0 -0
  365. package/dist/theme-packs/washi/fonts/ZenKakuGothicNew-700-latin.woff2 +0 -0
  366. package/dist/theme-packs/washi/meta.json +38 -0
  367. package/dist/theme-packs/washi/pack.css +479 -0
  368. package/dist/theme-packs-registry/index.d.ts +5 -0
  369. package/dist/theme-packs-registry/index.js +30 -0
  370. package/dist/theme-packs-registry/load-registry.d.ts +23 -0
  371. package/dist/theme-packs-registry/load-registry.js +64 -0
  372. package/dist/theme-packs-registry/meta-schema.d.ts +70 -0
  373. package/dist/theme-packs-registry/meta-schema.js +38 -0
  374. package/dist/theme-packs-registry/resolve-enabled-packs.d.ts +25 -0
  375. package/dist/theme-packs-registry/resolve-enabled-packs.js +43 -0
  376. package/dist/theme-packs-registry/token-manifest.d.ts +19 -0
  377. package/dist/theme-packs-registry/token-manifest.js +57 -0
  378. package/dist/theme-packs-registry/validator.d.ts +35 -0
  379. package/dist/theme-packs-registry/validator.js +284 -0
  380. package/dist/theme-toggle/color-scheme-sync.d.ts +2 -4
  381. package/dist/theme.css +319 -0
  382. package/dist/versions-page/index.d.ts +2 -2
  383. package/dist/versions-page/index.js +8 -8
  384. package/dist/z-index-defaults/index.d.ts +45 -0
  385. package/dist/z-index-defaults/index.js +34 -0
  386. package/eject/breadcrumb/breadcrumb.tsx +4 -4
  387. package/eject/breadcrumb/find-path.ts +2 -2
  388. package/eject/breadcrumb/index.ts +1 -1
  389. package/eject/breadcrumb/types.ts +0 -6
  390. package/eject/code-group/index.tsx +2 -2
  391. package/eject/doc-history/index.tsx +1 -1
  392. package/eject/doc-pager/index.tsx +1 -1
  393. package/eject/footer/footer.tsx +1 -0
  394. package/eject/header/header.tsx +86 -21
  395. package/eject/header/index.ts +3 -0
  396. package/eject/header/types.ts +39 -1
  397. package/eject/site-tree-nav-island/index.tsx +15 -3
  398. package/eject/site-tree-nav-island/state.ts +9 -0
  399. package/eject/theme-toggle/color-scheme-sync.ts +2 -4
  400. package/package.json +82 -29
  401. package/routes-src/404.tsx +4 -1
  402. package/routes-src/_chrome.tsx +31 -8
  403. package/routes-src/_context.ts +4 -0
  404. package/routes-src/_docs-helpers.ts +9 -29
  405. package/routes-src/_virtual.d.ts +38 -2
  406. package/tsconfig.base.json +29 -0
  407. package/virtual-modules.d.ts +83 -0
  408. package/zfb-config-shim.d.ts +210 -0
  409. package/dist/integrations/llms-txt/index.d.ts +0 -33
  410. package/dist/theme/color-tweak-export-modal.d.ts +0 -16
  411. package/dist/theme/color-tweak-export-modal.js +0 -138
  412. package/dist/theme/design-token-serde.d.ts +0 -183
  413. package/dist/theme/design-token-serde.js +0 -346
  414. package/dist/theme/design-token-types.d.ts +0 -13
  415. package/dist/theme/design-token-types.js +0 -6
  416. package/dist/theme/iframe-bridge.d.ts +0 -42
  417. package/dist/theme/iframe-bridge.js +0 -72
  418. /package/dist/{integrations → plugins/internal}/claude-resources/escape-for-mdx.d.ts +0 -0
  419. /package/dist/{integrations → plugins/internal}/claude-resources/escape-for-mdx.js +0 -0
  420. /package/dist/{integrations → plugins/internal}/claude-resources/generate.d.ts +0 -0
  421. /package/dist/{integrations → plugins/internal}/claude-resources/generate.js +0 -0
  422. /package/dist/{integrations → plugins/internal}/doc-history/pre-build.js +0 -0
  423. /package/dist/{integrations → plugins/internal}/llms-txt/dev-middleware.d.ts +0 -0
  424. /package/dist/{integrations → plugins/internal}/llms-txt/dev-middleware.js +0 -0
  425. /package/dist/{integrations → plugins/internal}/llms-txt/emit.d.ts +0 -0
  426. /package/dist/{integrations → plugins/internal}/llms-txt/emit.js +0 -0
  427. /package/dist/{integrations → plugins/internal}/llms-txt/generate.d.ts +0 -0
  428. /package/dist/{integrations → plugins/internal}/llms-txt/generate.js +0 -0
  429. /package/dist/{integrations → plugins/internal}/llms-txt/index.js +0 -0
  430. /package/dist/{integrations → plugins/internal}/llms-txt/types.js +0 -0
  431. /package/dist/{integrations → plugins/internal}/search-index/build-emitter.d.ts +0 -0
  432. /package/dist/{integrations → plugins/internal}/search-index/build-emitter.js +0 -0
  433. /package/dist/{integrations → plugins/internal}/search-index/collect.d.ts +0 -0
  434. /package/dist/{integrations → plugins/internal}/search-index/dev-middleware.d.ts +0 -0
  435. /package/dist/{integrations → plugins/internal}/search-index/dev-middleware.js +0 -0
  436. /package/dist/{integrations → plugins/internal}/search-index/index.d.ts +0 -0
  437. /package/dist/{integrations → plugins/internal}/search-index/index.js +0 -0
  438. /package/dist/{integrations → plugins/internal}/search-index/types.d.ts +0 -0
  439. /package/dist/{integrations → plugins/internal}/search-index/types.js +0 -0
@@ -0,0 +1,546 @@
1
+ /* ============================================================
2
+ Brutalist — zudo-doc theme pack (ADR docs/adr/theme-packs.md)
3
+
4
+ Raw concrete web: stark black ink on poured-white slab, 4px
5
+ structural borders, zero radius everywhere, hazard-orange tape.
6
+ Archivo Black uppercase display headings with mono section
7
+ counters (01 /) and orange // h3 prefixes over a Space Grotesk
8
+ reading face and IBM Plex Mono signage. The header is an
9
+ inverted slab (black bar on white / white bar on black) with a
10
+ hazard-tape edge, echoed on the shadowless 4px flyout crate.
11
+ The code slab is a black room in BOTH modes — white/gray
12
+ structure, orange for the load-bearing words. Admonitions are
13
+ 4px boxes with stamped full-bleed title bars; links, pager
14
+ cards, and sidebar entries fully invert on hover. Dark mode is
15
+ the same structure at night: near-black concrete, white rebar
16
+ borders, orange kept hot.
17
+
18
+ RADIUS DECISION: zero. Everything is square — the brief is
19
+ structure you can see, and rounded corners lie about it.
20
+
21
+ Every rule below is scoped under html[data-theme-pack="brutalist"]
22
+ — this is what makes the runtime pack swap atomic (Decision 3)
23
+ and lets the validator prove a pack can never leak styles while
24
+ inactive (Decision 6.7). The @font-face blocks are the sole
25
+ exception (at-rules can't be selector-scoped).
26
+
27
+ Prototype-selector adaptations against the REAL DOM (tokens-dump
28
+ §6 + component sources), noted inline where they matter:
29
+ - `.hdr-icon-btn` / `.hdr-search` → the header-right controls
30
+ have no per-control hooks; the inverted slab instead recolors
31
+ every header control via ONE exclusion-listed rule (see the
32
+ header section) that skips the popover surfaces nested inside
33
+ the header (nav-more menu, nav dropdown panels, the version-
34
+ switcher menu, the search <dialog>) — those keep their default
35
+ ink-on-surface colors, which stay readable unchanged.
36
+ - `.sb-group a` → `#desktop-sidebar a`; the default active
37
+ item is ALREADY the inverted bg-fg/text-bg
38
+ stamp, so the pack only bolds it
39
+ (--zdc-nav-active-weight) and squares it.
40
+ - `.sb-group > p` → prototype-mock markup with no stable
41
+ hook; NOT ported.
42
+ - `.crumb-current` → `nav[aria-label="Breadcrumb"] li > span`
43
+ (the current page is the only <span>
44
+ directly inside a breadcrumb <li>).
45
+ - `.doc-pager` → `.zd-content > nav[data-doc-pager] > a`
46
+ (the DocPager nav now carries a stable
47
+ data-doc-pager hook, #2876); label =
48
+ `> a div`, title = `> a p`.
49
+ - `.toc-active` → the real TOC active entry already carries
50
+ the inverted `bg-fg text-bg` fill
51
+ (toc.tsx aria-current) — the pack only
52
+ bolds it.
53
+ - `footer[data-footer]` → ships literally now — the real footer
54
+ carries the stable data-footer hook (#2876);
55
+ the mock's `.footer-copy` has no hook, so
56
+ only the 4px signage rule is ported.
57
+ - `.tp-flyout` → `div[data-switcher-card]`; its title is
58
+ `p[aria-live="polite"]`. The launcher
59
+ button carries a data-switcher-launcher
60
+ hook too, but its styling and the other
61
+ control buttons are intentionally NOT
62
+ ported.
63
+ - the prototype's `--bru-tape` / `--bru-hot` helper properties are
64
+ not part of the token manifest; their values are inlined at each
65
+ use site (tape = repeating -45deg #ff5c00/fg 10px stripes; hot =
66
+ light-dark(#ff5c00, #ff6a1f)).
67
+ - `--radius` / `--radius-lg` are not pack-settable tokens; the
68
+ zero-radius decision is carried by --zdc-admonition-radius /
69
+ --zdc-card-radius plus explicit border-radius: 0 on the
70
+ remaining square-cornered hooks.
71
+ - light-mode --zd-warning runs a step darker than the prototype
72
+ (#d14b00 → #c24400) to clear WCAG AA (≥4.5:1) as text on the
73
+ white slab.
74
+ ============================================================ */
75
+
76
+ /* ---- Archivo Black — the display face: h1/h2, logo, flyout
77
+ title. Single 400 weight (that IS the family). Latin subset
78
+ only (all three families): a stray latin-ext or CJK glyph
79
+ falls through to the stack's system face. ---- */
80
+
81
+ @font-face {
82
+ font-family: "Archivo Black";
83
+ font-style: normal;
84
+ font-weight: 400;
85
+ font-display: swap;
86
+ src: url("./fonts/ArchivoBlack-latin.woff2") format("woff2");
87
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
88
+ U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
89
+ U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
90
+ }
91
+
92
+ /* ---- Space Grotesk — the reading face. Variable 300–700 (bold
93
+ prose emphasis and nav weights ride the same file). ---- */
94
+
95
+ @font-face {
96
+ font-family: "Space Grotesk";
97
+ font-style: normal;
98
+ font-weight: 300 700;
99
+ font-display: swap;
100
+ src: url("./fonts/SpaceGrotesk-latin.woff2") format("woff2");
101
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
102
+ U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
103
+ U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
104
+ }
105
+
106
+ /* ---- IBM Plex Mono — code + signage (section counters, table
107
+ headers, admonition stamps). Static 400/500/700 — the
108
+ stamped labels want a TRUE bold, not a synthesized one. ---- */
109
+
110
+ @font-face {
111
+ font-family: "IBM Plex Mono";
112
+ font-style: normal;
113
+ font-weight: 400;
114
+ font-display: swap;
115
+ src: url("./fonts/IBMPlexMono-400-latin.woff2") format("woff2");
116
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
117
+ U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
118
+ U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
119
+ }
120
+
121
+ @font-face {
122
+ font-family: "IBM Plex Mono";
123
+ font-style: normal;
124
+ font-weight: 500;
125
+ font-display: swap;
126
+ src: url("./fonts/IBMPlexMono-500-latin.woff2") format("woff2");
127
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
128
+ U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
129
+ U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
130
+ }
131
+
132
+ @font-face {
133
+ font-family: "IBM Plex Mono";
134
+ font-style: normal;
135
+ font-weight: 700;
136
+ font-display: swap;
137
+ src: url("./fonts/IBMPlexMono-700-latin.woff2") format("woff2");
138
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
139
+ U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
140
+ U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
141
+ }
142
+
143
+ html[data-theme-pack="brutalist"] {
144
+ /* Tier-2 semantic roles — poured white slab, black ink, hazard
145
+ orange. Dark: the same structure at night. Both modes always
146
+ via light-dark(). */
147
+ --zd-bg: light-dark(#ffffff, #0d0d0d);
148
+ --zd-fg: light-dark(#000000, #f5f5f5);
149
+ --zd-selection-bg: light-dark(#ff5c00, #ff6a1f);
150
+ --zd-selection-fg: light-dark(#000000, #000000);
151
+ --zd-surface: light-dark(#ffffff, #0d0d0d);
152
+ --zd-muted: light-dark(#444444, #b0b0b0);
153
+ --zd-accent: light-dark(#c2410c, #ff6a1f);
154
+ --zd-accent-hover: light-dark(#9a3412, #ff8a4d);
155
+ --zd-code-bg: light-dark(#0a0a0a, #000000);
156
+ --zd-code-fg: light-dark(#f5f5f5, #f0f0f0);
157
+ --zd-success: light-dark(#000000, #f5f5f5);
158
+ --zd-danger: light-dark(#c2410c, #ff6a1f);
159
+ --zd-warning: light-dark(#c24400, #ff7a2e);
160
+ --zd-info: light-dark(#000000, #f5f5f5);
161
+
162
+ /* syntax — the code slab is a black room in BOTH modes: white/
163
+ gray structure, orange for the load-bearing words. All 9 roles;
164
+ inserted/deleted (absent from the prototype) read as restrained
165
+ mint/salmon so diffs stay legible on the black room without
166
+ breaking the mono+orange discipline. */
167
+ --zd-syntax-comment: light-dark(#8f8f8f, #878787);
168
+ --zd-syntax-string: light-dark(#ffb38a, #ffb38a);
169
+ --zd-syntax-number: light-dark(#ff9d5c, #ff9d5c);
170
+ --zd-syntax-keyword: light-dark(#ff6a1f, #ff7a2e);
171
+ --zd-syntax-callable: light-dark(#ffffff, #ffffff);
172
+ --zd-syntax-type: light-dark(#d4d4d4, #d4d4d4);
173
+ --zd-syntax-name: light-dark(#f0f0f0, #ececec);
174
+ --zd-syntax-inserted: light-dark(#9be9a8, #9be9a8);
175
+ --zd-syntax-deleted: light-dark(#ff8a8a, #ff8a8a);
176
+
177
+ /* fonts — Space Grotesk reading face, IBM Plex Mono signage,
178
+ Archivo Black display caps. */
179
+ --font-sans: "Space Grotesk", system-ui, sans-serif;
180
+ --font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
181
+ --font-display: "Archivo Black", "Space Grotesk", system-ui, sans-serif;
182
+
183
+ /* Tier-3 component seams — poured-concrete caps, square slabs,
184
+ the stock inverted nav stamp kept and bolded. */
185
+ --zdc-doc-title-font: var(--font-display);
186
+ --zdc-doc-title-weight: 400;
187
+ --zdc-doc-title-tracking: 0.01em;
188
+ --zdc-doc-h2-font: var(--font-display);
189
+ --zdc-doc-h2-weight: 400;
190
+ --zdc-doc-h2-tracking: 0.02em;
191
+ --zdc-doc-link-decoration: underline;
192
+ --zdc-admonition-radius: 0;
193
+ --zdc-admonition-border-width: 4px;
194
+ --zdc-card-radius: 0;
195
+ --zdc-nav-active-indicator-color: var(--zd-fg);
196
+ --zdc-nav-active-weight: 700;
197
+ }
198
+
199
+ /* ---- Brutalist extras ---- */
200
+
201
+ /* honest focus — a 3px hazard outline on every interactive element */
202
+ html[data-theme-pack="brutalist"] a:focus-visible,
203
+ html[data-theme-pack="brutalist"] button:focus-visible {
204
+ outline: 3px solid var(--zd-accent);
205
+ outline-offset: 2px;
206
+ }
207
+
208
+ /* header: inverted slab (black bar on white / white bar on black)
209
+ with a hazard-tape edge below it */
210
+ html[data-theme-pack="brutalist"] header[data-header] {
211
+ background-color: var(--zd-fg);
212
+ border-bottom-color: transparent;
213
+ }
214
+ html[data-theme-pack="brutalist"] header[data-header]::after {
215
+ content: "";
216
+ position: absolute;
217
+ left: 0;
218
+ right: 0;
219
+ bottom: -6px;
220
+ height: 6px;
221
+ background: repeating-linear-gradient(
222
+ -45deg,
223
+ #ff5c00 0 10px,
224
+ var(--zd-fg) 10px 20px
225
+ );
226
+ pointer-events: none;
227
+ }
228
+
229
+ /* every control sitting directly on the slab flips to bg-colored
230
+ ink. The :not() exclusion skips the popover surfaces nested
231
+ inside the header (nav-more menu, nav dropdown panels, the
232
+ version-switcher menu, the search <dialog>) — those keep their
233
+ default ink-on-surface colors. */
234
+ html[data-theme-pack="brutalist"] header[data-header] a:not([data-nav-more-menu] *):not([data-nav-item-dropdown] div *):not([data-version-switcher] ul *):not(dialog *),
235
+ html[data-theme-pack="brutalist"] header[data-header] button:not([data-nav-more-menu] *):not([data-nav-item-dropdown] div *):not([data-version-switcher] ul *):not(dialog *),
236
+ html[data-theme-pack="brutalist"] header[data-header] span:not([data-nav-more-menu] *):not([data-nav-item-dropdown] div *):not([data-version-switcher] ul *):not(dialog *),
237
+ html[data-theme-pack="brutalist"] header[data-header] svg:not([data-nav-more-menu] *):not([data-nav-item-dropdown] div *):not([data-version-switcher] ul *):not(dialog *) {
238
+ color: color-mix(in srgb, var(--zd-bg) 80%, var(--zd-fg));
239
+ }
240
+ html[data-theme-pack="brutalist"] header[data-header] a:not([data-nav-more-menu] *):not([data-nav-item-dropdown] div *):not([data-version-switcher] ul *):not(dialog *):hover,
241
+ html[data-theme-pack="brutalist"] header[data-header] button:not([data-nav-more-menu] *):not([data-nav-item-dropdown] div *):not([data-version-switcher] ul *):not(dialog *):hover,
242
+ html[data-theme-pack="brutalist"] header[data-header] a:not([data-nav-more-menu] *):not([data-nav-item-dropdown] div *):not([data-version-switcher] ul *):not(dialog *):hover svg,
243
+ html[data-theme-pack="brutalist"] header[data-header] button:not([data-nav-more-menu] *):not([data-nav-item-dropdown] div *):not([data-version-switcher] ul *):not(dialog *):hover svg {
244
+ color: var(--zd-bg);
245
+ }
246
+
247
+ /* the inverted slab needs its own focus-ring color: the page-level
248
+ hazard outline fails 3:1 against the dark-mode header (a light
249
+ surface there), so pick per-mode oranges that clear it on the slab */
250
+ html[data-theme-pack="brutalist"] header[data-header] a:focus-visible,
251
+ html[data-theme-pack="brutalist"] header[data-header] button:focus-visible {
252
+ outline-color: light-dark(#ff6a1f, #c2410c);
253
+ }
254
+
255
+ html[data-theme-pack="brutalist"] [data-header-logo] {
256
+ color: var(--zd-bg);
257
+ font-family: var(--font-display);
258
+ font-weight: 400;
259
+ font-size: 1.02rem;
260
+ text-transform: uppercase;
261
+ letter-spacing: 0.04em;
262
+ }
263
+ html[data-theme-pack="brutalist"] header[data-header] [data-header-logo]:hover {
264
+ color: var(--zd-bg);
265
+ }
266
+
267
+ /* nav: mono signage; the current page is a reversed stamp (white
268
+ chip, black ink) punched into the slab */
269
+ html[data-theme-pack="brutalist"] header[data-header] a[data-nav-item],
270
+ html[data-theme-pack="brutalist"] header[data-header] [data-nav-item] > a,
271
+ html[data-theme-pack="brutalist"] header[data-header] [data-nav-more-toggle] {
272
+ font-family: var(--font-mono);
273
+ font-weight: 500;
274
+ font-size: 0.72rem;
275
+ text-transform: uppercase;
276
+ letter-spacing: 0.08em;
277
+ }
278
+ html[data-theme-pack="brutalist"] header[data-header] a[data-nav-item]:hover,
279
+ html[data-theme-pack="brutalist"] header[data-header] [data-nav-item] > a:hover {
280
+ text-decoration-thickness: 2px;
281
+ text-underline-offset: 4px;
282
+ }
283
+ html[data-theme-pack="brutalist"] header[data-header] a[aria-current="page"],
284
+ html[data-theme-pack="brutalist"] header[data-header] a[aria-current="page"]:hover {
285
+ background-color: var(--zd-bg);
286
+ color: var(--zd-fg);
287
+ }
288
+ html[data-theme-pack="brutalist"] header[data-header] a[aria-current="page"] svg {
289
+ color: var(--zd-fg);
290
+ }
291
+
292
+ /* the language switcher's current-locale marker sits directly on
293
+ the slab as a bare span — full bg-colored ink, not the 80% mix */
294
+ html[data-theme-pack="brutalist"]
295
+ header[data-header]
296
+ [data-header-right]
297
+ span[aria-current="true"] {
298
+ color: var(--zd-bg);
299
+ }
300
+
301
+ /* the version-switcher trigger: a stamped outline chip on the slab */
302
+ html[data-theme-pack="brutalist"] header[data-header] [data-version-switcher] > button {
303
+ border-color: color-mix(in srgb, var(--zd-bg) 55%, var(--zd-fg));
304
+ border-radius: 0;
305
+ }
306
+
307
+ /* popover crates hanging off the slab: square, 2px ink frame, no
308
+ shadow (their inner ink-on-surface colors are untouched) */
309
+ html[data-theme-pack="brutalist"] header[data-header] [data-nav-more-menu],
310
+ html[data-theme-pack="brutalist"] header[data-header] [data-version-switcher] ul,
311
+ html[data-theme-pack="brutalist"] header[data-header] [data-nav-item-dropdown] div > div {
312
+ border: 2px solid var(--zd-fg);
313
+ border-radius: 0;
314
+ box-shadow: none;
315
+ }
316
+
317
+ /* sidebar: a 4px structural wall, hover inverts like a stamp */
318
+ html[data-theme-pack="brutalist"] #desktop-sidebar {
319
+ border-right: 4px solid var(--zd-fg);
320
+ }
321
+ html[data-theme-pack="brutalist"] #desktop-sidebar a {
322
+ border-radius: 0;
323
+ }
324
+ html[data-theme-pack="brutalist"] #desktop-sidebar a:hover {
325
+ background-color: var(--zd-fg);
326
+ color: var(--zd-bg);
327
+ text-decoration: none;
328
+ }
329
+
330
+ /* breadcrumb: wayfinding signage (the current page is the only
331
+ <span> directly inside a breadcrumb <li>) */
332
+ html[data-theme-pack="brutalist"] main nav[aria-label="Breadcrumb"] {
333
+ font-family: var(--font-mono);
334
+ font-size: 0.72rem;
335
+ text-transform: uppercase;
336
+ letter-spacing: 0.06em;
337
+ }
338
+ html[data-theme-pack="brutalist"] main nav[aria-label="Breadcrumb"] li > span {
339
+ font-weight: 700;
340
+ }
341
+
342
+ /* headings: poured-concrete caps with visible section numbering */
343
+ html[data-theme-pack="brutalist"] .zd-content {
344
+ counter-reset: bru-sec;
345
+ }
346
+ html[data-theme-pack="brutalist"] .zd-content h1 {
347
+ text-transform: uppercase;
348
+ line-height: 1.08;
349
+ border-bottom: 8px solid var(--zd-fg);
350
+ padding-bottom: 0.4rem;
351
+ }
352
+ html[data-theme-pack="brutalist"] .zd-content h2 {
353
+ text-transform: uppercase;
354
+ border-image: none !important;
355
+ border-top: 4px solid var(--zd-fg);
356
+ counter-increment: bru-sec;
357
+ }
358
+ html[data-theme-pack="brutalist"] .zd-content h2::before {
359
+ content: counter(bru-sec, decimal-leading-zero) " / ";
360
+ font-family: var(--font-mono);
361
+ font-size: 0.78em;
362
+ color: var(--zd-accent);
363
+ letter-spacing: 0;
364
+ }
365
+ html[data-theme-pack="brutalist"] .zd-content h3 {
366
+ text-transform: uppercase;
367
+ letter-spacing: 0.04em;
368
+ }
369
+ html[data-theme-pack="brutalist"] .zd-content h3::before {
370
+ content: "// ";
371
+ font-family: var(--font-mono);
372
+ color: var(--zd-accent);
373
+ }
374
+
375
+ /* prose links: thick ink underlines; hover paints over in hazard
376
+ orange. Scoped to prose containers so pager cards, tag pills, and
377
+ heading anchors keep their own hover treatments. The li branches
378
+ exclude [aria-label] anchors — TagNav's all-tags chips render as
379
+ li > a[aria-label] and keep their clipped-chip hover. */
380
+ html[data-theme-pack="brutalist"] .zd-content p a,
381
+ html[data-theme-pack="brutalist"] .zd-content li a:not([aria-label]),
382
+ html[data-theme-pack="brutalist"] .zd-content td a,
383
+ html[data-theme-pack="brutalist"] .zd-content blockquote a {
384
+ text-decoration-thickness: 2px;
385
+ text-underline-offset: 3px;
386
+ font-weight: 500;
387
+ }
388
+ html[data-theme-pack="brutalist"] .zd-content p a:hover,
389
+ html[data-theme-pack="brutalist"] .zd-content li a:not([aria-label]):hover,
390
+ html[data-theme-pack="brutalist"] .zd-content td a:hover,
391
+ html[data-theme-pack="brutalist"] .zd-content blockquote a:hover {
392
+ background-color: var(--zd-accent);
393
+ color: var(--zd-bg);
394
+ text-decoration-color: var(--zd-bg);
395
+ }
396
+
397
+ /* prose furniture */
398
+ html[data-theme-pack="brutalist"] .zd-content blockquote {
399
+ border-left: 4px solid var(--zd-fg);
400
+ color: var(--zd-fg);
401
+ font-weight: 500;
402
+ background-color: color-mix(in srgb, var(--zd-fg) 6%, var(--zd-bg));
403
+ padding: 0.8rem 1.1rem;
404
+ }
405
+ html[data-theme-pack="brutalist"] .zd-content hr {
406
+ border-top: 4px solid var(--zd-fg);
407
+ }
408
+ html[data-theme-pack="brutalist"] .zd-content code:not(pre code) {
409
+ border: 1px solid color-mix(in srgb, var(--zd-fg) 35%, transparent);
410
+ border-radius: 0;
411
+ }
412
+
413
+ /* code slab: black room, 4px frame (white rebar in dark mode) */
414
+ html[data-theme-pack="brutalist"] pre.hi-root {
415
+ border: 4px solid var(--zd-fg);
416
+ border-radius: 0;
417
+ }
418
+
419
+ /* tables: full 2px grid, inverted header row */
420
+ html[data-theme-pack="brutalist"] .zd-content th,
421
+ html[data-theme-pack="brutalist"] .zd-content td {
422
+ border: 2px solid var(--zd-fg);
423
+ }
424
+ html[data-theme-pack="brutalist"] .zd-content th {
425
+ background-color: var(--zd-fg);
426
+ color: var(--zd-bg);
427
+ font-family: var(--font-mono);
428
+ font-weight: 700;
429
+ font-size: 0.74rem;
430
+ text-transform: uppercase;
431
+ letter-spacing: 0.08em;
432
+ }
433
+ /* links inside the inverted header row carry their own accent color
434
+ (ContentLink) — repaint them bg-colored so they clear 4.5:1 */
435
+ html[data-theme-pack="brutalist"] .zd-content th a {
436
+ color: var(--zd-bg);
437
+ }
438
+
439
+ /* admonitions: 4px boxes with stamped full-bleed title bars. The
440
+ title bar's negative margins pull it flush against the box border
441
+ (the box's own padding is vsp-md/hsp-lg, content.css). */
442
+ html[data-theme-pack="brutalist"] [data-admonition] {
443
+ border: 4px solid var(--zd-fg);
444
+ background-color: var(--zd-bg);
445
+ }
446
+ html[data-theme-pack="brutalist"] [data-admonition] .admonition-title {
447
+ margin: calc(-1 * var(--spacing-vsp-md, 1rem)) calc(-1 * var(--spacing-hsp-lg, 1rem))
448
+ 0.8rem;
449
+ padding: 0.45rem 1rem 0.4rem;
450
+ background-color: var(--zd-fg);
451
+ color: var(--zd-bg);
452
+ font-family: var(--font-mono);
453
+ font-weight: 700;
454
+ font-size: 0.76rem;
455
+ text-transform: uppercase;
456
+ letter-spacing: 0.14em;
457
+ }
458
+ html[data-theme-pack="brutalist"] [data-admonition="note"] .admonition-title::before {
459
+ content: "■ ";
460
+ }
461
+ html[data-theme-pack="brutalist"] [data-admonition="tip"] .admonition-title::before {
462
+ content: "→ ";
463
+ }
464
+ html[data-theme-pack="brutalist"] [data-admonition="warning"] {
465
+ border-color: light-dark(#ff5c00, #ff6a1f);
466
+ }
467
+ html[data-theme-pack="brutalist"] [data-admonition="warning"] .admonition-title {
468
+ background-color: light-dark(#ff5c00, #ff6a1f);
469
+ color: #000000;
470
+ }
471
+ html[data-theme-pack="brutalist"] [data-admonition="warning"] .admonition-title::before {
472
+ content: "▲ ";
473
+ }
474
+
475
+ /* pager: slab cards, full inversion on hover. The DocPager nav now
476
+ carries a stable data-doc-pager hook (#2876). */
477
+ html[data-theme-pack="brutalist"] .zd-content > nav[data-doc-pager] > a {
478
+ border: 4px solid var(--zd-fg);
479
+ border-radius: 0;
480
+ }
481
+ html[data-theme-pack="brutalist"]
482
+ .zd-content
483
+ > nav[data-doc-pager]
484
+ > a:hover {
485
+ border-color: var(--zd-fg);
486
+ background-color: var(--zd-fg);
487
+ }
488
+ html[data-theme-pack="brutalist"] .zd-content > nav[data-doc-pager] > a div {
489
+ font-family: var(--font-mono);
490
+ font-size: 0.66rem;
491
+ text-transform: uppercase;
492
+ letter-spacing: 0.1em;
493
+ }
494
+ html[data-theme-pack="brutalist"] .zd-content > nav[data-doc-pager] > a p {
495
+ font-weight: 700;
496
+ }
497
+ html[data-theme-pack="brutalist"] .zd-content > nav[data-doc-pager] > a:hover div,
498
+ html[data-theme-pack="brutalist"] .zd-content > nav[data-doc-pager] > a:hover p,
499
+ html[data-theme-pack="brutalist"] .zd-content > nav[data-doc-pager] > a:hover svg {
500
+ color: var(--zd-bg);
501
+ }
502
+
503
+ /* TOC: a 2px plumb line; the active entry already carries the
504
+ inverted bg-fg/text-bg stamp — just bold it */
505
+ html[data-theme-pack="brutalist"] nav[data-zd-toc] ul {
506
+ border-left: 2px solid var(--zd-fg);
507
+ }
508
+ html[data-theme-pack="brutalist"] nav[data-zd-toc] a[aria-current="true"] {
509
+ font-weight: 700;
510
+ }
511
+
512
+ /* footer: signage strip (the real footer now carries the stable
513
+ data-footer hook, #2876) */
514
+ html[data-theme-pack="brutalist"] footer[data-footer] {
515
+ border-top: 4px solid var(--zd-fg);
516
+ background-color: var(--zd-bg);
517
+ }
518
+
519
+ /* theme-pack flyout: a shadowless 4px crate with a hazard-tape lid
520
+ (the launcher button and control buttons keep their styling
521
+ intentionally NOT ported) */
522
+ html[data-theme-pack="brutalist"] div[data-switcher-card] {
523
+ border: 4px solid var(--zd-fg);
524
+ border-radius: 0;
525
+ box-shadow: none;
526
+ }
527
+ html[data-theme-pack="brutalist"]
528
+ div[data-switcher-card]::before {
529
+ content: "";
530
+ height: 6px;
531
+ margin: calc(-1 * var(--spacing-hsp-lg, 1rem)) calc(-1 * var(--spacing-hsp-lg, 1rem)) 0;
532
+ background: repeating-linear-gradient(
533
+ -45deg,
534
+ #ff5c00 0 10px,
535
+ var(--zd-fg) 10px 20px
536
+ );
537
+ }
538
+ html[data-theme-pack="brutalist"]
539
+ div[data-switcher-card]
540
+ p[aria-live="polite"] {
541
+ font-family: var(--font-display);
542
+ font-weight: 400;
543
+ font-size: 1rem;
544
+ text-transform: uppercase;
545
+ letter-spacing: 0.03em;
546
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "slug": "default",
4
+ "name": "Default",
5
+ "description": "The stock zudo-doc look. No pack stylesheet is loaded — your project's configured color scheme and fonts render unchanged.",
6
+ "mode": "dark",
7
+ "version": "1.0.0",
8
+ "fonts": {
9
+ "sans": "System",
10
+ "mono": "System",
11
+ "loaded": []
12
+ },
13
+ "preview": {
14
+ "light": {
15
+ "bg": "oklch(0.965 0.004 65)",
16
+ "fg": "oklch(0.185 0.005 65)",
17
+ "accent": "oklch(0.470 0.120 56)",
18
+ "syntax": {
19
+ "keyword": "oklch(0.470 0.120 56)",
20
+ "string": "oklch(0.470 0.140 145)",
21
+ "comment": "oklch(0.480 0.008 65)",
22
+ "callable": "oklch(0.485 0.122 245)"
23
+ }
24
+ },
25
+ "dark": {
26
+ "bg": "oklch(0.185 0.005 65)",
27
+ "fg": "oklch(0.965 0.004 65)",
28
+ "accent": "oklch(0.700 0.158 62)",
29
+ "syntax": {
30
+ "keyword": "oklch(0.700 0.158 62)",
31
+ "string": "oklch(0.680 0.145 145)",
32
+ "comment": "oklch(0.705 0.008 65)",
33
+ "callable": "oklch(0.680 0.130 245)"
34
+ }
35
+ }
36
+ }
37
+ }