@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.
- package/apps/cad-creator/shared/cad/package.json +1 -1
- package/apps/client-cms-editor/backend/package.json +2 -2
- package/apps/client-cms-editor/frontend/package.json +3 -3
- package/apps/client-cms-editor/frontend/src/adapters/http-authoring.test.ts +161 -0
- package/apps/client-cms-editor/frontend/src/adapters/http.ts +296 -65
- package/apps/client-cms-editor/frontend/src/editor/CmsEditor.tsx +47 -16
- package/apps/client-cms-editor/frontend/src/editor/composition-groups.test.ts +40 -0
- package/apps/client-cms-editor/frontend/src/editor/legacy/CmsEditorPrototype.tsx +28 -28
- package/apps/client-cms-editor/frontend/src/editor/useCmsEditorController.ts +3 -3
- package/apps/client-cms-editor/frontend/src/styles/agentsam-drawer.css +5 -4
- package/apps/client-cms-editor/frontend/src/styles/studio.css +150 -149
- package/apps/client-cms-editor/package.json +1 -1
- package/apps/client-cms-editor/reference/harvest/plans/INNERANIMALS-CONTENT-001.md +1 -1
- package/apps/client-cms-editor/shared/cms/package.json +1 -1
- package/apps/client-cms-editor/shared/cms/src/editor-types.ts +42 -1
- package/docs/CMS_CONTEXTUAL_COMPOSER.md +4 -4
- package/docs/PRODUCT_LIFECYCLE.md +38 -38
- package/docs/REPO_FILE_MAP.txt +2 -2
- package/docs/THEME_REFINERY.md +6 -6
- package/docs/WINDOWS_RUNTIME_INSTALL.md +1 -1
- package/docs/adr/ADR-0002-brand-campaign-plugin-boundaries.md +603 -0
- package/docs/adr/ADR-0003-copro-clean-room-product-architecture.md +34 -0
- package/docs/adr/ADR-0003-product-portfolio-and-package-taxonomy.md +146 -0
- package/docs/adr/ADR-0004-product-composition-and-provider-neutrality.md +56 -0
- package/docs/adr/ADR-0005-offer-graduation-standard.md +66 -0
- package/docs/adr/README.md +25 -0
- package/docs/architecture/AGENTSAM_APPLICATION_CONTRACT.md +1 -1
- package/docs/architecture/DUAL_ANALYTICS_PRODUCT.md +1 -1
- package/docs/content-studio/HOST_MOUNT_CHECKLIST.md +1 -1
- package/docs/content-studio/REVISION_GATE_2026-09-27.md +3 -3
- package/docs/contracts/google-cloud-oauth-setup.md +1 -1
- package/docs/local-studio/WORKMODE_DONOR_NOTES.md +3 -3
- package/docs/plans/ASTRA-BRIEF-2026-09-18.md +1 -1
- package/docs/plans/LOCAL-STUDIO-REAL-APP-CONTRACT-ADDENDUM-2026-09-27.md +2 -2
- package/docs/plans/MACHINE-FIRST-APPS-TUI-2026-09-24.md +1 -1
- package/docs/plans/NEXT-AGENT-HANDOFF.md +2 -2
- package/docs/plans/TOMORROW-EXTENSIVE-TODO-2026-09-26.md +68 -68
- package/docs/plans/TOMORROW-MACHINE-FIRST-BRIEFING.md +1 -1
- package/docs/plans/UNIVERSAL-INGEST-MACHINE-FIRST-2026-09-24.md +1 -1
- package/docs/prd/PRD-agentsam-analytics.md +174 -0
- package/docs/prd/PRD-agentsam-brand.md +181 -0
- package/docs/prd/PRD-agentsam-browser.md +177 -0
- package/docs/prd/PRD-agentsam-cad-studio.md +177 -0
- package/docs/prd/PRD-agentsam-campaign.md +1178 -0
- package/docs/prd/PRD-agentsam-commerce-studio.md +180 -0
- package/docs/prd/PRD-agentsam-content-studio.md +179 -0
- package/docs/prd/PRD-agentsam-copro.md +39 -0
- package/docs/prd/PRD-agentsam-database-studio.md +175 -0
- package/docs/prd/PRD-agentsam-developer-studio.md +175 -0
- package/docs/prd/PRD-agentsam-hosted-runtime.md +180 -0
- package/docs/prd/PRD-agentsam-knowledge.md +174 -0
- package/docs/prd/PRD-agentsam-local-studio.md +180 -0
- package/docs/prd/PRD-agentsam-merch.md +177 -0
- package/docs/prd/PRD-agentsam-platform.md +179 -0
- package/docs/prd/PRD-agentsam-site-studio.md +180 -0
- package/docs/prd/PRD-agentsam-work.md +180 -0
- package/docs/prd/README.md +39 -0
- package/docs/product/COPRO-DONOR-AUDIT.md +9 -0
- package/docs/product/COPRO-EXECUTION-PLAN.md +81 -0
- package/docs/product/COPRO-UI-QUALITY-GATE.md +119 -0
- package/docs/product/OFFER-PORTFOLIO.md +158 -0
- package/docs/product/PACKAGE-TAXONOMY.md +78 -0
- package/examples/hyperspace-demo/dist/assets/index-SZ2LfOpJ.js +242 -0
- package/examples/hyperspace-demo/dist/index.html +13 -0
- package/native/agentsam-machine/core/src/lib.rs +2 -2
- package/package.json +55 -35
- package/packages/agentsam-brand/package.json +3 -2
- package/packages/agentsam-brand/src/public.js +192 -0
- package/packages/agentsam-contracts/README.md +1 -1
- package/packages/agentsam-contracts/package.json +1 -1
- package/packages/agentsam-errors/package.json +1 -1
- package/packages/agentsam-goap/package.json +2 -2
- package/packages/agentsam-hooks/package.json +1 -1
- package/packages/agentsam-knowledge/package.json +1 -1
- package/packages/agentsam-merch/package.json +1 -1
- package/packages/agentsam-merch/test/merch.test.mjs +1 -1
- package/packages/agentsam-nav/dist/browser.global.js +34 -71
- package/packages/agentsam-nav/dist/browser.js +759 -3157
- package/packages/agentsam-nav/dist/index.js +751 -3149
- package/packages/agentsam-nav/package.json +1 -1
- package/packages/agentsam-queue-control/package.json +1 -1
- package/packages/agentsam-repository/package.json +1 -1
- package/packages/agentsam-repository/src/goap.js.bak-20260922011251 +670 -0
- package/packages/agentsam-vault/package.json +1 -1
- package/packages/agentsam-workbench/package.json +5 -4
- package/packages/agentsam-workbench/src/agent/MiniAgentSam.tsx +28 -4
- package/packages/agentsam-workbench/src/agent/contextual-composer.css +72 -70
- package/packages/agentsam-workbench/src/agent/mini-agentsam.css +228 -10
- package/packages/connectors/cfoa/package.json +1 -1
- package/packages/heuristic-theme/package.json +1 -1
- package/packages/identity/package.json +1 -1
- package/packages/identity/src/frontend/auth-portal/pages/login.html +1 -1
- package/packages/identity/src/frontend/auth-portal/pages/reset.html +1 -1
- package/packages/identity/src/frontend/auth-portal/pages/signup.html +1 -1
- package/packages/identity/tests/chatgpt-provider.test.mjs +3 -3
- package/packages/identity/tests/oauth-consent-view.test.mjs +11 -11
- package/packages/providers/completeful/README.md +3 -3
- package/packages/providers/completeful/package.json +1 -1
- package/packages/theme-cypress/README.md +11 -0
- package/packages/{theme-church-site → theme-cypress}/package.json +14 -11
- package/packages/theme-cypress/prebuild.json +23 -0
- package/packages/theme-cypress/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-cypress/site/assets/generated/media-044ba16613.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-0a1ea6f6d9.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-0c06778307.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-1539ed373a.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-2df479fd2d.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-2e8bd0d9bc.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-41d4e2643c.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-46205bfde8.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-50c5f3e279.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-5f1467778c.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-6703642b22.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-87a490bc8e.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-997c10ef39.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-a423735c21.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-c9cea5245b.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-cab3c84c60.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-ce06595d59.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-d268905e7e.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-f6711b5053.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/media-manifest.json +226 -0
- package/packages/theme-cypress/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-cypress/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-cypress/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-cypress/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-cypress/site/beliefs.html +175 -0
- package/packages/theme-cypress/site/community.html +175 -0
- package/packages/theme-cypress/site/connect.html +319 -0
- package/packages/theme-cypress/site/donate.html +106 -0
- package/packages/theme-cypress/site/groups.html +1352 -0
- package/packages/theme-cypress/site/help.html +1 -0
- package/packages/theme-cypress/site/icons/clock.svg +4 -0
- package/packages/theme-cypress/site/icons/email.svg +4 -0
- package/packages/theme-cypress/site/icons/giving.svg +4 -0
- package/packages/theme-cypress/site/icons/home.svg +4 -0
- package/packages/theme-cypress/site/icons/location.svg +4 -0
- package/packages/theme-cypress/site/icons/media.svg +4 -0
- package/packages/theme-cypress/site/icons/ministries.svg +6 -0
- package/packages/theme-cypress/site/icons/prayer.svg +5 -0
- package/packages/theme-cypress/site/icons/visit.svg +6 -0
- package/packages/theme-cypress/site/index.html +1013 -0
- package/packages/theme-cypress/site/mensgroup.html +477 -0
- package/packages/theme-cypress/site/mission.html +512 -0
- package/packages/theme-cypress/site/unified-footer.css +172 -0
- package/packages/theme-cypress/site/unified-footer.js +175 -0
- package/packages/theme-cypress/site/unified-header.css +226 -0
- package/packages/theme-cypress/site/unified-header.js +111 -0
- package/packages/theme-cypress/site/womansgroup.html +452 -0
- package/packages/{theme-church-site → theme-cypress}/src/index.js +22 -35
- package/packages/theme-cypress/src/node.js +69 -0
- package/packages/theme-cypress/test/theme.test.mjs +47 -0
- package/packages/theme-ember/README.md +11 -0
- package/packages/{theme-fuelnfree-site → theme-ember}/package.json +14 -11
- package/packages/theme-ember/prebuild.json +23 -0
- package/packages/theme-ember/site/about.html +1840 -0
- package/packages/theme-ember/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-ember/site/assets/generated/media-1e0b1e6ee6.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-2371dcb426.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-2db4f5ff9e.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-4ed07a756e.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-58182cf167.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-5b8b8472ae.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-71f4bd16a1.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-7c1c8120bc.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-832b176433.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-931439701c.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-c2860d40d1.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-c56974d198.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-cb83a44ff4.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-df02ccdfcf.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-fab72cd344.webp +0 -0
- package/packages/theme-ember/site/assets/generated/media-manifest.json +190 -0
- package/packages/theme-ember/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-ember/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-ember/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-ember/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-ember/site/community.html +1664 -0
- package/packages/theme-ember/site/index.html +2044 -0
- package/packages/theme-ember/site/shop.html +2104 -0
- package/packages/{theme-fuelnfree-site → theme-ember}/src/index.js +23 -33
- package/packages/theme-ember/src/node.js +69 -0
- package/packages/theme-ember/test/theme.test.mjs +47 -0
- package/packages/theme-forge/README.md +11 -0
- package/packages/theme-forge/package.json +44 -0
- package/packages/theme-forge/prebuild.json +23 -0
- package/packages/theme-forge/site/apple-touch-icon.png +0 -0
- package/packages/theme-forge/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-forge/site/assets/generated/media-manifest.json +17 -0
- package/packages/theme-forge/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-forge/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-forge/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-forge/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-forge/site/assets/index-DBOqQVsA.css +1 -0
- package/packages/theme-forge/site/assets/index-pXC0o9jp.js +241 -0
- package/packages/theme-forge/site/assets/workbox-window.prod.es5-Bd17z0YL.js +2 -0
- package/packages/theme-forge/site/index.html +5 -0
- package/packages/theme-forge/site/manifest.webmanifest +1 -0
- package/packages/theme-forge/site/pwa-192x192.png +0 -0
- package/packages/theme-forge/site/pwa-512x512.png +0 -0
- package/packages/theme-forge/site/sw.js +107 -0
- package/packages/theme-forge/site/workbox-7e5eb42b.js +3395 -0
- package/packages/theme-forge/src/index.js +76 -0
- package/packages/theme-forge/src/node.js +69 -0
- package/packages/theme-forge/test/theme.test.mjs +47 -0
- package/packages/theme-grove/README.md +11 -0
- package/packages/{theme-floors-site → theme-grove}/package.json +14 -11
- package/packages/theme-grove/prebuild.json +23 -0
- package/packages/theme-grove/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-grove/site/assets/generated/media-098b13d75a.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-0c064db1aa.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-0fbfef655e.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-14759c7460.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-19b23d2a8f.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-2012f04243.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-23b8c5e2bb.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-2bffb1a6ef.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-2e1523a5b0.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-31107c21f2.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-31373ec865.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-45e8e27542.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-4aa9846fe7.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-5476b24219.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-7a227d3e4b.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-b183eed550.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-b2c650f9ab.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-b5d7471694.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-c86498fdb4.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-ce2cfff9a1.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-cf41a5f324.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-ec6c01bf8d.webp +0 -0
- package/packages/theme-grove/site/assets/generated/media-manifest.json +267 -0
- package/packages/theme-grove/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-grove/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-grove/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-grove/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-grove/site/index.html +1429 -0
- package/packages/theme-grove/site/pages/contact.html +664 -0
- package/packages/theme-grove/site/pages/gallery.html +216 -0
- package/packages/theme-grove/site/pages/privacy.html +180 -0
- package/packages/theme-grove/site/pages/process.html +592 -0
- package/packages/theme-grove/site/pages/services.html +567 -0
- package/packages/theme-grove/site/pages/terms.html +189 -0
- package/packages/theme-grove/site/shared/footer.css +140 -0
- package/packages/theme-grove/site/shared/footer.html +41 -0
- package/packages/{theme-floors-site → theme-grove}/src/index.js +24 -35
- package/packages/theme-grove/src/node.js +69 -0
- package/packages/theme-grove/test/theme.test.mjs +47 -0
- package/packages/theme-harbor/README.md +11 -0
- package/packages/{theme-insurance-site → theme-harbor}/package.json +14 -11
- package/packages/theme-harbor/prebuild.json +23 -0
- package/packages/theme-harbor/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-harbor/site/assets/generated/media-manifest.json +17 -0
- package/packages/theme-harbor/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-harbor/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-harbor/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-harbor/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-harbor/site/assets/index-D58RKkr-.js +239 -0
- package/packages/theme-harbor/site/assets/index-Dd3YN9Mf.css +1 -0
- package/packages/theme-harbor/site/index.html +15 -0
- package/packages/theme-harbor/src/index.js +76 -0
- package/packages/theme-harbor/src/node.js +69 -0
- package/packages/theme-harbor/test/theme.test.mjs +47 -0
- package/packages/theme-resolve/README.md +11 -0
- package/packages/theme-resolve/package.json +44 -0
- package/packages/theme-resolve/prebuild.json +23 -0
- package/packages/theme-resolve/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-resolve/site/assets/generated/media-216610d365.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/media-2a9e0f623f.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/media-a70660bfa9.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/media-bc1322e813.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/media-ced60fcecc.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/media-manifest.json +72 -0
- package/packages/theme-resolve/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-resolve/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-resolve/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-resolve/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-resolve/site/assets/index-BSaLpPG1.css +2 -0
- package/packages/theme-resolve/site/assets/index-D8au46Z5.js +17 -0
- package/packages/theme-resolve/site/index.html +22 -0
- package/packages/theme-resolve/src/index.js +69 -0
- package/packages/theme-resolve/src/node.js +69 -0
- package/packages/theme-resolve/test/theme.test.mjs +47 -0
- package/packages/theme-scenes/package.json +1 -1
- package/packages/theme-scenes/src/registry.js +32 -49
- package/packages/theme-summit/README.md +11 -0
- package/packages/{theme-shinshu-site → theme-summit}/package.json +14 -11
- package/packages/theme-summit/prebuild.json +23 -0
- package/packages/theme-summit/site/adventures.html +450 -0
- package/packages/theme-summit/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-summit/site/assets/generated/media-1e958ea679.webp +0 -0
- package/packages/theme-summit/site/assets/generated/media-9d4521abba.webp +0 -0
- package/packages/theme-summit/site/assets/generated/media-manifest.json +39 -0
- package/packages/theme-summit/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-summit/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-summit/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-summit/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-summit/site/business-card.html +315 -0
- package/packages/theme-summit/site/chatbot.js +312 -0
- package/packages/theme-summit/site/gallery.html +524 -0
- package/packages/theme-summit/site/i18n.js +947 -0
- package/packages/theme-summit/site/icons.svg +87 -0
- package/packages/theme-summit/site/index.html +2415 -0
- package/packages/theme-summit/site/pages/about.html +100 -0
- package/packages/theme-summit/site/pages/contact.html +117 -0
- package/packages/theme-summit/site/pages/dashboard.html +111 -0
- package/packages/theme-summit/site/pages/index.html +129 -0
- package/packages/theme-summit/site/pages/services.html +125 -0
- package/packages/theme-summit/site/shared/footer.html +41 -0
- package/packages/theme-summit/site/shared/layout.js +315 -0
- package/packages/theme-summit/site/shared/nav.html +19 -0
- package/packages/theme-summit/site/shared/styles.css +696 -0
- package/packages/theme-summit/site/theme-styles.css +131 -0
- package/packages/theme-summit/site/themes.js +442 -0
- package/packages/{theme-shinshu-site → theme-summit}/src/index.js +23 -35
- package/packages/theme-summit/src/node.js +69 -0
- package/packages/theme-summit/test/theme.test.mjs +47 -0
- package/packages/theme-violet/README.md +11 -0
- package/packages/{theme-companions-site → theme-violet}/package.json +14 -11
- package/packages/theme-violet/prebuild.json +23 -0
- package/packages/theme-violet/site/assets/generated/favicon.svg +7 -0
- package/packages/theme-violet/site/assets/generated/media-07b46d6457.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-09d38ddffc.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-254b0e2ad3.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-3a1b5c0a8d.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-3a78eb7d9d.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-49076977d8.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-6342d50dbd.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-646c65381e.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-7a5fb7c91a.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-9bbd133220.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-9e73307c2a.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-af382146a0.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-b2ae348b43.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-b8f43a3887.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-c96a3e1979.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-cd07daa54a.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-e03ab6b5fe.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-eae4917d25.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-f227ec5690.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-fb57ffd474.webp +0 -0
- package/packages/theme-violet/site/assets/generated/media-manifest.json +245 -0
- package/packages/theme-violet/site/assets/generated/social-card.webp +0 -0
- package/packages/theme-violet/site/assets/generated/theme-mark-192.png +0 -0
- package/packages/theme-violet/site/assets/generated/theme-mark-512.png +0 -0
- package/packages/theme-violet/site/assets/generated/theme-mark.svg +7 -0
- package/packages/theme-violet/site/global/cpas-contact.css +405 -0
- package/packages/theme-violet/site/global/cpas-donate-v2.css +931 -0
- package/packages/theme-violet/site/global/cpas-drawer-override.css +1 -0
- package/packages/theme-violet/site/global/cpas-footer.html +38 -0
- package/packages/theme-violet/site/global/cpas-header.html +30 -0
- package/packages/theme-violet/site/global/cpas-hero-watercolor.css +275 -0
- package/packages/theme-violet/site/global/cpas-modals.js +802 -0
- package/packages/theme-violet/site/global/cpas-public-surface.css +982 -0
- package/packages/theme-violet/site/global/cpas-shell.css +3980 -0
- package/packages/theme-violet/site/global/cpas-shell.js +107 -0
- package/packages/theme-violet/site/global/cpas-shelter-hub.css +326 -0
- package/packages/theme-violet/site/index.html +141 -0
- package/packages/theme-violet/site/pages/about/campaigns.html +28 -0
- package/packages/theme-violet/site/pages/about/cta.html +25 -0
- package/packages/theme-violet/site/pages/about/hero.html +46 -0
- package/packages/theme-violet/site/pages/about/paths.html +24 -0
- package/packages/theme-violet/site/pages/about/why_we_exist.html +28 -0
- package/packages/theme-violet/site/pages/home/campaigns.html +67 -0
- package/packages/theme-violet/site/pages/home/hero.html +42 -0
- package/packages/theme-violet/site/pages/home/how-it-helps.html +32 -0
- package/packages/theme-violet/site/pages/home/impact-stats.html +31 -0
- package/packages/theme-violet/site/pages/home/mission.html +36 -0
- package/packages/theme-violet/site/pages/home/newsletter.html +29 -0
- package/packages/theme-violet/site/pages/home/transport-win.html +22 -0
- package/packages/theme-violet/site/pages/index.html +141 -0
- package/packages/theme-violet/src/index.js +76 -0
- package/packages/theme-violet/src/node.js +69 -0
- package/packages/theme-violet/test/theme.test.mjs +47 -0
- package/packages/work-graph/package.json +1 -1
- package/protocol/features/README.md +1 -1
- package/protocol/features/catalog.json +12 -12
- package/protocol/features/examples/provider-resend.feature.json +2 -2
- package/protocol/presets/catalog.json +1 -1
- package/protocol/theme-refinery/prebuild-registry.json +45 -0
- package/protocol/theme-refinery/product-metadata.schema.json +63 -26
- package/protocol/theme-refinery/receipts/prebuild-remaster-20261004.json +21 -0
- package/src/plugins/completeful.js +2 -2
- package/packages/theme-church-site/README.md +0 -10
- package/packages/theme-church-site/src/harvest.json +0 -16
- package/packages/theme-church-site/test/theme.test.mjs +0 -21
- package/packages/theme-companions-site/README.md +0 -10
- package/packages/theme-companions-site/src/harvest.json +0 -14
- package/packages/theme-companions-site/src/index.js +0 -87
- package/packages/theme-companions-site/test/theme.test.mjs +0 -21
- package/packages/theme-floors-site/README.md +0 -10
- package/packages/theme-floors-site/src/harvest.json +0 -16
- package/packages/theme-floors-site/test/theme.test.mjs +0 -21
- package/packages/theme-fuelnfree-site/README.md +0 -10
- package/packages/theme-fuelnfree-site/src/harvest.json +0 -15
- package/packages/theme-fuelnfree-site/test/theme.test.mjs +0 -21
- package/packages/theme-handyman-site/README.md +0 -10
- package/packages/theme-handyman-site/package.json +0 -41
- package/packages/theme-handyman-site/src/harvest.json +0 -12
- package/packages/theme-handyman-site/src/index.js +0 -88
- package/packages/theme-handyman-site/test/theme.test.mjs +0 -21
- package/packages/theme-insurance-site/README.md +0 -10
- package/packages/theme-insurance-site/src/harvest.json +0 -12
- package/packages/theme-insurance-site/src/index.js +0 -88
- package/packages/theme-insurance-site/test/theme.test.mjs +0 -21
- package/packages/theme-shinshu-site/README.md +0 -10
- package/packages/theme-shinshu-site/src/harvest.json +0 -14
- package/packages/theme-shinshu-site/test/theme.test.mjs +0 -21
- package/protocol/theme-refinery/lineage-registry.json +0 -105
- package/protocol/theme-refinery/receipts/products-registry-batch-20260924.json +0 -318
- package/protocol/theme-refinery/receipts/theme-harvest-20260924.json +0 -472
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/* cpas-shell.js — public site interactions */
|
|
2
|
+
(function () {
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
/* ── Active nav from page route (works in CMS preview iframe) ── */
|
|
6
|
+
function setActiveLinks() {
|
|
7
|
+
const pathFromBody = document.body && document.body.dataset ? document.body.dataset.route : '';
|
|
8
|
+
const path = String(pathFromBody || window.location.pathname).replace(/\/$/, '') || '/';
|
|
9
|
+
document.querySelectorAll('.site-nav a, .nav-drawer-links a, .nav-drawer a').forEach(function (a) {
|
|
10
|
+
const href = a.getAttribute('href');
|
|
11
|
+
if (!href || href.startsWith('http')) return;
|
|
12
|
+
const linkPath = href.replace(/\/$/, '') || '/';
|
|
13
|
+
const isActive = linkPath === path;
|
|
14
|
+
a.classList.toggle('active', isActive);
|
|
15
|
+
a.classList.toggle('is-active', isActive);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
setActiveLinks();
|
|
19
|
+
|
|
20
|
+
/* ── Header scroll behaviour ─────────────────────────── */
|
|
21
|
+
const hdr = document.querySelector('.site-header');
|
|
22
|
+
if (hdr) {
|
|
23
|
+
let lastY = 0;
|
|
24
|
+
window.addEventListener('scroll', () => {
|
|
25
|
+
const y = window.scrollY;
|
|
26
|
+
hdr.classList.toggle('scrolled', y > 24);
|
|
27
|
+
hdr.classList.toggle('header-hidden', y > lastY + 80 && y > 300);
|
|
28
|
+
if (y < lastY || y < 80) hdr.classList.remove('header-hidden');
|
|
29
|
+
lastY = y;
|
|
30
|
+
}, { passive: true });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* ── Mobile nav ──────────────────────────────────────── */
|
|
34
|
+
const toggle = document.querySelector('.mobile-menu-toggle');
|
|
35
|
+
const drawer = document.querySelector('.nav-drawer');
|
|
36
|
+
const overlay = document.getElementById('navOverlay');
|
|
37
|
+
|
|
38
|
+
function closeNav() {
|
|
39
|
+
drawer && drawer.classList.remove('is-open');
|
|
40
|
+
overlay && overlay.classList.remove('is-open');
|
|
41
|
+
toggle && toggle.classList.remove('is-open');
|
|
42
|
+
toggle && toggle.setAttribute('aria-expanded', 'false');
|
|
43
|
+
document.body.classList.remove('menu-open', 'cpas-nav-open');
|
|
44
|
+
document.documentElement.classList.remove('cpas-nav-open');
|
|
45
|
+
document.body.style.overflow = '';
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (toggle) {
|
|
49
|
+
toggle.addEventListener('click', () => {
|
|
50
|
+
const open = drawer ? drawer.classList.toggle('is-open') : false;
|
|
51
|
+
overlay && overlay.classList.toggle('is-open', open);
|
|
52
|
+
toggle.classList.toggle('is-open', open);
|
|
53
|
+
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
|
54
|
+
document.body.classList.toggle('menu-open', open);
|
|
55
|
+
document.body.classList.toggle('cpas-nav-open', open);
|
|
56
|
+
document.documentElement.classList.toggle('cpas-nav-open', open);
|
|
57
|
+
document.body.style.overflow = open ? 'hidden' : '';
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const closeBtn = document.querySelector('.mobile-nav-close');
|
|
62
|
+
closeBtn && closeBtn.addEventListener('click', closeNav);
|
|
63
|
+
overlay && overlay.addEventListener('click', closeNav);
|
|
64
|
+
document.addEventListener('keydown', (e) => {
|
|
65
|
+
if (e.key === 'Escape') {
|
|
66
|
+
closeNav();
|
|
67
|
+
if (window.CPASModals && typeof window.CPASModals.close === 'function') window.CPASModals.close();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
/* ── CMS dashboard: scroll-to-section postMessage listener ── */
|
|
72
|
+
window.addEventListener('message', function(e) {
|
|
73
|
+
if (!e.data || e.data.type !== 'cms:scroll-to-section') return;
|
|
74
|
+
const key = e.data.key;
|
|
75
|
+
if (!key) return;
|
|
76
|
+
const el = document.querySelector('[data-cpas-section="' + key + '"]');
|
|
77
|
+
if (el) {
|
|
78
|
+
el.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
79
|
+
// Brief highlight pulse so the section is visually obvious
|
|
80
|
+
el.style.transition = 'outline 0.1s';
|
|
81
|
+
el.style.outline = '2px solid rgba(139,92,246,0.5)';
|
|
82
|
+
setTimeout(function() { el.style.outline = ''; }, 1200);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
})();
|
|
87
|
+
|
|
88
|
+
// CPAS reusable newsletter form
|
|
89
|
+
(() => {
|
|
90
|
+
document.addEventListener('submit', async (event) => {
|
|
91
|
+
const form = event.target.closest('[data-newsletter-form]');
|
|
92
|
+
if (!form) return;
|
|
93
|
+
event.preventDefault();
|
|
94
|
+
const email = form.querySelector('input[type="email"]')?.value?.trim();
|
|
95
|
+
const status = form.querySelector('[data-newsletter-status]');
|
|
96
|
+
if (!email) { if (status) status.textContent = 'Please enter your email.'; return; }
|
|
97
|
+
if (status) status.textContent = 'Subscribing...';
|
|
98
|
+
try {
|
|
99
|
+
const res = await fetch('/api/newsletter/subscribe', { method:'POST', headers:{'content-type':'application/json'}, body: JSON.stringify({ email }) });
|
|
100
|
+
if (!res.ok) throw new Error('Subscribe failed');
|
|
101
|
+
if (status) status.textContent = 'You are subscribed. Check your inbox for a confirmation.';
|
|
102
|
+
form.reset();
|
|
103
|
+
} catch {
|
|
104
|
+
if (status) status.textContent = 'Could not subscribe. Please try again.';
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
})();
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/* Shelter hub (/adopt) — CPAS location, adoption, lost & found (light theme) */
|
|
2
|
+
|
|
3
|
+
.shelter-hub { box-sizing: border-box; }
|
|
4
|
+
.shelter-hub *, .shelter-hub *::before, .shelter-hub *::after { box-sizing: border-box; }
|
|
5
|
+
|
|
6
|
+
.shelter-hub__intro {
|
|
7
|
+
background:
|
|
8
|
+
radial-gradient(ellipse 480px 260px at 50% 0%, rgba(107, 33, 232, 0.10) 0%, rgba(107, 33, 232, 0) 70%),
|
|
9
|
+
var(--bg-2);
|
|
10
|
+
padding: clamp(2rem, 5vw, 3rem) 1.5rem clamp(1.75rem, 4vw, 2.75rem);
|
|
11
|
+
text-align: center;
|
|
12
|
+
border-bottom: 1px solid var(--border);
|
|
13
|
+
}
|
|
14
|
+
.shelter-hub__intro-inner { max-width: 640px; margin: 0 auto; }
|
|
15
|
+
.shelter-hub__crest {
|
|
16
|
+
display: block;
|
|
17
|
+
width: 52px;
|
|
18
|
+
height: auto;
|
|
19
|
+
margin: 0 auto 1rem;
|
|
20
|
+
opacity: 0.95;
|
|
21
|
+
filter: drop-shadow(0 2px 8px rgba(107, 33, 232, 0.12));
|
|
22
|
+
}
|
|
23
|
+
.shelter-hub__title {
|
|
24
|
+
font-family: var(--font-display, Georgia, serif);
|
|
25
|
+
font-size: clamp(1.55rem, 3.5vw, 2.1rem);
|
|
26
|
+
font-weight: 700;
|
|
27
|
+
color: var(--text-1);
|
|
28
|
+
line-height: 1.15;
|
|
29
|
+
margin: 0 0 0.85rem;
|
|
30
|
+
}
|
|
31
|
+
.shelter-hub__lede {
|
|
32
|
+
font-size: 0.975rem;
|
|
33
|
+
color: var(--text-2);
|
|
34
|
+
line-height: 1.7;
|
|
35
|
+
max-width: 560px;
|
|
36
|
+
margin: 0 auto;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.shelter-hub__panel {
|
|
40
|
+
background: var(--bg-2);
|
|
41
|
+
padding: clamp(2.5rem, 5vw, 3.5rem) 1.5rem;
|
|
42
|
+
}
|
|
43
|
+
.shelter-hub__panel--alt { background: var(--bg); }
|
|
44
|
+
.shelter-hub__narrow { max-width: 820px; }
|
|
45
|
+
|
|
46
|
+
.shelter-hub__eyebrow {
|
|
47
|
+
font-size: 0.68rem;
|
|
48
|
+
font-weight: 700;
|
|
49
|
+
letter-spacing: 0.1em;
|
|
50
|
+
text-transform: uppercase;
|
|
51
|
+
color: var(--purple, #7c6fd0);
|
|
52
|
+
text-align: center;
|
|
53
|
+
display: block;
|
|
54
|
+
margin-bottom: 0.65rem;
|
|
55
|
+
}
|
|
56
|
+
.shelter-hub__eyebrow--dark { color: var(--purple, #7c6fd0); }
|
|
57
|
+
.shelter-hub__eyebrow--light { color: rgba(255, 255, 255, 0.5); }
|
|
58
|
+
.shelter-hub__eyebrow--left { text-align: left; }
|
|
59
|
+
|
|
60
|
+
.shelter-hub__heading {
|
|
61
|
+
font-family: var(--font-display, Georgia, serif);
|
|
62
|
+
font-size: clamp(1.45rem, 3vw, 1.95rem);
|
|
63
|
+
font-weight: 700;
|
|
64
|
+
color: var(--light-text, #1a1a1a);
|
|
65
|
+
text-align: center;
|
|
66
|
+
line-height: 1.2;
|
|
67
|
+
margin: 0 0 1rem;
|
|
68
|
+
}
|
|
69
|
+
.shelter-hub__body {
|
|
70
|
+
font-size: 0.95rem;
|
|
71
|
+
color: var(--light-muted, #4a4a4a);
|
|
72
|
+
line-height: 1.7;
|
|
73
|
+
margin: 0 0 2rem;
|
|
74
|
+
}
|
|
75
|
+
.shelter-hub__body--center {
|
|
76
|
+
text-align: center;
|
|
77
|
+
max-width: 560px;
|
|
78
|
+
margin-left: auto;
|
|
79
|
+
margin-right: auto;
|
|
80
|
+
}
|
|
81
|
+
.shelter-hub__inline-link {
|
|
82
|
+
color: var(--purple, #6c5ecf);
|
|
83
|
+
text-decoration: underline;
|
|
84
|
+
text-underline-offset: 2px;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.shelter-hub__location {
|
|
88
|
+
display: grid;
|
|
89
|
+
grid-template-columns: 1fr 1fr;
|
|
90
|
+
gap: 1.5rem;
|
|
91
|
+
align-items: start;
|
|
92
|
+
}
|
|
93
|
+
.shelter-hub__location-info {
|
|
94
|
+
display: flex;
|
|
95
|
+
flex-direction: column;
|
|
96
|
+
gap: 1.25rem;
|
|
97
|
+
}
|
|
98
|
+
.shelter-hub__map {
|
|
99
|
+
border-radius: 14px;
|
|
100
|
+
overflow: hidden;
|
|
101
|
+
height: 300px;
|
|
102
|
+
min-height: 260px;
|
|
103
|
+
border: 1px solid rgba(0, 0, 0, 0.08);
|
|
104
|
+
background: #ddd;
|
|
105
|
+
}
|
|
106
|
+
.shelter-hub__map iframe { display: block; width: 100%; height: 100%; }
|
|
107
|
+
|
|
108
|
+
.shelter-hub__info {
|
|
109
|
+
display: flex;
|
|
110
|
+
gap: 12px;
|
|
111
|
+
align-items: flex-start;
|
|
112
|
+
}
|
|
113
|
+
.shelter-hub__info-icon {
|
|
114
|
+
flex-shrink: 0;
|
|
115
|
+
width: 36px;
|
|
116
|
+
height: 36px;
|
|
117
|
+
background: #ede9fc;
|
|
118
|
+
border-radius: 9px;
|
|
119
|
+
display: flex;
|
|
120
|
+
align-items: center;
|
|
121
|
+
justify-content: center;
|
|
122
|
+
color: var(--purple, #6c5ecf);
|
|
123
|
+
margin-top: 1px;
|
|
124
|
+
}
|
|
125
|
+
.shelter-hub__info-label {
|
|
126
|
+
font-size: 0.7rem;
|
|
127
|
+
font-weight: 700;
|
|
128
|
+
letter-spacing: 0.07em;
|
|
129
|
+
text-transform: uppercase;
|
|
130
|
+
color: #999;
|
|
131
|
+
margin: 0 0 3px;
|
|
132
|
+
}
|
|
133
|
+
.shelter-hub__info-value {
|
|
134
|
+
font-size: 0.9rem;
|
|
135
|
+
color: var(--light-text, #1a1a1a);
|
|
136
|
+
line-height: 1.55;
|
|
137
|
+
margin: 0;
|
|
138
|
+
}
|
|
139
|
+
.shelter-hub__info-link {
|
|
140
|
+
font-size: 0.9rem;
|
|
141
|
+
color: var(--purple, #6c5ecf);
|
|
142
|
+
text-decoration: none;
|
|
143
|
+
font-weight: 600;
|
|
144
|
+
}
|
|
145
|
+
.shelter-hub__info-link:hover { text-decoration: underline; }
|
|
146
|
+
|
|
147
|
+
.shelter-hub__hours {
|
|
148
|
+
font-size: 0.84rem;
|
|
149
|
+
border-collapse: collapse;
|
|
150
|
+
color: #333;
|
|
151
|
+
}
|
|
152
|
+
.shelter-hub__hours td { padding: 2px 10px 2px 0; vertical-align: middle; }
|
|
153
|
+
.shelter-hub__hours td:first-child { color: #777; font-size: 0.78rem; white-space: nowrap; }
|
|
154
|
+
.shelter-hub__badge {
|
|
155
|
+
display: inline-block;
|
|
156
|
+
font-size: 0.65rem;
|
|
157
|
+
font-weight: 700;
|
|
158
|
+
letter-spacing: 0.04em;
|
|
159
|
+
text-transform: uppercase;
|
|
160
|
+
color: var(--purple, #6c5ecf);
|
|
161
|
+
background: #ede9fc;
|
|
162
|
+
border-radius: 5px;
|
|
163
|
+
padding: 2px 6px;
|
|
164
|
+
margin-left: 4px;
|
|
165
|
+
vertical-align: middle;
|
|
166
|
+
}
|
|
167
|
+
.shelter-hub__closed { color: #aaa; }
|
|
168
|
+
|
|
169
|
+
.shelter-hub__btn-stack {
|
|
170
|
+
display: flex;
|
|
171
|
+
flex-direction: column;
|
|
172
|
+
gap: 8px;
|
|
173
|
+
margin-top: 4px;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.shelter-hub__cards {
|
|
177
|
+
display: grid;
|
|
178
|
+
grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
|
|
179
|
+
gap: 12px;
|
|
180
|
+
margin-bottom: 1.75rem;
|
|
181
|
+
}
|
|
182
|
+
.shelter-hub__card {
|
|
183
|
+
background: #fff;
|
|
184
|
+
border: 1px solid var(--border);
|
|
185
|
+
border-radius: 14px;
|
|
186
|
+
padding: 1.15rem 1.1rem 1.05rem;
|
|
187
|
+
box-shadow: 0 2px 12px rgba(28, 20, 32, 0.04);
|
|
188
|
+
}
|
|
189
|
+
.shelter-hub__card-icon {
|
|
190
|
+
width: 38px;
|
|
191
|
+
height: 38px;
|
|
192
|
+
border-radius: 9px;
|
|
193
|
+
background: #ede9fc;
|
|
194
|
+
display: flex;
|
|
195
|
+
align-items: center;
|
|
196
|
+
justify-content: center;
|
|
197
|
+
color: var(--purple, #6c5ecf);
|
|
198
|
+
margin-bottom: 0.8rem;
|
|
199
|
+
}
|
|
200
|
+
.shelter-hub__card-title {
|
|
201
|
+
font-family: var(--font-body);
|
|
202
|
+
font-size: 0.85rem;
|
|
203
|
+
font-weight: 700;
|
|
204
|
+
color: var(--light-text, #1a1a1a);
|
|
205
|
+
margin: 0 0 0.35rem;
|
|
206
|
+
}
|
|
207
|
+
.shelter-hub__card-body {
|
|
208
|
+
font-size: 0.8rem;
|
|
209
|
+
color: #555;
|
|
210
|
+
line-height: 1.6;
|
|
211
|
+
margin: 0;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.shelter-hub__policy {
|
|
215
|
+
background: #fff;
|
|
216
|
+
border: 1px solid rgba(0, 0, 0, 0.07);
|
|
217
|
+
border-radius: 14px;
|
|
218
|
+
padding: 1.35rem 1.4rem 1.25rem;
|
|
219
|
+
margin-bottom: 2rem;
|
|
220
|
+
}
|
|
221
|
+
.shelter-hub__list {
|
|
222
|
+
list-style: none;
|
|
223
|
+
padding: 0;
|
|
224
|
+
margin: 0.6rem 0 0;
|
|
225
|
+
display: flex;
|
|
226
|
+
flex-direction: column;
|
|
227
|
+
gap: 0.55rem;
|
|
228
|
+
}
|
|
229
|
+
.shelter-hub__list li {
|
|
230
|
+
font-size: 0.85rem;
|
|
231
|
+
color: #4a4a4a;
|
|
232
|
+
line-height: 1.6;
|
|
233
|
+
padding-left: 1.2rem;
|
|
234
|
+
position: relative;
|
|
235
|
+
margin: 0;
|
|
236
|
+
}
|
|
237
|
+
.shelter-hub__list li::before {
|
|
238
|
+
content: "–";
|
|
239
|
+
position: absolute;
|
|
240
|
+
left: 0;
|
|
241
|
+
color: #9b8fd6;
|
|
242
|
+
}
|
|
243
|
+
.shelter-hub__list strong { color: var(--light-text, #1a1a1a); font-weight: 700; }
|
|
244
|
+
|
|
245
|
+
.shelter-hub__steps {
|
|
246
|
+
display: flex;
|
|
247
|
+
flex-direction: column;
|
|
248
|
+
gap: 10px;
|
|
249
|
+
margin-bottom: 2rem;
|
|
250
|
+
}
|
|
251
|
+
.shelter-hub__step {
|
|
252
|
+
display: flex;
|
|
253
|
+
gap: 14px;
|
|
254
|
+
align-items: flex-start;
|
|
255
|
+
background: #fff;
|
|
256
|
+
border: 1px solid rgba(0, 0, 0, 0.07);
|
|
257
|
+
border-radius: 14px;
|
|
258
|
+
padding: 1rem 1.2rem;
|
|
259
|
+
}
|
|
260
|
+
.shelter-hub__step-num {
|
|
261
|
+
flex-shrink: 0;
|
|
262
|
+
width: 30px;
|
|
263
|
+
height: 30px;
|
|
264
|
+
border-radius: 50%;
|
|
265
|
+
background: #ede9fc;
|
|
266
|
+
color: var(--purple, #6c5ecf);
|
|
267
|
+
font-size: 0.8rem;
|
|
268
|
+
font-weight: 700;
|
|
269
|
+
display: flex;
|
|
270
|
+
align-items: center;
|
|
271
|
+
justify-content: center;
|
|
272
|
+
margin-top: 1px;
|
|
273
|
+
}
|
|
274
|
+
.shelter-hub__step-title {
|
|
275
|
+
font-family: var(--font-body);
|
|
276
|
+
font-size: 0.87rem;
|
|
277
|
+
font-weight: 700;
|
|
278
|
+
color: var(--light-text, #1a1a1a);
|
|
279
|
+
margin: 0 0 0.25rem;
|
|
280
|
+
}
|
|
281
|
+
.shelter-hub__step-body {
|
|
282
|
+
font-size: 0.8rem;
|
|
283
|
+
color: #555;
|
|
284
|
+
line-height: 1.6;
|
|
285
|
+
margin: 0;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.shelter-hub__cta-row {
|
|
289
|
+
display: flex;
|
|
290
|
+
gap: 10px;
|
|
291
|
+
flex-wrap: wrap;
|
|
292
|
+
justify-content: center;
|
|
293
|
+
}
|
|
294
|
+
.shelter-hub__btn {
|
|
295
|
+
display: inline-flex;
|
|
296
|
+
align-items: center;
|
|
297
|
+
gap: 7px;
|
|
298
|
+
padding: 0.65rem 1.3rem;
|
|
299
|
+
border-radius: 10px;
|
|
300
|
+
font-family: var(--font-body);
|
|
301
|
+
font-size: 0.875rem;
|
|
302
|
+
font-weight: 700;
|
|
303
|
+
text-decoration: none;
|
|
304
|
+
transition: opacity 0.15s ease, transform 0.1s ease;
|
|
305
|
+
cursor: pointer;
|
|
306
|
+
white-space: nowrap;
|
|
307
|
+
}
|
|
308
|
+
.shelter-hub__btn:hover { opacity: 0.87; transform: translateY(-1px); }
|
|
309
|
+
.shelter-hub__btn:active { transform: scale(0.98); }
|
|
310
|
+
.shelter-hub__btn--primary {
|
|
311
|
+
background: var(--purple, #6c5ecf);
|
|
312
|
+
color: #fff;
|
|
313
|
+
border: none;
|
|
314
|
+
}
|
|
315
|
+
.shelter-hub__btn--secondary {
|
|
316
|
+
background: #fff;
|
|
317
|
+
color: var(--light-text, #1a1a1a);
|
|
318
|
+
border: 1px solid rgba(0, 0, 0, 0.15);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
@media (max-width: 640px) {
|
|
322
|
+
.shelter-hub__location { grid-template-columns: 1fr; }
|
|
323
|
+
.shelter-hub__map { order: -1; height: 240px; }
|
|
324
|
+
.shelter-hub__cta-row { flex-direction: column; align-items: stretch; }
|
|
325
|
+
.shelter-hub__btn { justify-content: center; white-space: normal; text-align: center; }
|
|
326
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
|
|
3
|
+
<html lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8"/>
|
|
6
|
+
<meta content="width=device-width, initial-scale=1" name="viewport"/>
|
|
7
|
+
<title>Violet Initiative — Violet</title>
|
|
8
|
+
<meta content="Explore a campaign website prebuild built around bold calls to action, impact proof, human stories, donation moments, and clear ways to take part." name="description"/>
|
|
9
|
+
<link href="./global/cpas-public-surface.css" rel="stylesheet"/>
|
|
10
|
+
<script>window.__BRAND={"brand_name":"Violet Initiative","logo_dark_url":"/assets/generated/theme-mark.svg","logo_light_url":"/assets/generated/media-07b46d6457.webp","footer_logo_dark_url":"/assets/generated/media-07b46d6457.webp","footer_logo_light_url":"/assets/generated/theme-mark.svg","developer_logo_dark_url":"/assets/generated/theme-mark.svg","developer_logo_light_url":"/assets/generated/media-b8f43a3887.webp","logo_width":140,"footer_logo_width":120}</script>
|
|
11
|
+
<link href="https://example.com/" rel="canonical"/><meta content="index,follow,max-image-preview:large" name="robots"/><meta content="#17111f" name="theme-color"/><meta content="website" property="og:type"/><meta content="Violet Initiative — Violet" property="og:title"/><meta content="Explore a campaign website prebuild built around bold calls to action, impact proof, human stories, donation moments, and clear ways to take part." property="og:description"/><meta content="https://example.com/" property="og:url"/><meta content="https://example.com/assets/generated/social-card.webp" property="og:image"/><meta content="summary_large_image" name="twitter:card"/><meta content="Violet Initiative — Violet" name="twitter:title"/><meta content="Explore a campaign website prebuild built around bold calls to action, impact proof, human stories, donation moments, and clear ways to take part." 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": "Violet Initiative", "description": "Explore a campaign website prebuild built around bold calls to action, impact proof, human stories, donation moments, and clear ways to take part.", "url": "https://example.com/", "isPartOf": {"@type": "CreativeWork", "name": "Violet AgentSam Prebuild"}}</script></head>
|
|
12
|
+
<body class="theme-dark" data-font="playfair_inter" data-route="/" data-theme="dark">
|
|
13
|
+
<header class="site-header">
|
|
14
|
+
<div class="container header-inner">
|
|
15
|
+
<a aria-label="Violet Initiative — staff login" class="logo-link" href="./admin/login">
|
|
16
|
+
<img alt="Violet Initiative" src="/assets/generated/theme-mark.svg"/>
|
|
17
|
+
</a>
|
|
18
|
+
<nav aria-label="Main navigation">
|
|
19
|
+
<ul class="site-nav">
|
|
20
|
+
<li><a href="/">Home</a></li>
|
|
21
|
+
<li><a href="./about">About</a></li>
|
|
22
|
+
<li><a href="./services">Foster</a></li>
|
|
23
|
+
<li><a href="./adopt">Adopt</a></li>
|
|
24
|
+
<li><a href="./community">Community</a></li>
|
|
25
|
+
</ul>
|
|
26
|
+
</nav>
|
|
27
|
+
<div class="header-actions">
|
|
28
|
+
<a class="nav-donate" href="./donate">Donate</a>
|
|
29
|
+
</div>
|
|
30
|
+
<button aria-label="Open navigation" class="mobile-menu-toggle" type="button">
|
|
31
|
+
<span></span><span></span><span></span>
|
|
32
|
+
</button>
|
|
33
|
+
</div>
|
|
34
|
+
</header>
|
|
35
|
+
<div class="mobile-menu-panel" id="mobileMenuPanel">
|
|
36
|
+
<a href="/">Home</a>
|
|
37
|
+
<a href="./about">About</a>
|
|
38
|
+
<a href="./services">Foster</a>
|
|
39
|
+
<a href="./adopt">Adopt</a>
|
|
40
|
+
<a href="./community">Community</a>
|
|
41
|
+
<a class="mobile-donate" href="./donate">Donate</a>
|
|
42
|
+
</div>
|
|
43
|
+
<main>
|
|
44
|
+
<section class="hero-split" data-section-key="hero_main">
|
|
45
|
+
<div class="hero-media-bg">
|
|
46
|
+
<img alt="Every dog deserves someone in their corner." decoding="async" fetchpriority="high" loading="eager" src="/assets/generated/media-9bbd133220.webp"/>
|
|
47
|
+
<div class="hero-scrim"></div>
|
|
48
|
+
</div>
|
|
49
|
+
<div class="hero-body">
|
|
50
|
+
<div class="container">
|
|
51
|
+
<div class="hero-content">
|
|
52
|
+
<div class="hero-badge">North District Parish · Volunteer Powered</div>
|
|
53
|
+
<h1 class="hero-heading">Every dog deserves someone in their corner.</h1>
|
|
54
|
+
<p class="hero-sub">Violet Initiative funds critical care, opens transport pathways, and helps dogs at North District Parish Animal Services reach families waiting for them.</p>
|
|
55
|
+
<div class="hero-actions"><a class="hero-cta hero-cta-primary" href="./services"><span class="hero-cta-text"><span class="hero-cta-label">Apply to Foster</span></span></a><a class="hero-cta hero-cta-ghost" href="./donate"><span class="hero-cta-text"><span class="hero-cta-label">Support Our Mission</span></span></a></div>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
</section>
|
|
60
|
+
<section class="section" data-section-key="mission">
|
|
61
|
+
<div class="container">
|
|
62
|
+
<div class="section-text-image img-left">
|
|
63
|
+
<div class="img-col">
|
|
64
|
+
<img alt="We step in where the second chance starts." class="section-img" loading="lazy" src="/assets/generated/media-254b0e2ad3.webp"/>
|
|
65
|
+
</div>
|
|
66
|
+
<div class="text-col">
|
|
67
|
+
<p class="eyebrow">Our Mission</p><h2>We step in where the second chance starts.</h2><p>Violet Initiative exists to give dogs at North District Parish Animal Services the opportunity they may not get otherwise. As a 100% volunteer-based nonprofit, every dollar is directed toward helping animals who need care, transport, visibility, and a safe path forward.</p>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</section>
|
|
72
|
+
<section class="section" data-section-key="foster_grid"><div class="container"><div class="foster-header"><div><p class="eyebrow">Open Your Home</p><h2>Meet your familys next best friend.</h2><p>Fostering gives a dog safety, stability, and the time they need to be seen. It is one of the fastest ways to create space, save lives, and help a dog become ready for forever.</p></div><div class="foster-header-cta"><a class="btn btn-primary" href="./services">Apply to Foster</a></div></div><div class="foster-grid mt-md"><article class="foster-card foster-card--tall"><img alt="Open your home for a week" class="foster-img" loading="lazy" src="/assets/generated/media-3a78eb7d9d.webp"/><div class="foster-card-body"><h3>Open your home for a week</h3><p>Short-term fosters give dogs a break from the shelter — and give us time to find them the right forever home.</p></div></article><article class="foster-card"><img alt="Help a dog recover" class="foster-img" loading="lazy" src="/assets/generated/media-7a5fb7c91a.webp"/><div class="foster-card-body"><h3>Help a dog recover</h3><p>Some dogs arrive with medical needs. Foster carers who can follow a simple care routine save lives every time.</p></div></article><article class="foster-card"><img alt="Be part of the moment they find their family" class="foster-img" loading="lazy" src="/assets/generated/media-3a1b5c0a8d.webp"/><div class="foster-card-body"><h3>Be part of the moment they find their family</h3><p>Fosters are there for the transport day, the adoption call, the moment everything changes. It stays with you.</p></div></article></div></div></section>
|
|
73
|
+
<section class="section section-campaigns" data-section-key="campaigns"><div class="container"><p class="eyebrow">Featured Campaigns</p><h2>Two direct ways your gift saves lives.</h2><div class="campaign-grid mt-md"><article class="campaign-card"><div class="campaign-img-wrap"><img alt="Transport Fund" class="campaign-img" loading="lazy" src="/assets/generated/media-646c65381e.webp"/><div class="campaign-img-overlay"></div></div><div class="campaign-body"><h3 class="campaign-title">Transport Fund</h3><p class="campaign-text">Every transport gives a dog a shot at rescue. $40 covers a single dog ride to a partner rescue or approved adopter.</p><a class="btn btn-primary" href="./donate">Fund a Transport</a></div></article><article class="campaign-card"><div class="campaign-img-wrap"><img alt="Emergency Medical Fund" class="campaign-img" loading="lazy" src="/assets/generated/media-6342d50dbd.webp"/><div class="campaign-img-overlay"></div></div><div class="campaign-body"><h3 class="campaign-title">Emergency Medical Fund</h3><p class="campaign-text">Dogs arrive with injuries, illness, and untreated pain. Your gift goes directly to vet bills for animals in crisis.</p><a class="btn btn-primary" href="./donate">Support Medical Care</a></div></article></div></div></section>
|
|
74
|
+
<section class="section section-testimonial" data-section-key="testimonial">
|
|
75
|
+
<div class="container">
|
|
76
|
+
<p class="eyebrow">Real Impact</p>
|
|
77
|
+
<blockquote class="testimonial-quote">Companions gave me the chance to say yes - and to fight for her.</blockquote>
|
|
78
|
+
<p class="testimonial-attr">Brittany Ramsey, foster and board member</p>
|
|
79
|
+
</div>
|
|
80
|
+
</section>
|
|
81
|
+
<section class="section" data-section-key="crisis_care">
|
|
82
|
+
<div class="container">
|
|
83
|
+
<div class="section-text-image">
|
|
84
|
+
<div class="text-col">
|
|
85
|
+
<p class="eyebrow">From Crisis to Care</p><h2>Some dogs arrive with stories they cannot tell.</h2><p>Road rash, illness, neglect, and urgent medical needs can make a dog easy to overlook in an overcrowded shelter. Violet Initiative helps turn those moments into treatment, recovery, and a future.</p>
|
|
86
|
+
<div class="hero-actions mt-md"><a class="btn btn-primary" href="./donate">Help Fund Recovery</a></div>
|
|
87
|
+
</div>
|
|
88
|
+
<div class="img-col">
|
|
89
|
+
<img alt="Some dogs arrive with stories they cannot tell." class="section-img" loading="lazy" src="/assets/generated/media-cd07daa54a.webp"/>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
</section>
|
|
94
|
+
</main>
|
|
95
|
+
<footer class="site-footer">
|
|
96
|
+
<div class="container">
|
|
97
|
+
<div class="footer-grid">
|
|
98
|
+
<div class="footer-brand">
|
|
99
|
+
<img alt="Violet Initiative" src="/assets/generated/theme-mark.svg"/>
|
|
100
|
+
<p class="footer-tagline">A volunteer-run nonprofit helping dogs at North District Parish Animal Services receive medical care, transport support, and second chances.</p>
|
|
101
|
+
</div>
|
|
102
|
+
<div>
|
|
103
|
+
<p class="footer-col-label">Pages</p>
|
|
104
|
+
<ul class="footer-links">
|
|
105
|
+
<li><a href="/">Home</a></li>
|
|
106
|
+
<li><a href="./about">About</a></li>
|
|
107
|
+
<li><a href="./services">Foster</a></li>
|
|
108
|
+
<li><a href="./adopt">Adopt</a></li>
|
|
109
|
+
<li><a href="./community">Community</a></li>
|
|
110
|
+
<li><a href="./donate">Donate</a></li>
|
|
111
|
+
</ul>
|
|
112
|
+
</div>
|
|
113
|
+
<div>
|
|
114
|
+
<p class="footer-col-label">Organization</p>
|
|
115
|
+
<div class="footer-org-row">
|
|
116
|
+
<span><strong>Violet Initiative</strong></span>
|
|
117
|
+
<span>501(c)(3) Tax-Exempt</span>
|
|
118
|
+
<span>EIN: 88-4156327</span>
|
|
119
|
+
<span>North District Parish, Louisiana</span>
|
|
120
|
+
<span><a href="mailto:hello@violet.example">hello@violet.example</a></span>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
<div class="footer-dev">
|
|
124
|
+
<p class="footer-dev-label">Developed by</p>
|
|
125
|
+
<a href="https://inneranimalmedia.com" rel="noopener" target="_blank">
|
|
126
|
+
<img alt="Inner Animal Media" src="/assets/generated/media-b8f43a3887.webp"/>
|
|
127
|
+
</a>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
<div class="footer-bottom">
|
|
131
|
+
<p class="footer-ein">Violet Initiative · 501(c)(3) · EIN 88-4156327</p>
|
|
132
|
+
<div class="footer-socials">
|
|
133
|
+
<a href="#social" rel="noopener" target="_blank">Facebook</a>
|
|
134
|
+
<a href="#social" rel="noopener" target="_blank">Instagram</a>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</footer>
|
|
139
|
+
<script src="./global/cpas-shell.js"></script>
|
|
140
|
+
</body>
|
|
141
|
+
</html>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<style>
|
|
2
|
+
[data-cpas-section="campaigns"]{background:#ede8df}
|
|
3
|
+
[data-cpas-section="campaigns"] .about-camp-featured{display:grid;grid-template-columns:1fr 1.4fr;gap:2rem;align-items:center;margin-top:1.5rem;background:var(--light-card);border:1px solid var(--light-border);border-radius:20px;overflow:hidden;box-shadow:0 4px 32px rgba(0,0,0,0.08)}
|
|
4
|
+
[data-cpas-section="campaigns"] .about-camp-featured img{width:100%;height:100%;min-height:280px;object-fit:cover;display:block}
|
|
5
|
+
[data-cpas-section="campaigns"] .about-camp-body{padding:2rem 2rem 2rem 0}
|
|
6
|
+
[data-cpas-section="campaigns"] .about-camp-heading{font-family:var(--font-display);font-size:clamp(1.4rem,2.2vw,1.9rem);font-weight:700;color:var(--light-text);line-height:1.15;margin:0.4rem 0 0.85rem}
|
|
7
|
+
[data-cpas-section="campaigns"] .about-camp-meta{font-size:13px;color:var(--light-muted);margin-bottom:1rem}
|
|
8
|
+
@media(max-width:768px){[data-cpas-section="campaigns"] .about-camp-featured{grid-template-columns:1fr}[data-cpas-section="campaigns"] .about-camp-body{padding:1.5rem}}
|
|
9
|
+
</style>
|
|
10
|
+
<section class="section s-light" data-cpas-section="campaigns" data-section-key="campaigns">
|
|
11
|
+
<div class="container">
|
|
12
|
+
<div class="ey-purple">Featured Campaigns</div>
|
|
13
|
+
<div class="about-camp-featured">
|
|
14
|
+
<img src="/assets/generated/media-9e73307c2a.webp" alt="$10,000 lifesaving goal" loading="lazy" />
|
|
15
|
+
<div class="about-camp-body">
|
|
16
|
+
<h2 class="about-camp-heading">$10,000 lifesaving goal</h2>
|
|
17
|
+
<p class="about-camp-meta">$465 raised by 7 donors. Every gift fuels medical support, transport, and second chances.</p>
|
|
18
|
+
<p class="story-body">Every gift fuels medical support, transport, and second chances for dogs at North District Parish Animal Services.</p>
|
|
19
|
+
<div class="progress-bar" style="margin:1rem 0 0.35rem"><div class="progress-fill" style="width:5%"></div></div>
|
|
20
|
+
<p class="progress-label">$465 of $10,000 · 5%</p>
|
|
21
|
+
<a class="story-cta" href="./donate" style="margin-top:1.25rem">
|
|
22
|
+
Give now
|
|
23
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
|
|
24
|
+
</a>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</section>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<style>[data-cpas-section="cta"]{display:block}</style>
|
|
2
|
+
<section class="cta-band s-purple" data-cpas-section="cta" data-section-key="cta" id="cta">
|
|
3
|
+
<div class="container cta-band-inner">
|
|
4
|
+
<div class="cta-band-left">
|
|
5
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z"/></svg>
|
|
6
|
+
<div>
|
|
7
|
+
<p class="ey-white" style="margin-bottom:0.35rem">Give them a way out</p>
|
|
8
|
+
<p class="cta-band-heading">Help fund medical care, transport, and second chances.</p>
|
|
9
|
+
<p class="cta-band-sub">Your gift helps dogs at North District Parish Animal Services receive the treatment, visibility, and rescue pathways they need.</p>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="cta-band-right">
|
|
13
|
+
<div class="cta-action-row">
|
|
14
|
+
<a class="cta-action-btn" href="./adopt">
|
|
15
|
+
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"/></svg>
|
|
16
|
+
View Adoptable Dogs
|
|
17
|
+
</a>
|
|
18
|
+
<a class="cta-action-btn" href="./donate">
|
|
19
|
+
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z"/></svg>
|
|
20
|
+
Donate Now
|
|
21
|
+
</a>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</section>
|