@autumnsgrove/groveengine 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/dist/auth/index.d.ts +2 -0
  2. package/dist/auth/index.js +5 -0
  3. package/dist/components/admin/GutterManager.svelte +4 -4
  4. package/dist/components/admin/MarkdownEditor.svelte +381 -1311
  5. package/dist/components/admin/MarkdownEditor.svelte.d.ts +2 -8
  6. package/dist/components/admin/composables/index.d.ts +7 -0
  7. package/dist/components/admin/composables/index.js +12 -0
  8. package/dist/components/admin/composables/useAmbientSounds.svelte.d.ts +53 -0
  9. package/dist/components/admin/composables/useAmbientSounds.svelte.js +192 -0
  10. package/dist/components/admin/composables/useCommandPalette.svelte.d.ts +17 -0
  11. package/dist/components/admin/composables/useCommandPalette.svelte.js +118 -0
  12. package/dist/components/admin/composables/useDraftManager.svelte.d.ts +17 -0
  13. package/dist/components/admin/composables/useDraftManager.svelte.js +154 -0
  14. package/dist/components/admin/composables/useEditorTheme.svelte.d.ts +195 -0
  15. package/dist/components/admin/composables/useEditorTheme.svelte.js +182 -0
  16. package/dist/components/admin/composables/useSlashCommands.svelte.d.ts +32 -0
  17. package/dist/components/admin/composables/useSlashCommands.svelte.js +166 -0
  18. package/dist/components/admin/composables/useSnippets.svelte.d.ts +5 -0
  19. package/dist/components/admin/composables/useSnippets.svelte.js +122 -0
  20. package/dist/components/admin/composables/useWritingSession.svelte.d.ts +13 -0
  21. package/dist/components/admin/composables/useWritingSession.svelte.js +100 -0
  22. package/dist/components/custom/ContentWithGutter.svelte +1 -1
  23. package/dist/components/custom/GutterItem.svelte +2 -2
  24. package/dist/config/ai-models.d.ts +25 -0
  25. package/dist/config/ai-models.js +50 -0
  26. package/dist/config/index.d.ts +1 -0
  27. package/dist/config/index.js +4 -0
  28. package/dist/index.d.ts +5 -5
  29. package/dist/index.js +6 -6
  30. package/dist/server/index.d.ts +1 -0
  31. package/dist/server/index.js +4 -0
  32. package/dist/ui/components/charts/ActivityOverview.svelte +293 -0
  33. package/dist/ui/components/charts/ActivityOverview.svelte.d.ts +12 -0
  34. package/dist/ui/components/charts/LOCBar.svelte +129 -0
  35. package/dist/ui/components/charts/LOCBar.svelte.d.ts +21 -0
  36. package/dist/ui/components/charts/RepoBreakdown.svelte +136 -0
  37. package/dist/ui/components/charts/RepoBreakdown.svelte.d.ts +16 -0
  38. package/dist/ui/components/charts/Sparkline.svelte +139 -0
  39. package/dist/ui/components/charts/Sparkline.svelte.d.ts +6 -0
  40. package/dist/ui/components/charts/index.d.ts +5 -0
  41. package/dist/ui/components/charts/index.js +11 -0
  42. package/dist/ui/components/content/PlanCard.svelte +91 -0
  43. package/dist/ui/components/content/PlanCard.svelte.d.ts +13 -0
  44. package/dist/ui/components/content/ProductCard.svelte +125 -0
  45. package/dist/ui/components/content/ProductCard.svelte.d.ts +14 -0
  46. package/dist/ui/components/content/SearchCard.svelte +60 -0
  47. package/dist/ui/components/content/SearchCard.svelte.d.ts +10 -0
  48. package/dist/ui/components/content/index.d.ts +4 -0
  49. package/dist/ui/components/content/index.js +10 -0
  50. package/dist/ui/components/forms/SearchInput.svelte +89 -0
  51. package/dist/ui/components/forms/SearchInput.svelte.d.ts +11 -0
  52. package/dist/ui/components/forms/index.d.ts +2 -0
  53. package/dist/ui/components/forms/index.js +8 -0
  54. package/dist/ui/components/gallery/index.d.ts +5 -0
  55. package/dist/ui/components/gallery/index.js +13 -0
  56. package/dist/ui/components/icons/IconLegend.svelte +83 -0
  57. package/dist/ui/components/icons/IconLegend.svelte.d.ts +11 -0
  58. package/dist/ui/components/icons/Icons.svelte +115 -0
  59. package/dist/ui/components/icons/Icons.svelte.d.ts +8 -0
  60. package/dist/ui/components/icons/index.d.ts +3 -0
  61. package/dist/ui/components/icons/index.js +9 -0
  62. package/dist/ui/components/indicators/CreditBalance.svelte +67 -0
  63. package/dist/ui/components/indicators/CreditBalance.svelte.d.ts +9 -0
  64. package/dist/ui/components/indicators/ScoreBar.svelte +63 -0
  65. package/dist/ui/components/indicators/ScoreBar.svelte.d.ts +9 -0
  66. package/dist/ui/components/indicators/StatusBadge.svelte +46 -0
  67. package/dist/ui/components/indicators/StatusBadge.svelte.d.ts +7 -0
  68. package/dist/ui/components/indicators/index.d.ts +4 -0
  69. package/dist/ui/components/indicators/index.js +10 -0
  70. package/dist/{components/ui → ui/components/primitives}/accordion/accordion-content.svelte +1 -1
  71. package/dist/{components/ui → ui/components/primitives}/accordion/accordion-item.svelte +1 -1
  72. package/dist/{components/ui → ui/components/primitives}/accordion/accordion-trigger.svelte +1 -1
  73. package/dist/ui/components/primitives/badge/badge.svelte +50 -0
  74. package/dist/ui/components/primitives/badge/badge.svelte.d.ts +60 -0
  75. package/dist/ui/components/primitives/badge/index.d.ts +2 -0
  76. package/dist/ui/components/primitives/badge/index.js +2 -0
  77. package/dist/ui/components/primitives/button/button.svelte +82 -0
  78. package/dist/ui/components/primitives/button/button.svelte.d.ts +132 -0
  79. package/dist/ui/components/primitives/button/index.d.ts +2 -0
  80. package/dist/ui/components/primitives/button/index.js +4 -0
  81. package/dist/ui/components/primitives/card/card-content.svelte +16 -0
  82. package/dist/ui/components/primitives/card/card-content.svelte.d.ts +5 -0
  83. package/dist/ui/components/primitives/card/card-description.svelte +16 -0
  84. package/dist/ui/components/primitives/card/card-description.svelte.d.ts +5 -0
  85. package/dist/ui/components/primitives/card/card-footer.svelte +16 -0
  86. package/dist/ui/components/primitives/card/card-footer.svelte.d.ts +5 -0
  87. package/dist/ui/components/primitives/card/card-header.svelte +16 -0
  88. package/dist/ui/components/primitives/card/card-header.svelte.d.ts +5 -0
  89. package/dist/ui/components/primitives/card/card-title.svelte +25 -0
  90. package/dist/ui/components/primitives/card/card-title.svelte.d.ts +8 -0
  91. package/dist/ui/components/primitives/card/card.svelte +20 -0
  92. package/dist/ui/components/primitives/card/card.svelte.d.ts +5 -0
  93. package/dist/ui/components/primitives/card/index.d.ts +7 -0
  94. package/dist/ui/components/primitives/card/index.js +9 -0
  95. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-content.svelte +1 -1
  96. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-description.svelte +1 -1
  97. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-footer.svelte +1 -1
  98. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-header.svelte +1 -1
  99. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-overlay.svelte +1 -1
  100. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-title.svelte +1 -1
  101. package/dist/ui/components/primitives/input/index.d.ts +2 -0
  102. package/dist/ui/components/primitives/input/index.js +4 -0
  103. package/dist/ui/components/primitives/input/input.svelte +46 -0
  104. package/dist/ui/components/primitives/input/input.svelte.d.ts +13 -0
  105. package/dist/{components/ui → ui/components/primitives}/select/select-content.svelte +1 -1
  106. package/dist/{components/ui → ui/components/primitives}/select/select-group-heading.svelte +1 -1
  107. package/dist/{components/ui → ui/components/primitives}/select/select-item.svelte +1 -1
  108. package/dist/{components/ui → ui/components/primitives}/select/select-scroll-down-button.svelte +1 -1
  109. package/dist/{components/ui → ui/components/primitives}/select/select-scroll-up-button.svelte +1 -1
  110. package/dist/{components/ui → ui/components/primitives}/select/select-separator.svelte +1 -1
  111. package/dist/{components/ui → ui/components/primitives}/select/select-trigger.svelte +1 -1
  112. package/dist/ui/components/primitives/separator/index.d.ts +2 -0
  113. package/dist/ui/components/primitives/separator/index.js +4 -0
  114. package/dist/ui/components/primitives/separator/separator.svelte +22 -0
  115. package/dist/ui/components/primitives/separator/separator.svelte.d.ts +4 -0
  116. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-content.svelte +1 -1
  117. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-description.svelte +1 -1
  118. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-footer.svelte +1 -1
  119. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-header.svelte +1 -1
  120. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-overlay.svelte +1 -1
  121. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-title.svelte +1 -1
  122. package/dist/ui/components/primitives/skeleton/index.d.ts +2 -0
  123. package/dist/ui/components/primitives/skeleton/index.js +4 -0
  124. package/dist/ui/components/primitives/skeleton/skeleton.svelte +17 -0
  125. package/dist/ui/components/primitives/skeleton/skeleton.svelte.d.ts +5 -0
  126. package/dist/{components/ui → ui/components/primitives}/table/table-body.svelte +1 -1
  127. package/dist/{components/ui → ui/components/primitives}/table/table-caption.svelte +1 -1
  128. package/dist/{components/ui → ui/components/primitives}/table/table-cell.svelte +1 -1
  129. package/dist/{components/ui → ui/components/primitives}/table/table-footer.svelte +1 -1
  130. package/dist/{components/ui → ui/components/primitives}/table/table-head.svelte +1 -1
  131. package/dist/{components/ui → ui/components/primitives}/table/table-header.svelte +1 -1
  132. package/dist/{components/ui → ui/components/primitives}/table/table-row.svelte +1 -1
  133. package/dist/{components/ui → ui/components/primitives}/table/table.svelte +1 -1
  134. package/dist/{components/ui → ui/components/primitives}/tabs/tabs-content.svelte +1 -1
  135. package/dist/{components/ui → ui/components/primitives}/tabs/tabs-list.svelte +1 -1
  136. package/dist/{components/ui → ui/components/primitives}/tabs/tabs-trigger.svelte +1 -1
  137. package/dist/ui/components/primitives/textarea/index.d.ts +2 -0
  138. package/dist/ui/components/primitives/textarea/index.js +4 -0
  139. package/dist/ui/components/primitives/textarea/textarea.svelte +24 -0
  140. package/dist/ui/components/primitives/textarea/textarea.svelte.d.ts +6 -0
  141. package/dist/ui/components/states/EmptyState.svelte +28 -0
  142. package/dist/ui/components/states/EmptyState.svelte.d.ts +10 -0
  143. package/dist/ui/components/states/Loading.svelte +62 -0
  144. package/dist/ui/components/states/Loading.svelte.d.ts +7 -0
  145. package/dist/ui/components/states/LoadingSkeleton.svelte +46 -0
  146. package/dist/ui/components/states/LoadingSkeleton.svelte.d.ts +8 -0
  147. package/dist/ui/components/states/ThemeToggle.svelte +138 -0
  148. package/dist/ui/components/states/ThemeToggle.svelte.d.ts +6 -0
  149. package/dist/ui/components/states/index.d.ts +5 -0
  150. package/dist/ui/components/states/index.js +11 -0
  151. package/dist/{components → ui/components}/ui/Accordion.svelte +1 -1
  152. package/dist/ui/components/ui/Badge.svelte +52 -0
  153. package/dist/ui/components/ui/Badge.svelte.d.ts +28 -0
  154. package/dist/ui/components/ui/Button.svelte +77 -0
  155. package/dist/ui/components/ui/Button.svelte.d.ts +34 -0
  156. package/dist/ui/components/ui/Card.svelte +102 -0
  157. package/dist/ui/components/ui/Card.svelte.d.ts +46 -0
  158. package/dist/ui/components/ui/CollapsibleSection.svelte +65 -0
  159. package/dist/ui/components/ui/CollapsibleSection.svelte.d.ts +10 -0
  160. package/dist/{components → ui/components}/ui/Dialog.svelte +1 -1
  161. package/dist/ui/components/ui/Input.svelte +81 -0
  162. package/dist/ui/components/ui/Input.svelte.d.ts +35 -0
  163. package/dist/{components → ui/components}/ui/Select.svelte +1 -1
  164. package/dist/{components → ui/components}/ui/Sheet.svelte +1 -1
  165. package/dist/ui/components/ui/Skeleton.svelte +31 -0
  166. package/dist/ui/components/ui/Skeleton.svelte.d.ts +26 -0
  167. package/dist/ui/components/ui/Spinner.svelte +45 -0
  168. package/dist/ui/components/ui/Spinner.svelte.d.ts +15 -0
  169. package/dist/{components → ui/components}/ui/Table.svelte +2 -2
  170. package/dist/{components → ui/components}/ui/Table.svelte.d.ts +1 -1
  171. package/dist/{components → ui/components}/ui/Tabs.svelte +2 -2
  172. package/dist/ui/components/ui/Textarea.svelte +81 -0
  173. package/dist/ui/components/ui/Textarea.svelte.d.ts +35 -0
  174. package/dist/{components → ui/components}/ui/Toast.svelte +1 -1
  175. package/dist/ui/components/ui/index.d.ts +18 -0
  176. package/dist/ui/components/ui/index.js +28 -0
  177. package/dist/{components → ui/components}/ui/toast.d.ts +1 -1
  178. package/dist/{components → ui/components}/ui/toast.js +2 -2
  179. package/dist/ui/index.d.ts +10 -0
  180. package/dist/ui/index.js +22 -0
  181. package/dist/ui/stores/theme.d.ts +12 -0
  182. package/dist/ui/stores/theme.js +52 -0
  183. package/dist/ui/styles/content.css +514 -0
  184. package/dist/ui/styles/grove.css +715 -0
  185. package/dist/ui/styles/tokens.css +429 -0
  186. package/dist/ui/tailwind.preset.d.ts +340 -0
  187. package/dist/ui/tailwind.preset.js +441 -0
  188. package/dist/ui/tokens/animation.d.ts +417 -0
  189. package/dist/ui/tokens/animation.js +139 -0
  190. package/dist/ui/tokens/colors.d.ts +183 -0
  191. package/dist/ui/tokens/colors.js +97 -0
  192. package/dist/ui/tokens/effects.d.ts +111 -0
  193. package/dist/ui/tokens/effects.js +61 -0
  194. package/dist/ui/tokens/index.d.ts +6 -0
  195. package/dist/ui/tokens/index.js +19 -0
  196. package/dist/ui/tokens/spacing.d.ts +89 -0
  197. package/dist/ui/tokens/spacing.js +49 -0
  198. package/dist/ui/tokens/typography.d.ts +85 -0
  199. package/dist/ui/tokens/typography.js +68 -0
  200. package/dist/ui/utils/cn.d.ts +13 -0
  201. package/dist/ui/utils/cn.js +24 -0
  202. package/dist/ui/utils/index.d.ts +2 -0
  203. package/dist/ui/utils/index.js +8 -0
  204. package/dist/utils/index.d.ts +11 -0
  205. package/dist/utils/index.js +14 -0
  206. package/dist/utils/markdown.d.ts +11 -0
  207. package/dist/utils/markdown.js +25 -0
  208. package/dist/utils/sanitize.js +2 -3
  209. package/package.json +73 -10
  210. package/dist/components/ui/index.d.ts +0 -14
  211. package/dist/components/ui/index.js +0 -18
  212. /package/dist/{components → ui/components}/gallery/ImageGallery.svelte +0 -0
  213. /package/dist/{components → ui/components}/gallery/ImageGallery.svelte.d.ts +0 -0
  214. /package/dist/{components → ui/components}/gallery/Lightbox.svelte +0 -0
  215. /package/dist/{components → ui/components}/gallery/Lightbox.svelte.d.ts +0 -0
  216. /package/dist/{components → ui/components}/gallery/LightboxCaption.svelte +0 -0
  217. /package/dist/{components → ui/components}/gallery/LightboxCaption.svelte.d.ts +0 -0
  218. /package/dist/{components → ui/components}/gallery/ZoomableImage.svelte +0 -0
  219. /package/dist/{components → ui/components}/gallery/ZoomableImage.svelte.d.ts +0 -0
  220. /package/dist/{components/ui → ui/components/primitives}/accordion/accordion-content.svelte.d.ts +0 -0
  221. /package/dist/{components/ui → ui/components/primitives}/accordion/accordion-item.svelte.d.ts +0 -0
  222. /package/dist/{components/ui → ui/components/primitives}/accordion/accordion-trigger.svelte.d.ts +0 -0
  223. /package/dist/{components/ui → ui/components/primitives}/accordion/index.d.ts +0 -0
  224. /package/dist/{components/ui → ui/components/primitives}/accordion/index.js +0 -0
  225. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-content.svelte.d.ts +0 -0
  226. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-description.svelte.d.ts +0 -0
  227. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-footer.svelte.d.ts +0 -0
  228. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-header.svelte.d.ts +0 -0
  229. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-overlay.svelte.d.ts +0 -0
  230. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-title.svelte.d.ts +0 -0
  231. /package/dist/{components/ui → ui/components/primitives}/dialog/index.d.ts +0 -0
  232. /package/dist/{components/ui → ui/components/primitives}/dialog/index.js +0 -0
  233. /package/dist/{components/ui → ui/components/primitives}/select/index.d.ts +0 -0
  234. /package/dist/{components/ui → ui/components/primitives}/select/index.js +0 -0
  235. /package/dist/{components/ui → ui/components/primitives}/select/select-content.svelte.d.ts +0 -0
  236. /package/dist/{components/ui → ui/components/primitives}/select/select-group-heading.svelte.d.ts +0 -0
  237. /package/dist/{components/ui → ui/components/primitives}/select/select-item.svelte.d.ts +0 -0
  238. /package/dist/{components/ui → ui/components/primitives}/select/select-scroll-down-button.svelte.d.ts +0 -0
  239. /package/dist/{components/ui → ui/components/primitives}/select/select-scroll-up-button.svelte.d.ts +0 -0
  240. /package/dist/{components/ui → ui/components/primitives}/select/select-separator.svelte.d.ts +0 -0
  241. /package/dist/{components/ui → ui/components/primitives}/select/select-trigger.svelte.d.ts +0 -0
  242. /package/dist/{components/ui → ui/components/primitives}/sheet/index.d.ts +0 -0
  243. /package/dist/{components/ui → ui/components/primitives}/sheet/index.js +0 -0
  244. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-content.svelte.d.ts +0 -0
  245. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-description.svelte.d.ts +0 -0
  246. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-footer.svelte.d.ts +0 -0
  247. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-header.svelte.d.ts +0 -0
  248. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-overlay.svelte.d.ts +0 -0
  249. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-title.svelte.d.ts +0 -0
  250. /package/dist/{components/ui → ui/components/primitives}/table/index.d.ts +0 -0
  251. /package/dist/{components/ui → ui/components/primitives}/table/index.js +0 -0
  252. /package/dist/{components/ui → ui/components/primitives}/table/table-body.svelte.d.ts +0 -0
  253. /package/dist/{components/ui → ui/components/primitives}/table/table-caption.svelte.d.ts +0 -0
  254. /package/dist/{components/ui → ui/components/primitives}/table/table-cell.svelte.d.ts +0 -0
  255. /package/dist/{components/ui → ui/components/primitives}/table/table-footer.svelte.d.ts +0 -0
  256. /package/dist/{components/ui → ui/components/primitives}/table/table-head.svelte.d.ts +0 -0
  257. /package/dist/{components/ui → ui/components/primitives}/table/table-header.svelte.d.ts +0 -0
  258. /package/dist/{components/ui → ui/components/primitives}/table/table-row.svelte.d.ts +0 -0
  259. /package/dist/{components/ui → ui/components/primitives}/table/table.svelte.d.ts +0 -0
  260. /package/dist/{components/ui → ui/components/primitives}/tabs/index.d.ts +0 -0
  261. /package/dist/{components/ui → ui/components/primitives}/tabs/index.js +0 -0
  262. /package/dist/{components/ui → ui/components/primitives}/tabs/tabs-content.svelte.d.ts +0 -0
  263. /package/dist/{components/ui → ui/components/primitives}/tabs/tabs-list.svelte.d.ts +0 -0
  264. /package/dist/{components/ui → ui/components/primitives}/tabs/tabs-trigger.svelte.d.ts +0 -0
  265. /package/dist/{components → ui/components}/ui/Accordion.svelte.d.ts +0 -0
  266. /package/dist/{components → ui/components}/ui/Dialog.svelte.d.ts +0 -0
  267. /package/dist/{components → ui/components}/ui/Select.svelte.d.ts +0 -0
  268. /package/dist/{components → ui/components}/ui/Sheet.svelte.d.ts +0 -0
  269. /package/dist/{components → ui/components}/ui/Tabs.svelte.d.ts +0 -0
  270. /package/dist/{components → ui/components}/ui/Toast.svelte.d.ts +0 -0
