/* Symphony — App shell, hash router, tweaks */ const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": "coral", "displayFont": "serif", "heroVariant": "split", "density": "default" }/*EDITMODE-END*/; const ROUTES = ['home', 'treatments', 'laser', 'team', 'reviews', 'contact']; function App() { const [route, setRoute] = React.useState(() => { const fallback = window.__BYTESGLUE_SHOWCASE_ROUTE || 'home'; const h = (location.hash || '#' + fallback).slice(1); return ROUTES.includes(h) ? h : 'home'; }); const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS); // Apply tweaks → root data-attributes React.useEffect(() => { const r = document.documentElement; r.dataset.palette = tweaks.palette; r.dataset.display = tweaks.displayFont === 'sans' ? 'sans' : ''; r.dataset.density = tweaks.density === 'default' ? '' : tweaks.density; }, [tweaks.palette, tweaks.displayFont, tweaks.density]); // Hash sync React.useEffect(() => { const onHash = () => { const fallback = window.__BYTESGLUE_SHOWCASE_ROUTE || 'home'; const h = (location.hash || '#' + fallback).slice(1); if (ROUTES.includes(h)) { setRoute(h); window.scrollTo({ top: 0, behavior: 'instant' }); } }; window.addEventListener('hashchange', onHash); return () => window.removeEventListener('hashchange', onHash); }, []); const navigate = (r) => { if (location.hash !== '#' + r) { location.hash = r; } setRoute(r); window.scrollTo({ top: 0, behavior: 'instant' }); }; let Page; switch (route) { case 'treatments': Page = ; break; case 'laser': Page = ; break; case 'team': Page = ; break; case 'reviews': Page = ; break; case 'contact': Page = ; break; default: Page = ; } return ( <> {Page}