/* ============================================================ FLORÍADE — App root (rotas, tweaks, mount) ============================================================ */ const { useRef } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": "nupcias", "titleFont": "Cinzel", "spin": true, "frames": true }/*EDITMODE-END*/; const FONT_MAP = { "Cinzel": '"Cinzel", serif', "Cormorant": '"Cormorant Garamond", serif', "Garamond": '"EB Garamond", serif', }; function useReveal(dep){ useEffect(()=>{ const els = [...document.querySelectorAll(".reveal:not(.in)")]; const show = el => el.classList.add("in"); if(!("IntersectionObserver" in window)){ els.forEach(show); return; } const io = new IntersectionObserver((entries, obs)=>{ entries.forEach(en=>{ if(en.isIntersecting){ show(en.target); obs.unobserve(en.target); } }); }, { threshold:0, rootMargin:"0px 0px -5% 0px" }); els.forEach(e=>io.observe(e)); const t = setTimeout(()=> els.forEach(e=>{ if(!e.classList.contains("in")) show(e); }), 1400); return ()=>{ io.disconnect(); clearTimeout(t); }; }, [dep]); } function App(){ const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); const [route, setRoute] = useState("home"); const [param, setParam] = useState(null); const go = useCallback((r, p=null)=>{ setRoute(r); setParam(p); if(r!=="produto") window.scrollTo({top:0, behavior:"instant" in window ? "instant" : "auto"}); else window.scrollTo(0,0); },[]); // aplicar tweaks — troca de paleta instantânea (sem "arrasto" de cor) useEffect(()=>{ const html = document.documentElement; html.classList.add("pal-switching"); html.dataset.palette = t.palette; const id = setTimeout(()=> html.classList.remove("pal-switching"), 60); return ()=> clearTimeout(id); }, [t.palette]); useEffect(()=>{ document.documentElement.style.setProperty("--font-display", FONT_MAP[t.titleFont]||FONT_MAP.Cinzel); }, [t.titleFont]); useEffect(()=>{ document.body.classList.toggle("no-spin", !t.spin); }, [t.spin]); useEffect(()=>{ document.body.classList.toggle("no-frames", !t.frames); }, [t.frames]); useReveal(route+"|"+param); let view; if(route==="home") view = ; else if(route==="loja") view = ; else if(route==="produto") view = ; else if(route==="alquimia") view = ; else if(route==="diario") view = ; else if(route==="contato") view = ; else view = ; return (
{view}