@jxsuite/starters 0.34.0 → 0.35.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/package.json +5 -2
  2. package/registry.json +19 -19
  3. package/sites/blog/components/bl-author-bio.json +19 -15
  4. package/sites/blog/components/bl-cta.json +20 -14
  5. package/sites/blog/components/bl-footer.json +67 -90
  6. package/sites/blog/components/bl-masthead.json +96 -90
  7. package/sites/blog/components/bl-nav.json +23 -30
  8. package/sites/blog/components/bl-newsletter-cta.json +53 -39
  9. package/sites/blog/components/bl-post-card.json +70 -52
  10. package/sites/blog/components/bl-post-list.json +2 -9
  11. package/sites/blog/components/bl-prose.json +33 -18
  12. package/sites/blog/components/bl-section-header.json +46 -29
  13. package/sites/blog/components/bl-tag-pill.json +11 -8
  14. package/sites/blog/package.json +2 -2
  15. package/sites/blog/pages/index.md +26 -24
  16. package/sites/blog/project.json +19 -16
  17. package/sites/course/components/co-application.json +158 -103
  18. package/sites/course/components/co-cohort.json +172 -0
  19. package/sites/course/components/co-cta.json +70 -18
  20. package/sites/course/components/co-curriculum-accordion.json +12 -12
  21. package/sites/course/components/co-footer.json +83 -33
  22. package/sites/course/components/co-hero.json +385 -49
  23. package/sites/course/components/co-instructor-card.json +105 -22
  24. package/sites/course/components/co-mentor.json +65 -0
  25. package/sites/course/components/co-module-card.json +98 -53
  26. package/sites/course/components/co-nav.json +194 -69
  27. package/sites/course/components/co-outcome-card.json +41 -15
  28. package/sites/course/components/co-outcomes.json +248 -0
  29. package/sites/course/components/co-pricing.json +70 -25
  30. package/sites/course/components/co-section-header.json +36 -15
  31. package/sites/course/components/co-testimonial-card.json +70 -15
  32. package/sites/course/pages/about.md +10 -11
  33. package/sites/course/pages/curriculum.md +8 -4
  34. package/sites/course/pages/enroll.md +6 -7
  35. package/sites/course/pages/index.md +41 -29
  36. package/sites/course/project.json +64 -23
  37. package/sites/event/components/ev-agenda-tabs.json +526 -240
  38. package/sites/event/components/ev-cta.json +56 -27
  39. package/sites/event/components/ev-feature.json +14 -10
  40. package/sites/event/components/ev-footer.json +82 -30
  41. package/sites/event/components/ev-hero.json +307 -72
  42. package/sites/event/components/ev-nav.json +97 -34
  43. package/sites/event/components/ev-reason.json +64 -0
  44. package/sites/event/components/ev-savedate.json +160 -73
  45. package/sites/event/components/ev-section-header.json +30 -13
  46. package/sites/event/components/ev-session-row.json +96 -36
  47. package/sites/event/components/ev-speaker-card.json +63 -17
  48. package/sites/event/components/ev-sponsors.json +131 -0
  49. package/sites/event/components/ev-stat.json +17 -12
  50. package/sites/event/components/ev-ticket-card.json +58 -40
  51. package/sites/event/components/ev-venue.json +39 -12
  52. package/sites/event/layouts/base.json +1 -1
  53. package/sites/event/pages/index.md +38 -14
  54. package/sites/event/pages/schedule.md +19 -16
  55. package/sites/event/project.json +88 -26
  56. package/sites/fitness-studio/components/fs-band.json +149 -0
  57. package/sites/fitness-studio/components/fs-booking.json +147 -0
  58. package/sites/fitness-studio/components/fs-class-card.json +62 -31
  59. package/sites/fitness-studio/components/fs-cta.json +63 -19
  60. package/sites/fitness-studio/components/fs-feature.json +20 -6
  61. package/sites/fitness-studio/components/fs-footer.json +62 -29
  62. package/sites/fitness-studio/components/fs-hero.json +296 -49
  63. package/sites/fitness-studio/components/fs-hours.json +40 -21
  64. package/sites/fitness-studio/components/fs-instructor-card.json +94 -31
  65. package/sites/fitness-studio/components/fs-intro.json +258 -23
  66. package/sites/fitness-studio/components/fs-modality.json +171 -0
  67. package/sites/fitness-studio/components/fs-nav.json +55 -24
  68. package/sites/fitness-studio/components/fs-pricing-card.json +71 -51
  69. package/sites/fitness-studio/components/fs-review.json +52 -18
  70. package/sites/fitness-studio/components/fs-schedule.json +1165 -0
  71. package/sites/fitness-studio/components/fs-section-header.json +44 -20
  72. package/sites/fitness-studio/pages/classes.md +11 -5
  73. package/sites/fitness-studio/pages/contact.md +7 -29
  74. package/sites/fitness-studio/pages/index.md +29 -52
  75. package/sites/fitness-studio/pages/pricing.md +7 -7
  76. package/sites/fitness-studio/project.json +99 -26
  77. package/sites/home-services/components/hs-callbar.json +72 -0
  78. package/sites/home-services/components/hs-cta.json +121 -60
  79. package/sites/home-services/components/hs-feature.json +42 -23
  80. package/sites/home-services/components/hs-footer.json +108 -33
  81. package/sites/home-services/components/hs-gallery.json +66 -15
  82. package/sites/home-services/components/hs-hero.json +360 -42
  83. package/sites/home-services/components/hs-intro.json +70 -7
  84. package/sites/home-services/components/hs-nav.json +233 -68
  85. package/sites/home-services/components/hs-reservation.json +125 -46
  86. package/sites/home-services/components/hs-review.json +76 -16
  87. package/sites/home-services/components/hs-section-header.json +31 -14
  88. package/sites/home-services/components/hs-service-card.json +34 -24
  89. package/sites/home-services/components/hs-stat.json +54 -0
  90. package/sites/home-services/components/hs-step.json +40 -13
  91. package/sites/home-services/components/hs-trust-bar.json +188 -40
  92. package/sites/home-services/layouts/base.json +4 -2
  93. package/sites/home-services/pages/about.md +33 -2
  94. package/sites/home-services/pages/contact.md +23 -10
  95. package/sites/home-services/pages/index.md +33 -7
  96. package/sites/home-services/pages/services.md +34 -3
  97. package/sites/home-services/project.json +82 -22
  98. package/sites/nonprofit/components/np-contact-form.json +52 -24
  99. package/sites/nonprofit/components/np-contact-info.json +27 -21
  100. package/sites/nonprofit/components/np-cta.json +152 -77
  101. package/sites/nonprofit/components/np-donate-tier.json +59 -32
  102. package/sites/nonprofit/components/np-feature.json +13 -9
  103. package/sites/nonprofit/components/np-footer.json +106 -36
  104. package/sites/nonprofit/components/np-hero.json +274 -46
  105. package/sites/nonprofit/components/np-impact-band.json +108 -0
  106. package/sites/nonprofit/components/np-intro.json +126 -19
  107. package/sites/nonprofit/components/np-nav.json +161 -82
  108. package/sites/nonprofit/components/np-program-card.json +83 -23
  109. package/sites/nonprofit/components/np-section-header.json +40 -14
  110. package/sites/nonprofit/components/np-stat.json +36 -15
  111. package/sites/nonprofit/components/np-step.json +46 -17
  112. package/sites/nonprofit/components/np-team-member.json +26 -19
  113. package/sites/nonprofit/components/np-testimonial.json +144 -29
  114. package/sites/nonprofit/pages/about.md +17 -16
  115. package/sites/nonprofit/pages/contact.md +4 -4
  116. package/sites/nonprofit/pages/get-involved.md +23 -23
  117. package/sites/nonprofit/pages/index.md +29 -44
  118. package/sites/nonprofit/pages/programs.md +12 -14
  119. package/sites/nonprofit/project.json +74 -28
  120. package/sites/portfolio/components/pv-about-split.json +21 -9
  121. package/sites/portfolio/components/pv-category-pill.json +7 -6
  122. package/sites/portfolio/components/pv-contact-form.json +34 -45
  123. package/sites/portfolio/components/pv-cta.json +35 -19
  124. package/sites/portfolio/components/pv-footer.json +97 -75
  125. package/sites/portfolio/components/pv-hero.json +77 -70
  126. package/sites/portfolio/components/pv-nav.json +32 -38
  127. package/sites/portfolio/components/pv-project-card.json +118 -61
  128. package/sites/portfolio/components/pv-project-grid.json +24 -16
  129. package/sites/portfolio/components/pv-section-header.json +74 -37
  130. package/sites/portfolio/layouts/base.json +1 -1
  131. package/sites/portfolio/package.json +2 -2
  132. package/sites/portfolio/pages/[slug].json +1 -1
  133. package/sites/portfolio/pages/about.md +4 -3
  134. package/sites/portfolio/pages/contact.md +1 -1
  135. package/sites/portfolio/pages/index.md +18 -13
  136. package/sites/portfolio/pages/work.md +7 -7
  137. package/sites/portfolio/project.json +20 -16
  138. package/sites/professional-firm/components/pf-article-header.json +34 -20
  139. package/sites/professional-firm/components/pf-contact-form.json +57 -49
  140. package/sites/professional-firm/components/pf-contact-info.json +147 -0
  141. package/sites/professional-firm/components/pf-cta.json +42 -18
  142. package/sites/professional-firm/components/pf-feature.json +21 -24
  143. package/sites/professional-firm/components/pf-footer.json +107 -48
  144. package/sites/professional-firm/components/pf-hero.json +135 -89
  145. package/sites/professional-firm/components/pf-insight-row.json +144 -0
  146. package/sites/professional-firm/components/pf-intro.json +44 -10
  147. package/sites/professional-firm/components/pf-logo-bar.json +35 -34
  148. package/sites/professional-firm/components/pf-nav.json +67 -42
  149. package/sites/professional-firm/components/pf-section-header.json +46 -22
  150. package/sites/professional-firm/components/pf-service-row.json +104 -0
  151. package/sites/professional-firm/components/pf-statband.json +183 -0
  152. package/sites/professional-firm/components/pf-team-member.json +34 -29
  153. package/sites/professional-firm/content/insights/cash-flow-forecasting.md +1 -0
  154. package/sites/professional-firm/content/insights/choosing-business-entity.md +1 -0
  155. package/sites/professional-firm/content/insights/r-and-d-tax-credits.md +1 -0
  156. package/sites/professional-firm/content/insights/when-to-hire-cfo.md +1 -0
  157. package/sites/professional-firm/content/insights/year-end-tax-moves.md +1 -0
  158. package/sites/professional-firm/layouts/article.json +96 -14
  159. package/sites/professional-firm/layouts/base.json +1 -1
  160. package/sites/professional-firm/pages/contact.md +5 -26
  161. package/sites/professional-firm/pages/index.md +39 -45
  162. package/sites/professional-firm/pages/insights/[slug].json +44 -33
  163. package/sites/professional-firm/pages/insights.md +7 -11
  164. package/sites/professional-firm/pages/services.md +16 -16
  165. package/sites/professional-firm/pages/team.md +10 -10
  166. package/sites/professional-firm/project.json +74 -30
  167. package/sites/real-estate/components/re-agent-band.json +240 -0
  168. package/sites/real-estate/components/re-agent-card.json +51 -24
  169. package/sites/real-estate/components/re-contact-form.json +76 -27
  170. package/sites/real-estate/components/re-cta.json +91 -26
  171. package/sites/real-estate/components/re-feature.json +10 -6
  172. package/sites/real-estate/components/re-footer.json +186 -46
  173. package/sites/real-estate/components/re-hero.json +443 -90
  174. package/sites/real-estate/components/re-intro.json +6 -5
  175. package/sites/real-estate/components/re-listing-card.json +199 -39
  176. package/sites/real-estate/components/re-listings-filter.json +309 -192
  177. package/sites/real-estate/components/re-nav.json +138 -39
  178. package/sites/real-estate/components/re-neighborhood.json +135 -0
  179. package/sites/real-estate/components/re-section-header.json +33 -17
  180. package/sites/real-estate/components/re-stat.json +10 -9
  181. package/sites/real-estate/components/re-step.json +15 -12
  182. package/sites/real-estate/components/re-testimonial.json +53 -16
  183. package/sites/real-estate/content/listings.csv +7 -7
  184. package/sites/real-estate/pages/[slug].json +430 -128
  185. package/sites/real-estate/pages/about.md +18 -6
  186. package/sites/real-estate/pages/contact.md +14 -2
  187. package/sites/real-estate/pages/index.md +43 -26
  188. package/sites/real-estate/pages/listings.md +15 -3
  189. package/sites/real-estate/project.json +88 -30
  190. package/sites/real-estate/public/favicon.svg +7 -1
  191. package/sites/restaurant/components/bit-cta.json +92 -14
  192. package/sites/restaurant/components/bit-feature.json +36 -17
  193. package/sites/restaurant/components/bit-footer.json +80 -34
  194. package/sites/restaurant/components/bit-gallery.json +20 -11
  195. package/sites/restaurant/components/bit-hero.json +179 -54
  196. package/sites/restaurant/components/bit-hours.json +117 -24
  197. package/sites/restaurant/components/bit-intro.json +47 -10
  198. package/sites/restaurant/components/bit-menu-group.json +55 -10
  199. package/sites/restaurant/components/bit-menu-item.json +27 -12
  200. package/sites/restaurant/components/bit-nav.json +170 -53
  201. package/sites/restaurant/components/bit-reservation.json +63 -42
  202. package/sites/restaurant/components/bit-review.json +49 -19
  203. package/sites/restaurant/components/bit-section-header.json +60 -15
  204. package/sites/restaurant/layouts/base.json +1 -1
  205. package/sites/restaurant/pages/about.md +10 -10
  206. package/sites/restaurant/pages/contact.md +7 -7
  207. package/sites/restaurant/pages/index.md +30 -20
  208. package/sites/restaurant/pages/menu.md +8 -8
  209. package/sites/restaurant/project.json +71 -28
  210. package/sites/saas/components/sa-feature-card.json +26 -16
  211. package/sites/saas/components/sa-hero.json +156 -39
  212. package/sites/saas/components/sa-nav.json +34 -26
  213. package/sites/saas/components/sa-pricing.json +11 -10
  214. package/sites/saas/components/sa-stat.json +8 -4
  215. package/sites/saas/package.json +2 -2
  216. package/sites/saas/pages/index.md +8 -8
  217. package/sites/saas/project.json +24 -16
  218. package/sites/shop/components/shp-category-tile.json +104 -0
  219. package/sites/shop/components/shp-cta.json +101 -43
  220. package/sites/shop/components/shp-feature.json +12 -7
  221. package/sites/shop/components/shp-footer.json +312 -46
  222. package/sites/shop/components/shp-hero.json +313 -46
  223. package/sites/shop/components/shp-nav.json +303 -49
  224. package/sites/shop/components/shp-newsletter.json +166 -0
  225. package/sites/shop/components/shp-product-card.json +141 -34
  226. package/sites/shop/components/shp-product-filter.json +336 -154
  227. package/sites/shop/components/shp-section-header.json +42 -20
  228. package/sites/shop/components/shp-stat.json +6 -6
  229. package/sites/shop/components/shp-trust.json +58 -0
  230. package/sites/shop/content/product/aero-road-helmet.md +2 -0
  231. package/sites/shop/content/product/apex-carbon-road.md +1 -0
  232. package/sites/shop/content/product/backroad-gravel-adv.md +1 -0
  233. package/sites/shop/content/product/boulder-enduro.md +1 -0
  234. package/sites/shop/content/product/rambler-kids-20.md +1 -0
  235. package/sites/shop/content/product/summit-trail-29er.md +1 -0
  236. package/sites/shop/content/product/trailhead-pannier-set.md +1 -0
  237. package/sites/shop/content/product/velocity-alloy-road.md +2 -0
  238. package/sites/shop/pages/index.md +38 -26
  239. package/sites/shop/pages/products/[sku].json +362 -71
  240. package/sites/shop/pages/products.md +30 -8
  241. package/sites/shop/project.json +82 -28
  242. package/sites/course/components/co-stat.json +0 -36
  243. package/sites/professional-firm/components/pf-insight-card.json +0 -99
  244. package/sites/professional-firm/components/pf-service-card.json +0 -77
  245. package/sites/professional-firm/components/pf-stat.json +0 -37
