// App root + routing + Tweaks panel const { useState: useStateA, useEffect: useEffectA } = React; function App() { const [route, setRoute] = useStateA("home"); const [enquireOpen, setEnquireOpen] = useStateA(false); const [enquireSector, setEnquireSector] = useStateA(null); // Tweaks const defaults = window.__TWEAK_DEFAULTS || { palette: "paper", density: "default", locale: "en" }; const [tweaks, setTweaksRaw] = useStateA(defaults); const setTweak = (key, value) => { const next = typeof key === "object" ? { ...tweaks, ...key } : { ...tweaks, [key]: value }; setTweaksRaw(next); try { window.parent.postMessage({ type: "__edit_mode_set_keys", edits: next }, "*"); } catch (e) {} }; // Apply tweaks to useEffectA(() => { const html = document.documentElement; html.setAttribute("data-palette", tweaks.palette); html.setAttribute("data-density", tweaks.density); html.setAttribute("dir", tweaks.locale === "ar" ? "rtl" : "ltr"); html.setAttribute("lang", tweaks.locale); }, [tweaks.palette, tweaks.density, tweaks.locale]); // Tweaks panel availability protocol const [tweaksOpen, setTweaksOpen] = useStateA(false); useEffectA(() => { const onMsg = (e) => { if (!e.data || typeof e.data !== "object") return; if (e.data.type === "__activate_edit_mode") setTweaksOpen(true); else if (e.data.type === "__deactivate_edit_mode") setTweaksOpen(false); }; window.addEventListener("message", onMsg); try { window.parent.postMessage({ type: "__edit_mode_available" }, "*"); } catch (e) {} return () => window.removeEventListener("message", onMsg); }, []); const t = COPY[tweaks.locale] || COPY.en; // Scroll to top on route change useEffectA(() => { window.scrollTo({ top: 0, behavior: "instant" }); }, [route]); const openEnquire = (sector) => { setEnquireSector(typeof sector === "string" ? sector : null); setEnquireOpen(true); }; const handleRoute = (r) => { if (typeof r === "string" && r.startsWith("stub:")) { const sector = r.slice(5); // For corporate/social/etc — open enquiry pre-qualified, with a toast setEnquireSector(sector === "corporate" ? "corporate" : sector === "social" ? "social" : null); setEnquireOpen(true); return; } setRoute(r); }; return (