// SENSI — main app const { useState: useS, useEffect: useE } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": "#A07B4C", "noir": "#15130F", "ivory": "#F7F3EC", "heroImage": "media/project-royal-atlantis-cover.webp", "page": "home" }/*EDITMODE-END*/; function App() { const [t, setTweak] = window.useTweaks(TWEAK_DEFAULTS); const [page, setPage] = useS(t.page || 'home'); const [project, setProject] = useS(null); const [drawer, setDrawer] = useS(false); const [locale, setLocale] = useS('en'); const [toast, setToast] = useS(''); // apply tweaks to CSS vars useE(() => { document.documentElement.style.setProperty('--bronze', t.accent); document.documentElement.style.setProperty('--noir', t.noir); document.documentElement.style.setProperty('--ivory', t.ivory); }, [t.accent, t.noir, t.ivory]); // sync hero image useE(() => { const el = document.querySelector('.hero-media img'); if (el) el.src = t.heroImage; }, [t.heroImage, page]); // sync page via tweak useE(() => { if (t.page && t.page !== page) { setPage(t.page); window.scrollTo({ top: 0 }); } }, [t.page]); // RTL on AR useE(() => { document.documentElement.dir = locale === 'ar' ? 'rtl' : 'ltr'; document.documentElement.lang = locale; }, [locale]); const showToast = (m) => { setToast(m); setTimeout(() => setToast(''), 3200); }; const openProject = (p) => setProject(p); const closeProject = () => setProject(null); const openConsult = () => setDrawer(true); const closeConsult = () => setDrawer(false); const submitConsult = () => { setDrawer(false); showToast("Enquiry sent — we'll reply within 24 hours."); }; // detect dark hero (only on home page initially) const [onDarkHero, setOnDarkHero] = useS(true); useE(() => { const onScroll = () => setOnDarkHero(page === 'home' && window.scrollY < window.innerHeight - 120); if (page === 'home') { window.addEventListener('scroll', onScroll, { passive: true }); onScroll(); } else { setOnDarkHero(false); } return () => window.removeEventListener('scroll', onScroll); }, [page]); const { TopBar } = window.SENSI_PAGES_1; const { Footer, HomePage, MaterialsPage, BrandsPage, ProjectsPage, StudioPage, ShowroomPage, AboutPage, ProjectModal, ConsultDrawer } = window.SENSI_PAGES_2; const { TweaksPanel, TweakSection, TweakColor, TweakRadio, TweakSelect } = window; return ( { setPage(p); setTweak('page', p); }} locale={locale} setLocale={setLocale} openConsult={openConsult} onDark={onDarkHero} />
{page === 'home' && { setPage(p); setTweak('page', p); }} openProject={openProject} openConsult={openConsult} locale={locale} />} {page === 'materials' && } {page === 'brands' && } {page === 'projects' && } {page === 'studio' && } {page === 'showroom' && } {page === 'about' && }