// 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' && }
);
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render();