@@ -3,50 +3,165 @@
3
3
  "state": {
4
4
  "quote": "",
5
5
  "author": "",
6
- "role": ""
6
+ "role": "",
7
+ "image": { "type": "string", "format": "image", "default": "" },
8
+ "imageAlt": "",
9
+ "stat": "",
10
+ "statLabel": ""
7
11
  },
8
12
  "style": {
9
13
  "display": "block",
10
- "padding": "2rem",
11
- "backgroundColor": "var(--color-bg-cream)",
12
- "border": "1px solid var(--color-border)",
13
- "borderRadius": "var(--radius)"
14
+ "position": "relative",
15
+ "overflow": "hidden",
16
+ "backgroundColor": "var(--color-bg-mint)",
17
+ "borderRadius": "var(--radius-lg)",
18
+ "border": "1px solid var(--color-border)"
14
19
  },
15
20
  "children": [
16
21
  {
17
22
  "tagName": "div",
18
23
  "style": {
19
- "fontFamily": "var(--font-heading)",
20
- "fontSize": "2.5rem",
21
- "lineHeight": "1",
22
- "color": "var(--color-primary)",
23
- "marginBottom": "0.5rem"
24
+ "display": "grid",
25
+ "gridTemplateColumns": "0.82fr 1.18fr",
26
+ "gap": "clamp(1.75rem, 4vw, 3.5rem)",
27
+ "alignItems": "center",
28
+ "@--md": { "gridTemplateColumns": "1fr" }
24
29
  },
25
- "textContent": "“"
26
- },
27
- {
28
- "tagName": "p",
29
- "style": {
30
- "fontFamily": "var(--font-heading)",
31
- "fontSize": "1.2rem",
32
- "lineHeight": "1.6",
33
- "fontWeight": "500",
34
- "margin": "0 0 1.25rem"
35
- },
36
- "textContent": "${state.quote}"
37
- },
38
- {
39
- "tagName": "div",
40
30
  "children": [
41
31
  {
42
32
  "tagName": "div",
43
- "style": { "fontWeight": "600" },
44
- "textContent": "${state.author}"
33
+ "style": {
34
+ "position": "relative",
35
+ "alignSelf": "stretch",
36
+ "minHeight": "clamp(320px, 42vw, 460px)",
37
+ "@--md": { "minHeight": "300px" }
38
+ },
39
+ "children": [
40
+ {
41
+ "tagName": "img",
42
+ "attributes": {
43
+ "src": "${state.image}",
44
+ "alt": "${state.imageAlt}",
45
+ "loading": "lazy"
46
+ },
47
+ "style": {
48
+ "position": "absolute",
49
+ "inset": "0",
50
+ "width": "100%",
51
+ "height": "100%",
52
+ "objectFit": "cover",
53
+ "display": "block"
54
+ }
55
+ },
56
+ {
57
+ "tagName": "div",
58
+ "style": {
59
+ "position": "absolute",
60
+ "display": "${state.stat ? 'flex' : 'none'}",
61
+ "flexDirection": "column",
62
+ "right": "1.1rem",
63
+ "bottom": "1.1rem",
64
+ "padding": "0.85rem 1.15rem",
65
+ "backgroundColor": "var(--color-bg-white)",
66
+ "borderRadius": "1rem",
67
+ "boxShadow": "var(--shadow-card)",
68
+ "lineHeight": "1.1"
69
+ },
70
+ "children": [
71
+ {
72
+ "tagName": "span",
73
+ "style": {
74
+ "fontFamily": "var(--font-display)",
75
+ "fontSize": "1.65rem",
76
+ "fontWeight": "700",
77
+ "color": "var(--color-primary)"
78
+ },
79
+ "textContent": "${state.stat}"
80
+ },
81
+ {
82
+ "tagName": "span",
83
+ "style": {
84
+ "fontSize": "0.76rem",
85
+ "fontWeight": "700",
86
+ "color": "var(--color-text-muted)",
87
+ "maxWidth": "14ch"
88
+ },
89
+ "textContent": "${state.statLabel}"
90
+ }
91
+ ]
92
+ }
93
+ ]
45
94
  },
46
95
  {
47
96
  "tagName": "div",
48
- "style": { "fontSize": "0.9rem", "color": "var(--color-text-muted)" },
49
- "textContent": "${state.role}"
97
+ "style": {
98
+ "padding": "clamp(2rem, 4vw, 3.25rem) clamp(1.75rem, 4vw, 3.25rem) clamp(2rem, 4vw, 3.25rem) 0",
99
+ "@--md": { "padding": "0 clamp(1.5rem, 5vw, 2.5rem) clamp(2rem, 6vw, 2.75rem)" }
100
+ },
101
+ "children": [
102
+ {
103
+ "tagName": "div",
104
+ "style": {
105
+ "fontFamily": "var(--font-display)",
106
+ "fontSize": "3.5rem",
107
+ "lineHeight": "0.6",
108
+ "color": "var(--color-accent)",
109
+ "margin": "0 0 1rem"
110
+ },
111
+ "textContent": "“"
112
+ },
113
+ {
114
+ "tagName": "p",
115
+ "style": {
116
+ "fontFamily": "var(--font-display)",
117
+ "fontSize": "clamp(1.4rem, 2.6vw, 1.95rem)",
118
+ "lineHeight": "1.4",
119
+ "fontWeight": "500",
120
+ "letterSpacing": "-0.01em",
121
+ "color": "var(--color-primary-deep)",
122
+ "margin": "0 0 1.75rem"
123
+ },
124
+ "textContent": "${state.quote}"
125
+ },
126
+ {
127
+ "tagName": "div",
128
+ "style": { "display": "flex", "alignItems": "center", "gap": "0.9rem" },
129
+ "children": [
130
+ {
131
+ "tagName": "span",
132
+ "style": {
133
+ "width": "2.6rem",
134
+ "height": "0.28rem",
135
+ "borderRadius": "999px",
136
+ "backgroundColor": "var(--color-accent)"
137
+ }
138
+ },
139
+ {
140
+ "tagName": "div",
141
+ "children": [
142
+ {
143
+ "tagName": "div",
144
+ "style": {
145
+ "fontWeight": "800",
146
+ "fontSize": "1.05rem",
147
+ "color": "var(--color-text-primary)"
148
+ },
149
+ "textContent": "${state.author}"
150
+ },
151
+ {
152
+ "tagName": "div",
153
+ "style": {
154
+ "fontSize": "0.92rem",
155
+ "fontWeight": "700",
156
+ "color": "var(--color-primary)"
157
+ },
158
+ "textContent": "${state.role}"
159
+ }
160
+ ]
161
+ }
162
+ ]
163
+ }
164
+ ]
50
165
  }
51
166
  ]
52
167
  }
@@ -2,23 +2,24 @@
2
2
  title: "About — Rivertown Foundation"
3
3
  ---
4
4
 
5
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::np-section-header{props.eyebrow="Our story" props.heading="Rooted in Rivertown since 2007" props.subheading="Started by a handful of neighbors with a food drive and a folding table — now a year-round lifeline for thousands."}
5
+ :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem clamp(2rem, 4vw, 3rem)" style.backgroundColor="var(--color-bg-cream)"}
6
+ ::np-section-header{props.eyebrow="Our story" props.heading="Rooted in Rivertown" props.headingAccent="since 2007" props.subheading="Started by a handful of neighbors with a food drive and a folding table — now a year-round lifeline for thousands."}
7
7
  :::::
8
8
 
9
- :::np-intro{props.image="/images/about.jpg" props.imageAlt="Rivertown Foundation volunteers and staff together" props.reverse="true"}
9
+ :::np-intro{props.eyebrow="How we began" props.image="/images/about.jpg" props.imageAlt="Rivertown Foundation volunteers and staff together" props.reverse="true" props.signNumber="2007" props.signLabel="the year it all started"}
10
10
 
11
11
  ### From a folding table to a movement
12
12
 
13
13
  In the winter of 2007, a few Rivertown families noticed neighbors going without and decided to do something about it. What began as a single food drive in a church basement has grown into five programs serving thousands of people every year.
14
14
 
15
- We're still powered by the same belief: that a community takes care of its own. Every program we run is shaped by the neighbors who use it and delivered by the volunteers who love this town.
15
+ We're still powered by the same belief: that **a community takes care of its own.** Every program we run is shaped by the neighbors who use it and delivered by the volunteers who love this town.
16
+
16
17
  :::
17
18
 
18
- :::::section{style.padding="clamp(3.5rem, 8vw, 5rem) 1.5rem"}
19
- ::np-section-header{props.eyebrow="What guides us" props.heading="The values behind every decision"}
19
+ :::::section{style.padding="clamp(3.5rem, 8vw, 5.5rem) 1.5rem"}
20
+ ::np-section-header{props.eyebrow="What guides us" props.heading="The values behind" props.headingAccent="every decision"}
20
21
 
21
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.25rem" style.--md.gridTemplateColumns="1fr"}
22
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--md.gridTemplateColumns="1fr"}
22
23
  ::np-feature{props.icon="🤝" props.title="Dignity first" props.text="Everyone is welcomed with respect and choice — never judgment. Help should never cost your pride."}
