@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,715 @@
1
+ /**
2
+ * Grove Design System - Main Stylesheet
3
+ *
4
+ * Import this file to use Grove styles in your project.
5
+ * "a place to Be"
6
+ */
7
+
8
+ @import './tokens.css';
9
+
10
+ /* ═══════════════════════════════════════════════════════════════
11
+ TAILWIND DIRECTIVES
12
+ ═══════════════════════════════════════════════════════════════ */
13
+
14
+ @tailwind base;
15
+ @tailwind components;
16
+ @tailwind utilities;
17
+
18
+ /* ═══════════════════════════════════════════════════════════════
19
+ BASE LAYER
20
+ ═══════════════════════════════════════════════════════════════ */
21
+
22
+ @layer base {
23
+ *,
24
+ *::before,
25
+ *::after {
26
+ border-color: var(--color-border);
27
+ }
28
+
29
+ html {
30
+ font-family: var(--font-sans);
31
+ line-height: var(--leading-body);
32
+ -webkit-font-smoothing: antialiased;
33
+ -moz-osx-font-smoothing: grayscale;
34
+ text-rendering: optimizeLegibility;
35
+ scroll-behavior: smooth;
36
+ }
37
+
38
+ body {
39
+ background-color: var(--color-background);
40
+ color: var(--color-foreground);
41
+ font-size: var(--text-body);
42
+ min-height: 100vh;
43
+ }
44
+
45
+ /* Typography defaults */
46
+ h1, h2, h3, h4, h5, h6 {
47
+ font-family: var(--font-serif);
48
+ font-weight: var(--font-weight-normal);
49
+ line-height: var(--leading-heading);
50
+ color: var(--color-foreground);
51
+ text-wrap: balance;
52
+ }
53
+
54
+ h1 {
55
+ font-size: var(--text-display);
56
+ letter-spacing: var(--tracking-tight);
57
+ }
58
+
59
+ h2 {
60
+ font-size: var(--text-display-sm);
61
+ letter-spacing: var(--tracking-tight);
62
+ }
63
+
64
+ h3 {
65
+ font-size: var(--text-heading-lg);
66
+ }
67
+
68
+ h4 {
69
+ font-size: var(--text-heading);
70
+ }
71
+
72
+ h5 {
73
+ font-size: var(--text-heading-sm);
74
+ }
75
+
76
+ h6 {
77
+ font-size: var(--text-body);
78
+ font-weight: var(--font-weight-semibold);
79
+ }
80
+
81
+ p {
82
+ line-height: var(--leading-body);
83
+ text-wrap: pretty;
84
+ }
85
+
86
+ a {
87
+ color: var(--grove-600);
88
+ text-decoration-line: underline;
89
+ text-decoration-color: var(--grove-300);
90
+ text-underline-offset: 2px;
91
+ transition: color var(--duration) var(--ease-default),
92
+ text-decoration-color var(--duration) var(--ease-default);
93
+ }
94
+
95
+ a:hover {
96
+ color: var(--grove-700);
97
+ text-decoration-color: var(--grove-500);
98
+ }
99
+
100
+ /* Focus styles */
101
+ :focus-visible {
102
+ outline: none;
103
+ box-shadow: var(--shadow-focus);
104
+ }
105
+
106
+ /* Selection */
107
+ ::selection {
108
+ background-color: var(--grove-200);
109
+ color: var(--grove-900);
110
+ }
111
+
112
+ /* Reduced motion */
113
+ @media (prefers-reduced-motion: reduce) {
114
+ *,
115
+ *::before,
116
+ *::after {
117
+ animation-duration: 0.01ms !important;
118
+ animation-iteration-count: 1 !important;
119
+ transition-duration: 0.01ms !important;
120
+ }
121
+ }
122
+ }
123
+
124
+ /* ═══════════════════════════════════════════════════════════════
125
+ COMPONENT LAYER
126
+ ═══════════════════════════════════════════════════════════════ */
127
+
128
+ @layer components {
129
+ /* ─────────────────────────────────────────────────────────────
130
+ BUTTONS
131
+ ───────────────────────────────────────────────────────────── */
132
+
133
+ .grove-btn {
134
+ display: inline-flex;
135
+ align-items: center;
136
+ justify-content: center;
137
+ gap: var(--space-2);
138
+ font-family: var(--font-sans);
139
+ font-weight: var(--font-weight-medium);
140
+ text-decoration: none;
141
+ white-space: nowrap;
142
+ border-radius: var(--radius-grove);
143
+ transition: all var(--duration) var(--ease-default);
144
+ cursor: pointer;
145
+ user-select: none;
146
+ }
147
+
148
+ .grove-btn:disabled {
149
+ opacity: 0.5;
150
+ cursor: not-allowed;
151
+ pointer-events: none;
152
+ }
153
+
154
+ .grove-btn:focus-visible {
155
+ outline: none;
156
+ box-shadow: var(--shadow-focus);
157
+ }
158
+
159
+ /* Button sizes */
160
+ .grove-btn-sm {
161
+ height: 2rem;
162
+ padding: 0 var(--space-3);
163
+ font-size: var(--text-body-sm);
164
+ }
165
+
166
+ .grove-btn-md {
167
+ height: 2.5rem;
168
+ padding: 0 var(--space-4);
169
+ font-size: var(--text-body-sm);
170
+ }
171
+
172
+ .grove-btn-lg {
173
+ height: 3rem;
174
+ padding: 0 var(--space-6);
175
+ font-size: var(--text-body);
176
+ }
177
+
178
+ /* Button variants */
179
+ .grove-btn-primary {
180
+ background-color: var(--grove-600);
181
+ color: white;
182
+ border: none;
183
+ }
184
+
185
+ .grove-btn-primary:hover:not(:disabled) {
186
+ background-color: var(--grove-700);
187
+ }
188
+
189
+ .grove-btn-primary:active:not(:disabled) {
190
+ background-color: var(--grove-800);
191
+ }
192
+
193
+ .grove-btn-secondary {
194
+ background-color: var(--cream-300);
195
+ color: var(--bark);
196
+ border: 1px solid var(--cream-400);
197
+ }
198
+
199
+ .grove-btn-secondary:hover:not(:disabled) {
200
+ background-color: var(--cream-400);
201
+ border-color: var(--cream-500);
202
+ }
203
+
204
+ .grove-btn-secondary:active:not(:disabled) {
205
+ background-color: var(--cream-500);
206
+ }
207
+
208
+ .grove-btn-ghost {
209
+ background-color: transparent;
210
+ color: var(--bark);
211
+ border: none;
212
+ }
213
+
214
+ .grove-btn-ghost:hover:not(:disabled) {
215
+ background-color: var(--cream-300);
216
+ }
217
+
218
+ .grove-btn-ghost:active:not(:disabled) {
219
+ background-color: var(--cream-400);
220
+ }
221
+
222
+ .grove-btn-outline {
223
+ background-color: transparent;
224
+ color: var(--grove-600);
225
+ border: 1px solid var(--grove-600);
226
+ }
227
+
228
+ .grove-btn-outline:hover:not(:disabled) {
229
+ background-color: var(--grove-50);
230
+ }
231
+
232
+ .grove-btn-outline:active:not(:disabled) {
233
+ background-color: var(--grove-100);
234
+ }
235
+
236
+ /* ─────────────────────────────────────────────────────────────
237
+ FORM ELEMENTS
238
+ ───────────────────────────────────────────────────────────── */
239
+
240
+ .grove-input {
241
+ width: 100%;
242
+ height: 2.5rem;
243
+ padding: 0 var(--space-3);
244
+ font-family: var(--font-sans);
245
+ font-size: var(--text-body);
246
+ color: var(--color-foreground);
247
+ background-color: var(--color-background);
248
+ border: 1px solid var(--color-border);
249
+ border-radius: var(--radius-grove);
250
+ transition: border-color var(--duration) var(--ease-default),
251
+ box-shadow var(--duration) var(--ease-default);
252
+ }
253
+
254
+ .grove-input::placeholder {
255
+ color: var(--bark-500);
256
+ }
257
+
258
+ .grove-input:hover:not(:disabled):not(:focus) {
259
+ border-color: var(--cream-400);
260
+ }
261
+
262
+ .grove-input:focus {
263
+ outline: none;
264
+ border-color: var(--grove-500);
265
+ box-shadow: 0 0 0 3px rgb(22 163 74 / 0.15);
266
+ }
267
+
268
+ .grove-input:disabled {
269
+ opacity: 0.5;
270
+ cursor: not-allowed;
271
+ background-color: var(--cream-200);
272
+ }
273
+
274
+ .grove-input-error {
275
+ border-color: var(--color-error);
276
+ }
277
+
278
+ .grove-input-error:focus {
279
+ border-color: var(--color-error);
280
+ box-shadow: 0 0 0 3px rgb(220 38 38 / 0.15);
281
+ }
282
+
283
+ .grove-textarea {
284
+ min-height: 6rem;
285
+ padding: var(--space-3);
286
+ resize: vertical;
287
+ }
288
+
289
+ .grove-label {
290
+ display: block;
291
+ margin-bottom: var(--space-1-5);
292
+ font-family: var(--font-sans);
293
+ font-size: var(--text-body-sm);
294
+ font-weight: var(--font-weight-medium);
295
+ color: var(--color-foreground);
296
+ }
297
+
298
+ .grove-label-required::after {
299
+ content: ' *';
300
+ color: var(--color-error);
301
+ }
302
+
303
+ .grove-help-text {
304
+ margin-top: var(--space-1-5);
305
+ font-size: var(--text-caption);
306
+ color: var(--bark-600);
307
+ }
308
+
309
+ .grove-error-text {
310
+ margin-top: var(--space-1-5);
311
+ font-size: var(--text-caption);
312
+ color: var(--color-error);
313
+ }
314
+
315
+ /* ─────────────────────────────────────────────────────────────
316
+ CARDS
317
+ ───────────────────────────────────────────────────────────── */
318
+
319
+ .grove-card {
320
+ background-color: var(--color-background);
321
+ border: 1px solid var(--color-border);
322
+ border-radius: var(--radius-grove-lg);
323
+ box-shadow: var(--shadow-grove-sm);
324
+ }
325
+
326
+ .grove-card-hover {
327
+ transition: box-shadow var(--duration) var(--ease-default),
328
+ transform var(--duration) var(--ease-default);
329
+ }
330
+
331
+ .grove-card-hover:hover {
332
+ box-shadow: var(--shadow-grove-md);
333
+ transform: translateY(-2px);
334
+ }
335
+
336
+ .grove-card-header {
337
+ padding: var(--space-4) var(--space-5);
338
+ border-bottom: 1px solid var(--color-border);
339
+ }
340
+
341
+ .grove-card-body {
342
+ padding: var(--space-5);
343
+ }
344
+
345
+ .grove-card-footer {
346
+ padding: var(--space-4) var(--space-5);
347
+ border-top: 1px solid var(--color-border);
348
+ background-color: var(--cream-100);
349
+ border-radius: 0 0 var(--radius-grove-lg) var(--radius-grove-lg);
350
+ }
351
+
352
+ /* ─────────────────────────────────────────────────────────────
353
+ BADGES
354
+ ───────────────────────────────────────────────────────────── */
355
+
356
+ .grove-badge {
357
+ display: inline-flex;
358
+ align-items: center;
359
+ gap: var(--space-1);
360
+ padding: var(--space-0-5) var(--space-2);
361
+ font-family: var(--font-sans);
362
+ font-size: var(--text-caption);
363
+ font-weight: var(--font-weight-medium);
364
+ line-height: 1.5;
365
+ border-radius: var(--radius-full);
366
+ }
367
+
368
+ .grove-badge-default {
369
+ background-color: var(--cream-300);
370
+ color: var(--bark);
371
+ }
372
+
373
+ .grove-badge-primary {
374
+ background-color: var(--grove-100);
375
+ color: var(--grove-800);
376
+ }
377
+
378
+ .grove-badge-success {
379
+ background-color: var(--color-success-light);
380
+ color: var(--color-success-foreground);
381
+ }
382
+
383
+ .grove-badge-warning {
384
+ background-color: var(--color-warning-light);
385
+ color: var(--color-warning-foreground);
386
+ }
387
+
388
+ .grove-badge-error {
389
+ background-color: var(--color-error-light);
390
+ color: var(--color-error-foreground);
391
+ }
392
+
393
+ .grove-badge-info {
394
+ background-color: var(--color-info-light);
395
+ color: var(--color-info-foreground);
396
+ }
397
+
398
+ /* ─────────────────────────────────────────────────────────────
399
+ ALERTS
400
+ ───────────────────────────────────────────────────────────── */
401
+
402
+ .grove-alert {
403
+ display: flex;
404
+ gap: var(--space-3);
405
+ padding: var(--space-4);
406
+ border-radius: var(--radius-grove);
407
+ border-left: 3px solid;
408
+ }
409
+
410
+ .grove-alert-success {
411
+ background-color: var(--color-success-light);
412
+ border-left-color: var(--color-success);
413
+ color: var(--color-success-foreground);
414
+ }
415
+
416
+ .grove-alert-warning {
417
+ background-color: var(--color-warning-light);
418
+ border-left-color: var(--color-warning);
419
+ color: var(--color-warning-foreground);
420
+ }
421
+
422
+ .grove-alert-error {
423
+ background-color: var(--color-error-light);
424
+ border-left-color: var(--color-error);
425
+ color: var(--color-error-foreground);
426
+ }
427
+
428
+ .grove-alert-info {
429
+ background-color: var(--color-info-light);
430
+ border-left-color: var(--color-info);
431
+ color: var(--color-info-foreground);
432
+ }
433
+
434
+ /* ─────────────────────────────────────────────────────────────
435
+ DIVIDERS
436
+ ───────────────────────────────────────────────────────────── */
437
+
438
+ .grove-divider {
439
+ display: flex;
440
+ align-items: center;
441
+ width: 100%;
442
+ height: 1px;
443
+ background-color: var(--color-border);
444
+ }
445
+
446
+ .grove-divider-text {
447
+ display: flex;
448
+ align-items: center;
449
+ gap: var(--space-4);
450
+ }
451
+
452
+ .grove-divider-text::before,
453
+ .grove-divider-text::after {
454
+ content: '';
455
+ flex: 1;
456
+ height: 1px;
457
+ background-color: var(--color-border);
458
+ }
459
+
460
+ .grove-divider-leaf {
461
+ display: flex;
462
+ align-items: center;
463
+ justify-content: center;
464
+ gap: var(--space-3);
465
+ }
466
+
467
+ .grove-divider-leaf::before,
468
+ .grove-divider-leaf::after {
469
+ content: '';
470
+ flex: 1;
471
+ height: 1px;
472
+ background-color: var(--color-border);
473
+ }
474
+
475
+ /* ─────────────────────────────────────────────────────────────
476
+ AVATAR
477
+ ───────────────────────────────────────────────────────────── */
478
+
479
+ .grove-avatar {
480
+ display: inline-flex;
481
+ align-items: center;
482
+ justify-content: center;
483
+ overflow: hidden;
484
+ border-radius: var(--radius-full);
485
+ background-color: var(--grove-100);
486
+ color: var(--grove-700);
487
+ font-family: var(--font-sans);
488
+ font-weight: var(--font-weight-medium);
489
+ }
490
+
491
+ .grove-avatar img {
492
+ width: 100%;
493
+ height: 100%;
494
+ object-fit: cover;
495
+ }
496
+
497
+ .grove-avatar-sm {
498
+ width: 2rem;
499
+ height: 2rem;
500
+ font-size: var(--text-caption);
501
+ }
502
+
503
+ .grove-avatar-md {
504
+ width: 2.5rem;
505
+ height: 2.5rem;
506
+ font-size: var(--text-body-sm);
507
+ }
508
+
509
+ .grove-avatar-lg {
510
+ width: 3rem;
511
+ height: 3rem;
512
+ font-size: var(--text-body);
513
+ }
514
+
515
+ .grove-avatar-xl {
516
+ width: 4rem;
517
+ height: 4rem;
518
+ font-size: var(--text-heading);
519
+ }
520
+
521
+ /* ─────────────────────────────────────────────────────────────
522
+ MODAL
523
+ ───────────────────────────────────────────────────────────── */
524
+
525
+ .grove-modal-backdrop {
526
+ position: fixed;
527
+ inset: 0;
528
+ background-color: rgb(61 41 20 / 0.4);
529
+ backdrop-filter: blur(4px);
530
+ z-index: var(--z-modal-backdrop);
531
+ }
532
+
533
+ .grove-modal {
534
+ position: fixed;
535
+ top: 50%;
536
+ left: 50%;
537
+ transform: translate(-50%, -50%);
538
+ width: 100%;
539
+ max-width: 32rem;
540
+ max-height: calc(100vh - 4rem);
541
+ overflow-y: auto;
542
+ background-color: var(--color-background);
543
+ border-radius: var(--radius-grove-xl);
544
+ box-shadow: var(--shadow-grove-xl);
545
+ z-index: var(--z-modal);
546
+ }
547
+
548
+ .grove-modal-header {
549
+ display: flex;
550
+ align-items: center;
551
+ justify-content: space-between;
552
+ padding: var(--space-4) var(--space-5);
553
+ border-bottom: 1px solid var(--color-border);
554
+ }
555
+
556
+ .grove-modal-title {
557
+ font-family: var(--font-serif);
558
+ font-size: var(--text-heading);
559
+ font-weight: var(--font-weight-normal);
560
+ }
561
+
562
+ .grove-modal-body {
563
+ padding: var(--space-5);
564
+ }
565
+
566
+ .grove-modal-footer {
567
+ display: flex;
568
+ justify-content: flex-end;
569
+ gap: var(--space-3);
570
+ padding: var(--space-4) var(--space-5);
571
+ border-top: 1px solid var(--color-border);
572
+ background-color: var(--cream-100);
573
+ border-radius: 0 0 var(--radius-grove-xl) var(--radius-grove-xl);
574
+ }
575
+
576
+ /* ─────────────────────────────────────────────────────────────
577
+ TOOLTIP
578
+ ───────────────────────────────────────────────────────────── */
579
+
580
+ .grove-tooltip {
581
+ position: absolute;
582
+ padding: var(--space-1-5) var(--space-2-5);
583
+ font-family: var(--font-sans);
584
+ font-size: var(--text-caption);
585
+ color: var(--cream);
586
+ background-color: var(--bark);
587
+ border-radius: var(--radius-md);
588
+ box-shadow: var(--shadow-grove-md);
589
+ z-index: var(--z-tooltip);
590
+ pointer-events: none;
591
+ white-space: nowrap;
592
+ }
593
+
594
+ .grove-tooltip::before {
595
+ content: '';
596
+ position: absolute;
597
+ border: 4px solid transparent;
598
+ }
599
+
600
+ .grove-tooltip-top::before {
601
+ bottom: -8px;
602
+ left: 50%;
603
+ transform: translateX(-50%);
604
+ border-top-color: var(--bark);
605
+ }
606
+
607
+ .grove-tooltip-bottom::before {
608
+ top: -8px;
609
+ left: 50%;
610
+ transform: translateX(-50%);
611
+ border-bottom-color: var(--bark);
612
+ }
613
+
614
+ /* ─────────────────────────────────────────────────────────────
615
+ PROGRESS
616
+ ───────────────────────────────────────────────────────────── */
617
+
618
+ .grove-progress {
619
+ width: 100%;
620
+ height: 0.5rem;
621
+ background-color: var(--cream-300);
622
+ border-radius: var(--radius-full);
623
+ overflow: hidden;
624
+ }
625
+
626
+ .grove-progress-bar {
627
+ height: 100%;
628
+ background: linear-gradient(90deg, var(--grove-400), var(--grove-500), var(--grove-600));
629
+ border-radius: var(--radius-full);
630
+ transition: width var(--duration-slow) var(--ease-soft);
631
+ }
632
+
633
+ .grove-progress-indeterminate .grove-progress-bar {
634
+ width: 30%;
635
+ animation: grove-progress-slide 1.5s ease-in-out infinite;
636
+ }
637
+
638
+ @keyframes grove-progress-slide {
639
+ 0% { transform: translateX(-100%); }
640
+ 100% { transform: translateX(400%); }
641
+ }
642
+
643
+ /* ─────────────────────────────────────────────────────────────
644
+ SPINNER
645
+ ───────────────────────────────────────────────────────────── */
646
+
647
+ .grove-spinner {
648
+ display: inline-block;
649
+ border-radius: var(--radius-full);
650
+ border: 2px solid var(--cream-400);
651
+ border-top-color: var(--grove-600);
652
+ animation: spin 0.8s linear infinite;
653
+ }
654
+
655
+ .grove-spinner-sm {
656
+ width: 1rem;
657
+ height: 1rem;
658
+ }
659
+
660
+ .grove-spinner-md {
661
+ width: 1.5rem;
662
+ height: 1.5rem;
663
+ }
664
+
665
+ .grove-spinner-lg {
666
+ width: 2rem;
667
+ height: 2rem;
668
+ }
669
+
670
+ .grove-spinner-organic {
671
+ animation: grove-spin-organic 1.5s ease-in-out infinite;
672
+ }
673
+
674
+ @keyframes spin {
675
+ to { transform: rotate(360deg); }
676
+ }
677
+ }
678
+
679
+ /* ═══════════════════════════════════════════════════════════════
680
+ UTILITY LAYER
681
+ ═══════════════════════════════════════════════════════════════ */
682
+
683
+ @layer utilities {
684
+ /* Organic backgrounds */
685
+ .bg-leaf-pattern {
686
+ background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M30 5c-5 8-15 12-15 20s10 15 15 25c5-10 15-17 15-25S35 13 30 5z' fill='%2316a34a' fill-opacity='0.03'/%3E%3C/svg%3E");
687
+ background-repeat: repeat;
688
+ }
689
+
690
+ /* Text wrapping */
691
+ .text-balance {
692
+ text-wrap: balance;
693
+ }
694
+
695
+ .text-pretty {
696
+ text-wrap: pretty;
697
+ }
698
+
699
+ /* Animation delays */
700
+ .animation-delay-100 { animation-delay: 100ms; }
701
+ .animation-delay-200 { animation-delay: 200ms; }
702
+ .animation-delay-300 { animation-delay: 300ms; }
703
+ .animation-delay-500 { animation-delay: 500ms; }
704
+
705
+ /* Focus ring variations */
706
+ .focus-grove:focus-visible {
707
+ outline: none;
708
+ box-shadow: var(--shadow-focus);
709
+ }
710
+
711
+ .focus-grove-inset:focus-visible {
712
+ outline: none;
713
+ box-shadow: inset 0 0 0 2px var(--grove-500);
714
+ }
715
+ }