@ciderpress/ui 1.0.0-rc.1

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 (428) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +23 -0
  3. package/dist/0~142.js +2 -0
  4. package/dist/0~164.js +2 -0
  5. package/dist/0~2.js +2 -0
  6. package/dist/0~225.js +2 -0
  7. package/dist/0~288.js +2 -0
  8. package/dist/0~299.js +2 -0
  9. package/dist/0~3.js +2 -0
  10. package/dist/0~301.js +2 -0
  11. package/dist/0~311.js +2 -0
  12. package/dist/0~326.js +2 -0
  13. package/dist/0~40.js +2 -0
  14. package/dist/0~43.js +2 -0
  15. package/dist/0~433.js +2 -0
  16. package/dist/0~453.js +2 -0
  17. package/dist/0~457.js +2 -0
  18. package/dist/0~497.js +2 -0
  19. package/dist/0~511.js +2 -0
  20. package/dist/0~603.js +2 -0
  21. package/dist/0~616.js +2 -0
  22. package/dist/0~659.js +2 -0
  23. package/dist/0~670.js +2 -0
  24. package/dist/0~687.js +2 -0
  25. package/dist/0~706.js +2 -0
  26. package/dist/0~729.js +2 -0
  27. package/dist/0~768.js +2 -0
  28. package/dist/0~819.js +2 -0
  29. package/dist/0~830.js +2 -0
  30. package/dist/0~854.js +2 -0
  31. package/dist/0~863.js +2 -0
  32. package/dist/0~879.js +2 -0
  33. package/dist/0~96.js +2 -0
  34. package/dist/0~97.js +2 -0
  35. package/dist/components/FileTree/FileTree.css +90 -0
  36. package/dist/components/FileTree/FileTree.d.ts +7 -0
  37. package/dist/components/FileTree/FileTree.js +531 -0
  38. package/dist/components/FileTree/FileTreeItem.d.ts +8 -0
  39. package/dist/components/FileTree/RemoteSvgIcon.d.ts +11 -0
  40. package/dist/components/FileTree/index.d.ts +4 -0
  41. package/dist/components/folder-icons.d.ts +32 -0
  42. package/dist/components/languages.d.ts +7 -0
  43. package/dist/components/tree-parser/tree-parser.d.ts +12 -0
  44. package/dist/components/tree-parser/types.d.ts +11 -0
  45. package/dist/head/css/loader-apple.css +1 -0
  46. package/dist/head/css/loader-backdrop.css +1 -0
  47. package/dist/head/css/loader-dots.css +1 -0
  48. package/dist/head/css/themes/amber.css +1 -0
  49. package/dist/head/css/themes/arcade.css +1 -0
  50. package/dist/head/css/themes/grannysmith.css +1 -0
  51. package/dist/head/css/themes/honeycrisp.css +1 -0
  52. package/dist/head/css/themes/midnight.css +1 -0
  53. package/dist/head/css/themes/mulled.css +1 -0
  54. package/dist/head/js/loader-dots.js +1 -0
  55. package/dist/head/js/vscode-nav.js +1 -0
  56. package/dist/index.d.ts +43 -0
  57. package/dist/index.mjs +40 -0
  58. package/dist/node.d.ts +81 -0
  59. package/dist/node.mjs +17762 -0
  60. package/dist/plugins/mermaid/MermaidRenderer.tsx +480 -0
  61. package/dist/plugins/mermaid/mermaid.css +199 -0
  62. package/dist/theme/components/announcement/announcement-bar.css +103 -0
  63. package/dist/theme/components/announcement/announcement-bar.tsx +173 -0
  64. package/dist/theme/components/ask-ai/ask-ai-button.css +52 -0
  65. package/dist/theme/components/ask-ai/ask-ai-button.tsx +56 -0
  66. package/dist/theme/components/content-footer/content-footer-portal.tsx +70 -0
  67. package/dist/theme/components/content-footer/feedback.css +47 -0
  68. package/dist/theme/components/content-footer/feedback.tsx +96 -0
  69. package/dist/theme/components/content-footer/meta-actions.css +25 -0
  70. package/dist/theme/components/content-footer/meta-actions.tsx +57 -0
  71. package/dist/theme/components/content-footer/page-pager.css +61 -0
  72. package/dist/theme/components/content-footer/page-pager.tsx +110 -0
  73. package/dist/theme/components/edit-source-button.tsx +97 -0
  74. package/dist/theme/components/footer/site-footer.css +179 -0
  75. package/dist/theme/components/footer/site-footer.tsx +115 -0
  76. package/dist/theme/components/home/cta.css +67 -0
  77. package/dist/theme/components/home/cta.tsx +77 -0
  78. package/dist/theme/components/home/feature-card.css +52 -0
  79. package/dist/theme/components/home/feature-card.tsx +131 -0
  80. package/dist/theme/components/home/feature.tsx +79 -0
  81. package/dist/theme/components/home/hero-demo.css +66 -0
  82. package/dist/theme/components/home/hero-demo.tsx +46 -0
  83. package/dist/theme/components/home/hero.css +96 -0
  84. package/dist/theme/components/home/hero.tsx +111 -0
  85. package/dist/theme/components/home/layout.tsx +183 -0
  86. package/dist/theme/components/home/page-rail.css +21 -0
  87. package/dist/theme/components/home/page-rail.tsx +19 -0
  88. package/dist/theme/components/home/split.css +148 -0
  89. package/dist/theme/components/home/split.tsx +120 -0
  90. package/dist/theme/components/home/trust-strip.css +33 -0
  91. package/dist/theme/components/home/trust-strip.tsx +43 -0
  92. package/dist/theme/components/home/workspaces.tsx +71 -0
  93. package/dist/theme/components/nav/branch-tag.css +54 -0
  94. package/dist/theme/components/nav/branch-tag.tsx +101 -0
  95. package/dist/theme/components/nav/ciderpress-doc-layout.tsx +247 -0
  96. package/dist/theme/components/nav/ciderpress-docs-bar.css +505 -0
  97. package/dist/theme/components/nav/ciderpress-docs-bar.tsx +426 -0
  98. package/dist/theme/components/nav/ciderpress-header.css +172 -0
  99. package/dist/theme/components/nav/ciderpress-header.tsx +113 -0
  100. package/dist/theme/components/nav/ciderpress-layout-context.tsx +49 -0
  101. package/dist/theme/components/nav/ciderpress-nav-hamburger.css +193 -0
  102. package/dist/theme/components/nav/ciderpress-nav-hamburger.tsx +112 -0
  103. package/dist/theme/components/nav/ciderpress-nav-menu.css +130 -0
  104. package/dist/theme/components/nav/ciderpress-nav-menu.tsx +372 -0
  105. package/dist/theme/components/nav/ciderpress-nav-search.css +73 -0
  106. package/dist/theme/components/nav/ciderpress-nav-search.tsx +55 -0
  107. package/dist/theme/components/nav/ciderpress-nav-social-links.css +35 -0
  108. package/dist/theme/components/nav/ciderpress-nav-social-links.tsx +87 -0
  109. package/dist/theme/components/nav/floating-branch-indicator.css +106 -0
  110. package/dist/theme/components/nav/floating-branch-indicator.tsx +109 -0
  111. package/dist/theme/components/nav/layout.tsx +268 -0
  112. package/dist/theme/components/nav/mobile-nav-cta.tsx +79 -0
  113. package/dist/theme/components/nav/nav-divider.css +15 -0
  114. package/dist/theme/components/nav/nav-divider.tsx +19 -0
  115. package/dist/theme/components/nav/nav-logo.css +42 -0
  116. package/dist/theme/components/nav/nav-logo.tsx +262 -0
  117. package/dist/theme/components/nav/theme-switcher.css +92 -0
  118. package/dist/theme/components/nav/theme-switcher.tsx +298 -0
  119. package/dist/theme/components/nav/topbar-cta.css +45 -0
  120. package/dist/theme/components/nav/topbar-cta.tsx +39 -0
  121. package/dist/theme/components/nav/variant-toggle.css +70 -0
  122. package/dist/theme/components/nav/variant-toggle.tsx +83 -0
  123. package/dist/theme/components/nav/version-chip.css +31 -0
  124. package/dist/theme/components/nav/version-chip.tsx +45 -0
  125. package/dist/theme/components/nav/vscode-tag.css +32 -0
  126. package/dist/theme/components/nav/vscode-tag.tsx +20 -0
  127. package/dist/theme/components/openapi/code-sample.tsx +341 -0
  128. package/dist/theme/components/openapi/copy-markdown-button.tsx +41 -0
  129. package/dist/theme/components/openapi/icons.tsx +45 -0
  130. package/dist/theme/components/openapi/index.ts +6 -0
  131. package/dist/theme/components/openapi/method-badge.tsx +24 -0
  132. package/dist/theme/components/openapi/openapi.css +665 -0
  133. package/dist/theme/components/openapi/operation.tsx +200 -0
  134. package/dist/theme/components/openapi/overview.tsx +207 -0
  135. package/dist/theme/components/openapi/parameters-table.tsx +149 -0
  136. package/dist/theme/components/openapi/request-body.tsx +90 -0
  137. package/dist/theme/components/openapi/response-list.tsx +112 -0
  138. package/dist/theme/components/openapi/schema-viewer.tsx +277 -0
  139. package/dist/theme/components/openapi/security-badges.tsx +63 -0
  140. package/dist/theme/components/openapi/spec-utils.ts +122 -0
  141. package/dist/theme/components/shared/accordion.css +118 -0
  142. package/dist/theme/components/shared/accordion.stories.tsx +96 -0
  143. package/dist/theme/components/shared/accordion.tsx +191 -0
  144. package/dist/theme/components/shared/brand-logo.stories.tsx +49 -0
  145. package/dist/theme/components/shared/brand-mark.stories.tsx +53 -0
  146. package/dist/theme/components/shared/browser-window.css +1 -0
  147. package/dist/theme/components/shared/browser-window.stories.tsx +100 -0
  148. package/dist/theme/components/shared/browser-window.tsx +2 -0
  149. package/dist/theme/components/shared/card.stories.tsx +50 -0
  150. package/dist/theme/components/shared/card.tsx +35 -0
  151. package/dist/theme/components/shared/ciderpress-logo.tsx +93 -0
  152. package/dist/theme/components/shared/ciderpress-mark.tsx +77 -0
  153. package/dist/theme/components/shared/color.css +56 -0
  154. package/dist/theme/components/shared/color.stories.tsx +47 -0
  155. package/dist/theme/components/shared/color.tsx +69 -0
  156. package/dist/theme/components/shared/columns.css +37 -0
  157. package/dist/theme/components/shared/columns.stories.tsx +91 -0
  158. package/dist/theme/components/shared/columns.tsx +50 -0
  159. package/dist/theme/components/shared/desktop-window.css +339 -0
  160. package/dist/theme/components/shared/desktop-window.tsx +535 -0
  161. package/dist/theme/components/shared/field.css +158 -0
  162. package/dist/theme/components/shared/field.stories.tsx +100 -0
  163. package/dist/theme/components/shared/field.tsx +186 -0
  164. package/dist/theme/components/shared/frame.css +39 -0
  165. package/dist/theme/components/shared/frame.stories.tsx +49 -0
  166. package/dist/theme/components/shared/frame.tsx +76 -0
  167. package/dist/theme/components/shared/icon.stories.tsx +90 -0
  168. package/dist/theme/components/shared/icon.tsx +41 -0
  169. package/dist/theme/components/shared/prompt.css +178 -0
  170. package/dist/theme/components/shared/prompt.stories.tsx +57 -0
  171. package/dist/theme/components/shared/prompt.tsx +369 -0
  172. package/dist/theme/components/shared/resolve-card-icon.ts +28 -0
  173. package/dist/theme/components/shared/section-card.stories.tsx +51 -0
  174. package/dist/theme/components/shared/section-card.tsx +44 -0
  175. package/dist/theme/components/shared/section-grid.stories.tsx +46 -0
  176. package/dist/theme/components/shared/section-grid.tsx +15 -0
  177. package/dist/theme/components/shared/status-badge.css +37 -0
  178. package/dist/theme/components/shared/status-badge.stories.tsx +61 -0
  179. package/dist/theme/components/shared/status-badge.tsx +74 -0
  180. package/dist/theme/components/shared/steps.css +88 -0
  181. package/dist/theme/components/shared/steps.stories.tsx +68 -0
  182. package/dist/theme/components/shared/steps.tsx +100 -0
  183. package/dist/theme/components/shared/tech-icon-table.stories.tsx +29 -0
  184. package/dist/theme/components/shared/tech-icon-table.tsx +71 -0
  185. package/dist/theme/components/shared/tech-tag.stories.tsx +40 -0
  186. package/dist/theme/components/shared/tech-tag.tsx +31 -0
  187. package/dist/theme/components/shared/theme-color-palette.css +80 -0
  188. package/dist/theme/components/shared/theme-color-palette.stories.tsx +52 -0
  189. package/dist/theme/components/shared/theme-color-palette.tsx +275 -0
  190. package/dist/theme/components/shared/tooltip.css +69 -0
  191. package/dist/theme/components/shared/tooltip.stories.tsx +72 -0
  192. package/dist/theme/components/shared/tooltip.tsx +77 -0
  193. package/dist/theme/components/sidebar/framework-picker.css +77 -0
  194. package/dist/theme/components/sidebar/framework-picker.tsx +78 -0
  195. package/dist/theme/components/sidebar/sidebar-filter.test.ts +140 -0
  196. package/dist/theme/components/sidebar/sidebar-filter.ts +79 -0
  197. package/dist/theme/components/sidebar/sidebar-links.css +102 -0
  198. package/dist/theme/components/sidebar/sidebar-links.tsx +122 -0
  199. package/dist/theme/components/sidebar/sidebar-promo.css +42 -0
  200. package/dist/theme/components/sidebar/sidebar-promo.tsx +52 -0
  201. package/dist/theme/components/sidebar/sidebar-scope.tsx +151 -0
  202. package/dist/theme/components/sidebar/sidebar-toggle.css +181 -0
  203. package/dist/theme/components/sidebar/sidebar-toggle.tsx +127 -0
  204. package/dist/theme/components/theme-provider.tsx +637 -0
  205. package/dist/theme/components/workspaces/card.css +151 -0
  206. package/dist/theme/components/workspaces/card.tsx +166 -0
  207. package/dist/theme/components/workspaces/grid.tsx +62 -0
  208. package/dist/theme/css.d.ts +1 -0
  209. package/dist/theme/env.d.ts +12 -0
  210. package/dist/theme/fonts/GeistMono-Variable.woff2 +0 -0
  211. package/dist/theme/fonts/GeistPixel-Square.woff2 +0 -0
  212. package/dist/theme/fonts/GeistSans-Variable.woff2 +0 -0
  213. package/dist/theme/hooks/use-ciderpress.ts +61 -0
  214. package/dist/theme/hooks/use-nav-items.ts +76 -0
  215. package/dist/theme/icons/index.ts +2 -0
  216. package/dist/theme/icons/tech-map.ts +228 -0
  217. package/dist/theme/index.tsx +180 -0
  218. package/dist/theme/lib/read-social-links.ts +27 -0
  219. package/dist/theme/lib/route-link.tsx +126 -0
  220. package/dist/theme/lib/safe-url.test.ts +0 -0
  221. package/dist/theme/lib/safe-url.ts +68 -0
  222. package/dist/theme/lib/theme-favicon.ts +125 -0
  223. package/dist/theme/lib/user-config-stub.ts +12 -0
  224. package/dist/theme/styles/layers.css +32 -0
  225. package/dist/theme/styles/overrides/badge.css +26 -0
  226. package/dist/theme/styles/overrides/content-footer.css +80 -0
  227. package/dist/theme/styles/overrides/details.css +61 -0
  228. package/dist/theme/styles/overrides/fonts.css +32 -0
  229. package/dist/theme/styles/overrides/home-card.css +133 -0
  230. package/dist/theme/styles/overrides/home.css +243 -0
  231. package/dist/theme/styles/overrides/rail.css +337 -0
  232. package/dist/theme/styles/overrides/rspress.css +62 -0
  233. package/dist/theme/styles/overrides/scrollbar.css +25 -0
  234. package/dist/theme/styles/overrides/section-card.css +114 -0
  235. package/dist/theme/styles/overrides/sidebar.css +144 -0
  236. package/dist/theme/styles/overrides/tokens.css +288 -0
  237. package/dist/theme/styles/overrides/vscode.css +88 -0
  238. package/dist/theme/styles/themes/amber.css +545 -0
  239. package/dist/theme/styles/themes/arcade-fx.css +366 -0
  240. package/dist/theme/styles/themes/arcade.css +273 -0
  241. package/dist/theme/styles/themes/grannysmith.css +545 -0
  242. package/dist/theme/styles/themes/honeycrisp.css +545 -0
  243. package/dist/theme/styles/themes/midnight.css +273 -0
  244. package/dist/theme/styles/themes/mulled.css +817 -0
  245. package/package.json +103 -0
  246. package/src/theme/components/announcement/announcement-bar.css +103 -0
  247. package/src/theme/components/announcement/announcement-bar.tsx +173 -0
  248. package/src/theme/components/ask-ai/ask-ai-button.css +52 -0
  249. package/src/theme/components/ask-ai/ask-ai-button.tsx +56 -0
  250. package/src/theme/components/content-footer/content-footer-portal.tsx +70 -0
  251. package/src/theme/components/content-footer/feedback.css +47 -0
  252. package/src/theme/components/content-footer/feedback.tsx +96 -0
  253. package/src/theme/components/content-footer/meta-actions.css +25 -0
  254. package/src/theme/components/content-footer/meta-actions.tsx +57 -0
  255. package/src/theme/components/content-footer/page-pager.css +61 -0
  256. package/src/theme/components/content-footer/page-pager.tsx +110 -0
  257. package/src/theme/components/edit-source-button.tsx +97 -0
  258. package/src/theme/components/footer/site-footer.css +179 -0
  259. package/src/theme/components/footer/site-footer.tsx +115 -0
  260. package/src/theme/components/home/cta.css +67 -0
  261. package/src/theme/components/home/cta.tsx +77 -0
  262. package/src/theme/components/home/feature-card.css +52 -0
  263. package/src/theme/components/home/feature-card.tsx +131 -0
  264. package/src/theme/components/home/feature.tsx +79 -0
  265. package/src/theme/components/home/hero-demo.css +66 -0
  266. package/src/theme/components/home/hero-demo.tsx +46 -0
  267. package/src/theme/components/home/hero.css +96 -0
  268. package/src/theme/components/home/hero.tsx +111 -0
  269. package/src/theme/components/home/layout.tsx +183 -0
  270. package/src/theme/components/home/page-rail.css +21 -0
  271. package/src/theme/components/home/page-rail.tsx +19 -0
  272. package/src/theme/components/home/split.css +148 -0
  273. package/src/theme/components/home/split.tsx +120 -0
  274. package/src/theme/components/home/trust-strip.css +33 -0
  275. package/src/theme/components/home/trust-strip.tsx +43 -0
  276. package/src/theme/components/home/workspaces.tsx +71 -0
  277. package/src/theme/components/nav/branch-tag.css +54 -0
  278. package/src/theme/components/nav/branch-tag.tsx +101 -0
  279. package/src/theme/components/nav/ciderpress-doc-layout.tsx +247 -0
  280. package/src/theme/components/nav/ciderpress-docs-bar.css +505 -0
  281. package/src/theme/components/nav/ciderpress-docs-bar.tsx +426 -0
  282. package/src/theme/components/nav/ciderpress-header.css +172 -0
  283. package/src/theme/components/nav/ciderpress-header.tsx +113 -0
  284. package/src/theme/components/nav/ciderpress-layout-context.tsx +49 -0
  285. package/src/theme/components/nav/ciderpress-nav-hamburger.css +193 -0
  286. package/src/theme/components/nav/ciderpress-nav-hamburger.tsx +112 -0
  287. package/src/theme/components/nav/ciderpress-nav-menu.css +130 -0
  288. package/src/theme/components/nav/ciderpress-nav-menu.tsx +372 -0
  289. package/src/theme/components/nav/ciderpress-nav-search.css +73 -0
  290. package/src/theme/components/nav/ciderpress-nav-search.tsx +55 -0
  291. package/src/theme/components/nav/ciderpress-nav-social-links.css +35 -0
  292. package/src/theme/components/nav/ciderpress-nav-social-links.tsx +87 -0
  293. package/src/theme/components/nav/floating-branch-indicator.css +106 -0
  294. package/src/theme/components/nav/floating-branch-indicator.tsx +109 -0
  295. package/src/theme/components/nav/layout.tsx +268 -0
  296. package/src/theme/components/nav/mobile-nav-cta.tsx +79 -0
  297. package/src/theme/components/nav/nav-divider.css +15 -0
  298. package/src/theme/components/nav/nav-divider.tsx +19 -0
  299. package/src/theme/components/nav/nav-logo.css +42 -0
  300. package/src/theme/components/nav/nav-logo.tsx +262 -0
  301. package/src/theme/components/nav/theme-switcher.css +92 -0
  302. package/src/theme/components/nav/theme-switcher.tsx +298 -0
  303. package/src/theme/components/nav/topbar-cta.css +45 -0
  304. package/src/theme/components/nav/topbar-cta.tsx +39 -0
  305. package/src/theme/components/nav/variant-toggle.css +70 -0
  306. package/src/theme/components/nav/variant-toggle.tsx +83 -0
  307. package/src/theme/components/nav/version-chip.css +31 -0
  308. package/src/theme/components/nav/version-chip.tsx +45 -0
  309. package/src/theme/components/nav/vscode-tag.css +32 -0
  310. package/src/theme/components/nav/vscode-tag.tsx +20 -0
  311. package/src/theme/components/openapi/code-sample.tsx +341 -0
  312. package/src/theme/components/openapi/copy-markdown-button.tsx +41 -0
  313. package/src/theme/components/openapi/icons.tsx +45 -0
  314. package/src/theme/components/openapi/index.ts +6 -0
  315. package/src/theme/components/openapi/method-badge.tsx +24 -0
  316. package/src/theme/components/openapi/openapi.css +665 -0
  317. package/src/theme/components/openapi/operation.tsx +200 -0
  318. package/src/theme/components/openapi/overview.tsx +207 -0
  319. package/src/theme/components/openapi/parameters-table.tsx +149 -0
  320. package/src/theme/components/openapi/request-body.tsx +90 -0
  321. package/src/theme/components/openapi/response-list.tsx +112 -0
  322. package/src/theme/components/openapi/schema-viewer.tsx +277 -0
  323. package/src/theme/components/openapi/security-badges.tsx +63 -0
  324. package/src/theme/components/openapi/spec-utils.ts +122 -0
  325. package/src/theme/components/shared/accordion.css +118 -0
  326. package/src/theme/components/shared/accordion.stories.tsx +96 -0
  327. package/src/theme/components/shared/accordion.tsx +191 -0
  328. package/src/theme/components/shared/brand-logo.stories.tsx +49 -0
  329. package/src/theme/components/shared/brand-mark.stories.tsx +53 -0
  330. package/src/theme/components/shared/browser-window.css +1 -0
  331. package/src/theme/components/shared/browser-window.stories.tsx +100 -0
  332. package/src/theme/components/shared/browser-window.tsx +2 -0
  333. package/src/theme/components/shared/card.stories.tsx +50 -0
  334. package/src/theme/components/shared/card.tsx +35 -0
  335. package/src/theme/components/shared/ciderpress-logo.tsx +93 -0
  336. package/src/theme/components/shared/ciderpress-mark.tsx +77 -0
  337. package/src/theme/components/shared/color.css +56 -0
  338. package/src/theme/components/shared/color.stories.tsx +47 -0
  339. package/src/theme/components/shared/color.tsx +69 -0
  340. package/src/theme/components/shared/columns.css +37 -0
  341. package/src/theme/components/shared/columns.stories.tsx +91 -0
  342. package/src/theme/components/shared/columns.tsx +50 -0
  343. package/src/theme/components/shared/desktop-window.css +339 -0
  344. package/src/theme/components/shared/desktop-window.tsx +535 -0
  345. package/src/theme/components/shared/field.css +158 -0
  346. package/src/theme/components/shared/field.stories.tsx +100 -0
  347. package/src/theme/components/shared/field.tsx +186 -0
  348. package/src/theme/components/shared/frame.css +39 -0
  349. package/src/theme/components/shared/frame.stories.tsx +49 -0
  350. package/src/theme/components/shared/frame.tsx +76 -0
  351. package/src/theme/components/shared/icon.stories.tsx +90 -0
  352. package/src/theme/components/shared/icon.tsx +41 -0
  353. package/src/theme/components/shared/prompt.css +178 -0
  354. package/src/theme/components/shared/prompt.stories.tsx +57 -0
  355. package/src/theme/components/shared/prompt.tsx +369 -0
  356. package/src/theme/components/shared/resolve-card-icon.ts +28 -0
  357. package/src/theme/components/shared/section-card.stories.tsx +51 -0
  358. package/src/theme/components/shared/section-card.tsx +44 -0
  359. package/src/theme/components/shared/section-grid.stories.tsx +46 -0
  360. package/src/theme/components/shared/section-grid.tsx +15 -0
  361. package/src/theme/components/shared/status-badge.css +37 -0
  362. package/src/theme/components/shared/status-badge.stories.tsx +61 -0
  363. package/src/theme/components/shared/status-badge.tsx +74 -0
  364. package/src/theme/components/shared/steps.css +88 -0
  365. package/src/theme/components/shared/steps.stories.tsx +68 -0
  366. package/src/theme/components/shared/steps.tsx +100 -0
  367. package/src/theme/components/shared/tech-icon-table.stories.tsx +29 -0
  368. package/src/theme/components/shared/tech-icon-table.tsx +71 -0
  369. package/src/theme/components/shared/tech-tag.stories.tsx +40 -0
  370. package/src/theme/components/shared/tech-tag.tsx +31 -0
  371. package/src/theme/components/shared/theme-color-palette.css +80 -0
  372. package/src/theme/components/shared/theme-color-palette.stories.tsx +52 -0
  373. package/src/theme/components/shared/theme-color-palette.tsx +275 -0
  374. package/src/theme/components/shared/tooltip.css +69 -0
  375. package/src/theme/components/shared/tooltip.stories.tsx +72 -0
  376. package/src/theme/components/shared/tooltip.tsx +77 -0
  377. package/src/theme/components/sidebar/framework-picker.css +77 -0
  378. package/src/theme/components/sidebar/framework-picker.tsx +78 -0
  379. package/src/theme/components/sidebar/sidebar-filter.test.ts +140 -0
  380. package/src/theme/components/sidebar/sidebar-filter.ts +79 -0
  381. package/src/theme/components/sidebar/sidebar-links.css +102 -0
  382. package/src/theme/components/sidebar/sidebar-links.tsx +122 -0
  383. package/src/theme/components/sidebar/sidebar-promo.css +42 -0
  384. package/src/theme/components/sidebar/sidebar-promo.tsx +52 -0
  385. package/src/theme/components/sidebar/sidebar-scope.tsx +151 -0
  386. package/src/theme/components/sidebar/sidebar-toggle.css +181 -0
  387. package/src/theme/components/sidebar/sidebar-toggle.tsx +127 -0
  388. package/src/theme/components/theme-provider.tsx +637 -0
  389. package/src/theme/components/workspaces/card.css +151 -0
  390. package/src/theme/components/workspaces/card.tsx +166 -0
  391. package/src/theme/components/workspaces/grid.tsx +62 -0
  392. package/src/theme/css.d.ts +1 -0
  393. package/src/theme/env.d.ts +12 -0
  394. package/src/theme/fonts/GeistMono-Variable.woff2 +0 -0
  395. package/src/theme/fonts/GeistPixel-Square.woff2 +0 -0
  396. package/src/theme/fonts/GeistSans-Variable.woff2 +0 -0
  397. package/src/theme/hooks/use-ciderpress.ts +61 -0
  398. package/src/theme/hooks/use-nav-items.ts +76 -0
  399. package/src/theme/icons/index.ts +2 -0
  400. package/src/theme/icons/tech-map.ts +228 -0
  401. package/src/theme/index.tsx +180 -0
  402. package/src/theme/lib/read-social-links.ts +27 -0
  403. package/src/theme/lib/route-link.tsx +126 -0
  404. package/src/theme/lib/safe-url.test.ts +0 -0
  405. package/src/theme/lib/safe-url.ts +68 -0
  406. package/src/theme/lib/theme-favicon.ts +125 -0
  407. package/src/theme/lib/user-config-stub.ts +12 -0
  408. package/src/theme/styles/layers.css +32 -0
  409. package/src/theme/styles/overrides/badge.css +26 -0
  410. package/src/theme/styles/overrides/content-footer.css +80 -0
  411. package/src/theme/styles/overrides/details.css +61 -0
  412. package/src/theme/styles/overrides/fonts.css +32 -0
  413. package/src/theme/styles/overrides/home-card.css +133 -0
  414. package/src/theme/styles/overrides/home.css +243 -0
  415. package/src/theme/styles/overrides/rail.css +337 -0
  416. package/src/theme/styles/overrides/rspress.css +62 -0
  417. package/src/theme/styles/overrides/scrollbar.css +25 -0
  418. package/src/theme/styles/overrides/section-card.css +114 -0
  419. package/src/theme/styles/overrides/sidebar.css +144 -0
  420. package/src/theme/styles/overrides/tokens.css +288 -0
  421. package/src/theme/styles/overrides/vscode.css +88 -0
  422. package/src/theme/styles/themes/amber.css +545 -0
  423. package/src/theme/styles/themes/arcade-fx.css +366 -0
  424. package/src/theme/styles/themes/arcade.css +273 -0
  425. package/src/theme/styles/themes/grannysmith.css +545 -0
  426. package/src/theme/styles/themes/honeycrisp.css +545 -0
  427. package/src/theme/styles/themes/midnight.css +273 -0
  428. package/src/theme/styles/themes/mulled.css +817 -0
