// portfolio-tweaks.jsx — Tweaks panel for Khadija's portfolio. // Applies live changes to the static page via CSS variables + body data-attrs. const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "hero": "split", "accent": ["#E2552E", "#B23E1C", "#C9763E"], "round": 22, "lang": "en" }/*EDITMODE-END*/; const ACCENTS = [ ["#E2552E", "#B23E1C", "#C9763E"], // terracotta coral (default) ["#E0894A", "#B5631F", "#D2A65E"], // warm ochre ["#D6604B", "#A8392B", "#C97A57"], // clay red ["#C9755B", "#9A4F38", "#D9A07E"], // soft rust ["#5C8A6E", "#3E6750", "#8FB39B"] // sage (alt warm-cool) ]; function applyTweaks(t) { const b = document.body; b.setAttribute('data-hero', t.hero); b.setAttribute('data-lang', t.lang); document.documentElement.lang = t.lang; document.querySelectorAll('.lang-toggle button').forEach(btn => btn.classList.toggle('active', btn.dataset.setlang === t.lang)); const root = document.documentElement.style; const [a, aink, a2] = t.accent; root.setProperty('--accent', a); root.setProperty('--accent-ink', aink); root.setProperty('--accent-2', a2); const r = t.round; root.setProperty('--radius-sm', (r * 0.64) + 'px'); root.setProperty('--radius', r + 'px'); root.setProperty('--radius-lg', (r * 1.36) + 'px'); root.setProperty('--radius-xl', (r * 1.82) + 'px'); } function App() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); React.useEffect(() => { applyTweaks(t); }, [t]); // keep nav language buttons in sync with the panel React.useEffect(() => { const handler = (e) => { const lang = e.target.closest('[data-setlang]'); if (lang) setTweak('lang', lang.dataset.setlang); }; document.querySelector('.lang-toggle').addEventListener('click', handler); return () => document.querySelector('.lang-toggle')?.removeEventListener('click', handler); }, []); return ( setTweak('hero', v)} /> setTweak('accent', v)} /> setTweak('round', v)} /> setTweak('lang', v)} /> ); } ReactDOM.createRoot(document.getElementById('tweaks-root')).render();