@inneranimalmedia/agentsam-sdk 2.6.11 → 2.6.12

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 (411) hide show
  1. package/apps/cad-creator/shared/cad/package.json +1 -1
  2. package/apps/client-cms-editor/backend/package.json +2 -2
  3. package/apps/client-cms-editor/frontend/package.json +3 -3
  4. package/apps/client-cms-editor/frontend/src/adapters/http-authoring.test.ts +161 -0
  5. package/apps/client-cms-editor/frontend/src/adapters/http.ts +296 -65
  6. package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +47 -16
  7. package/apps/client-cms-editor/frontend/src/editor/composition-groups.test.ts +40 -0
  8. package/apps/client-cms-editor/frontend/src/editor/legacy/CmsEditorPrototype.tsx +28 -28
  9. package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +3 -3
  10. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +5 -4
  11. package/apps/client-cms-editor/frontend/src/styles/studio.css +150 -149
  12. package/apps/client-cms-editor/package.json +1 -1
  13. package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +1 -1
  14. package/apps/client-cms-editor/shared/cms/package.json +1 -1
  15. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +42 -1
  16. package/docs/CMS_CONTEXTUAL_COMPOSER.md +4 -4
  17. package/docs/PRODUCT_LIFECYCLE.md +38 -38
  18. package/docs/REPO_FILE_MAP.txt +2 -2
  19. package/docs/THEME_REFINERY.md +6 -6
  20. package/docs/WINDOWS_RUNTIME_INSTALL.md +1 -1
  21. package/docs/adr/ADR-0002-brand-campaign-plugin-boundaries.md +603 -0
  22. package/docs/adr/ADR-0003-copro-clean-room-product-architecture.md +34 -0
  23. package/docs/adr/ADR-0003-product-portfolio-and-package-taxonomy.md +146 -0
  24. package/docs/adr/ADR-0004-product-composition-and-provider-neutrality.md +56 -0
  25. package/docs/adr/ADR-0005-offer-graduation-standard.md +66 -0
  26. package/docs/adr/README.md +25 -0
  27. package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +1 -1
  28. package/docs/architecture/DUAL_ANALYTICS_PRODUCT.md +1 -1
  29. package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +1 -1
  30. package/docs/content-studio/REVISION_GATE_2026-09-27.md +3 -3
  31. package/docs/contracts/google-cloud-oauth-setup.md +1 -1
  32. package/docs/local-studio/WORKMODE_DONOR_NOTES.md +3 -3
  33. package/docs/plans/ASTRA-BRIEF-2026-09-18.md +1 -1
  34. package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +2 -2
  35. package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +1 -1
  36. package/docs/plans/NEXT-AGENT-HANDOFF.md +2 -2
  37. package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +68 -68
  38. package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +1 -1
  39. package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +1 -1
  40. package/docs/prd/PRD-agentsam-analytics.md +174 -0
  41. package/docs/prd/PRD-agentsam-brand.md +181 -0
  42. package/docs/prd/PRD-agentsam-browser.md +177 -0
  43. package/docs/prd/PRD-agentsam-cad-studio.md +177 -0
  44. package/docs/prd/PRD-agentsam-campaign.md +1178 -0
  45. package/docs/prd/PRD-agentsam-commerce-studio.md +180 -0
  46. package/docs/prd/PRD-agentsam-content-studio.md +179 -0
  47. package/docs/prd/PRD-agentsam-copro.md +39 -0
  48. package/docs/prd/PRD-agentsam-database-studio.md +175 -0
  49. package/docs/prd/PRD-agentsam-developer-studio.md +175 -0
  50. package/docs/prd/PRD-agentsam-hosted-runtime.md +180 -0
  51. package/docs/prd/PRD-agentsam-knowledge.md +174 -0
  52. package/docs/prd/PRD-agentsam-local-studio.md +180 -0
  53. package/docs/prd/PRD-agentsam-merch.md +177 -0
  54. package/docs/prd/PRD-agentsam-platform.md +179 -0
  55. package/docs/prd/PRD-agentsam-site-studio.md +180 -0
  56. package/docs/prd/PRD-agentsam-work.md +180 -0
  57. package/docs/prd/README.md +39 -0
  58. package/docs/product/COPRO-DONOR-AUDIT.md +9 -0
  59. package/docs/product/COPRO-EXECUTION-PLAN.md +81 -0
  60. package/docs/product/COPRO-UI-QUALITY-GATE.md +119 -0
  61. package/docs/product/OFFER-PORTFOLIO.md +158 -0
  62. package/docs/product/PACKAGE-TAXONOMY.md +78 -0
  63. package/examples/hyperspace-demo/dist/assets/index-SZ2LfOpJ.js +242 -0
  64. package/examples/hyperspace-demo/dist/index.html +13 -0
  65. package/native/agentsam-machine/core/src/lib.rs +2 -2
  66. package/package.json +55 -35
  67. package/packages/agentsam-brand/package.json +3 -2
  68. package/packages/agentsam-brand/src/public.js +192 -0
  69. package/packages/agentsam-contracts/README.md +1 -1
  70. package/packages/agentsam-contracts/package.json +1 -1
  71. package/packages/agentsam-errors/package.json +1 -1
  72. package/packages/agentsam-goap/package.json +2 -2
  73. package/packages/agentsam-hooks/package.json +1 -1
  74. package/packages/agentsam-knowledge/package.json +1 -1
  75. package/packages/agentsam-merch/package.json +1 -1
  76. package/packages/agentsam-merch/test/merch.test.mjs +1 -1
  77. package/packages/agentsam-nav/dist/browser.global.js +34 -71
  78. package/packages/agentsam-nav/dist/browser.js +759 -3157
  79. package/packages/agentsam-nav/dist/index.js +751 -3149
  80. package/packages/agentsam-nav/package.json +1 -1
  81. package/packages/agentsam-queue-control/package.json +1 -1
  82. package/packages/agentsam-repository/package.json +1 -1
  83. package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +670 -0
  84. package/packages/agentsam-vault/package.json +1 -1
  85. package/packages/agentsam-workbench/package.json +5 -4
  86. package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +28 -4
  87. package/packages/agentsam-workbench/src/agent/contextual-composer.css +72 -70
  88. package/packages/agentsam-workbench/src/agent/mini-agentsam.css +228 -10
  89. package/packages/connectors/cfoa/package.json +1 -1
  90. package/packages/heuristic-theme/package.json +1 -1
  91. package/packages/identity/package.json +1 -1
  92. package/packages/identity/src/frontend/auth-portal/pages/login.html +1 -1
  93. package/packages/identity/src/frontend/auth-portal/pages/reset.html +1 -1
  94. package/packages/identity/src/frontend/auth-portal/pages/signup.html +1 -1
  95. package/packages/identity/tests/chatgpt-provider.test.mjs +3 -3
  96. package/packages/identity/tests/oauth-consent-view.test.mjs +11 -11
  97. package/packages/providers/completeful/README.md +3 -3
  98. package/packages/providers/completeful/package.json +1 -1
  99. package/packages/theme-cypress/README.md +11 -0
  100. package/packages/{theme-church-site → theme-cypress}/package.json +14 -11
  101. package/packages/theme-cypress/prebuild.json +23 -0
  102. package/packages/theme-cypress/site/assets/generated/favicon.svg +7 -0
  103. package/packages/theme-cypress/site/assets/generated/media-044ba16613.webp +0 -0
  104. package/packages/theme-cypress/site/assets/generated/media-0a1ea6f6d9.webp +0 -0
  105. package/packages/theme-cypress/site/assets/generated/media-0c06778307.webp +0 -0
  106. package/packages/theme-cypress/site/assets/generated/media-1539ed373a.webp +0 -0
  107. package/packages/theme-cypress/site/assets/generated/media-2df479fd2d.webp +0 -0
  108. package/packages/theme-cypress/site/assets/generated/media-2e8bd0d9bc.webp +0 -0
  109. package/packages/theme-cypress/site/assets/generated/media-41d4e2643c.webp +0 -0
  110. package/packages/theme-cypress/site/assets/generated/media-46205bfde8.webp +0 -0
  111. package/packages/theme-cypress/site/assets/generated/media-50c5f3e279.webp +0 -0
  112. package/packages/theme-cypress/site/assets/generated/media-5f1467778c.webp +0 -0
  113. package/packages/theme-cypress/site/assets/generated/media-6703642b22.webp +0 -0
  114. package/packages/theme-cypress/site/assets/generated/media-87a490bc8e.webp +0 -0
  115. package/packages/theme-cypress/site/assets/generated/media-997c10ef39.webp +0 -0
  116. package/packages/theme-cypress/site/assets/generated/media-a423735c21.webp +0 -0
  117. package/packages/theme-cypress/site/assets/generated/media-c9cea5245b.webp +0 -0
  118. package/packages/theme-cypress/site/assets/generated/media-cab3c84c60.webp +0 -0
  119. package/packages/theme-cypress/site/assets/generated/media-ce06595d59.webp +0 -0
  120. package/packages/theme-cypress/site/assets/generated/media-d268905e7e.webp +0 -0
  121. package/packages/theme-cypress/site/assets/generated/media-f6711b5053.webp +0 -0
  122. package/packages/theme-cypress/site/assets/generated/media-manifest.json +226 -0
  123. package/packages/theme-cypress/site/assets/generated/social-card.webp +0 -0
  124. package/packages/theme-cypress/site/assets/generated/theme-mark-192.png +0 -0
  125. package/packages/theme-cypress/site/assets/generated/theme-mark-512.png +0 -0
  126. package/packages/theme-cypress/site/assets/generated/theme-mark.svg +7 -0
  127. package/packages/theme-cypress/site/beliefs.html +175 -0
  128. package/packages/theme-cypress/site/community.html +175 -0
  129. package/packages/theme-cypress/site/connect.html +319 -0
  130. package/packages/theme-cypress/site/donate.html +106 -0
  131. package/packages/theme-cypress/site/groups.html +1352 -0
  132. package/packages/theme-cypress/site/help.html +1 -0
  133. package/packages/theme-cypress/site/icons/clock.svg +4 -0
  134. package/packages/theme-cypress/site/icons/email.svg +4 -0
  135. package/packages/theme-cypress/site/icons/giving.svg +4 -0
  136. package/packages/theme-cypress/site/icons/home.svg +4 -0
  137. package/packages/theme-cypress/site/icons/location.svg +4 -0
  138. package/packages/theme-cypress/site/icons/media.svg +4 -0
  139. package/packages/theme-cypress/site/icons/ministries.svg +6 -0
  140. package/packages/theme-cypress/site/icons/prayer.svg +5 -0
  141. package/packages/theme-cypress/site/icons/visit.svg +6 -0
  142. package/packages/theme-cypress/site/index.html +1013 -0
  143. package/packages/theme-cypress/site/mensgroup.html +477 -0
  144. package/packages/theme-cypress/site/mission.html +512 -0
  145. package/packages/theme-cypress/site/unified-footer.css +172 -0
  146. package/packages/theme-cypress/site/unified-footer.js +175 -0
  147. package/packages/theme-cypress/site/unified-header.css +226 -0
  148. package/packages/theme-cypress/site/unified-header.js +111 -0
  149. package/packages/theme-cypress/site/womansgroup.html +452 -0
  150. package/packages/{theme-church-site → theme-cypress}/src/index.js +22 -35
  151. package/packages/theme-cypress/src/node.js +69 -0
  152. package/packages/theme-cypress/test/theme.test.mjs +47 -0
  153. package/packages/theme-ember/README.md +11 -0
  154. package/packages/{theme-fuelnfree-site → theme-ember}/package.json +14 -11
  155. package/packages/theme-ember/prebuild.json +23 -0
  156. package/packages/theme-ember/site/about.html +1840 -0
  157. package/packages/theme-ember/site/assets/generated/favicon.svg +7 -0
  158. package/packages/theme-ember/site/assets/generated/media-1e0b1e6ee6.webp +0 -0
  159. package/packages/theme-ember/site/assets/generated/media-2371dcb426.webp +0 -0
  160. package/packages/theme-ember/site/assets/generated/media-2db4f5ff9e.webp +0 -0
  161. package/packages/theme-ember/site/assets/generated/media-4ed07a756e.webp +0 -0
  162. package/packages/theme-ember/site/assets/generated/media-58182cf167.webp +0 -0
  163. package/packages/theme-ember/site/assets/generated/media-5b8b8472ae.webp +0 -0
  164. package/packages/theme-ember/site/assets/generated/media-71f4bd16a1.webp +0 -0
  165. package/packages/theme-ember/site/assets/generated/media-7c1c8120bc.webp +0 -0
  166. package/packages/theme-ember/site/assets/generated/media-832b176433.webp +0 -0
  167. package/packages/theme-ember/site/assets/generated/media-931439701c.webp +0 -0
  168. package/packages/theme-ember/site/assets/generated/media-c2860d40d1.webp +0 -0
  169. package/packages/theme-ember/site/assets/generated/media-c56974d198.webp +0 -0
  170. package/packages/theme-ember/site/assets/generated/media-cb83a44ff4.webp +0 -0
  171. package/packages/theme-ember/site/assets/generated/media-df02ccdfcf.webp +0 -0
  172. package/packages/theme-ember/site/assets/generated/media-fab72cd344.webp +0 -0
  173. package/packages/theme-ember/site/assets/generated/media-manifest.json +190 -0
  174. package/packages/theme-ember/site/assets/generated/social-card.webp +0 -0
  175. package/packages/theme-ember/site/assets/generated/theme-mark-192.png +0 -0
  176. package/packages/theme-ember/site/assets/generated/theme-mark-512.png +0 -0
  177. package/packages/theme-ember/site/assets/generated/theme-mark.svg +7 -0
  178. package/packages/theme-ember/site/community.html +1664 -0
  179. package/packages/theme-ember/site/index.html +2044 -0
  180. package/packages/theme-ember/site/shop.html +2104 -0
  181. package/packages/{theme-fuelnfree-site → theme-ember}/src/index.js +23 -33
  182. package/packages/theme-ember/src/node.js +69 -0
  183. package/packages/theme-ember/test/theme.test.mjs +47 -0
  184. package/packages/theme-forge/README.md +11 -0
  185. package/packages/theme-forge/package.json +44 -0
  186. package/packages/theme-forge/prebuild.json +23 -0
  187. package/packages/theme-forge/site/apple-touch-icon.png +0 -0
  188. package/packages/theme-forge/site/assets/generated/favicon.svg +7 -0
  189. package/packages/theme-forge/site/assets/generated/media-manifest.json +17 -0
  190. package/packages/theme-forge/site/assets/generated/social-card.webp +0 -0
  191. package/packages/theme-forge/site/assets/generated/theme-mark-192.png +0 -0
  192. package/packages/theme-forge/site/assets/generated/theme-mark-512.png +0 -0
  193. package/packages/theme-forge/site/assets/generated/theme-mark.svg +7 -0
  194. package/packages/theme-forge/site/assets/index-DBOqQVsA.css +1 -0
  195. package/packages/theme-forge/site/assets/index-pXC0o9jp.js +241 -0
  196. package/packages/theme-forge/site/assets/workbox-window.prod.es5-Bd17z0YL.js +2 -0
  197. package/packages/theme-forge/site/index.html +5 -0
  198. package/packages/theme-forge/site/manifest.webmanifest +1 -0
  199. package/packages/theme-forge/site/pwa-192x192.png +0 -0
  200. package/packages/theme-forge/site/pwa-512x512.png +0 -0
  201. package/packages/theme-forge/site/sw.js +107 -0
  202. package/packages/theme-forge/site/workbox-7e5eb42b.js +3395 -0
  203. package/packages/theme-forge/src/index.js +76 -0
  204. package/packages/theme-forge/src/node.js +69 -0
  205. package/packages/theme-forge/test/theme.test.mjs +47 -0
  206. package/packages/theme-grove/README.md +11 -0
  207. package/packages/{theme-floors-site → theme-grove}/package.json +14 -11
  208. package/packages/theme-grove/prebuild.json +23 -0
  209. package/packages/theme-grove/site/assets/generated/favicon.svg +7 -0
  210. package/packages/theme-grove/site/assets/generated/media-098b13d75a.webp +0 -0
  211. package/packages/theme-grove/site/assets/generated/media-0c064db1aa.webp +0 -0
  212. package/packages/theme-grove/site/assets/generated/media-0fbfef655e.webp +0 -0
  213. package/packages/theme-grove/site/assets/generated/media-14759c7460.webp +0 -0
  214. package/packages/theme-grove/site/assets/generated/media-19b23d2a8f.webp +0 -0
  215. package/packages/theme-grove/site/assets/generated/media-2012f04243.webp +0 -0
  216. package/packages/theme-grove/site/assets/generated/media-23b8c5e2bb.webp +0 -0
  217. package/packages/theme-grove/site/assets/generated/media-2bffb1a6ef.webp +0 -0
  218. package/packages/theme-grove/site/assets/generated/media-2e1523a5b0.webp +0 -0
  219. package/packages/theme-grove/site/assets/generated/media-31107c21f2.webp +0 -0
  220. package/packages/theme-grove/site/assets/generated/media-31373ec865.webp +0 -0
  221. package/packages/theme-grove/site/assets/generated/media-45e8e27542.webp +0 -0
  222. package/packages/theme-grove/site/assets/generated/media-4aa9846fe7.webp +0 -0
  223. package/packages/theme-grove/site/assets/generated/media-5476b24219.webp +0 -0
  224. package/packages/theme-grove/site/assets/generated/media-7a227d3e4b.webp +0 -0
  225. package/packages/theme-grove/site/assets/generated/media-b183eed550.webp +0 -0
  226. package/packages/theme-grove/site/assets/generated/media-b2c650f9ab.webp +0 -0
  227. package/packages/theme-grove/site/assets/generated/media-b5d7471694.webp +0 -0
  228. package/packages/theme-grove/site/assets/generated/media-c86498fdb4.webp +0 -0
  229. package/packages/theme-grove/site/assets/generated/media-ce2cfff9a1.webp +0 -0
  230. package/packages/theme-grove/site/assets/generated/media-cf41a5f324.webp +0 -0
  231. package/packages/theme-grove/site/assets/generated/media-ec6c01bf8d.webp +0 -0
  232. package/packages/theme-grove/site/assets/generated/media-manifest.json +267 -0
  233. package/packages/theme-grove/site/assets/generated/social-card.webp +0 -0
  234. package/packages/theme-grove/site/assets/generated/theme-mark-192.png +0 -0
  235. package/packages/theme-grove/site/assets/generated/theme-mark-512.png +0 -0
  236. package/packages/theme-grove/site/assets/generated/theme-mark.svg +7 -0
  237. package/packages/theme-grove/site/index.html +1429 -0
  238. package/packages/theme-grove/site/pages/contact.html +664 -0
  239. package/packages/theme-grove/site/pages/gallery.html +216 -0
  240. package/packages/theme-grove/site/pages/privacy.html +180 -0
  241. package/packages/theme-grove/site/pages/process.html +592 -0
  242. package/packages/theme-grove/site/pages/services.html +567 -0
  243. package/packages/theme-grove/site/pages/terms.html +189 -0
  244. package/packages/theme-grove/site/shared/footer.css +140 -0
  245. package/packages/theme-grove/site/shared/footer.html +41 -0
  246. package/packages/{theme-floors-site → theme-grove}/src/index.js +24 -35
  247. package/packages/theme-grove/src/node.js +69 -0
  248. package/packages/theme-grove/test/theme.test.mjs +47 -0
  249. package/packages/theme-harbor/README.md +11 -0
  250. package/packages/{theme-insurance-site → theme-harbor}/package.json +14 -11
  251. package/packages/theme-harbor/prebuild.json +23 -0
  252. package/packages/theme-harbor/site/assets/generated/favicon.svg +7 -0
  253. package/packages/theme-harbor/site/assets/generated/media-manifest.json +17 -0
  254. package/packages/theme-harbor/site/assets/generated/social-card.webp +0 -0
  255. package/packages/theme-harbor/site/assets/generated/theme-mark-192.png +0 -0
  256. package/packages/theme-harbor/site/assets/generated/theme-mark-512.png +0 -0
  257. package/packages/theme-harbor/site/assets/generated/theme-mark.svg +7 -0
  258. package/packages/theme-harbor/site/assets/index-D58RKkr-.js +239 -0
  259. package/packages/theme-harbor/site/assets/index-Dd3YN9Mf.css +1 -0
  260. package/packages/theme-harbor/site/index.html +15 -0
  261. package/packages/theme-harbor/src/index.js +76 -0
  262. package/packages/theme-harbor/src/node.js +69 -0
  263. package/packages/theme-harbor/test/theme.test.mjs +47 -0
  264. package/packages/theme-resolve/README.md +11 -0
  265. package/packages/theme-resolve/package.json +44 -0
  266. package/packages/theme-resolve/prebuild.json +23 -0
  267. package/packages/theme-resolve/site/assets/generated/favicon.svg +7 -0
  268. package/packages/theme-resolve/site/assets/generated/media-216610d365.webp +0 -0
  269. package/packages/theme-resolve/site/assets/generated/media-2a9e0f623f.webp +0 -0
  270. package/packages/theme-resolve/site/assets/generated/media-a70660bfa9.webp +0 -0
  271. package/packages/theme-resolve/site/assets/generated/media-bc1322e813.webp +0 -0
  272. package/packages/theme-resolve/site/assets/generated/media-ced60fcecc.webp +0 -0
  273. package/packages/theme-resolve/site/assets/generated/media-manifest.json +72 -0
  274. package/packages/theme-resolve/site/assets/generated/social-card.webp +0 -0
  275. package/packages/theme-resolve/site/assets/generated/theme-mark-192.png +0 -0
  276. package/packages/theme-resolve/site/assets/generated/theme-mark-512.png +0 -0
  277. package/packages/theme-resolve/site/assets/generated/theme-mark.svg +7 -0
  278. package/packages/theme-resolve/site/assets/index-BSaLpPG1.css +2 -0
  279. package/packages/theme-resolve/site/assets/index-D8au46Z5.js +17 -0
  280. package/packages/theme-resolve/site/index.html +22 -0
  281. package/packages/theme-resolve/src/index.js +69 -0
  282. package/packages/theme-resolve/src/node.js +69 -0
  283. package/packages/theme-resolve/test/theme.test.mjs +47 -0
  284. package/packages/theme-scenes/package.json +1 -1
  285. package/packages/theme-scenes/src/registry.js +32 -49
  286. package/packages/theme-summit/README.md +11 -0
  287. package/packages/{theme-shinshu-site → theme-summit}/package.json +14 -11
  288. package/packages/theme-summit/prebuild.json +23 -0
  289. package/packages/theme-summit/site/adventures.html +450 -0
  290. package/packages/theme-summit/site/assets/generated/favicon.svg +7 -0
  291. package/packages/theme-summit/site/assets/generated/media-1e958ea679.webp +0 -0
  292. package/packages/theme-summit/site/assets/generated/media-9d4521abba.webp +0 -0
  293. package/packages/theme-summit/site/assets/generated/media-manifest.json +39 -0
  294. package/packages/theme-summit/site/assets/generated/social-card.webp +0 -0
  295. package/packages/theme-summit/site/assets/generated/theme-mark-192.png +0 -0
  296. package/packages/theme-summit/site/assets/generated/theme-mark-512.png +0 -0
  297. package/packages/theme-summit/site/assets/generated/theme-mark.svg +7 -0
  298. package/packages/theme-summit/site/business-card.html +315 -0
  299. package/packages/theme-summit/site/chatbot.js +312 -0
  300. package/packages/theme-summit/site/gallery.html +524 -0
  301. package/packages/theme-summit/site/i18n.js +947 -0
  302. package/packages/theme-summit/site/icons.svg +87 -0
  303. package/packages/theme-summit/site/index.html +2415 -0
  304. package/packages/theme-summit/site/pages/about.html +100 -0
  305. package/packages/theme-summit/site/pages/contact.html +117 -0
  306. package/packages/theme-summit/site/pages/dashboard.html +111 -0
  307. package/packages/theme-summit/site/pages/index.html +129 -0
  308. package/packages/theme-summit/site/pages/services.html +125 -0
  309. package/packages/theme-summit/site/shared/footer.html +41 -0
  310. package/packages/theme-summit/site/shared/layout.js +315 -0
  311. package/packages/theme-summit/site/shared/nav.html +19 -0
  312. package/packages/theme-summit/site/shared/styles.css +696 -0
  313. package/packages/theme-summit/site/theme-styles.css +131 -0
  314. package/packages/theme-summit/site/themes.js +442 -0
  315. package/packages/{theme-shinshu-site → theme-summit}/src/index.js +23 -35
  316. package/packages/theme-summit/src/node.js +69 -0
  317. package/packages/theme-summit/test/theme.test.mjs +47 -0
  318. package/packages/theme-violet/README.md +11 -0
  319. package/packages/{theme-companions-site → theme-violet}/package.json +14 -11
  320. package/packages/theme-violet/prebuild.json +23 -0
  321. package/packages/theme-violet/site/assets/generated/favicon.svg +7 -0
  322. package/packages/theme-violet/site/assets/generated/media-07b46d6457.webp +0 -0
  323. package/packages/theme-violet/site/assets/generated/media-09d38ddffc.webp +0 -0
  324. package/packages/theme-violet/site/assets/generated/media-254b0e2ad3.webp +0 -0
  325. package/packages/theme-violet/site/assets/generated/media-3a1b5c0a8d.webp +0 -0
  326. package/packages/theme-violet/site/assets/generated/media-3a78eb7d9d.webp +0 -0
  327. package/packages/theme-violet/site/assets/generated/media-49076977d8.webp +0 -0
  328. package/packages/theme-violet/site/assets/generated/media-6342d50dbd.webp +0 -0
  329. package/packages/theme-violet/site/assets/generated/media-646c65381e.webp +0 -0
  330. package/packages/theme-violet/site/assets/generated/media-7a5fb7c91a.webp +0 -0
  331. package/packages/theme-violet/site/assets/generated/media-9bbd133220.webp +0 -0
  332. package/packages/theme-violet/site/assets/generated/media-9e73307c2a.webp +0 -0
  333. package/packages/theme-violet/site/assets/generated/media-af382146a0.webp +0 -0
  334. package/packages/theme-violet/site/assets/generated/media-b2ae348b43.webp +0 -0
  335. package/packages/theme-violet/site/assets/generated/media-b8f43a3887.webp +0 -0
  336. package/packages/theme-violet/site/assets/generated/media-c96a3e1979.webp +0 -0
  337. package/packages/theme-violet/site/assets/generated/media-cd07daa54a.webp +0 -0
  338. package/packages/theme-violet/site/assets/generated/media-e03ab6b5fe.webp +0 -0
  339. package/packages/theme-violet/site/assets/generated/media-eae4917d25.webp +0 -0
  340. package/packages/theme-violet/site/assets/generated/media-f227ec5690.webp +0 -0
  341. package/packages/theme-violet/site/assets/generated/media-fb57ffd474.webp +0 -0
  342. package/packages/theme-violet/site/assets/generated/media-manifest.json +245 -0
  343. package/packages/theme-violet/site/assets/generated/social-card.webp +0 -0
  344. package/packages/theme-violet/site/assets/generated/theme-mark-192.png +0 -0
  345. package/packages/theme-violet/site/assets/generated/theme-mark-512.png +0 -0
  346. package/packages/theme-violet/site/assets/generated/theme-mark.svg +7 -0
  347. package/packages/theme-violet/site/global/cpas-contact.css +405 -0
  348. package/packages/theme-violet/site/global/cpas-donate-v2.css +931 -0
  349. package/packages/theme-violet/site/global/cpas-drawer-override.css +1 -0
  350. package/packages/theme-violet/site/global/cpas-footer.html +38 -0
  351. package/packages/theme-violet/site/global/cpas-header.html +30 -0
  352. package/packages/theme-violet/site/global/cpas-hero-watercolor.css +275 -0
  353. package/packages/theme-violet/site/global/cpas-modals.js +802 -0
  354. package/packages/theme-violet/site/global/cpas-public-surface.css +982 -0
  355. package/packages/theme-violet/site/global/cpas-shell.css +3980 -0
  356. package/packages/theme-violet/site/global/cpas-shell.js +107 -0
  357. package/packages/theme-violet/site/global/cpas-shelter-hub.css +326 -0
  358. package/packages/theme-violet/site/index.html +141 -0
  359. package/packages/theme-violet/site/pages/about/campaigns.html +28 -0
  360. package/packages/theme-violet/site/pages/about/cta.html +25 -0
  361. package/packages/theme-violet/site/pages/about/hero.html +46 -0
  362. package/packages/theme-violet/site/pages/about/paths.html +24 -0
  363. package/packages/theme-violet/site/pages/about/why_we_exist.html +28 -0
  364. package/packages/theme-violet/site/pages/home/campaigns.html +67 -0
  365. package/packages/theme-violet/site/pages/home/hero.html +42 -0
  366. package/packages/theme-violet/site/pages/home/how-it-helps.html +32 -0
  367. package/packages/theme-violet/site/pages/home/impact-stats.html +31 -0
  368. package/packages/theme-violet/site/pages/home/mission.html +36 -0
  369. package/packages/theme-violet/site/pages/home/newsletter.html +29 -0
  370. package/packages/theme-violet/site/pages/home/transport-win.html +22 -0
  371. package/packages/theme-violet/site/pages/index.html +141 -0
  372. package/packages/theme-violet/src/index.js +76 -0
  373. package/packages/theme-violet/src/node.js +69 -0
  374. package/packages/theme-violet/test/theme.test.mjs +47 -0
  375. package/packages/work-graph/package.json +1 -1
  376. package/protocol/features/README.md +1 -1
  377. package/protocol/features/catalog.json +12 -12
  378. package/protocol/features/examples/provider-resend.feature.json +2 -2
  379. package/protocol/presets/catalog.json +1 -1
  380. package/protocol/theme-refinery/prebuild-registry.json +45 -0
  381. package/protocol/theme-refinery/product-metadata.schema.json +63 -26
  382. package/protocol/theme-refinery/receipts/prebuild-remaster-20261004.json +21 -0
  383. package/src/plugins/completeful.js +2 -2
  384. package/packages/theme-church-site/README.md +0 -10
  385. package/packages/theme-church-site/src/harvest.json +0 -16
  386. package/packages/theme-church-site/test/theme.test.mjs +0 -21
  387. package/packages/theme-companions-site/README.md +0 -10
  388. package/packages/theme-companions-site/src/harvest.json +0 -14
  389. package/packages/theme-companions-site/src/index.js +0 -87
  390. package/packages/theme-companions-site/test/theme.test.mjs +0 -21
  391. package/packages/theme-floors-site/README.md +0 -10
  392. package/packages/theme-floors-site/src/harvest.json +0 -16
  393. package/packages/theme-floors-site/test/theme.test.mjs +0 -21
  394. package/packages/theme-fuelnfree-site/README.md +0 -10
  395. package/packages/theme-fuelnfree-site/src/harvest.json +0 -15
  396. package/packages/theme-fuelnfree-site/test/theme.test.mjs +0 -21
  397. package/packages/theme-handyman-site/README.md +0 -10
  398. package/packages/theme-handyman-site/package.json +0 -41
  399. package/packages/theme-handyman-site/src/harvest.json +0 -12
  400. package/packages/theme-handyman-site/src/index.js +0 -88
  401. package/packages/theme-handyman-site/test/theme.test.mjs +0 -21
  402. package/packages/theme-insurance-site/README.md +0 -10
  403. package/packages/theme-insurance-site/src/harvest.json +0 -12
  404. package/packages/theme-insurance-site/src/index.js +0 -88
  405. package/packages/theme-insurance-site/test/theme.test.mjs +0 -21
  406. package/packages/theme-shinshu-site/README.md +0 -10
  407. package/packages/theme-shinshu-site/src/harvest.json +0 -14
  408. package/packages/theme-shinshu-site/test/theme.test.mjs +0 -21
  409. package/protocol/theme-refinery/lineage-registry.json +0 -105
  410. package/protocol/theme-refinery/receipts/products-registry-batch-20260924.json +0 -318
  411. package/protocol/theme-refinery/receipts/theme-harvest-20260924.json +0 -472
