/* Seoly.io — Tweaks panel app */ const ACCENTS = { '#2563EB': { rgb: '37,99,235', hover: '#1d4ed8' }, '#7C3AED': { rgb: '124,58,237', hover: '#6d28d9' }, '#06B6D4': { rgb: '6,182,212', hover: '#0891b2' }, '#10B981': { rgb: '16,185,129', hover: '#059669' }, '#E11D48': { rgb: '225,29,72', hover: '#be123c' }, '#F59E0B': { rgb: '245,158,11', hover: '#d97706' }, }; const DENSITY = { compact: 0.82, regular: 1, comfy: 1.16 }; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": "#2563EB", "radius": 16, "density": "regular" }/*EDITMODE-END*/; function SeolyTweaks() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); const root = document.documentElement; const [dark, setDark] = React.useState(() => root.getAttribute('data-theme') === 'dark'); // keep toggle in sync if theme changes elsewhere (header button) React.useEffect(() => { const h = e => setDark(e.detail === 'dark'); window.addEventListener('seoly-theme', h); return () => window.removeEventListener('seoly-theme', h); }, []); // accent / radius / density -> CSS vars (theme is handled separately via setTheme) React.useEffect(() => { const a = ACCENTS[t.accent] || ACCENTS['#2563EB']; root.style.setProperty('--accent', t.accent); root.style.setProperty('--accent-rgb', a.rgb); root.style.setProperty('--accent-hover', a.hover); root.style.setProperty('--radius', t.radius + 'px'); root.style.setProperty('--radius-sm', Math.round(t.radius * 0.62) + 'px'); root.style.setProperty('--radius-lg', Math.round(t.radius * 1.5) + 'px'); const d = DENSITY[t.density] || 1; root.style.setProperty('--density', d); localStorage.setItem('seoly-tweaks', JSON.stringify({ accent: t.accent, accentRgb: a.rgb, accentHover: a.hover, radius: t.radius, density: d })); }, [t.accent, t.radius, t.density]); return ( { setDark(v); window.setTheme(v ? 'dark' : 'light'); }} /> setTweak('accent', v)} /> setTweak('density', v)} /> setTweak('radius', v)} /> ); } ReactDOM.createRoot(document.getElementById('tweaks-root')).render();