@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,3980 @@
1
+ /* ============================================================
2
+ Violet Initiative — Global Stylesheet
3
+ PRIMETECH v2 | Clean rewrite — zero patch layers
4
+ ============================================================ */
5
+
6
+ @import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300;0,9..144,400;0,9..144,700;1,9..144,300;1,9..144,400&family=DM+Sans:opsz,wght@9..40,300;9..40,400;9..40,500;9..40,600&family=Playfair+Display:ital,wght@0,600;0,700;1,600&display=swap');
7
+
8
+ /* ── TOKENS ──────────────────────────────────────────────────── */
9
+ :root {
10
+ --font-display: 'Fraunces', Georgia, serif;
11
+ --font-body: 'DM Sans', system-ui, sans-serif;
12
+ --purple: #6b21e8;
13
+ --purple-mid: #7c3aed;
14
+ --purple-light: #9d6cf3;
15
+ --red-accent: #d62b2b;
16
+ --ease: cubic-bezier(0.16, 1, 0.3, 1);
17
+ --header-h: 88px;
18
+ --header-h-mob: 80px;
19
+ /* Fallback only — live size comes from brand tokens (!important) */
20
+ --header-logo: 88px;
21
+ --header-logo-mob: 80px;
22
+ /* Site layout law — gutters + max content width (donate/contact rhythm) */
23
+ --page-max: 1240px;
24
+ --page-gutter: clamp(20px, 4vw, 48px);
25
+ --container: var(--page-max);
26
+ --radius-sm: 10px;
27
+ --radius-md: 14px;
28
+ --radius-lg: 20px;
29
+ --radius-xl: 28px;
30
+ }
31
+
32
+ .theme-dark, [data-theme="dark"] {
33
+ --bg: #1a1025;
34
+ --bg-2: #221430;
35
+ --bg-glass: rgba(26, 16, 37, 0.84);
36
+ --surface: rgba(255, 255, 255, 0.055);
37
+ --surface-md: rgba(255, 255, 255, 0.09);
38
+ --border: rgba(255, 255, 255, 0.09);
39
+ --border-md: rgba(255, 255, 255, 0.16);
40
+ --text-1: #f4efe8;
41
+ --text-2: #b0a8be;
42
+ --text-3: #7c7290;
43
+ --btn-bg: var(--purple);
44
+ --btn-text: #fff;
45
+ --btn-ghost-border: rgba(255, 255, 255, 0.16);
46
+ --btn-ghost-text: #f4efe8;
47
+ --eyebrow-color: var(--purple-light);
48
+ --header-glass-bg: rgba(88, 28, 135, 0.28);
49
+ --header-glass-scrolled-bg: rgba(26, 16, 37, 0.92);
50
+ --header-glass-border: rgba(255, 255, 255, 0.10);
51
+ --header-glass-blur: 20px;
52
+ --header-glass-plum: rgba(124, 58, 237, 0.18);
53
+ }
54
+
55
+ .theme-light, [data-theme="light"],
56
+ .theme-plum-glass, [data-theme="plum_glass"] {
57
+ --bg: #faf8f4;
58
+ --bg-2: #f2ede4;
59
+ --bg-glass: rgba(250, 248, 244, 0.92);
60
+ --surface: rgba(107, 33, 168, 0.05);
61
+ --surface-md: rgba(107, 33, 168, 0.09);
62
+ --border: rgba(107, 33, 168, 0.10);
63
+ --border-md: rgba(107, 33, 168, 0.18);
64
+ --text-1: #1c1420;
65
+ --text-2: #5a4e6a;
66
+ --text-3: #a89fba;
67
+ --btn-bg: var(--purple);
68
+ --btn-text: #fff;
69
+ --btn-ghost-border: rgba(107, 33, 168, 0.22);
70
+ --btn-ghost-text: #1c1420;
71
+ --eyebrow-color: var(--purple);
72
+ --accent-red: #d62b2b;
73
+ --header-glass-bg: rgba(235, 225, 250, 0.62);
74
+ --header-glass-border: rgba(107, 33, 168, 0.22);
75
+ --header-glass-scrolled-bg: rgba(252, 248, 255, 0.90);
76
+ --header-glass-blur: 22px;
77
+ --header-glass-plum: rgba(107, 33, 168, 0.14);
78
+ --cta-magenta-start: #e879f9;
79
+ --cta-magenta-mid: #c026d3;
80
+ --cta-magenta-end: #9333ea;
81
+ }
82
+
83
+ .theme-plum-glass, [data-theme="plum_glass"] {
84
+ --header-glass-border: rgba(255, 255, 255, 0.12);
85
+ --header-glass-blur: 24px;
86
+ --header-glass-plum: rgba(232, 121, 249, 0.22);
87
+ /* Theme tokens — revert by switching page theme away from plum_glass or editing cms_themes */
88
+ --tg-header-top: rgba(58, 16, 72, 0.90);
89
+ --tg-header-bottom: rgba(44, 10, 56, 0.84);
90
+ --tg-header-scrolled-top: rgba(98, 32, 92, 0.93);
91
+ --tg-header-scrolled-bottom: rgba(130, 42, 118, 0.90);
92
+ --tg-nav-link: rgba(255, 255, 255, 0.74);
93
+ --tg-nav-active: #ffffff;
94
+ --tg-nav-underline: #e879f9;
95
+ --tg-cta-donate-start: rgba(192, 38, 211, 0.92);
96
+ --tg-cta-donate-end: rgba(107, 33, 168, 0.88);
97
+ --tg-cta-donate-shadow: rgba(107, 33, 168, 0.35);
98
+ --tg-hero-cta-primary-start: #6f2270;
99
+ --tg-hero-cta-primary-end: #4e1a52;
100
+ --tg-hero-cta-primary-shadow: rgba(78, 26, 82, 0.32);
101
+ --tg-coc-cream: #fdf1e3;
102
+ --tg-coc-cream-warm: #f9e3cf;
103
+ --tg-coc-peach: #f4cdb4;
104
+ --tg-coc-blush: #f2b8c0;
105
+ --tg-coc-rose: #e98da8;
106
+ --tg-coc-pink: #dd5f9b;
107
+ --tg-coc-magenta: #c23689;
108
+ --tg-coc-purple: #8e3a7d;
109
+ --tg-coc-purple-deep: #6f2270;
110
+ --tg-coc-plum: #4e1a52;
111
+ --tg-coc-ink: #2e102f;
112
+ --header-glass-bg: linear-gradient(180deg, var(--tg-header-top) 0%, var(--tg-header-bottom) 100%);
113
+ --header-glass-scrolled-bg: linear-gradient(180deg, var(--tg-header-scrolled-top) 0%, var(--tg-header-scrolled-bottom) 100%);
114
+ }
115
+
116
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
117
+ html { scroll-behavior: smooth; }
118
+ img { display: block; max-width: 100%; }
119
+ a { color: inherit; text-decoration: none; }
120
+
121
+ body {
122
+ background: var(--bg);
123
+ color: var(--text-1);
124
+ font-family: var(--font-body);
125
+ font-size: 16px;
126
+ line-height: 1.6;
127
+ font-weight: 300;
128
+ -webkit-font-smoothing: antialiased;
129
+ padding-top: var(--header-h);
130
+ transition: background 0.3s var(--ease), color 0.3s var(--ease);
131
+ }
132
+
133
+ body.theme-light {
134
+ padding-top: calc(var(--header-h) + 14px);
135
+ }
136
+
137
+ body.theme-plum-glass {
138
+ padding-top: var(--header-h);
139
+ }
140
+
141
+ body.menu-open { overflow: hidden; }
142
+
143
+ h1, h2, h3, h4 {
144
+ font-family: var(--font-display);
145
+ font-weight: 700;
146
+ line-height: 1.08;
147
+ letter-spacing: -0.025em;
148
+ color: var(--text-1);
149
+ text-wrap: balance;
150
+ }
151
+
152
+ h1 { font-size: clamp(2.8rem, 7vw, 5.5rem); }
153
+ h2 { font-size: clamp(2rem, 4.5vw, 3.5rem); }
154
+ h3 { font-size: clamp(1.2rem, 2.5vw, 1.65rem); }
155
+ p { text-wrap: pretty; }
156
+
157
+ .eyebrow {
158
+ font-family: var(--font-body);
159
+ font-size: 11px;
160
+ font-weight: 600;
161
+ letter-spacing: 0.13em;
162
+ text-transform: uppercase;
163
+ color: var(--eyebrow-color);
164
+ margin-bottom: 0.9rem;
165
+ }
166
+
167
+ .container {
168
+ width: min(var(--page-max), calc(100% - (var(--page-gutter) * 2)));
169
+ margin-inline: auto;
170
+ }
171
+
172
+ .section { padding-block: clamp(72px, 8vw, 120px); position: relative; z-index: 2; }
173
+ .site-main { isolation: isolate; }
174
+
175
+ .btn {
176
+ display: inline-flex;
177
+ align-items: center;
178
+ justify-content: center;
179
+ gap: 8px;
180
+ padding: 0.7rem 1.6rem;
181
+ border-radius: var(--radius-md);
182
+ font-family: var(--font-body);
183
+ font-size: 14px;
184
+ font-weight: 600;
185
+ letter-spacing: 0.01em;
186
+ cursor: pointer;
187
+ border: none;
188
+ white-space: nowrap;
189
+ transition: transform 180ms var(--ease), box-shadow 180ms var(--ease), opacity 180ms;
190
+ }
191
+ .btn:hover { transform: translateY(-1px); }
192
+ .btn:active { transform: translateY(0); }
193
+
194
+ .btn-primary {
195
+ background: linear-gradient(135deg, rgba(160, 104, 255, 0.92), rgba(109, 58, 220, 0.84));
196
+ color: #fff;
197
+ border: 1px solid rgba(255, 255, 255, 0.18);
198
+ box-shadow: 0 12px 28px rgba(124, 58, 237, 0.28), inset 0 1px 0 rgba(255,255,255,0.2);
199
+ backdrop-filter: blur(12px);
200
+ -webkit-backdrop-filter: blur(12px);
201
+ }
202
+ .btn-primary:hover {
203
+ box-shadow: 0 18px 40px rgba(124, 58, 237, 0.38), inset 0 1px 0 rgba(255,255,255,0.26);
204
+ }
205
+
206
+ .btn-ghost {
207
+ background: var(--surface);
208
+ color: var(--btn-ghost-text);
209
+ border: 1px solid var(--btn-ghost-border);
210
+ backdrop-filter: blur(8px);
211
+ -webkit-backdrop-filter: blur(8px);
212
+ }
213
+ .btn-ghost:hover { background: var(--surface-md); }
214
+
215
+ /* ── SITE HEADER ─────────────────────────────────────────────── */
216
+ .site-header {
217
+ position: fixed;
218
+ top: 0; left: 0; right: 0;
219
+ z-index: 500;
220
+ height: var(--header-h);
221
+ overflow: visible;
222
+ background: var(--header-glass-bg, rgba(88, 28, 135, 0.22));
223
+ border-bottom: 1px solid var(--header-glass-border, rgba(107, 33, 232, 0.14));
224
+ backdrop-filter: blur(var(--header-glass-blur, 18px)) saturate(150%);
225
+ -webkit-backdrop-filter: blur(var(--header-glass-blur, 18px)) saturate(150%);
226
+ box-shadow: 0 1px 0 var(--header-glass-plum, rgba(107, 33, 168, 0.08)), inset 0 1px 0 rgba(255, 255, 255, 0.42);
227
+ transform: translateY(0);
228
+ transition: transform 320ms cubic-bezier(0.4, 0, 0.2, 1),
229
+ background 280ms var(--ease),
230
+ border-color 280ms var(--ease),
231
+ backdrop-filter 280ms var(--ease),
232
+ box-shadow 280ms var(--ease);
233
+ }
234
+
235
+ .site-header.scrolled {
236
+ background: var(--header-glass-scrolled-bg, var(--bg-glass));
237
+ border-bottom: 1px solid var(--header-glass-border, var(--border));
238
+ backdrop-filter: blur(24px) saturate(165%);
239
+ -webkit-backdrop-filter: blur(24px) saturate(165%);
240
+ box-shadow: 0 10px 32px rgba(88, 28, 135, 0.10), inset 0 1px 0 rgba(255, 255, 255, 0.55);
241
+ }
242
+
243
+ .site-header.header-hidden { transform: translateY(-100%); }
244
+
245
+ .header-inner {
246
+ height: var(--header-h);
247
+ display: flex;
248
+ align-items: center;
249
+ justify-content: space-between;
250
+ gap: 16px;
251
+ overflow: visible;
252
+ }
253
+
254
+ .logo-link {
255
+ justify-self: start;
256
+ display: inline-flex;
257
+ align-items: center;
258
+ align-self: stretch;
259
+ flex-shrink: 0;
260
+ height: 100%;
261
+ overflow: visible;
262
+ }
263
+ .logo-link img,
264
+ .header-logo-img {
265
+ display: block;
266
+ height: var(--header-logo);
267
+ width: auto;
268
+ max-width: none;
269
+ margin-block: 0;
270
+ object-fit: contain;
271
+ object-position: left center;
272
+ }
273
+
274
+ .site-nav {
275
+ display: flex;
276
+ margin-left: auto;
277
+ align-items: center;
278
+ gap: 2px;
279
+ list-style: none;
280
+ padding: 4px;
281
+ border-radius: 14px;
282
+ background: transparent;
283
+ border: none;
284
+ }
285
+ .site-nav a {
286
+ position: relative;
287
+ display: inline-flex;
288
+ align-items: center;
289
+ min-height: 36px;
290
+ padding: 0 14px 6px;
291
+ border-radius: 0;
292
+ font-size: 14px;
293
+ font-weight: 500;
294
+ color: rgba(255, 255, 255, 0.72);
295
+ background: transparent;
296
+ transition: color 180ms var(--ease);
297
+ }
298
+ .site-nav a:hover {
299
+ color: #fff;
300
+ background: transparent;
301
+ }
302
+ .site-nav a.active {
303
+ color: #fff;
304
+ font-weight: 600;
305
+ background: transparent;
306
+ box-shadow: none;
307
+ }
308
+ .site-nav a.active::after {
309
+ content: "";
310
+ position: absolute;
311
+ left: 12px;
312
+ right: 12px;
313
+ bottom: 2px;
314
+ height: 2px;
315
+ border-radius: 999px;
316
+ background: linear-gradient(90deg, transparent, rgba(255,255,255,0.92) 18%, rgba(255,255,255,0.92) 82%, transparent);
317
+ }
318
+ .site-nav a.active::before {
319
+ content: "";
320
+ position: absolute;
321
+ left: 50%;
322
+ bottom: 1px;
323
+ width: 4px;
324
+ height: 4px;
325
+ margin-left: -2px;
326
+ border-radius: 50%;
327
+ background: rgba(255,255,255,0.95);
328
+ }
329
+
330
+ /* More dropdown — children from cms_pages.nav_visible (desktop) */
331
+ .site-nav .nav-more {
332
+ position: relative;
333
+ list-style: none;
334
+ }
335
+ .site-nav .nav-more-toggle {
336
+ position: relative;
337
+ display: inline-flex;
338
+ align-items: center;
339
+ gap: 6px;
340
+ min-height: 36px;
341
+ padding: 0 14px 6px;
342
+ border: 0;
343
+ background: transparent;
344
+ font: inherit;
345
+ font-size: 14px;
346
+ font-weight: 500;
347
+ color: rgba(255, 255, 255, 0.72);
348
+ cursor: pointer;
349
+ transition: color 180ms var(--ease);
350
+ }
351
+ .site-nav .nav-more-toggle::after {
352
+ content: "";
353
+ width: 0;
354
+ height: 0;
355
+ border-left: 4px solid transparent;
356
+ border-right: 4px solid transparent;
357
+ border-top: 5px solid currentColor;
358
+ opacity: 0.75;
359
+ margin-top: 2px;
360
+ }
361
+ .site-nav .nav-more-toggle:hover,
362
+ .site-nav .nav-more.is-open .nav-more-toggle,
363
+ .site-nav .nav-more:focus-within .nav-more-toggle {
364
+ color: #fff;
365
+ }
366
+ .site-nav .nav-more-menu {
367
+ position: absolute;
368
+ top: calc(100% - 2px);
369
+ left: 50%;
370
+ transform: translateX(-50%);
371
+ min-width: 180px;
372
+ margin: 0;
373
+ padding: 8px;
374
+ list-style: none;
375
+ border-radius: 14px;
376
+ background: rgba(46, 16, 80, 0.96);
377
+ border: 1px solid rgba(255, 255, 255, 0.12);
378
+ box-shadow: 0 18px 48px rgba(28, 10, 48, 0.45);
379
+ opacity: 0;
380
+ visibility: hidden;
381
+ pointer-events: none;
382
+ transition: opacity 140ms var(--ease), visibility 140ms var(--ease);
383
+ z-index: 560;
384
+ }
385
+ .site-nav .nav-more:hover .nav-more-menu,
386
+ .site-nav .nav-more:focus-within .nav-more-menu,
387
+ .site-nav .nav-more.is-open .nav-more-menu {
388
+ opacity: 1;
389
+ visibility: visible;
390
+ pointer-events: auto;
391
+ }
392
+ .site-nav .nav-more-menu a {
393
+ display: flex;
394
+ width: 100%;
395
+ min-height: 40px;
396
+ padding: 0 12px;
397
+ border-radius: 10px;
398
+ color: rgba(255, 255, 255, 0.82);
399
+ white-space: nowrap;
400
+ }
401
+ .site-nav .nav-more-menu a:hover,
402
+ .site-nav .nav-more-menu a:focus-visible {
403
+ color: #fff;
404
+ background: rgba(255, 255, 255, 0.1);
405
+ }
406
+ .site-nav .nav-more-menu a.active::after,
407
+ .site-nav .nav-more-menu a.active::before {
408
+ display: none;
409
+ }
410
+ .theme-light .site-header .nav-more-toggle { color: rgba(28, 20, 32, 0.72); }
411
+ .theme-light .site-header .nav-more-toggle:hover,
412
+ .theme-light .site-header .nav-more.is-open .nav-more-toggle { color: var(--text-1); }
413
+ .theme-light .site-header .nav-more-menu {
414
+ background: #fff;
415
+ border-color: var(--border);
416
+ box-shadow: 0 18px 40px rgba(28, 20, 32, 0.12);
417
+ }
418
+ .theme-light .site-header .nav-more-menu a { color: var(--text-2); }
419
+ .theme-light .site-header .nav-more-menu a:hover {
420
+ color: var(--text-1);
421
+ background: rgba(124, 58, 237, 0.08);
422
+ }
423
+
424
+ .header-actions {
425
+ justify-self: end;
426
+ display: flex;
427
+ align-items: center;
428
+ gap: 10px;
429
+ }
430
+
431
+ .header-actions .btn-primary {
432
+ min-height: 40px;
433
+ padding: 0 1.15rem;
434
+ font-size: 13px;
435
+ font-weight: 600;
436
+ /* Prefer rounded-rect over pill — matches theme-dark / fosters Donate CTA */
437
+ border-radius: 12px;
438
+ }
439
+
440
+ /* Legacy alias — same shape as btn-primary (rounded rect, purple glass) */
441
+ .nav-donate {
442
+ display: inline-flex;
443
+ align-items: center;
444
+ justify-content: center;
445
+ gap: 6px;
446
+ min-height: 38px;
447
+ padding: 0 18px;
448
+ font-size: 13px;
449
+ border-radius: var(--radius-md);
450
+ background: linear-gradient(135deg, rgba(160, 104, 255, 0.92), rgba(109, 58, 220, 0.84));
451
+ color: #fff !important;
452
+ border: 1px solid rgba(255, 255, 255, 0.18);
453
+ box-shadow: 0 12px 28px rgba(124, 58, 237, 0.28), inset 0 1px 0 rgba(255, 255, 255, 0.2);
454
+ font-weight: 600;
455
+ transition: transform 180ms var(--ease), box-shadow 180ms var(--ease);
456
+ }
457
+ .nav-donate:hover {
458
+ transform: translateY(-1px);
459
+ box-shadow: 0 18px 40px rgba(124, 58, 237, 0.38), inset 0 1px 0 rgba(255, 255, 255, 0.26);
460
+ }
461
+
462
+ /* ── HAMBURGER ───────────────────────────────────────────────── */
463
+ .mobile-menu-toggle {
464
+ display: none;
465
+ width: 44px;
466
+ height: 44px;
467
+ align-items: center;
468
+ justify-content: center;
469
+ border-radius: var(--radius-sm);
470
+ border: 1px solid rgba(255,255,255,0.12);
471
+ background: rgba(255,255,255,0.06);
472
+ color: #fff;
473
+ cursor: pointer;
474
+ backdrop-filter: blur(12px);
475
+ -webkit-backdrop-filter: blur(12px);
476
+ transition: background 180ms, border-color 180ms;
477
+ flex-shrink: 0;
478
+ position: relative;
479
+ z-index: 1;
480
+ }
481
+ .mobile-menu-toggle:hover {
482
+ background: rgba(255,255,255,0.1);
483
+ border-color: rgba(255,255,255,0.2);
484
+ }
485
+
486
+ /* When open: escape header stacking context, pin fixed to top-right */
487
+ .mobile-menu-toggle.is-open {
488
+ position: fixed;
489
+ top: 12px;
490
+ right: 12px;
491
+ z-index: 600;
492
+ background: rgba(124,58,237,0.28);
493
+ border-color: rgba(124,58,237,0.5);
494
+ color: #fff;
495
+ }
496
+
497
+ /* ── HAMBURGER LINES → X animation ──────────────────────────── */
498
+ .mobile-menu-toggle span {
499
+ position: absolute;
500
+ left: 50%;
501
+ width: 20px;
502
+ height: 2px;
503
+ border-radius: 2px;
504
+ background: currentColor;
505
+ transition: transform 280ms cubic-bezier(0.4,0,0.2,1),
506
+ opacity 200ms,
507
+ width 280ms cubic-bezier(0.4,0,0.2,1);
508
+ transform-origin: center;
509
+ }
510
+ .mobile-menu-toggle span:nth-child(1) { transform: translate(-50%, -7px); }
511
+ .mobile-menu-toggle span:nth-child(2) { transform: translate(-50%, 0); }
512
+ .mobile-menu-toggle span:nth-child(3) { transform: translate(-50%, 7px); }
513
+ .mobile-menu-toggle.is-open span:nth-child(1) { transform: translate(-50%, 0) rotate(45deg); }
514
+ .mobile-menu-toggle.is-open span:nth-child(2) { opacity: 0; width: 0; }
515
+ .mobile-menu-toggle.is-open span:nth-child(3) { transform: translate(-50%, 0) rotate(-45deg); }
516
+
517
+ /* ── MOBILE NAV OVERLAY ──────────────────────────────────────── */
518
+ .nav-overlay {
519
+ position: fixed;
520
+ inset: 0;
521
+ z-index: 490;
522
+ background: rgba(5, 8, 18, 0.6);
523
+ backdrop-filter: blur(4px);
524
+ -webkit-backdrop-filter: blur(4px);
525
+ opacity: 0;
526
+ pointer-events: none;
527
+ transition: opacity 260ms var(--ease);
528
+ }
529
+ .nav-overlay.is-open { opacity: 1; pointer-events: auto; }
530
+
531
+ /* ── NAV DRAWER ──────────────────────────────────────────────── */
532
+ .nav-drawer {
533
+ position: fixed;
534
+ top: 0; right: 0; bottom: 0;
535
+ z-index: 510;
536
+ width: min(86vw, 360px);
537
+ display: flex;
538
+ flex-direction: column;
539
+ background: rgba(22, 12, 36, 0.95);
540
+ border-left: 1px solid rgba(255,255,255,0.08);
541
+ box-shadow: -32px 0 80px rgba(0,0,0,0.6);
542
+ backdrop-filter: blur(32px) saturate(160%);
543
+ -webkit-backdrop-filter: blur(32px) saturate(160%);
544
+ transform: translateX(100%);
545
+ transition: transform 300ms cubic-bezier(0.4,0,0.2,1);
546
+ }
547
+ .nav-drawer.is-open { transform: translateX(0); }
548
+
549
+ .nav-drawer-header {
550
+ display: flex;
551
+ align-items: center;
552
+ justify-content: space-between;
553
+ /* right padding clears the fixed X button (44px + 12px offset + 8px gap) */
554
+ padding: 14px 68px 14px 20px;
555
+ border-bottom: 1px solid rgba(255,255,255,0.06);
556
+ min-height: 68px;
557
+ }
558
+ .drawer-logo { height: 36px; width: auto; object-fit: contain; }
559
+
560
+ /* hide in-drawer close — hamburger IS the X now */
561
+ .mobile-nav-close { display: none; }
562
+
563
+ .nav-drawer-links {
564
+ display: flex;
565
+ flex-direction: column;
566
+ padding: 12px;
567
+ gap: 2px;
568
+ flex: 1;
569
+ }
570
+ .nav-drawer-links .drawer-link {
571
+ display: flex;
572
+ align-items: center;
573
+ min-height: 52px;
574
+ padding: 0 16px;
575
+ border-radius: 12px;
576
+ color: rgba(255,255,255,0.72);
577
+ font-size: 16px;
578
+ font-weight: 500;
579
+ letter-spacing: -0.01em;
580
+ text-decoration: none;
581
+ position: relative;
582
+ transition: background 160ms, color 160ms;
583
+ }
584
+ .nav-drawer-links .drawer-link:hover { background: rgba(255,255,255,0.06); color: #fff; }
585
+ .nav-drawer-links .drawer-link.is-active { background: rgba(124,58,237,0.12); color: #fff; font-weight: 600; }
586
+ .nav-drawer-links .drawer-link.is-active::after {
587
+ content: '';
588
+ position: absolute;
589
+ bottom: 8px; left: 16px; right: 16px;
590
+ height: 2px;
591
+ border-radius: 2px;
592
+ background: linear-gradient(90deg, var(--purple-mid), transparent);
593
+ }
594
+ .nav-drawer-links .drawer-link[href="./donate"] {
595
+ margin-top: 8px;
596
+ justify-content: center;
597
+ background: linear-gradient(135deg, rgba(124,58,237,0.7), rgba(109,52,214,0.6));
598
+ border: 1px solid rgba(255,255,255,0.14);
599
+ color: #fff;
600
+ font-weight: 600;
601
+ }
602
+ .nav-drawer-links .drawer-link[href="./donate"]:hover {
603
+ background: linear-gradient(135deg, rgba(139,72,255,0.85), rgba(124,58,237,0.75));
604
+ box-shadow: 0 8px 24px rgba(124,58,237,0.35);
605
+ }
606
+ .nav-drawer-links .drawer-link[href="./donate"].is-active::after { display: none; }
607
+
608
+ /* ── FOOTER ──────────────────────────────────────────────────── */
609
+ .site-footer {
610
+ position: relative;
611
+ overflow: hidden;
612
+ padding: 72px 22px 32px;
613
+ background:
614
+ radial-gradient(circle at 15% 0%, rgba(160,40,120,0.18), transparent 40%),
615
+ radial-gradient(circle at 85% 30%, rgba(214,43,43,0.06), transparent 44%),
616
+ linear-gradient(180deg, #3a1048 0%, #2c0a38 100%);
617
+ color: rgba(255, 255, 255, 0.78);
618
+ border-top: 1px solid rgba(255, 255, 255, 0.10);
619
+ }
620
+ .footer-glow {
621
+ position: absolute;
622
+ inset: auto 0 0 0;
623
+ height: 200px;
624
+ pointer-events: none;
625
+ background:
626
+ radial-gradient(80% 60% at 20% 100%, rgba(130,42,118,0.35), transparent 60%),
627
+ radial-gradient(80% 60% at 80% 100%, rgba(98,32,92,0.22), transparent 62%);
628
+ filter: blur(16px);
629
+ transform: translateY(30%);
630
+ animation: footerGlow 18s ease-in-out infinite alternate;
631
+ }
632
+ @keyframes footerGlow {
633
+ from { transform: translate(-2%, 30%) scale(1); }
634
+ to { transform: translate( 2%, 26%) scale(1.04); }
635
+ }
636
+ .footer-inner {
637
+ position: relative;
638
+ z-index: 1;
639
+ max-width: 1180px;
640
+ margin: auto;
641
+ padding: 36px 32px 28px;
642
+ border-radius: var(--radius-xl);
643
+ background: rgba(255, 255, 255, 0.035);
644
+ border: 1px solid rgba(255, 255, 255, 0.08);
645
+ box-shadow: 0 20px 70px rgba(0, 0, 0, 0.3);
646
+ backdrop-filter: blur(16px);
647
+ }
648
+ .footer-grid {
649
+ display: grid;
650
+ grid-template-columns: 1.5fr 1fr 1fr 0.8fr;
651
+ gap: 28px;
652
+ padding-bottom: 28px;
653
+ border-bottom: 1px solid rgba(255, 255, 255, 0.07);
654
+ margin-bottom: 24px;
655
+ }
656
+ .footer-logo { width: 80px; height: 80px; object-fit: contain; filter: drop-shadow(0 14px 28px rgba(124,58,237,0.3)); margin-bottom: 14px; } /* legacy — unused */
657
+ .footer-brand p { font-size: 13px; line-height: 1.7; color: rgba(255,255,255,0.56); max-width: 280px; }
658
+ .footer-col h4 { font-family: var(--font-body); font-size: 11px; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: rgba(255,255,255,0.38); margin-bottom: 14px; }
659
+ .footer-col a, .footer-col p, .footer-col span { display: block; font-size: 13px; color: rgba(255,255,255,0.62); margin-bottom: 8px; line-height: 1.55; transition: color 180ms; }
660
+ .footer-col a:hover { color: var(--purple-light); }
661
+ .footer-bottom { display: flex; align-items: center; justify-content: space-between; gap: 16px; font-size: 13px; color: rgba(255,255,255,0.38); }
662
+ .footer-bottom strong { color: var(--purple-light); }
663
+ .footer-socials { display: flex; gap: 16px; }
664
+ .footer-socials a { font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase; color: rgba(255,255,255,0.38); transition: color 180ms; }
665
+ .footer-socials a:hover { color: rgba(255,255,255,0.7); }
666
+
667
+ /* ── HERO ────────────────────────────────────────────────────── */
668
+ .section-hero { min-height: 88vh; display: flex; align-items: center; position: relative; overflow: visible; padding-bottom: clamp(60px, 6vw, 100px); }
669
+ .hero-content { position: relative; z-index: 2; max-width: 660px; }
670
+ .hero-img-col { position: relative; z-index: 2; }
671
+ .hero-badge { display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; border: 1px solid var(--border-md); border-radius: var(--radius-sm); font-size: 12px; font-weight: 500; color: var(--text-2); margin-bottom: 1.5rem; background: var(--surface); backdrop-filter: blur(8px); }
672
+ .hero-actions { display: flex; gap: 12px; margin-top: 2rem; flex-wrap: wrap; }
673
+ .hero-actions .btn { min-height: 48px; padding: 0 22px; font-size: 15px; }
674
+ .section-hero .container { display: grid; grid-template-columns: 1fr minmax(320px, 0.7fr); align-items: center; gap: clamp(32px, 5vw, 80px); }
675
+ .section-hero img { width: 100%; border-radius: var(--radius-xl); border: 1px solid var(--border-md); box-shadow: 0 32px 80px rgba(0,0,0,0.35); object-fit: cover; max-height: 560px; }
676
+
677
+ .hero-blend-out {
678
+ position: absolute;
679
+ bottom: 0; left: 0; right: 0;
680
+ height: 160px;
681
+ pointer-events: none;
682
+ background: linear-gradient(to bottom, transparent 0%, color-mix(in srgb, var(--bg) 12%, transparent) 40%, color-mix(in srgb, var(--bg) 70%, transparent) 75%, var(--bg) 100%);
683
+ z-index: 1;
684
+ }
685
+
686
+ /* ── CARDS ───────────────────────────────────────────────────── */
687
+ .card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; transition: transform 0.28s var(--ease), border-color 0.28s, box-shadow 0.28s; }
688
+ .card:hover { transform: translateY(-4px); border-color: rgba(124, 58, 237, 0.28); box-shadow: 0 20px 50px rgba(0,0,0,0.2); }
689
+ .card-img { width: 100%; aspect-ratio: 4/3; object-fit: cover; }
690
+ .card-body { padding: 1.25rem 1.5rem 1.5rem; }
691
+ .card-title { font-family: var(--font-display); font-size: 1.1rem; font-weight: 600; color: var(--text-1); margin-bottom: 0.5rem; }
692
+ .card-text { font-size: 13px; color: var(--text-2); margin-bottom: 1rem; }
693
+
694
+ /* ── SECTION LAYOUTS ─────────────────────────────────────────── */
695
+ .section-text-image { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(2.5rem, 5vw, 5rem); align-items: center; }
696
+ .img-col img { border-radius: var(--radius-xl); width: 100%; object-fit: cover; aspect-ratio: 4/5; border: 1px solid var(--border); box-shadow: 0 24px 64px rgba(0,0,0,0.25); }
697
+ .card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1.5rem; }
698
+ .section-cta { text-align: center; padding-block: 7rem; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
699
+ .section-testimonial { text-align: center; padding-block: 6rem; }
700
+ .testimonial-quote { font-family: var(--font-display); font-style: italic; font-size: clamp(1.35rem, 3vw, 1.9rem); font-weight: 300; color: var(--text-1); max-width: 680px; margin: 0 auto 1.25rem; line-height: 1.5; }
701
+ .testimonial-attr { font-size: 13px; color: var(--text-3); letter-spacing: 0.06em; }
702
+ .section-faq { max-width: 720px; margin: 0 auto; }
703
+ .faq-item { border-bottom: 1px solid var(--border); padding: 1.5rem 0; }
704
+ .faq-q { font-weight: 500; color: var(--text-1); margin-bottom: 0.5rem; font-size: 15px; }
705
+ .faq-a { font-size: 14px; color: var(--text-2); line-height: 1.7; }
706
+
707
+ /* ── ANIMAL GRID ─────────────────────────────────────────────── */
708
+ #animalGrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 1.5rem; }
709
+ .animal-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; transition: transform 0.28s var(--ease); }
710
+ .animal-card:hover { transform: translateY(-4px); }
711
+ .animal-card img { width: 100%; aspect-ratio: 1; object-fit: cover; }
712
+ .animal-card-body { padding: 1rem 1.25rem 1.25rem; display: flex; align-items: center; justify-content: space-between; }
713
+ .animal-name { font-weight: 500; font-size: 15px; color: var(--text-1); }
714
+
715
+ /* ── UTILITY ─────────────────────────────────────────────────── */
716
+ .text-muted { color: var(--text-2); }
717
+ .text-center { text-align: center; }
718
+ .mt-sm { margin-top: 1rem; }
719
+ .mt-md { margin-top: 2rem; }
720
+ .mt-lg { margin-top: 3rem; }
721
+ .mb-sm { margin-bottom: 1rem; }
722
+ .mb-md { margin-bottom: 2rem; }
723
+
724
+ /* ── RESPONSIVE — TABLET ─────────────────────────────────────── */
725
+ @media (max-width: 900px) {
726
+ .section-text-image { grid-template-columns: 1fr; gap: 2.5rem; }
727
+ .footer-grid { grid-template-columns: 1fr 1fr; gap: 24px; }
728
+ }
729
+
730
+ /* ── RESPONSIVE — MOBILE ─────────────────────────────────────── */
731
+ @media (max-width: 760px) {
732
+ :root { --header-h: var(--header-h-mob); }
733
+ body { padding-top: var(--header-h-mob); }
734
+ body.theme-light,
735
+ body.theme-plum-glass { padding-top: var(--header-h-mob); }
736
+ .container { width: min(var(--page-max), calc(100% - (var(--page-gutter) * 2))); }
737
+ .logo-link img,
738
+ .header-logo-img {
739
+ height: var(--header-logo-mob);
740
+ width: auto;
741
+ margin-block: 0;
742
+ }
743
+ .section { padding-block: clamp(56px, 12vw, 88px); }
744
+ .site-nav, .header-actions { display: none; }
745
+ .mobile-menu-toggle { display: inline-flex; }
746
+ .section-hero { min-height: auto; }
747
+ .section-hero .container { grid-template-columns: 1fr; gap: 2rem; }
748
+ .section-hero img { max-height: 300px; border-radius: var(--radius-lg); }
749
+ .hero-actions { flex-direction: column; gap: 10px; }
750
+ .hero-actions .btn { width: 100%; min-height: 52px; }
751
+ .footer-grid { grid-template-columns: 1fr; }
752
+ .footer-inner { padding: 24px 18px; }
753
+ .footer-bottom { flex-direction: column; align-items: flex-start; }
754
+ }
755
+
756
+ @media (prefers-reduced-motion: reduce) {
757
+ *, *::before, *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; }
758
+ .footer-glow { animation: none; }
759
+ }
760
+
761
+ /* ═══════════════════════════════════════════════════════════════
762
+ CPAS ADDITIONS v2
763
+ ═══════════════════════════════════════════════════════════════ */
764
+
765
+ .section-hero .container { display: grid !important; grid-template-columns: 1fr minmax(380px, 0.82fr); align-items: center; gap: clamp(40px, 5vw, 80px); }
766
+ .hero-content { max-width: none; }
767
+ .hero-img-col { display: flex; align-items: center; justify-content: center; }
768
+ .hero-img {
769
+ width: 100%;
770
+ max-height: 600px;
771
+ min-height: 420px;
772
+ object-fit: cover;
773
+ object-position: center 25%;
774
+ border-radius: var(--radius-xl);
775
+ border: 1px solid var(--border-md);
776
+ box-shadow: 0 4px 8px rgba(0,0,0,0.08), 0 20px 50px rgba(0,0,0,0.22), 0 0 0 1px rgba(0,0,0,0.04);
777
+ transform: rotate(1.2deg);
778
+ transition: transform 0.4s var(--ease);
779
+ }
780
+ .theme-dark .hero-img {
781
+ border-color: rgba(255,255,255,0.10);
782
+ box-shadow: 0 4px 8px rgba(0,0,0,0.12), 0 20px 50px rgba(0,0,0,0.40), 0 0 0 1px rgba(255,255,255,0.04);
783
+ }
784
+ .hero-img-col:hover .hero-img { transform: rotate(0.4deg) scale(1.01); }
785
+ .section-hero img.hero-img { max-height: 680px; }
786
+ .section-hero h1 { font-family: var(--font-body); font-weight: 700; font-size: clamp(3.2rem, 7vw, 5.6rem); line-height: 1.0; letter-spacing: -0.035em; }
787
+ .text-col { display: flex; flex-direction: column; justify-content: center; gap: 1rem; }
788
+ .text-col p { color: var(--text-2); font-size: 17px; line-height: 1.7; }
789
+ .img-col { display: flex; align-items: center; }
790
+ .section-img { width: 100%; max-height: 540px; object-fit: cover; border-radius: var(--radius-xl); border: 1px solid var(--border); box-shadow: 0 24px 64px rgba(0,0,0,0.22); display: block; }
791
+ .section-text-image.img-left .img-col { order: -1; }
792
+
793
+ [data-section-key="mission"] { background: #f5f1e8; --text-1: #1a1622; --text-2: #4b4453; --border: rgba(23,32,51,0.09); --eyebrow-color: var(--purple); }
794
+ [data-section-key="mission"] .eyebrow { color: var(--purple); }
795
+ [data-section-key="mission"] h2 { color: #1a1622; }
796
+ [data-section-key="mission"] p { color: #4b4453; }
797
+ [data-section-key="mission"] .section-img { border-color: rgba(23,32,51,0.12); box-shadow: 0 20px 50px rgba(0,0,0,0.1); }
798
+
799
+ .foster-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 2rem; flex-wrap: wrap; }
800
+ .foster-header-cta { flex-shrink: 0; }
801
+ .foster-grid { display: grid; grid-template-columns: 1.1fr 1fr 1fr; gap: 1.25rem; align-items: start; }
802
+ .foster-card { border-radius: var(--radius-lg); overflow: hidden; background: var(--surface); border: 1px solid var(--border); transition: transform 0.28s var(--ease), box-shadow 0.28s; }
803
+ .foster-card:hover { transform: translateY(-4px); box-shadow: 0 20px 50px rgba(0,0,0,0.25); }
804
+ .foster-img { width: 100%; aspect-ratio: 3/4; object-fit: cover; display: block; }
805
+ .foster-img-wrap .foster-img--contain { object-fit: contain; background: #ede8df; }
806
+ .foster-card--tall .foster-img { aspect-ratio: 3/5; }
807
+ .foster-card-body { padding: 1.25rem 1.5rem 1.5rem; }
808
+ .foster-card-body h3 { font-family: var(--font-display); font-size: 1.05rem; font-weight: 600; color: var(--text-1); margin-bottom: 0.5rem; line-height: 1.25; }
809
+ .foster-card-body p { font-size: 13px; color: var(--text-2); line-height: 1.65; }
810
+
811
+ .campaign-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; }
812
+ .campaign-card { border-radius: var(--radius-xl); overflow: hidden; background: var(--surface); border: 1px solid var(--border); display: flex; flex-direction: column; transition: transform 0.28s var(--ease), box-shadow 0.28s; }
813
+ .campaign-card:hover { transform: translateY(-5px); box-shadow: 0 28px 70px rgba(0,0,0,0.3); border-color: rgba(124,58,237,0.28); }
814
+ .campaign-img-wrap { position: relative; overflow: hidden; }
815
+ .campaign-img { width: 100%; aspect-ratio: 16/9; object-fit: cover; display: block; transition: transform 0.4s var(--ease); }
816
+ .campaign-card:hover .campaign-img { transform: scale(1.03); }
817
+ .campaign-img-overlay { position: absolute; inset: 0; background: linear-gradient(to bottom, transparent 40%, rgba(5,8,18,0.6) 100%); pointer-events: none; }
818
+ .campaign-body { padding: 1.5rem 1.75rem 1.75rem; display: flex; flex-direction: column; gap: 0.75rem; flex: 1; }
819
+ .campaign-title { font-family: var(--font-display); font-size: clamp(1.15rem, 2vw, 1.4rem); font-weight: 700; color: var(--text-1); line-height: 1.2; }
820
+ .campaign-text { font-size: 14px; color: var(--text-2); line-height: 1.7; flex: 1; }
821
+
822
+ .footer-dev-col { display: flex; flex-direction: column; }
823
+ .footer-dev-link { display: inline-flex; margin-top: 4px; }
824
+ .footer-dev-logo { height: 36px; width: auto; object-fit: contain; opacity: 0.7; transition: opacity 180ms; }
825
+ .footer-dev-logo:hover { opacity: 1; }
826
+
827
+ [data-font="playfair_inter"] { --font-display: 'Playfair Display', Georgia, serif; --font-body: 'Inter', system-ui, sans-serif; }
828
+ [data-font="lora_nunito"] { --font-display: 'Lora', Georgia, serif; --font-body: 'Nunito', system-ui, sans-serif; }
829
+ [data-font="dm_only"] { --font-display: 'DM Sans', system-ui, sans-serif; --font-body: 'DM Sans', system-ui, sans-serif; }
830
+ [data-font="cormorant_jost"] { --font-display: 'Cormorant Garamond', Georgia, serif; --font-body: 'Jost', system-ui, sans-serif; }
831
+
832
+ .section-content { padding-block: clamp(56px, 7vw, 96px); }
833
+ .org-info { display: flex; flex-direction: column; gap: 12px; }
834
+ .org-row { display: flex; gap: 16px; font-size: 14px; }
835
+ .org-row dt { color: var(--text-3); min-width: 120px; font-weight: 500; }
836
+ .org-row dd { color: var(--text-1); }
837
+
838
+ @media (max-width: 900px) { .foster-grid { grid-template-columns: 1fr 1fr; } }
839
+
840
+ @media (max-width: 760px) {
841
+ .section-hero .container { grid-template-columns: 1fr !important; gap: 2rem; }
842
+ .hero-img { max-height: 340px; min-height: unset; }
843
+ .section-img { max-height: 320px; }
844
+ .section-text-image { grid-template-columns: 1fr; }
845
+ .section-text-image.img-left .img-col { order: 0; }
846
+ .foster-grid { grid-template-columns: 1fr; }
847
+ .foster-card--tall .foster-img { aspect-ratio: 3/4; }
848
+ .campaign-grid { grid-template-columns: 1fr; }
849
+ }
850
+
851
+ /* ── SERVICES PAGE ───────────────────────────────────────────── */
852
+ [data-section-key="service_cards"] .card-img { aspect-ratio: 3/2; object-fit: cover; object-position: center 30%; }
853
+ [data-section-key="service_cards"] .card { border-color: var(--border); }
854
+ [data-section-key="service_cards"] .card:hover { border-color: rgba(124,58,237,0.30); box-shadow: 0 16px 40px rgba(0,0,0,0.12); }
855
+ .theme-light [data-section-key="service_cards"] .card-text { color: var(--text-2); font-size: 14px; line-height: 1.65; }
856
+
857
+ /* ── CTA BANNER ─────────────────────────────────────────────── */
858
+ .section-cta-banner { text-align: center; padding-block: clamp(60px, 7vw, 100px); border-top: 1px solid var(--border); }
859
+ .theme-light .section-cta-banner { background: var(--bg-2); }
860
+
861
+ /* ── LIGHT THEME ─────────────────────────────────────────────── */
862
+ .theme-light .section h2 { font-size: clamp(2rem, 4vw, 3rem); font-weight: 700; letter-spacing: -0.025em; color: var(--text-1); }
863
+ .theme-light .section .eyebrow { color: var(--purple); }
864
+ .theme-light .section-hero h1 { color: var(--text-1); }
865
+ .theme-light .hero-img { transform: rotate(0.8deg); object-position: center 20%; box-shadow: 0 8px 24px rgba(0,0,0,0.10), 0 32px 64px rgba(0,0,0,0.14); border-color: rgba(23,32,51,0.10); }
866
+ .theme-light .hero-img-col:hover .hero-img { transform: rotate(0.2deg) scale(1.01); }
867
+ .theme-light .site-header.scrolled .site-nav a { color: var(--text-1); }
868
+ .theme-light .site-header.scrolled .site-nav a:hover { color: var(--text-1); background: transparent; }
869
+ .theme-light .site-header:not(.scrolled) {
870
+ background: linear-gradient(
871
+ 180deg,
872
+ color-mix(in srgb, var(--purple) 16%, rgba(250, 248, 244, 0.52)) 0%,
873
+ color-mix(in srgb, var(--purple) 10%, rgba(250, 248, 244, 0.68)) 100%
874
+ );
875
+ border-bottom-color: var(--header-glass-border, rgba(107, 33, 232, 0.18));
876
+ backdrop-filter: blur(var(--header-glass-blur, 22px)) saturate(160%);
877
+ -webkit-backdrop-filter: blur(var(--header-glass-blur, 22px)) saturate(160%);
878
+ box-shadow: 0 1px 0 rgba(107, 33, 168, 0.10), inset 0 1px 0 rgba(255, 255, 255, 0.62);
879
+ }
880
+ .theme-light .site-header.scrolled {
881
+ background: linear-gradient(
882
+ 180deg,
883
+ color-mix(in srgb, var(--purple) 8%, rgba(252, 250, 255, 0.94)) 0%,
884
+ var(--header-glass-scrolled-bg, rgba(252, 248, 255, 0.92)) 100%
885
+ );
886
+ border-bottom-color: var(--header-glass-border, rgba(107, 33, 232, 0.14));
887
+ box-shadow: 0 8px 28px rgba(88, 28, 135, 0.10);
888
+ }
889
+ .theme-light .site-header:not(.scrolled) .site-nav a { color: rgba(28,20,32,0.72); }
890
+ .theme-light .site-header:not(.scrolled) .site-nav a:hover { color: var(--text-1); background: transparent; }
891
+ .theme-light .site-header .site-nav a.active {
892
+ color: var(--text-1);
893
+ background: transparent;
894
+ box-shadow: none;
895
+ }
896
+ .theme-light .site-header .site-nav a.active::after {
897
+ background: linear-gradient(90deg, transparent, var(--purple) 15%, var(--purple) 85%, transparent);
898
+ }
899
+ .theme-light .site-header .site-nav a.active::before { background: var(--purple); }
900
+ .theme-light .site-header .btn-primary { color: #fff !important; }
901
+ .theme-light .mobile-menu-toggle {
902
+ border-color: rgba(107, 33, 168, 0.16);
903
+ background: rgba(255, 255, 255, 0.55);
904
+ color: var(--text-1);
905
+ }
906
+
907
+ /* Plum glass homepage — dark wine header (mockup) */
908
+ .theme-plum-glass .site-header:not(.scrolled) {
909
+ background: var(--header-glass-bg);
910
+ border-bottom-color: rgba(255, 255, 255, 0.10);
911
+ backdrop-filter: blur(var(--header-glass-blur, 24px)) saturate(165%);
912
+ -webkit-backdrop-filter: blur(var(--header-glass-blur, 24px)) saturate(165%);
913
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.10);
914
+ }
915
+ .theme-plum-glass .site-header.scrolled {
916
+ background: var(--header-glass-scrolled-bg);
917
+ border-bottom-color: rgba(255, 255, 255, 0.14);
918
+ box-shadow: 0 10px 32px rgba(78, 26, 82, 0.28);
919
+ }
920
+ .theme-plum-glass .site-header .site-nav a {
921
+ color: var(--tg-nav-link);
922
+ }
923
+ .theme-plum-glass .site-header .site-nav a:hover {
924
+ color: var(--tg-nav-active);
925
+ background: transparent;
926
+ }
927
+ .theme-plum-glass .site-header .site-nav a.active {
928
+ color: var(--tg-nav-active);
929
+ font-weight: 600;
930
+ background: transparent;
931
+ box-shadow: none;
932
+ }
933
+ .theme-plum-glass .site-header .site-nav a.active::after {
934
+ background: linear-gradient(90deg, transparent, var(--tg-nav-underline) 18%, var(--tg-nav-underline) 82%, transparent);
935
+ }
936
+ .theme-plum-glass .site-header .site-nav a.active::before {
937
+ background: var(--tg-nav-underline);
938
+ }
939
+ .theme-plum-glass .site-header .btn-primary {
940
+ color: #fff !important;
941
+ background: linear-gradient(135deg, var(--tg-cta-donate-start), var(--tg-cta-donate-end));
942
+ box-shadow: 0 8px 22px var(--tg-cta-donate-shadow);
943
+ /* Keep plum-glass colors; use same rounded-rect shape as theme-dark header Donate */
944
+ border-radius: 12px;
945
+ }
946
+ .theme-plum-glass .mobile-menu-toggle {
947
+ border-color: rgba(255, 255, 255, 0.18);
948
+ background: rgba(255, 255, 255, 0.08);
949
+ color: #fff;
950
+ }
951
+ .theme-plum-glass .mobile-menu-toggle span {
952
+ background: rgba(255, 255, 255, 0.92);
953
+ }
954
+ .theme-light .section h2 { font-family: var(--font-body); font-weight: 700; font-size: clamp(1.9rem, 3.5vw, 2.75rem); letter-spacing: -0.025em; line-height: 1.15; color: var(--text-1); }
955
+ .theme-light .section-cta h2 { font-size: clamp(1.75rem, 3vw, 2.4rem); }
956
+ .foster-card-body h3 { font-family: var(--font-body); font-weight: 600; font-size: 1rem; letter-spacing: -0.01em; }
957
+ [data-section-key="service_cards"] h2 { font-family: var(--font-body); font-weight: 700; letter-spacing: -0.025em; }
958
+
959
+ /* ── MODAL SYSTEM ────────────────────────────────────────────── */
960
+ .cpas-modal-backdrop {
961
+ position: fixed; inset: 0; z-index: 900;
962
+ background: rgba(10,8,20,0.55);
963
+ backdrop-filter: blur(4px);
964
+ display: flex; align-items: center; justify-content: center;
965
+ padding: 20px;
966
+ opacity: 0; pointer-events: none;
967
+ transition: opacity 200ms var(--ease);
968
+ }
969
+ .cpas-modal-backdrop.is-open { opacity: 1; pointer-events: all; }
970
+ .cpas-modal {
971
+ background: #fff; border-radius: 20px; width: 100%; max-width: 560px;
972
+ max-height: 90vh; overflow-y: auto;
973
+ box-shadow: 0 32px 80px rgba(0,0,0,0.28);
974
+ transform: translateY(16px) scale(0.98);
975
+ transition: transform 200ms var(--ease);
976
+ padding: 36px 36px 32px;
977
+ }
978
+ .cpas-modal-backdrop.is-open .cpas-modal { transform: translateY(0) scale(1); }
979
+ .cpas-modal-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 24px; }
980
+ .cpas-modal-title { font-family: var(--font-body); font-size: 1.4rem; font-weight: 700; letter-spacing: -0.025em; line-height: 1.2; color: #1a1622; }
981
+ .cpas-modal-sub { font-size: 14px; color: #6b7280; margin-top: 6px; line-height: 1.55; }
982
+ .cpas-modal-close { background: none; border: none; width: 32px; height: 32px; border-radius: 8px; display: flex; align-items: center; justify-content: center; cursor: pointer; color: #9ca3af; font-size: 20px; flex-shrink: 0; transition: background 150ms, color 150ms; }
983
+ .cpas-modal-close:hover { background: #f3f4f6; color: #1a1622; }
984
+ .cpas-modal form { display: grid; gap: 14px; }
985
+ .cpas-modal .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
986
+ .cpas-modal label { display: block; font-size: 12px; font-weight: 600; color: #4b4453; margin-bottom: 5px; text-transform: uppercase; letter-spacing: 0.05em; }
987
+ .cpas-modal input, .cpas-modal select, .cpas-modal textarea { width: 100%; padding: 10px 13px; border: 1.5px solid #e5e7eb; border-radius: 10px; font-size: 14px; font-family: var(--font-body); color: #1a1622; background: #fafafa; outline: none; box-sizing: border-box; transition: border-color 150ms, box-shadow 150ms; }
988
+ .cpas-modal input:focus, .cpas-modal select:focus, .cpas-modal textarea:focus { border-color: var(--purple); box-shadow: 0 0 0 3px rgba(124,58,237,0.12); background: #fff; }
989
+ .cpas-modal textarea { resize: vertical; min-height: 80px; }
990
+ .cpas-modal .form-submit { margin-top: 6px; width: 100%; padding: 13px; border-radius: 11px; background: var(--purple); color: #fff; font-family: var(--font-body); font-size: 15px; font-weight: 600; border: none; cursor: pointer; transition: background 150ms, transform 150ms; }
991
+ .cpas-modal .form-submit:hover { background: #6d28d9; transform: translateY(-1px); }
992
+ .cpas-modal .form-submit:disabled { opacity: 0.6; cursor: not-allowed; transform: none; }
993
+ .cpas-modal .form-note { font-size: 12px; color: #9ca3af; text-align: center; margin-top: 2px; line-height: 1.5; }
994
+ .cpas-modal .form-success { text-align: center; padding: 24px 0; }
995
+ .cpas-modal .form-success-icon { font-size: 40px; margin-bottom: 12px; }
996
+ .cpas-modal .form-success-title { font-size: 1.2rem; font-weight: 700; color: #1a1622; margin-bottom: 8px; }
997
+ .cpas-modal .form-success-msg { font-size: 14px; color: #4b4453; line-height: 1.6; }
998
+ @media (max-width: 600px) {
999
+ .cpas-modal { padding: 28px 20px 24px; border-radius: 16px; }
1000
+ .cpas-modal .form-row { grid-template-columns: 1fr; }
1001
+ }
1002
+
1003
+
1004
+ /* CPAS P0 HEADER FINAL: bare purple hamburger (light theme only — plum uses glass toggle) */
1005
+ .theme-light .mobile-menu-toggle,
1006
+ .theme-light .mobile-menu-toggle.is-open{border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;width:48px!important;height:48px!important;padding:0!important}
1007
+ .theme-light .mobile-menu-toggle span{width:28px!important;height:3px!important;background:var(--purple-light)!important;border-radius:999px!important}
1008
+ .theme-light .mobile-menu-toggle.is-open{top:max(12px,env(safe-area-inset-top))!important;right:max(12px,env(safe-area-inset-right))!important}
1009
+ body.cpas-nav-open,html.cpas-nav-open{overflow:hidden}.nav-drawer{height:100vh;height:100dvh;width:clamp(320px,52vw,440px);max-width:calc(100vw - 18px)}
1010
+ @media(max-width:420px){.nav-drawer{width:min(86vw,340px)}}
1011
+
1012
+ /* ── FOOTER SOCIAL ICONS (compact circles) ───────────────────── */
1013
+ .footer-social-icons {
1014
+ display: flex;
1015
+ flex-direction: row;
1016
+ gap: 10px;
1017
+ margin-top: 4px;
1018
+ }
1019
+ .footer-social-icon {
1020
+ display: inline-flex;
1021
+ align-items: center;
1022
+ justify-content: center;
1023
+ width: 36px;
1024
+ height: 36px;
1025
+ border-radius: 50%;
1026
+ color: #fff;
1027
+ text-decoration: none;
1028
+ transition: transform 160ms, opacity 160ms;
1029
+ opacity: 0.82;
1030
+ flex-shrink: 0;
1031
+ padding: 9px;
1032
+ box-sizing: border-box;
1033
+ }
1034
+ .footer-social-icon svg {
1035
+ display: block;
1036
+ width: 100%;
1037
+ height: 100%;
1038
+ flex-shrink: 0;
1039
+ }
1040
+ .footer-social-icon:hover { transform: translateY(-2px); opacity: 1; }
1041
+ .footer-social-icon--fb { background: #1877f2; }
1042
+ .footer-social-icon--ig { background: linear-gradient(135deg, #f58529, #dd2a7b, #8134af); }
1043
+
1044
+ /* CMS draft preview — hidden sections shown at reduced opacity */
1045
+ .cms-preview .cms-preview-hidden-section {
1046
+ opacity: 0.5;
1047
+ outline: 2px dashed rgba(124, 58, 237, 0.45);
1048
+ outline-offset: -2px;
1049
+ }
1050
+ /* ── PUBLIC PAGE SURFACE (light-first) ─────────────────────────
1051
+ Hero, sections, mobile nav, footer grid — required by fragment CMS.
1052
+ Uses theme-light tokens (--bg, --text-1, etc.) from cpas-shell.css.
1053
+ ───────────────────────────────────────────────────────────── */
1054
+
1055
+ .theme-light,
1056
+ .theme-plum-glass {
1057
+ --light-bg: var(--bg);
1058
+ --light-card: #ffffff;
1059
+ --light-border: var(--border);
1060
+ --light-text: var(--text-1);
1061
+ --light-muted: var(--text-2);
1062
+ }
1063
+
1064
+ /* Mobile nav — hidden on desktop (fixes duplicate nav bleed-through) */
1065
+ .mobile-menu-panel {
1066
+ display: none;
1067
+ }
1068
+ @media (max-width: 760px) {
1069
+ .mobile-menu-panel {
1070
+ display: flex;
1071
+ flex-direction: column;
1072
+ position: fixed;
1073
+ top: 0;
1074
+ right: 0;
1075
+ bottom: 0;
1076
+ z-index: 510;
1077
+ width: min(86vw, 360px);
1078
+ padding: calc(var(--header-h) + 12px) 12px 24px;
1079
+ gap: 4px;
1080
+ background: rgba(250, 248, 244, 0.98);
1081
+ border-left: 1px solid var(--border);
1082
+ box-shadow: -24px 0 64px rgba(28, 20, 32, 0.12);
1083
+ transform: translateX(100%);
1084
+ transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);
1085
+ overflow-y: auto;
1086
+ }
1087
+ .mobile-menu-panel.is-open {
1088
+ transform: translateX(0);
1089
+ }
1090
+ .mobile-menu-panel a {
1091
+ display: flex;
1092
+ align-items: center;
1093
+ min-height: 48px;
1094
+ padding: 0 16px;
1095
+ border-radius: 12px;
1096
+ font-size: 16px;
1097
+ font-weight: 500;
1098
+ color: var(--text-2);
1099
+ transition: background 150ms, color 150ms;
1100
+ }
1101
+ .mobile-menu-panel a:hover,
1102
+ .mobile-menu-panel a.active {
1103
+ color: var(--text-1);
1104
+ background: rgba(107, 33, 232, 0.08);
1105
+ }
1106
+ .mobile-menu-panel .mobile-donate {
1107
+ margin-top: 8px;
1108
+ justify-content: center;
1109
+ background: var(--purple);
1110
+ color: #fff !important;
1111
+ font-weight: 600;
1112
+ border-radius: 999px;
1113
+ }
1114
+ .theme-plum-glass .mobile-menu-panel {
1115
+ background: linear-gradient(180deg, rgba(44, 10, 56, 0.98) 0%, rgba(58, 16, 72, 0.97) 100%);
1116
+ border-left-color: rgba(255, 255, 255, 0.10);
1117
+ box-shadow: -24px 0 64px rgba(20, 4, 28, 0.35);
1118
+ }
1119
+ .theme-plum-glass .mobile-menu-panel a {
1120
+ color: rgba(255, 255, 255, 0.76);
1121
+ }
1122
+ .theme-plum-glass .mobile-menu-panel a:hover,
1123
+ .theme-plum-glass .mobile-menu-panel a.active {
1124
+ color: #fff;
1125
+ background: rgba(255, 255, 255, 0.08);
1126
+ }
1127
+ .theme-plum-glass .mobile-menu-panel .mobile-donate {
1128
+ background: linear-gradient(135deg, var(--tg-cta-donate-start), var(--tg-cta-donate-end));
1129
+ box-shadow: 0 8px 22px var(--tg-cta-donate-shadow);
1130
+ }
1131
+ }
1132
+
1133
+ /* ── HERO MOCKUP — see cpas-hero-watercolor.css (merged into shell) ── */
1134
+
1135
+ /* ── HERO SPLIT (legacy / about) ────────────────────────────── */
1136
+ .hero-split {
1137
+ position: relative;
1138
+ min-height: calc(100vh - var(--header-h));
1139
+ display: flex;
1140
+ align-items: center;
1141
+ overflow: hidden;
1142
+ background: var(--bg);
1143
+ }
1144
+ .hero-media-bg { position: absolute; inset: 0; z-index: 0; }
1145
+ .hero-media-bg img {
1146
+ position: absolute;
1147
+ right: 0;
1148
+ top: 0;
1149
+ width: min(62%, 820px);
1150
+ height: 100%;
1151
+ object-fit: cover;
1152
+ object-position: center 18%;
1153
+ z-index: 0;
1154
+ }
1155
+ .hero-split--image-left .hero-media-bg img {
1156
+ left: 0;
1157
+ right: auto;
1158
+ }
1159
+ .hero-split--image-left .hero-scrim {
1160
+ left: auto;
1161
+ right: 0;
1162
+ }
1163
+ .hero-split--image-left .hero-content {
1164
+ margin-left: auto;
1165
+ }
1166
+ .theme-light .hero-scrim,
1167
+ .hero-scrim {
1168
+ position: absolute;
1169
+ top: 0;
1170
+ bottom: 0;
1171
+ left: 0;
1172
+ width: min(46%, 560px);
1173
+ z-index: 1;
1174
+ pointer-events: none;
1175
+ background: linear-gradient(
1176
+ 90deg,
1177
+ var(--bg) 0%,
1178
+ var(--bg) 82%,
1179
+ rgba(250, 248, 244, 0.55) 94%,
1180
+ transparent 100%
1181
+ );
1182
+ }
1183
+
1184
+ /* Soft split = current full-bleed photo + scrim fade (default) */
1185
+ .hero-split--soft .hero-media-bg img {
1186
+ width: 100%;
1187
+ left: 0;
1188
+ right: 0;
1189
+ }
1190
+ .hero-split--soft .hero-scrim {
1191
+ width: min(52%, 640px);
1192
+ }
1193
+
1194
+ /* True split = photo only in its column; no half-cover fade */
1195
+ .hero-split--true {
1196
+ display: grid;
1197
+ grid-template-columns: minmax(0, calc(100% - var(--hero-image-width, 55%))) minmax(240px, var(--hero-image-width, 55%));
1198
+ align-items: stretch;
1199
+ }
1200
+ .hero-split--true.hero-split--image-left {
1201
+ grid-template-columns: minmax(240px, var(--hero-image-width, 55%)) minmax(0, calc(100% - var(--hero-image-width, 55%)));
1202
+ }
1203
+ .hero-split--true .hero-media-bg {
1204
+ position: relative;
1205
+ inset: auto;
1206
+ grid-column: 2;
1207
+ grid-row: 1;
1208
+ min-height: calc(100vh - var(--header-h));
1209
+ }
1210
+ .hero-split--true.hero-split--image-left .hero-media-bg {
1211
+ grid-column: 1;
1212
+ }
1213
+ .hero-split--true .hero-media-bg img {
1214
+ position: absolute;
1215
+ inset: 0;
1216
+ width: 100%;
1217
+ height: 100%;
1218
+ right: auto;
1219
+ left: auto;
1220
+ }
1221
+ .hero-split--true .hero-scrim { display: none; }
1222
+ .hero-split--true .hero-body {
1223
+ grid-column: 1;
1224
+ grid-row: 1;
1225
+ display: flex;
1226
+ align-items: center;
1227
+ background: var(--bg);
1228
+ z-index: 2;
1229
+ }
1230
+ .hero-split--true.hero-split--image-left .hero-body {
1231
+ grid-column: 2;
1232
+ }
1233
+ .hero-split--true .hero-content { margin-left: 0; }
1234
+
1235
+ /* Contained split = donate/contact gutters; photo inset + rounded, not edge-bleed */
1236
+ .hero-split--contained {
1237
+ display: grid;
1238
+ grid-template-columns: minmax(0, 1.05fr) minmax(260px, var(--hero-image-width, 48%));
1239
+ gap: clamp(28px, 4vw, 64px);
1240
+ align-items: center;
1241
+ width: 100%;
1242
+ max-width: none;
1243
+ min-height: 0;
1244
+ box-sizing: border-box;
1245
+ padding: clamp(36px, 6vw, 80px) max(var(--page-gutter), calc((100% - var(--page-max)) / 2));
1246
+ background: var(--bg);
1247
+ }
1248
+ .hero-split--contained.hero-split--image-left {
1249
+ grid-template-columns: minmax(260px, var(--hero-image-width, 48%)) minmax(0, 1.05fr);
1250
+ }
1251
+ .hero-split--contained .hero-media-bg {
1252
+ position: relative;
1253
+ inset: auto;
1254
+ grid-column: 2;
1255
+ grid-row: 1;
1256
+ min-height: 0;
1257
+ aspect-ratio: 4 / 3;
1258
+ max-height: min(520px, 58vh);
1259
+ border-radius: var(--radius-lg);
1260
+ overflow: hidden;
1261
+ box-shadow: 0 18px 48px rgba(28, 20, 32, 0.10);
1262
+ background: var(--bg2, #efeae3);
1263
+ }
1264
+ .hero-split--contained.hero-split--image-left .hero-media-bg {
1265
+ grid-column: 1;
1266
+ }
1267
+ .hero-split--contained .hero-media-bg img {
1268
+ position: absolute;
1269
+ inset: 0;
1270
+ width: 100%;
1271
+ height: 100%;
1272
+ left: auto;
1273
+ right: auto;
1274
+ }
1275
+ .hero-split--contained .hero-scrim { display: none; }
1276
+ .hero-split--contained .hero-body {
1277
+ grid-column: 1;
1278
+ grid-row: 1;
1279
+ display: flex;
1280
+ align-items: center;
1281
+ background: transparent;
1282
+ z-index: 2;
1283
+ padding: 0;
1284
+ }
1285
+ .hero-split--contained.hero-split--image-left .hero-body {
1286
+ grid-column: 2;
1287
+ }
1288
+ .hero-split--contained .hero-body > .container {
1289
+ width: 100%;
1290
+ margin: 0;
1291
+ max-width: none;
1292
+ }
1293
+ .hero-split--contained .hero-content {
1294
+ max-width: 560px;
1295
+ margin-left: 0;
1296
+ }
1297
+
1298
+ /* Overlay = photo full-bleed; dark veil under copy */
1299
+ .hero-split--overlay .hero-media-bg img {
1300
+ width: 100%;
1301
+ left: 0;
1302
+ right: 0;
1303
+ }
1304
+ .hero-split--overlay .hero-scrim {
1305
+ width: min(58%, 720px);
1306
+ }
1307
+ .hero-split--overlay .hero-heading,
1308
+ .hero-split--overlay .hero-sub,
1309
+ .hero-split--overlay .hero-badge {
1310
+ color: #fff;
1311
+ }
1312
+ .hero-split--overlay .hero-badge {
1313
+ background: rgba(255,255,255,0.12);
1314
+ border-color: rgba(255,255,255,0.28);
1315
+ color: rgba(255,255,255,0.92);
1316
+ }
1317
+ .hero-split--overlay .hero-sub { color: rgba(255,255,255,0.84); }
1318
+
1319
+ .hero-body { position: relative; z-index: 2; width: 100%; padding: clamp(3rem, 6vw, 5rem) 0; }
1320
+ .hero-content { max-width: 540px; }
1321
+ .hero-badge {
1322
+ display: inline-flex;
1323
+ align-items: center;
1324
+ gap: 6px;
1325
+ padding: 5px 14px;
1326
+ border: 1px solid var(--border-md);
1327
+ border-radius: 100px;
1328
+ font-size: 11px;
1329
+ font-weight: 600;
1330
+ letter-spacing: 0.06em;
1331
+ text-transform: uppercase;
1332
+ color: var(--text-2);
1333
+ background: rgba(107, 33, 232, 0.06);
1334
+ margin-bottom: 1.5rem;
1335
+ }
1336
+ .hero-mockup .hero-badge { margin-bottom: 1.1rem; }
1337
+ .hero-heading {
1338
+ font-family: var(--font-display);
1339
+ font-size: clamp(2.4rem, 5.8vw, 4.6rem);
1340
+ font-weight: 700;
1341
+ line-height: 1.02;
1342
+ letter-spacing: -0.04em;
1343
+ color: var(--text-1);
1344
+ margin-bottom: 1.25rem;
1345
+ }
1346
+ .hero-mockup .hero-heading { margin-bottom: 1rem; }
1347
+ .hero-sub {
1348
+ font-size: 1rem;
1349
+ line-height: 1.65;
1350
+ color: var(--text-2);
1351
+ max-width: 480px;
1352
+ margin-bottom: 2rem;
1353
+ }
1354
+ .hero-mockup .hero-sub { margin-bottom: 1.5rem; }
1355
+ .hero-actions { display: flex; gap: 0.75rem; flex-wrap: wrap; }
1356
+ .hero-cta {
1357
+ display: inline-flex;
1358
+ align-items: center;
1359
+ gap: 10px;
1360
+ padding: 0.7rem 1.2rem;
1361
+ border-radius: 10px;
1362
+ text-decoration: none;
1363
+ min-width: 155px;
1364
+ transition: transform 0.2s, box-shadow 0.2s, background 0.2s;
1365
+ cursor: pointer;
1366
+ font: inherit;
1367
+ }
1368
+ .hero-cta:hover { transform: translateY(-2px); }
1369
+ .hero-cta-icon {
1370
+ width: 32px;
1371
+ height: 32px;
1372
+ border-radius: 8px;
1373
+ background: rgba(107, 33, 232, 0.12);
1374
+ display: flex;
1375
+ align-items: center;
1376
+ justify-content: center;
1377
+ flex-shrink: 0;
1378
+ color: var(--purple);
1379
+ }
1380
+ .hero-cta-text { display: flex; flex-direction: column; gap: 2px; }
1381
+ .hero-cta-label { font-size: 13px; font-weight: 600; line-height: 1; }
1382
+ .hero-cta-sub { font-size: 11px; color: var(--text-3); line-height: 1; }
1383
+ .hero-cta-primary {
1384
+ background: linear-gradient(135deg, rgba(107, 33, 232, 0.92), rgba(124, 58, 237, 0.88));
1385
+ border: 1px solid rgba(255, 255, 255, 0.18);
1386
+ box-shadow: 0 4px 18px rgba(107, 33, 232, 0.28);
1387
+ }
1388
+ .hero-cta-primary .hero-cta-label,
1389
+ .hero-cta-primary .hero-cta-icon { color: #fff; }
1390
+ .hero-cta-primary .hero-cta-sub { color: rgba(255, 255, 255, 0.72); }
1391
+ .hero-cta-primary .hero-cta-icon { background: rgba(255,255,255,0.18); }
1392
+ .hero-cta-soft {
1393
+ background: rgba(124, 58, 237, 0.14);
1394
+ border: 1px solid rgba(124, 58, 237, 0.28);
1395
+ box-shadow: none;
1396
+ }
1397
+ .hero-cta-soft .hero-cta-label { color: var(--purple); }
1398
+ .hero-cta-soft .hero-cta-icon { color: var(--purple); background: rgba(124, 58, 237, 0.12); }
1399
+ .hero-cta-outline {
1400
+ background: transparent;
1401
+ border: 1.5px solid rgba(107, 33, 232, 0.55);
1402
+ box-shadow: none;
1403
+ }
1404
+ .hero-cta-outline .hero-cta-label { color: var(--purple); }
1405
+ .hero-cta-outline .hero-cta-icon { color: var(--purple); background: rgba(107, 33, 232, 0.08); }
1406
+ .hero-cta-ghost {
1407
+ background: #fff;
1408
+ border: 1px solid var(--border-md);
1409
+ box-shadow: 0 2px 12px rgba(28, 20, 32, 0.06);
1410
+ }
1411
+ .hero-cta-ghost .hero-cta-label { color: var(--text-1); }
1412
+ .hero-cta-dark {
1413
+ background: #1c1420;
1414
+ border: 1px solid rgba(255,255,255,0.12);
1415
+ box-shadow: 0 4px 16px rgba(28, 20, 32, 0.28);
1416
+ }
1417
+ .hero-cta-dark .hero-cta-label,
1418
+ .hero-cta-dark .hero-cta-icon { color: #fff; }
1419
+ .hero-cta-dark .hero-cta-sub { color: rgba(255,255,255,0.7); }
1420
+ .hero-cta-dark .hero-cta-icon { background: rgba(255,255,255,0.12); }
1421
+
1422
+ @media (max-width: 768px) {
1423
+ .hero-split { min-height: auto; display: block; }
1424
+ .hero-split--true,
1425
+ .hero-split--true.hero-split--image-left,
1426
+ .hero-split--contained,
1427
+ .hero-split--contained.hero-split--image-left {
1428
+ display: block;
1429
+ grid-template-columns: none;
1430
+ }
1431
+ .hero-split--true .hero-media-bg,
1432
+ .hero-split--true.hero-split--image-left .hero-media-bg,
1433
+ .hero-split--contained .hero-media-bg,
1434
+ .hero-split--contained.hero-split--image-left .hero-media-bg {
1435
+ grid-column: auto;
1436
+ min-height: clamp(280px, 58vw, 480px);
1437
+ }
1438
+ .hero-split--contained .hero-media-bg {
1439
+ border-radius: var(--radius-md);
1440
+ margin-bottom: 1.25rem;
1441
+ }
1442
+ .hero-split--true .hero-body,
1443
+ .hero-split--true.hero-split--image-left .hero-body,
1444
+ .hero-split--contained .hero-body,
1445
+ .hero-split--contained.hero-split--image-left .hero-body {
1446
+ grid-column: auto;
1447
+ }
1448
+ .hero-split--contained {
1449
+ padding: clamp(28px, 5vw, 48px) var(--page-gutter);
1450
+ }
1451
+ .hero-media-bg { position: relative; height: clamp(280px, 58vw, 480px); }
1452
+ .hero-media-bg img { position: relative; width: 100%; height: 100%; }
1453
+ .hero-scrim { display: none; }
1454
+ .hero-body {
1455
+ padding: 2rem 0 3rem;
1456
+ background: linear-gradient(180deg, var(--bg) 0%, var(--bg-2) 100%);
1457
+ }
1458
+ .hero-split--contained .hero-body {
1459
+ padding: 0;
1460
+ background: transparent;
1461
+ }
1462
+ .hero-split--overlay .hero-heading,
1463
+ .hero-split--overlay .hero-sub,
1464
+ .hero-split--overlay .hero-badge { color: inherit; }
1465
+ .hero-split--overlay .hero-sub { color: var(--text-2); }
1466
+ .hero-split--overlay .hero-badge {
1467
+ background: rgba(107, 33, 232, 0.06);
1468
+ border-color: var(--border-md);
1469
+ color: var(--text-2);
1470
+ }
1471
+ }
1472
+
1473
+ /* ── SECTION SURFACES (all light — no dark bands) ───────────── */
1474
+ .s-dark,
1475
+ .s-light { background: var(--bg); color: var(--text-1); }
1476
+ .s-dark:nth-of-type(even),
1477
+ .s-light:nth-of-type(even) { background: var(--bg-2); }
1478
+ .s-purple,
1479
+ .stats-band,
1480
+ .cta-band {
1481
+ background: linear-gradient(
1482
+ 135deg,
1483
+ rgba(107, 33, 232, 0.10) 0%,
1484
+ rgba(250, 248, 244, 1) 45%,
1485
+ rgba(214, 43, 43, 0.08) 100%
1486
+ );
1487
+ color: var(--text-1);
1488
+ border-top: 1px solid var(--border);
1489
+ border-bottom: 1px solid var(--border);
1490
+ }
1491
+ .section { padding: clamp(3rem, 6vw, 4.5rem) 0; }
1492
+
1493
+ .ey-purple {
1494
+ font-size: 11px;
1495
+ font-weight: 700;
1496
+ letter-spacing: 0.1em;
1497
+ text-transform: uppercase;
1498
+ color: var(--purple);
1499
+ margin-bottom: 0.75rem;
1500
+ }
1501
+ .ey-white {
1502
+ font-size: 11px;
1503
+ font-weight: 700;
1504
+ letter-spacing: 0.1em;
1505
+ text-transform: uppercase;
1506
+ color: var(--purple);
1507
+ margin-bottom: 0.75rem;
1508
+ }
1509
+
1510
+ /* Mission, pillars, story */
1511
+ .mission-wrap {
1512
+ background: var(--bg-2);
1513
+ padding-top: 0;
1514
+ padding-bottom: 0;
1515
+ margin-top: 0;
1516
+ }
1517
+ .mission-wrap + .section,
1518
+ .mission-wrap + .s-light {
1519
+ background: var(--bg);
1520
+ }
1521
+ .mission-card {
1522
+ background: #fff;
1523
+ border-radius: 20px;
1524
+ border: 1px solid var(--border);
1525
+ box-shadow: 0 4px 32px rgba(28, 20, 32, 0.06);
1526
+ padding: 2.5rem 3rem;
1527
+ display: grid;
1528
+ grid-template-columns: 1fr 1fr;
1529
+ gap: 3rem;
1530
+ align-items: center;
1531
+ }
1532
+ .mission-heading {
1533
+ font-family: var(--font-display);
1534
+ font-size: clamp(1.3rem, 2vw, 1.7rem);
1535
+ font-weight: 700;
1536
+ color: var(--text-1);
1537
+ line-height: 1.15;
1538
+ margin: 0.5rem 0 0.75rem;
1539
+ }
1540
+ .mission-body { font-size: 14px; color: var(--text-2); line-height: 1.7; }
1541
+ .mission-flow { display: flex; align-items: center; justify-content: center; gap: 0.75rem; flex-wrap: wrap; }
1542
+ .mission-step { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; text-align: center; }
1543
+ .mission-step-icon {
1544
+ width: 50px;
1545
+ height: 50px;
1546
+ border-radius: 14px;
1547
+ background: rgba(107, 33, 232, 0.08);
1548
+ display: flex;
1549
+ align-items: center;
1550
+ justify-content: center;
1551
+ }
1552
+ .mission-step span { font-size: 11px; font-weight: 600; color: var(--text-2); line-height: 1.35; }
1553
+ .mission-arrow { font-size: 1rem; color: var(--purple); opacity: 0.45; }
1554
+
1555
+ .pillars-row {
1556
+ display: grid;
1557
+ grid-template-columns: repeat(3, 1fr);
1558
+ gap: 1.25rem;
1559
+ margin-top: 2rem;
1560
+ }
1561
+ .pillar {
1562
+ background: #fff;
1563
+ border: 1px solid var(--border);
1564
+ border-radius: 16px;
1565
+ padding: 1.75rem;
1566
+ transition: box-shadow 0.25s, transform 0.25s;
1567
+ }
1568
+ .pillar:hover { box-shadow: 0 6px 28px rgba(28, 20, 32, 0.08); transform: translateY(-2px); }
1569
+ .pillar-icon-wrap {
1570
+ width: 46px;
1571
+ height: 46px;
1572
+ border-radius: 12px;
1573
+ background: rgba(107, 33, 232, 0.08);
1574
+ display: flex;
1575
+ align-items: center;
1576
+ justify-content: center;
1577
+ margin-bottom: 1rem;
1578
+ }
1579
+ .pillar h3 { font-size: 0.95rem; font-weight: 700; color: var(--text-1); margin-bottom: 0.4rem; font-family: var(--font-body); }
1580
+ .pillar p { font-size: 13px; color: var(--text-2); line-height: 1.65; margin-bottom: 0.85rem; }
1581
+ .pillar a { font-size: 13px; font-weight: 600; color: var(--purple); }
1582
+ .paths-heading {
1583
+ text-align: center;
1584
+ font-family: var(--font-display);
1585
+ font-size: clamp(1.5rem, 2.5vw, 2rem);
1586
+ font-weight: 700;
1587
+ color: var(--text-1);
1588
+ margin-bottom: 0.25rem;
1589
+ }
1590
+
1591
+ .story-block {
1592
+ display: grid;
1593
+ grid-template-columns: 1fr 1.2fr;
1594
+ border-radius: 20px;
1595
+ overflow: hidden;
1596
+ border: 1px solid var(--border);
1597
+ box-shadow: 0 4px 32px rgba(28, 20, 32, 0.06);
1598
+ background: #fff;
1599
+ }
1600
+ .story-block-img:not(.story-block-img--contain) img { width: 100%; height: 100%; min-height: 300px; object-fit: cover; display: block; }
1601
+ .story-block-img--contain {
1602
+ display: flex;
1603
+ align-items: center;
1604
+ justify-content: center;
1605
+ background: var(--bg-2);
1606
+ min-height: 300px;
1607
+ }
1608
+ .story-block-img--contain img {
1609
+ width: 100%;
1610
+ height: auto;
1611
+ max-height: min(420px, 52vw);
1612
+ min-height: 200px;
1613
+ object-fit: contain;
1614
+ object-position: center;
1615
+ display: block;
1616
+ padding: 0.75rem;
1617
+ }
1618
+ .story-block-img--map { position: relative; min-height: 320px; background: var(--bg-2); }
1619
+ .story-block-img--map iframe { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 320px; border: 0; }
1620
+ .story-block-map-cap {
1621
+ position: absolute;
1622
+ left: 0; right: 0; bottom: 0;
1623
+ padding: 1rem 1.1rem;
1624
+ background: linear-gradient(to top, rgba(28, 20, 32, 0.82) 0%, transparent 100%);
1625
+ color: #fff;
1626
+ pointer-events: none;
1627
+ }
1628
+ .story-block-body { padding: 2.5rem; display: flex; flex-direction: column; justify-content: center; }
1629
+ .story-heading {
1630
+ font-family: var(--font-display);
1631
+ font-size: clamp(1.4rem, 2.2vw, 1.9rem);
1632
+ font-weight: 700;
1633
+ color: var(--text-1);
1634
+ line-height: 1.15;
1635
+ margin: 0.4rem 0 0.85rem;
1636
+ }
1637
+ .story-body { font-size: 14px; color: var(--text-2); line-height: 1.75; margin-bottom: 1.25rem; }
1638
+ .story-cta {
1639
+ display: inline-flex;
1640
+ align-items: center;
1641
+ gap: 8px;
1642
+ background: var(--purple);
1643
+ color: #fff;
1644
+ font-size: 14px;
1645
+ font-weight: 600;
1646
+ padding: 0.65rem 1.25rem;
1647
+ border-radius: 100px;
1648
+ width: fit-content;
1649
+ transition: background 0.2s, transform 0.2s;
1650
+ }
1651
+ .story-cta:hover { background: var(--purple-mid); transform: translateY(-1px); }
1652
+
1653
+ .ways-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr)); gap: 1.25rem; }
1654
+ .ways-card {
1655
+ display: flex;
1656
+ flex-direction: column;
1657
+ border-radius: 18px;
1658
+ overflow: hidden;
1659
+ background: #fff;
1660
+ border: 1px solid var(--border);
1661
+ box-shadow: 0 4px 24px rgba(28, 20, 32, 0.05);
1662
+ transition: transform 0.25s, box-shadow 0.25s;
1663
+ }
1664
+ .ways-card:hover { transform: translateY(-3px); box-shadow: 0 14px 40px rgba(28, 20, 32, 0.08); }
1665
+ .ways-card img,
1666
+ .ways-card video { width: 100%; height: auto; aspect-ratio: auto; object-fit: contain; display: block; }
1667
+ .ways-card-body { padding: 1.35rem 1.5rem 1.5rem; display: flex; flex-direction: column; gap: 0.65rem; flex: 1; }
1668
+ .ways-card-body h3 { font-size: 1rem; font-weight: 700; color: var(--text-1); line-height: 1.25; }
1669
+ .ways-card-body p { font-size: 13px; color: var(--text-2); line-height: 1.65; flex: 1; }
1670
+
1671
+ /* CTA / stats bands */
1672
+ .cta-band-inner,
1673
+ .stats-band-inner {
1674
+ display: flex;
1675
+ align-items: center;
1676
+ justify-content: space-between;
1677
+ gap: 2rem;
1678
+ flex-wrap: wrap;
1679
+ padding: clamp(2.5rem, 5vw, 3.5rem) 0;
1680
+ }
1681
+ .cta-band-heading {
1682
+ font-family: var(--font-display);
1683
+ font-size: clamp(1.35rem, 2.5vw, 1.85rem);
1684
+ font-weight: 700;
1685
+ color: var(--text-1);
1686
+ line-height: 1.15;
1687
+ margin-bottom: 0.35rem;
1688
+ }
1689
+ .cta-band-sub { font-size: 14px; color: var(--text-2); line-height: 1.6; max-width: 520px; }
1690
+ .cta-band-left { display: flex; gap: 1rem; align-items: flex-start; color: var(--purple); }
1691
+ .cta-action-row { display: flex; gap: 0.75rem; flex-wrap: wrap; }
1692
+ .cta-action-btn {
1693
+ display: inline-flex;
1694
+ align-items: center;
1695
+ gap: 5px;
1696
+ font-size: 13px;
1697
+ font-weight: 600;
1698
+ color: var(--text-1);
1699
+ padding: 0.55rem 1rem;
1700
+ border-radius: 100px;
1701
+ border: 1px solid var(--border-md);
1702
+ background: #fff;
1703
+ transition: background 0.2s, transform 0.2s;
1704
+ cursor: pointer;
1705
+ font-family: inherit;
1706
+ text-decoration: none;
1707
+ appearance: none;
1708
+ }
1709
+ .cta-action-btn:hover { background: var(--bg-2); transform: translateY(-1px); }
1710
+
1711
+ .progress-bar { height: 8px; border-radius: 999px; background: rgba(107, 33, 232, 0.12); overflow: hidden; }
1712
+ .progress-fill { height: 100%; border-radius: 999px; background: linear-gradient(90deg, var(--purple), var(--purple-light)); }
1713
+ .progress-label { font-size: 12px; color: var(--text-2); margin-top: 0.35rem; }
1714
+
1715
+ /* Footer layout (render_site_nav.js) */
1716
+ .site-footer .footer-grid {
1717
+ display: grid;
1718
+ grid-template-columns: 1.5fr 1fr 1.4fr 1fr 0.9fr;
1719
+ gap: 2rem;
1720
+ padding-bottom: 2rem;
1721
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
1722
+ margin-bottom: 1.5rem;
1723
+ }
1724
+ /* Match header mark weight (~90px = --header-h + 18) */
1725
+ .site-footer .footer-brand-logo {
1726
+ display: block;
1727
+ height: 90px;
1728
+ width: 90px;
1729
+ object-fit: contain;
1730
+ margin-bottom: 1rem;
1731
+ }
1732
+ .footer-tagline { font-size: 13px; color: rgba(255, 255, 255, 0.62); line-height: 1.65; max-width: 240px; }
1733
+ .footer-iam-mark {
1734
+ display: inline-flex;
1735
+ align-items: center;
1736
+ gap: 8px;
1737
+ text-decoration: none;
1738
+ color: inherit;
1739
+ }
1740
+ .footer-iam-label {
1741
+ font-size: 11px;
1742
+ font-weight: 600;
1743
+ letter-spacing: 0.06em;
1744
+ text-transform: uppercase;
1745
+ color: rgba(255, 255, 255, 0.32);
1746
+ }
1747
+ .footer-iam-logo {
1748
+ height: 52px;
1749
+ width: auto;
1750
+ max-width: 160px;
1751
+ object-fit: contain;
1752
+ opacity: 0.85;
1753
+ transition: opacity 0.2s;
1754
+ }
1755
+ .footer-iam-mark:hover .footer-iam-logo { opacity: 1; }
1756
+ .footer-col-label {
1757
+ font-size: var(--footer-col-label-size, 15px);
1758
+ font-weight: 700;
1759
+ letter-spacing: 0.1em;
1760
+ text-transform: uppercase;
1761
+ color: rgba(255, 255, 255, 0.42);
1762
+ margin-bottom: 0.875rem;
1763
+ }
1764
+ .footer-links { list-style: none; display: flex; flex-direction: column; gap: 0.5rem; }
1765
+ .footer-links a { font-size: 13px; color: rgba(255, 255, 255, 0.62); transition: color 0.2s; }
1766
+ .footer-links a:hover { color: #fff; }
1767
+ .footer-org-row { display: flex; flex-direction: column; gap: 0.4rem; font-size: 13px; color: rgba(255, 255, 255, 0.62); }
1768
+ .footer-org-row a { color: var(--purple-light); }
1769
+ .footer-dev-label { font-size: 10px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; color: rgba(255, 255, 255, 0.38); margin-bottom: 0.5rem; }
1770
+ .footer-dev img { height: 28px; width: auto; opacity: 0.55; transition: opacity 0.2s; }
1771
+ .footer-dev img:hover { opacity: 0.85; }
1772
+ .footer-bottom {
1773
+ display: flex;
1774
+ align-items: center;
1775
+ justify-content: space-between;
1776
+ gap: 1rem;
1777
+ flex-wrap: wrap;
1778
+ font-size: 13px;
1779
+ color: rgba(255, 255, 255, 0.42);
1780
+ }
1781
+ .footer-ein { margin: 0; }
1782
+ .footer-trust-badges {
1783
+ display: flex;
1784
+ flex-direction: column;
1785
+ align-items: flex-start;
1786
+ gap: 14px;
1787
+ margin-top: 1rem;
1788
+ }
1789
+ .footer-org-row + .footer-trust-badges { margin-top: 1.1rem; }
1790
+ .footer-social-icons + .footer-trust-badges { margin-top: 1rem; }
1791
+ .footer-bottom .footer-trust-badges {
1792
+ flex-direction: row;
1793
+ align-items: center;
1794
+ margin-top: 0;
1795
+ gap: 12px;
1796
+ }
1797
+ .footer-trust-item {
1798
+ display: flex;
1799
+ flex-direction: column;
1800
+ align-items: flex-start;
1801
+ gap: 8px;
1802
+ }
1803
+ .footer-trust-caption {
1804
+ margin: 0;
1805
+ font-size: 13px;
1806
+ font-weight: 600;
1807
+ color: rgba(255, 255, 255, 0.78);
1808
+ line-height: 1.35;
1809
+ }
1810
+ .footer-trust-caption--empty {
1811
+ color: rgba(255, 255, 255, 0.38);
1812
+ font-style: italic;
1813
+ font-weight: 500;
1814
+ }
1815
+ .footer-trust {
1816
+ display: inline-flex;
1817
+ align-items: center;
1818
+ text-decoration: none;
1819
+ line-height: 0;
1820
+ }
1821
+ .footer-trust img {
1822
+ width: auto;
1823
+ object-fit: contain;
1824
+ opacity: 0.92;
1825
+ transition: opacity 180ms;
1826
+ }
1827
+ .footer-trust:hover img { opacity: 1; }
1828
+
1829
+ @media (max-width: 900px) {
1830
+ .mission-card { grid-template-columns: 1fr; padding: 2rem; }
1831
+ .story-block { grid-template-columns: 1fr; }
1832
+ .pillars-row { grid-template-columns: 1fr 1fr; }
1833
+ .ways-grid { grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); }
1834
+ .site-footer .footer-grid { grid-template-columns: 1fr 1fr; }
1835
+ }
1836
+ @media (max-width: 760px) {
1837
+ .pillars-row,
1838
+ .ways-grid { grid-template-columns: 1fr; }
1839
+ .site-footer .footer-grid { grid-template-columns: 1fr; }
1840
+ .cta-band-inner { flex-direction: column; align-items: flex-start; }
1841
+ }
1842
+
1843
+ /* ── HOME: impact stats, campaigns, newsletter ─────────────── */
1844
+ .stats-band { padding: 0; }
1845
+ .stats-row {
1846
+ display: grid;
1847
+ grid-template-columns: repeat(4, 1fr);
1848
+ border: 1px solid var(--border);
1849
+ border-radius: 16px;
1850
+ overflow: hidden;
1851
+ background: #fff;
1852
+ box-shadow: 0 4px 24px rgba(28, 20, 32, 0.05);
1853
+ }
1854
+ .stat-cell {
1855
+ display: flex;
1856
+ flex-direction: column;
1857
+ align-items: center;
1858
+ text-align: center;
1859
+ padding: 2rem 1rem;
1860
+ border-right: 1px solid var(--border);
1861
+ gap: 0.2rem;
1862
+ }
1863
+ .stat-cell:last-child { border-right: none; }
1864
+ .stat-cell svg { color: var(--purple); opacity: 0.7; margin-bottom: 0.5rem; flex-shrink: 0; }
1865
+ .stat-num {
1866
+ font-family: var(--font-display);
1867
+ font-size: clamp(1.8rem, 3vw, 2.6rem);
1868
+ font-weight: 700;
1869
+ color: var(--purple);
1870
+ line-height: 1;
1871
+ }
1872
+ .stat-lbl { font-size: 12px; font-weight: 600; color: var(--text-1); }
1873
+ .stat-sub-lbl { font-size: 11px; color: var(--text-2); line-height: 1.45; max-width: 18ch; }
1874
+
1875
+ .cc-grid {
1876
+ display: grid;
1877
+ grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr);
1878
+ gap: clamp(2rem, 4vw, 3rem);
1879
+ align-items: start;
1880
+ }
1881
+ .cc-col { min-width: 0; }
1882
+ .cc-community-label { margin-bottom: 0.25rem; }
1883
+ .cc-header {
1884
+ display: flex;
1885
+ align-items: baseline;
1886
+ justify-content: space-between;
1887
+ gap: 1rem;
1888
+ margin-bottom: 1.25rem;
1889
+ }
1890
+ .cc-view-all { font-size: 12px; font-weight: 600; color: var(--purple); white-space: nowrap; }
1891
+
1892
+ .home-campaigns { background: var(--bg-2); }
1893
+ .camp-list { display: flex; flex-direction: column; gap: 0.85rem; }
1894
+ .camp-item {
1895
+ display: flex;
1896
+ align-items: stretch;
1897
+ border-radius: 14px;
1898
+ overflow: hidden;
1899
+ border: 1px solid var(--border);
1900
+ background: #fff;
1901
+ box-shadow: 0 2px 12px rgba(28, 20, 32, 0.04);
1902
+ }
1903
+ a.camp-item-link {
1904
+ text-decoration: none;
1905
+ color: inherit;
1906
+ transition: transform 180ms var(--ease), box-shadow 180ms var(--ease), border-color 180ms var(--ease);
1907
+ }
1908
+ a.camp-item-link:hover {
1909
+ transform: translateY(-1px);
1910
+ border-color: rgba(107, 33, 168, 0.22);
1911
+ box-shadow: 0 8px 24px rgba(78, 26, 82, 0.10);
1912
+ }
1913
+ .camp-item-thumb {
1914
+ width: 92px;
1915
+ min-width: 92px;
1916
+ align-self: stretch;
1917
+ background: rgba(107, 33, 168, 0.06);
1918
+ flex-shrink: 0;
1919
+ }
1920
+ .camp-item-thumb img,
1921
+ .camp-item > img {
1922
+ width: 100%;
1923
+ height: 100%;
1924
+ min-height: 92px;
1925
+ object-fit: cover;
1926
+ display: block;
1927
+ }
1928
+ .camp-item > img {
1929
+ width: 92px;
1930
+ min-width: 92px;
1931
+ min-height: 92px;
1932
+ }
1933
+ .camp-item-body {
1934
+ padding: 0.85rem 1rem;
1935
+ flex: 1;
1936
+ min-width: 0;
1937
+ display: flex;
1938
+ flex-direction: column;
1939
+ justify-content: center;
1940
+ }
1941
+ .camp-item-title { font-size: 13px; font-weight: 700; color: var(--text-1); margin-bottom: 0.2rem; line-height: 1.3; }
1942
+ .camp-item-desc {
1943
+ font-size: 12px;
1944
+ color: var(--text-2);
1945
+ margin-bottom: 0.45rem;
1946
+ line-height: 1.5;
1947
+ display: -webkit-box;
1948
+ -webkit-line-clamp: 2;
1949
+ -webkit-box-orient: vertical;
1950
+ overflow: hidden;
1951
+ }
1952
+ .progress-label--open { color: var(--purple); font-weight: 600; }
1953
+ .camp-empty {
1954
+ padding: 1rem 1.1rem;
1955
+ border-radius: 14px;
1956
+ border: 1px dashed var(--border-md);
1957
+ background: rgba(255, 255, 255, 0.65);
1958
+ font-size: 13px;
1959
+ color: var(--text-2);
1960
+ line-height: 1.55;
1961
+ }
1962
+ .camp-empty a { color: var(--purple); font-weight: 600; }
1963
+
1964
+ .comm-list { display: flex; flex-direction: column; gap: 1rem; margin-top: 0.85rem; }
1965
+ .comm-item { display: flex; gap: 0.75rem; align-items: flex-start; }
1966
+ .comm-item img {
1967
+ width: 48px;
1968
+ height: 48px;
1969
+ min-width: 48px;
1970
+ border-radius: 10px;
1971
+ object-fit: cover;
1972
+ flex-shrink: 0;
1973
+ display: block;
1974
+ }
1975
+ .comm-item-text { font-size: 13px; color: var(--text-1); font-weight: 500; line-height: 1.4; margin-bottom: 0.15rem; }
1976
+ .comm-item-date { font-size: 11px; color: var(--text-3); }
1977
+ .comm-see-all { display: inline-block; margin-top: 0.75rem; font-size: 13px; font-weight: 600; color: var(--purple); }
1978
+
1979
+ .cta-band-right { display: flex; flex-direction: column; gap: 0.75rem; align-items: flex-end; }
1980
+ .cta-email-form {
1981
+ display: flex;
1982
+ flex-wrap: wrap;
1983
+ border: 1px solid var(--border-md);
1984
+ border-radius: 10px;
1985
+ overflow: hidden;
1986
+ background: #fff;
1987
+ max-width: 100%;
1988
+ }
1989
+ .cta-email-input {
1990
+ background: transparent;
1991
+ border: none;
1992
+ padding: 0.65rem 1rem;
1993
+ font-size: 14px;
1994
+ color: var(--text-1);
1995
+ outline: none;
1996
+ width: min(220px, 100%);
1997
+ font-family: var(--font-body);
1998
+ flex: 1;
1999
+ min-width: 160px;
2000
+ }
2001
+ .cta-email-input::placeholder { color: var(--text-3); }
2002
+ .cta-email-btn {
2003
+ background: var(--purple);
2004
+ color: #fff;
2005
+ border: none;
2006
+ padding: 0.65rem 1.1rem;
2007
+ font-size: 13px;
2008
+ font-weight: 700;
2009
+ cursor: pointer;
2010
+ font-family: var(--font-body);
2011
+ white-space: nowrap;
2012
+ }
2013
+ .cta-email-btn:hover { filter: brightness(1.06); }
2014
+ .cta-email-status { width: 100%; margin: 0.35rem 0 0; color: var(--text-2); font-size: 0.8rem; }
2015
+
2016
+ @media (max-width: 900px) {
2017
+ .stats-row { grid-template-columns: repeat(2, 1fr); }
2018
+ .stat-cell:nth-child(2) { border-right: none; }
2019
+ .stat-cell:nth-child(1),
2020
+ .stat-cell:nth-child(2) { border-bottom: 1px solid var(--border); }
2021
+ .cc-grid { grid-template-columns: 1fr; gap: 2.5rem; }
2022
+ }
2023
+ @media (max-width: 560px) {
2024
+ .stats-row { grid-template-columns: 1fr; }
2025
+ .stat-cell { border-right: none; border-bottom: 1px solid var(--border); }
2026
+ .stat-cell:last-child { border-bottom: none; }
2027
+ .cta-band-right { align-items: stretch; width: 100%; }
2028
+ .cta-email-form { flex-direction: column; }
2029
+ .cta-email-input { width: 100%; }
2030
+ .cta-email-btn { width: 100%; }
2031
+ }
2032
+
2033
+
2034
+ /* ── HOME HERO WATERCOLOR ───────────────────────────────────── */
2035
+ /* ── HOME HERO — watercolor field (prototype v2) ───────────────
2036
+ Scoped to .hero-watercolor inside .hero-mockup
2037
+ Palette + CTAs read --tg-* tokens from .theme-plum-glass (revert via cms_themes)
2038
+ ───────────────────────────────────────────────────────────── */
2039
+
2040
+ .hero-watercolor {
2041
+ --coc-cream: var(--tg-coc-cream, #fdf1e3);
2042
+ --coc-cream-warm: var(--tg-coc-cream-warm, #f9e3cf);
2043
+ --coc-peach: var(--tg-coc-peach, #f4cdb4);
2044
+ --coc-blush: var(--tg-coc-blush, #f2b8c0);
2045
+ --coc-rose: var(--tg-coc-rose, #e98da8);
2046
+ --coc-pink: var(--tg-coc-pink, #dd5f9b);
2047
+ --coc-magenta: var(--tg-coc-magenta, #c23689);
2048
+ --coc-purple: var(--tg-coc-purple, #8e3a7d);
2049
+ --coc-purple-deep: var(--tg-coc-purple-deep, #6f2270);
2050
+ --coc-plum: var(--tg-coc-plum, #4e1a52);
2051
+ --coc-ink: var(--tg-coc-ink, #2e102f);
2052
+ --hero-headline: var(--coc-ink);
2053
+ --hero-accent: var(--coc-purple-deep);
2054
+ --hero-body: #4a2a44;
2055
+ --badge-bg: rgba(255, 255, 255, 0.55);
2056
+ --badge-border: rgba(142, 58, 125, 0.22);
2057
+ --badge-text: var(--coc-purple-deep);
2058
+ --card-frame: rgba(255, 255, 255, 0.92);
2059
+ --card-shadow: 0 24px 60px -18px rgba(78, 26, 82, 0.45), 0 10px 24px -12px rgba(194, 54, 137, 0.25);
2060
+ --watermark: rgba(203, 96, 150, 0.12);
2061
+ --hero-display: "Playfair Display", Georgia, serif;
2062
+
2063
+ position: relative;
2064
+ isolation: isolate;
2065
+ overflow: hidden;
2066
+ min-height: calc(100vh * 0.85);
2067
+ display: flex;
2068
+ flex-direction: column;
2069
+ justify-content: center;
2070
+ margin-bottom: 0;
2071
+ margin-top: calc(-1 * var(--header-h));
2072
+ padding: calc(var(--header-h) + clamp(1.75rem, 4vh, 3.25rem)) 0 clamp(1.75rem, 4vh, 3rem);
2073
+ color: var(--hero-body);
2074
+ /* Copy column: bright cream spotlight · image side: magenta wash · top: plum header handoff */
2075
+ background:
2076
+ radial-gradient(ellipse 78% 88% at 18% 46%, var(--coc-cream) 0%, rgba(253, 241, 227, 0.96) 32%, rgba(253, 241, 227, 0) 68%),
2077
+ radial-gradient(ellipse 88% 78% at 86% 44%, rgba(194, 54, 137, 0.52) 0%, rgba(221, 95, 155, 0.22) 38%, rgba(194, 54, 137, 0) 72%),
2078
+ radial-gradient(ellipse 70% 55% at 100% 8%, rgba(194, 54, 137, 0.38) 0%, rgba(194, 54, 137, 0) 62%),
2079
+ linear-gradient(180deg, rgba(44, 10, 56, 0.48) 0%, rgba(58, 16, 72, 0.16) 14%, rgba(58, 16, 72, 0) 36%),
2080
+ radial-gradient(ellipse 65% 45% at 50% 100%, rgba(233, 141, 168, 0.18) 0%, transparent 68%),
2081
+ linear-gradient(158deg, var(--coc-blush) 0%, var(--coc-peach) 42%, var(--coc-cream-warm) 100%);
2082
+ }
2083
+
2084
+ .hero-watercolor .hero-header-bridge {
2085
+ position: absolute;
2086
+ top: 0;
2087
+ left: 0;
2088
+ right: 0;
2089
+ height: var(--header-h);
2090
+ z-index: 2;
2091
+ pointer-events: none;
2092
+ background: linear-gradient(
2093
+ 180deg,
2094
+ rgba(44, 10, 56, 0.55) 0%,
2095
+ rgba(58, 16, 72, 0.22) 55%,
2096
+ transparent 100%
2097
+ );
2098
+ }
2099
+
2100
+ .hero-watercolor::before {
2101
+ content: "";
2102
+ position: absolute;
2103
+ inset: 0;
2104
+ z-index: 0;
2105
+ pointer-events: none;
2106
+ background:
2107
+ radial-gradient(ellipse 55% 70% at 14% 52%, rgba(255, 255, 255, 0.35) 0%, transparent 72%),
2108
+ radial-gradient(ellipse 50% 60% at 92% 38%, rgba(194, 54, 137, 0.14) 0%, transparent 70%);
2109
+ }
2110
+
2111
+ .hero-watercolor::after {
2112
+ content: "";
2113
+ position: absolute;
2114
+ inset: 0;
2115
+ z-index: 1;
2116
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
2117
+ opacity: 0.04;
2118
+ mix-blend-mode: overlay;
2119
+ pointer-events: none;
2120
+ }
2121
+
2122
+ .hero-watercolor .hero-waves {
2123
+ position: absolute;
2124
+ inset: 0;
2125
+ z-index: 0;
2126
+ pointer-events: none;
2127
+ overflow: hidden;
2128
+ }
2129
+ .hero-watercolor .hero-waves svg {
2130
+ position: absolute;
2131
+ width: 130%;
2132
+ height: auto;
2133
+ }
2134
+ .hero-watercolor .hero-waves .wave-a { top: -14%; left: -18%; mix-blend-mode: multiply; opacity: 0.12; filter: blur(14px); }
2135
+ .hero-watercolor .hero-waves .wave-b { bottom: -24%; right: -20%; mix-blend-mode: multiply; opacity: 0.24; filter: blur(14px); }
2136
+ .hero-watercolor .hero-waves .wave-c { top: 30%; right: -22%; left: auto; mix-blend-mode: soft-light; opacity: 0.55; filter: blur(10px); }
2137
+ .hero-watercolor .hero-waves .wave-d { bottom: -6%; left: -15%; width: 140%; mix-blend-mode: multiply; opacity: 0.10; filter: blur(6px); }
2138
+
2139
+ .hero-watercolor .hero-mark {
2140
+ position: absolute;
2141
+ z-index: 1;
2142
+ pointer-events: none;
2143
+ color: var(--watermark);
2144
+ }
2145
+ .hero-watercolor .hero-mark.paw {
2146
+ top: 42%;
2147
+ right: -1.5%;
2148
+ width: clamp(120px, 14vw, 220px);
2149
+ transform: rotate(18deg);
2150
+ }
2151
+ .hero-watercolor .hero-mark.heart {
2152
+ bottom: -4%;
2153
+ right: 8%;
2154
+ width: clamp(160px, 20vw, 320px);
2155
+ transform: rotate(-8deg);
2156
+ color: rgba(255, 255, 255, 0.18);
2157
+ }
2158
+
2159
+ .hero-watercolor .hero-mockup-fade {
2160
+ position: absolute;
2161
+ left: 0;
2162
+ right: 0;
2163
+ bottom: 0;
2164
+ z-index: 2;
2165
+ height: clamp(110px, 18vh, 200px);
2166
+ background: linear-gradient(
2167
+ to bottom,
2168
+ transparent 0%,
2169
+ color-mix(in srgb, var(--bg-2) 25%, rgba(253, 241, 227, 0.4)) 38%,
2170
+ var(--bg-2) 100%
2171
+ );
2172
+ }
2173
+
2174
+ .hero-watercolor .hero-mockup-inner {
2175
+ position: relative;
2176
+ z-index: 3;
2177
+ width: 100%;
2178
+ }
2179
+
2180
+ .hero-watercolor .hero-grid {
2181
+ display: grid;
2182
+ grid-template-columns: minmax(0, 1.15fr) minmax(0, 0.95fr);
2183
+ align-items: center;
2184
+ gap: clamp(2rem, 5vw, 4.5rem);
2185
+ max-width: 1280px;
2186
+ margin: 0 auto;
2187
+ width: 100%;
2188
+ }
2189
+
2190
+ .hero-watercolor .hero-eyebrow {
2191
+ display: inline-flex;
2192
+ align-items: center;
2193
+ gap: 0.6rem;
2194
+ padding: 0.55rem 1.15rem;
2195
+ border-radius: 999px;
2196
+ background: var(--badge-bg);
2197
+ border: 1px solid var(--badge-border);
2198
+ backdrop-filter: blur(8px);
2199
+ -webkit-backdrop-filter: blur(8px);
2200
+ font-size: 0.72rem;
2201
+ font-weight: 700;
2202
+ letter-spacing: 0.14em;
2203
+ text-transform: uppercase;
2204
+ color: var(--badge-text);
2205
+ margin-bottom: clamp(1.2rem, 2.5vh, 1.8rem);
2206
+ }
2207
+ .hero-watercolor .hero-eyebrow svg { width: 14px; height: 14px; flex: none; }
2208
+
2209
+ .hero-watercolor .hero-title {
2210
+ font-family: var(--hero-display);
2211
+ font-weight: 700;
2212
+ font-size: clamp(2.4rem, 5.2vw, 4.6rem);
2213
+ line-height: 1.06;
2214
+ letter-spacing: -0.015em;
2215
+ color: var(--hero-headline);
2216
+ margin-bottom: clamp(1rem, 2vh, 1.5rem);
2217
+ text-wrap: balance;
2218
+ }
2219
+ .hero-watercolor .hero-title-accent {
2220
+ font-style: italic;
2221
+ font-weight: 800;
2222
+ color: var(--hero-accent);
2223
+ white-space: nowrap;
2224
+ }
2225
+ .hero-watercolor .hero-doodle-heart {
2226
+ display: inline-block;
2227
+ width: 0.58em;
2228
+ height: 0.58em;
2229
+ margin-left: 0.1em;
2230
+ vertical-align: -0.06em;
2231
+ color: var(--coc-rose);
2232
+ }
2233
+
2234
+ .hero-watercolor .hero-lede {
2235
+ max-width: 34rem;
2236
+ font-size: clamp(1rem, 1.2vw, 1.1rem);
2237
+ line-height: 1.65;
2238
+ font-weight: 500;
2239
+ color: var(--hero-body);
2240
+ }
2241
+
2242
+ .hero-watercolor .hero-cta-slot { margin-top: clamp(1.5rem, 3vh, 2.2rem); }
2243
+ .hero-watercolor .hero-actions {
2244
+ display: flex;
2245
+ flex-wrap: wrap;
2246
+ gap: 0.75rem;
2247
+ }
2248
+
2249
+ .hero-watercolor .hero-media {
2250
+ position: relative;
2251
+ justify-self: end;
2252
+ width: min(100%, 460px);
2253
+ }
2254
+ .hero-watercolor .hero-photo {
2255
+ border-radius: 30px;
2256
+ background: var(--card-frame);
2257
+ padding: 12px;
2258
+ box-shadow: var(--card-shadow);
2259
+ }
2260
+ .hero-watercolor .hero-photo img {
2261
+ display: block;
2262
+ width: 100%;
2263
+ aspect-ratio: 1 / 1;
2264
+ object-fit: cover;
2265
+ object-position: center 22%;
2266
+ border-radius: 20px;
2267
+ }
2268
+
2269
+ /* CTAs — theme tokens */
2270
+ .hero-watercolor .hero-cta-primary {
2271
+ background: linear-gradient(135deg, var(--tg-hero-cta-primary-start, var(--coc-purple-deep)) 0%, var(--tg-hero-cta-primary-end, var(--coc-plum)) 100%);
2272
+ border: 1px solid rgba(255, 255, 255, 0.16);
2273
+ box-shadow: 0 10px 28px var(--tg-hero-cta-primary-shadow, rgba(78, 26, 82, 0.32));
2274
+ color: #fff;
2275
+ }
2276
+ .hero-watercolor .hero-cta-primary .hero-cta-icon {
2277
+ background: rgba(255, 255, 255, 0.14);
2278
+ color: #fff;
2279
+ }
2280
+ .hero-watercolor .hero-cta-primary .hero-cta-label,
2281
+ .hero-watercolor .hero-cta-primary .hero-cta-sub { color: #fff; }
2282
+ .hero-watercolor .hero-cta-primary .hero-cta-sub { color: rgba(255, 255, 255, 0.78); }
2283
+ .hero-watercolor .hero-cta-primary:hover {
2284
+ box-shadow: 0 14px 34px rgba(78, 26, 82, 0.42);
2285
+ }
2286
+
2287
+ .hero-watercolor .hero-cta-ghost {
2288
+ background: rgba(255, 255, 255, 0.72);
2289
+ border: 1px solid rgba(142, 58, 125, 0.22);
2290
+ box-shadow: 0 4px 16px rgba(78, 26, 82, 0.08);
2291
+ backdrop-filter: blur(8px);
2292
+ -webkit-backdrop-filter: blur(8px);
2293
+ }
2294
+ .hero-watercolor .hero-cta-ghost .hero-cta-label { color: var(--coc-ink); }
2295
+ .hero-watercolor .hero-cta-ghost .hero-cta-icon {
2296
+ background: rgba(142, 58, 125, 0.10);
2297
+ color: var(--coc-purple-deep);
2298
+ }
2299
+
2300
+ @media (max-width: 900px) {
2301
+ .hero-watercolor .hero-grid { grid-template-columns: 1fr; }
2302
+ .hero-watercolor .hero-media {
2303
+ justify-self: center;
2304
+ order: -1;
2305
+ margin-bottom: 0.5rem;
2306
+ }
2307
+ .hero-watercolor .hero-mark.paw { display: none; }
2308
+ .hero-watercolor .hero-title-accent { white-space: normal; }
2309
+ }
2310
+
2311
+
2312
+ /* ── CONTACT PAGE (/contact) ────────────────────────────────── */
2313
+ /* ── CONTACT PAGE (/contact) ─────────────────────────────────── */
2314
+
2315
+ .contact-hero {
2316
+ padding: clamp(2rem, 5vw, 3.5rem) 0 clamp(2.5rem, 6vw, 4rem);
2317
+ }
2318
+
2319
+ .contact-hero-grid {
2320
+ display: grid;
2321
+ grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
2322
+ align-items: center;
2323
+ gap: clamp(2rem, 5vw, 4rem);
2324
+ }
2325
+
2326
+ .contact-hero-copy {
2327
+ text-align: left;
2328
+ }
2329
+
2330
+ .contact-hero-copy .eyebrow {
2331
+ color: var(--tg-coc-magenta, var(--purple));
2332
+ }
2333
+
2334
+ .contact-hero-copy h1 {
2335
+ font-family: var(--font-display, "Playfair Display", Georgia, serif);
2336
+ font-size: clamp(2rem, 4.5vw, 3.25rem);
2337
+ font-weight: 700;
2338
+ letter-spacing: -0.025em;
2339
+ color: var(--text-1);
2340
+ margin-bottom: 1rem;
2341
+ line-height: 1.08;
2342
+ }
2343
+
2344
+ .contact-hero-copy p {
2345
+ font-size: clamp(15px, 1.15vw, 17px);
2346
+ color: var(--text-2);
2347
+ max-width: 34rem;
2348
+ line-height: 1.7;
2349
+ }
2350
+
2351
+ .contact-social-actions {
2352
+ display: flex;
2353
+ flex-wrap: wrap;
2354
+ gap: 0.75rem;
2355
+ margin-top: clamp(1.5rem, 3vw, 2rem);
2356
+ }
2357
+
2358
+ .contact-social-btn {
2359
+ min-height: 48px;
2360
+ padding: 0 1.35rem;
2361
+ font-size: 14px;
2362
+ gap: 0.55rem;
2363
+ }
2364
+
2365
+ .contact-social-btn svg {
2366
+ width: 18px;
2367
+ height: 18px;
2368
+ flex-shrink: 0;
2369
+ }
2370
+
2371
+ .contact-hero-photo {
2372
+ justify-self: end;
2373
+ width: min(100%, 540px);
2374
+ }
2375
+
2376
+ .contact-hero-frame {
2377
+ border-radius: 28px;
2378
+ background: var(--card-frame, rgba(255, 255, 255, 0.72));
2379
+ padding: 12px;
2380
+ box-shadow: var(--card-shadow, 0 24px 60px rgba(78, 26, 82, 0.12));
2381
+ border: 1px solid rgba(142, 58, 125, 0.1);
2382
+ }
2383
+
2384
+ .contact-hero-frame img {
2385
+ display: block;
2386
+ width: 100%;
2387
+ aspect-ratio: 16 / 9;
2388
+ object-fit: cover;
2389
+ object-position: center 32%;
2390
+ border-radius: 18px;
2391
+ }
2392
+
2393
+ .contact-body {
2394
+ padding: clamp(3.5rem, 7vw, 6rem) 0;
2395
+ }
2396
+
2397
+ .contact-grid {
2398
+ display: grid;
2399
+ grid-template-columns: 1fr 1.1fr;
2400
+ gap: clamp(2rem, 5vw, 4.5rem);
2401
+ align-items: start;
2402
+ }
2403
+
2404
+ .contact-info {
2405
+ display: flex;
2406
+ flex-direction: column;
2407
+ gap: 1.5rem;
2408
+ }
2409
+
2410
+ .contact-info-card {
2411
+ background: var(--surface);
2412
+ border: 1px solid var(--border);
2413
+ border-radius: 16px;
2414
+ padding: 1.35rem 1.5rem;
2415
+ }
2416
+
2417
+ .contact-info-card h3 {
2418
+ font-family: var(--font-body);
2419
+ font-size: 12px;
2420
+ font-weight: 600;
2421
+ letter-spacing: 0.08em;
2422
+ text-transform: uppercase;
2423
+ color: var(--tg-coc-magenta, var(--purple));
2424
+ margin-bottom: 0.85rem;
2425
+ }
2426
+
2427
+ .contact-info-card p,
2428
+ .contact-info-card a {
2429
+ font-size: 15px;
2430
+ color: var(--text-2);
2431
+ line-height: 1.65;
2432
+ display: block;
2433
+ }
2434
+
2435
+ .contact-info-card a {
2436
+ color: var(--tg-coc-purple-deep, var(--purple));
2437
+ text-decoration: underline;
2438
+ text-underline-offset: 3px;
2439
+ }
2440
+
2441
+ .contact-info-card a:hover {
2442
+ color: var(--tg-coc-magenta, var(--purple-mid));
2443
+ }
2444
+
2445
+ .contact-info-card .contact-help-cta {
2446
+ margin-top: 0.75rem;
2447
+ text-decoration: none;
2448
+ }
2449
+
2450
+ .contact-form-wrap {
2451
+ background: var(--surface);
2452
+ border: 1px solid var(--border);
2453
+ border-radius: 20px;
2454
+ padding: clamp(1.75rem, 4vw, 2.75rem);
2455
+ }
2456
+
2457
+ .contact-form-wrap h2 {
2458
+ font-family: var(--font-display, "Playfair Display", Georgia, serif);
2459
+ font-size: clamp(1.35rem, 2.5vw, 1.85rem);
2460
+ font-weight: 700;
2461
+ color: var(--text-1);
2462
+ margin-bottom: 0.35rem;
2463
+ letter-spacing: -0.02em;
2464
+ }
2465
+
2466
+ .contact-form-wrap p.form-sub {
2467
+ font-size: 14px;
2468
+ color: var(--text-2);
2469
+ margin-bottom: 1.5rem;
2470
+ line-height: 1.6;
2471
+ }
2472
+
2473
+ .cf-form {
2474
+ display: grid;
2475
+ gap: 0.85rem;
2476
+ }
2477
+
2478
+ .cf-row {
2479
+ display: grid;
2480
+ grid-template-columns: 1fr 1fr;
2481
+ gap: 0.75rem;
2482
+ }
2483
+
2484
+ .cf-field {
2485
+ display: flex;
2486
+ flex-direction: column;
2487
+ gap: 0.35rem;
2488
+ }
2489
+
2490
+ .cf-field label {
2491
+ font-size: 11px;
2492
+ font-weight: 600;
2493
+ letter-spacing: 0.07em;
2494
+ text-transform: uppercase;
2495
+ color: var(--text-2);
2496
+ }
2497
+
2498
+ .cf-field input,
2499
+ .cf-field select,
2500
+ .cf-field textarea {
2501
+ width: 100%;
2502
+ padding: 11px 14px;
2503
+ border: 1.5px solid var(--border-md);
2504
+ border-radius: 10px;
2505
+ font-size: 15px;
2506
+ font-family: var(--font-body);
2507
+ color: var(--text-1);
2508
+ background: var(--bg);
2509
+ outline: none;
2510
+ transition: border-color 150ms, box-shadow 150ms;
2511
+ box-sizing: border-box;
2512
+ }
2513
+
2514
+ .cf-field input:focus,
2515
+ .cf-field select:focus,
2516
+ .cf-field textarea:focus {
2517
+ border-color: var(--tg-coc-purple, var(--purple));
2518
+ box-shadow: 0 0 0 3px rgba(107, 33, 232, 0.12);
2519
+ }
2520
+
2521
+ .cf-field textarea {
2522
+ resize: vertical;
2523
+ min-height: 100px;
2524
+ }
2525
+
2526
+ .cf-submit {
2527
+ width: 100%;
2528
+ min-height: 48px;
2529
+ margin-top: 0.25rem;
2530
+ font-size: 15px;
2531
+ }
2532
+
2533
+ .cf-submit:disabled {
2534
+ opacity: 0.6;
2535
+ cursor: not-allowed;
2536
+ }
2537
+
2538
+ .cf-success {
2539
+ display: none;
2540
+ text-align: center;
2541
+ padding: 2rem 0;
2542
+ }
2543
+
2544
+ .cf-success-icon {
2545
+ font-size: 48px;
2546
+ margin-bottom: 0.75rem;
2547
+ }
2548
+
2549
+ .cf-success-title {
2550
+ font-size: 1.3rem;
2551
+ font-weight: 700;
2552
+ color: var(--text-1);
2553
+ margin-bottom: 0.5rem;
2554
+ }
2555
+
2556
+ .cf-success-msg {
2557
+ font-size: 14px;
2558
+ color: var(--text-2);
2559
+ line-height: 1.6;
2560
+ }
2561
+
2562
+ /* ── CONTACT HERO FRAME — team photo variant ─── */
2563
+ .contact-hero-frame--team {
2564
+ border-radius: 16px;
2565
+ padding: 0;
2566
+ background: transparent;
2567
+ box-shadow: 0 8px 32px rgba(78, 26, 82, 0.10);
2568
+ border: 1px solid rgba(142, 58, 125, 0.1);
2569
+ overflow: hidden;
2570
+ }
2571
+
2572
+ .contact-hero-frame--team img {
2573
+ display: block;
2574
+ width: 100%;
2575
+ height: auto;
2576
+ aspect-ratio: unset;
2577
+ object-fit: contain;
2578
+ object-position: center;
2579
+ border-radius: 0;
2580
+ max-height: 480px;
2581
+ }
2582
+
2583
+ /* ── TEAM SECTION ─────────────────────────────── */
2584
+ .team-section {
2585
+ padding: clamp(4rem, 8vw, 6.25rem) 0;
2586
+ background: var(--bg-2);
2587
+ border-top: 1px solid var(--border);
2588
+ }
2589
+
2590
+ .team-header {
2591
+ text-align: center;
2592
+ margin-bottom: clamp(2.5rem, 5vw, 3.5rem);
2593
+ }
2594
+
2595
+ .team-header h2 {
2596
+ font-family: var(--font-display, "Playfair Display", Georgia, serif);
2597
+ font-size: clamp(2rem, 4vw, 3rem);
2598
+ font-weight: 700;
2599
+ letter-spacing: -0.025em;
2600
+ color: var(--text-1);
2601
+ margin-bottom: 0.75rem;
2602
+ }
2603
+
2604
+ .team-header p {
2605
+ font-size: 16px;
2606
+ color: var(--text-2);
2607
+ max-width: 30rem;
2608
+ margin: 0 auto;
2609
+ line-height: 1.65;
2610
+ }
2611
+
2612
+ /* Two-column layout: photo left, member list right */
2613
+ .team-layout {
2614
+ display: grid;
2615
+ grid-template-columns: 1fr 1fr;
2616
+ gap: clamp(2rem, 5vw, 4rem);
2617
+ align-items: start;
2618
+ }
2619
+
2620
+ .team-photo-col img.team-group-photo {
2621
+ display: block;
2622
+ width: 100%;
2623
+ height: auto;
2624
+ border-radius: 12px;
2625
+ object-fit: contain;
2626
+ box-shadow: 0 8px 32px rgba(78, 26, 82, 0.10);
2627
+ border: 1px solid rgba(142, 58, 125, 0.08);
2628
+ }
2629
+
2630
+ .team-member-list {
2631
+ display: flex;
2632
+ flex-direction: column;
2633
+ gap: 0;
2634
+ border: 1px solid var(--border);
2635
+ border-radius: 14px;
2636
+ overflow: hidden;
2637
+ background: var(--bg);
2638
+ }
2639
+
2640
+ .team-member {
2641
+ display: flex;
2642
+ align-items: baseline;
2643
+ justify-content: space-between;
2644
+ padding: 1rem 1.35rem;
2645
+ border-bottom: 1px solid var(--border);
2646
+ gap: 1rem;
2647
+ }
2648
+
2649
+ .team-member:last-child { border-bottom: none; }
2650
+
2651
+ .team-member-name {
2652
+ font-size: 15px;
2653
+ font-weight: 600;
2654
+ color: var(--text-1);
2655
+ flex-shrink: 0;
2656
+ }
2657
+
2658
+ .team-member-role {
2659
+ font-size: 12px;
2660
+ font-weight: 600;
2661
+ letter-spacing: 0.05em;
2662
+ text-transform: uppercase;
2663
+ color: var(--tg-coc-magenta, #9b2c8e);
2664
+ text-align: right;
2665
+ }
2666
+
2667
+ .team-note {
2668
+ margin-top: 1.25rem;
2669
+ font-size: 13px;
2670
+ color: var(--text-3, var(--text-2));
2671
+ line-height: 1.6;
2672
+ font-style: italic;
2673
+ }
2674
+
2675
+ @media (max-width: 900px) {
2676
+ .contact-hero-grid {
2677
+ grid-template-columns: 1fr;
2678
+ }
2679
+
2680
+ .contact-hero-photo {
2681
+ justify-self: stretch;
2682
+ width: 100%;
2683
+ order: -1;
2684
+ }
2685
+
2686
+ .contact-hero-copy {
2687
+ text-align: center;
2688
+ }
2689
+
2690
+ .contact-hero-copy p {
2691
+ margin-inline: auto;
2692
+ }
2693
+
2694
+ .contact-social-actions {
2695
+ justify-content: center;
2696
+ }
2697
+ }
2698
+
2699
+ @media (max-width: 760px) {
2700
+ .contact-grid {
2701
+ grid-template-columns: 1fr;
2702
+ }
2703
+
2704
+ .cf-row {
2705
+ grid-template-columns: 1fr;
2706
+ }
2707
+
2708
+ .team-layout {
2709
+ grid-template-columns: 1fr;
2710
+ }
2711
+
2712
+ .team-photo-col img.team-group-photo {
2713
+ max-height: 320px;
2714
+ object-fit: cover;
2715
+ object-position: center top;
2716
+ }
2717
+ }
2718
+
2719
+
2720
+ /* ── DONATE V2 (render_donate_v2.js) ──────────────────────── */
2721
+ /* Donate v2 layout — CMS sections from render_donate_v2.js (dv2-* classes).
2722
+ Accent maps to /api/cms/brand/tokens.css so dashboard color saves apply live. */
2723
+
2724
+ body[data-route="/donate"] main {
2725
+ background: #F5F2E9;
2726
+ }
2727
+
2728
+ .dv2 {
2729
+ --dv2-cream: #F5F2E9;
2730
+ --dv2-navy: #0f1f3d;
2731
+ --dv2-red: var(--red-accent, #8B1E1E);
2732
+ --dv2-red-deep: color-mix(in srgb, var(--red-accent, #8B1E1E) 78%, #000 22%);
2733
+ --dv2-text: #1a1622;
2734
+ --dv2-muted: #4A5568;
2735
+ --dv2-card: #faf7f2;
2736
+ --dv2-border: rgba(15, 31, 61, 0.12);
2737
+ background: var(--dv2-cream);
2738
+ color: var(--dv2-text);
2739
+ font-family: var(--font-body);
2740
+ }
2741
+ .dv2-wrap {
2742
+ width: 100%;
2743
+ max-width: 1180px;
2744
+ margin: 0 auto;
2745
+ padding: 0 clamp(1.25rem, 4vw, 2.5rem);
2746
+ }
2747
+
2748
+ /* Section 1 — Freedom Fest hero */
2749
+ .dv2-hero { padding: clamp(2.5rem, 6vw, 4.5rem) 0 0; }
2750
+ .dv2-hero-head {
2751
+ text-align: center;
2752
+ max-width: 720px;
2753
+ margin: 0 auto clamp(2rem, 5vw, 3rem);
2754
+ }
2755
+ .dv2-kicker {
2756
+ font-size: 0.78rem;
2757
+ font-weight: 700;
2758
+ letter-spacing: 0.22em;
2759
+ text-transform: uppercase;
2760
+ color: var(--dv2-navy);
2761
+ margin-bottom: 0.75rem;
2762
+ }
2763
+ .dv2-ribbon {
2764
+ font-family: var(--font-display);
2765
+ font-size: clamp(2.4rem, 7vw, 4.2rem);
2766
+ line-height: 1.05;
2767
+ color: var(--dv2-red);
2768
+ margin-bottom: 0.5rem;
2769
+ }
2770
+ .dv2-tagline {
2771
+ font-family: var(--font-display);
2772
+ font-style: italic;
2773
+ font-weight: 400;
2774
+ font-size: clamp(1.35rem, 3.5vw, 2rem);
2775
+ color: var(--dv2-navy);
2776
+ margin-bottom: 1.25rem;
2777
+ }
2778
+ .dv2-lead {
2779
+ font-size: clamp(1rem, 2.2vw, 1.125rem);
2780
+ line-height: 1.7;
2781
+ color: var(--dv2-muted);
2782
+ margin-bottom: 1.75rem;
2783
+ }
2784
+ .dv2-pass-row {
2785
+ display: grid;
2786
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2787
+ gap: clamp(1rem, 3vw, 1.75rem);
2788
+ max-width: 960px;
2789
+ margin: 0 auto;
2790
+ }
2791
+ .dv2-pass {
2792
+ background: var(--dv2-card);
2793
+ border: 1px solid var(--dv2-border);
2794
+ border-radius: 16px;
2795
+ padding: 1rem 1rem 1.25rem;
2796
+ text-align: center;
2797
+ box-shadow: 0 8px 28px rgba(15, 31, 61, 0.06);
2798
+ }
2799
+ .dv2-pass-name {
2800
+ font-family: var(--font-display);
2801
+ font-size: 1.25rem;
2802
+ color: var(--dv2-navy);
2803
+ margin-bottom: 0.75rem;
2804
+ }
2805
+ .dv2-pass-media,
2806
+ .dv2-media-slot {
2807
+ border-radius: 12px;
2808
+ overflow: hidden;
2809
+ background: #e8e4db;
2810
+ aspect-ratio: 4 / 5;
2811
+ }
2812
+ .dv2-pass-media img,
2813
+ .dv2-media-slot img,
2814
+ .dv2-pass-media .dv2-ph,
2815
+ .dv2-media-slot .dv2-ph {
2816
+ width: 100%;
2817
+ height: 100%;
2818
+ object-fit: cover;
2819
+ }
2820
+ /* Story + campaign grid cards — never crop flyers/photos */
2821
+ .dv2-story-card .dv2-pass-media.dv2-story-media,
2822
+ .dv2-grid-card .dv2-pass-media.dv2-story-media {
2823
+ aspect-ratio: unset;
2824
+ min-height: clamp(180px, 28vw, 260px);
2825
+ max-height: min(420px, 52vw);
2826
+ height: auto;
2827
+ display: flex;
2828
+ align-items: center;
2829
+ justify-content: center;
2830
+ background: #ebe6dc;
2831
+ }
2832
+ .dv2-story-card .dv2-pass-media.dv2-story-media img,
2833
+ .dv2-grid-card .dv2-pass-media.dv2-story-media img {
2834
+ width: 100%;
2835
+ height: auto;
2836
+ max-height: min(400px, 50vw);
2837
+ object-fit: contain;
2838
+ object-position: center;
2839
+ background: #ebe6dc;
2840
+ }
2841
+ .dv2-pass-status {
2842
+ margin-top: 0.85rem;
2843
+ font-size: 0.82rem;
2844
+ font-weight: 600;
2845
+ letter-spacing: 0.06em;
2846
+ text-transform: uppercase;
2847
+ color: var(--dv2-red);
2848
+ }
2849
+ .dv2-pass-status.is-sponsored { color: #2d6a4f; }
2850
+ .dv2-ph {
2851
+ display: flex;
2852
+ align-items: center;
2853
+ justify-content: center;
2854
+ min-height: 100%;
2855
+ padding: 1rem;
2856
+ text-align: center;
2857
+ font-size: 0.85rem;
2858
+ color: var(--dv2-muted);
2859
+ background: linear-gradient(145deg, #ebe6dc, #e0dbd0);
2860
+ }
2861
+ .dv2-bar {
2862
+ margin-top: clamp(2.5rem, 5vw, 3.5rem);
2863
+ background: var(--dv2-navy);
2864
+ color: #f5f2e9;
2865
+ padding: clamp(1.25rem, 3vw, 1.75rem) clamp(1.25rem, 4vw, 2.5rem);
2866
+ display: flex;
2867
+ flex-wrap: wrap;
2868
+ align-items: center;
2869
+ justify-content: space-between;
2870
+ gap: 0.75rem 2rem;
2871
+ }
2872
+ .dv2-bar-strong {
2873
+ font-family: var(--font-display);
2874
+ font-size: clamp(1rem, 2.5vw, 1.35rem);
2875
+ letter-spacing: 0.04em;
2876
+ font-weight: 700;
2877
+ }
2878
+ .dv2-bar-note {
2879
+ font-size: 0.95rem;
2880
+ color: rgba(245, 242, 233, 0.82);
2881
+ max-width: 42ch;
2882
+ }
2883
+
2884
+ /* Buttons — alias legacy dv2-btn to site btn styles */
2885
+ .dv2-btn {
2886
+ display: inline-flex;
2887
+ align-items: center;
2888
+ justify-content: center;
2889
+ gap: 8px;
2890
+ min-height: 44px;
2891
+ padding: 0.7rem 1.6rem;
2892
+ border-radius: var(--radius-md, 14px);
2893
+ font-family: var(--font-body);
2894
+ font-size: 14px;
2895
+ font-weight: 600;
2896
+ letter-spacing: 0.01em;
2897
+ text-transform: none;
2898
+ cursor: pointer;
2899
+ border: none;
2900
+ backdrop-filter: blur(12px);
2901
+ -webkit-backdrop-filter: blur(12px);
2902
+ transition: transform 180ms var(--ease), box-shadow 180ms var(--ease);
2903
+ }
2904
+ .dv2-btn:hover { transform: translateY(-1px); }
2905
+ .dv2-btn-red,
2906
+ .dv2-btn-primary {
2907
+ color: #fff;
2908
+ background: linear-gradient(135deg, rgba(160, 104, 255, 0.92), rgba(109, 58, 220, 0.84));
2909
+ border: 1px solid rgba(255, 255, 255, 0.18);
2910
+ box-shadow: 0 12px 28px rgba(124, 58, 237, 0.28), inset 0 1px 0 rgba(255, 255, 255, 0.2);
2911
+ }
2912
+ .dv2-btn-primary:hover,
2913
+ .dv2-btn-red:hover {
2914
+ box-shadow: 0 18px 40px rgba(124, 58, 237, 0.38), inset 0 1px 0 rgba(255, 255, 255, 0.26);
2915
+ }
2916
+ .dv2-btn-ghost {
2917
+ color: var(--light-text);
2918
+ background: var(--surface, rgba(255,255,255,0.72));
2919
+ border: 1px solid var(--btn-ghost-border, rgba(26,22,34,0.12));
2920
+ box-shadow: none;
2921
+ }
2922
+ .dv2-btn-row {
2923
+ display: flex;
2924
+ flex-wrap: wrap;
2925
+ gap: 0.75rem;
2926
+ margin-top: 1.5rem;
2927
+ }
2928
+
2929
+ /* Section 2 — Medical story split */
2930
+ .dv2-split { padding: clamp(3rem, 7vw, 5rem) 0; }
2931
+ .dv2-split-grid {
2932
+ display: grid;
2933
+ grid-template-columns: 1fr 380px;
2934
+ gap: clamp(2rem, 5vw, 3.5rem);
2935
+ align-items: start;
2936
+ }
2937
+ .dv2-ey {
2938
+ font-size: 0.78rem;
2939
+ font-weight: 700;
2940
+ letter-spacing: 0.14em;
2941
+ text-transform: uppercase;
2942
+ color: var(--dv2-red);
2943
+ margin-bottom: 0.65rem;
2944
+ }
2945
+ .dv2-h2 {
2946
+ font-family: var(--font-display);
2947
+ font-size: clamp(1.85rem, 4.5vw, 2.75rem);
2948
+ color: var(--dv2-navy);
2949
+ margin-bottom: 1.25rem;
2950
+ }
2951
+ .dv2-prose p,
2952
+ .dv2-prose-sm {
2953
+ font-size: 1rem;
2954
+ line-height: 1.75;
2955
+ color: var(--dv2-muted);
2956
+ }
2957
+ .dv2-prose p + p { margin-top: 1rem; }
2958
+ .dv2-prose-center { text-align: center; max-width: 640px; margin: 0 auto; }
2959
+ .dv2-media-video {
2960
+ margin-top: 1.5rem;
2961
+ width: 100%;
2962
+ max-width: 320px;
2963
+ }
2964
+ .dv2-media-slot.dv2-media-video {
2965
+ padding: 0;
2966
+ background: transparent;
2967
+ border: none;
2968
+ overflow: visible;
2969
+ }
2970
+ .dv2-fb-video {
2971
+ position: relative;
2972
+ width: 100%;
2973
+ max-width: 320px;
2974
+ margin: 0 auto;
2975
+ aspect-ratio: 267 / 476;
2976
+ border-radius: 14px;
2977
+ overflow: hidden;
2978
+ background: #111;
2979
+ box-shadow: 0 18px 40px rgba(15, 31, 61, 0.12);
2980
+ }
2981
+ .dv2-fb-video iframe {
2982
+ position: absolute;
2983
+ inset: 0;
2984
+ display: block;
2985
+ width: 100%;
2986
+ height: 100%;
2987
+ min-height: 0;
2988
+ border: 0;
2989
+ }
2990
+ .dv2-story-card .dv2-fb-video { max-width: 100%; }
2991
+ .dv2-pass-media--featured {
2992
+ aspect-ratio: 16 / 10;
2993
+ min-height: 0;
2994
+ margin: 0.75rem 0 1rem;
2995
+ overflow: hidden;
2996
+ }
2997
+ .dv2-pass-media--featured img {
2998
+ width: 100%;
2999
+ height: 100%;
3000
+ min-height: 0;
3001
+ object-fit: contain;
3002
+ object-position: center;
3003
+ background: #ebe6dc;
3004
+ }
3005
+ .dv2-story-media {
3006
+ overflow: hidden;
3007
+ border-radius: 12px;
3008
+ background: #ebe6dc;
3009
+ display: flex;
3010
+ align-items: center;
3011
+ justify-content: center;
3012
+ }
3013
+ .dv2-story-media img {
3014
+ width: 100%;
3015
+ height: 100%;
3016
+ object-fit: contain;
3017
+ display: block;
3018
+ background: #ebe6dc;
3019
+ }
3020
+ .dv2-story-grid--two {
3021
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3022
+ align-items: stretch;
3023
+ gap: clamp(1rem, 2.5vw, 1.5rem);
3024
+ }
3025
+
3026
+ /* Full-bleed hero story cards (Sunflower / Kita) */
3027
+ .dv2-hero-card {
3028
+ position: relative;
3029
+ border-radius: 18px;
3030
+ overflow: hidden;
3031
+ min-height: clamp(440px, 54vw, 580px);
3032
+ display: flex;
3033
+ align-items: flex-end;
3034
+ box-shadow: 0 16px 48px rgba(15, 31, 61, 0.14);
3035
+ border: none;
3036
+ padding: 0;
3037
+ background: #1a1622;
3038
+ }
3039
+ .dv2-hero-card--sponsored {
3040
+ box-shadow: 0 16px 48px rgba(45, 106, 79, 0.18);
3041
+ }
3042
+ .dv2-hero-card-media {
3043
+ position: absolute;
3044
+ inset: 0;
3045
+ z-index: 0;
3046
+ }
3047
+ .dv2-hero-card-media img {
3048
+ width: 100%;
3049
+ height: 100%;
3050
+ object-fit: cover;
3051
+ object-position: center center;
3052
+ display: block;
3053
+ }
3054
+ .dv2-hero-card-media--video .dv2-fb-video--cover {
3055
+ position: absolute;
3056
+ inset: 0;
3057
+ width: 100%;
3058
+ height: 100%;
3059
+ aspect-ratio: unset;
3060
+ border-radius: 0;
3061
+ overflow: hidden;
3062
+ background: #111;
3063
+ }
3064
+ .dv2-fb-video--cover iframe {
3065
+ position: absolute;
3066
+ top: 50%;
3067
+ left: 50%;
3068
+ width: 100%;
3069
+ height: 178%;
3070
+ min-width: 100%;
3071
+ min-height: 100%;
3072
+ transform: translate(-50%, -50%);
3073
+ border: 0;
3074
+ pointer-events: auto;
3075
+ }
3076
+ .dv2-hero-card-overlay {
3077
+ position: absolute;
3078
+ inset: 0;
3079
+ z-index: 1;
3080
+ background: linear-gradient(
3081
+ to top,
3082
+ rgba(11, 15, 26, 0.94) 0%,
3083
+ rgba(11, 15, 26, 0.72) 38%,
3084
+ rgba(11, 15, 26, 0.28) 68%,
3085
+ rgba(11, 15, 26, 0.12) 100%
3086
+ );
3087
+ pointer-events: none;
3088
+ }
3089
+ .dv2-hero-card-content {
3090
+ position: relative;
3091
+ z-index: 2;
3092
+ width: 100%;
3093
+ padding: clamp(1.35rem, 3.5vw, 2rem);
3094
+ color: #fff;
3095
+ }
3096
+ .dv2-hero-card-content .dv2-card-ey {
3097
+ color: rgba(255, 255, 255, 0.72);
3098
+ margin-bottom: 0.4rem;
3099
+ }
3100
+ .dv2-hero-card-content .dv2-card-title {
3101
+ color: #fff;
3102
+ margin-bottom: 0.55rem;
3103
+ font-size: clamp(1.35rem, 3vw, 1.65rem);
3104
+ text-shadow: 0 2px 16px rgba(0, 0, 0, 0.35);
3105
+ }
3106
+ .dv2-hero-card-content .dv2-prose-sm {
3107
+ color: rgba(255, 255, 255, 0.92);
3108
+ line-height: 1.55;
3109
+ margin-bottom: 0.45rem;
3110
+ text-shadow: 0 1px 8px rgba(0, 0, 0, 0.28);
3111
+ }
3112
+ .dv2-hero-card-content .dv2-muted {
3113
+ color: rgba(255, 255, 255, 0.78);
3114
+ font-size: 0.88rem;
3115
+ }
3116
+ .dv2-hero-card-content .dv2-card-stat {
3117
+ color: rgba(255, 255, 255, 0.88);
3118
+ margin: 0.35rem 0 0.85rem;
3119
+ font-weight: 600;
3120
+ }
3121
+ .dv2-hero-card-content .btn {
3122
+ margin-top: 0.85rem;
3123
+ width: auto;
3124
+ min-width: min(100%, 220px);
3125
+ }
3126
+
3127
+ .dv2-campaign-card,
3128
+ .dv2-story-card {
3129
+ background: var(--dv2-card);
3130
+ border: 1px solid var(--dv2-border);
3131
+ border-radius: 18px;
3132
+ padding: clamp(1.25rem, 3vw, 1.75rem);
3133
+ box-shadow: 0 12px 40px rgba(15, 31, 61, 0.08);
3134
+ }
3135
+ .dv2-card-ey {
3136
+ font-size: 0.72rem;
3137
+ font-weight: 700;
3138
+ letter-spacing: 0.16em;
3139
+ text-transform: uppercase;
3140
+ color: var(--dv2-muted);
3141
+ margin-bottom: 0.5rem;
3142
+ }
3143
+ .dv2-card-title {
3144
+ font-family: var(--font-display);
3145
+ font-size: 1.45rem;
3146
+ color: var(--dv2-navy);
3147
+ margin-bottom: 0.85rem;
3148
+ }
3149
+ .dv2-card-stat {
3150
+ font-size: 0.95rem;
3151
+ color: var(--dv2-muted);
3152
+ margin-bottom: 0.35rem;
3153
+ }
3154
+ .dv2-card-stat strong { color: var(--dv2-navy); }
3155
+ .dv2-progress {
3156
+ height: 10px;
3157
+ border-radius: 999px;
3158
+ background: #e4dfd4;
3159
+ overflow: hidden;
3160
+ margin: 1rem 0 1.25rem;
3161
+ }
3162
+ .dv2-progress-fill {
3163
+ height: 100%;
3164
+ border-radius: inherit;
3165
+ background: linear-gradient(90deg, var(--dv2-red), #c53030);
3166
+ }
3167
+ .dv2-card-label {
3168
+ font-size: 0.82rem;
3169
+ font-weight: 600;
3170
+ text-transform: uppercase;
3171
+ letter-spacing: 0.08em;
3172
+ color: var(--dv2-navy);
3173
+ margin-bottom: 0.5rem;
3174
+ }
3175
+ .dv2-list {
3176
+ list-style: none;
3177
+ margin: 0 0 1.25rem;
3178
+ padding: 0;
3179
+ }
3180
+ .dv2-list li {
3181
+ position: relative;
3182
+ padding-left: 1.1rem;
3183
+ font-size: 0.95rem;
3184
+ color: var(--dv2-muted);
3185
+ margin-bottom: 0.35rem;
3186
+ }
3187
+ .dv2-list li::before {
3188
+ content: "•";
3189
+ position: absolute;
3190
+ left: 0;
3191
+ color: var(--dv2-red);
3192
+ }
3193
+ .dv2-campaign-card .dv2-btn { width: 100%; margin-top: 0.5rem; }
3194
+
3195
+ /* Section 3 — Stories grid */
3196
+ .dv2-stories { padding: clamp(3rem, 7vw, 5rem) 0 clamp(3.5rem, 8vw, 5rem); }
3197
+ .dv2-stories-head { text-align: center; margin-bottom: clamp(2rem, 5vw, 3rem); }
3198
+ .dv2-story-grid {
3199
+ display: grid;
3200
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3201
+ gap: clamp(1.25rem, 3vw, 1.75rem);
3202
+ }
3203
+ .dv2-story-card--wide { grid-column: 1 / -1; max-width: 560px; }
3204
+ .dv2-story-card--sponsored { border-color: rgba(45, 106, 79, 0.25); }
3205
+ .dv2-story-card .dv2-pass-media { margin: 0.75rem 0 1rem; }
3206
+ .dv2-story-card .dv2-pass-media.dv2-story-media { margin: 0.75rem 0 1rem; }
3207
+ .dv2-story-card .dv2-btn { margin-top: 1rem; }
3208
+ .dv2-story-grid--cards {
3209
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
3210
+ gap: clamp(1.25rem, 3vw, 1.75rem);
3211
+ }
3212
+ .dv2-grid-card { display: flex; flex-direction: column; }
3213
+ .dv2-grid-card .dv2-btn { margin-top: auto; }
3214
+ .dv2-contact {
3215
+ padding: clamp(2rem, 5vw, 3rem) 0 clamp(5rem, 10vw, 7rem);
3216
+ }
3217
+ .dv2-contact-card {
3218
+ display: flex;
3219
+ align-items: center;
3220
+ justify-content: space-between;
3221
+ gap: 1.5rem;
3222
+ flex-wrap: wrap;
3223
+ background: var(--dv2-card);
3224
+ border: 1px solid var(--dv2-border);
3225
+ border-radius: 18px;
3226
+ padding: clamp(1.25rem, 3vw, 2rem) clamp(1.5rem, 4vw, 2.5rem);
3227
+ box-shadow: 0 12px 40px rgba(15, 31, 61, 0.08);
3228
+ }
3229
+ .dv2-contact-copy { flex: 1; min-width: 220px; }
3230
+ .dv2-contact-copy .dv2-h2 { margin-bottom: 0.5rem; }
3231
+ .dv2-contact .btn { flex-shrink: 0; }
3232
+ .dv2-muted { color: rgba(74, 85, 104, 0.75); }
3233
+ .dv2-trust {
3234
+ text-align: center;
3235
+ margin-top: clamp(2rem, 5vw, 3rem);
3236
+ font-size: 0.82rem;
3237
+ font-weight: 600;
3238
+ letter-spacing: 0.06em;
3239
+ text-transform: uppercase;
3240
+ color: var(--dv2-muted);
3241
+ }
3242
+
3243
+ /* Share campaign modal */
3244
+ #dv2-share-overlay {
3245
+ position: fixed;
3246
+ inset: 0;
3247
+ z-index: 9998;
3248
+ background: rgba(15, 23, 42, 0.46);
3249
+ backdrop-filter: blur(6px);
3250
+ display: flex;
3251
+ align-items: center;
3252
+ justify-content: center;
3253
+ padding: 16px;
3254
+ }
3255
+ #dv2-share-overlay[hidden] { display: none; }
3256
+ .dv2-share-panel {
3257
+ width: min(420px, 100%);
3258
+ background: #faf7f2;
3259
+ border: 1px solid var(--dv2-border);
3260
+ border-radius: 18px;
3261
+ padding: 22px;
3262
+ box-shadow: 0 24px 60px rgba(15, 31, 61, 0.18);
3263
+ }
3264
+ .dv2-share-title {
3265
+ margin: 0 0 6px;
3266
+ font-family: Fraunces, Georgia, serif;
3267
+ font-size: 1.35rem;
3268
+ color: var(--dv2-navy);
3269
+ }
3270
+ .dv2-share-copy {
3271
+ margin: 0 0 16px;
3272
+ color: var(--dv2-muted);
3273
+ font-size: 0.92rem;
3274
+ line-height: 1.5;
3275
+ }
3276
+ .dv2-share-actions {
3277
+ display: grid;
3278
+ gap: 10px;
3279
+ }
3280
+ .dv2-share-btn {
3281
+ display: flex;
3282
+ align-items: center;
3283
+ justify-content: center;
3284
+ gap: 8px;
3285
+ width: 100%;
3286
+ min-height: 44px;
3287
+ border-radius: 10px;
3288
+ border: 1px solid var(--dv2-border);
3289
+ background: #fff;
3290
+ color: var(--dv2-navy);
3291
+ font-size: 0.92rem;
3292
+ font-weight: 700;
3293
+ cursor: pointer;
3294
+ backdrop-filter: blur(8px);
3295
+ }
3296
+ .dv2-share-btn:hover { transform: translateY(-1px); }
3297
+ .dv2-share-btn--fb { background: #1877F2; border-color: #1877F2; color: #fff; }
3298
+ .dv2-share-btn--email { background: var(--dv2-navy); border-color: var(--dv2-navy); color: #fff; }
3299
+ .dv2-share-close {
3300
+ margin-top: 12px;
3301
+ width: 100%;
3302
+ min-height: 40px;
3303
+ border: none;
3304
+ background: transparent;
3305
+ color: var(--dv2-muted);
3306
+ font-weight: 700;
3307
+ cursor: pointer;
3308
+ }
3309
+ .dv2-share-status {
3310
+ min-height: 18px;
3311
+ margin-top: 10px;
3312
+ font-size: 0.82rem;
3313
+ font-weight: 700;
3314
+ color: #2d6a4f;
3315
+ text-align: center;
3316
+ }
3317
+
3318
+ @media (max-width: 960px) {
3319
+ .dv2-split-grid { grid-template-columns: 1fr; }
3320
+ .dv2-campaign-card { max-width: 520px; }
3321
+ }
3322
+ @media (max-width: 720px) {
3323
+ .dv2-pass-row { grid-template-columns: 1fr; max-width: 320px; }
3324
+ .dv2-bar { flex-direction: column; text-align: center; }
3325
+ .dv2-bar-note { max-width: none; }
3326
+ .dv2-story-grid { grid-template-columns: 1fr; }
3327
+ .dv2-story-card--wide { max-width: none; }
3328
+ .dv2-btn-row { flex-direction: column; }
3329
+ .dv2-btn-row .dv2-btn { width: 100%; }
3330
+ .dv2-contact-card { flex-direction: column; align-items: stretch; }
3331
+ .dv2-contact .btn { width: 100%; }
3332
+ .dv2-alt-pay-row { flex-direction: column; align-items: flex-start; gap: 8px; }
3333
+ .dv2-alt-pay-btn { width: 100%; justify-content: center; }
3334
+ .dv2-share-row { gap: 6px; }
3335
+ }
3336
+
3337
+ /* Glassmorphic purple CTA — used for primary donate actions */
3338
+ .btn-glass-purple {
3339
+ display: inline-flex;
3340
+ align-items: center;
3341
+ justify-content: center;
3342
+ gap: 8px;
3343
+ min-height: 46px;
3344
+ padding: 0.75rem 1.75rem;
3345
+ border-radius: 12px;
3346
+ font-family: var(--font-body);
3347
+ font-size: 0.9rem;
3348
+ font-weight: 600;
3349
+ letter-spacing: 0.02em;
3350
+ cursor: pointer;
3351
+ text-decoration: none;
3352
+ color: #fff;
3353
+ background: linear-gradient(135deg, rgba(123, 47, 190, 0.92), rgba(107, 45, 139, 0.84));
3354
+ border: 1px solid rgba(255, 255, 255, 0.22);
3355
+ box-shadow:
3356
+ 0 8px 24px rgba(107, 45, 139, 0.32),
3357
+ inset 0 1px 0 rgba(255, 255, 255, 0.2);
3358
+ backdrop-filter: blur(12px);
3359
+ -webkit-backdrop-filter: blur(12px);
3360
+ transition: transform 0.15s ease, box-shadow 0.15s ease, opacity 0.15s ease;
3361
+ }
3362
+ .btn-glass-purple:hover {
3363
+ transform: translateY(-1px);
3364
+ box-shadow:
3365
+ 0 14px 36px rgba(107, 45, 139, 0.42),
3366
+ inset 0 1px 0 rgba(255, 255, 255, 0.26);
3367
+ }
3368
+ .btn-glass-purple:active { transform: translateY(0); }
3369
+
3370
+ /* Freedom Ride win state layout */
3371
+ .dv2-hero--complete { padding: clamp(2.5rem, 5vw, 4rem) 0 0; }
3372
+ .dv2-win-wrap {
3373
+ display: grid;
3374
+ grid-template-columns: 480px 1fr;
3375
+ gap: clamp(2.5rem, 5vw, 4rem);
3376
+ align-items: center;
3377
+ }
3378
+ .dv2-win-img {
3379
+ border-radius: 20px;
3380
+ overflow: hidden;
3381
+ box-shadow: 0 20px 56px rgba(15, 31, 61, 0.16);
3382
+ }
3383
+ .dv2-win-img img {
3384
+ width: 100%;
3385
+ height: auto;
3386
+ display: block;
3387
+ object-fit: contain;
3388
+ }
3389
+ .dv2-kicker--win {
3390
+ font-size: 0.78rem;
3391
+ font-weight: 700;
3392
+ letter-spacing: 0.18em;
3393
+ text-transform: uppercase;
3394
+ color: #2d6a4f;
3395
+ margin-bottom: 0.85rem;
3396
+ }
3397
+ .dv2-ribbon--win {
3398
+ font-family: var(--font-display);
3399
+ font-size: clamp(1.75rem, 3vw, 2.5rem);
3400
+ font-weight: 700;
3401
+ line-height: 1.15;
3402
+ color: var(--dv2-navy);
3403
+ margin-bottom: 1rem;
3404
+ }
3405
+ .dv2-win-body {
3406
+ font-size: 1rem;
3407
+ line-height: 1.75;
3408
+ color: var(--dv2-muted);
3409
+ margin-bottom: 0;
3410
+ }
3411
+ /* Social pills — FB/IG branded buttons with icons */
3412
+ .dv2-social-pill {
3413
+ display: inline-flex;
3414
+ align-items: center;
3415
+ gap: 8px;
3416
+ padding: 10px 18px;
3417
+ border-radius: 999px;
3418
+ font-size: 0.875rem;
3419
+ font-weight: 600;
3420
+ text-decoration: none;
3421
+ border: 1.5px solid transparent;
3422
+ transition: opacity 0.15s, transform 0.15s;
3423
+ line-height: 1;
3424
+ }
3425
+ .dv2-social-pill:hover { opacity: 0.85; transform: translateY(-1px); }
3426
+ .dv2-social-pill svg { flex-shrink: 0; }
3427
+ .dv2-social-pill--fb { background: #1877F2; color: #fff; border-color: #1877F2; }
3428
+ .dv2-social-pill--ig { background: #fff; color: #111; border-color: rgba(0,0,0,0.15); }
3429
+ .dv2-social-pill--ig svg { color: #E1306C; }
3430
+
3431
+ .dv2-win-actions {
3432
+ display: flex;
3433
+ flex-wrap: wrap;
3434
+ gap: 0.75rem;
3435
+ margin-top: 1.75rem;
3436
+ }
3437
+
3438
+ /* Shared button shape reset — pill for ghost, rect for primary */
3439
+ .btn-glass-purple,
3440
+ .btn.btn-glass-purple {
3441
+ display: inline-flex;
3442
+ align-items: center;
3443
+ justify-content: center;
3444
+ gap: 8px;
3445
+ min-height: 46px;
3446
+ padding: 0.75rem 1.75rem;
3447
+ border-radius: 12px;
3448
+ font-family: var(--font-body);
3449
+ font-size: 0.9rem;
3450
+ font-weight: 600;
3451
+ letter-spacing: 0.02em;
3452
+ cursor: pointer;
3453
+ text-decoration: none;
3454
+ color: #fff;
3455
+ background: linear-gradient(135deg, rgba(123, 47, 190, 0.95), rgba(78, 26, 94, 0.9));
3456
+ border: 1px solid rgba(255, 255, 255, 0.2);
3457
+ box-shadow:
3458
+ 0 6px 20px rgba(107, 45, 139, 0.35),
3459
+ inset 0 1px 0 rgba(255, 255, 255, 0.18);
3460
+ backdrop-filter: blur(12px);
3461
+ -webkit-backdrop-filter: blur(12px);
3462
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
3463
+ }
3464
+ .btn-glass-purple:hover,
3465
+ .btn.btn-glass-purple:hover {
3466
+ transform: translateY(-1px);
3467
+ box-shadow:
3468
+ 0 12px 32px rgba(107, 45, 139, 0.45),
3469
+ inset 0 1px 0 rgba(255, 255, 255, 0.24);
3470
+ }
3471
+ .btn-glass-purple:active { transform: translateY(0); }
3472
+
3473
+ /* Ghost button — rounded pill, brand purple border */
3474
+ .btn.btn-ghost,
3475
+ button.btn-ghost {
3476
+ display: inline-flex;
3477
+ align-items: center;
3478
+ justify-content: center;
3479
+ min-height: 46px;
3480
+ padding: 0.7rem 1.6rem;
3481
+ border-radius: 999px;
3482
+ font-family: var(--font-body);
3483
+ font-size: 0.9rem;
3484
+ font-weight: 500;
3485
+ cursor: pointer;
3486
+ text-decoration: none;
3487
+ color: var(--dv2-navy);
3488
+ background: rgba(255, 255, 255, 0.6);
3489
+ border: 1.5px solid rgba(107, 45, 139, 0.3);
3490
+ transition: border-color 0.15s ease, background 0.15s ease;
3491
+ }
3492
+ .btn.btn-ghost:hover,
3493
+ button.btn-ghost:hover {
3494
+ border-color: rgba(107, 45, 139, 0.6);
3495
+ background: rgba(255, 255, 255, 0.9);
3496
+ }
3497
+
3498
+ /* Primary donate button — glass purple, rect */
3499
+ .btn.btn-primary,
3500
+ button.btn-primary {
3501
+ min-height: 46px;
3502
+ padding: 0.75rem 1.75rem;
3503
+ border-radius: 12px;
3504
+ font-size: 0.9rem;
3505
+ font-weight: 600;
3506
+ color: #fff;
3507
+ background: linear-gradient(135deg, rgba(123, 47, 190, 0.95), rgba(78, 26, 94, 0.9));
3508
+ border: 1px solid rgba(255, 255, 255, 0.2);
3509
+ box-shadow: 0 6px 20px rgba(107, 45, 139, 0.3);
3510
+ backdrop-filter: blur(12px);
3511
+ -webkit-backdrop-filter: blur(12px);
3512
+ cursor: pointer;
3513
+ transition: transform 0.15s, box-shadow 0.15s;
3514
+ }
3515
+ .btn.btn-primary:hover { transform: translateY(-1px); box-shadow: 0 10px 28px rgba(107, 45, 139, 0.42); }
3516
+
3517
+ /* CTA stack — donate button + alt pay + share, stacked with breathing room */
3518
+ .dv2-cta-stack {
3519
+ margin-top: 1.75rem;
3520
+ display: flex;
3521
+ flex-direction: column;
3522
+ gap: 1rem;
3523
+ }
3524
+ .dv2-cta-stack .dv2-btn-row {
3525
+ margin-top: 0;
3526
+ }
3527
+
3528
+ /* Inline share row */
3529
+ .dv2-share-row {
3530
+ display: flex;
3531
+ align-items: center;
3532
+ gap: 8px;
3533
+ flex-wrap: wrap;
3534
+ }
3535
+ .dv2-share-label {
3536
+ font-size: 0.75rem;
3537
+ font-weight: 700;
3538
+ letter-spacing: 0.1em;
3539
+ text-transform: uppercase;
3540
+ color: var(--dv2-muted);
3541
+ white-space: nowrap;
3542
+ margin-right: 2px;
3543
+ }
3544
+ .dv2-share-icon-btn {
3545
+ display: inline-flex;
3546
+ align-items: center;
3547
+ gap: 6px;
3548
+ height: 34px;
3549
+ padding: 0 12px;
3550
+ border-radius: 999px;
3551
+ border: 1.5px solid rgba(15, 31, 61, 0.15);
3552
+ background: rgba(255, 255, 255, 0.75);
3553
+ cursor: pointer;
3554
+ transition: background 0.15s, border-color 0.15s, transform 0.15s;
3555
+ color: var(--dv2-navy);
3556
+ text-decoration: none;
3557
+ font-size: 0.8rem;
3558
+ font-weight: 600;
3559
+ letter-spacing: 0.01em;
3560
+ backdrop-filter: blur(8px);
3561
+ }
3562
+ .dv2-share-icon-btn span { line-height: 1; }
3563
+ .dv2-share-icon-btn:hover {
3564
+ background: rgba(255, 255, 255, 0.96);
3565
+ border-color: rgba(107, 45, 139, 0.4);
3566
+ transform: translateY(-1px);
3567
+ }
3568
+ .dv2-share-icon-btn--fb { color: #1877F2; border-color: rgba(24, 119, 242, 0.25); }
3569
+ .dv2-share-icon-btn--fb:hover { background: rgba(24, 119, 242, 0.06); border-color: rgba(24, 119, 242, 0.5); }
3570
+ .dv2-share-icon-btn--mail { color: var(--dv2-navy); }
3571
+ .dv2-share-icon-btn--copy { color: var(--dv2-muted); }
3572
+
3573
+ /* Alternate payment row — PayPal / Venmo */
3574
+ .dv2-alt-pay-row {
3575
+ display: flex;
3576
+ align-items: center;
3577
+ gap: 8px;
3578
+ flex-wrap: wrap;
3579
+ padding: 0.85rem 1rem;
3580
+ border-radius: 12px;
3581
+ background: rgba(255, 255, 255, 0.55);
3582
+ border: 1px solid rgba(15, 31, 61, 0.1);
3583
+ }
3584
+ .dv2-alt-pay-label {
3585
+ font-size: 0.75rem;
3586
+ font-weight: 700;
3587
+ letter-spacing: 0.08em;
3588
+ text-transform: uppercase;
3589
+ color: var(--dv2-muted);
3590
+ white-space: nowrap;
3591
+ flex: 0 0 auto;
3592
+ }
3593
+ .dv2-alt-pay-btn {
3594
+ display: inline-flex;
3595
+ align-items: center;
3596
+ gap: 6px;
3597
+ height: 36px;
3598
+ padding: 0 14px;
3599
+ border-radius: 999px;
3600
+ border: 1.5px solid transparent;
3601
+ font-size: 0.82rem;
3602
+ font-weight: 700;
3603
+ cursor: pointer;
3604
+ text-decoration: none;
3605
+ transition: transform 0.15s, box-shadow 0.15s;
3606
+ }
3607
+ .dv2-alt-pay-btn:hover { transform: translateY(-1px); }
3608
+ .dv2-alt-pay-logo {
3609
+ display: block;
3610
+ height: 22px;
3611
+ width: auto;
3612
+ object-fit: contain;
3613
+ }
3614
+ .dv2-alt-pay-logo {
3615
+ display: block;
3616
+ height: 18px;
3617
+ width: auto;
3618
+ max-width: 72px;
3619
+ object-fit: contain;
3620
+ flex-shrink: 0;
3621
+ }
3622
+ .dv2-alt-pay-btn--paypal {
3623
+ background: #fff;
3624
+ border-color: rgba(0, 48, 135, 0.2);
3625
+ box-shadow: 0 2px 8px rgba(0, 48, 135, 0.1);
3626
+ padding: 0 16px;
3627
+ }
3628
+ .dv2-alt-pay-btn--paypal:hover {
3629
+ border-color: rgba(0, 48, 135, 0.45);
3630
+ box-shadow: 0 4px 14px rgba(0, 48, 135, 0.18);
3631
+ }
3632
+ .dv2-alt-pay-btn--venmo {
3633
+ background: #fff;
3634
+ border-color: rgba(61, 149, 206, 0.25);
3635
+ box-shadow: 0 2px 8px rgba(61, 149, 206, 0.1);
3636
+ padding: 0 16px;
3637
+ }
3638
+ .dv2-alt-pay-btn--venmo:hover {
3639
+ border-color: rgba(61, 149, 206, 0.5);
3640
+ box-shadow: 0 4px 14px rgba(61, 149, 206, 0.2);
3641
+ }
3642
+
3643
+ @media (max-width: 860px) {
3644
+ .dv2-win-wrap { grid-template-columns: 1fr; }
3645
+ .dv2-win-img { max-width: 480px; margin: 0 auto; }
3646
+ }
3647
+ @media (max-width: 520px) {
3648
+ .dv2-win-actions { flex-direction: column; }
3649
+ .dv2-win-actions .btn-glass-purple,
3650
+ .dv2-win-actions .btn-ghost { width: 100%; text-align: center; justify-content: center; }
3651
+ }
3652
+
3653
+
3654
+ /* ── SHELTER HUB (/adopt) ───────────────────────────────────── */
3655
+ /* Shelter hub (/adopt) — CPAS location, adoption, lost & found (light theme) */
3656
+
3657
+ .shelter-hub { box-sizing: border-box; }
3658
+ .shelter-hub *, .shelter-hub *::before, .shelter-hub *::after { box-sizing: border-box; }
3659
+
3660
+ .shelter-hub__intro {
3661
+ background:
3662
+ radial-gradient(ellipse 480px 260px at 50% 0%, rgba(107, 33, 232, 0.10) 0%, rgba(107, 33, 232, 0) 70%),
3663
+ var(--bg-2);
3664
+ padding: clamp(2rem, 5vw, 3rem) 1.5rem clamp(1.75rem, 4vw, 2.75rem);
3665
+ text-align: center;
3666
+ border-bottom: 1px solid var(--border);
3667
+ }
3668
+ .shelter-hub__intro-inner { max-width: 640px; margin: 0 auto; }
3669
+ .shelter-hub__crest {
3670
+ display: block;
3671
+ width: 52px;
3672
+ height: auto;
3673
+ margin: 0 auto 1rem;
3674
+ opacity: 0.95;
3675
+ filter: drop-shadow(0 2px 8px rgba(107, 33, 232, 0.12));
3676
+ }
3677
+ .shelter-hub__title {
3678
+ font-family: var(--font-display, Georgia, serif);
3679
+ font-size: clamp(1.55rem, 3.5vw, 2.1rem);
3680
+ font-weight: 700;
3681
+ color: var(--text-1);
3682
+ line-height: 1.15;
3683
+ margin: 0 0 0.85rem;
3684
+ }
3685
+ .shelter-hub__lede {
3686
+ font-size: 0.975rem;
3687
+ color: var(--text-2);
3688
+ line-height: 1.7;
3689
+ max-width: 560px;
3690
+ margin: 0 auto;
3691
+ }
3692
+
3693
+ .shelter-hub__panel {
3694
+ background: var(--bg-2);
3695
+ padding: clamp(2.5rem, 5vw, 3.5rem) 1.5rem;
3696
+ }
3697
+ .shelter-hub__panel--alt { background: var(--bg); }
3698
+ .shelter-hub__narrow { max-width: 820px; }
3699
+
3700
+ .shelter-hub__eyebrow {
3701
+ font-size: 0.68rem;
3702
+ font-weight: 700;
3703
+ letter-spacing: 0.1em;
3704
+ text-transform: uppercase;
3705
+ color: var(--purple, #7c6fd0);
3706
+ text-align: center;
3707
+ display: block;
3708
+ margin-bottom: 0.65rem;
3709
+ }
3710
+ .shelter-hub__eyebrow--dark { color: var(--purple, #7c6fd0); }
3711
+ .shelter-hub__eyebrow--light { color: rgba(255, 255, 255, 0.5); }
3712
+ .shelter-hub__eyebrow--left { text-align: left; }
3713
+
3714
+ .shelter-hub__heading {
3715
+ font-family: var(--font-display, Georgia, serif);
3716
+ font-size: clamp(1.45rem, 3vw, 1.95rem);
3717
+ font-weight: 700;
3718
+ color: var(--light-text, #1a1a1a);
3719
+ text-align: center;
3720
+ line-height: 1.2;
3721
+ margin: 0 0 1rem;
3722
+ }
3723
+ .shelter-hub__body {
3724
+ font-size: 0.95rem;
3725
+ color: var(--light-muted, #4a4a4a);
3726
+ line-height: 1.7;
3727
+ margin: 0 0 2rem;
3728
+ }
3729
+ .shelter-hub__body--center {
3730
+ text-align: center;
3731
+ max-width: 560px;
3732
+ margin-left: auto;
3733
+ margin-right: auto;
3734
+ }
3735
+ .shelter-hub__inline-link {
3736
+ color: var(--purple, #6c5ecf);
3737
+ text-decoration: underline;
3738
+ text-underline-offset: 2px;
3739
+ }
3740
+
3741
+ .shelter-hub__location {
3742
+ display: grid;
3743
+ grid-template-columns: 1fr 1fr;
3744
+ gap: 1.5rem;
3745
+ align-items: start;
3746
+ }
3747
+ .shelter-hub__location-info {
3748
+ display: flex;
3749
+ flex-direction: column;
3750
+ gap: 1.25rem;
3751
+ }
3752
+ .shelter-hub__map {
3753
+ border-radius: 14px;
3754
+ overflow: hidden;
3755
+ height: 300px;
3756
+ min-height: 260px;
3757
+ border: 1px solid rgba(0, 0, 0, 0.08);
3758
+ background: #ddd;
3759
+ }
3760
+ .shelter-hub__map iframe { display: block; width: 100%; height: 100%; }
3761
+
3762
+ .shelter-hub__info {
3763
+ display: flex;
3764
+ gap: 12px;
3765
+ align-items: flex-start;
3766
+ }
3767
+ .shelter-hub__info-icon {
3768
+ flex-shrink: 0;
3769
+ width: 36px;
3770
+ height: 36px;
3771
+ background: #ede9fc;
3772
+ border-radius: 9px;
3773
+ display: flex;
3774
+ align-items: center;
3775
+ justify-content: center;
3776
+ color: var(--purple, #6c5ecf);
3777
+ margin-top: 1px;
3778
+ }
3779
+ .shelter-hub__info-label {
3780
+ font-size: 0.7rem;
3781
+ font-weight: 700;
3782
+ letter-spacing: 0.07em;
3783
+ text-transform: uppercase;
3784
+ color: #999;
3785
+ margin: 0 0 3px;
3786
+ }
3787
+ .shelter-hub__info-value {
3788
+ font-size: 0.9rem;
3789
+ color: var(--light-text, #1a1a1a);
3790
+ line-height: 1.55;
3791
+ margin: 0;
3792
+ }
3793
+ .shelter-hub__info-link {
3794
+ font-size: 0.9rem;
3795
+ color: var(--purple, #6c5ecf);
3796
+ text-decoration: none;
3797
+ font-weight: 600;
3798
+ }
3799
+ .shelter-hub__info-link:hover { text-decoration: underline; }
3800
+
3801
+ .shelter-hub__hours {
3802
+ font-size: 0.84rem;
3803
+ border-collapse: collapse;
3804
+ color: #333;
3805
+ }
3806
+ .shelter-hub__hours td { padding: 2px 10px 2px 0; vertical-align: middle; }
3807
+ .shelter-hub__hours td:first-child { color: #777; font-size: 0.78rem; white-space: nowrap; }
3808
+ .shelter-hub__badge {
3809
+ display: inline-block;
3810
+ font-size: 0.65rem;
3811
+ font-weight: 700;
3812
+ letter-spacing: 0.04em;
3813
+ text-transform: uppercase;
3814
+ color: var(--purple, #6c5ecf);
3815
+ background: #ede9fc;
3816
+ border-radius: 5px;
3817
+ padding: 2px 6px;
3818
+ margin-left: 4px;
3819
+ vertical-align: middle;
3820
+ }
3821
+ .shelter-hub__closed { color: #aaa; }
3822
+
3823
+ .shelter-hub__btn-stack {
3824
+ display: flex;
3825
+ flex-direction: column;
3826
+ gap: 8px;
3827
+ margin-top: 4px;
3828
+ }
3829
+
3830
+ .shelter-hub__cards {
3831
+ display: grid;
3832
+ grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
3833
+ gap: 12px;
3834
+ margin-bottom: 1.75rem;
3835
+ }
3836
+ .shelter-hub__card {
3837
+ background: #fff;
3838
+ border: 1px solid var(--border);
3839
+ border-radius: 14px;
3840
+ padding: 1.15rem 1.1rem 1.05rem;
3841
+ box-shadow: 0 2px 12px rgba(28, 20, 32, 0.04);
3842
+ }
3843
+ .shelter-hub__card-icon {
3844
+ width: 38px;
3845
+ height: 38px;
3846
+ border-radius: 9px;
3847
+ background: #ede9fc;
3848
+ display: flex;
3849
+ align-items: center;
3850
+ justify-content: center;
3851
+ color: var(--purple, #6c5ecf);
3852
+ margin-bottom: 0.8rem;
3853
+ }
3854
+ .shelter-hub__card-title {
3855
+ font-family: var(--font-body);
3856
+ font-size: 0.85rem;
3857
+ font-weight: 700;
3858
+ color: var(--light-text, #1a1a1a);
3859
+ margin: 0 0 0.35rem;
3860
+ }
3861
+ .shelter-hub__card-body {
3862
+ font-size: 0.8rem;
3863
+ color: #555;
3864
+ line-height: 1.6;
3865
+ margin: 0;
3866
+ }
3867
+
3868
+ .shelter-hub__policy {
3869
+ background: #fff;
3870
+ border: 1px solid rgba(0, 0, 0, 0.07);
3871
+ border-radius: 14px;
3872
+ padding: 1.35rem 1.4rem 1.25rem;
3873
+ margin-bottom: 2rem;
3874
+ }
3875
+ .shelter-hub__list {
3876
+ list-style: none;
3877
+ padding: 0;
3878
+ margin: 0.6rem 0 0;
3879
+ display: flex;
3880
+ flex-direction: column;
3881
+ gap: 0.55rem;
3882
+ }
3883
+ .shelter-hub__list li {
3884
+ font-size: 0.85rem;
3885
+ color: #4a4a4a;
3886
+ line-height: 1.6;
3887
+ padding-left: 1.2rem;
3888
+ position: relative;
3889
+ margin: 0;
3890
+ }
3891
+ .shelter-hub__list li::before {
3892
+ content: "–";
3893
+ position: absolute;
3894
+ left: 0;
3895
+ color: #9b8fd6;
3896
+ }
3897
+ .shelter-hub__list strong { color: var(--light-text, #1a1a1a); font-weight: 700; }
3898
+
3899
+ .shelter-hub__steps {
3900
+ display: flex;
3901
+ flex-direction: column;
3902
+ gap: 10px;
3903
+ margin-bottom: 2rem;
3904
+ }
3905
+ .shelter-hub__step {
3906
+ display: flex;
3907
+ gap: 14px;
3908
+ align-items: flex-start;
3909
+ background: #fff;
3910
+ border: 1px solid rgba(0, 0, 0, 0.07);
3911
+ border-radius: 14px;
3912
+ padding: 1rem 1.2rem;
3913
+ }
3914
+ .shelter-hub__step-num {
3915
+ flex-shrink: 0;
3916
+ width: 30px;
3917
+ height: 30px;
3918
+ border-radius: 50%;
3919
+ background: #ede9fc;
3920
+ color: var(--purple, #6c5ecf);
3921
+ font-size: 0.8rem;
3922
+ font-weight: 700;
3923
+ display: flex;
3924
+ align-items: center;
3925
+ justify-content: center;
3926
+ margin-top: 1px;
3927
+ }
3928
+ .shelter-hub__step-title {
3929
+ font-family: var(--font-body);
3930
+ font-size: 0.87rem;
3931
+ font-weight: 700;
3932
+ color: var(--light-text, #1a1a1a);
3933
+ margin: 0 0 0.25rem;
3934
+ }
3935
+ .shelter-hub__step-body {
3936
+ font-size: 0.8rem;
3937
+ color: #555;
3938
+ line-height: 1.6;
3939
+ margin: 0;
3940
+ }
3941
+
3942
+ .shelter-hub__cta-row {
3943
+ display: flex;
3944
+ gap: 10px;
3945
+ flex-wrap: wrap;
3946
+ justify-content: center;
3947
+ }
3948
+ .shelter-hub__btn {
3949
+ display: inline-flex;
3950
+ align-items: center;
3951
+ gap: 7px;
3952
+ padding: 0.65rem 1.3rem;
3953
+ border-radius: 10px;
3954
+ font-family: var(--font-body);
3955
+ font-size: 0.875rem;
3956
+ font-weight: 700;
3957
+ text-decoration: none;
3958
+ transition: opacity 0.15s ease, transform 0.1s ease;
3959
+ cursor: pointer;
3960
+ white-space: nowrap;
3961
+ }
3962
+ .shelter-hub__btn:hover { opacity: 0.87; transform: translateY(-1px); }
3963
+ .shelter-hub__btn:active { transform: scale(0.98); }
3964
+ .shelter-hub__btn--primary {
3965
+ background: var(--purple, #6c5ecf);
3966
+ color: #fff;
3967
+ border: none;
3968
+ }
3969
+ .shelter-hub__btn--secondary {
3970
+ background: #fff;
3971
+ color: var(--light-text, #1a1a1a);
3972
+ border: 1px solid rgba(0, 0, 0, 0.15);
3973
+ }
3974
+
3975
+ @media (max-width: 640px) {
3976
+ .shelter-hub__location { grid-template-columns: 1fr; }
3977
+ .shelter-hub__map { order: -1; height: 240px; }
3978
+ .shelter-hub__cta-row { flex-direction: column; align-items: stretch; }
3979
+ .shelter-hub__btn { justify-content: center; white-space: normal; text-align: center; }
3980
+ }