23
24
 
24
25
  ::np-feature{props.icon="🌱" props.title="Local & lasting" props.text="Every dollar stays in Rivertown, invested in solutions that outlast the moment of need."}
@@ -27,20 +28,20 @@ We're still powered by the same belief: that a community takes care of its own.
27
28
  ::::
28
29
  :::::
29
30
 
30
- :::::section{style.padding="clamp(1rem, 4vw, 2rem) 1.5rem clamp(3.5rem, 8vw, 5rem)" style.backgroundColor="var(--color-primary)" style.color="var(--color-text-white)"}
31
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="2rem" style.--md.gridTemplateColumns="repeat(2, 1fr)" style.paddingTop="clamp(2.5rem, 6vw, 3.5rem)"}
32
- ::np-stat{props.number="94¢" props.label="Of every dollar to programs"}
31
+ :::::np-impact-band{props.eyebrow="By the numbers" props.heading="Built to be" props.headingAccent="trusted"}
32
+ ::::div{style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="1.25rem" style.--md.gridTemplateColumns="repeat(2, 1fr)"}
33
+ ::np-stat{props.icon="💚" props.number="94¢" props.label="Of every dollar to programs"}
33
34
 
34
- ::np-stat{props.number="640" props.label="Active volunteers"}
35
+ ::np-stat{props.icon="🙌" props.number="640" props.label="Active volunteers"}
35
36
 
