@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,243 @@
1
+ /**
2
+ * Home page overrides — hero image sizing, Rspress card/code tweaks.
3
+ *
4
+ * Cascade layer: `ciderpress.overrides` (see styles/layers.css).
5
+ *
6
+ * `!important` inventory (task 8.2):
7
+ * - Before: 24
8
+ * - After: 17
9
+ *
10
+ * Retained `!important` declarations override Rspress styles that are
11
+ * authored outside the `ciderpress.*` layer stack — either unlayered (Rspress's
12
+ * `.rp-home-hero*` component CSS, which beats layered rules in the normal
13
+ * cascade) or inside Rspress's own `@layer rp-base` (e.g. shiki's
14
+ * `[class*=language-]` border-radius). Both cases require `!important` to
15
+ * win from inside `@layer ciderpress.overrides`.
16
+ *
17
+ * Removed `!important` declarations targeted selectors with no competing
18
+ * Rspress rule (`.rp-home-hero__name`, `.rp-home-hero__text`, and the
19
+ * `padding-bottom`/`line-height` properties on `.rp-home-hero__tagline`),
20
+ * so the layer cascade alone is sufficient.
21
+ */
22
+
23
+ @layer ciderpress.overrides {
24
+ /* ── Rspress home hero image sizing ──────────────────────── */
25
+ html .rp-home-hero__image {
26
+ flex: none;
27
+ width: 548px;
28
+ margin-left: 24px;
29
+ }
30
+
31
+ html .rp-home-hero__image-img {
32
+ width: 548px;
33
+ height: auto;
34
+ }
35
+
36
+ /* ── Rspress home hero padding ─────────────────────────── */
37
+ html .rp-home-hero {
38
+ padding-left: 0 !important;
39
+ padding-right: 0 !important;
40
+ }
41
+
42
+ /* ── Rspress home hero container ────────────────────────── */
43
+ html .rp-home-hero__container {
44
+ gap: 16px !important;
45
+ }
46
+
47
+ /* ── Rspress home hero text sizing & spacing ───────────── */
48
+ /* No `!important`: Rspress does not define `.rp-home-hero__name` or
49
+ * `.rp-home-hero__text`, and `.rp-home-hero__tagline` has no competing
50
+ * `padding-bottom` rule, so the layer cascade is sufficient. */
51
+ html .rp-home-hero__name {
52
+ font-size: 1.25rem;
53
+ }
54
+
55
+ html .rp-home-hero__text {
56
+ font-size: 2.5rem;
57
+ margin-bottom: 8px;
58
+ }
59
+
60
+ html .rp-home-hero__tagline {
61
+ padding-bottom: 16px;
62
+ }
63
+
64
+ html .rp-home-hero__actions {
65
+ gap: 1.25rem !important;
66
+ }
67
+
68
+ @media (max-width: 1000px) {
69
+ html .rp-home-hero {
70
+ padding-bottom: 24px !important;
71
+ }
72
+
73
+ html .rp-home-hero__image {
74
+ width: 400px;
75
+ margin-left: 0;
76
+ margin-top: 32px;
77
+ }
78
+
79
+ html .rp-home-hero__image-img {
80
+ width: 400px;
81
+ }
82
+ }
83
+
84
+ @media (max-width: 1184px) {
85
+ html .rp-home-hero {
86
+ padding-left: 16px !important;
87
+ padding-right: 16px !important;
88
+ }
89
+ }
90
+
91
+ /* ── Mobile overrides ────────────────────────────────────── */
92
+ @media (max-width: 768px) {
93
+ html .rp-home-hero__container {
94
+ gap: 8px !important;
95
+ }
96
+
97
+ html .rp-home-hero__image {
98
+ width: 100%;
99
+ max-width: 90vw !important;
100
+ margin-left: 0;
101
+ margin-top: 24px;
102
+ }
103
+
104
+ html .rp-home-hero__image-img {
105
+ width: 100%;
106
+ max-width: 90vw !important;
107
+ }
108
+
109
+ html .rp-home-hero__name {
110
+ font-size: 1.125rem;
111
+ }
112
+
113
+ html .rp-home-hero__text {
114
+ font-size: 2rem;
115
+ }
116
+
117
+ html .rp-home-hero__tagline {
118
+ /* `!important` retained on `font-size` because Rspress defines
119
+ * `.rp-home-hero__tagline { font-size: 1.125rem }` at
120
+ * `(width >= 640px)` and `(width >= 768px)`, which still match at the
121
+ * `max-width: 768px` breakpoint. `line-height` has no competing rule. */
122
+ font-size: 1rem !important;
123
+ line-height: 1.5;
124
+ }
125
+ }
126
+
127
+ /* ── Feature section ───────────────────────────────────────── */
128
+ .cp-feature-section {
129
+ padding: 64px 32px;
130
+ }
131
+
132
+ @media (max-width: 720px) {
133
+ .cp-feature-section {
134
+ padding: 48px 20px;
135
+ }
136
+ }
137
+
138
+ /* Inside doc pages (MDX-driven), the surrounding `.rp-doc` already
139
+ constrains the content column — additional horizontal padding here
140
+ just misaligns the feature grid with the body paragraphs above it.
141
+ Strip it so cards land on the same left edge as prose. */
142
+ .rp-doc .cp-feature-section {
143
+ padding-left: 0;
144
+ padding-right: 0;
145
+ }
146
+
147
+ /* Eyebrow + title above the feature grid (mockup pattern) */
148
+ .cp-feature-section-head {
149
+ text-align: center;
150
+ margin-bottom: 56px;
151
+ max-width: 720px;
152
+ margin-left: auto;
153
+ margin-right: auto;
154
+ }
155
+
156
+ .cp-feature-section-head__eyebrow {
157
+ font-family: var(--cp-font-family-mono);
158
+ font-size: 11px;
159
+ text-transform: uppercase;
160
+ letter-spacing: 0.1em;
161
+ color: var(--cp-c-brand-1);
162
+ margin-bottom: 12px;
163
+ }
164
+
165
+ .cp-feature-section-head__title {
166
+ font-size: clamp(28px, 4vw, 44px);
167
+ font-weight: 600;
168
+ letter-spacing: -0.025em;
169
+ line-height: 1.1;
170
+ margin: 0 0 16px;
171
+ color: var(--cp-c-text-1);
172
+ }
173
+
174
+ .cp-feature-section-head__sub {
175
+ font-size: 17px;
176
+ color: var(--cp-c-text-2);
177
+ margin: 0;
178
+ line-height: 1.55;
179
+ }
180
+
181
+ /* ── Feature grid — hairline-divider grid (mockup pattern) ─── */
182
+ /* The grid has `gap: 1px` on a border-color background so the gap shows
183
+ through as hairlines between cells. Each cell paints its own panel bg. */
184
+ .cp-feature-grid {
185
+ display: grid;
186
+ grid-template-columns: repeat(3, 1fr);
187
+ gap: 1px;
188
+ background: var(--cp-c-border);
189
+ border: 1px solid var(--cp-c-border);
190
+ border-radius: var(--cp-radius-frame);
191
+ overflow: hidden;
192
+ max-width: 1200px;
193
+ margin: 0 auto;
194
+ }
195
+
196
+ @media (max-width: 880px) {
197
+ .cp-feature-grid {
198
+ grid-template-columns: 1fr;
199
+ }
200
+ }
201
+
202
+ .cp-feature-grid__item {
203
+ position: relative;
204
+ background: var(--cp-c-bg-elv);
205
+ transition: background 0.15s ease;
206
+ }
207
+
208
+ .cp-feature-grid__item:hover {
209
+ background: var(--cp-c-bg-soft);
210
+ }
211
+
212
+ /* Strip the inner card chrome; the grid gutter does the work now */
213
+ .cp-feature-grid__item .cp-card,
214
+ .cp-feature-grid__item .cp-feature-card {
215
+ background: transparent !important;
216
+ border: 0 !important;
217
+ border-radius: 0 !important;
218
+ padding: 28px 24px !important;
219
+ box-shadow: none !important;
220
+ height: 100%;
221
+ }
222
+
223
+ .cp-feature-grid__item-wrap {
224
+ height: 100%;
225
+ }
226
+
227
+ /* Span system retained but neutralized — every item takes one grid column. */
228
+ .cp-feature-grid__item--span-2,
229
+ .cp-feature-grid__item--span-3,
230
+ .cp-feature-grid__item--span-4,
231
+ .cp-feature-grid__item--span-6 {
232
+ width: auto;
233
+ }
234
+
235
+ /* ── Code blocks ─────────────────────────────────────────── */
236
+ div[class*='language-'] {
237
+ border-radius: var(--rp-radius) !important;
238
+ }
239
+
240
+ code:not(pre code) {
241
+ border-radius: var(--rp-radius-small);
242
+ }
243
+ }
@@ -0,0 +1,337 @@
1
+ /**
2
+ * Page rail — the structural pattern that bounds the docs body content
3
+ * with hairlines on each side and a thin canvas gutter between the rail
4
+ * and the viewport.
5
+ *
6
+ * Applied to Rspress's `.rp-doc-layout__container` (the flex row that
7
+ * holds sidebar / content / outline). Selectors are prefixed with `html`
8
+ * to win the specificity war against Rspress's default DocLayout CSS,
9
+ * which loads after our overrides in the bundle and would otherwise
10
+ * reset the gutter.
11
+ *
12
+ * Mirrors the approved `gutter` mockup variant.
13
+ */
14
+
15
+ /* ── Token overrides — tighten Rspress defaults to match mockup ── */
16
+ html:root {
17
+ /* Define ciderpress sticky-stack heights at root so the docs bar's
18
+ `top:` and the `--rp-nav-height` override calc in
19
+ `ciderpress-header.css` resolve against the SAME value when a theme
20
+ overrides either token. Without these, both sides only see their
21
+ hard-coded `var(..., 56px)` / `var(..., 46px)` fallbacks. */
22
+ --cp-header-height: 56px;
23
+ --cp-docs-bar-height: 46px;
24
+ /* `--rp-nav-height` drives:
25
+ - sidebar / outline sticky-top (DocLayout/index.css)
26
+ - scroll-padding-top on <html> (styles/base.css) for anchor jumps
27
+ The viewport-blocking stack on docs pages is:
28
+ [ <AnnouncementBar /> ] + [ <CiderpressHeader /> ] + [ <CiderpressDocsBar /> ]
29
+ `--cp-announcement-height` is set by <AnnouncementBar /> itself
30
+ (it injects a `<style>` tag, same pattern Rspress's `<Banner />`
31
+ uses) so it tracks the actual rendered height and collapses to
32
+ `0px` when the bar is dismissed. Defining the calc at `html:root`
33
+ wins over Rspress's `:root` default (`64px`) on specificity. */
34
+ --rp-nav-height: calc(
35
+ var(--cp-header-height) + var(--cp-docs-bar-height) + var(--cp-announcement-height, 0px)
36
+ );
37
+ --rp-sidebar-width: 260px;
38
+ --rp-sidebar-padding: 0px;
39
+ --rp-outline-width: 240px;
40
+ /* Zero out Rspress's `--rp-sidebar-menu-height` (default 46px).
41
+ Rspress consumes it in three places:
42
+ 1. `.rp-doc-layout__sidebar { margin-top: calc(-1 * var(--rp-sidebar-menu-height)) }`
43
+ — pulls the sidebar UP 46px to overlap the `.rp-doc-layout__menu` bar.
44
+ 2. `.rp-doc-layout__outline { margin-top: var(--rp-sidebar-menu-height) }`
45
+ — pushes the outline DOWN 46px to clear that same bar.
46
+ 3. `html { scroll-padding-top: calc(... + var(--rp-sidebar-menu-height)) }`
47
+ — accounts for the bar when scrolling to anchors.
48
+ Our `<CiderpressDocLayout />` doesn't render `.rp-doc-layout__menu`,
49
+ so leaving the token at its default phantom-offsets the rails
50
+ (sidebar's `.cp-sidebar-top` band leaks under `<CiderpressDocsBar />`,
51
+ outline gets an extra 46px of dead space at the top, anchors land
52
+ 46px low). Zero kills all three at the source. */
53
+ --rp-sidebar-menu-height: 0px;
54
+ --rp-content-padding-x: 64px;
55
+ --rp-content-padding-y: 56px;
56
+ /* Set this MUCH wider than typical viewports so Rspress's `.rp-doc-layout__doc`
57
+ fills the available flex space between sidebar and outline. The reading
58
+ width cap lives on the inner doc-container instead — see below. */
59
+ --rp-content-max-width: 100vw;
60
+ /* Zero out Rspress's calculated gap that pushes the sidebar away from
61
+ the rail's left edge and the outline away from the rail's right edge.
62
+ The mockup wants sidebar / content / outline to butt up against each
63
+ other with hairlines as the only separator. */
64
+ --rp-sidebar-margin-left: 0px;
65
+ --rp-outline-margin-right: 0px;
66
+ }
67
+
68
+ html body {
69
+ background: var(--cp-c-bg);
70
+ }
71
+
72
+ /* ── Doc body rail ──────────────────────────────────────── */
73
+ /* `width: auto` overrides Rspress's default `width: 100%` so that the
74
+ horizontal margins actually inset the rail (otherwise margin pushes
75
+ the box past the viewport edge). */
76
+ html .rp-doc-layout__container {
77
+ width: auto;
78
+ margin: 0 var(--cp-frame-gutter);
79
+ background: var(--cp-c-bg);
80
+ border-left: 1px solid var(--cp-c-border);
81
+ border-right: 1px solid var(--cp-c-border);
82
+ }
83
+
84
+ /* Note: `.rp-doc-layout__menu` is no longer rendered at all — see
85
+ `<CiderpressDocLayout />`, our DocLayout override that re-exports
86
+ from the theme entry. `<CiderpressDocsBar />` (inserted via the
87
+ `beforeDoc` slot) replaces it with breadcrumbs + active-section
88
+ chrome. No CSS override needed for the old element. */
89
+
90
+ /* ── Sidebar / content / outline dividers ──────────────── */
91
+ html .rp-doc-layout__sidebar {
92
+ background: var(--cp-c-bg);
93
+ border-right: 1px solid var(--cp-c-border);
94
+ /* Flex column so the bottom band can grow to fill remaining space
95
+ (sidebar layout: nav items stack from the top, bottom band fills
96
+ the rest). No vertical padding — the sticky top/bottom wrappers
97
+ supply their own internal padding so they hug the actual edges
98
+ (sticky `top: 0` / `bottom: 0` would otherwise sit inside the
99
+ padding box and leave a "see-through" gap above/below). The
100
+ `:first-child:not(.cp-sidebar-top)` rule below restores top
101
+ breathing room for nav items when no above-links are configured. */
102
+ display: flex;
103
+ flex-direction: column;
104
+ padding: 0 8px;
105
+ /* Hide the sidebar's scrollbar entirely — modern doc-site pattern.
106
+ Avoids both the reserved scrollbar gutter (which would push the
107
+ bottom band's edge 12px short of the right border) and the visual
108
+ confusion of a scrollbar appearing to extend through the sticky
109
+ bottom band. Scrolling still works via wheel/trackpad/keyboard. */
110
+ scrollbar-gutter: auto;
111
+ scrollbar-width: none;
112
+ }
113
+
114
+ html .rp-doc-layout__sidebar::-webkit-scrollbar {
115
+ display: none;
116
+ }
117
+
118
+ /* ── Sidebar sticky bands ──────────────────────────────────
119
+ * The sidebar itself is the scrolling container; the top and bottom
120
+ * regions sit `position: sticky` against the viewport edges so only the
121
+ * middle nav tree scrolls. Backgrounds are required so the scrolling
122
+ * nav-tree content doesn't bleed through.
123
+ *
124
+ * Wrappers come from `nav/layout.tsx` and only render when there's
125
+ * something to pin (above-links for the top, below-links + promo for
126
+ * the bottom). When neither is configured, the sidebar scrolls cleanly
127
+ * with no empty bands.
128
+ * ────────────────────────────────────────────────────────── */
129
+ html .cp-sidebar-top {
130
+ position: sticky;
131
+ top: 0;
132
+ z-index: 2;
133
+ background: var(--cp-c-bg);
134
+ border-bottom: 1px solid var(--cp-c-divider);
135
+ /* Edge-to-edge horizontal extension over the sidebar's 8px padding
136
+ so the divider hairline spans the full sidebar width. */
137
+ margin: 0 -8px;
138
+ padding: 12px 8px;
139
+ }
140
+
141
+ /* Without a top wrapper, the first nav item butts right against the
142
+ topbar's border-bottom — give it breathing room. */
143
+ html .rp-doc-layout__sidebar > :first-child:not(.cp-sidebar-top) {
144
+ margin-top: 12px;
145
+ }
146
+
147
+ html .cp-sidebar-bottom {
148
+ /* Grow to fill the remaining sidebar space so the nav tree stacks
149
+ from the top and this band occupies everything below it. When the
150
+ nav tree is short, the band is tall and its content (promo +
151
+ below-links) sits at its bottom via `justify-content: flex-end`. */
152
+ flex: 1 0 auto;
153
+ display: flex;
154
+ flex-direction: column;
155
+ justify-content: flex-end;
156
+ /* When the sidebar scrolls (nav tree taller than viewport), this band
157
+ stays glued to the viewport bottom so the promo is always visible.
158
+ `z-index: 3` so the band paints above the thin overlay scrollbar
159
+ thumb so it doesn't appear to "go through" the band region. */
160
+ position: sticky;
161
+ bottom: 0;
162
+ z-index: 3;
163
+ background: var(--cp-c-bg);
164
+ border-top: 1px solid var(--cp-c-divider);
165
+ /* Negative left/right margins extend the band edge-to-edge over the
166
+ sidebar's horizontal padding so the divider hairline (and the
167
+ band's bg) run flush to the sidebar's right border, covering any
168
+ scrollbar lane that would otherwise show through. */
169
+ margin: 0 -8px;
170
+ padding: 12px 8px;
171
+ }
172
+
173
+ html .rp-doc-layout__outline {
174
+ background: var(--cp-c-bg);
175
+ border-left: 1px solid var(--cp-c-border);
176
+ box-shadow: none;
177
+ /* `padding-top: 12px` matches the rhythm of `.cp-sidebar-top` /
178
+ first-child margin on the left sidebar so the first TOC link and
179
+ the first nav link land at the same y. */
180
+ padding: 12px 16px;
181
+ }
182
+
183
+ /* Hide the outline's built-in "On this page" title — the same label
184
+ lives in <CiderpressDocsBar /> above it, so showing both is
185
+ redundant. (The Rspress `<ReadPercent />` indicator nested inside
186
+ the title goes with it; not worth preserving for a doc rail that
187
+ already lists every heading.) */
188
+ html .rp-outline__title {
189
+ display: none;
190
+ }
191
+
192
+ html .rp-doc-layout__doc {
193
+ background: var(--cp-c-bg);
194
+ }
195
+
196
+ /* Cap the prose reading width INSIDE the doc-container — sidebar and
197
+ outline stay pinned to the rail edges; the gutter lives here as
198
+ centered whitespace around the article body.
199
+
200
+ `width: 100%` + `min-width: 0` pin the container to its parent's
201
+ cross-axis size and break the flex `min-content` calculation so
202
+ wide inner elements (Shiki code blocks, ASCII trees) scroll inside
203
+ themselves (their own `overflow-x: auto`) instead of pushing the
204
+ container past `.rp-doc-layout__doc`'s width, which otherwise
205
+ clips prose at the viewport edge. */
206
+ html .rp-doc-layout__doc-container {
207
+ width: 100%;
208
+ max-width: var(--cp-content-reading-max, 1000px);
209
+ margin: 0 auto;
210
+ min-width: 0;
211
+ }
212
+
213
+ /* ── H1 — match mockup (36px / weight 600 / tight line-height) ── */
214
+ html .rp-doc-layout__doc-container h1,
215
+ html .rp-doc h1 {
216
+ font-size: 36px;
217
+ font-weight: 600;
218
+ letter-spacing: -0.025em;
219
+ line-height: 1.1;
220
+ }
221
+
222
+ /* ── First H2 divider — tighten Rspress's default spacing.
223
+ Rspress paints a hairline as `::before` on the first h2 in `.rp-doc`
224
+ with `margin-top: 3rem` on the h2 and `margin-bottom: 3rem` on the
225
+ pseudo, leaving the line floating in ~48px of dead space on each side.
226
+ Pull both gaps in so the divider reads as a clean separator between
227
+ the intro paragraph and the first heading. */
228
+ html .rp-doc h2:first-of-type {
229
+ margin-top: 1.5rem;
230
+ }
231
+
232
+ html .rp-doc h2:first-of-type::before {
233
+ margin-bottom: 1rem;
234
+ }
235
+
236
+ /* ── Right rail (TOC) typography — tighten to mockup ── */
237
+ html .rp-doc-layout__outline a,
238
+ html .rp-aside a {
239
+ font-size: 12.5px;
240
+ line-height: 1.4;
241
+ }
242
+
243
+ /* ── Topbar ────────────────────────────────────────────── */
244
+ /* All topbar chrome is now rendered by `<CiderpressHeader />`. The
245
+ Rspress `.rp-nav` is hidden by a rule inside that component's CSS,
246
+ so no overrides are required here. */
247
+
248
+ /* Tighten nav typography to match the mockup */
249
+ html .rp-nav-menu__item,
250
+ html .rp-nav-menu a,
251
+ html .rp-nav__menu a {
252
+ font-size: 13px;
253
+ }
254
+
255
+ /* Pin `font-weight` AND `font-size` across ALL nav item states (idle,
256
+ hover, active) so the box never reflows when the active page changes
257
+ or on hover.
258
+
259
+ CRITICAL: Rspress styles the INNER `.rp-nav-menu__item__container`
260
+ element (not the outer `__item`) and ships rules with `font-size: 14px`
261
+ on `:hover` and `--active` states + `font-weight: 600` on the mobile
262
+ screen menu active. Without overriding the container, color flips on
263
+ hover/active drag the text along with a size + weight change, which
264
+ reflows the topbar layout.
265
+
266
+ Color change alone marks state — pin every size/weight token. */
267
+ html .rp-nav-menu__item,
268
+ html .rp-nav-menu__item .rp-nav-menu__item__container,
269
+ html .rp-nav-menu__item:hover .rp-nav-menu__item__container,
270
+ html .rp-nav-menu__item--active .rp-nav-menu__item__container,
271
+ html .rp-nav-menu a,
272
+ html .rp-nav__menu a,
273
+ html .rp-hover-group__item,
274
+ html .rp-hover-group__item:hover,
275
+ html .rp-hover-group__item--active,
276
+ html .rp-nav-screen-menu-item,
277
+ html .rp-nav-screen-menu-item:hover,
278
+ html .rp-nav-screen-menu-item--active {
279
+ font-size: 13px;
280
+ font-weight: 500;
281
+ }
282
+
283
+ /* ── Landing page navbar — wraps the rail with vertical hairlines so
284
+ the lines run continuously from the top of the navbar to the bottom
285
+ of the footer. Detected by the presence of `.cp-page-rail` in the
286
+ document. ───────────────────────────────────────────── */
287
+ html body:has(.cp-page-rail) .rspress-nav,
288
+ html body:has(.cp-page-rail) .rp-nav {
289
+ border-left: 1px solid var(--cp-c-border);
290
+ border-right: 1px solid var(--cp-c-border);
291
+ margin: 0 var(--cp-frame-gutter);
292
+ max-width: var(--cp-landing-max-width);
293
+ }
294
+
295
+ @media (min-width: 1248px) {
296
+ html body:has(.cp-page-rail) .rspress-nav,
297
+ html body:has(.cp-page-rail) .rp-nav {
298
+ margin: 0 auto;
299
+ }
300
+ }
301
+
302
+ /* ── Footer ────────────────────────────────────────────── */
303
+ /* Footer inherits the page background — only the hairline at the top
304
+ separates it from the content above. */
305
+ html .cp-site-footer {
306
+ background: transparent;
307
+ border-top: 1px solid var(--cp-c-border);
308
+ }
309
+
310
+ /* The docs rail keeps its 12px frame gutter at all viewport widths.
311
+ Sidebar and outline stay pinned to the rail's edges; only the prose
312
+ inside the doc-container is capped + centered to keep reading width
313
+ comfortable at wide viewports. */
314
+
315
+ /* ── Mobile: drop the gutter + vertical hairlines on the rail so it
316
+ goes edge-to-edge with the header and docs bar above it. Breakpoint
317
+ matches `<CiderpressHeader />`, `<CiderpressNavHamburger />`, and
318
+ `<CiderpressDocsBar />` (all at `max-width: 1024px`) so the entire
319
+ top-of-page stack transitions to full-bleed in one beat instead of
320
+ leaving the rail inset under a full-bleed docs bar. */
321
+ @media (max-width: 1024px) {
322
+ html .rp-doc-layout__container,
323
+ html .rp-doc-layout__menu {
324
+ margin: 0;
325
+ border-left: 0;
326
+ border-right: 0;
327
+ }
328
+ }
329
+
330
+ /* At very narrow viewports, tighten the prose's inner horizontal
331
+ padding so the article body keeps breathing room without eating into
332
+ the reading width. */
333
+ @media (max-width: 720px) {
334
+ html:root {
335
+ --rp-content-padding-x: 20px;
336
+ }
337
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Rspress structural overrides.
3
+ *
4
+ * Color definitions have moved to theme files (styles/themes/*.css).
5
+ * This file retains only structural overrides: fonts, layout, LLMs UI.
6
+ *
7
+ * Cascade layer: `ciderpress.overrides` (see styles/layers.css).
8
+ *
9
+ * `!important` inventory (task 8.2):
10
+ * - Before: 0
11
+ * - After: 0
12
+ *
13
+ * No `!important` declarations are needed here — `html .rp-*` specificity
14
+ * combined with the `ciderpress.overrides` layer is sufficient against Rspress's
15
+ * font and LLMs UI defaults.
16
+ */
17
+
18
+ @layer ciderpress.overrides {
19
+ html:root {
20
+ /* Fonts — map Geist into Rspress's font stack */
21
+ --rp-font-family-base: 'Geist', ui-sans-serif, system-ui, sans-serif;
22
+ --rp-font-family-mono: 'Geist Mono', ui-monospace, 'SFMono-Regular', monospace;
23
+ }
24
+
25
+ /* ── LLMs UI — Ciderpress mounts its own `<LlmsContainer />` inside
26
+ `<CiderpressDocsBar />`. The H1 placement is suppressed natively
27
+ by setting `themeConfig.llmsUI.placement: 'outline'` (see
28
+ `packages/ui/src/config.ts`). That moves Rspress's auto-render
29
+ into the outline rail (`<LlmsCopyRow />` + `<LlmsOpenRow />`),
30
+ which we then hide here so the bar is the single source of
31
+ truth. ───────────────────────────────────────────────────── */
32
+ html .rp-outline .rp-outline__action-row,
33
+ html .rp-outline .rp-outline__open-in-wrapper {
34
+ display: none;
35
+ }
36
+
37
+ /* ── Buttons — pill shape ─────────────────────────────────── */
38
+ html .rp-button--medium,
39
+ html .rp-button--big {
40
+ border-radius: 9999px;
41
+ }
42
+
43
+ /* ── Tables ──────────────────────────────────────────────── */
44
+ html table {
45
+ border-radius: var(--rp-radius);
46
+ overflow: hidden;
47
+ }
48
+ }
49
+
50
+ /* ── Single-variant themes — hide the appearance toggle when the
51
+ active theme only ships one variant.
52
+
53
+ Intentionally **unlayered**: Rspress ships its appearance toggle styles
54
+ unlayered, and unlayered rules always win over layered ones regardless
55
+ of specificity. Hoisting this rule out of `@layer ciderpress.overrides` is
56
+ the only way to win the cascade without `!important`. ────────────── */
57
+ html[data-cp-variants='dark'] .rp-switch-appearance,
58
+ html[data-cp-variants='light'] .rp-switch-appearance,
59
+ html[data-cp-variants='dark'] .rp-nav-screen-appearance,
60
+ html[data-cp-variants='light'] .rp-nav-screen-appearance {
61
+ display: none;
62
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Dark scrollbar overrides.
3
+ */
4
+
5
+ .rp-dark ::-webkit-scrollbar,
6
+ html[data-dark='true'] ::-webkit-scrollbar {
7
+ width: 6px;
8
+ height: 6px;
9
+ }
10
+
11
+ .rp-dark ::-webkit-scrollbar-track,
12
+ html[data-dark='true'] ::-webkit-scrollbar-track {
13
+ background: transparent;
14
+ }
15
+
16
+ .rp-dark ::-webkit-scrollbar-thumb,
17
+ html[data-dark='true'] ::-webkit-scrollbar-thumb {
18
+ background: var(--cp-c-scrollbar-thumb);
19
+ border-radius: 3px;
20
+ }
21
+
22
+ .rp-dark ::-webkit-scrollbar-thumb:hover,
23
+ html[data-dark='true'] ::-webkit-scrollbar-thumb:hover {
24
+ background: var(--cp-c-scrollbar-thumb-hover);
25
+ }