@@ -0,0 +1,1352 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="utf-8"/>
6
+ <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
7
+ <!-- SEO Meta Tags -->
8
+ <title>Small Groups — Cypress</title>
9
+ <meta content="Explore Cypress, a warm community website prebuild with clear paths to events, groups, giving, visits, and the mission behind the work." name="description"/>
10
+ <meta content="church groups River Parish, men's ministry Louisiana, women's ministry, Community Men church, Community Women women, small groups River Parish LA, Bible study River Parish, Christian community" name="keywords"/>
11
+ <meta content="Cypress Commons" name="author"/>
12
+ <meta content="index,follow,max-image-preview:large" name="robots"/>
13
+ <link href="https://example.com/groups.html" rel="canonical"/>
14
+ <!-- Open Graph / Facebook -->
15
+ <meta content="website" property="og:type"/>
16
+ <meta content="https://example.com/groups.html" property="og:url"/>
17
+ <meta content="Small Groups — Cypress" property="og:title"/>
18
+ <meta content="Explore Cypress, a warm community website prebuild with clear paths to events, groups, giving, visits, and the mission behind the work." property="og:description"/>
19
+ <meta content="https://example.com/assets/generated/social-card.webp" property="og:image"/>
20
+ <!-- Twitter -->
21
+ <meta content="summary_large_image" property="twitter:card"/>
22
+ <meta content="https://cypress.example/" property="twitter:url"/>
23
+ <meta content="Small Groups | Cypress Commons" property="twitter:title"/>
24
+ <meta content="Join Community Men men's ministry or Community Women women's gathering. Find authentic community and spiritual growth." property="twitter:description"/>
25
+ <meta content="/assets/generated/media-46205bfde8.webp" property="twitter:image"/>
26
+ <!-- Local Business Schema -->
27
+ <script type="application/ld+json">
28
+ {
29
+ "@context": "https://schema.org",
30
+ "@type": "Church",
31
+ "name": "Cypress Commons",
32
+ "description": "A welcoming Christian community in River Parish, Louisiana offering small groups, Bible study, and spiritual growth opportunities.",
33
+ "url": "https://cypress.example/",
34
+ "telephone": "+1-202-555-0100",
35
+ "email": "hello@cypress.example",
36
+ "address": {
37
+ "@type": "PostalAddress",
38
+ "streetAddress": "100 Cypress Way",
39
+ "addressLocality": "River Parish",
40
+ "addressRegion": "LA",
41
+ "postalCode": "70560",
42
+ "addressCountry": "US"
43
+ },
44
+ "geo": {
45
+ "@type": "GeoCoordinates",
46
+ "latitude": 30.0035,
47
+ "longitude": -91.8187
48
+ },
49
+ "openingHoursSpecification": [
50
+ {
51
+ "@type": "OpeningHoursSpecification",
52
+ "dayOfWeek": "Sunday",
53
+ "opens": "09:30",
54
+ "closes": "11:00"
55
+ }
56
+ ],
57
+ "sameAs": [
58
+ "#social"
59
+ ]
60
+ }
61
+ </script>
62
+ <link href="https://fonts.googleapis.com" rel="preconnect"/>
63
+ <link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
64
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap" rel="stylesheet"/>
65
+ <!-- Favicon -->
66
+ <link href="/assets/generated/media-ce06595d59.webp" rel="icon" type="image/webp"/>
67
+ <style>
68
+ :root {
69
+ --bg-primary: #fdfbf7;
70
+ --bg-glass-light: rgba(255, 255, 255, 0.85);
71
+ --bg-glass-dark: rgba(37, 99, 235, 0.1);
72
+ --text-primary: #1e293b;
73
+ --text-secondary: #64748b;
74
+ --border-glass: rgba(226, 232, 240, 0.5);
75
+ --shadow-glass: 0 8px 32px rgba(0, 0, 0, 0.08);
76
+ --blue-primary: #2563eb;
77
+ --blue-gradient: linear-gradient(135deg, rgba(37, 99, 235, 0.9), rgba(59, 130, 246, 0.85));
78
+ --font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
79
+ --container-max: 1400px;
80
+ --section-padding: clamp(3rem, 8vw, 6rem);
81
+ }
82
+
83
+ * {
84
+ margin: 0;
85
+ padding: 0;
86
+ box-sizing: border-box;
87
+ }
88
+
89
+ html {
90
+ scroll-behavior: smooth;
91
+ }
92
+
93
+ body {
94
+ font-family: var(--font-body);
95
+ color: var(--text-primary);
96
+ background: var(--bg-primary);
97
+ line-height: 1.6;
98
+ font-size: clamp(16px, 1.5vw, 18px);
99
+ overflow-x: hidden;
100
+ }
101
+
102
+ /* Header */
103
+ header {
104
+ position: fixed;
105
+ top: 0;
106
+ left: 0;
107
+ right: 0;
108
+ width: 100%;
109
+ background: var(--bg-glass-light);
110
+ backdrop-filter: blur(20px) saturate(180%);
111
+ -webkit-backdrop-filter: blur(20px) saturate(180%);
112
+ border-bottom: 1px solid var(--border-glass);
113
+ box-shadow: var(--shadow-glass);
114
+ z-index: 1000;
115
+ height: 80px;
116
+ }
117
+
118
+ .header-container {
119
+ max-width: var(--container-max);
120
+ margin: 0 auto;
121
+ padding: 0 clamp(1.5rem, 4vw, 3rem);
122
+ height: 100%;
123
+ display: flex;
124
+ justify-content: space-between;
125
+ align-items: center;
126
+ }
127
+
128
+ .logo-link {
129
+ display: flex;
130
+ align-items: center;
131
+ text-decoration: none;
132
+ }
133
+
134
+ .logo-container {
135
+ width: min(70vw, 200px);
136
+ max-width: 200px;
137
+ height: auto;
138
+ }
139
+
140
+ .logo-img {
141
+ width: 100%;
142
+ height: auto;
143
+ object-fit: contain;
144
+ display: block;
145
+ }
146
+
147
+ .nav-desktop {
148
+ display: flex;
149
+ gap: clamp(1rem, 2vw, 2rem);
150
+ align-items: center;
151
+ }
152
+
153
+ .nav-link {
154
+ color: var(--text-secondary);
155
+ text-decoration: none;
156
+ font-weight: 500;
157
+ font-size: clamp(15px, 1.2vw, 16px);
158
+ padding: 0.5rem 0;
159
+ transition: color 0.2s;
160
+ position: relative;
161
+ }
162
+
163
+ .nav-link:hover,
164
+ .nav-link.active {
165
+ color: var(--blue-primary);
166
+ }
167
+
168
+ .nav-link.active::after {
169
+ content: '';
170
+ position: absolute;
171
+ bottom: 0;
172
+ left: 0;
173
+ right: 0;
174
+ height: 2px;
175
+ background: var(--blue-primary);
176
+ }
177
+
178
+ .mobile-toggle {
179
+ display: none;
180
+ background: none;
181
+ border: none;
182
+ cursor: pointer;
183
+ padding: 0.5rem;
184
+ flex-direction: column;
185
+ gap: 5px;
186
+ z-index: 1001;
187
+ }
188
+
189
+ .mobile-toggle span {
190
+ width: 24px;
191
+ height: 2px;
192
+ background: var(--text-primary);
193
+ border-radius: 2px;
194
+ transition: all 0.3s ease;
195
+ }
196
+
197
+ .mobile-toggle.active span:nth-child(1) {
198
+ transform: rotate(45deg) translate(5px, 5px);
199
+ }
200
+
201
+ .mobile-toggle.active span:nth-child(2) {
202
+ opacity: 0;
203
+ }
204
+
205
+ .mobile-toggle.active span:nth-child(3) {
206
+ transform: rotate(-45deg) translate(7px, -6px);
207
+ }
208
+
209
+ /* Glassmorphic Side Navigation */
210
+ .mobile-menu {
211
+ position: fixed;
212
+ top: 0;
213
+ right: -100%;
214
+ width: 70vw;
215
+ max-width: 320px;
216
+ height: 100vh;
217
+ background: rgba(255, 255, 255, 0.95);
218
+ backdrop-filter: blur(20px) saturate(180%);
219
+ -webkit-backdrop-filter: blur(20px) saturate(180%);
220
+ border-left: 1px solid var(--border-glass);
221
+ box-shadow: -4px 0 24px rgba(0, 0, 0, 0.1);
222
+ transition: right 0.4s cubic-bezier(0.4, 0, 0.2, 1);
223
+ z-index: 999;
224
+ overflow-y: auto;
225
+ }
226
+
227
+ .mobile-menu.active {
228
+ right: 0;
229
+ }
230
+
231
+ .mobile-menu-overlay {
232
+ position: fixed;
233
+ inset: 0;
234
+ background: rgba(0, 0, 0, 0.4);
235
+ backdrop-filter: blur(2px);
236
+ opacity: 0;
237
+ visibility: hidden;
238
+ transition: all 0.3s ease;
239
+ z-index: 998;
240
+ }
241
+
242
+ .mobile-menu-overlay.active {
243
+ opacity: 1;
244
+ visibility: visible;
245
+ }
246
+
247
+ .mobile-menu-header {
248
+ padding: 2rem 1.5rem 1rem;
249
+ border-bottom: 1px solid var(--border-glass);
250
+ }
251
+
252
+ .mobile-menu-logo {
253
+ width: 140px;
254
+ height: auto;
255
+ }
256
+
257
+ .mobile-menu ul {
258
+ list-style: none;
259
+ padding: 1.5rem 0;
260
+ }
261
+
262
+ .mobile-menu li {
263
+ margin: 0;
264
+ }
265
+
266
+ .mobile-menu a {
267
+ display: block;
268
+ padding: 1rem 1.5rem;
269
+ color: var(--text-primary);
270
+ text-decoration: none;
271
+ font-weight: 500;
272
+ font-size: 16px;
273
+ transition: all 0.2s ease;
274
+ position: relative;
275
+ }
276
+
277
+ .mobile-menu a:hover {
278
+ background: var(--bg-glass-dark);
279
+ color: var(--blue-primary);
280
+ }
281
+
282
+ .mobile-menu a.active {
283
+ color: var(--blue-primary);
284
+ background: var(--bg-glass-dark);
285
+ }
286
+
287
+ .mobile-menu a.active::before {
288
+ content: '';
289
+ position: absolute;
290
+ left: 0;
291
+ top: 50%;
292
+ transform: translateY(-50%);
293
+ width: 3px;
294
+ height: 60%;
295
+ background: var(--blue-primary);
296
+ border-radius: 0 2px 2px 0;
297
+ }
298
+
299
+ .mobile-menu-footer {
300
+ padding: 1.5rem;
301
+ border-top: 1px solid var(--border-glass);
302
+ margin-top: auto;
303
+ }
304
+
305
+ .mobile-menu-contact {
306
+ font-size: 14px;
307
+ color: var(--text-secondary);
308
+ line-height: 1.8;
309
+ }
310
+
311
+ .mobile-menu-contact a {
312
+ color: var(--blue-primary);
313
+ text-decoration: none;
314
+ padding: 0;
315
+ display: inline;
316
+ }
317
+
318
+ /* Hero */
319
+ .hero-fullbleed {
320
+ width: 100vw;
321
+ height: clamp(400px, 60vh, 700px);
322
+ margin-top: 80px;
323
+ position: relative;
324
+ overflow: hidden;
325
+ background: linear-gradient(135deg, rgba(37, 99, 235, 0.1), rgba(59, 130, 246, 0.05));
326
+ }
327
+
328
+ .hero-fullbleed img {
329
+ width: 100%;
330
+ height: 100%;
331
+ object-fit: cover;
332
+ object-position: center;
333
+ display: block;
334
+ }
335
+
336
+ /* Page Content */
337
+ .page-section {
338
+ padding: var(--section-padding) clamp(2rem, 4vw, 3rem);
339
+ max-width: var(--container-max);
340
+ margin: 0 auto;
341
+ }
342
+
343
+ .page-title {
344
+ font-size: clamp(36px, 4vw, 56px);
345
+ font-weight: 700;
346
+ color: var(--text-primary);
347
+ text-align: center;
348
+ margin-bottom: clamp(2rem, 4vw, 3rem);
349
+ }
350
+
351
+ .content-intro {
352
+ font-size: clamp(18px, 2vw, 22px);
353
+ color: var(--text-secondary);
354
+ line-height: 1.8;
355
+ text-align: center;
356
+ max-width: 800px;
357
+ margin: 0 auto clamp(4rem, 8vw, 6rem);
358
+ }
359
+
360
+ .groups-grid {
361
+ display: grid;
362
+ grid-template-columns: repeat(auto-fit, minmax(min(420px, 100%), 1fr));
363
+ gap: clamp(3rem, 5vw, 4rem);
364
+ margin-top: clamp(3rem, 6vw, 4rem);
365
+ }
366
+
367
+ .group-card {
368
+ background: var(--bg-glass-light);
369
+ backdrop-filter: blur(10px);
370
+ border: 1px solid var(--border-glass);
371
+ border-radius: 20px;
372
+ padding: 0;
373
+ box-shadow: var(--shadow-glass);
374
+ display: flex;
375
+ flex-direction: column;
376
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
377
+ overflow: hidden;
378
+ position: relative;
379
+ }
380
+
381
+ .group-card::before {
382
+ content: '';
383
+ position: absolute;
384
+ top: 0;
385
+ left: 0;
386
+ right: 0;
387
+ height: 4px;
388
+ background: var(--blue-gradient);
389
+ }
390
+
391
+ .group-card:hover {
392
+ transform: translateY(-4px);
393
+ box-shadow: 0 16px 48px rgba(37, 99, 235, 0.15);
394
+ }
395
+
396
+ .group-image-container {
397
+ width: 100%;
398
+ height: 380px;
399
+ position: relative;
400
+ overflow: hidden;
401
+ background: linear-gradient(135deg, #f3f4f6, #e5e7eb);
402
+ }
403
+
404
+ .group-image {
405
+ width: 100%;
406
+ height: 100%;
407
+ object-fit: cover;
408
+ object-position: center;
409
+ display: block;
410
+ transition: transform 0.4s ease;
411
+ }
412
+
413
+ .group-card:hover .group-image {
414
+ transform: scale(1.05);
415
+ }
416
+
417
+ .group-content {
418
+ padding: clamp(2rem, 4vw, 3rem);
419
+ display: flex;
420
+ flex-direction: column;
421
+ gap: 1.5rem;
422
+ }
423
+
424
+ .group-schedule {
425
+ background: var(--bg-glass-dark);
426
+ padding: 1.5rem;
427
+ border-radius: 12px;
428
+ margin-top: 0.5rem;
429
+ }
430
+
431
+ .group-schedule p {
432
+ color: var(--text-secondary);
433
+ font-size: clamp(14px, 1.2vw, 15px);
434
+ line-height: 1.8;
435
+ margin-bottom: 0.5rem;
436
+ }
437
+
438
+ .group-schedule strong {
439
+ color: var(--text-primary);
440
+ font-weight: 600;
441
+ }
442
+
443
+ .group-title {
444
+ font-size: clamp(24px, 2.5vw, 32px);
445
+ font-weight: 700;
446
+ color: var(--text-primary);
447
+ }
448
+
449
+ .group-summary {
450
+ color: var(--text-secondary);
451
+ font-size: clamp(16px, 1.3vw, 18px);
452
+ line-height: 1.7;
453
+ flex-grow: 1;
454
+ }
455
+
456
+ .content-block {
457
+ background: var(--bg-glass-light);
458
+ backdrop-filter: blur(10px);
459
+ border: 1px solid var(--border-glass);
460
+ border-radius: 20px;
461
+ padding: clamp(2.5rem, 5vw, 4rem);
462
+ box-shadow: var(--shadow-glass);
463
+ }
464
+
465
+ .community-highlights {
466
+ display: grid;
467
+ grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr));
468
+ gap: clamp(2rem, 4vw, 3rem);
469
+ margin: clamp(4rem, 8vw, 6rem) 0;
470
+ }
471
+
472
+ .highlight-card {
473
+ background: var(--bg-glass-light);
474
+ backdrop-filter: blur(10px);
475
+ border: 1px solid var(--border-glass);
476
+ border-radius: 16px;
477
+ padding: clamp(2rem, 3vw, 2.5rem);
478
+ text-align: center;
479
+ box-shadow: var(--shadow-glass);
480
+ transition: transform 0.3s ease;
481
+ }
482
+
483
+ .highlight-card:hover {
484
+ transform: translateY(-4px);
485
+ }
486
+
487
+ .highlight-icon {
488
+ width: 64px;
489
+ height: 64px;
490
+ background: var(--bg-glass-dark);
491
+ border-radius: 50%;
492
+ display: flex;
493
+ align-items: center;
494
+ justify-content: center;
495
+ margin: 0 auto 1.5rem;
496
+ }
497
+
498
+ .highlight-icon svg {
499
+ width: 32px;
500
+ height: 32px;
501
+ stroke: var(--blue-primary);
502
+ fill: none;
503
+ stroke-width: 2;
504
+ }
505
+
506
+ .highlight-title {
507
+ font-size: clamp(18px, 2vw, 20px);
508
+ font-weight: 600;
509
+ color: var(--text-primary);
510
+ margin-bottom: 0.75rem;
511
+ }
512
+
513
+ .highlight-text {
514
+ font-size: clamp(14px, 1.2vw, 16px);
515
+ color: var(--text-secondary);
516
+ line-height: 1.7;
517
+ }
518
+
519
+ /* Enhanced Gallery */
520
+ .gallery-grid {
521
+ display: grid;
522
+ grid-template-columns: repeat(auto-fit, minmax(min(320px, 100%), 1fr));
523
+ gap: clamp(1.5rem, 3vw, 2.5rem);
524
+ margin-top: clamp(2rem, 4vw, 3rem);
525
+ }
526
+
527
+ .gallery-item {
528
+ background: var(--bg-glass-light);
529
+ backdrop-filter: blur(10px);
530
+ border: 1px solid var(--border-glass);
531
+ border-radius: 16px;
532
+ overflow: hidden;
533
+ box-shadow: var(--shadow-glass);
534
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
535
+ cursor: pointer;
536
+ }
537
+
538
+ .gallery-item:hover {
539
+ transform: translateY(-4px);
540
+ box-shadow: 0 12px 36px rgba(37, 99, 235, 0.12);
541
+ }
542
+
543
+ .gallery-image-container {
544
+ width: 100%;
545
+ height: 300px;
546
+ overflow: hidden;
547
+ background: linear-gradient(135deg, #f3f4f6, #e5e7eb);
548
+ position: relative;
549
+ }
550
+
551
+ .gallery-image {
552
+ width: 100%;
553
+ height: 100%;
554
+ object-fit: cover;
555
+ object-position: center;
556
+ display: block;
557
+ transition: transform 0.4s ease;
558
+ }
559
+
560
+ .gallery-item:hover .gallery-image {
561
+ transform: scale(1.08);
562
+ }
563
+
564
+ .gallery-caption {
565
+ padding: 1.25rem;
566
+ font-size: clamp(14px, 1.2vw, 15px);
567
+ color: var(--text-secondary);
568
+ text-align: center;
569
+ line-height: 1.6;
570
+ }
571
+
572
+ .btn-cta {
573
+ min-height: 48px;
574
+ padding: 14px 32px;
575
+ background: var(--blue-gradient);
576
+ border: none;
577
+ border-radius: 12px;
578
+ color: white;
579
+ font-family: var(--font-body);
580
+ font-weight: 600;
581
+ font-size: clamp(15px, 1.2vw, 16px);
582
+ text-decoration: none;
583
+ cursor: pointer;
584
+ transition: all 0.3s ease;
585
+ box-shadow: 0 4px 16px rgba(37, 99, 235, 0.3);
586
+ display: inline-flex;
587
+ align-items: center;
588
+ justify-content: center;
589
+ align-self: flex-start;
590
+ }
591
+
592
+ .btn-cta:hover {
593
+ transform: translateY(-2px);
594
+ box-shadow: 0 8px 24px rgba(37, 99, 235, 0.4);
595
+ }
596
+
597
+ .cta-row {
598
+ display: flex;
599
+ gap: clamp(1rem, 2vw, 1.5rem);
600
+ justify-content: center;
601
+ flex-wrap: wrap;
602
+ margin: clamp(4rem, 8vw, 6rem) auto 0;
603
+ padding: 0 clamp(2rem, 4vw, 3rem);
604
+ max-width: var(--container-max);
605
+ }
606
+
607
+ footer {
608
+ background: var(--bg-glass-light);
609
+ border-top: 1px solid var(--border-glass);
610
+ padding: var(--section-padding) 2rem 2rem;
611
+ margin-top: var(--section-padding);
612
+ }
613
+
614
+ .footer-container {
615
+ max-width: var(--container-max);
616
+ margin: 0 auto;
617
+ }
618
+
619
+ .footer-grid {
620
+ display: grid;
621
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
622
+ gap: 3rem;
623
+ margin-bottom: 3rem;
624
+ }
625
+
626
+ .footer-logo-section {
627
+ display: flex;
628
+ flex-direction: column;
629
+ gap: 1rem;
630
+ }
631
+
632
+ .footer-logo {
633
+ width: min(180px, 100%);
634
+ height: auto;
635
+ margin-bottom: 0.5rem;
636
+ }
637
+
638
+ .footer-logo-text {
639
+ font-size: clamp(16px, 1.3vw, 18px);
640
+ font-weight: 600;
641
+ color: var(--text-primary);
642
+ margin-top: 0.5rem;
643
+ }
644
+
645
+ .footer-section h3 {
646
+ font-size: clamp(18px, 1.5vw, 20px);
647
+ font-weight: 600;
648
+ color: var(--text-primary);
649
+ margin-bottom: 1rem;
650
+ }
651
+
652
+ .footer-section p,
653
+ .footer-section a {
654
+ color: var(--text-secondary);
655
+ font-size: clamp(14px, 1.2vw, 16px);
656
+ line-height: 1.8;
657
+ text-decoration: none;
658
+ display: block;
659
+ margin-bottom: 0.5rem;
660
+ }
661
+
662
+ .footer-section a:hover {
663
+ color: var(--blue-primary);
664
+ }
665
+
666
+ .footer-bottom {
667
+ text-align: center;
668
+ padding-top: 2rem;
669
+ border-top: 1px solid var(--border-glass);
670
+ color: var(--text-secondary);
671
+ font-size: clamp(13px, 1vw, 14px);
672
+ }
673
+
674
+ .footer-bottom a {
675
+ color: var(--blue-primary);
676
+ text-decoration: none;
677
+ }
678
+
679
+ .chatbot-button {
680
+ position: fixed;
681
+ bottom: 2rem;
682
+ right: 2rem;
683
+ z-index: 999;
684
+ width: 64px;
685
+ height: 64px;
686
+ border-radius: 50%;
687
+ background: var(--blue-primary);
688
+ border: none;
689
+ color: white;
690
+ cursor: pointer;
691
+ box-shadow: 0 4px 20px rgba(37, 99, 235, 0.4);
692
+ transition: all 0.3s ease;
693
+ display: flex;
694
+ align-items: center;
695
+ justify-content: center;
696
+ }
697
+
698
+ .chatbot-button:hover {
699
+ transform: scale(1.1);
700
+ box-shadow: 0 6px 28px rgba(37, 99, 235, 0.5);
701
+ background: #1e40af;
702
+ }
703
+
704
+ .chatbot-icon {
705
+ width: 28px;
706
+ height: 28px;
707
+ stroke: currentColor;
708
+ fill: none;
709
+ stroke-width: 2;
710
+ }
711
+
712
+ .modal-overlay {
713
+ position: fixed;
714
+ inset: 0;
715
+ background: rgba(0, 0, 0, 0.6);
716
+ backdrop-filter: blur(4px);
717
+ z-index: 2000;
718
+ display: none;
719
+ align-items: center;
720
+ justify-content: center;
721
+ padding: 2rem;
722
+ opacity: 0;
723
+ transition: opacity 0.3s ease;
724
+ }
725
+
726
+ .modal-overlay.active {
727
+ display: flex;
728
+ opacity: 1;
729
+ }
730
+
731
+ .modal {
732
+ background: var(--bg-glass-light);
733
+ backdrop-filter: blur(20px);
734
+ border: 1px solid var(--border-glass);
735
+ border-radius: 16px;
736
+ padding: 2.5rem;
737
+ max-width: 500px;
738
+ width: 100%;
739
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
740
+ transform: scale(0.9);
741
+ transition: transform 0.3s ease;
742
+ max-height: 90vh;
743
+ overflow-y: auto;
744
+ }
745
+
746
+ .modal-overlay.active .modal {
747
+ transform: scale(1);
748
+ }
749
+
750
+ .modal-header {
751
+ display: flex;
752
+ justify-content: space-between;
753
+ align-items: center;
754
+ margin-bottom: 1.5rem;
755
+ }
756
+
757
+ .modal-title {
758
+ font-size: clamp(20px, 2vw, 24px);
759
+ font-weight: 600;
760
+ color: var(--text-primary);
761
+ }
762
+
763
+ .modal-close {
764
+ background: none;
765
+ border: none;
766
+ font-size: 24px;
767
+ color: var(--text-secondary);
768
+ cursor: pointer;
769
+ width: 32px;
770
+ height: 32px;
771
+ display: flex;
772
+ align-items: center;
773
+ justify-content: center;
774
+ border-radius: 8px;
775
+ }
776
+
777
+ .modal-tabs {
778
+ display: flex;
779
+ gap: 0.5rem;
780
+ margin-bottom: 1.5rem;
781
+ border-bottom: 1px solid var(--border-glass);
782
+ }
783
+
784
+ .tab-btn {
785
+ padding: 0.75rem 1.5rem;
786
+ background: none;
787
+ border: none;
788
+ color: var(--text-secondary);
789
+ font-family: var(--font-body);
790
+ font-weight: 500;
791
+ cursor: pointer;
792
+ border-bottom: 2px solid transparent;
793
+ }
794
+
795
+ .tab-btn.active {
796
+ color: var(--blue-primary);
797
+ border-bottom-color: var(--blue-primary);
798
+ }
799
+
800
+ .tab-content {
801
+ display: none;
802
+ }
803
+
804
+ .tab-content.active {
805
+ display: block;
806
+ }
807
+
808
+ .form-group {
809
+ margin-bottom: 1.5rem;
810
+ }
811
+
812
+ .form-label {
813
+ display: block;
814
+ margin-bottom: 0.5rem;
815
+ color: var(--text-primary);
816
+ font-weight: 500;
817
+ }
818
+
819
+ .form-input,
820
+ .form-textarea {
821
+ width: 100%;
822
+ padding: 0.875rem 1rem;
823
+ border: 1px solid var(--border-glass);
824
+ border-radius: 8px;
825
+ background: var(--bg-glass-light);
826
+ font-family: var(--font-body);
827
+ color: var(--text-primary);
828
+ }
829
+
830
+ .form-input:focus,
831
+ .form-textarea:focus {
832
+ outline: none;
833
+ border-color: var(--blue-primary);
834
+ }
835
+
836
+ .form-textarea {
837
+ min-height: 120px;
838
+ resize: vertical;
839
+ }
840
+
841
+ .form-submit {
842
+ width: 100%;
843
+ padding: 14px;
844
+ background: var(--blue-gradient);
845
+ color: white;
846
+ border: none;
847
+ border-radius: 12px;
848
+ font-family: var(--font-body);
849
+ font-weight: 600;
850
+ cursor: pointer;
851
+ }
852
+
853
+ @media (max-width: 768px) {
854
+ .nav-desktop {
855
+ display: none;
856
+ }
857
+
858
+ .mobile-toggle {
859
+ display: flex;
860
+ }
861
+
862
+ .hero-fullbleed {
863
+ height: clamp(300px, 50vh, 500px);
864
+ }
865
+
866
+ .group-image-container {
867
+ height: 300px;
868
+ }
869
+
870
+ .gallery-image-container {
871
+ height: 240px;
872
+ }
873
+
874
+ .chatbot-button {
875
+ bottom: 1rem;
876
+ right: 1rem;
877
+ width: 56px;
878
+ height: 56px;
879
+ }
880
+ }
881
+
882
+ @media (min-width: 2560px) {
883
+ .hero-fullbleed {
884
+ height: min(70vh, 900px);
885
+ }
886
+ }
887
+ </style>
888
+ <meta content="#10211b" name="theme-color"/><meta content="summary_large_image" name="twitter:card"/><meta content="Small Groups — Cypress" name="twitter:title"/><meta content="Explore Cypress, a warm community website prebuild with clear paths to events, groups, giving, visits, and the mission behind the work." name="twitter:description"/><meta content="https://example.com/assets/generated/social-card.webp" name="twitter:image"/><script data-agentsam-seo="theme-remaster" type="application/ld+json">{"@context": "https://schema.org", "@type": "WebSite", "name": "Cypress Commons", "description": "Explore Cypress, a warm community website prebuild with clear paths to events, groups, giving, visits, and the mission behind the work.", "url": "https://example.com/groups.html", "isPartOf": {"@type": "CreativeWork", "name": "Cypress AgentSam Prebuild"}}</script></head>
889
+ <body>
890
+ <!-- Mobile Menu Overlay -->
891
+ <div class="mobile-menu-overlay" id="mobileMenuOverlay" onclick="closeMobileMenu()"></div>
892
+ <!-- Header -->
893
+ <header>
894
+ <div class="header-container">
895
+ <a class="logo-link" href="/">
896
+ <picture class="logo-container">
897
+ <source srcset="/assets/generated/media-ce06595d59.webp" type="image/webp"/>
898
+ <img alt="Cypress Commons Logo" class="logo-img" height="auto" loading="eager" src="/assets/generated/media-ce06595d59.webp" width="200"/>
899
+ </picture>
900
+ </a>
901
+ <nav class="nav-desktop">
902
+ <a class="nav-link" href="/">Home</a>
903
+ <a class="nav-link" href="./about-us">About</a>
904
+ <a class="nav-link" href="./get-connected">Connect</a>
905
+ <a class="nav-link active" href="./groups">Groups</a>
906
+ <a class="nav-link" href="./mission">Mission</a>
907
+ </nav>
908
+ <button aria-label="Toggle menu" class="mobile-toggle" id="mobileToggle" onclick="toggleMobileMenu()">
909
+ <span></span>
910
+ <span></span>
911
+ <span></span>
912
+ </button>
913
+ </div>
914
+ </header>
915
+ <!-- Glassmorphic Side Navigation -->
916
+ <nav class="mobile-menu" id="mobileMenu">
917
+ <div class="mobile-menu-header">
918
+ <img alt="Cypress Commons" class="mobile-menu-logo" height="auto" src="/assets/generated/media-ce06595d59.webp" width="140"/>
919
+ </div>
920
+ <ul>
921
+ <li><a href="/">Home</a></li>
922
+ <li><a href="./about-us">About</a></li>
923
+ <li><a href="./get-connected">Connect</a></li>
924
+ <li><a class="active" href="./groups">Groups</a></li>
925
+ <li><a href="./mission">Mission</a></li>
926
+ <li><a href="./contribute">Give</a></li>
927
+ </ul>
928
+ <div class="mobile-menu-footer">
929
+ <div class="mobile-menu-contact">
930
+ <p><strong>Contact Us</strong></p>
931
+ <p><a href="tel:+1202-555-0100">202-555-0100</a></p>
932
+ <p><a href="mailto:hello@cypress.example">hello@cypress.example</a></p>
933
+ </div>
934
+ </div>
935
+ </nav>
936
+ <!-- Hero -->
937
+ <div class="hero-fullbleed">
938
+ <picture>
939
+ <source media="(max-width: 768px)" srcset="/assets/generated/media-46205bfde8.webp" type="image/webp"/>
940
+ <img alt="Cypress Commons Small Groups - Community Men and Community Women Ministries" height="700" loading="eager" src="/assets/generated/media-46205bfde8.webp" width="1920"/>
941
+ </picture>
942
+ </div>
943
+ <!-- Main Content -->
944
+ <section class="page-section">
945
+ <h1 class="page-title">Small Groups</h1>
946
+ <p class="content-intro">
947
+ Healthy growth happens in community. Whether you're looking for deeper friendships, encouragement, or
948
+ spiritual growth, there's a place for you here.
949
+ </p>
950
+ <!-- Why Groups Matter -->
951
+ <div class="content-block" style="margin: clamp(3rem, 6vw, 5rem) auto; text-align: center; max-width: 900px;">
952
+ <h2 style="font-size: clamp(24px, 3vw, 32px); font-weight: 700; color: var(--text-primary); margin-bottom: 1.5rem;">
953
+ Why We Gather</h2>
954
+ <p style="font-size: clamp(16px, 1.5vw, 18px); color: var(--text-secondary); line-height: 1.8; margin-bottom: 1.5rem;">
955
+ We believe spiritual growth happens best in community. We believe God transforms us through the Holy
956
+ Spirit, and that transformation happens when we gather together — sharing life, encouraging one another,
957
+ and growing deeper in Christ.
958
+ </p>
959
+ <p style="font-size: clamp(16px, 1.5vw, 18px); color: var(--text-secondary); line-height: 1.8;">
960
+ The church is the family of God — the community of believers saved by the blood of Christ. We believe
961
+ the Holy Spirit gives believers spiritual gifts to be used to help others. When we gather, we're not
962
+ just attending a meeting — we're building the body of Christ, one relationship at a time.
963
+ </p>
964
+ </div>
965
+ <!-- Groups Grid -->
966
+ <div class="groups-grid">
967
+ <!-- Community Men -->
968
+ <article class="group-card">
969
+ <div class="group-image-container">
970
+ <img alt="Community Men Men's Ministry - Brotherhood and Bible Study in River Parish" class="group-image" height="380" loading="lazy" src="/assets/generated/media-50c5f3e279.webp" width="600"/>
971
+ </div>
972
+ <div class="group-content">
973
+ <h2 class="group-title">Community Men</h2>
974
+ <p class="group-summary">
975
+ We believe God transforms us through community. Every man is fighting something — providing,
976
+ recovery, marriage, fatherhood, faith, purpose. Community Men is where men gather to support each
977
+ other, grow stronger, and stay Community Women in Christ.
978
+ </p>
979
+ <p class="group-summary" style="margin-top: 1rem;">
980
+ We gather because the fight within us is too great to face in silence. We gather because when we
981
+ open up, we realize we're not alone. We gather because when one brother falls, another helps him
982
+ rise. Because no man was meant to fight alone.
983
+ </p>
984
+ <div class="group-schedule">
985
+ <p><strong>When:</strong> Second Monday of each month</p>
986
+ <p><strong>Time:</strong> 6:00 PM – 8:00 PM</p>
987
+ <p><strong>Who:</strong> Men of all ages</p>
988
+ <p><strong>What:</strong> Brotherhood + Bible study + real conversations</p>
989
+ </div>
990
+ <a class="btn-cta" href="./mensgroup">Join Community Men →</a>
991
+ </div>
992
+ </article>
993
+ <!-- Community Women -->
994
+ <article class="group-card">
995
+ <div class="group-image-container">
996
+ <img alt="Community Women Women's Ministry - Multigenerational Community in River Parish" class="group-image" height="380" loading="lazy" src="/assets/generated/media-044ba16613.webp" width="600"/>
997
+ </div>
998
+ <div class="group-content">
999
+ <h2 class="group-title">Community Women</h2>
1000
+ <p class="group-summary">
1001
+ We believe spiritual growth happens best in community. Community Women is a women's gathering centered on
1002
+ meaningful relationships and multigenerational community. On the first Tuesday of every month,
1003
+ women come together to connect, share life, and grow deeper in Christ together.
1004
+ </p>
1005
+ <p class="group-summary" style="margin-top: 1rem;">
1006
+ Community Women is for women who want community that feels real — not forced. Whether you're new to the
1007
+ area, looking for deeper relationships, or simply needing a place to belong, Community Women is for you.
1008
+ Come as you are. Bring a friend. Become Community Women in Christ.
1009
+ </p>
1010
+ <div class="group-schedule">
1011
+ <p><strong>When:</strong> First Tuesday of every month</p>
1012
+ <p><strong>Time:</strong> 6:00 PM</p>
1013
+ <p><strong>Who:</strong> Women of all ages</p>
1014
+ <p><strong>What:</strong> Community + encouragement + shared life + free food</p>
1015
+ </div>
1016
+ <a class="btn-cta" href="./womansgroup">Join Community Women →</a>
1017
+ </div>
1018
+ </article>
1019
+ </div>
1020
+ <div class="cta-row">
1021
+ <a class="btn-cta" href="./mensgroup">Join Community Men</a>
1022
+ <a class="btn-cta" href="./womansgroup">Join Community Women</a>
1023
+ <a class="btn-cta" href="#" onclick="openModal('question'); return false;">Ask a Question</a>
1024
+ </div>
1025
+ </section>
1026
+ <!-- Community Highlights -->
1027
+ <section class="page-section">
1028
+ <h2 style="font-size: clamp(28px, 3vw, 40px); font-weight: 700; color: var(--text-primary); text-align: center; margin-bottom: clamp(2rem, 4vw, 3rem);">
1029
+ What You'll Find Here</h2>
1030
+ <div class="community-highlights">
1031
+ <div class="highlight-card">
1032
+ <div class="highlight-icon">
1033
+ <svg aria-hidden="true" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
1034
+ <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path>
1035
+ <circle cx="9" cy="7" r="4"></circle>
1036
+ <path d="M23 21v-2a4 4 0 0 0-3-3.87"></path>
1037
+ <path d="M16 3.13a4 4 0 0 1 0 7.75"></path>
1038
+ </svg>
1039
+ </div>
1040
+ <h3 class="highlight-title">Real Relationships</h3>
1041
+ <p class="highlight-text">Authentic connections with people who care about your journey. No masks, no
1042
+ pretense — just real people growing together.</p>
1043
+ </div>
1044
+ <div class="highlight-card">
1045
+ <div class="highlight-icon">
1046
+ <svg aria-hidden="true" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
1047
+ <path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path>
1048
+ <path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path>
1049
+ <line x1="10" x2="16" y1="10" y2="10"></line>
1050
+ <line x1="10" x2="16" y1="14" y2="14"></line>
1051
+ </svg>
1052
+ </div>
1053
+ <h3 class="highlight-title">Bible-Centered Growth</h3>
1054
+ <p class="highlight-text">We believe the Bible is God's inspired Word. Our groups study Scripture
1055
+ together, applying God's truth to everyday life.</p>
1056
+ </div>
1057
+ <div class="highlight-card">
1058
+ <div class="highlight-icon">
1059
+ <svg aria-hidden="true" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
1060
+ <path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path>
1061
+ </svg>
1062
+ </div>
1063
+ <h3 class="highlight-title">Support &amp; Encouragement</h3>
1064
+ <p class="highlight-text">Life's challenges are easier when you're not alone. Find prayer,
1065
+ encouragement, and practical support from people who understand.</p>
1066
+ </div>
1067
+ <div class="highlight-card">
1068
+ <div class="highlight-icon">
1069
+ <svg aria-hidden="true" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
1070
+ <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
1071
+ <polyline points="9 22 9 12 15 12 15 22"></polyline>
1072
+ </svg>
1073
+ </div>
1074
+ <h3 class="highlight-title">A Place to Belong</h3>
1075
+ <p class="highlight-text">Whether you're new to the area or new to faith, you'll find a welcoming
1076
+ community where you can be yourself and grow at your own pace.</p>
1077
+ </div>
1078
+ </div>
1079
+ </section>
1080
+ <!-- Gallery -->
1081
+ <section class="page-section">
1082
+ <h2 style="font-size: clamp(28px, 3vw, 40px); font-weight: 700; color: var(--text-primary); text-align: center; margin-bottom: clamp(2rem, 4vw, 3rem);">
1083
+ Our Groups in Action</h2>
1084
+ <div class="gallery-grid">
1085
+ <div class="gallery-item">
1086
+ <div class="gallery-image-container">
1087
+ <img alt="Community Men men's group gathering for brotherhood and spiritual growth" class="gallery-image" height="300" loading="lazy" src="/assets/generated/media-0a1ea6f6d9.webp" width="600"/>
1088
+ </div>
1089
+ <p class="gallery-caption">Community Men — Men gathering for brotherhood and growth</p>
1090
+ </div>
1091
+ <div class="gallery-item">
1092
+ <div class="gallery-image-container">
1093
+ <img alt="Community Men ministry in action - men supporting each other" class="gallery-image" height="300" loading="lazy" src="/assets/generated/media-997c10ef39.webp" width="600"/>
1094
+ </div>
1095
+ <p class="gallery-caption">Brotherhood in action</p>
1096
+ </div>
1097
+ <div class="gallery-item">
1098
+ <div class="gallery-image-container">
1099
+ <img alt="Community Women women's ministry gathering - multigenerational community" class="gallery-image" height="300" loading="lazy" src="/assets/generated/media-044ba16613.webp" width="600"/>
1100
+ </div>
1101
+ <p class="gallery-caption">Community Women — Women connecting across generations</p>
1102
+ </div>
1103
+ <div class="gallery-item">
1104
+ <div class="gallery-image-container">
1105
+ <img alt="Community Men leadership and real conversations" class="gallery-image" height="300" loading="lazy" src="/assets/generated/media-2df479fd2d.webp" width="600"/>
1106
+ </div>
1107
+ <p class="gallery-caption">Real conversations, real support</p>
1108
+ </div>
1109
+ </div>
1110
+ </section>
1111
+ <!-- Belief Integration -->
1112
+ <section class="page-section">
1113
+ <div class="content-block" style="text-align: center; background: var(--bg-glass-dark);">
1114
+ <p style="font-size: clamp(18px, 2vw, 22px); color: var(--text-primary); font-style: italic; line-height: 1.8; margin-bottom: 1rem;">
1115
+ "We believe the church is the community of believers saved by the blood of Christ. We believe the Holy
1116
+ Spirit empowers believers to live faithfully and gives spiritual gifts to be used to help others."
1117
+ </p>
1118
+ <p style="font-size: clamp(14px, 1.2vw, 16px); color: var(--text-secondary);">
1119
+ — Ephesians 4:1-16, 1 Corinthians 12:7-11
1120
+ </p>
1121
+ </div>
1122
+ </section>
1123
+ <!-- Footer -->
1124
+ <footer>
1125
+ <div class="footer-container">
1126
+ <div class="footer-grid">
1127
+ <div class="footer-section footer-logo-section">
1128
+ <a href="/" style="display: inline-block;">
1129
+ <img alt="Cypress Commons Logo" class="footer-logo" height="auto" loading="lazy" src="/assets/generated/media-ce06595d59.webp" width="180"/>
1130
+ </a>
1131
+ <p class="footer-logo-text">Cypress Commons</p>
1132
+ <p style="font-size: clamp(14px, 1.2vw, 16px); color: var(--text-secondary); line-height: 1.8; margin-top: 0.5rem;">
1133
+ 100 Cypress Way<br/>River Parish, LA 70000</p>
1134
+ <p style="font-size: clamp(14px, 1.2vw, 16px); color: var(--text-secondary); line-height: 1.8; margin-top: 1rem;">
1135
+ Sunday Service: 10:00 AM<br/>Adult Bible Class: 9:30 AM</p>
1136
+ </div>
1137
+ <div class="footer-section">
1138
+ <h3>Quick Links</h3>
1139
+ <a href="./about-us">About Us</a>
1140
+ <a href="./get-connected">Get Connected</a>
1141
+ <a href="./community">Community</a>
1142
+ <a href="./groups">Groups</a>
1143
+ <a href="./beliefs">Beliefs</a>
1144
+ </div>
1145
+ <div class="footer-section">
1146
+ <h3>Connect</h3>
1147
+ <a href="./contribute">Give Online</a>
1148
+ <a href="#" onclick="openModal('prayer'); return false;">Prayer Request</a>
1149
+ <a href="#" onclick="openModal('question'); return false;">Ask a Question</a>
1150
+ <a href="tel:+1202-555-0100">Call: 202-555-0100</a>
1151
+ <a href="mailto:hello@cypress.example">Email Us</a>
1152
+ </div>
1153
+ </div>
1154
+ <div class="footer-bottom">
1155
+ <p>© 2026 Cypress Commons • <a href="./admin">Staff Login</a></p>
1156
+ </div>
1157
+ </div>
1158
+ </footer>
1159
+ <!-- Chatbot Button -->
1160
+ <button aria-label="Open Chat" class="chatbot-button" onclick="openChatbot()" title="Chat with Us">
1161
+ <svg aria-hidden="true" class="chatbot-icon" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
1162
+ <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
1163
+ <line x1="8" x2="16" y1="10" y2="10"></line>
1164
+ <line x1="8" x2="14" y1="14" y2="14"></line>
1165
+ </svg>
1166
+ </button>
1167
+ <!-- Modal System -->
1168
+ <div class="modal-overlay" id="modalOverlay" onclick="closeModal(event)">
1169
+ <div class="modal" onclick="event.stopPropagation()">
1170
+ <div class="modal-header">
1171
+ <h2 class="modal-title" id="modalTitle">Prayer Request</h2>
1172
+ <button aria-label="Close" class="modal-close" onclick="closeModal()">×</button>
1173
+ </div>
1174
+ <div class="modal-tabs">
1175
+ <button class="tab-btn active" onclick="switchTab('prayer')">Prayer</button>
1176
+ <button class="tab-btn" onclick="switchTab('question')">Question</button>
1177
+ <button class="tab-btn" onclick="switchTab('comment')">Comment</button>
1178
+ </div>
1179
+ <form id="modalForm" onsubmit="handleSubmit(event)">
1180
+ <div class="tab-content active" id="tabPrayer">
1181
+ <div class="form-group">
1182
+ <label class="form-label" for="name">Your Name</label>
1183
+ <input class="form-input" id="name" name="name" required="" type="text"/>
1184
+ </div>
1185
+ <div class="form-group">
1186
+ <label class="form-label" for="email">Email</label>
1187
+ <input class="form-input" id="email" name="email" required="" type="email"/>
1188
+ </div>
1189
+ <div class="form-group">
1190
+ <label class="form-label" for="request">Prayer Request</label>
1191
+ <textarea class="form-textarea" id="request" name="message" required=""></textarea>
1192
+ </div>
1193
+ </div>
1194
+ <div class="tab-content" id="tabQuestion">
1195
+ <div class="form-group">
1196
+ <label class="form-label" for="qname">Your Name</label>
1197
+ <input class="form-input" id="qname" name="name" required="" type="text"/>
1198
+ </div>
1199
+ <div class="form-group">
1200
+ <label class="form-label" for="qemail">Email</label>
1201
+ <input class="form-input" id="qemail" name="email" required="" type="email"/>
1202
+ </div>
1203
+ <div class="form-group">
1204
+ <label class="form-label" for="question">Your Question</label>
1205
+ <textarea class="form-textarea" id="question" name="message" required=""></textarea>
1206
+ </div>
1207
+ </div>
1208
+ <div class="tab-content" id="tabComment">
1209
+ <div class="form-group">
1210
+ <label class="form-label" for="cname">Your Name</label>
1211
+ <input class="form-input" id="cname" name="name" required="" type="text"/>
1212
+ </div>
1213
+ <div class="form-group">
1214
+ <label class="form-label" for="cemail">Email</label>
1215
+ <input class="form-input" id="cemail" name="email" required="" type="email"/>
1216
+ </div>
1217
+ <div class="form-group">
1218
+ <label class="form-label" for="comment">Your Comment</label>
1219
+ <textarea class="form-textarea" id="comment" name="message" required=""></textarea>
1220
+ </div>
1221
+ </div>
1222
+ <button class="form-submit" type="submit">Submit</button>
1223
+ </form>
1224
+ </div>
1225
+ </div>
1226
+ <script>
1227
+ // Mobile Menu Functions
1228
+ function toggleMobileMenu() {
1229
+ const toggle = document.getElementById('mobileToggle');
1230
+ const menu = document.getElementById('mobileMenu');
1231
+ const overlay = document.getElementById('mobileMenuOverlay');
1232
+
1233
+ toggle.classList.toggle('active');
1234
+ menu.classList.toggle('active');
1235
+ overlay.classList.toggle('active');
1236
+ document.body.style.overflow = menu.classList.contains('active') ? 'hidden' : '';
1237
+ }
1238
+
1239
+ function closeMobileMenu() {
1240
+ const toggle = document.getElementById('mobileToggle');
1241
+ const menu = document.getElementById('mobileMenu');
1242
+ const overlay = document.getElementById('mobileMenuOverlay');
1243
+
1244
+ toggle.classList.remove('active');
1245
+ menu.classList.remove('active');
1246
+ overlay.classList.remove('active');
1247
+ document.body.style.overflow = '';
1248
+ }
1249
+
1250
+ // Close mobile menu when clicking a link
1251
+ document.querySelectorAll('.mobile-menu a').forEach(link => {
1252
+ link.addEventListener('click', closeMobileMenu);
1253
+ });
1254
+
1255
+ // Modal Functions
1256
+ const modalOverlay = document.getElementById('modalOverlay');
1257
+ const modalTitle = document.getElementById('modalTitle');
1258
+
1259
+ function openChatbot() {
1260
+ openModal('question');
1261
+ }
1262
+
1263
+ function openModal(type) {
1264
+ const titles = {
1265
+ prayer: 'Prayer Request',
1266
+ question: 'Ask a Question',
1267
+ comment: 'Leave a Comment'
1268
+ };
1269
+ modalTitle.textContent = titles[type] || 'Contact Us';
1270
+ switchTab(type);
1271
+ modalOverlay.classList.add('active');
1272
+ document.body.style.overflow = 'hidden';
1273
+ }
1274
+
1275
+ function closeModal(event) {
1276
+ if (!event || event.target === modalOverlay || event.target.classList.contains('modal-close')) {
1277
+ modalOverlay.classList.remove('active');
1278
+ document.body.style.overflow = '';
1279
+ }
1280
+ }
1281
+
1282
+ function switchTab(type) {
1283
+ document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.remove('active'));
1284
+ event.target.classList.add('active');
1285
+ document.querySelectorAll('.tab-content').forEach(content => content.classList.remove('active'));
1286
+ document.getElementById('tab' + type.charAt(0).toUpperCase() + type.slice(1)).classList.add('active');
1287
+ }
1288
+
1289
+ async function handleSubmit(event) {
1290
+ event.preventDefault();
1291
+ const formData = new FormData(event.target);
1292
+ const data = Object.fromEntries(formData);
1293
+ const activeTab = document.querySelector('.tab-content.active').id;
1294
+ const type = activeTab.replace('tab', '').toLowerCase();
1295
+ const subject = type === 'prayer' ? 'Prayer Request' : type === 'question' ? 'Question' : 'Comment';
1296
+
1297
+ const submitButton = event.target.querySelector('.form-submit');
1298
+ const originalText = submitButton.textContent;
1299
+ submitButton.textContent = 'Sending...';
1300
+ submitButton.disabled = true;
1301
+
1302
+ try {
1303
+ const response = await fetch('/api/contact', {
1304
+ method: 'POST',
1305
+ headers: {
1306
+ 'Content-Type': 'application/json',
1307
+ },
1308
+ body: JSON.stringify({
1309
+ type: type,
1310
+ name: data.name,
1311
+ email: data.email,
1312
+ message: data.message,
1313
+ subject: subject
1314
+ })
1315
+ });
1316
+
1317
+ const result = await response.json();
1318
+
1319
+ if (response.ok) {
1320
+ alert(`Thank you! Your ${subject.toLowerCase()} has been sent. We'll get back to you soon.`);
1321
+ event.target.reset();
1322
+ closeModal();
1323
+ } else {
1324
+ throw new Error(result.error || 'Failed to send message');
1325
+ }
1326
+ } catch (error) {
1327
+ console.error('Form submission error:', error);
1328
+ const body = `${subject} from ${data.name} (${data.email}):\n\n${data.message}`;
1329
+ const mailtoLink = `mailto:hello@cypress.example?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;
1330
+ window.location.href = mailtoLink;
1331
+ alert(`Sending via email...`);
1332
+ closeModal();
1333
+ } finally {
1334
+ submitButton.textContent = originalText;
1335
+ submitButton.disabled = false;
1336
+ }
1337
+ }
1338
+
1339
+ // Keyboard shortcuts
1340
+ document.addEventListener('keydown', (e) => {
1341
+ if (e.key === 'Escape') {
1342
+ if (modalOverlay.classList.contains('active')) {
1343
+ closeModal();
1344
+ }
1345
+ if (document.getElementById('mobileMenu').classList.contains('active')) {
1346
+ closeMobileMenu();
1347
+ }
1348
+ }
1349
+ });
1350
+ </script>
1351
+ </body>
1352
+ </html>