@inneranimalmedia/agentsam-sdk 2.6.10 → 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 (624) hide show
  1. package/README.md +3 -0
  2. package/TRADEMARKS.md +22 -0
  3. package/apps/README.md +3 -0
  4. package/apps/cad-creator/LICENSE +21 -0
  5. package/apps/cad-creator/README.md +4 -1
  6. package/apps/cad-creator/shared/cad/package.json +1 -1
  7. package/apps/client-cms-editor/LICENSE +21 -0
  8. package/apps/client-cms-editor/README.md +3 -0
  9. package/apps/client-cms-editor/backend/package.json +2 -2
  10. package/apps/client-cms-editor/frontend/package.json +3 -3
  11. package/apps/client-cms-editor/frontend/src/adapters/http-authoring.test.ts +161 -0
  12. package/apps/client-cms-editor/frontend/src/adapters/http.ts +296 -65
  13. package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +47 -16
  14. package/apps/client-cms-editor/frontend/src/editor/composition-groups.test.ts +40 -0
  15. package/apps/client-cms-editor/frontend/src/editor/legacy/CmsEditorPrototype.tsx +28 -28
  16. package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +3 -3
  17. package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +5 -4
  18. package/apps/client-cms-editor/frontend/src/styles/studio.css +150 -149
  19. package/apps/client-cms-editor/package-lock.json +43 -43
  20. package/apps/client-cms-editor/package.json +3 -3
  21. package/apps/client-cms-editor/reference/harvest/HARVEST_RECEIPT.json +1 -1
  22. package/apps/client-cms-editor/reference/harvest/README.md +1 -1
  23. package/apps/client-cms-editor/reference/harvest/plans/ARCHIVE-INTAKE.md +1 -1
  24. package/apps/client-cms-editor/reference/harvest/plans/HARVEST-INDEX.md +1 -1
  25. package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +1 -1
  26. package/apps/client-cms-editor/reference/harvest/plans/TOOLING-LAB.md +1 -1
  27. package/apps/client-cms-editor/shared/cms/package.json +1 -1
  28. package/apps/client-cms-editor/shared/cms/src/editor-types.ts +42 -1
  29. package/docs/CMS_CONTEXTUAL_COMPOSER.md +4 -4
  30. package/docs/MINI.md +4 -2
  31. package/docs/PRODUCT_LIFECYCLE.md +38 -38
  32. package/docs/REPO_FILE_MAP.txt +2 -3
  33. package/docs/SOURCE_ARCHITECTURE.md +1 -1
  34. package/docs/THEME_REFINERY.md +6 -6
  35. package/docs/WINDOWS_RUNTIME_INSTALL.md +1 -1
  36. package/docs/adr/ADR-0002-brand-campaign-plugin-boundaries.md +603 -0
  37. package/docs/adr/ADR-0003-copro-clean-room-product-architecture.md +34 -0
  38. package/docs/adr/ADR-0003-product-portfolio-and-package-taxonomy.md +146 -0
  39. package/docs/adr/ADR-0004-product-composition-and-provider-neutrality.md +56 -0
  40. package/docs/adr/ADR-0005-offer-graduation-standard.md +66 -0
  41. package/docs/adr/README.md +25 -0
  42. package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +1 -1
  43. package/docs/architecture/DUAL_ANALYTICS_PRODUCT.md +140 -0
  44. package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +1 -1
  45. package/docs/content-studio/REVISION_GATE_2026-09-27.md +4 -4
  46. package/docs/contracts/google-cloud-oauth-setup.md +1 -1
  47. package/docs/engineering/go-portability/01-product-project-deployment-authority.md +69 -0
  48. package/docs/engineering/provider-internal-renames/01-lane-initialization.md +20 -0
  49. package/docs/engineering/provider-internal-renames/01a-runtime-environment-contract.md +115 -0
  50. package/docs/engineering/provider-internal-renames/02-cfoa.md +57 -0
  51. package/docs/engineering/provider-internal-renames/03-gclioa.md +32 -0
  52. package/docs/engineering/provider-internal-renames/04-goaude.md +50 -0
  53. package/docs/engineering/provider-internal-renames/05-gdrv.md +33 -0
  54. package/docs/engineering/provider-internal-renames/06-verification.md +103 -0
  55. package/docs/engineering/provider-internal-renames/README.md +77 -0
  56. package/docs/engineering/provider-internal-renames/runtime-environment-contract.json +220 -0
  57. package/docs/engineering/test-diagnostics/go-cli-test-hang-20261003.md +49 -0
  58. package/docs/engineering/test-diagnostics/go-skip-deploy-docker-fix.md +90 -0
  59. package/docs/knowledge-service-verification.md +3 -3
  60. package/docs/local-studio/WORKMODE_DONOR_NOTES.md +3 -3
  61. package/docs/plans/AGENTSAM-SUSPEND-QUEUE-KNOWLEDGE-RDP-2026-10-03.md +870 -0
  62. package/docs/plans/ASTRA-BRIEF-2026-09-18.md +1 -1
  63. package/docs/plans/LOCAL-STUDIO-GRADUATION-2026-09-26.md +9 -9
  64. package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +2 -2
  65. package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +12 -12
  66. package/docs/plans/NEXT-AGENT-HANDOFF.md +2 -2
  67. package/docs/plans/RECONCILIATION-2026-09-19.md +6 -6
  68. package/docs/plans/SAM_WORK_PROTOCOL.md +667 -0
  69. package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +70 -70
  70. package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +1 -1
  71. package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +4 -4
  72. package/docs/prd/PRD-agentsam-analytics.md +174 -0
  73. package/docs/prd/PRD-agentsam-brand.md +181 -0
  74. package/docs/prd/PRD-agentsam-browser.md +177 -0
  75. package/docs/prd/PRD-agentsam-cad-studio.md +177 -0
  76. package/docs/prd/PRD-agentsam-campaign.md +1178 -0
  77. package/docs/prd/PRD-agentsam-commerce-studio.md +180 -0
  78. package/docs/prd/PRD-agentsam-content-studio.md +179 -0
  79. package/docs/prd/PRD-agentsam-copro.md +39 -0
  80. package/docs/prd/PRD-agentsam-database-studio.md +175 -0
  81. package/docs/prd/PRD-agentsam-developer-studio.md +175 -0
  82. package/docs/prd/PRD-agentsam-hosted-runtime.md +180 -0
  83. package/docs/prd/PRD-agentsam-knowledge.md +174 -0
  84. package/docs/prd/PRD-agentsam-local-studio.md +180 -0
  85. package/docs/prd/PRD-agentsam-merch.md +177 -0
  86. package/docs/prd/PRD-agentsam-platform.md +179 -0
  87. package/docs/prd/PRD-agentsam-site-studio.md +180 -0
  88. package/docs/prd/PRD-agentsam-work.md +180 -0
  89. package/docs/prd/README.md +39 -0
  90. package/docs/product/COPRO-DONOR-AUDIT.md +9 -0
  91. package/docs/product/COPRO-EXECUTION-PLAN.md +81 -0
  92. package/docs/product/COPRO-UI-QUALITY-GATE.md +119 -0
  93. package/docs/product/OFFER-PORTFOLIO.md +158 -0
  94. package/docs/product/PACKAGE-TAXONOMY.md +78 -0
  95. package/examples/hyperspace-demo/dist/assets/index-SZ2LfOpJ.js +242 -0
  96. package/examples/hyperspace-demo/dist/index.html +13 -0
  97. package/examples/hyperspace-demo/src/main.tsx +227 -110
  98. package/migrations/d1/0020_agentsam_receipt_catalog.sql +35 -0
  99. package/migrations/runtime/0006_agent_run_suspend_activity.sql +53 -0
  100. package/migrations/runtime/0007_queue_control.sql +40 -0
  101. package/migrations/runtime/0008_agent_run_dependencies.sql +24 -0
  102. package/migrations/runtime/0008_analytics_legacy_bootstrap.sql +43 -0
  103. package/migrations/runtime/0009_analytics_authority.sql +108 -0
  104. package/native/agentsam-machine/core/src/lib.rs +2 -2
  105. package/package.json +78 -43
  106. package/packages/agentsam-brand/README.md +3 -0
  107. package/packages/agentsam-brand/package.json +4 -3
  108. package/packages/agentsam-brand/src/public.js +192 -0
  109. package/packages/agentsam-contracts/README.md +1 -1
  110. package/packages/agentsam-contracts/dist/adapter.d.ts +22 -0
  111. package/packages/agentsam-contracts/dist/adapter.js +0 -0
  112. package/packages/agentsam-contracts/dist/agent.d.ts +66 -0
  113. package/packages/agentsam-contracts/dist/agent.js +15 -0
  114. package/packages/agentsam-contracts/dist/artifacts.d.ts +70 -0
  115. package/packages/agentsam-contracts/dist/artifacts.js +0 -0
  116. package/packages/agentsam-contracts/dist/authority.d.ts +21 -0
  117. package/packages/agentsam-contracts/dist/authority.js +0 -0
  118. package/packages/agentsam-contracts/dist/context.d.ts +14 -0
  119. package/packages/agentsam-contracts/dist/context.js +0 -0
  120. package/packages/agentsam-contracts/dist/errors.d.ts +121 -0
  121. package/packages/agentsam-contracts/dist/errors.js +5 -0
  122. package/packages/agentsam-contracts/dist/events.d.ts +53 -0
  123. package/packages/agentsam-contracts/dist/events.js +0 -0
  124. package/packages/agentsam-contracts/dist/execution.d.ts +38 -0
  125. package/packages/agentsam-contracts/dist/execution.js +0 -0
  126. package/packages/agentsam-contracts/dist/hooks.d.ts +31 -0
  127. package/packages/agentsam-contracts/dist/hooks.js +0 -0
  128. package/packages/agentsam-contracts/dist/identity.d.ts +15 -0
  129. package/packages/agentsam-contracts/dist/identity.js +0 -0
  130. package/packages/agentsam-contracts/dist/index.d.ts +16 -0
  131. package/packages/agentsam-contracts/dist/index.js +164 -0
  132. package/packages/agentsam-contracts/dist/models.d.ts +9 -0
  133. package/packages/agentsam-contracts/dist/models.js +0 -0
  134. package/packages/agentsam-contracts/dist/providers.d.ts +27 -0
  135. package/packages/agentsam-contracts/dist/providers.js +0 -0
  136. package/packages/agentsam-contracts/dist/repository.d.ts +56 -0
  137. package/packages/agentsam-contracts/dist/repository.js +15 -0
  138. package/packages/agentsam-contracts/dist/run.d.ts +113 -0
  139. package/packages/agentsam-contracts/dist/run.js +132 -0
  140. package/packages/agentsam-contracts/dist/tools.d.ts +82 -0
  141. package/packages/agentsam-contracts/dist/tools.js +0 -0
  142. package/packages/agentsam-contracts/dist/widgets.d.ts +38 -0
  143. package/packages/agentsam-contracts/dist/widgets.js +0 -0
  144. package/packages/agentsam-contracts/package.json +9 -1
  145. package/packages/agentsam-contracts/scripts/build.mjs +1 -1
  146. package/packages/agentsam-contracts/src/agent.ts +78 -3
  147. package/packages/agentsam-contracts/src/index.ts +2 -0
  148. package/packages/agentsam-contracts/src/run.ts +320 -0
  149. package/packages/agentsam-contracts/src/widgets.ts +58 -0
  150. package/packages/agentsam-contracts/test/contracts.test.mjs +1 -1
  151. package/packages/agentsam-contracts/test/run-contract.test.mjs +94 -0
  152. package/packages/agentsam-errors/package.json +1 -1
  153. package/packages/agentsam-goap/README.md +3 -0
  154. package/packages/agentsam-goap/package.json +2 -2
  155. package/packages/agentsam-hooks/package.json +2 -2
  156. package/packages/agentsam-hooks/src/adapters/agents.js +48 -22
  157. package/packages/agentsam-hooks/src/index.d.ts +16 -0
  158. package/packages/agentsam-knowledge/package.json +1 -1
  159. package/packages/agentsam-knowledge/src/backends/index.js +1 -1
  160. package/packages/agentsam-merch/README.md +62 -0
  161. package/packages/agentsam-merch/bin/agentsam-merch.mjs +16 -0
  162. package/packages/agentsam-merch/package.json +65 -0
  163. package/packages/agentsam-merch/profiles/completeful/dtg-back-large.json +42 -0
  164. package/packages/agentsam-merch/profiles/completeful/laser-engraving.json +39 -0
  165. package/packages/agentsam-merch/profiles/generic/embroidery-digitization.json +22 -0
  166. package/packages/agentsam-merch/schemas/collection-candidate.schema.json +66 -0
  167. package/packages/agentsam-merch/schemas/manufacturing-profile.schema.json +221 -0
  168. package/packages/agentsam-merch/src/adapters-completeful.js +50 -0
  169. package/packages/agentsam-merch/src/cli.js +93 -0
  170. package/packages/agentsam-merch/src/collection-lab.js +60 -0
  171. package/packages/agentsam-merch/src/compatibility.js +501 -0
  172. package/packages/agentsam-merch/src/derivatives.js +112 -0
  173. package/packages/agentsam-merch/src/index.d.ts +316 -0
  174. package/packages/agentsam-merch/src/index.js +46 -0
  175. package/packages/agentsam-merch/src/node/index.d.ts +58 -0
  176. package/packages/agentsam-merch/src/node/index.js +6 -0
  177. package/packages/agentsam-merch/src/node/raster.js +142 -0
  178. package/packages/agentsam-merch/src/node/vector.js +239 -0
  179. package/packages/agentsam-merch/src/product-concepts.js +118 -0
  180. package/packages/agentsam-merch/src/profile-registry.js +104 -0
  181. package/packages/agentsam-merch/src/profile.js +158 -0
  182. package/packages/agentsam-merch/src/transforms.js +215 -0
  183. package/packages/agentsam-merch/test/merch.test.mjs +332 -0
  184. package/packages/agentsam-merch/test/node-transforms.test.mjs +149 -0
  185. package/packages/agentsam-nav/package.json +1 -1
  186. package/packages/agentsam-queue-control/README.md +4 -1
  187. package/packages/agentsam-queue-control/package.json +4 -3
  188. package/packages/agentsam-queue-control/schemas/job-envelope.schema.json +111 -11
  189. package/packages/agentsam-queue-control/src/adapters/cloudflare.js +34 -6
  190. package/packages/agentsam-queue-control/src/adapters/memory.js +11 -2
  191. package/packages/agentsam-queue-control/src/adapters/sqlite.js +259 -0
  192. package/packages/agentsam-queue-control/src/contracts.js +207 -3
  193. package/packages/agentsam-queue-control/src/control-plane.js +62 -2
  194. package/packages/agentsam-queue-control/src/index.js +1 -0
  195. package/packages/agentsam-queue-control/test/queue-control.test.mjs +310 -0
  196. package/packages/agentsam-queue-control/test/sqlite-adapter.test.mjs +91 -0
  197. package/packages/agentsam-rapid-rust/README.md +3 -0
  198. package/packages/agentsam-repository/README.md +3 -0
  199. package/packages/agentsam-repository/package.json +1 -1
  200. package/packages/agentsam-vault/package.json +1 -1
  201. package/packages/agentsam-workbench/README.md +43 -0
  202. package/packages/agentsam-workbench/package.json +15 -4
  203. package/packages/agentsam-workbench/src/agent/AgentConversationSurface.tsx +108 -0
  204. package/packages/agentsam-workbench/src/agent/AgentPanel.tsx +25 -8
  205. package/packages/agentsam-workbench/src/agent/AgentRuntimeField.tsx +152 -0
  206. package/packages/agentsam-workbench/src/agent/Composer.tsx +10 -1
  207. package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +28 -4
  208. package/packages/agentsam-workbench/src/agent/RunMode.ts +26 -0
  209. package/packages/agentsam-workbench/src/agent/Thread.tsx +18 -3
  210. package/packages/agentsam-workbench/src/agent/contextual-composer.css +72 -70
  211. package/packages/agentsam-workbench/src/agent/index.ts +3 -0
  212. package/packages/agentsam-workbench/src/agent/mini-agentsam.css +228 -10
  213. package/packages/agentsam-workbench/src/index.ts +4 -0
  214. package/packages/agentsam-workbench/src/manufacturing/PreflightIndicator.tsx +203 -0
  215. package/packages/agentsam-workbench/src/manufacturing/index.ts +2 -0
  216. package/packages/agentsam-workbench/src/manufacturing/loading.ts +147 -0
  217. package/packages/agentsam-workbench/src/widgets/BuiltinWidget.tsx +22 -0
  218. package/packages/agentsam-workbench/src/widgets/CountdownWidget.tsx +68 -0
  219. package/packages/agentsam-workbench/src/widgets/WidgetFrame.tsx +56 -0
  220. package/packages/agentsam-workbench/src/widgets/countdown.ts +25 -0
  221. package/packages/agentsam-workbench/src/widgets/index.ts +6 -0
  222. package/packages/agentsam-workbench/src/widgets/registry.ts +13 -0
  223. package/packages/agentsam-workbench/src/widgets/useCountdown.ts +128 -0
  224. package/packages/agentsam-workbench/src/widgets/widgets.css +102 -0
  225. package/packages/connectors/{cloudflare → cfoa}/package.json +3 -3
  226. package/packages/heuristic-theme/package.json +1 -1
  227. package/packages/identity/README.md +3 -0
  228. package/packages/identity/backend/README.md +3 -0
  229. package/packages/identity/package.json +1 -1
  230. package/packages/identity/src/frontend/auth-portal/README.md +3 -0
  231. package/packages/identity/src/frontend/auth-portal/pages/login.html +1 -1
  232. package/packages/identity/src/frontend/auth-portal/pages/reset.html +1 -1
  233. package/packages/identity/src/frontend/auth-portal/pages/signup.html +1 -1
  234. package/packages/identity/src/index.js +1 -1
  235. package/packages/identity/src/oauth/README.md +4 -1
  236. package/packages/identity/src/oauth/credentials.js +1 -1
  237. package/packages/identity/src/server/worker-router.js +1 -1
  238. package/packages/identity/tests/chatgpt-provider.test.mjs +3 -3
  239. package/packages/identity/tests/google-desktop-identity-login.test.mjs +1 -1
  240. package/packages/identity/tests/lane1-packed-consumer.test.mjs +1 -1
  241. package/packages/identity/tests/oauth-consent-view.test.mjs +11 -11
  242. package/packages/identity/tests/oauth-presets-accounts-ssot.test.mjs +1 -1
  243. package/packages/providers/completeful/README.md +3 -3
  244. package/packages/providers/completeful/package.json +1 -1
  245. package/packages/theme-cypress/README.md +11 -0
  246. package/packages/{theme-church-site → theme-cypress}/package.json +14 -11
  247. package/packages/theme-cypress/prebuild.json +23 -0
  248. package/packages/theme-cypress/site/assets/generated/favicon.svg +7 -0
  249. package/packages/theme-cypress/site/assets/generated/media-044ba16613.webp +0 -0
  250. package/packages/theme-cypress/site/assets/generated/media-0a1ea6f6d9.webp +0 -0
  251. package/packages/theme-cypress/site/assets/generated/media-0c06778307.webp +0 -0
  252. package/packages/theme-cypress/site/assets/generated/media-1539ed373a.webp +0 -0
  253. package/packages/theme-cypress/site/assets/generated/media-2df479fd2d.webp +0 -0
  254. package/packages/theme-cypress/site/assets/generated/media-2e8bd0d9bc.webp +0 -0
  255. package/packages/theme-cypress/site/assets/generated/media-41d4e2643c.webp +0 -0
  256. package/packages/theme-cypress/site/assets/generated/media-46205bfde8.webp +0 -0
  257. package/packages/theme-cypress/site/assets/generated/media-50c5f3e279.webp +0 -0
  258. package/packages/theme-cypress/site/assets/generated/media-5f1467778c.webp +0 -0
  259. package/packages/theme-cypress/site/assets/generated/media-6703642b22.webp +0 -0
  260. package/packages/theme-cypress/site/assets/generated/media-87a490bc8e.webp +0 -0
  261. package/packages/theme-cypress/site/assets/generated/media-997c10ef39.webp +0 -0
  262. package/packages/theme-cypress/site/assets/generated/media-a423735c21.webp +0 -0
  263. package/packages/theme-cypress/site/assets/generated/media-c9cea5245b.webp +0 -0
  264. package/packages/theme-cypress/site/assets/generated/media-cab3c84c60.webp +0 -0
  265. package/packages/theme-cypress/site/assets/generated/media-ce06595d59.webp +0 -0
  266. package/packages/theme-cypress/site/assets/generated/media-d268905e7e.webp +0 -0
  267. package/packages/theme-cypress/site/assets/generated/media-f6711b5053.webp +0 -0
  268. package/packages/theme-cypress/site/assets/generated/media-manifest.json +226 -0
  269. package/packages/theme-cypress/site/assets/generated/social-card.webp +0 -0
  270. package/packages/theme-cypress/site/assets/generated/theme-mark-192.png +0 -0
  271. package/packages/theme-cypress/site/assets/generated/theme-mark-512.png +0 -0
  272. package/packages/theme-cypress/site/assets/generated/theme-mark.svg +7 -0
  273. package/packages/theme-cypress/site/beliefs.html +175 -0
  274. package/packages/theme-cypress/site/community.html +175 -0
  275. package/packages/theme-cypress/site/connect.html +319 -0
  276. package/packages/theme-cypress/site/donate.html +106 -0
  277. package/packages/theme-cypress/site/groups.html +1352 -0
  278. package/packages/theme-cypress/site/help.html +1 -0
  279. package/packages/theme-cypress/site/icons/clock.svg +4 -0
  280. package/packages/theme-cypress/site/icons/email.svg +4 -0
  281. package/packages/theme-cypress/site/icons/giving.svg +4 -0
  282. package/packages/theme-cypress/site/icons/home.svg +4 -0
  283. package/packages/theme-cypress/site/icons/location.svg +4 -0
  284. package/packages/theme-cypress/site/icons/media.svg +4 -0
  285. package/packages/theme-cypress/site/icons/ministries.svg +6 -0
  286. package/packages/theme-cypress/site/icons/prayer.svg +5 -0
  287. package/packages/theme-cypress/site/icons/visit.svg +6 -0
  288. package/packages/theme-cypress/site/index.html +1013 -0
  289. package/packages/theme-cypress/site/mensgroup.html +477 -0
  290. package/packages/theme-cypress/site/mission.html +512 -0
  291. package/packages/theme-cypress/site/unified-footer.css +172 -0
  292. package/packages/theme-cypress/site/unified-footer.js +175 -0
  293. package/packages/theme-cypress/site/unified-header.css +226 -0
  294. package/packages/theme-cypress/site/unified-header.js +111 -0
  295. package/packages/theme-cypress/site/womansgroup.html +452 -0
  296. package/packages/{theme-church-site → theme-cypress}/src/index.js +22 -35
  297. package/packages/theme-cypress/src/node.js +69 -0
  298. package/packages/theme-cypress/test/theme.test.mjs +47 -0
  299. package/packages/theme-ember/README.md +11 -0
  300. package/packages/{theme-fuelnfree-site → theme-ember}/package.json +14 -11
  301. package/packages/theme-ember/prebuild.json +23 -0
  302. package/packages/theme-ember/site/about.html +1840 -0
  303. package/packages/theme-ember/site/assets/generated/favicon.svg +7 -0
  304. package/packages/theme-ember/site/assets/generated/media-1e0b1e6ee6.webp +0 -0
  305. package/packages/theme-ember/site/assets/generated/media-2371dcb426.webp +0 -0
  306. package/packages/theme-ember/site/assets/generated/media-2db4f5ff9e.webp +0 -0
  307. package/packages/theme-ember/site/assets/generated/media-4ed07a756e.webp +0 -0
  308. package/packages/theme-ember/site/assets/generated/media-58182cf167.webp +0 -0
  309. package/packages/theme-ember/site/assets/generated/media-5b8b8472ae.webp +0 -0
  310. package/packages/theme-ember/site/assets/generated/media-71f4bd16a1.webp +0 -0
  311. package/packages/theme-ember/site/assets/generated/media-7c1c8120bc.webp +0 -0
  312. package/packages/theme-ember/site/assets/generated/media-832b176433.webp +0 -0
  313. package/packages/theme-ember/site/assets/generated/media-931439701c.webp +0 -0
  314. package/packages/theme-ember/site/assets/generated/media-c2860d40d1.webp +0 -0
  315. package/packages/theme-ember/site/assets/generated/media-c56974d198.webp +0 -0
  316. package/packages/theme-ember/site/assets/generated/media-cb83a44ff4.webp +0 -0
  317. package/packages/theme-ember/site/assets/generated/media-df02ccdfcf.webp +0 -0
  318. package/packages/theme-ember/site/assets/generated/media-fab72cd344.webp +0 -0
  319. package/packages/theme-ember/site/assets/generated/media-manifest.json +190 -0
  320. package/packages/theme-ember/site/assets/generated/social-card.webp +0 -0
  321. package/packages/theme-ember/site/assets/generated/theme-mark-192.png +0 -0
  322. package/packages/theme-ember/site/assets/generated/theme-mark-512.png +0 -0
  323. package/packages/theme-ember/site/assets/generated/theme-mark.svg +7 -0
  324. package/packages/theme-ember/site/community.html +1664 -0
  325. package/packages/theme-ember/site/index.html +2044 -0
  326. package/packages/theme-ember/site/shop.html +2104 -0
  327. package/packages/{theme-fuelnfree-site → theme-ember}/src/index.js +23 -33
  328. package/packages/theme-ember/src/node.js +69 -0
  329. package/packages/theme-ember/test/theme.test.mjs +47 -0
  330. package/packages/theme-forge/README.md +11 -0
  331. package/packages/theme-forge/package.json +44 -0
  332. package/packages/theme-forge/prebuild.json +23 -0
  333. package/packages/theme-forge/site/apple-touch-icon.png +0 -0
  334. package/packages/theme-forge/site/assets/generated/favicon.svg +7 -0
  335. package/packages/theme-forge/site/assets/generated/media-manifest.json +17 -0
  336. package/packages/theme-forge/site/assets/generated/social-card.webp +0 -0
  337. package/packages/theme-forge/site/assets/generated/theme-mark-192.png +0 -0
  338. package/packages/theme-forge/site/assets/generated/theme-mark-512.png +0 -0
  339. package/packages/theme-forge/site/assets/generated/theme-mark.svg +7 -0
  340. package/packages/theme-forge/site/assets/index-DBOqQVsA.css +1 -0
  341. package/packages/theme-forge/site/assets/index-pXC0o9jp.js +241 -0
  342. package/packages/theme-forge/site/assets/workbox-window.prod.es5-Bd17z0YL.js +2 -0
  343. package/packages/theme-forge/site/index.html +5 -0
  344. package/packages/theme-forge/site/manifest.webmanifest +1 -0
  345. package/packages/theme-forge/site/pwa-192x192.png +0 -0
  346. package/packages/theme-forge/site/pwa-512x512.png +0 -0
  347. package/packages/theme-forge/site/sw.js +107 -0
  348. package/packages/theme-forge/site/workbox-7e5eb42b.js +3395 -0
  349. package/packages/theme-forge/src/index.js +76 -0
  350. package/packages/theme-forge/src/node.js +69 -0
  351. package/packages/theme-forge/test/theme.test.mjs +47 -0
  352. package/packages/theme-grove/README.md +11 -0
  353. package/packages/{theme-floors-site → theme-grove}/package.json +14 -11
  354. package/packages/theme-grove/prebuild.json +23 -0
  355. package/packages/theme-grove/site/assets/generated/favicon.svg +7 -0
  356. package/packages/theme-grove/site/assets/generated/media-098b13d75a.webp +0 -0
  357. package/packages/theme-grove/site/assets/generated/media-0c064db1aa.webp +0 -0
  358. package/packages/theme-grove/site/assets/generated/media-0fbfef655e.webp +0 -0
  359. package/packages/theme-grove/site/assets/generated/media-14759c7460.webp +0 -0
  360. package/packages/theme-grove/site/assets/generated/media-19b23d2a8f.webp +0 -0
  361. package/packages/theme-grove/site/assets/generated/media-2012f04243.webp +0 -0
  362. package/packages/theme-grove/site/assets/generated/media-23b8c5e2bb.webp +0 -0
  363. package/packages/theme-grove/site/assets/generated/media-2bffb1a6ef.webp +0 -0
  364. package/packages/theme-grove/site/assets/generated/media-2e1523a5b0.webp +0 -0
  365. package/packages/theme-grove/site/assets/generated/media-31107c21f2.webp +0 -0
  366. package/packages/theme-grove/site/assets/generated/media-31373ec865.webp +0 -0
  367. package/packages/theme-grove/site/assets/generated/media-45e8e27542.webp +0 -0
  368. package/packages/theme-grove/site/assets/generated/media-4aa9846fe7.webp +0 -0
  369. package/packages/theme-grove/site/assets/generated/media-5476b24219.webp +0 -0
  370. package/packages/theme-grove/site/assets/generated/media-7a227d3e4b.webp +0 -0
  371. package/packages/theme-grove/site/assets/generated/media-b183eed550.webp +0 -0
  372. package/packages/theme-grove/site/assets/generated/media-b2c650f9ab.webp +0 -0
  373. package/packages/theme-grove/site/assets/generated/media-b5d7471694.webp +0 -0
  374. package/packages/theme-grove/site/assets/generated/media-c86498fdb4.webp +0 -0
  375. package/packages/theme-grove/site/assets/generated/media-ce2cfff9a1.webp +0 -0
  376. package/packages/theme-grove/site/assets/generated/media-cf41a5f324.webp +0 -0
  377. package/packages/theme-grove/site/assets/generated/media-ec6c01bf8d.webp +0 -0
  378. package/packages/theme-grove/site/assets/generated/media-manifest.json +267 -0
  379. package/packages/theme-grove/site/assets/generated/social-card.webp +0 -0
  380. package/packages/theme-grove/site/assets/generated/theme-mark-192.png +0 -0
  381. package/packages/theme-grove/site/assets/generated/theme-mark-512.png +0 -0
  382. package/packages/theme-grove/site/assets/generated/theme-mark.svg +7 -0
  383. package/packages/theme-grove/site/index.html +1429 -0
  384. package/packages/theme-grove/site/pages/contact.html +664 -0
  385. package/packages/theme-grove/site/pages/gallery.html +216 -0
  386. package/packages/theme-grove/site/pages/privacy.html +180 -0
  387. package/packages/theme-grove/site/pages/process.html +592 -0
  388. package/packages/theme-grove/site/pages/services.html +567 -0
  389. package/packages/theme-grove/site/pages/terms.html +189 -0
  390. package/packages/theme-grove/site/shared/footer.css +140 -0
  391. package/packages/theme-grove/site/shared/footer.html +41 -0
  392. package/packages/{theme-floors-site → theme-grove}/src/index.js +24 -35
  393. package/packages/theme-grove/src/node.js +69 -0
  394. package/packages/theme-grove/test/theme.test.mjs +47 -0
  395. package/packages/theme-harbor/README.md +11 -0
  396. package/packages/{theme-insurance-site → theme-harbor}/package.json +14 -11
  397. package/packages/theme-harbor/prebuild.json +23 -0
  398. package/packages/theme-harbor/site/assets/generated/favicon.svg +7 -0
  399. package/packages/theme-harbor/site/assets/generated/media-manifest.json +17 -0
  400. package/packages/theme-harbor/site/assets/generated/social-card.webp +0 -0
  401. package/packages/theme-harbor/site/assets/generated/theme-mark-192.png +0 -0
  402. package/packages/theme-harbor/site/assets/generated/theme-mark-512.png +0 -0
  403. package/packages/theme-harbor/site/assets/generated/theme-mark.svg +7 -0
  404. package/packages/theme-harbor/site/assets/index-D58RKkr-.js +239 -0
  405. package/packages/theme-harbor/site/assets/index-Dd3YN9Mf.css +1 -0
  406. package/packages/theme-harbor/site/index.html +15 -0
  407. package/packages/theme-harbor/src/index.js +76 -0
  408. package/packages/theme-harbor/src/node.js +69 -0
  409. package/packages/theme-harbor/test/theme.test.mjs +47 -0
  410. package/packages/theme-resolve/README.md +11 -0
  411. package/packages/theme-resolve/package.json +44 -0
  412. package/packages/theme-resolve/prebuild.json +23 -0
  413. package/packages/theme-resolve/site/assets/generated/favicon.svg +7 -0
  414. package/packages/theme-resolve/site/assets/generated/media-216610d365.webp +0 -0
  415. package/packages/theme-resolve/site/assets/generated/media-2a9e0f623f.webp +0 -0
  416. package/packages/theme-resolve/site/assets/generated/media-a70660bfa9.webp +0 -0
  417. package/packages/theme-resolve/site/assets/generated/media-bc1322e813.webp +0 -0
  418. package/packages/theme-resolve/site/assets/generated/media-ced60fcecc.webp +0 -0
  419. package/packages/theme-resolve/site/assets/generated/media-manifest.json +72 -0
  420. package/packages/theme-resolve/site/assets/generated/social-card.webp +0 -0
  421. package/packages/theme-resolve/site/assets/generated/theme-mark-192.png +0 -0
  422. package/packages/theme-resolve/site/assets/generated/theme-mark-512.png +0 -0
  423. package/packages/theme-resolve/site/assets/generated/theme-mark.svg +7 -0
  424. package/packages/theme-resolve/site/assets/index-BSaLpPG1.css +2 -0
  425. package/packages/theme-resolve/site/assets/index-D8au46Z5.js +17 -0
  426. package/packages/theme-resolve/site/index.html +22 -0
  427. package/packages/theme-resolve/src/index.js +69 -0
  428. package/packages/theme-resolve/src/node.js +69 -0
  429. package/packages/theme-resolve/test/theme.test.mjs +47 -0
  430. package/packages/theme-scenes/package.json +1 -1
  431. package/packages/theme-scenes/src/registry.js +32 -49
  432. package/packages/theme-summit/README.md +11 -0
  433. package/packages/{theme-shinshu-site → theme-summit}/package.json +14 -11
  434. package/packages/theme-summit/prebuild.json +23 -0
  435. package/packages/theme-summit/site/adventures.html +450 -0
  436. package/packages/theme-summit/site/assets/generated/favicon.svg +7 -0
  437. package/packages/theme-summit/site/assets/generated/media-1e958ea679.webp +0 -0
  438. package/packages/theme-summit/site/assets/generated/media-9d4521abba.webp +0 -0
  439. package/packages/theme-summit/site/assets/generated/media-manifest.json +39 -0
  440. package/packages/theme-summit/site/assets/generated/social-card.webp +0 -0
  441. package/packages/theme-summit/site/assets/generated/theme-mark-192.png +0 -0
  442. package/packages/theme-summit/site/assets/generated/theme-mark-512.png +0 -0
  443. package/packages/theme-summit/site/assets/generated/theme-mark.svg +7 -0
  444. package/packages/theme-summit/site/business-card.html +315 -0
  445. package/packages/theme-summit/site/chatbot.js +312 -0
  446. package/packages/theme-summit/site/gallery.html +524 -0
  447. package/packages/theme-summit/site/i18n.js +947 -0
  448. package/packages/theme-summit/site/icons.svg +87 -0
  449. package/packages/theme-summit/site/index.html +2415 -0
  450. package/packages/theme-summit/site/pages/about.html +100 -0
  451. package/packages/theme-summit/site/pages/contact.html +117 -0
  452. package/packages/theme-summit/site/pages/dashboard.html +111 -0
  453. package/packages/theme-summit/site/pages/index.html +129 -0
  454. package/packages/theme-summit/site/pages/services.html +125 -0
  455. package/packages/theme-summit/site/shared/footer.html +41 -0
  456. package/packages/theme-summit/site/shared/layout.js +315 -0
  457. package/packages/theme-summit/site/shared/nav.html +19 -0
  458. package/packages/theme-summit/site/shared/styles.css +696 -0
  459. package/packages/theme-summit/site/theme-styles.css +131 -0
  460. package/packages/theme-summit/site/themes.js +442 -0
  461. package/packages/{theme-shinshu-site → theme-summit}/src/index.js +23 -35
  462. package/packages/theme-summit/src/node.js +69 -0
  463. package/packages/theme-summit/test/theme.test.mjs +47 -0
  464. package/packages/theme-violet/README.md +11 -0
  465. package/packages/{theme-companions-site → theme-violet}/package.json +14 -11
  466. package/packages/theme-violet/prebuild.json +23 -0
  467. package/packages/theme-violet/site/assets/generated/favicon.svg +7 -0
  468. package/packages/theme-violet/site/assets/generated/media-07b46d6457.webp +0 -0
  469. package/packages/theme-violet/site/assets/generated/media-09d38ddffc.webp +0 -0
  470. package/packages/theme-violet/site/assets/generated/media-254b0e2ad3.webp +0 -0
  471. package/packages/theme-violet/site/assets/generated/media-3a1b5c0a8d.webp +0 -0
  472. package/packages/theme-violet/site/assets/generated/media-3a78eb7d9d.webp +0 -0
  473. package/packages/theme-violet/site/assets/generated/media-49076977d8.webp +0 -0
  474. package/packages/theme-violet/site/assets/generated/media-6342d50dbd.webp +0 -0
  475. package/packages/theme-violet/site/assets/generated/media-646c65381e.webp +0 -0
  476. package/packages/theme-violet/site/assets/generated/media-7a5fb7c91a.webp +0 -0
  477. package/packages/theme-violet/site/assets/generated/media-9bbd133220.webp +0 -0
  478. package/packages/theme-violet/site/assets/generated/media-9e73307c2a.webp +0 -0
  479. package/packages/theme-violet/site/assets/generated/media-af382146a0.webp +0 -0
  480. package/packages/theme-violet/site/assets/generated/media-b2ae348b43.webp +0 -0
  481. package/packages/theme-violet/site/assets/generated/media-b8f43a3887.webp +0 -0
  482. package/packages/theme-violet/site/assets/generated/media-c96a3e1979.webp +0 -0
  483. package/packages/theme-violet/site/assets/generated/media-cd07daa54a.webp +0 -0
  484. package/packages/theme-violet/site/assets/generated/media-e03ab6b5fe.webp +0 -0
  485. package/packages/theme-violet/site/assets/generated/media-eae4917d25.webp +0 -0
  486. package/packages/theme-violet/site/assets/generated/media-f227ec5690.webp +0 -0
  487. package/packages/theme-violet/site/assets/generated/media-fb57ffd474.webp +0 -0
  488. package/packages/theme-violet/site/assets/generated/media-manifest.json +245 -0
  489. package/packages/theme-violet/site/assets/generated/social-card.webp +0 -0
  490. package/packages/theme-violet/site/assets/generated/theme-mark-192.png +0 -0
  491. package/packages/theme-violet/site/assets/generated/theme-mark-512.png +0 -0
  492. package/packages/theme-violet/site/assets/generated/theme-mark.svg +7 -0
  493. package/packages/theme-violet/site/global/cpas-contact.css +405 -0
  494. package/packages/theme-violet/site/global/cpas-donate-v2.css +931 -0
  495. package/packages/theme-violet/site/global/cpas-drawer-override.css +1 -0
  496. package/packages/theme-violet/site/global/cpas-footer.html +38 -0
  497. package/packages/theme-violet/site/global/cpas-header.html +30 -0
  498. package/packages/theme-violet/site/global/cpas-hero-watercolor.css +275 -0
  499. package/packages/theme-violet/site/global/cpas-modals.js +802 -0
  500. package/packages/theme-violet/site/global/cpas-public-surface.css +982 -0
  501. package/packages/theme-violet/site/global/cpas-shell.css +3980 -0
  502. package/packages/theme-violet/site/global/cpas-shell.js +107 -0
  503. package/packages/theme-violet/site/global/cpas-shelter-hub.css +326 -0
  504. package/packages/theme-violet/site/index.html +141 -0
  505. package/packages/theme-violet/site/pages/about/campaigns.html +28 -0
  506. package/packages/theme-violet/site/pages/about/cta.html +25 -0
  507. package/packages/theme-violet/site/pages/about/hero.html +46 -0
  508. package/packages/theme-violet/site/pages/about/paths.html +24 -0
  509. package/packages/theme-violet/site/pages/about/why_we_exist.html +28 -0
  510. package/packages/theme-violet/site/pages/home/campaigns.html +67 -0
  511. package/packages/theme-violet/site/pages/home/hero.html +42 -0
  512. package/packages/theme-violet/site/pages/home/how-it-helps.html +32 -0
  513. package/packages/theme-violet/site/pages/home/impact-stats.html +31 -0
  514. package/packages/theme-violet/site/pages/home/mission.html +36 -0
  515. package/packages/theme-violet/site/pages/home/newsletter.html +29 -0
  516. package/packages/theme-violet/site/pages/home/transport-win.html +22 -0
  517. package/packages/theme-violet/site/pages/index.html +141 -0
  518. package/packages/theme-violet/src/index.js +76 -0
  519. package/packages/theme-violet/src/node.js +69 -0
  520. package/packages/theme-violet/test/theme.test.mjs +47 -0
  521. package/packages/work-graph/package.json +1 -1
  522. package/protocol/features/README.md +1 -1
  523. package/protocol/features/catalog.json +12 -12
  524. package/protocol/features/examples/provider-resend.feature.json +2 -2
  525. package/protocol/models/README.md +3 -0
  526. package/protocol/presets/catalog.json +1 -1
  527. package/protocol/receipts/agentsam.receipt.v1.json +95 -0
  528. package/protocol/theme-refinery/prebuild-registry.json +45 -0
  529. package/protocol/theme-refinery/product-metadata.schema.json +63 -26
  530. package/protocol/theme-refinery/receipts/prebuild-remaster-20261004.json +21 -0
  531. package/skills/README.md +3 -0
  532. package/src/acp/agent-executor.js +106 -0
  533. package/src/acp/client.js +316 -0
  534. package/src/acp/dependencies.js +426 -0
  535. package/src/acp/http.js +207 -0
  536. package/src/acp/index.js +22 -0
  537. package/src/acp/runs.js +125 -0
  538. package/src/acp/runtime-selection.js +180 -0
  539. package/src/cli/command-catalog.js +3 -0
  540. package/src/cli.js +24 -0
  541. package/src/commands/cloudflare-login.js +1 -1
  542. package/src/commands/cloudflare.js +2 -2
  543. package/src/commands/connections.js +1 -1
  544. package/src/commands/go.js +76 -6
  545. package/src/commands/merch.js +5 -0
  546. package/src/commands/mini.js +1 -1
  547. package/src/commands/receipts.js +140 -0
  548. package/src/commands/run.js +253 -0
  549. package/src/go/container.js +1 -1
  550. package/src/go/contract.js +61 -18
  551. package/src/go/discover.js +0 -4
  552. package/src/go/index.js +13 -1
  553. package/src/go/probe.js +109 -0
  554. package/src/go/{cloudflare.js → providers/cloudflare.js} +36 -136
  555. package/src/go/verify.js +1 -1
  556. package/src/indexing/ingest/inventory.js +1 -1
  557. package/src/lib/deploy/local-studio.js +2 -2
  558. package/src/lib/mini/scaffold.js +1 -1
  559. package/src/lib/whoami-capabilities.js +1 -1
  560. package/src/local/runtime-store.js +8 -0
  561. package/src/mcp/cloudflare-bundles.js +1 -1
  562. package/src/plugins/completeful.js +2 -2
  563. package/src/plugins/index.js +1 -0
  564. package/src/plugins/registry.js +59 -6
  565. package/src/receipts/contract.js +68 -0
  566. package/src/receipts/index.js +20 -0
  567. package/src/receipts/prune.js +64 -0
  568. package/src/receipts/sinks.js +285 -0
  569. package/templates/mini/gadget/app.js +15 -40
  570. package/templates/mini/gadget/index.html +7 -7
  571. package/templates/mini/shared/style.css +1 -1
  572. package/packages/theme-church-site/README.md +0 -10
  573. package/packages/theme-church-site/src/harvest.json +0 -16
  574. package/packages/theme-church-site/test/theme.test.mjs +0 -21
  575. package/packages/theme-companions-site/README.md +0 -10
  576. package/packages/theme-companions-site/src/harvest.json +0 -14
  577. package/packages/theme-companions-site/src/index.js +0 -87
  578. package/packages/theme-companions-site/test/theme.test.mjs +0 -21
  579. package/packages/theme-floors-site/README.md +0 -10
  580. package/packages/theme-floors-site/src/harvest.json +0 -16
  581. package/packages/theme-floors-site/test/theme.test.mjs +0 -21
  582. package/packages/theme-fuelnfree-site/README.md +0 -10
  583. package/packages/theme-fuelnfree-site/src/harvest.json +0 -15
  584. package/packages/theme-fuelnfree-site/test/theme.test.mjs +0 -21
  585. package/packages/theme-handyman-site/README.md +0 -10
  586. package/packages/theme-handyman-site/package.json +0 -41
  587. package/packages/theme-handyman-site/src/harvest.json +0 -12
  588. package/packages/theme-handyman-site/src/index.js +0 -88
  589. package/packages/theme-handyman-site/test/theme.test.mjs +0 -21
  590. package/packages/theme-insurance-site/README.md +0 -10
  591. package/packages/theme-insurance-site/src/harvest.json +0 -12
  592. package/packages/theme-insurance-site/src/index.js +0 -88
  593. package/packages/theme-insurance-site/test/theme.test.mjs +0 -21
  594. package/packages/theme-shinshu-site/README.md +0 -10
  595. package/packages/theme-shinshu-site/src/harvest.json +0 -14
  596. package/packages/theme-shinshu-site/test/theme.test.mjs +0 -21
  597. package/protocol/theme-refinery/lineage-registry.json +0 -105
  598. package/protocol/theme-refinery/receipts/products-registry-batch-20260924.json +0 -318
  599. package/protocol/theme-refinery/receipts/theme-harvest-20260924.json +0 -472
  600. /package/packages/connectors/{cloudflare → cfoa}/OAUTH_STORAGE_AUDIT.md +0 -0
  601. /package/packages/connectors/{cloudflare → cfoa}/src/api-client.js +0 -0
  602. /package/packages/connectors/{cloudflare → cfoa}/src/capabilities.js +0 -0
  603. /package/packages/connectors/{cloudflare → cfoa}/src/credential.js +0 -0
  604. /package/packages/connectors/{cloudflare → cfoa}/src/families/brand-protection.js +0 -0
  605. /package/packages/connectors/{cloudflare → cfoa}/src/families/keyless.js +0 -0
  606. /package/packages/connectors/{cloudflare → cfoa}/src/families/pages.js +0 -0
  607. /package/packages/connectors/{cloudflare → cfoa}/src/families/scanner.js +0 -0
  608. /package/packages/connectors/{cloudflare → cfoa}/src/families/snippets.js +0 -0
  609. /package/packages/connectors/{cloudflare → cfoa}/src/families/tag-gateway.js +0 -0
  610. /package/packages/connectors/{cloudflare → cfoa}/src/families/tags.js +0 -0
  611. /package/packages/connectors/{cloudflare → cfoa}/src/families/token-validation.js +0 -0
  612. /package/packages/connectors/{cloudflare → cfoa}/src/families/vectorize.js +0 -0
  613. /package/packages/connectors/{cloudflare → cfoa}/src/families/workflows.js +0 -0
  614. /package/packages/connectors/{cloudflare → cfoa}/src/index.js +0 -0
  615. /package/packages/connectors/{cloudflare → cfoa}/src/oauth-persist.js +0 -0
  616. /package/packages/connectors/{cloudflare → cfoa}/src/owner.js +0 -0
  617. /package/packages/connectors/{cloudflare → cfoa}/src/permission-options.js +0 -0
  618. /package/packages/connectors/{cloudflare → cfoa}/src/routes.js +0 -0
  619. /package/packages/connectors/{cloudflare → cfoa}/src/scope-catalog.js +0 -0
  620. /package/packages/connectors/{cloudflare → cfoa}/src/vault.js +0 -0
  621. /package/packages/connectors/{cloudflare → cfoa}/tests/capabilities.test.mjs +0 -0
  622. /package/packages/connectors/{cloudflare → cfoa}/tests/connector.test.mjs +0 -0
  623. /package/packages/connectors/{cloudflare → cfoa}/tests/oauth-persist.test.mjs +0 -0
  624. /package/packages/identity/src/oauth/{google-desktop-exchange.js → goaude.js} +0 -0
@@ -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>