36
- ::np-stat{props.number="5" props.label="Community programs"}
37
+ ::np-stat{props.icon="🌿" props.number="5" props.label="Community programs"}
37
38
 
38
- ::np-stat{props.number="1" props.label="Town we call home"}
39
+ ::np-stat{props.icon="📍" props.number="1" props.label="Town we call home"}
39
40
  ::::
40
41
  :::::
41
42
 
42
- :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
43
- ::np-section-header{props.eyebrow="Our team" props.heading="The people behind the mission"}
43
+ :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
44
+ ::np-section-header{props.eyebrow="Our team" props.heading="The people behind" props.headingAccent="the mission"}
44
45
 
45
46
  ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--md.gridTemplateColumns="1fr"}
46
47
  ::np-team-member{props.initials="AT" props.name="Aisha Thompson" props.role="Executive Director" props.bio="A lifelong Rivertown resident who has led the Foundation for a decade, Aisha keeps neighbors at the center of every decision."}
@@ -51,4 +52,4 @@ We're still powered by the same belief: that a community takes care of its own.
51
52
  ::::
52
53
  :::::
53
54
 
54
- ::np-cta{props.eyebrow="Join the story" props.heading="Be part of what happens next" props.text="Whether you give, volunteer, or partner with us, you become part of a community that refuses to leave anyone behind." props.cta="Donate Now" props.ctaHref="/get-involved/" props.cta2="Get Involved" props.cta2Href="/get-involved/" props.bg="/images/cta-bg.jpg"}
55
+ ::np-cta{props.eyebrow="Join the story" props.heading="Be part of what" props.headingAccent="happens next" props.text="Whether you give, volunteer, or partner with us, you become part of a community that refuses to leave anyone behind." props.cta="Donate Now" props.ctaHref="/get-involved/" props.cta2="Get involved" props.cta2Href="/get-involved/"}
@@ -3,15 +3,15 @@ title: "Contact — Rivertown Foundation"
3
3
  ---