@@ -0,0 +1,505 @@
1
+ /**
2
+ * CiderpressDocsBar — sticky sub-header beneath the site nav, replaces
3
+ * Rspress's `.rp-doc-layout__menu` (which our DocLayout override no
4
+ * longer renders at all).
5
+ *
6
+ * Three-column layout that mirrors the rail below:
7
+ * [ Menu (sidebar-width) | Breadcrumbs (content-padding-x) | Outline (outline-width) ]
8
+ * Vertical hairlines between the columns line up with the dividers
9
+ * between sidebar / doc / outline in `.rp-doc-layout__container`.
10
+ *
11
+ * Theme-author API:
12
+ * --cp-docs-bar-height row height (default 46px)
13
+ * --cp-docs-bar-bg background colour
14
+ * --cp-docs-bar-border column-divider + outer hairline colour
15
+ */
16
+ .cp-docs-bar {
17
+ position: sticky;
18
+ /* Clear the header AND the announcement bar above it. The
19
+ announcement self-reports its height via `--cp-announcement-height`
20
+ (see `<AnnouncementBar />`); it collapses to `0px` when dismissed
21
+ so the bar slides up against the header automatically. */
22
+ top: calc(var(--cp-header-height, 56px) + var(--cp-announcement-height, 0px));
23
+ /* Must sit ABOVE Rspress's sidebar (`--rp-z-index-sidebar: 50`) and
24
+ outline (`--rp-z-index-aside: 40`) — both are sticky-positioned in
25
+ the same flex row and would otherwise paint over the bar when the
26
+ page scrolls. Stay BELOW the site header (`--cp-header-z: 60`) so
27
+ the header still wins the top edge. */
28
+ z-index: 55;
29
+ display: flex;
30
+ align-items: stretch;
31
+ height: var(--cp-docs-bar-height, 46px);
32
+ margin: 0 var(--cp-frame-gutter);
33
+ background: var(--cp-docs-bar-bg, var(--cp-c-bg));
34
+ border-left: 1px solid var(--cp-docs-bar-border, var(--cp-c-border));
35
+ border-right: 1px solid var(--cp-docs-bar-border, var(--cp-c-border));
36
+ border-bottom: 1px solid var(--cp-c-divider);
37
+ font-size: 12.5px;
38
+ color: var(--cp-c-text-2);
39
+ }
40
+
41
+ /* ── Left column: "Menu" button — width matches the sidebar below
42
+ so the hairline divider aligns with the sidebar / content seam. ── */
43
+ .cp-docs-bar__menu {
44
+ display: flex;
45
+ align-items: center;
46
+ flex-shrink: 0;
47
+ width: var(--rp-sidebar-width, 260px);
48
+ padding: 0 12px;
49
+ border-right: 1px solid var(--cp-docs-bar-border, var(--cp-c-border));
50
+ }
51
+
52
+ .cp-docs-bar__menu-btn {
53
+ display: inline-flex;
54
+ align-items: center;
55
+ gap: 8px;
56
+ font-size: 13px;
57
+ font-weight: 500;
58
+ color: var(--cp-c-text-2);
59
+ background: transparent;
60
+ border: 0;
61
+ padding: 6px 8px;
62
+ border-radius: var(--cp-radius-card);
63
+ cursor: pointer;
64
+ transition: all 0.15s ease;
65
+ }
66
+
67
+ .cp-docs-bar__menu-btn:hover {
68
+ background: var(--cp-c-bg-soft);
69
+ color: var(--cp-c-text-1);
70
+ }
71
+
72
+ /* ── Middle column: breadcrumbs (left, takes remaining width) +
73
+ Copy Markdown / view-options dropdown (right, fixed).
74
+
75
+ NOTE: `overflow: hidden` cannot be set here — Rspress's
76
+ `<LlmsViewOptions />` renders its popover as a `position: absolute`
77
+ child of the trigger button (not a portal), so any clipping ancestor
78
+ hides the dropdown. Breadcrumb truncation is handled inside
79
+ `.cp-docs-bar__crumbs` instead. ──────────────────────────────── */
80
+ .cp-docs-bar__center {
81
+ display: flex;
82
+ align-items: center;
83
+ gap: 12px;
84
+ flex: 1 1 auto;
85
+ min-width: 0;
86
+ padding: 0 var(--cp-docs-bar-crumbs-pad-x, 20px);
87
+ }
88
+
89
+ .cp-docs-bar__crumbs {
90
+ display: flex;
91
+ align-items: center;
92
+ gap: 6px;
93
+ flex: 1 1 auto;
94
+ min-width: 0;
95
+ overflow: hidden;
96
+ }
97
+
98
+ .cp-docs-bar__crumb-wrap {
99
+ display: inline-flex;
100
+ align-items: center;
101
+ gap: 6px;
102
+ white-space: nowrap;
103
+ min-width: 0;
104
+ }
105
+
106
+ .cp-docs-bar__crumb-wrap:last-child {
107
+ color: var(--cp-c-text-1);
108
+ font-weight: 500;
109
+ overflow: hidden;
110
+ }
111
+
112
+ /* ── Home icon — anchors the breadcrumb trail at the root. Sits
113
+ inline with the section/page labels; the icon itself renders at 14px
114
+ to match the other docs-bar icons. ────────────────────────────── */
115
+ .cp-docs-bar__crumb-home {
116
+ display: inline-flex;
117
+ align-items: center;
118
+ justify-content: center;
119
+ flex-shrink: 0;
120
+ color: var(--cp-c-text-2);
121
+ text-decoration: none;
122
+ transition: color 0.15s ease;
123
+ }
124
+
125
+ .cp-docs-bar__crumb-home:hover {
126
+ color: var(--cp-c-text-1);
127
+ text-decoration: none;
128
+ }
129
+
130
+ .cp-docs-bar__crumb {
131
+ overflow: hidden;
132
+ text-overflow: ellipsis;
133
+ white-space: nowrap;
134
+ color: inherit;
135
+ text-decoration: none;
136
+ transition: color 0.15s ease;
137
+ }
138
+
139
+ /* Anchor variant — Rspress's global anchor styles can add underlines on
140
+ hover; reset so breadcrumb links read as inline text that brightens
141
+ on hover rather than gaining a rule beneath. */
142
+ a.cp-docs-bar__crumb:hover {
143
+ color: var(--cp-c-text-1);
144
+ text-decoration: none;
145
+ }
146
+
147
+ .cp-docs-bar__sep {
148
+ color: var(--cp-c-text-3, var(--cp-c-text-2));
149
+ flex-shrink: 0;
150
+ }
151
+
152
+ /* ── Right column wrapper — anchors the dropdown for the outline
153
+ "On this page" button. Position: relative so the absolutely-
154
+ positioned dropdown sits flush against the button's bottom edge. */
155
+ .cp-docs-bar__outline-wrap {
156
+ position: relative;
157
+ flex-shrink: 0;
158
+ display: flex;
159
+ align-items: stretch;
160
+ }
161
+
162
+ /* ── Right column: "On this page" — at desktop (>= 1280px) the
163
+ button toggles `data-cp-outline-collapsed` (hides the outline rail
164
+ via CSS in `sidebar-toggle.css`); at <= 1279px it toggles the
165
+ in-bar TOC dropdown below. Contents: label · scrolled-section
166
+ text · read percent · chevron. Width matches the rail's outline
167
+ column. ────────────────────────────────────────────────────── */
168
+ .cp-docs-bar__outline {
169
+ display: flex;
170
+ align-items: center;
171
+ gap: 8px;
172
+ flex-shrink: 0;
173
+ width: var(--rp-outline-width, 240px);
174
+ padding: 0 16px;
175
+ border-top: 0;
176
+ border-right: 0;
177
+ border-bottom: 0;
178
+ border-left: 1px solid var(--cp-docs-bar-border, var(--cp-c-border));
179
+ background: transparent;
180
+ color: var(--cp-c-text-2);
181
+ font: inherit;
182
+ cursor: pointer;
183
+ min-width: 0;
184
+ transition: background 0.15s ease;
185
+ }
186
+
187
+ .cp-docs-bar__outline:hover {
188
+ background: var(--cp-c-bg-soft);
189
+ color: var(--cp-c-text-1);
190
+ }
191
+
192
+ .cp-docs-bar__chev {
193
+ flex-shrink: 0;
194
+ margin-left: auto;
195
+ color: var(--cp-c-text-3, var(--cp-c-text-2));
196
+ transition: transform 0.15s ease;
197
+ }
198
+
199
+ html[data-cp-outline-collapsed='true'] .cp-docs-bar__chev {
200
+ transform: rotate(-90deg);
201
+ }
202
+
203
+ /* ── Outline TOC dropdown — appears below the right column button
204
+ when `isOutlineOpen` is true (handled by `<CiderpressDocsBar />`).
205
+ Sits above the docs bar's own z-index so it overlaps the bar's
206
+ bottom border without being clipped. Click-outside closes via the
207
+ `mousedown` listener in `ciderpress-docs-bar.tsx`; clicks on `<a>`
208
+ links inside close via `makeLinkClickCloser` (hash-only navigation
209
+ doesn't trigger React Router's pathname effect, so this is the
210
+ actual closer). ─────────────────────────────────────────────── */
211
+ /*
212
+ * The dropdown carries TWO classes:
213
+ * - `.cp-docs-bar__outline-dropdown` — ours, owns positioning + visuals
214
+ * - `.rp-doc-layout__outline` — Rspress's, included only so its
215
+ * `<TocItem>` scroll-into-view boundary stops here instead of
216
+ * scrolling the whole page (the boundary check is `classList
217
+ * .contains('rp-doc-layout__outline') || classList.contains
218
+ * ('rspress-doc')`, hard-coded in Rspress's TocItem source).
219
+ *
220
+ * That second class drags in Rspress's `@media (width <= 1279px)`
221
+ * block which sets `visibility: hidden; opacity: 0; transform:
222
+ * translate3d(0, -10px, 0)` — same single-class specificity as ours,
223
+ * so source order alone decides who wins, and we kept losing once the
224
+ * entry animation completed (animation-fill-mode: none reverts the
225
+ * properties). Chaining both classes in our selector (specificity
226
+ * 0,2,0) definitively beats Rspress's 0,1,0 at every viewport width,
227
+ * and `forwards` on the animations pins the end state so the
228
+ * dropdown stays visible after the entry transition.
229
+ */
230
+ .cp-docs-bar__outline-dropdown.rp-doc-layout__outline {
231
+ /* Default (>=1025px): side popout — full-height column on the
232
+ right edge, slides in from the right. */
233
+ position: fixed;
234
+ top: calc(
235
+ var(--cp-header-height, 56px) + var(--cp-docs-bar-height, 46px) +
236
+ var(--cp-announcement-height, 0px)
237
+ );
238
+ right: 0;
239
+ bottom: 0;
240
+ inset-inline-end: 0;
241
+ width: var(--rp-outline-width, 240px);
242
+ max-width: calc(100vw - 24px);
243
+ height: auto;
244
+ overflow-y: auto;
245
+ padding: 12px 0;
246
+ margin: 0;
247
+ background: var(--cp-c-bg);
248
+ backdrop-filter: none;
249
+ border: 0;
250
+ border-left: 1px solid var(--cp-c-border);
251
+ border-radius: 0;
252
+ box-shadow: -8px 0 24px rgba(0, 0, 0, 0.3);
253
+ visibility: visible;
254
+ opacity: 1;
255
+ transform: none;
256
+ transition: none;
257
+ font-size: 13px;
258
+ z-index: 70;
259
+ animation: cp-outline-slide-in 0.2s cubic-bezier(0.19, 1, 0.22, 1) forwards;
260
+ }
261
+
262
+ @keyframes cp-outline-slide-in {
263
+ from {
264
+ transform: translateX(100%);
265
+ }
266
+ to {
267
+ transform: translateX(0);
268
+ }
269
+ }
270
+
271
+ /* Mobile (<=1024px) — outline button opens a *dropdown* (sized to
272
+ content, anchored under the button), not the full-height side
273
+ panel. The side panel is reserved for the 1025-1279 "tablet" range.
274
+ Selector chains both classes to keep specificity (0,2,0) above
275
+ Rspress's `.rp-doc-layout__outline` rules at <=1279px. */
276
+ @media (max-width: 1024px) {
277
+ .cp-docs-bar__outline-dropdown.rp-doc-layout__outline {
278
+ bottom: auto;
279
+ width: 280px;
280
+ max-width: calc(100vw - 16px);
281
+ max-height: calc(
282
+ 100vh - var(--cp-header-height, 56px) - var(--cp-docs-bar-height, 46px) -
283
+ var(--cp-announcement-height, 0px) - 16px
284
+ );
285
+ margin-right: 8px;
286
+ padding: 6px 0;
287
+ border: 1px solid var(--cp-c-border);
288
+ border-radius: var(--cp-radius-card, 6px);
289
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
290
+ animation: cp-outline-fade-in 0.15s ease forwards;
291
+ }
292
+ }
293
+
294
+ @keyframes cp-outline-fade-in {
295
+ from {
296
+ opacity: 0;
297
+ transform: translateY(-4px);
298
+ }
299
+ to {
300
+ opacity: 1;
301
+ transform: translateY(0);
302
+ }
303
+ }
304
+
305
+ /* `<TocItem>` ships a 10px top margin between items + a `:before`
306
+ active-marker hairline positioned at negative left of the outline
307
+ rail's padding. Inside a dropdown both look wrong — items want to
308
+ sit on a tighter rhythm and the `:before` indicator lands outside
309
+ the dropdown's clipping box, never visible. Strip both. */
310
+ .cp-docs-bar__outline-dropdown .rp-toc-item {
311
+ display: block;
312
+ margin: 0;
313
+ /* No padding on the link itself so hover/active backgrounds fill
314
+ full dropdown width AND `<TocItem>`'s inline `padding-left`
315
+ (depth × 12px) keeps providing the hierarchy indent. */
316
+ padding: 0;
317
+ color: var(--cp-c-text-2);
318
+ text-decoration: none;
319
+ position: relative;
320
+ }
321
+
322
+ .cp-docs-bar__outline-dropdown .rp-toc-item::before {
323
+ display: none;
324
+ }
325
+
326
+ .cp-docs-bar__outline-dropdown .rp-toc-item:hover {
327
+ background: var(--cp-c-bg-soft);
328
+ color: var(--cp-c-text-1);
329
+ }
330
+
331
+ .cp-docs-bar__outline-dropdown .rp-toc-item--active {
332
+ background: var(--cp-c-bg-soft);
333
+ }
334
+
335
+ /* The actual visual padding lives on the text span — keeps the
336
+ hover/active background flush to the dropdown edges while the
337
+ text stays inset 16px from left and right. */
338
+ .cp-docs-bar__outline-dropdown .rp-toc-item__text {
339
+ display: block;
340
+ padding: 6px 16px;
341
+ color: inherit;
342
+ line-height: 1.4;
343
+ }
344
+
345
+ .cp-docs-bar__outline-dropdown .rp-toc-item--active .rp-toc-item__text {
346
+ color: var(--cp-c-brand-1, var(--cp-c-text-1));
347
+ font-weight: 500;
348
+ }
349
+
350
+ /* ── LlmsContainer (Copy Markdown + view-options dropdown) — Rspress
351
+ emits `.rp-llms-container` with its own float / margin meant for
352
+ the H1-adjacent placement. Inside our bar we override to a tight
353
+ inline-flex cluster of compact buttons. The Copy button shows
354
+ "Copy Markdown" inline with its icon on desktop; mobile collapses
355
+ the entire `.cp-docs-bar__center` so the label disappears with
356
+ it. The view-options trigger keeps just its caret icon. The
357
+ on-page render of `.rp-llms-container` is hidden separately in
358
+ `styles/overrides/rspress.css`. ──────────────────────────────── */
359
+ .cp-docs-bar__llms {
360
+ flex-shrink: 0;
361
+ }
362
+
363
+ .cp-docs-bar__llms .rp-llms-container {
364
+ float: none;
365
+ margin: 0;
366
+ display: inline-flex;
367
+ align-items: center;
368
+ gap: 4px;
369
+ }
370
+
371
+ /* Compact button reset — Rspress ships `.rp-llms-button` at 36px tall
372
+ with 12px horizontal padding and a 14px label, sized for the H1
373
+ placement. In the docs bar we squeeze to ~28px square so the cluster
374
+ reads as a row of icon affordances next to the chevron. */
375
+ .cp-docs-bar__llms .rp-llms-button {
376
+ height: 28px;
377
+ min-width: 28px;
378
+ padding: 0 6px;
379
+ gap: 4px;
380
+ font-size: 12px;
381
+ font-weight: 500;
382
+ border-radius: var(--cp-radius-card, 6px);
383
+ background: transparent;
384
+ border: 1px solid transparent;
385
+ color: var(--cp-c-text-2);
386
+ transition:
387
+ background 0.15s ease,
388
+ color 0.15s ease,
389
+ border-color 0.15s ease;
390
+ }
391
+
392
+ .cp-docs-bar__llms .rp-llms-button:hover {
393
+ background: var(--cp-c-bg-soft);
394
+ color: var(--cp-c-text-1);
395
+ border-color: transparent;
396
+ box-shadow: none;
397
+ }
398
+
399
+ /* Tighten the copy button's icon wrapper so it centres in the 28px box. */
400
+ .cp-docs-bar__llms .rp-llms-copy-button__icon-wrapper,
401
+ .cp-docs-bar__llms .rp-llms-copy-button__icon-copy,
402
+ .cp-docs-bar__llms .rp-llms-copy-button__icon-success {
403
+ width: 14px;
404
+ height: 14px;
405
+ }
406
+
407
+ .cp-docs-bar__label {
408
+ font-size: 11px;
409
+ font-weight: 600;
410
+ letter-spacing: 0.04em;
411
+ text-transform: uppercase;
412
+ color: var(--cp-c-text-3, var(--cp-c-text-2));
413
+ flex-shrink: 0;
414
+ }
415
+
416
+ .cp-docs-bar__section {
417
+ /* Active scrolled-section heading. Hidden on desktop because the
418
+ outline rail surfaces the active heading via its own active
419
+ state; shown on mobile (below) where the outline rail collapses
420
+ into a drawer and the bar is the only place to see what section
421
+ the user is currently reading. */
422
+ display: none;
423
+ color: var(--cp-c-text-1);
424
+ font-weight: 500;
425
+ overflow: hidden;
426
+ text-overflow: ellipsis;
427
+ white-space: nowrap;
428
+ min-width: 0;
429
+ flex: 1 1 auto;
430
+ }
431
+
432
+ /* ── Layout flip — at <=1279px the Outline column collapses from a
433
+ sticky rail into a drawer (Rspress's own behaviour, matched by
434
+ `OUTLINE_DRAWER_MAX_WIDTH` in `ciderpress-docs-bar.tsx`). Flip the
435
+ bar's layout at the same threshold so the breadcrumbs + Copy-
436
+ Markdown cluster step out of the way and the two button affordances
437
+ ("Menu" + "On this page") expand to fill the bar.
438
+
439
+ Gutter / side-border removal lives in a separate rule below so the
440
+ docs bar stays aligned with the doc rail beneath it (rail mobile
441
+ breakpoint is 1024px). */
442
+ @media (max-width: 1279px) {
443
+ .cp-docs-bar__menu {
444
+ width: auto;
445
+ flex: 1 1 auto;
446
+ border-right: 0;
447
+ }
448
+
449
+ .cp-docs-bar__center {
450
+ display: none;
451
+ }
452
+
453
+ .cp-docs-bar__outline {
454
+ width: auto;
455
+ padding: 0 12px;
456
+ gap: 6px;
457
+ }
458
+
459
+ /* Hide the "On this page" label on mobile and surface the active
460
+ scrolled-section heading instead — the chevron telegraphs that
461
+ tapping opens a dropdown, and the section text tells the user
462
+ where they are without forcing the outline drawer open. */
463
+ .cp-docs-bar__outline .cp-docs-bar__label {
464
+ display: none;
465
+ }
466
+
467
+ .cp-docs-bar__outline .cp-docs-bar__section {
468
+ display: block;
469
+ }
470
+ }
471
+
472
+ /* ── Gutter alignment — at <=1024px the doc rail beneath the bar
473
+ loses its side borders and frame gutter (see `rail.css`). Mirror
474
+ that here so the bar runs edge-to-edge against the same threshold
475
+ and the two stay visually flush. */
476
+ @media (max-width: 1024px) {
477
+ .cp-docs-bar {
478
+ margin: 0;
479
+ border-left: 0;
480
+ border-right: 0;
481
+ }
482
+ }
483
+
484
+ /* ── Sidebar drawer backdrop mask — rendered by `<CiderpressDocLayout />`
485
+ only when `isSidebarOpen` is true (the outline uses an in-bar
486
+ dropdown, not a drawer). Click closes the drawer.
487
+
488
+ `z-index: 45` sits between the page content (z=0) and the sidebar
489
+ drawer (Rspress's `--rp-z-index-sidebar: 50`), so the drawer
490
+ paints over the mask and clicks on drawer content reach the
491
+ drawer. Stays BELOW the docs bar (55) and header (60) so those
492
+ chrome elements remain visible and interactive. */
493
+ .cp-drawer-mask {
494
+ position: fixed;
495
+ inset: 0;
496
+ z-index: 45;
497
+ background: rgba(0, 0, 0, 0.5);
498
+ backdrop-filter: blur(2px);
499
+ }
500
+
501
+ /* ── Body scroll lock while a drawer is open. ──────────────────── */
502
+ html[data-cp-drawer-open='true'],
503
+ html[data-cp-drawer-open='true'] body {
504
+ overflow: hidden;
505
+ }