const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accentColor": "#10b981", "darkAccent": "#059669", "showMarquee": true, "fontFamily": "Plus Jakarta Sans" }/*EDITMODE-END*/; const VALID_PAGES = ['home','gmc','shopping','insider','preapproved','about','contact','cases','pricing','blog','services','partner']; const parsePath = () => { const p = window.location.pathname.replace(/^\/|\/$/g, ''); if (!p) return { page: 'home', slug: null }; const parts = p.split('/'); if (parts[0] === 'blog' && parts[1]) return { page: 'blog', slug: parts[1] }; return { page: VALID_PAGES.includes(parts[0]) ? parts[0] : 'home', slug: null }; }; const pageToPath = (p, slug) => { if (p === 'home') return '/'; if (p === 'blog' && slug) return '/blog/' + slug; return '/' + p; }; const App = () => { const initial = parsePath(); const [page, setPage] = React.useState(initial.page); const [blogSlug, setBlogSlug] = React.useState(initial.slug); const [tweaks, setTweaks] = React.useState(TWEAK_DEFAULTS); const [showTweaks, setShowTweaks] = React.useState(false); const navigate = (p, opts) => { const slug = (opts && opts.slug) || null; setPage(p); setBlogSlug(slug); const path = pageToPath(p, slug); if (window.location.pathname !== path) window.history.pushState({ page: p, slug }, '', path); if (window.__applyPageSEO) window.__applyPageSEO(p); window.scrollTo({ top: 0, behavior: 'instant' }); }; React.useEffect(() => { if (window.__applyPageSEO) window.__applyPageSEO(page); const onPop = () => { const s = parsePath(); setPage(s.page); setBlogSlug(s.slug); if (window.__applyPageSEO) window.__applyPageSEO(s.page); }; window.addEventListener('popstate', onPop); const handler = (e) => { if (e.data?.type === '__activate_edit_mode') setShowTweaks(true); if (e.data?.type === '__deactivate_edit_mode') setShowTweaks(false); }; window.addEventListener('message', handler); window.parent.postMessage({ type: '__edit_mode_available' }, '*'); return () => { window.removeEventListener('message', handler); window.removeEventListener('popstate', onPop); }; }, []); const updateTweak = (key, val) => { const next = { ...tweaks, [key]: val }; setTweaks(next); window.parent.postMessage({ type: '__edit_mode_set_keys', edits: next }, '*'); if (key === 'accentColor') document.documentElement.style.setProperty('--green', val); if (key === 'darkAccent') document.documentElement.style.setProperty('--green-dark', val); if (key === 'fontFamily') document.body.style.fontFamily = `'${val}', sans-serif`; }; const pages = { home: HomePage, gmc: GMCPage, shopping: ShoppingPage, insider: InsiderPage, preapproved: PreApprovedPage, about: AboutPage, contact: ContactPage, cases: CasesPage, pricing: PricingPage, blog: BlogPage, services: typeof ServicesPage !== 'undefined' ? ServicesPage : HomePage, partner: PartnerPage }; const PageComponent = pages[page] || HomePage; return ( <>