4
4
 
5
5
  :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::np-section-header{props.eyebrow="Say hello" props.heading="Get in touch" props.subheading="Questions about a program, a donation, or volunteering? We'd love to hear from you."}
6
+ ::np-section-header{props.eyebrow="Say hello" props.heading="Get in" props.headingAccent="touch" props.subheading="Questions about a program, a donation, or volunteering? We'd love to hear from you."}
7
7
  :::::
8
8
 
9
- :::::section{style.maxWidth="var(--max-width)" style.margin="0 auto" style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem"}
10
- ::::div{style.display="grid" style.gridTemplateColumns="1.2fr 1fr" style.gap="clamp(2rem, 5vw, 3.5rem)" style.alignItems="start" style.--md.gridTemplateColumns="1fr"}
9
+ :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem"}
10
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="1.2fr 1fr" style.gap="clamp(2rem, 5vw, 3.5rem)" style.alignItems="start" style.--md.gridTemplateColumns="1fr"}
11
11
  ::np-contact-form{props.heading="Send us a message"}
12
12
 
13
13
  ::np-contact-info{}
14
14
  ::::
15
15
  :::::
16
16
 
17
- ::np-cta{props.eyebrow="Can't wait to start?" props.heading="You don't need an appointment to help" props.text="Make a gift online today, or drop by during office hours — we'll put your generosity to work right away." props.cta="Donate Now" props.ctaHref="/get-involved/"}
17
+ ::np-cta{props.eyebrow="Can't wait to start?" props.heading="You don't need an appointment" props.headingAccent="to help" props.text="Make a gift online today, or drop by during office hours — we'll put your generosity to work right away." props.cta="Donate Now" props.ctaHref="/get-involved/" props.cta2="See the programs" props.cta2Href="/programs/"}
@@ -3,27 +3,27 @@ title: "Get Involved — Rivertown Foundation"
3
3
  ---
4
4
 
5
5
  :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
6
- ::np-section-header{props.eyebrow="Get involved" props.heading="There's a place for you here" props.subheading="Give, volunteer, fundraise, or partner — however you show up, you're helping a neighbor down the street."}
6
+ ::np-section-header{props.eyebrow="Get involved" props.heading="There's a place for" props.headingAccent="you here" props.subheading="Give, volunteer, fundraise, or partner — however you show up, you're helping a neighbor down the street."}
7
7
  :::::
8
8
 
9
- :::::section{style.padding="clamp(3.5rem, 8vw, 5rem) 1.5rem"}
10
- ::np-section-header{props.eyebrow="Ways to help" props.heading="Four ways to make an impact"}
9
+ :::::section{style.padding="clamp(3rem, 7vw, 5rem) 1.5rem"}
10
+ ::np-section-header{props.eyebrow="Ways to help" props.heading="Four ways to" props.headingAccent="make an impact"}
11
11
 
12
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="1.5rem" style.--md.gridTemplateColumns="1fr"}
13
- ::np-step{props.num="1" props.title="Give" props.text="One-time or monthly, your gift funds every program. A donor is matching all gifts this month."}
12
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="1.5rem" style.--lg.gridTemplateColumns="repeat(2, 1fr)" style.--md.gridTemplateColumns="1fr"}
13
+ ::np-step{props.num="❤" props.title="Give" props.text="One-time or monthly, your gift funds every program. A donor is matching all gifts this month." props.badgeBg="var(--color-accent-soft)" props.badgeColor="var(--color-accent)"}
14
14
 
15
- ::np-step{props.num="2" props.title="Volunteer" props.text="Pack pantry boxes, mentor a student, tend the garden, or coach job seekers. Shifts fit any schedule."}
15
+ ::np-step{props.num="🙌" props.title="Volunteer" props.text="Pack pantry boxes, mentor a student, tend the garden, or coach job seekers. Shifts fit any schedule." props.badgeBg="var(--color-primary-soft)" props.badgeColor="var(--color-primary)"}
16
16
 
17
- ::np-step{props.num="3" props.title="Fundraise" props.text="Host a food drive, run a birthday fundraiser, or rally your workplace for a day of giving."}
17
+ ::np-step{props.num="🎉" props.title="Fundraise" props.text="Host a food drive, run a birthday fundraiser, or rally your workplace for a day of giving." props.badgeBg="var(--color-gold-soft)" props.badgeColor="#b07d1e"}
18
18
 
19
- ::np-step{props.num="4" props.title="Partner" props.text="Businesses and faith groups: sponsor a program, hire a graduate, or open a hiring pipeline."}
19
+ ::np-step{props.num="🤝" props.title="Partner" props.text="Businesses and faith groups: sponsor a program, hire a graduate, or open a hiring pipeline." props.badgeBg="var(--color-accent-soft)" props.badgeColor="var(--color-accent)"}
20
20
  ::::
21
21
  :::::
22
22
 
23
- :::::section{style.padding="clamp(3rem, 8vw, 5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
24
- ::np-section-header{props.eyebrow="Volunteer" props.heading="Give your time, change a life" props.subheading="No experience needed — just a few hours and a willingness to help. Here's where hands are needed most."}
23
+ :::::section{style.padding="clamp(3rem, 8vw, 5rem) 1.5rem" style.backgroundColor="var(--color-bg-mint)"}
24
+ ::np-section-header{props.eyebrow="Volunteer" props.heading="Give your time," props.headingAccent="change a life" props.subheading="No experience needed — just a few hours and a willingness to help. Here's where hands are needed most."}
25
25
 
26
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.25rem" style.--md.gridTemplateColumns="1fr"}
26
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--md.gridTemplateColumns="1fr"}
27
27
  ::np-feature{props.icon="📦" props.title="Pantry crew" props.text="Sort donations, stock the choice market, and welcome families. Weekday mornings and Saturdays."}
28
28
 
