/* ============ Tweaks app — drives page CSS variables ============ */ const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": "#2F6FD6", "displayFont": "Fraunces", "sectionGap": 96, "lead": "frozen" }/*EDITMODE-END*/; const loadedFonts = {}; function ensureFont(family) { if (family === 'Fraunces' || loadedFonts[family]) return; loadedFonts[family] = true; const link = document.createElement('link'); link.rel = 'stylesheet'; link.href = 'https://fonts.googleapis.com/css2?family=' + family.replace(/ /g, '+') + ':ital,wght@0,400..700;1,400..600&display=swap'; document.head.appendChild(link); } function applyTweaks(t) { const root = document.documentElement; root.style.setProperty('--accent', t.accent); ensureFont(t.displayFont); root.style.setProperty('--display-font', "'" + t.displayFont + "'"); root.style.setProperty('--section-gap', t.sectionGap + 'px'); root.setAttribute('data-lead', t.lead); } function App() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); React.useEffect(() => { applyTweaks(t); }, [t]); return ( setTweak('accent', v)} /> setTweak('displayFont', v)} /> setTweak('lead', v)} /> setTweak('sectionGap', v)} /> ); } ReactDOM.createRoot(document.getElementById('tweaks-root')).render();