// Top-level App — wires data + tweaks function App() { const [t, setTweak] = useTweaks(window.TWEAK_DEFAULTS); // Apply aesthetic + accent at root React.useEffect(() => { document.body.dataset.aesthetic = t.aesthetic; document.body.dataset.accent = t.accent; document.documentElement.style.setProperty("--font-serif", `"${t.serif}"`); document.documentElement.style.setProperty("--font-sans", `"${t.sans}"`); document.documentElement.style.setProperty("--font-mono", `"${t.mono}"`); // custom color overrides (only if user set a hex) const setVar = (name, val) => { if (val) document.documentElement.style.setProperty(name, val); else document.documentElement.style.removeProperty(name); }; setVar("--accent", t.accentHex); setVar("--accent-2", t.accentHex); setVar("--bg", t.bgHex); setVar("--ink", t.inkHex); }, [t.aesthetic, t.accent, t.serif, t.sans, t.mono, t.accentHex, t.bgHex, t.inkHex]); const C = COPY[t.lang]; const SERIFS = ["Instrument Serif", "Fraunces", "Playfair Display", "DM Serif Display"]; const SANS = ["Inter", "IBM Plex Sans", "Space Grotesk", "DM Sans", "Geist"]; const MONOS = ["JetBrains Mono", "IBM Plex Mono", "Geist Mono"]; return ( <>