29
29
  ::np-feature{props.icon="📚" props.title="Youth mentor" props.text="Meet weekly with a student for homework help and encouragement. Training and background check provided."}
@@ -31,33 +31,33 @@ title: "Get Involved — Rivertown Foundation"
31
31
  ::np-feature{props.icon="🌷" props.title="Garden volunteer" props.text="Plant, weed, and harvest alongside neighbors. Great for families, groups, and first-timers."}
32
32
  ::::
33
33
 
34
- ::::div{style.textAlign="center" style.marginTop="2.5rem"}
35
- :::a{href="/contact/" style.display="inline-block" style.backgroundColor="var(--color-primary)" style.color="var(--color-text-white)" style.padding="0.85rem 2rem" style.borderRadius="999px" style.fontWeight="600" style.textDecoration="none" style.fontSize="1.05rem"}
34
+ ::::div{style.textAlign="center" style.marginTop="2.75rem"}
35
+ :::a{href="/contact/" style.display="inline-flex" style.alignItems="center" style.gap="0.5rem" style.backgroundColor="var(--color-primary)" style.color="var(--color-text-white)" style.padding="0.95rem 2.1rem" style.borderRadius="999px" style.fontWeight="800" style.textDecoration="none" style.fontSize="1.05rem" style.boxShadow="0 14px 30px -12px rgba(47,125,85,0.75)"}
36
36
  Sign up to volunteer →
37
37
  :::
38
38
  ::::
39
39
  :::::
40
40
 
41
41
  :::::section{id="donate" style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
42
- ::np-section-header{props.eyebrow="Donate" props.heading="Choose your impact" props.subheading="Every gift stays in Rivertown and is matched dollar-for-dollar this month. Here's what your generosity makes possible."}
42
+ ::np-section-header{props.eyebrow="Donate" props.heading="Choose your" props.headingAccent="impact" props.subheading="Every gift stays in Rivertown and is matched dollar-for-dollar this month. Here's what your generosity makes possible."}
43
43
 
44
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--md.gridTemplateColumns="1fr"}
45
- ::np-donate-tier{props.amount="$25" props.title="Fill a pantry box" props.text="Provides a week of fresh groceries for a family of four at the Riverside Food Pantry." props.cta="Give $25" props.ctaHref="/get-involved/"}
44
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.75rem" style.alignItems="start" style.--md.gridTemplateColumns="1fr"}
45
+ ::np-donate-tier{props.icon="🥫" props.amount="$25" props.title="Fill a pantry box" props.text="Provides a week of fresh groceries for a family of four at the Riverside Food Pantry." props.cta="Give $25" props.ctaHref="/get-involved/"}
46
46
 
47
- ::np-donate-tier{props.amount="$60" props.title="Mentor a student" props.text="Covers a month of one-to-one mentoring, supplies, and after-school snacks for one young person." props.featured="true" props.cta="Give $60" props.ctaHref="/get-involved/"}
47
+ ::np-donate-tier{props.icon="📚" props.amount="$60" props.title="Mentor a student" props.text="Covers a month of one-to-one mentoring, supplies, and after-school snacks for one young person." props.featured="true" props.cta="Give $60" props.ctaHref="/get-involved/"}
48
48
 
49
- ::np-donate-tier{props.amount="$120" props.title="Keep a family housed" props.text="Helps cover emergency rental assistance that keeps a household in their home during a crisis." props.cta="Give $120" props.ctaHref="/get-involved/"}
49
+ ::np-donate-tier{props.icon="🏠" props.amount="$120" props.title="Keep a family housed" props.text="Helps cover emergency rental assistance that keeps a household in their home during a crisis." props.cta="Give $120" props.ctaHref="/get-involved/"}
50
50
  ::::
51
51
 
52
- :::div{style.maxWidth="var(--max-width-narrow)" style.margin="2.5rem auto 0" style.textAlign="center" style.color="var(--color-text-muted)" style.fontSize="0.95rem"}
52
+ :::div{style.maxWidth="var(--max-width-narrow)" style.margin="2.75rem auto 0" style.textAlign="center" style.color="var(--color-text-muted)" style.fontWeight="600" style.fontSize="0.95rem"}
53
53
  Prefer to give monthly? Recurring gifts give us the steady footing to plan ahead. This is a demo — connect your donation platform in `pages/get-involved.md`.
54
54
  :::
55
55
  :::::
56
56
 
