// Main App composition + Tweaks panel const { useState: useStateA, useEffect: useEffectA, useRef: useRefA } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": "ink", "type": "serif", "heroVariant": "fullbleed", "leadStyle": "bar" }/*EDITMODE-END*/; function smoothScrollTo(id) { const el = document.getElementById(id); if (!el) return; const top = el.getBoundingClientRect().top + window.pageYOffset - 24; window.scrollTo({ top, behavior: "smooth" }); } function App() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); const [lang, setLang] = useStateA("en"); const [scrolled, setScrolled] = useStateA(false); const [bookOpen, setBookOpen] = useStateA(false); const [leadVisible, setLeadVisible] = useStateA(false); useEffectA(() => { const onScroll = () => { const y = window.scrollY; setScrolled(y > 40); setLeadVisible(y > 720); }; window.addEventListener("scroll", onScroll, { passive: true }); onScroll(); return () => window.removeEventListener("scroll", onScroll); }, []); useEffectA(() => { const html = document.documentElement; const dir = I18N[lang].dir; html.setAttribute("dir", dir); html.setAttribute("lang", lang); }, [lang]); useEffectA(() => { const html = document.documentElement; html.setAttribute("data-palette", t.palette || "ink"); html.setAttribute("data-type", t.type || "serif"); html.setAttribute("data-lead", t.leadStyle || "bar"); }, [t.palette, t.type, t.leadStyle]); const onRegister = () => smoothScrollTo("register"); const onBookViewing = () => setBookOpen(true); return (