@@ -0,0 +1,514 @@
1
+ /**
2
+ * Shared Content Styles
3
+ *
4
+ * Used by:
5
+ * - src/routes/about/+page.svelte
6
+ * - src/routes/blog/[slug]/+page.svelte
7
+ *
8
+ * Import this file to get consistent layout and typography styles
9
+ * for content pages with optional gutter sidebars.
10
+ */
11
+
12
+ /* ==========================================================================
13
+ Layout Grid System
14
+ ========================================================================== */
15
+
16
+ .content-layout {
17
+ max-width: 800px;
18
+ margin: 0 auto;
19
+ }
20
+
21
+ .content-layout.has-gutters {
22
+ display: grid;
23
+ grid-template-columns: 1fr;
24
+ max-width: 1400px;
25
+ gap: 2rem;
26
+ }
27
+
28
+ /* Desktop: Both gutters */
29
+ @media (min-width: 1200px) {
30
+ .content-layout.has-both-gutters {
31
+ grid-template-columns: 240px 1fr 200px;
32
+ }
33
+
34
+ .content-layout.has-left-gutter:not(.has-both-gutters) {
35
+ grid-template-columns: 240px 1fr;
36
+ max-width: 1100px;
37
+ }
38
+
39
+ .content-layout.has-right-gutter:not(.has-both-gutters) {
40
+ grid-template-columns: 1fr 200px;
41
+ max-width: 1000px;
42
+ }
43
+ }
44
+
45
+ /* Tablet: Both gutters */
46
+ @media (min-width: 769px) and (max-width: 1199px) {
47
+ .content-layout.has-both-gutters {
48
+ grid-template-columns: 200px 1fr 200px;
49
+ max-width: 1200px;
50
+ }
51
+
52
+ .content-layout.has-left-gutter:not(.has-both-gutters) {
53
+ grid-template-columns: 200px 1fr;
54
+ max-width: 900px;
55
+ }
56
+
57
+ .content-layout.has-right-gutter:not(.has-both-gutters) {
58
+ grid-template-columns: 1fr 200px;
59
+ max-width: 900px;
60
+ }
61
+
62
+ /* Hide mobile gutter content since left gutter container is visible */
63
+ .mobile-gutter-content,
64
+ .mobile-gutter-inline {
65
+ display: none !important;
66
+ float: none;
67
+ }
68
+ }
69
+
70
+ /* ==========================================================================
71
+ Visibility Utilities
72
+ ========================================================================== */
73
+
74
+ .desktop-only {
75
+ display: none;
76
+ }
77
+
78
+ @media (min-width: 769px) {
79
+ .desktop-only {
80
+ display: block;
81
+ }
82
+ }
83
+
84
+ /* ==========================================================================
85
+ Mobile Gutter Content
86
+ ========================================================================== */
87
+
88
+ .mobile-gutter-content {
89
+ display: block;
90
+ margin: 0 auto 2rem auto;
91
+ padding: 1rem;
92
+ background: #f5f5f5;
93
+ border-radius: 8px;
94
+ transition: background-color 0.3s ease;
95
+ text-align: center;
96
+ }
97
+
98
+ .mobile-gutter-inline {
99
+ float: right;
100
+ clear: right;
101
+ width: 35%;
102
+ max-width: 250px;
103
+ min-width: 120px;
104
+ margin: 0.25rem 0 1rem 1.5rem;
105
+ padding: 0;
106
+ background: none;
107
+ border-radius: 0;
108
+ }
109
+
110
+ /* On very small mobile, don't float - just display inline and centered */
111
+ @media (max-width: 400px) {
112
+ .mobile-gutter-inline {
113
+ float: none;
114
+ clear: none;
115
+ max-width: none;
116
+ margin: 1rem auto 1.5rem auto;
117
+ padding: 0.75rem;
118
+ background: #f8f8f8;
119
+ border-radius: 6px;
120
+ text-align: center;
121
+ }
122
+
123
+ .dark .mobile-gutter-inline {
124
+ background: #1a1a1a;
125
+ }
126
+ }
127
+
128
+ .dark .mobile-gutter-content {
129
+ background: #1a1a1a;
130
+ }
131
+
132
+ @media (min-width: 1200px) {
133
+ .mobile-gutter-content {
134
+ display: none;
135
+ }
136
+ }
137
+
138
+ /* ==========================================================================
139
+ Gutter Containers
140
+ ========================================================================== */
141
+
142
+ .left-gutter-container,
143
+ .right-gutter-container {
144
+ min-width: 0;
145
+ }
146
+
147
+ /* Explicit grid positioning to handle missing gutters */
148
+ @media (min-width: 1200px) {
149
+ /* Both gutters - 3 column layout */
150
+ .content-layout.has-both-gutters .left-gutter-container {
151
+ grid-column: 1;
152
+ }
153
+
154
+ .content-layout.has-both-gutters .content-article {
155
+ grid-column: 2;
156
+ }
157
+
158
+ .content-layout.has-both-gutters .right-gutter-container {
159
+ grid-column: 3;
160
+ }
161
+
162
+ /* Left gutter only - 2 column layout */
163
+ .content-layout.has-left-gutter:not(.has-right-gutter) .left-gutter-container {
164
+ grid-column: 1;
165
+ }
166
+
167
+ .content-layout.has-left-gutter:not(.has-right-gutter) .content-article {
168
+ grid-column: 2;
169
+ }
170
+
171
+ /* Right gutter only - 2 column layout */
172
+ .content-layout.has-right-gutter:not(.has-left-gutter) .content-article {
173
+ grid-column: 1;
174
+ }
175
+
176
+ .content-layout.has-right-gutter:not(.has-left-gutter) .right-gutter-container {
177
+ grid-column: 2;
178
+ }
179
+ }
180
+
181
+ /* Tablet grid positioning */
182
+ @media (min-width: 769px) and (max-width: 1199px) {
183
+ /* Both gutters - 3 column layout */
184
+ .content-layout.has-both-gutters .left-gutter-container {
185
+ grid-column: 1;
186
+ }
187
+
188
+ .content-layout.has-both-gutters .content-article {
189
+ grid-column: 2;
190
+ }
191
+
192
+ .content-layout.has-both-gutters .right-gutter-container {
193
+ grid-column: 3;
194
+ }
195
+
196
+ /* Left gutter only - 2 column layout */
197
+ .content-layout.has-left-gutter:not(.has-right-gutter) .left-gutter-container {
198
+ grid-column: 1;
199
+ }
200
+
201
+ .content-layout.has-left-gutter:not(.has-right-gutter) .content-article {
202
+ grid-column: 2;
203
+ }
204
+
205
+ /* Right gutter only - 2 column layout */
206
+ .content-layout.has-right-gutter:not(.has-left-gutter) .content-article {
207
+ grid-column: 1;
208
+ }
209
+
210
+ .content-layout.has-right-gutter:not(.has-left-gutter) .right-gutter-container {
211
+ grid-column: 2;
212
+ }
213
+ }
214
+
215
+ /* ==========================================================================
216
+ Content Article
217
+ ========================================================================== */
218
+
219
+ .content-article {
220
+ max-width: 800px;
221
+ min-width: 0;
222
+ }
223
+
224
+ /* ==========================================================================
225
+ Content Header
226
+ ========================================================================== */
227
+
228
+ .content-header {
229
+ margin-bottom: 3rem;
230
+ padding-bottom: 2rem;
231
+ border-bottom: 2px solid #e0e0e0;
232
+ transition: border-color 0.3s ease;
233
+ }
234
+
235
+ .dark .content-header {
236
+ border-bottom: 2px solid #333;
237
+ }
238
+
239
+ .content-header h1 {
240
+ font-size: 2.5rem;
241
+ color: #2c5f2d;
242
+ margin: 0;
243
+ line-height: 1.2;
244
+ transition: color 0.3s ease;
245
+ }
246
+
247
+ .dark .content-header h1 {
248
+ color: #5cb85f;
249
+ }
250
+
251
+ /* ==========================================================================
252
+ Content Body - Scroll Offset for Headers
253
+ ========================================================================== */
254
+
255
+ /* Scroll offset to account for sticky header */
256
+ .content-body h2,
257
+ .content-body h3,
258
+ .content-body h4,
259
+ .content-body h5,
260
+ .content-body h6 {
261
+ scroll-margin-top: 5rem;
262
+ }
263
+
264
+ /* ==========================================================================
265
+ Code Block Extensions (beyond what prose provides)
266
+ ========================================================================== */
267
+
268
+ /* GitHub-style code block wrapper */
269
+ .content-body .code-block-wrapper {
270
+ margin: 1.5rem 0;
271
+ border-radius: 8px;
272
+ border: 1px solid #d0d7de;
273
+ overflow: hidden;
274
+ transition: border-color 0.3s ease;
275
+ }
276
+
277
+ .dark .content-body .code-block-wrapper {
278
+ border-color: #3a3a3a;
279
+ }
280
+
281
+ /* Rendered markdown block (for ```markdown code blocks) */
282
+ .content-body .rendered-markdown-block {
283
+ margin: 1.5rem 0;
284
+ border-radius: 8px;
285
+ border: 1px solid #d0d7de;
286
+ overflow: hidden;
287
+ transition: border-color 0.3s ease;
288
+ }
289
+
290
+ .dark .content-body .rendered-markdown-block {
291
+ border-color: #3a3a3a;
292
+ }
293
+
294
+ .content-body .rendered-markdown-header {
295
+ display: flex;
296
+ justify-content: space-between;
297
+ align-items: center;
298
+ padding: 0.5rem 1rem;
299
+ background: #f6f8fa;
300
+ border-bottom: 1px solid #d0d7de;
301
+ font-size: 0.875rem;
302
+ transition: background-color 0.3s ease, border-color 0.3s ease;
303
+ }
304
+
305
+ .dark .content-body .rendered-markdown-header {
306
+ background: #1c1c1c;
307
+ border-bottom-color: #3a3a3a;
308
+ }
309
+
310
+ .content-body .rendered-markdown-label {
311
+ color: #57606a;
312
+ font-weight: 500;
313
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
314
+ font-size: 0.75rem;
315
+ text-transform: uppercase;
316
+ letter-spacing: 0.05em;
317
+ transition: color 0.3s ease;
318
+ }
319
+
320
+ .dark .content-body .rendered-markdown-label {
321
+ color: #8b949e;
322
+ }
323
+
324
+ .content-body .rendered-markdown-content {
325
+ padding: 1rem 1.5rem;
326
+ background: #ffffff;
327
+ transition: background-color 0.3s ease;
328
+ }
329
+
330
+ .dark .content-body .rendered-markdown-content {
331
+ background: #0d1117;
332
+ }
333
+
334
+ /* Reset some styles inside rendered markdown */
335
+ .content-body .rendered-markdown-content > :first-child {
336
+ margin-top: 0;
337
+ }
338
+
339
+ .content-body .rendered-markdown-content > :last-child {
340
+ margin-bottom: 0;
341
+ }
342
+
343
+ /* Code block header with language and copy button */
344
+ .content-body .code-block-header {
345
+ display: flex;
346
+ justify-content: space-between;
347
+ align-items: center;
348
+ padding: 0.5rem 1rem;
349
+ background: #f6f8fa;
350
+ border-bottom: 1px solid #d0d7de;
351
+ font-size: 0.875rem;
352
+ transition: background-color 0.3s ease, border-color 0.3s ease;
353
+ }
354
+
355
+ .dark .content-body .code-block-header {
356
+ background: #1c1c1c;
357
+ border-bottom-color: #3a3a3a;
358
+ }
359
+
360
+ /* Language label */
361
+ .content-body .code-block-language {
362
+ color: #57606a;
363
+ font-weight: 500;
364
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
365
+ text-transform: uppercase;
366
+ font-size: 0.75rem;
367
+ letter-spacing: 0.05em;
368
+ transition: color 0.3s ease;
369
+ }
370
+
371
+ .dark .content-body .code-block-language {
372
+ color: #8b949e;
373
+ }
374
+
375
+ /* Copy button */
376
+ .content-body .code-block-copy {
377
+ display: flex;
378
+ align-items: center;
379
+ gap: 0.4rem;
380
+ background: transparent;
381
+ border: 1px solid #d0d7de;
382
+ color: #57606a;
383
+ padding: 0.35rem 0.65rem;
384
+ border-radius: 6px;
385
+ cursor: pointer;
386
+ font-size: 0.75rem;
387
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
388
+ transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
389
+ }
390
+
391
+ .dark .content-body .code-block-copy {
392
+ border-color: #3a3a3a;
393
+ color: #8b949e;
394
+ }
395
+
396
+ .content-body .code-block-copy:hover {
397
+ background: #f3f4f6;
398
+ border-color: #b8bfc6;
399
+ color: #24292f;
400
+ }
401
+
402
+ .dark .content-body .code-block-copy:hover {
403
+ background: #2a2a2a;
404
+ border-color: #4a4a4a;
405
+ color: #e0e0e0;
406
+ }
407
+
408
+ .content-body .code-block-copy:active {
409
+ background: #e1e4e8;
410
+ transform: scale(0.98);
411
+ }
412
+
413
+ .dark .content-body .code-block-copy:active {
414
+ background: #333;
415
+ }
416
+
417
+ /* Success state for copy button */
418
+ .content-body .code-block-copy.copied {
419
+ background: #dafbe1;
420
+ border-color: #2ea44f;
421
+ color: #1a7f37;
422
+ }
423
+
424
+ .dark .content-body .code-block-copy.copied {
425
+ background: #1a3a24;
426
+ border-color: #5cb85f;
427
+ color: #5cb85f;
428
+ }
429
+
430
+ .content-body .code-block-copy svg {
431
+ width: 14px;
432
+ height: 14px;
433
+ }
434
+
435
+ /* Code block pre */
436
+ .content-body .code-block-wrapper pre {
437
+ background: #ffffff;
438
+ padding: 1rem;
439
+ margin: 0;
440
+ overflow-x: auto;
441
+ transition: background-color 0.3s ease;
442
+ /* Word wrap enabled by default */
443
+ white-space: pre-wrap;
444
+ word-wrap: break-word;
445
+ overflow-wrap: break-word;
446
+ }
447
+
448
+ /* Disable word wrap with .no-wrap class on the wrapper */
449
+ .content-body .code-block-wrapper.no-wrap pre {
450
+ white-space: pre;
451
+ word-wrap: normal;
452
+ overflow-wrap: normal;
453
+ }
454
+
455
+ .dark .content-body .code-block-wrapper pre {
456
+ background: #0d1117;
457
+ }
458
+
459
+ .content-body .code-block-wrapper pre code {
460
+ background: none;
461
+ padding: 0;
462
+ color: #24292f;
463
+ font-family: 'Courier New', Consolas, Monaco, monospace;
464
+ font-size: 0.875rem;
465
+ line-height: 1.6;
466
+ transition: color 0.3s ease;
467
+ /* Inherit wrapping from pre */
468
+ white-space: inherit;
469
+ }
470
+
471
+ .dark .content-body .code-block-wrapper pre code {
472
+ color: #c9d1d9;
473
+ }
474
+
475
+ /* Scrollbar for code blocks */
476
+ .content-body .code-block-wrapper pre::-webkit-scrollbar {
477
+ height: 8px;
478
+ }
479
+
480
+ .content-body .code-block-wrapper pre::-webkit-scrollbar-track {
481
+ background: #f6f8fa;
482
+ border-radius: 0 0 8px 8px;
483
+ }
484
+
485
+ .dark .content-body .code-block-wrapper pre::-webkit-scrollbar-track {
486
+ background: #1c1c1c;
487
+ }
488
+
489
+ .content-body .code-block-wrapper pre::-webkit-scrollbar-thumb {
490
+ background: #d0d7de;
491
+ border-radius: 4px;
492
+ }
493
+
494
+ .dark .content-body .code-block-wrapper pre::-webkit-scrollbar-thumb {
495
+ background: #3a3a3a;
496
+ }
497
+
498
+ .content-body .code-block-wrapper pre::-webkit-scrollbar-thumb:hover {
499
+ background: #b8bfc6;
500
+ }
501
+
502
+ .dark .content-body .code-block-wrapper pre::-webkit-scrollbar-thumb:hover {
503
+ background: #4a4a4a;
504
+ }
505
+
506
+ /* ==========================================================================
507
+ Responsive Typography Adjustments
508
+ ========================================================================== */
509
+
510
+ @media (max-width: 768px) {
511
+ .content-header h1 {
512
+ font-size: 2rem;
513
+ }
514
+ }