57
- :::::section{style.padding="clamp(1rem, 4vw, 2rem) 1.5rem clamp(3.5rem, 8vw, 5rem)" style.backgroundColor="var(--color-bg-cream)"}
58
- ::::div{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto"}
59
- ::np-testimonial{props.quote="I started volunteering on Saturdays to fill some empty time. Two years later it's the best part of my week — and I've watched kids I mentored head off to college." props.author="Ray D." props.role="Youth mentor since 2022"}
57
+ :::::section{style.padding="clamp(1rem, 4vw, 2rem) 1.5rem clamp(3.5rem, 8vw, 6rem)" style.backgroundColor="var(--color-bg-cream)"}
58
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto"}
59
+ ::np-testimonial{props.quote="I started volunteering on Saturdays to fill some empty time. Two years later it's the best part of my week — and I've watched kids I mentored head off to college." props.author="Ray D." props.role="Youth mentor since 2022" props.image="/images/program-2.jpg" props.imageAlt="A Rivertown volunteer mentoring a young student" props.stat="2 yrs" props.statLabel="of Saturdays that changed everything"}
60
60
  ::::
61
61
  :::::
62
62
 
63
- ::np-cta{props.eyebrow="Ready when you are" props.heading="Turn your generosity into groceries, mentors, and homes" props.text="Give today and a matching donor doubles your gift — every dollar working twice as hard for Rivertown." props.cta="Donate Now" props.ctaHref="/get-involved/" props.cta2="Ask a Question" props.cta2Href="/contact/" props.bg="/images/cta-bg.jpg"}
63
+ ::np-cta{props.eyebrow="Ready when you are" props.heading="Turn generosity into groceries," props.headingAccent="mentors, and homes" props.text="Give today and a matching donor doubles your gift — every dollar working twice as hard for Rivertown." props.cta="Donate Now" props.ctaHref="/get-involved/" props.cta2="Ask a question" props.cta2Href="/contact/"}
@@ -11,77 +11,62 @@ state:
11
11
  limit: 3
12
12
  ---
13
13
 
14
- ::np-hero{props.eyebrow="Rivertown · Est. 2007" props.heading="Together, we build a stronger Rivertown." props.subheading="We're a community nonprofit turning everyday generosity into food, mentorship, housing, and jobs for our neighbors — right here at home." props.cta="Donate Now" props.ctaHref="/get-involved/" props.cta2="See Our Programs" props.cta2Href="/programs/" props.bg="/images/hero.jpg"}
14
+ ::np-hero{props.eyebrow="Rivertown · Since 2007" props.heading="Together, we build a" props.headingAccent="warmer" props.headingTail=" Rivertown." props.subheading="We're a community foundation turning everyday generosity into food, mentorship, housing, and jobs for our neighbors — right here at home." props.cta="Donate" props.ctaHref="/get-involved/" props.cta2="See our programs" props.cta2Href="/programs/" props.badgeNumber="640" props.badgeLabel="neighbors volunteering this month" props.bg="/images/hero.jpg"}
15
15
 
16
- :::np-intro{props.image="/images/about.jpg" props.imageAlt="Rivertown Foundation volunteers gathered together"}
16
+ :::::np-impact-band{props.eyebrow="Our impact in 2024" props.heading="What we did" props.headingAccent="together"}
17
+ ::::div{style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="1.25rem" style.--md.gridTemplateColumns="repeat(2, 1fr)"}
18
+ ::np-stat{props.icon="🍎" props.number="128k" props.label="Meals provided" props.note="Fresh groceries and hot meals for local families."}
17
19
 
18
- ### Our mission
20
+ ::np-stat{props.icon="🙌" props.number="640" props.label="Active volunteers" props.note="Neighbors giving their time every month."}
19
21
 
20
- Rivertown Foundation exists to make sure no neighbor faces hard times alone. We connect local generosity to the people and programs that need it most — meeting immediate needs today while opening doors to a more stable tomorrow.
22
+ ::np-stat{props.icon="🏠" props.number="180" props.label="Households housed" props.note="Families kept in stable, safe homes."}
21
23
 
22
- Every dollar, every hour, and every box of groceries stays right here in our community.
23
- :::
24
-
25
- :::::section{style.padding="clamp(3.5rem, 8vw, 5rem) 1.5rem" style.backgroundColor="var(--color-primary)" style.color="var(--color-text-white)"}
26
- ::::div{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto 2.5rem" style.textAlign="center"}
27
- :::p{style.textTransform="uppercase" style.letterSpacing="0.16em" style.fontSize="0.8rem" style.fontWeight="600" style.color="#bbf7d0" style.margin="0 0 0.75rem"}
28
- Our impact in 2024
29
- :::
30
-
31
- :::h2{style.fontFamily="var(--font-heading)" style.fontSize="clamp(1.9rem, 4vw, 2.6rem)" style.fontWeight="700" style.lineHeight="1.15" style.margin="0"}
32
- What we did together last year
33
- :::
24
+ ::np-stat{props.icon="🌳" props.number="17" props.label="Years serving Rivertown" props.note="Rooted right here since 2007."}
34
25
  ::::
26
+ :::::
35
27
 
36
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="2rem" style.--md.gridTemplateColumns="repeat(2, 1fr)"}
37
- ::np-stat{props.number="128k" props.label="Meals provided" props.note="Fresh groceries and hot meals for local families."}
28
+ :::np-intro{props.eyebrow="Our mission" props.image="/images/about.jpg" props.imageAlt="Rivertown Foundation volunteers gathered together" props.signNumber="17" props.signLabel="years rooted in Rivertown"}
38
29
 
39
- ::np-stat{props.number="640" props.label="Active volunteers" props.note="Neighbors giving their time every month."}
30
+ ### No neighbor should face hard times alone.
40
31
 
41
- ::np-stat{props.number="180" props.label="Households housed" props.note="Families kept in stable, safe homes."}
32
+ Rivertown Foundation connects local generosity to the people and programs that need it most — meeting immediate needs today while opening doors to a more stable tomorrow.
42
33
 
43
- ::np-stat{props.number="17" props.label="Years serving Rivertown" props.note="Rooted here since 2007."}
44
- ::::
45
- :::::
34
+ Every dollar, every hour, and every box of groceries stays **right here in our community.**
35
+
36
+ :::
46
37
 
47
- :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
48
- ::np-section-header{props.eyebrow="What we do" props.heading="Programs that meet real needs" props.subheading="Five community programs, one goal: helping every neighbor thrive."}
38
+ :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem" style.backgroundColor="var(--color-bg-mint)"}
39
+ ::np-section-header{props.eyebrow="What we do" props.heading="Programs that meet" props.headingAccent="real needs" props.subheading="Five neighbor-powered programs, one goal: helping every family in Rivertown thrive."}
49
40
 
50
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--md.gridTemplateColumns="1fr"}
41
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.75rem" style.--md.gridTemplateColumns="1fr"}
51
42
  :::Array{items.ref="#/state/programs"}
52
- ::np-program-card{props.title="${item.data.title}" props.summary="${item.data.summary}" props.image="${item.data.image}"}
43
+ ::np-program-card{props.title="${item.data.title}" props.summary="${item.data.summary}" props.image="${item.data.image}" props.tag="Program" props.href="/programs/"}
53
44
  :::
54
45
  ::::
55
46
 
56
- ::::div{style.textAlign="center" style.marginTop="2.5rem"}
57
- :::a{href="/programs/" style.display="inline-block" style.color="var(--color-primary)" style.fontWeight="700" style.textDecoration="none" style.fontSize="1.05rem"}
47
+ ::::div{style.textAlign="center" style.marginTop="2.75rem"}
48
+ :::a{href="/programs/" style.display="inline-flex" style.alignItems="center" style.gap="0.5rem" style.backgroundColor="var(--color-bg-white)" style.border="1px solid var(--color-border-strong)" style.color="var(--color-primary-deep)" style.padding="0.9rem 1.9rem" style.borderRadius="999px" style.fontWeight="800" style.textDecoration="none" style.fontSize="1.02rem"}
58
49
  Explore all five programs →
59
50
  :::
60
51
  ::::
61
52
  :::::
62
53
 
63
54
  :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
64
- ::np-section-header{props.eyebrow="Get involved" props.heading="Three ways to make a difference"}
55
+ ::np-section-header{props.eyebrow="Get involved" props.heading="Three ways to" props.headingAccent="make a difference"}
65
56
 
66
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--md.gridTemplateColumns="1fr"}
67
- ::np-step{props.num="♥" props.title="Give" props.text="A one-time or monthly gift puts groceries on tables and mentors in classrooms — 100% locally."}
57
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.75rem" style.--md.gridTemplateColumns="1fr"}
58
+ ::np-step{props.num="❤" props.title="Give" props.text="A one-time or monthly gift puts groceries on tables and mentors in classrooms — 100% locally." props.badgeBg="var(--color-accent-soft)" props.badgeColor="var(--color-accent)" props.href="/get-involved/" props.linkText="Donate now"}
68
59
 
69
- ::np-step{props.num="✋" props.title="Volunteer" props.text="Pack boxes, tutor a student, or tend the garden. Every skill and every hour helps."}
60
+ ::np-step{props.num="🙌" props.title="Volunteer" props.text="Pack boxes, tutor a student, or tend the garden. Every skill and every hour finds a home here." props.badgeBg="var(--color-primary-soft)" props.badgeColor="var(--color-primary)" props.href="/get-involved/" props.linkText="Find a role"}
70
61
 
