@autumnsgrove/groveengine 0.7.0 → 0.8.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 (160) hide show
  1. package/dist/ui/components/content/RoadmapPreview.svelte +91 -0
  2. package/dist/ui/components/content/RoadmapPreview.svelte.d.ts +36 -0
  3. package/dist/ui/components/content/index.d.ts +1 -0
  4. package/dist/ui/components/content/index.js +1 -0
  5. package/dist/ui/components/nature/Logo.svelte +224 -0
  6. package/dist/ui/components/nature/Logo.svelte.d.ts +14 -0
  7. package/dist/ui/components/nature/botanical/Acorn.svelte +48 -0
  8. package/dist/ui/components/nature/botanical/Acorn.svelte.d.ts +8 -0
  9. package/dist/ui/components/nature/botanical/Berry.svelte +67 -0
  10. package/dist/ui/components/nature/botanical/Berry.svelte.d.ts +8 -0
  11. package/dist/ui/components/nature/botanical/DandelionPuff.svelte +98 -0
  12. package/dist/ui/components/nature/botanical/DandelionPuff.svelte.d.ts +8 -0
  13. package/dist/ui/components/nature/botanical/FallingLeavesLayer.svelte +170 -0
  14. package/dist/ui/components/nature/botanical/FallingLeavesLayer.svelte.d.ts +35 -0
  15. package/dist/ui/components/nature/botanical/FallingPetalsLayer.svelte +174 -0
  16. package/dist/ui/components/nature/botanical/FallingPetalsLayer.svelte.d.ts +25 -0
  17. package/dist/ui/components/nature/botanical/Leaf.svelte +77 -0
  18. package/dist/ui/components/nature/botanical/Leaf.svelte.d.ts +10 -0
  19. package/dist/ui/components/nature/botanical/LeafFalling.svelte +186 -0
  20. package/dist/ui/components/nature/botanical/LeafFalling.svelte.d.ts +22 -0
  21. package/dist/ui/components/nature/botanical/PetalFalling.svelte +266 -0
  22. package/dist/ui/components/nature/botanical/PetalFalling.svelte.d.ts +25 -0
  23. package/dist/ui/components/nature/botanical/PineCone.svelte +61 -0
  24. package/dist/ui/components/nature/botanical/PineCone.svelte.d.ts +7 -0
  25. package/dist/ui/components/nature/botanical/Vine.svelte +102 -0
  26. package/dist/ui/components/nature/botanical/Vine.svelte.d.ts +11 -0
  27. package/dist/ui/components/nature/botanical/index.d.ts +10 -0
  28. package/dist/ui/components/nature/botanical/index.js +11 -0
  29. package/dist/ui/components/nature/creatures/Bee.svelte +78 -0
  30. package/dist/ui/components/nature/creatures/Bee.svelte.d.ts +9 -0
  31. package/dist/ui/components/nature/creatures/Bird.svelte +94 -0
  32. package/dist/ui/components/nature/creatures/Bird.svelte.d.ts +11 -0
  33. package/dist/ui/components/nature/creatures/BirdFlying.svelte +83 -0
  34. package/dist/ui/components/nature/creatures/BirdFlying.svelte.d.ts +9 -0
  35. package/dist/ui/components/nature/creatures/Bluebird.svelte +95 -0
  36. package/dist/ui/components/nature/creatures/Bluebird.svelte.d.ts +12 -0
  37. package/dist/ui/components/nature/creatures/Butterfly.svelte +87 -0
  38. package/dist/ui/components/nature/creatures/Butterfly.svelte.d.ts +9 -0
  39. package/dist/ui/components/nature/creatures/Cardinal.svelte +95 -0
  40. package/dist/ui/components/nature/creatures/Cardinal.svelte.d.ts +12 -0
  41. package/dist/ui/components/nature/creatures/Chickadee.svelte +97 -0
  42. package/dist/ui/components/nature/creatures/Chickadee.svelte.d.ts +12 -0
  43. package/dist/ui/components/nature/creatures/Deer.svelte +95 -0
  44. package/dist/ui/components/nature/creatures/Deer.svelte.d.ts +9 -0
  45. package/dist/ui/components/nature/creatures/Firefly.svelte +111 -0
  46. package/dist/ui/components/nature/creatures/Firefly.svelte.d.ts +10 -0
  47. package/dist/ui/components/nature/creatures/Owl.svelte +91 -0
  48. package/dist/ui/components/nature/creatures/Owl.svelte.d.ts +9 -0
  49. package/dist/ui/components/nature/creatures/Rabbit.svelte +90 -0
  50. package/dist/ui/components/nature/creatures/Rabbit.svelte.d.ts +9 -0
  51. package/dist/ui/components/nature/creatures/Robin.svelte +98 -0
  52. package/dist/ui/components/nature/creatures/Robin.svelte.d.ts +12 -0
  53. package/dist/ui/components/nature/creatures/Squirrel.svelte +97 -0
  54. package/dist/ui/components/nature/creatures/Squirrel.svelte.d.ts +9 -0
  55. package/dist/ui/components/nature/creatures/index.d.ts +13 -0
  56. package/dist/ui/components/nature/creatures/index.js +14 -0
  57. package/dist/ui/components/nature/ground/Bush.svelte +57 -0
  58. package/dist/ui/components/nature/ground/Bush.svelte.d.ts +10 -0
  59. package/dist/ui/components/nature/ground/Crocus.svelte +83 -0
  60. package/dist/ui/components/nature/ground/Crocus.svelte.d.ts +12 -0
  61. package/dist/ui/components/nature/ground/Daffodil.svelte +75 -0
  62. package/dist/ui/components/nature/ground/Daffodil.svelte.d.ts +11 -0
  63. package/dist/ui/components/nature/ground/Fern.svelte +72 -0
  64. package/dist/ui/components/nature/ground/Fern.svelte.d.ts +10 -0
  65. package/dist/ui/components/nature/ground/FlowerWild.svelte +60 -0
  66. package/dist/ui/components/nature/ground/FlowerWild.svelte.d.ts +10 -0
  67. package/dist/ui/components/nature/ground/GrassTuft.svelte +49 -0
  68. package/dist/ui/components/nature/ground/GrassTuft.svelte.d.ts +10 -0
  69. package/dist/ui/components/nature/ground/Log.svelte +42 -0
  70. package/dist/ui/components/nature/ground/Log.svelte.d.ts +7 -0
  71. package/dist/ui/components/nature/ground/Mushroom.svelte +48 -0
  72. package/dist/ui/components/nature/ground/Mushroom.svelte.d.ts +9 -0
  73. package/dist/ui/components/nature/ground/MushroomCluster.svelte +41 -0
  74. package/dist/ui/components/nature/ground/MushroomCluster.svelte.d.ts +8 -0
  75. package/dist/ui/components/nature/ground/Rock.svelte +59 -0
  76. package/dist/ui/components/nature/ground/Rock.svelte.d.ts +8 -0
  77. package/dist/ui/components/nature/ground/Stump.svelte +44 -0
  78. package/dist/ui/components/nature/ground/Stump.svelte.d.ts +8 -0
  79. package/dist/ui/components/nature/ground/Tulip.svelte +79 -0
  80. package/dist/ui/components/nature/ground/Tulip.svelte.d.ts +11 -0
  81. package/dist/ui/components/nature/ground/index.d.ts +12 -0
  82. package/dist/ui/components/nature/ground/index.js +13 -0
  83. package/dist/ui/components/nature/index.d.ts +28 -0
  84. package/dist/ui/components/nature/index.js +38 -0
  85. package/dist/ui/components/nature/palette.d.ts +491 -0
  86. package/dist/ui/components/nature/palette.js +384 -0
  87. package/dist/ui/components/nature/sky/Cloud.svelte +122 -0
  88. package/dist/ui/components/nature/sky/Cloud.svelte.d.ts +11 -0
  89. package/dist/ui/components/nature/sky/CloudWispy.svelte +79 -0
  90. package/dist/ui/components/nature/sky/CloudWispy.svelte.d.ts +9 -0
  91. package/dist/ui/components/nature/sky/Moon.svelte +60 -0
  92. package/dist/ui/components/nature/sky/Moon.svelte.d.ts +9 -0
  93. package/dist/ui/components/nature/sky/Rainbow.svelte +101 -0
  94. package/dist/ui/components/nature/sky/Rainbow.svelte.d.ts +8 -0
  95. package/dist/ui/components/nature/sky/Star.svelte +84 -0
  96. package/dist/ui/components/nature/sky/Star.svelte.d.ts +10 -0
  97. package/dist/ui/components/nature/sky/StarCluster.svelte +85 -0
  98. package/dist/ui/components/nature/sky/StarCluster.svelte.d.ts +9 -0
  99. package/dist/ui/components/nature/sky/StarShooting.svelte +90 -0
  100. package/dist/ui/components/nature/sky/StarShooting.svelte.d.ts +9 -0
  101. package/dist/ui/components/nature/sky/Sun.svelte +70 -0
  102. package/dist/ui/components/nature/sky/Sun.svelte.d.ts +9 -0
  103. package/dist/ui/components/nature/sky/index.d.ts +8 -0
  104. package/dist/ui/components/nature/sky/index.js +9 -0
  105. package/dist/ui/components/nature/structural/Birdhouse.svelte +53 -0
  106. package/dist/ui/components/nature/structural/Birdhouse.svelte.d.ts +8 -0
  107. package/dist/ui/components/nature/structural/Bridge.svelte +65 -0
  108. package/dist/ui/components/nature/structural/Bridge.svelte.d.ts +7 -0
  109. package/dist/ui/components/nature/structural/FencePost.svelte +54 -0
  110. package/dist/ui/components/nature/structural/FencePost.svelte.d.ts +8 -0
  111. package/dist/ui/components/nature/structural/GardenGate.svelte +70 -0
  112. package/dist/ui/components/nature/structural/GardenGate.svelte.d.ts +8 -0
  113. package/dist/ui/components/nature/structural/Lantern.svelte +113 -0
  114. package/dist/ui/components/nature/structural/Lantern.svelte.d.ts +10 -0
  115. package/dist/ui/components/nature/structural/Lattice.svelte +89 -0
  116. package/dist/ui/components/nature/structural/Lattice.svelte.d.ts +8 -0
  117. package/dist/ui/components/nature/structural/LatticeWithVine.svelte +89 -0
  118. package/dist/ui/components/nature/structural/LatticeWithVine.svelte.d.ts +11 -0
  119. package/dist/ui/components/nature/structural/StonePath.svelte +48 -0
  120. package/dist/ui/components/nature/structural/StonePath.svelte.d.ts +7 -0
  121. package/dist/ui/components/nature/structural/index.d.ts +8 -0
  122. package/dist/ui/components/nature/structural/index.js +9 -0
  123. package/dist/ui/components/nature/trees/TreeAspen.svelte +163 -0
  124. package/dist/ui/components/nature/trees/TreeAspen.svelte.d.ts +11 -0
  125. package/dist/ui/components/nature/trees/TreeBirch.svelte +186 -0
  126. package/dist/ui/components/nature/trees/TreeBirch.svelte.d.ts +11 -0
  127. package/dist/ui/components/nature/trees/TreeCherry.svelte +108 -0
  128. package/dist/ui/components/nature/trees/TreeCherry.svelte.d.ts +11 -0
  129. package/dist/ui/components/nature/trees/TreePine.svelte +79 -0
  130. package/dist/ui/components/nature/trees/TreePine.svelte.d.ts +11 -0
  131. package/dist/ui/components/nature/trees/index.d.ts +4 -0
  132. package/dist/ui/components/nature/trees/index.js +5 -0
  133. package/dist/ui/components/nature/water/LilyPad.svelte +99 -0
  134. package/dist/ui/components/nature/water/LilyPad.svelte.d.ts +10 -0
  135. package/dist/ui/components/nature/water/Pond.svelte +104 -0
  136. package/dist/ui/components/nature/water/Pond.svelte.d.ts +8 -0
  137. package/dist/ui/components/nature/water/Reeds.svelte +85 -0
  138. package/dist/ui/components/nature/water/Reeds.svelte.d.ts +11 -0
  139. package/dist/ui/components/nature/water/Stream.svelte +98 -0
  140. package/dist/ui/components/nature/water/Stream.svelte.d.ts +8 -0
  141. package/dist/ui/components/nature/water/index.d.ts +4 -0
  142. package/dist/ui/components/nature/water/index.js +5 -0
  143. package/dist/ui/components/nature/weather/SnowfallLayer.svelte +175 -0
  144. package/dist/ui/components/nature/weather/SnowfallLayer.svelte.d.ts +25 -0
  145. package/dist/ui/components/nature/weather/Snowflake.svelte +99 -0
  146. package/dist/ui/components/nature/weather/Snowflake.svelte.d.ts +11 -0
  147. package/dist/ui/components/nature/weather/SnowflakeFalling.svelte +162 -0
  148. package/dist/ui/components/nature/weather/SnowflakeFalling.svelte.d.ts +23 -0
  149. package/dist/ui/components/nature/weather/index.d.ts +3 -0
  150. package/dist/ui/components/nature/weather/index.js +4 -0
  151. package/dist/ui/components/ui/GlassLogo.svelte +422 -0
  152. package/dist/ui/components/ui/GlassLogo.svelte.d.ts +23 -0
  153. package/dist/ui/components/ui/GlassNavbar.svelte +120 -0
  154. package/dist/ui/components/ui/GlassNavbar.svelte.d.ts +42 -0
  155. package/dist/ui/components/ui/Logo.svelte +47 -52
  156. package/dist/ui/components/ui/Logo.svelte.d.ts +4 -3
  157. package/dist/ui/components/ui/index.d.ts +2 -0
  158. package/dist/ui/components/ui/index.js +2 -0
  159. package/dist/ui/styles/grove.css +15 -1
  160. package/package.json +11 -1
