// Si Fashion — main app shell const { useState: $us, useEffect: $ue, useRef: $ur } = React; // ============== Tweak defaults — host-rewritable ============== const SF_TWEAKS_DEFAULTS = /*EDITMODE-BEGIN*/{ "showBrandTiles": true, "accentPalette": ["#b88101", "#755304", "#293537", "#e4e8ec"], "displayFont": "Montserrat", "showFab": true }/*EDITMODE-END*/; function App() { const [route, setRoute] = $us("home"); const [enquireOpen, setEnquireOpen] = $us(false); const [enquireCtx, setEnquireCtx] = $us({}); const [brand, setBrand] = $us(null); const [tweaks, setTweak] = (window.useTweaks ? window.useTweaks(SF_TWEAKS_DEFAULTS) : [SF_TWEAKS_DEFAULTS, () => {}]); // Apply palette accent + display font to CSS vars $ue(() => { if (tweaks.accentPalette && tweaks.accentPalette[0]) { document.documentElement.style.setProperty("--accent", tweaks.accentPalette[0]); } if (tweaks.displayFont) { document.documentElement.style.setProperty( "--font-display", `"${tweaks.displayFont}", "Helvetica Neue", Helvetica, Arial, sans-serif` ); } }, [tweaks.accentPalette, tweaks.displayFont]); const navigate = (r) => { setRoute(r); setBrand(null); setTimeout(() => window.scrollTo({ top: 0, behavior: "instant" }), 10); }; const openEnquire = (ctx = {}) => { setEnquireCtx(ctx || {}); setEnquireOpen(true); }; const closeEnquire = () => setEnquireOpen(false); const openBrand = (b) => setBrand(b); const showTiles = !!tweaks.showBrandTiles; const pageProps = { navigate, openEnquire, openBrand, showTiles }; return (