71
- ::np-step{props.num="📣" props.title="Spread the word" props.text="Share our work, host a drive, or bring your team for a day of service."}
72
- ::::
73
-
74
- ::::div{style.textAlign="center" style.marginTop="2.5rem"}
75
- :::a{href="/get-involved/" style.display="inline-block" style.color="var(--color-primary)" style.fontWeight="700" style.textDecoration="none" style.fontSize="1.05rem"}
76
- See all the ways to help →
77
- :::
62
+ ::np-step{props.num="🤝" props.title="Partner" props.text="Businesses and faith groups: sponsor a program, host a drive, or open a hiring pipeline." props.badgeBg="var(--color-gold-soft)" props.badgeColor="#b07d1e" props.href="/get-involved/" props.linkText="Partner with us"}
78
63
  ::::
79
64
  :::::
80
65
 
81
- :::::section{style.padding="clamp(1rem, 4vw, 2rem) 1.5rem clamp(3.5rem, 8vw, 6rem)"}
82
- ::::div{style.maxWidth="var(--max-width-narrow)" style.margin="0 auto"}
83
- ::np-testimonial{props.quote="When we lost my husband's job, the Food Pantry and Housing team caught us before we fell. A year later I'm the one volunteering. This is what community looks like." props.author="Marisol T." props.role="Neighbor & volunteer"}
66
+ :::::section{style.padding="clamp(1rem, 4vw, 2rem) 1.5rem clamp(3.5rem, 8vw, 6rem)" style.backgroundColor="var(--color-bg-cream)"}
67
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto"}
68
+ ::np-testimonial{props.quote="When we lost my husband's job, the Food Pantry and Housing team caught us before we fell. A year later, I'm the one volunteering. This is what community looks like." props.author="Marisol T." props.role="Neighbor & volunteer" props.image="/images/cta-bg.jpg" props.imageAlt="Rivertown neighbors sharing a meal together" props.stat="400+" props.statLabel="families served every single week"}
84
69
  ::::
85
70
  :::::
86
71
 
87
- ::np-cta{props.eyebrow="Your gift, doubled" props.heading="Every gift stays in Rivertown" props.text="A generous donor is matching all gifts this month, dollar for dollar. Give today and your impact goes twice as far." props.cta="Donate Now" props.ctaHref="/get-involved/" props.cta2="More Ways to Help" props.cta2Href="/get-involved/" props.bg="/images/cta-bg.jpg"}
72
+ ::np-cta{props.eyebrow="Your gift, doubled" props.heading="Every gift stays in" props.headingAccent="Rivertown" props.text="A generous donor is matching all gifts this month, dollar for dollar. Give today and your impact goes twice as far." props.cta="Donate Now" props.ctaHref="/get-involved/" props.cta2="More ways to help" props.cta2Href="/get-involved/"}
@@ -10,30 +10,28 @@ state:
10
10
  order: asc
11
11
  ---
12
12
 
13
- :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem" style.backgroundColor="var(--color-bg-cream)"}
14
- ::np-section-header{props.eyebrow="Our programs" props.heading="How we show up for Rivertown" props.subheading="Five neighbor-powered programs that meet urgent needs today and build a stronger community for tomorrow."}
13
+ :::::section{style.padding="clamp(3rem, 6vw, 4.5rem) 1.5rem clamp(2.5rem, 5vw, 3.5rem)" style.backgroundColor="var(--color-bg-cream)"}
14
+ ::np-section-header{props.eyebrow="Our programs" props.heading="How we show up for" props.headingAccent="Rivertown" props.subheading="Five neighbor-powered programs that meet urgent needs today and build a stronger community for tomorrow."}
15
15
  :::::
16
16
 
17
- :::::section{style.padding="clamp(3.5rem, 8vw, 6rem) 1.5rem"}
18
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.5rem" style.--lg.gridTemplateColumns="repeat(2, 1fr)" style.--md.gridTemplateColumns="1fr"}
17
+ :::::section{style.padding="clamp(3rem, 7vw, 5rem) 1.5rem"}
18
+ ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(3, 1fr)" style.gap="1.75rem" style.--lg.gridTemplateColumns="repeat(2, 1fr)" style.--md.gridTemplateColumns="1fr"}
19
19
  :::Array{items.ref="#/state/programs"}
20
- ::np-program-card{props.title="${item.data.title}" props.summary="${item.data.summary}" props.image="${item.data.image}"}
20
+ ::np-program-card{props.title="${item.data.title}" props.summary="${item.data.summary}" props.image="${item.data.image}" props.tag="Program" props.href="/get-involved/"}
21
21
  :::
22
22
  ::::
23
23
  :::::
24
24
 
25
- :::::section{style.padding="clamp(1rem, 4vw, 2rem) 1.5rem clamp(3.5rem, 8vw, 5rem)" style.backgroundColor="var(--color-bg-cream)"}
26
- ::np-section-header{props.eyebrow="The difference you make" props.heading="Small gifts, big outcomes"}
25
+ :::::np-impact-band{props.eyebrow="The difference you make" props.heading="Small gifts," props.headingAccent="big outcomes"}
26
+ ::::div{style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="1.25rem" style.--md.gridTemplateColumns="repeat(2, 1fr)"}
27
+ ::np-stat{props.icon="🍎" props.number="128k" props.label="Meals provided" props.note="Fresh, dignified groceries through the Riverside Food Pantry."}
27
28
 
28
- ::::div{style.maxWidth="var(--max-width)" style.margin="0 auto" style.display="grid" style.gridTemplateColumns="repeat(4, 1fr)" style.gap="2rem" style.--md.gridTemplateColumns="repeat(2, 1fr)"}
29
- ::np-stat{props.number="128k" props.label="Meals provided"}
29
+ ::np-stat{props.icon="📚" props.number="1,200" props.label="Youth mentored" props.note="Weekly one-to-one time with a caring adult."}
30
30
 
31
- ::np-stat{props.number="1,200" props.label="Youth mentored"}
31
+ ::np-stat{props.icon="🏠" props.number="180" props.label="Households housed" props.note="Emergency help that keeps families in their homes."}
32
32
 
33
- ::np-stat{props.number="180" props.label="Households housed"}
34
-
35
- ::np-stat{props.number="310" props.label="Jobs secured"}
33
+ ::np-stat{props.icon="💼" props.number="310" props.label="Jobs secured" props.note="Living-wage careers through training and coaching."}
36
34
  ::::
37
35
  :::::
38
36
 
39
- ::np-cta{props.eyebrow="Fuel the work" props.heading="Help us grow every program" props.text="Your gift helps us keep the pantry stocked, the mentors trained, and the doors open for every neighbor who needs us." props.cta="Donate Now" props.ctaHref="/get-involved/" props.cta2="Volunteer With Us" props.cta2Href="/get-involved/" props.bg="/images/cta-bg.jpg"}
37
+ ::np-cta{props.eyebrow="Fuel the work" props.heading="Help us grow" props.headingAccent="every program" props.text="Your gift keeps the pantry stocked, the mentors trained, and the doors open for every neighbor who needs us." props.cta="Donate Now" props.ctaHref="/get-involved/" props.cta2="Volunteer with us" props.cta2Href="/get-involved/"}