@@ -0,0 +1,384 @@
1
+ /**
2
+ * Shared Nature Palette
3
+ *
4
+ * A unified color system for all forest/nature components.
5
+ * All components should import from here to maintain visual cohesion.
6
+ *
7
+ * Design Philosophy:
8
+ * - Colors are drawn from real forest environments (Pacific Northwest inspiration)
9
+ * - Organized by depth: darker = further away, lighter = closer (atmospheric perspective)
10
+ * - Seasonal variants allow trees to change with autumn toggle
11
+ * - Accents are intentionally limited to 1-2 unique colors per component type
12
+ */
13
+ // =============================================================================
14
+ // CORE PALETTES
15
+ // =============================================================================
16
+ /**
17
+ * Green foliage colors - from dark forest depths to pale spring leaves
18
+ * Organized dark-to-light for depth layering in forest scenes.
19
+ * darkForest/deepGreen: background trees (atmospheric distance)
20
+ * grove/meadow: mid-ground trees (Grove brand green at grove)
21
+ * spring/mint/pale: foreground foliage, new growth
22
+ */
23
+ export const greens = {
24
+ darkForest: '#0d4a1c',
25
+ deepGreen: '#166534',
26
+ grove: '#16a34a', // Grove brand primary green
27
+ meadow: '#22c55e',
28
+ spring: '#4ade80',
29
+ mint: '#86efac',
30
+ pale: '#bbf7d0'
31
+ };
32
+ /**
33
+ * Bark and wood tones
34
+ * Used for tree trunks, branches, fences, and structural elements.
35
+ * Warmer browns complement the green foliage.
36
+ */
37
+ export const bark = {
38
+ darkBark: '#3d2817', // Oak, older trees
39
+ bark: '#5d4037', // Standard trunk color
40
+ warmBark: '#6B4423', // Pine, cedar tones
41
+ lightBark: '#8b6914' // Young trees, sun-exposed wood
42
+ };
43
+ /**
44
+ * Earth and soil tones
45
+ * Ground elements, rocks, paths. Neutral grays for stone
46
+ * to contrast with warm browns of wood.
47
+ */
48
+ export const earth = {
49
+ soil: '#3e2723', // Rich forest floor
50
+ mud: '#5d4037', // Wet earth
51
+ clay: '#8d6e63', // Exposed clay
52
+ sand: '#d7ccc8', // Paths, dry ground
53
+ stone: '#78716c', // Neutral gray rocks
54
+ pebble: '#a8a29e', // Lighter stones
55
+ slate: '#57534e' // Dark stone accents
56
+ };
57
+ /**
58
+ * Cream and natural off-whites
59
+ * Special bark colors (aspen, birch) and neutral backgrounds.
60
+ * Birch has pure white bark with slight warmth.
61
+ * Aspen bark is cream/pale green undertone.
62
+ */
63
+ export const natural = {
64
+ cream: '#fef9ef', // Warm white, backgrounds
65
+ aspenBark: '#e8e4d9', // Aspen tree distinctive pale bark
66
+ bone: '#e8e4dc', // Weathered wood, antlers
67
+ mushroom: '#d4c8be', // Mushroom stems, pale fungi
68
+ birchWhite: '#f5f5f0' // Birch tree distinctive white bark
69
+ };
70
+ // =============================================================================
71
+ // SEASONAL PALETTES
72
+ // =============================================================================
73
+ /**
74
+ * Spring colors - fresh growth and renewal
75
+ * Bright yellow-greens of new leaves, soft pastels of early blooms.
76
+ * Organized dark-to-light for depth layering (darker = far, brighter = near).
77
+ * Spring feels lighter and more pastel than the saturated summer greens.
78
+ */
79
+ export const spring = {
80
+ // Fresh growth greens (yellow-green tint of new leaves)
81
+ sprout: '#65a30d', // Dark spring green - distant new growth
82
+ newLeaf: '#84cc16', // Classic spring lime - mid-ground
83
+ freshGreen: '#a3e635', // Bright yellow-green - foreground
84
+ budding: '#bef264', // Pale new leaf
85
+ tender: '#d9f99d', // Very pale spring green
86
+ // Sky and atmosphere
87
+ clearSky: '#7dd3fc', // Clear spring morning sky
88
+ softSky: '#bae6fd', // Pale spring sky
89
+ // Wildflower accents
90
+ buttercup: '#facc15', // Bright yellow wildflower
91
+ daffodil: '#fde047', // Pale yellow daffodil
92
+ crocus: '#a78bfa', // Early spring crocus purple
93
+ lilac: '#c4b5fd', // Soft lilac blooms
94
+ tulipPink: '#f9a8d4', // Soft tulip pink
95
+ tulipRed: '#fb7185', // Bright tulip red
96
+ // Hills and ground
97
+ hillDeep: '#166534', // Far spring hills - rich green
98
+ hillMid: '#22c55e', // Mid hills - meadow green
99
+ hillNear: '#86efac', // Near hills - fresh mint
100
+ hillFront: '#bbf7d0' // Front hills - pale spring green
101
+ };
102
+ /**
103
+ * Autumn/Fall colors
104
+ * Replaces greens for deciduous trees during autumn season.
105
+ * Organized warm-to-bright for depth layering (dark rust = far, bright gold = near).
106
+ * Aspen and birch use gold/honey for their signature golden fall color.
107
+ */
108
+ export const autumn = {
109
+ rust: '#9a3412', // Deep background foliage
110
+ ember: '#c2410c', // Oak-like autumn
111
+ pumpkin: '#ea580c', // Maple mid-tones
112
+ amber: '#d97706', // Classic fall amber
113
+ gold: '#eab308', // Aspen/birch golden yellow
114
+ honey: '#facc15', // Bright foreground leaves
115
+ straw: '#fde047' // Pale dying leaves
116
+ };
117
+ /**
118
+ * Cherry blossom pinks (spring/summer)
119
+ * Used for cherry trees during spring bloom.
120
+ * In autumn, cherry trees switch to autumnReds to mimic real cherry leaf color change.
121
+ */
122
+ export const pinks = {
123
+ deepPink: '#db2777', // Dense bloom centers
124
+ pink: '#ec4899', // Standard blossom
125
+ rose: '#f472b6', // Light petals
126
+ blush: '#f9a8d4', // Pale blossoms
127
+ palePink: '#fbcfe8' // Falling petals, distant blooms
128
+ };
129
+ /**
130
+ * Autumn reds for cherry/maple foliage
131
+ * Cherry trees don't just lose pink - they turn red/crimson in fall.
132
+ * Also used for Japanese maple trees and other red autumn foliage.
133
+ */
134
+ export const autumnReds = {
135
+ crimson: '#be123c', // Deep maple red
136
+ scarlet: '#e11d48', // Bright cherry leaves
137
+ rose: '#f43f5e', // Light autumn cherry
138
+ coral: '#fb7185' // Pale autumn accent
139
+ };
140
+ // =============================================================================
141
+ // WINTER PALETTE
142
+ // =============================================================================
143
+ /**
144
+ * Winter colors - frost, snow, and ice
145
+ * Used for winter mode: snow-dusted evergreens, frozen landscape.
146
+ * Deciduous trees go bare, showing only branches.
147
+ */
148
+ export const winter = {
149
+ // Snow and ice
150
+ snow: '#f8fafc', // Pure fresh snow
151
+ frost: '#e2e8f0', // Frosted surfaces
152
+ ice: '#cbd5e1', // Ice blue-gray
153
+ glacier: '#94a3b8', // Deep ice shadows
154
+ // Frosted evergreen greens (muted, cool tones)
155
+ frostedPine: '#2d4a3e', // Snow-dusted dark pine
156
+ winterGreen: '#3d5a4a', // Muted forest green
157
+ coldSpruce: '#4a6355', // Cool spruce color
158
+ // Winter sky
159
+ winterSky: '#e0f2fe', // Pale winter sky
160
+ twilight: '#bfdbfe', // Evening winter sky
161
+ overcast: '#cbd5e1', // Gray overcast
162
+ // Bare branch colors
163
+ bareBranch: '#78716c', // Gray-brown bare wood
164
+ frostedBark: '#a8a29e', // Frost-touched bark
165
+ coldWood: '#57534e', // Dark winter wood
166
+ // Winter hills (snowy ground, back to front)
167
+ hillDeep: '#475569', // Far hills - cool slate
168
+ hillMid: '#7c8ca3', // Mid hills - gray-blue
169
+ hillNear: '#c7d2e0', // Near hills - pale snow
170
+ hillFront: '#f1f5f9' // Front hills - fresh snow
171
+ };
172
+ // =============================================================================
173
+ // COMPONENT-SPECIFIC ACCENTS
174
+ // =============================================================================
175
+ /**
176
+ * Accent colors for specific components
177
+ * Each category gets 1-2 unique colors that don't fit the main palettes.
178
+ * These add visual interest without breaking the natural cohesion.
179
+ */
180
+ export const accents = {
181
+ /** Mushroom caps and details - fairy tale forest pops of color */
182
+ mushroom: {
183
+ redCap: '#dc2626', // Amanita-style red (toxic but iconic)
184
+ orangeCap: '#ea580c', // Chanterelle-inspired
185
+ brownCap: '#78350f', // Porcini/common mushroom
186
+ spots: '#fefefe', // White spots on caps
187
+ gill: '#fde8e8' // Pale pink gills underneath
188
+ },
189
+ /** Wildflower accents - purple/violet break from green monotony */
190
+ flower: {
191
+ purple: '#a855f7', // Lupine, thistle
192
+ violet: '#8b5cf6', // Wild violets
193
+ yellow: '#fbbf24', // Buttercup, dandelion
194
+ white: '#fefefe', // Daisies, trillium
195
+ lavender: '#c4b5fd' // Distant flower masses
196
+ },
197
+ /** Firefly bioluminescence - warm yellow-green glow */
198
+ firefly: {
199
+ glow: '#fef08a', // Primary glow (pale yellow)
200
+ warmGlow: '#fde047', // Brighter intensity
201
+ body: '#365314' // Dark green body
202
+ },
203
+ /** Berry colors - rich and saturated */
204
+ berry: {
205
+ ripe: '#7c2d12', // Blackberry/dark berry
206
+ elderberry: '#581c87', // Deep purple elderberry
207
+ red: '#b91c1c' // Holly berries, winterberry
208
+ },
209
+ /** Water and pond colors - cool blue spectrum */
210
+ water: {
211
+ surface: '#7dd3fc', // Reflecting sky
212
+ deep: '#0284c7', // Deeper water
213
+ shallow: '#bae6fd', // Shallow edges
214
+ lily: '#bbf7d0' // Lily pad green (ties to greens)
215
+ },
216
+ /** Sky elements - time of day variations */
217
+ sky: {
218
+ dayLight: '#e0f2fe', // Pale daytime sky
219
+ dayMid: '#7dd3fc', // Blue sky
220
+ sunset: '#fed7aa', // Golden hour
221
+ night: '#1e293b', // Night sky
222
+ star: '#fefce8' // Star/twinkle color
223
+ },
224
+ /** Bird colors - winter, spring, and year-round species */
225
+ bird: {
226
+ // Cardinal (winter)
227
+ cardinalRed: '#dc2626', // Northern Cardinal vivid red
228
+ cardinalMask: '#1a1a1a', // Cardinal black mask
229
+ cardinalBeak: '#f97316', // Orange-red cone beak
230
+ // Chickadee (year-round)
231
+ chickadeeCap: '#1a1a1a', // Black-capped Chickadee cap/bib
232
+ chickadeeCheek: '#fafafa', // White cheek patch
233
+ chickadeeBody: '#6b7280', // Gray back feathers
234
+ chickadeeBelly: '#fef3c7', // Buff/cream underside
235
+ // Robin (spring herald!)
236
+ robinBody: '#4a4a4a', // American Robin dark gray-brown
237
+ robinWing: '#3a3a3a', // Slightly darker wing
238
+ robinWingDark: '#2a2a2a', // Wing shadow detail
239
+ robinBreast: '#c2410c', // American Robin orange-red breast
240
+ robinBreastLight: '#dc5015', // Breast highlight
241
+ robinBeak: '#f59e0b', // Yellow-orange beak
242
+ // Bluebird (spring/summer)
243
+ bluebirdBody: '#3b82f6', // Eastern Bluebird vivid blue
244
+ bluebirdWing: '#2563eb', // Slightly darker blue wings
245
+ bluebirdBreast: '#ea580c' // Rusty orange breast
246
+ }
247
+ };
248
+ /**
249
+ * Get appropriate foliage colors based on season
250
+ * Used by deciduous trees to switch from greens to seasonal palette.
251
+ * Spring uses bright yellow-greens of new growth.
252
+ * Autumn uses warm oranges and golds.
253
+ * In winter, returns frosted evergreen colors (for pines that keep needles).
254
+ * @example getSeasonalGreens('spring') // returns spring palette greens
255
+ * @example getSeasonalGreens('autumn') // returns autumn palette
256
+ */
257
+ export function getSeasonalGreens(season = 'summer') {
258
+ if (season === 'spring') {
259
+ // Fresh yellow-green spring foliage - mapped to match greens structure
260
+ return {
261
+ darkForest: spring.sprout,
262
+ deepGreen: spring.sprout,
263
+ grove: spring.newLeaf,
264
+ meadow: spring.freshGreen,
265
+ spring: spring.budding,
266
+ mint: spring.budding,
267
+ pale: spring.tender
268
+ };
269
+ }
270
+ if (season === 'autumn') {
271
+ return autumn;
272
+ }
273
+ if (season === 'winter') {
274
+ // Frosted evergreen colors for pines/conifers
275
+ return {
276
+ darkForest: winter.frostedPine,
277
+ deepGreen: winter.frostedPine,
278
+ grove: winter.winterGreen,
279
+ meadow: winter.winterGreen,
280
+ spring: winter.coldSpruce,
281
+ mint: winter.coldSpruce,
282
+ pale: winter.coldSpruce
283
+ };
284
+ }
285
+ return greens;
286
+ }
287
+ /**
288
+ * Spring cherry blossom colors - extra vibrant for peak bloom
289
+ * Spring is when cherry blossoms are at their most beautiful.
290
+ * Slightly brighter and more saturated than the standard pinks.
291
+ */
292
+ export const springBlossoms = {
293
+ deepPink: '#ec4899', // Vibrant deep pink
294
+ pink: '#f472b6', // Bright cherry blossom
295
+ rose: '#f9a8d4', // Soft rose petals
296
+ blush: '#fbcfe8', // Pale blush
297
+ palePink: '#fce7f3' // Very pale falling petals
298
+ };
299
+ /**
300
+ * Get cherry tree colors based on season
301
+ * Spring: Extra vibrant pink blossoms (peak bloom!)
302
+ * Summer: Standard pink blossoms
303
+ * Autumn: Turn red/crimson like real cherry leaves
304
+ * Winter: Bare (no blossoms)
305
+ * @example getCherryColors('spring') // returns springBlossoms (vibrant)
306
+ * @example getCherryColors('autumn') // returns autumnReds palette
307
+ */
308
+ export function getCherryColors(season = 'spring') {
309
+ if (season === 'spring') {
310
+ // Peak bloom - extra vibrant pinks!
311
+ return springBlossoms;
312
+ }
313
+ if (season === 'autumn') {
314
+ return autumnReds;
315
+ }
316
+ if (season === 'winter') {
317
+ // Return null to indicate bare tree (no foliage to render)
318
+ return null;
319
+ }
320
+ return pinks;
321
+ }
322
+ /**
323
+ * Check if a tree should be bare (no foliage) based on season
324
+ * Deciduous trees lose leaves in winter.
325
+ */
326
+ export function isTreeBare(treeType, season) {
327
+ if (season !== 'winter')
328
+ return false;
329
+ // Evergreen types keep their needles
330
+ const evergreens = ['pine', 'spruce', 'fir', 'cedar'];
331
+ return !evergreens.includes(treeType.toLowerCase());
332
+ }
333
+ /**
334
+ * Pick a random color from a palette object
335
+ * Useful for adding natural variation to forests.
336
+ * @example pickRandom(greens) // returns random green like '#16a34a'
337
+ */
338
+ export function pickRandom(palette) {
339
+ const values = Object.values(palette);
340
+ return values[Math.floor(Math.random() * values.length)];
341
+ }
342
+ /**
343
+ * Pick a random color from a subset of palette keys
344
+ * More controlled randomization when you want specific options.
345
+ * @example pickFrom(greens, ['grove', 'meadow']) // only picks from those two
346
+ */
347
+ export function pickFrom(palette, keys) {
348
+ const key = keys[Math.floor(Math.random() * keys.length)];
349
+ return palette[key];
350
+ }
351
+ // =============================================================================
352
+ // MIDNIGHT BLOOM PALETTE
353
+ // =============================================================================
354
+ /**
355
+ * Midnight Bloom - the far vision
356
+ * A late-night tea café palette: deep plums, warm amber, soft golds.
357
+ * Used for the Midnight Bloom section of the roadmap and future theming.
358
+ */
359
+ export const midnightBloom = {
360
+ deepPlum: '#581c87', // Night sky depth
361
+ purple: '#7c3aed', // Soft purple glow
362
+ violet: '#8b5cf6', // Lighter accent
363
+ amber: '#f59e0b', // Lantern warmth
364
+ warmCream: '#fef3c7', // Tea steam, page glow
365
+ softGold: '#fcd34d' // Fairy lights
366
+ };
367
+ // =============================================================================
368
+ // FULL PALETTE EXPORT
369
+ // =============================================================================
370
+ export const naturePalette = {
371
+ greens,
372
+ bark,
373
+ earth,
374
+ natural,
375
+ spring,
376
+ springBlossoms,
377
+ autumn,
378
+ pinks,
379
+ autumnReds,
380
+ winter,
381
+ accents,
382
+ midnightBloom
383
+ };
384
+ export default naturePalette;
@@ -0,0 +1,122 @@
1
+ <!--
2
+ Grove — A place to Be
3
+ Copyright (c) 2025 Autumn Brown
4
+ Licensed under AGPL-3.0
5
+ -->
6
+ <script lang="ts">
7
+ interface Props {
8
+ class?: string;
9
+ color?: string;
10
+ animate?: boolean;
11
+ speed?: 'slow' | 'normal' | 'fast';
12
+ variant?: 'fluffy' | 'wispy' | 'puffy' | 'scattered';
13
+ direction?: 'left' | 'right';
14
+ }
15
+
16
+ let {
17
+ class: className = 'w-16 h-8',
18
+ color = 'white',
19
+ animate = true,
20
+ speed = 'normal',
21
+ variant = 'fluffy',
22
+ direction = 'right'
23
+ }: Props = $props();
24
+
25
+ const duration = $derived(
26
+ {
27
+ slow: '120s',
28
+ normal: '80s',
29
+ fast: '50s'
30
+ }[speed]
31
+ );
32
+
33
+ const animClass = $derived(animate ? `drift-${direction}` : '');
34
+ </script>
35
+
36
+ {#if variant === 'fluffy'}
37
+ <!-- Classic fluffy cumulus cloud -->
38
+ <svg
39
+ class="{className} {animClass}"
40
+ xmlns="http://www.w3.org/2000/svg"
41
+ viewBox="0 0 100 50"
42
+ style="--drift-duration: {duration}"
43
+ >
44
+ <g opacity="0.9">
45
+ <ellipse fill={color} cx="50" cy="35" rx="35" ry="15" />
46
+ <ellipse fill={color} cx="30" cy="30" rx="22" ry="18" />
47
+ <ellipse fill={color} cx="70" cy="30" rx="22" ry="18" />
48
+ <ellipse fill={color} cx="50" cy="22" rx="25" ry="16" />
49
+ <ellipse fill={color} cx="35" cy="18" rx="18" ry="14" />
50
+ <ellipse fill={color} cx="65" cy="18" rx="18" ry="14" />
51
+ </g>
52
+ </svg>
53
+ {:else if variant === 'wispy'}
54
+ <!-- Thin wispy cirrus cloud -->
55
+ <svg
56
+ class="{className} {animClass}"
57
+ xmlns="http://www.w3.org/2000/svg"
58
+ viewBox="0 0 120 40"
59
+ style="--drift-duration: {duration}"
60
+ >
61
+ <g opacity="0.7">
62
+ <ellipse fill={color} cx="30" cy="20" rx="25" ry="8" />
63
+ <ellipse fill={color} cx="60" cy="22" rx="30" ry="10" />
64
+ <ellipse fill={color} cx="90" cy="18" rx="22" ry="7" />
65
+ <ellipse fill={color} cx="45" cy="15" rx="18" ry="6" />
66
+ <ellipse fill={color} cx="75" cy="25" rx="20" ry="8" />
67
+ </g>
68
+ </svg>
69
+ {:else if variant === 'puffy'}
70
+ <!-- Rounded puffy cloud -->
71
+ <svg
72
+ class="{className} {animClass}"
73
+ xmlns="http://www.w3.org/2000/svg"
74
+ viewBox="0 0 110 55"
75
+ style="--drift-duration: {duration}"
76
+ >
77
+ <g opacity="0.85">
78
+ <circle fill={color} cx="25" cy="35" r="20" />
79
+ <circle fill={color} cx="45" cy="28" r="24" />
80
+ <circle fill={color} cx="55" cy="35" r="22" />
81
+ <circle fill={color} cx="75" cy="30" r="20" />
82
+ <circle fill={color} cx="90" cy="38" r="18" />
83
+ <ellipse fill={color} cx="55" cy="40" rx="40" ry="15" />
84
+ </g>
85
+ </svg>
86
+ {:else if variant === 'scattered'}
87
+ <!-- Scattered small cloudlets -->
88
+ <svg
89
+ class="{className} {animClass}"
90
+ xmlns="http://www.w3.org/2000/svg"
91
+ viewBox="0 0 100 45"
92
+ style="--drift-duration: {duration}"
93
+ >
94
+ <g opacity="0.75">
95
+ <ellipse fill={color} cx="20" cy="25" rx="18" ry="12" />
96
+ <ellipse fill={color} cx="30" cy="18" rx="12" ry="10" />
97
+ <ellipse fill={color} cx="55" cy="30" rx="20" ry="14" />
98
+ <ellipse fill={color} cx="65" cy="22" rx="14" ry="11" />
99
+ <ellipse fill={color} cx="80" cy="28" rx="16" ry="13" />
100
+ </g>
101
+ </svg>
102
+ {/if}
103
+
104
+ <style>
105
+ @keyframes drift-right {
106
+ 0% { transform: translateX(-10vw); }
107
+ 100% { transform: translateX(110vw); }
108
+ }
109
+
110
+ @keyframes drift-left {
111
+ 0% { transform: translateX(110vw); }
112
+ 100% { transform: translateX(-10vw); }
113
+ }
114
+
115
+ .drift-right {
116
+ animation: drift-right var(--drift-duration, 80s) linear infinite;
117
+ }
118
+
119
+ .drift-left {
120
+ animation: drift-left var(--drift-duration, 80s) linear infinite;
121
+ }
122
+ </style>
@@ -0,0 +1,11 @@
1
+ interface Props {
2
+ class?: string;
3
+ color?: string;
4
+ animate?: boolean;
5
+ speed?: 'slow' | 'normal' | 'fast';
6
+ variant?: 'fluffy' | 'wispy' | 'puffy' | 'scattered';
7
+ direction?: 'left' | 'right';
8
+ }
9
+ declare const Cloud: import("svelte").Component<Props, {}, "">;
10
+ type Cloud = ReturnType<typeof Cloud>;
11
+ export default Cloud;
@@ -0,0 +1,79 @@
1
+ <!--
2
+ Grove — A place to Be
3
+ Copyright (c) 2025 Autumn Brown
4
+ Licensed under AGPL-3.0
5
+ -->
6
+ <script lang="ts">
7
+ interface Props {
8
+ class?: string;
9
+ color?: string;
10
+ animate?: boolean;
11
+ speed?: 'slow' | 'normal' | 'fast';
12
+ }
13
+
14
+ let {
15
+ class: className = 'w-20 h-6',
16
+ color = 'white',
17
+ animate = true,
18
+ speed = 'slow'
19
+ }: Props = $props();
20
+
21
+ const duration = $derived(
22
+ {
23
+ slow: '80s',
24
+ normal: '50s',
25
+ fast: '30s'
26
+ }[speed]
27
+ );
28
+ </script>
29
+
30
+ <!-- Thin wispy cirrus cloud -->
31
+ <svg
32
+ class="{className} {animate ? 'drift' : ''}"
33
+ xmlns="http://www.w3.org/2000/svg"
34
+ viewBox="0 0 120 30"
35
+ style="--drift-duration: {duration}"
36
+ >
37
+ <!-- Main wispy cloud body - soft feathery shapes -->
38
+ <g opacity="0.5">
39
+ <!-- Central wisp strand with soft cloud-like bulges -->
40
+ <ellipse fill={color} cx="60" cy="15" rx="50" ry="4" opacity="0.4" />
41
+
42
+ <!-- Feathery tendrils extending from main body -->
43
+ <ellipse fill={color} cx="25" cy="13" rx="18" ry="5" opacity="0.5" />
44
+ <ellipse fill={color} cx="50" cy="11" rx="15" ry="4" opacity="0.45" />
45
+ <ellipse fill={color} cx="75" cy="14" rx="20" ry="5" opacity="0.5" />
46
+ <ellipse fill={color} cx="100" cy="12" rx="15" ry="4" opacity="0.4" />
47
+
48
+ <!-- Upper wisps -->
49
+ <ellipse fill={color} cx="35" cy="8" rx="12" ry="3" opacity="0.35" />
50
+ <ellipse fill={color} cx="65" cy="7" rx="10" ry="3" opacity="0.3" />
51
+ <ellipse fill={color} cx="90" cy="9" rx="14" ry="3" opacity="0.35" />
52
+
53
+ <!-- Lower tendrils for depth -->
54
+ <ellipse fill={color} cx="40" cy="18" rx="10" ry="2.5" opacity="0.3" />
55
+ <ellipse fill={color} cx="70" cy="19" rx="12" ry="3" opacity="0.35" />
56
+ <ellipse fill={color} cx="95" cy="17" rx="8" ry="2" opacity="0.25" />
57
+
58
+ <!-- Fine wispy edges -->
59
+ <ellipse fill={color} cx="15" cy="14" rx="8" ry="2" opacity="0.25" />
60
+ <ellipse fill={color} cx="110" cy="13" rx="8" ry="2" opacity="0.25" />
61
+ </g>
62
+
63
+ <!-- Secondary wisp layer for more depth -->
64
+ <g opacity="0.35">
65
+ <ellipse fill={color} cx="45" cy="20" rx="25" ry="3" opacity="0.4" />
66
+ <ellipse fill={color} cx="80" cy="6" rx="20" ry="2.5" opacity="0.35" />
67
+ </g>
68
+ </svg>
69
+
70
+ <style>
71
+ @keyframes drift {
72
+ 0% { transform: translateX(0); }
73
+ 100% { transform: translateX(20px); }
74
+ }
75
+
76
+ .drift {
77
+ animation: drift var(--drift-duration, 80s) ease-in-out infinite alternate;
78
+ }
79
+ </style>
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ class?: string;
3
+ color?: string;
4
+ animate?: boolean;
5
+ speed?: 'slow' | 'normal' | 'fast';
6
+ }
7
+ declare const CloudWispy: import("svelte").Component<Props, {}, "">;
8
+ type CloudWispy = ReturnType<typeof CloudWispy>;
9
+ export default CloudWispy;
@@ -0,0 +1,60 @@
1
+ <!--
2
+ Grove — A place to Be
3
+ Copyright (c) 2025 Autumn Brown
4
+ Licensed under AGPL-3.0
5
+ -->
6
+ <script lang="ts">
7
+ interface Props {
8
+ class?: string;
9
+ color?: string;
10
+ phase?: 'full' | 'waning' | 'crescent' | 'new';
11
+ animate?: boolean;
12
+ }
13
+
14
+ let {
15
+ class: className = 'w-10 h-10',
16
+ color = '#fef9c3',
17
+ phase = 'crescent',
18
+ animate = true
19
+ }: Props = $props();
20
+
21
+ const glowColor = '#fef9c3';
22
+ </script>
23
+
24
+ <!-- Moon with phase options -->
25
+ <svg class="{className} {animate ? 'glow' : ''}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50">
26
+ <!-- Outer glow -->
27
+ <circle fill={glowColor} cx="25" cy="25" r="24" opacity="0.15" />
28
+
29
+ {#if phase === 'full'}
30
+ <!-- Full moon -->
31
+ <circle fill={color} cx="25" cy="25" r="20" />
32
+ <!-- Craters -->
33
+ <circle fill="#e5e5dc" cx="18" cy="20" r="4" opacity="0.3" />
34
+ <circle fill="#e5e5dc" cx="30" cy="28" r="5" opacity="0.25" />
35
+ <circle fill="#e5e5dc" cx="22" cy="32" r="3" opacity="0.2" />
36
+ {:else if phase === 'waning'}
37
+ <!-- Waning gibbous -->
38
+ <circle fill={color} cx="25" cy="25" r="20" />
39
+ <circle fill="#1e293b" cx="35" cy="25" r="15" />
40
+ {:else if phase === 'crescent'}
41
+ <!-- Crescent moon -->
42
+ <circle fill={color} cx="25" cy="25" r="20" />
43
+ <circle fill="#1e293b" cx="32" cy="25" r="17" />
44
+ {:else}
45
+ <!-- New moon (barely visible) -->
46
+ <circle fill={color} cx="25" cy="25" r="20" opacity="0.1" />
47
+ <circle fill={color} cx="22" cy="25" r="18" opacity="0.05" />
48
+ {/if}
49
+ </svg>
50
+
51
+ <style>
52
+ @keyframes glow {
53
+ 0%, 100% { filter: brightness(1) drop-shadow(0 0 5px rgba(254, 249, 195, 0.3)); }
54
+ 50% { filter: brightness(1.1) drop-shadow(0 0 10px rgba(254, 249, 195, 0.5)); }
55
+ }
56
+
57
+ .glow {
58
+ animation: glow 4s ease-in-out infinite;
59
+ }
60
+ </style>
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ class?: string;
3
+ color?: string;
4
+ phase?: 'full' | 'waning' | 'crescent' | 'new';
5
+ animate?: boolean;
6
+ }
7
+ declare const Moon: import("svelte").Component<Props, {}, "">;
8
+ type Moon = ReturnType<typeof Moon>;
9
+ export default Moon;