/* --- Panos Melekkis · App root --- */
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"heroScene": "empire",
"accent": "#B8954E",
"density": "regular",
"signature": false,
"currency": "AED"
}/*EDITMODE-END*/;
function App() {
const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
// body density class
React.useEffect(() => {
document.body.classList.toggle("compact", t.density === "compact");
}, [t.density]);
// accent override
React.useEffect(() => {
document.documentElement.style.setProperty("--gold", t.accent);
}, [t.accent]);
// Hero scene state — initialised from tweak, but user can override via rail
const initialScene = Math.max(0, window.PM_DATA.scenes.findIndex((s) => s.id === t.heroScene));
const [sceneIx, setSceneIx] = React.useState(initialScene === -1 ? 0 : initialScene);
React.useEffect(() => {
const ix = window.PM_DATA.scenes.findIndex((s) => s.id === t.heroScene);
if (ix >= 0) setSceneIx(ix);
}, [t.heroScene]);
// Currency
const [currency, setCurrency] = React.useState(t.currency || "AED");
React.useEffect(() => { setCurrency(t.currency || "AED"); }, [t.currency]);
const handleCurrency = (c) => {
setCurrency(c);
setTweak("currency", c);
};
// Drawer
const [openCollection, setOpenCollection] = React.useState(null);
const [bookingOpen, setBookingOpen] = React.useState(false);
// Nav mode based on scroll
const [navMode, setNavMode] = React.useState("over");
React.useEffect(() => {
const onScroll = () => {
const y = window.scrollY;
if (y < 100) setNavMode("over");
else if (y < window.innerHeight - 80) setNavMode("solid");
else setNavMode("light");
};
onScroll();
window.addEventListener("scroll", onScroll, { passive: true });
return () => window.removeEventListener("scroll", onScroll);
}, []);
// Reveal-on-scroll
useReveal();
const openBook = () => setBookingOpen(true);
const openColl = (id) => setOpenCollection(id);
const closeColl = () => setOpenCollection(null);
return (
document.getElementById("collections").scrollIntoView({ behavior: "smooth", block: "start" })}
signature={t.signature}
/>
{ closeColl(); setTimeout(openBook, 380); }}
currency={currency}
/>
setBookingOpen(false)} />
{/* Tweaks panel */}
setTweak("heroScene", v)}
/>
setTweak("accent", v)}
/>
setTweak("density", v)}
/>
setTweak("signature", v)}
/>
{ setTweak("currency", v); setCurrency(v); }}
/>
);
}
ReactDOM.createRoot(document.getElementById("root")).render();