@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,441 @@
1
+ /**
2
+ * Grove Design System - Tailwind CSS Preset
3
+ *
4
+ * A calm, organic design system for the Grove blogging platform.
5
+ * "a place to Be"
6
+ */
7
+
8
+ /** @satisfies {Partial<import('tailwindcss').Config>} */
9
+ export default {
10
+ content: [], // Presets don't provide content paths - consumers configure this
11
+ theme: {
12
+ extend: {
13
+ // ─────────────────────────────────────────────────────────────
14
+ // COLOR PALETTE
15
+ // ─────────────────────────────────────────────────────────────
16
+ colors: {
17
+ // Primary: Grove Green
18
+ grove: {
19
+ 50: '#f0fdf4',
20
+ 100: '#dcfce7',
21
+ 200: '#bbf7d0',
22
+ 300: '#86efac',
23
+ 400: '#4ade80',
24
+ 500: '#22c55e',
25
+ 600: '#16a34a', // PRIMARY
26
+ 700: '#15803d',
27
+ 800: '#166534',
28
+ 900: '#14532d',
29
+ 950: '#052e16',
30
+ },
31
+ // Neutrals
32
+ cream: {
33
+ DEFAULT: '#fefdfb',
34
+ 50: '#fefdfb',
35
+ 100: '#fdfcf8',
36
+ 200: '#faf8f3',
37
+ 300: '#f5f2ea',
38
+ 400: '#ede9de',
39
+ 500: '#e2ddd0',
40
+ },
41
+ bark: {
42
+ DEFAULT: '#3d2914',
43
+ 50: '#f9f6f3',
44
+ 100: '#f0e9e1',
45
+ 200: '#e0d2c2',
46
+ 300: '#ccb59c',
47
+ 400: '#b69575',
48
+ 500: '#a57c5a',
49
+ 600: '#8a6347',
50
+ 700: '#6f4d39',
51
+ 800: '#5a3f30',
52
+ 900: '#3d2914', // PRIMARY
53
+ 950: '#2a1b0d',
54
+ },
55
+ // Semantic aliases
56
+ primary: {
57
+ DEFAULT: '#16a34a',
58
+ foreground: '#ffffff',
59
+ },
60
+ secondary: {
61
+ DEFAULT: '#e2ddd0',
62
+ foreground: '#3d2914',
63
+ },
64
+ background: '#fefdfb',
65
+ foreground: '#3d2914',
66
+ muted: {
67
+ DEFAULT: '#f5f2ea',
68
+ foreground: '#6f4d39',
69
+ },
70
+ accent: {
71
+ DEFAULT: '#dcfce7',
72
+ foreground: '#166534',
73
+ },
74
+ destructive: {
75
+ DEFAULT: '#dc2626',
76
+ foreground: '#ffffff',
77
+ },
78
+ border: '#e0d2c2',
79
+ input: '#e0d2c2',
80
+ ring: '#16a34a',
81
+ },
82
+
83
+ // ─────────────────────────────────────────────────────────────
84
+ // TYPOGRAPHY
85
+ // ─────────────────────────────────────────────────────────────
86
+ fontFamily: {
87
+ serif: ['Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'],
88
+ sans: [
89
+ 'system-ui',
90
+ '-apple-system',
91
+ 'BlinkMacSystemFont',
92
+ '"Segoe UI"',
93
+ 'Roboto',
94
+ '"Helvetica Neue"',
95
+ 'Arial',
96
+ '"Noto Sans"',
97
+ 'sans-serif',
98
+ ],
99
+ mono: [
100
+ 'ui-monospace',
101
+ 'SFMono-Regular',
102
+ '"SF Mono"',
103
+ 'Menlo',
104
+ 'Monaco',
105
+ 'Consolas',
106
+ '"Liberation Mono"',
107
+ '"Courier New"',
108
+ 'monospace',
109
+ ],
110
+ },
111
+ fontSize: {
112
+ // Custom scale for better readability
113
+ 'display-lg': ['3.5rem', { lineHeight: '1.1', letterSpacing: '-0.02em' }],
114
+ 'display': ['2.5rem', { lineHeight: '1.2', letterSpacing: '-0.02em' }],
115
+ 'display-sm': ['2rem', { lineHeight: '1.25', letterSpacing: '-0.01em' }],
116
+ 'heading-lg': ['1.5rem', { lineHeight: '1.35' }],
117
+ 'heading': ['1.25rem', { lineHeight: '1.4' }],
118
+ 'heading-sm': ['1.125rem', { lineHeight: '1.45' }],
119
+ 'body-lg': ['1.125rem', { lineHeight: '1.75' }],
120
+ 'body': ['1rem', { lineHeight: '1.75' }],
121
+ 'body-sm': ['0.875rem', { lineHeight: '1.65' }],
122
+ 'caption': ['0.75rem', { lineHeight: '1.5' }],
123
+ },
124
+
125
+ // ─────────────────────────────────────────────────────────────
126
+ // SPACING & SIZING
127
+ // ─────────────────────────────────────────────────────────────
128
+ spacing: {
129
+ '18': '4.5rem',
130
+ '22': '5.5rem',
131
+ '30': '7.5rem',
132
+ },
133
+ maxWidth: {
134
+ 'prose': '65ch',
135
+ 'prose-wide': '75ch',
136
+ 'prose-narrow': '55ch',
137
+ },
138
+
139
+ // ─────────────────────────────────────────────────────────────
140
+ // BORDERS & SHADOWS
141
+ // ─────────────────────────────────────────────────────────────
142
+ borderRadius: {
143
+ 'grove': '0.75rem',
144
+ 'grove-lg': '1rem',
145
+ 'grove-xl': '1.5rem',
146
+ 'grove-full': '9999px',
147
+ },
148
+ boxShadow: {
149
+ 'grove-sm': '0 1px 2px 0 rgb(61 41 20 / 0.05)',
150
+ 'grove': '0 2px 8px -2px rgb(61 41 20 / 0.08), 0 1px 2px -1px rgb(61 41 20 / 0.04)',
151
+ 'grove-md': '0 4px 12px -4px rgb(61 41 20 / 0.1), 0 2px 4px -2px rgb(61 41 20 / 0.05)',
152
+ 'grove-lg': '0 8px 24px -8px rgb(61 41 20 / 0.12), 0 4px 8px -4px rgb(61 41 20 / 0.06)',
153
+ 'grove-xl': '0 16px 48px -16px rgb(61 41 20 / 0.15), 0 8px 16px -8px rgb(61 41 20 / 0.08)',
154
+ 'grove-inner': 'inset 0 1px 2px 0 rgb(61 41 20 / 0.05)',
155
+ 'grove-glow': '0 0 0 3px rgb(22 163 74 / 0.15)',
156
+ },
157
+
158
+ // ─────────────────────────────────────────────────────────────
159
+ // ANIMATIONS
160
+ // ─────────────────────────────────────────────────────────────
161
+ animation: {
162
+ // Fade animations
163
+ 'fade-in': 'grove-fade-in 0.3s ease-out',
164
+ 'fade-out': 'grove-fade-out 0.2s ease-in',
165
+ 'fade-in-up': 'grove-fade-in-up 0.4s ease-out',
166
+ 'fade-in-down': 'grove-fade-in-down 0.4s ease-out',
167
+
168
+ // Growth animations (organic feel)
169
+ 'grow': 'grove-grow 0.4s ease-out',
170
+ 'grow-slow': 'grove-grow 0.6s ease-out',
171
+ 'shrink': 'grove-shrink 0.3s ease-in',
172
+
173
+ // Bloom animation (for buttons, etc)
174
+ 'bloom': 'grove-bloom 0.5s ease-out',
175
+ 'pulse-soft': 'grove-pulse-soft 2s ease-in-out infinite',
176
+
177
+ // Leaf animations
178
+ 'leaf-fall': 'grove-leaf-fall 3s ease-in-out infinite',
179
+ 'leaf-sway': 'grove-leaf-sway 4s ease-in-out infinite',
180
+
181
+ // Spinner
182
+ 'spin-slow': 'spin 2s linear infinite',
183
+ 'spin-organic': 'grove-spin-organic 1.5s ease-in-out infinite',
184
+
185
+ // Slide animations
186
+ 'slide-in-right': 'grove-slide-in-right 0.3s ease-out',
187
+ 'slide-in-left': 'grove-slide-in-left 0.3s ease-out',
188
+ 'slide-in-up': 'grove-slide-in-up 0.3s ease-out',
189
+ 'slide-in-down': 'grove-slide-in-down 0.3s ease-out',
190
+ },
191
+ keyframes: {
192
+ 'grove-fade-in': {
193
+ '0%': { opacity: '0' },
194
+ '100%': { opacity: '1' },
195
+ },
196
+ 'grove-fade-out': {
197
+ '0%': { opacity: '1' },
198
+ '100%': { opacity: '0' },
199
+ },
200
+ 'grove-fade-in-up': {
201
+ '0%': { opacity: '0', transform: 'translateY(8px)' },
202
+ '100%': { opacity: '1', transform: 'translateY(0)' },
203
+ },
204
+ 'grove-fade-in-down': {
205
+ '0%': { opacity: '0', transform: 'translateY(-8px)' },
206
+ '100%': { opacity: '1', transform: 'translateY(0)' },
207
+ },
208
+ 'grove-grow': {
209
+ '0%': { opacity: '0', transform: 'scale(0.95)' },
210
+ '100%': { opacity: '1', transform: 'scale(1)' },
211
+ },
212
+ 'grove-shrink': {
213
+ '0%': { opacity: '1', transform: 'scale(1)' },
214
+ '100%': { opacity: '0', transform: 'scale(0.95)' },
215
+ },
216
+ 'grove-bloom': {
217
+ '0%': { opacity: '0', transform: 'scale(0.8)' },
218
+ '50%': { transform: 'scale(1.02)' },
219
+ '100%': { opacity: '1', transform: 'scale(1)' },
220
+ },
221
+ 'grove-pulse-soft': {
222
+ '0%, 100%': { opacity: '1' },
223
+ '50%': { opacity: '0.7' },
224
+ },
225
+ 'grove-leaf-fall': {
226
+ '0%': { transform: 'translateY(-10px) rotate(0deg)', opacity: '0' },
227
+ '10%': { opacity: '1' },
228
+ '90%': { opacity: '1' },
229
+ '100%': { transform: 'translateY(100px) rotate(45deg)', opacity: '0' },
230
+ },
231
+ 'grove-leaf-sway': {
232
+ '0%, 100%': { transform: 'rotate(-3deg)' },
233
+ '50%': { transform: 'rotate(3deg)' },
234
+ },
235
+ 'grove-spin-organic': {
236
+ '0%': { transform: 'rotate(0deg)' },
237
+ '25%': { transform: 'rotate(100deg)' },
238
+ '50%': { transform: 'rotate(180deg)' },
239
+ '75%': { transform: 'rotate(260deg)' },
240
+ '100%': { transform: 'rotate(360deg)' },
241
+ },
242
+ 'grove-slide-in-right': {
243
+ '0%': { opacity: '0', transform: 'translateX(16px)' },
244
+ '100%': { opacity: '1', transform: 'translateX(0)' },
245
+ },
246
+ 'grove-slide-in-left': {
247
+ '0%': { opacity: '0', transform: 'translateX(-16px)' },
248
+ '100%': { opacity: '1', transform: 'translateX(0)' },
249
+ },
250
+ 'grove-slide-in-up': {
251
+ '0%': { opacity: '0', transform: 'translateY(16px)' },
252
+ '100%': { opacity: '1', transform: 'translateY(0)' },
253
+ },
254
+ 'grove-slide-in-down': {
255
+ '0%': { opacity: '0', transform: 'translateY(-16px)' },
256
+ '100%': { opacity: '1', transform: 'translateY(0)' },
257
+ },
258
+ },
259
+
260
+ // ─────────────────────────────────────────────────────────────
261
+ // TRANSITIONS
262
+ // ─────────────────────────────────────────────────────────────
263
+ transitionDuration: {
264
+ 'grove-fast': '150ms',
265
+ 'grove': '200ms',
266
+ 'grove-slow': '300ms',
267
+ 'grove-slower': '500ms',
268
+ },
269
+ transitionTimingFunction: {
270
+ 'grove': 'cubic-bezier(0.4, 0, 0.2, 1)',
271
+ 'grove-bounce': 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',
272
+ 'grove-soft': 'cubic-bezier(0.25, 0.1, 0.25, 1)',
273
+ },
274
+
275
+ // ─────────────────────────────────────────────────────────────
276
+ // BACKDROP BLUR
277
+ // ─────────────────────────────────────────────────────────────
278
+ backdropBlur: {
279
+ 'grove': '8px',
280
+ 'grove-lg': '16px',
281
+ },
282
+ },
283
+ },
284
+ plugins: [
285
+ // Custom plugin for Grove utilities
286
+ /** @param {import('tailwindcss/types/config').PluginAPI} api */
287
+ function({ addUtilities, addComponents, theme }) {
288
+ // ─────────────────────────────────────────────────────────────
289
+ // UTILITY CLASSES
290
+ // ─────────────────────────────────────────────────────────────
291
+ addUtilities({
292
+ // Text utilities
293
+ '.text-balance': {
294
+ 'text-wrap': 'balance',
295
+ },
296
+ '.text-pretty': {
297
+ 'text-wrap': 'pretty',
298
+ },
299
+
300
+ // Focus utilities
301
+ '.focus-grove': {
302
+ '&:focus': {
303
+ outline: 'none',
304
+ boxShadow: `0 0 0 2px ${theme('colors.cream.DEFAULT')}, 0 0 0 4px ${theme('colors.grove.500')}`,
305
+ },
306
+ },
307
+ '.focus-grove-inset': {
308
+ '&:focus': {
309
+ outline: 'none',
310
+ boxShadow: `inset 0 0 0 2px ${theme('colors.grove.500')}`,
311
+ },
312
+ },
313
+
314
+ // Scrollbar hiding
315
+ '.scrollbar-hide': {
316
+ '-ms-overflow-style': 'none',
317
+ 'scrollbar-width': 'none',
318
+ '&::-webkit-scrollbar': {
319
+ display: 'none',
320
+ },
321
+ },
322
+
323
+ // Smooth scrolling
324
+ '.scroll-smooth': {
325
+ 'scroll-behavior': 'smooth',
326
+ },
327
+ });
328
+
329
+ // ─────────────────────────────────────────────────────────────
330
+ // COMPONENT CLASSES
331
+ // ─────────────────────────────────────────────────────────────
332
+ addComponents({
333
+ // Base prose styling
334
+ '.grove-prose': {
335
+ color: theme('colors.bark.DEFAULT'),
336
+ fontSize: theme('fontSize.body')[0],
337
+ lineHeight: theme('fontSize.body')[1].lineHeight,
338
+ '& h1, & h2, & h3, & h4, & h5, & h6': {
339
+ fontFamily: 'Georgia, Cambria, "Times New Roman", Times, serif',
340
+ fontWeight: '400',
341
+ color: theme('colors.bark.DEFAULT'),
342
+ },
343
+ '& h1': {
344
+ fontSize: theme('fontSize.display')[0],
345
+ lineHeight: theme('fontSize.display')[1].lineHeight,
346
+ marginBottom: '1.5rem',
347
+ },
348
+ '& h2': {
349
+ fontSize: theme('fontSize.display-sm')[0],
350
+ lineHeight: theme('fontSize.display-sm')[1].lineHeight,
351
+ marginTop: '2.5rem',
352
+ marginBottom: '1rem',
353
+ },
354
+ '& h3': {
355
+ fontSize: theme('fontSize.heading-lg')[0],
356
+ lineHeight: theme('fontSize.heading-lg')[1].lineHeight,
357
+ marginTop: '2rem',
358
+ marginBottom: '0.75rem',
359
+ },
360
+ '& p': {
361
+ marginBottom: '1.25rem',
362
+ },
363
+ '& a': {
364
+ color: theme('colors.grove.600'),
365
+ textDecoration: 'underline',
366
+ textDecorationColor: theme('colors.grove.300'),
367
+ textUnderlineOffset: '2px',
368
+ transition: 'all 200ms',
369
+ '&:hover': {
370
+ color: theme('colors.grove.700'),
371
+ textDecorationColor: theme('colors.grove.500'),
372
+ },
373
+ },
374
+ '& blockquote': {
375
+ borderLeftWidth: '3px',
376
+ borderLeftColor: theme('colors.grove.300'),
377
+ paddingLeft: '1.25rem',
378
+ fontStyle: 'italic',
379
+ color: theme('colors.bark.700'),
380
+ },
381
+ '& code': {
382
+ backgroundColor: theme('colors.cream.300'),
383
+ padding: '0.125rem 0.375rem',
384
+ borderRadius: '0.25rem',
385
+ fontSize: '0.875em',
386
+ fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace',
387
+ },
388
+ '& pre': {
389
+ backgroundColor: theme('colors.bark.900'),
390
+ color: theme('colors.cream.100'),
391
+ padding: '1rem 1.25rem',
392
+ borderRadius: theme('borderRadius.grove'),
393
+ overflow: 'auto',
394
+ '& code': {
395
+ backgroundColor: 'transparent',
396
+ padding: '0',
397
+ borderRadius: '0',
398
+ color: 'inherit',
399
+ },
400
+ },
401
+ '& ul, & ol': {
402
+ paddingLeft: '1.5rem',
403
+ marginBottom: '1.25rem',
404
+ },
405
+ '& li': {
406
+ marginBottom: '0.5rem',
407
+ },
408
+ '& ul > li': {
409
+ listStyleType: 'disc',
410
+ },
411
+ '& ol > li': {
412
+ listStyleType: 'decimal',
413
+ },
414
+ '& hr': {
415
+ borderColor: theme('colors.cream.400'),
416
+ marginTop: '2rem',
417
+ marginBottom: '2rem',
418
+ },
419
+ '& img': {
420
+ borderRadius: theme('borderRadius.grove'),
421
+ },
422
+ '& table': {
423
+ width: '100%',
424
+ borderCollapse: 'collapse',
425
+ marginBottom: '1.25rem',
426
+ },
427
+ '& th, & td': {
428
+ padding: '0.75rem 1rem',
429
+ borderBottomWidth: '1px',
430
+ borderBottomColor: theme('colors.cream.400'),
431
+ textAlign: 'left',
432
+ },
433
+ '& th': {
434
+ fontWeight: '600',
435
+ backgroundColor: theme('colors.cream.200'),
436
+ },
437
+ },
438
+ });
439
+ },
440
+ ],
441
+ };