// Main App — router, tweaks, scroll restoration, enquire drawer wiring.
const { useState: useStateA, useEffect: useEffectA, useCallback: useCallbackA } = React;
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"accent": "#0b3619",
"displayFont": "Cormorant Garamond",
"density": "editorial",
"rekordTheme": "dark"
}/*EDITMODE-END*/;
function App() {
const [route, setRoute] = useStateA({ page: "home" });
const [enquire, setEnquire] = useStateA(null);
const [t, setTweak] = window.useTweaks(TWEAK_DEFAULTS);
// Apply tweaks to :root
useEffectA(() => {
document.documentElement.style.setProperty("--primary", t.accent);
document.documentElement.style.setProperty("--focus", t.accent);
// The mission/dot use primary; rekord-band keeps mint
const fontMap = {
"Cormorant Garamond": `"Cormorant Garamond", "Source Serif 4", Georgia, serif`,
"EB Garamond": `"EB Garamond", "Source Serif 4", Georgia, serif`,
"Spectral": `"Spectral", "Source Serif 4", Georgia, serif`
};
document.documentElement.style.setProperty("--serif", fontMap[t.displayFont] || fontMap["Cormorant Garamond"]);
document.documentElement.setAttribute("data-density", t.density);
}, [t.accent, t.displayFont, t.density]);
const goTo = useCallbackA((next) => {
setRoute(next);
window.scrollTo({ top: 0, behavior: "instant" in window ? "instant" : "auto" });
// Update hash for shareable state (best-effort)
const hash = next.page === "home" ? "" : next.slug ? `${next.page}/${next.slug}` : next.page;
history.replaceState(null, "", "#" + hash);
}, []);
// Hash sync (load deep links)
useEffectA(() => {
const h = window.location.hash.replace(/^#/, "");
if (!h) return;
const [page, slug] = h.split("/");
if (["home","exhibitions","exhibition","artists","artist","viewing-rooms","rekord","about","visit"].includes(page)) {
setRoute(slug ? { page, slug } : { page });
}
}, []);
const openEnquire = useCallbackA((ctx) => setEnquire(ctx), []);
const closeEnquire = useCallbackA(() => setEnquire(null), []);
function renderPage() {
switch (route.page) {
case "home": return