/* ============================================================ AGENTE100 — Tweaks island Applies live design-token overrides to :root. ============================================================ */ const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": "#0080C8", "circles": 1, "displayFont": "Plus Jakarta Sans", "radius": 12 }/*EDITMODE-END*/; /* --- color helpers --- */ function hexToRgb(hex) { const h = hex.replace('#', ''); return [parseInt(h.slice(0,2),16), parseInt(h.slice(2,4),16), parseInt(h.slice(4,6),16)]; } function mix(rgb, target, amt) { return rgb.map((c, i) => Math.round(c + (target[i] - c) * amt)); } function rgbStr(rgb) { return `rgb(${rgb[0]},${rgb[1]},${rgb[2]})`; } const FONT_STACKS = { "Plus Jakarta Sans": "'Plus Jakarta Sans', system-ui, sans-serif", "Sora": "'Sora', system-ui, sans-serif", "Manrope": "'Manrope', system-ui, sans-serif" }; const LOADED_FONTS = {}; function ensureFont(name) { if (name === "Plus Jakarta Sans" || LOADED_FONTS[name]) return; LOADED_FONTS[name] = true; const link = document.createElement('link'); link.rel = 'stylesheet'; link.href = `https://fonts.googleapis.com/css2?family=${name.replace(/ /g,'+')}:wght@500;600;700;800&display=swap`; document.head.appendChild(link); } function applyTweaks(t) { const root = document.documentElement.style; const rgb = hexToRgb(t.accent); const dark = mix(rgb, [0,0,0], 0.28); const light = mix(rgb, [255,255,255], 0.9); root.setProperty('--color-accent-blue', t.accent); root.setProperty('--color-accent-blue-dark', rgbStr(dark)); root.setProperty('--color-accent-blue-light', rgbStr(light)); root.setProperty('--accent-r', rgb[0]); root.setProperty('--accent-g', rgb[1]); root.setProperty('--accent-b', rgb[2]); root.setProperty('--circle-opacity', t.circles); root.setProperty('--radius-card', t.radius + 'px'); root.setProperty('--radius-btn', Math.round(t.radius * 0.5) + 'px'); ensureFont(t.displayFont); root.setProperty('--font-display', FONT_STACKS[t.displayFont] || FONT_STACKS["Plus Jakarta Sans"]); } function TweaksApp() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); React.useEffect(() => { applyTweaks(t); }, [t]); return ( setTweak('accent', v)} /> setTweak('circles', v)} /> setTweak('displayFont', v)} /> setTweak('radius', v)} /> ); } /* apply defaults immediately (before panel ever opens) */ applyTweaks(TWEAK_DEFAULTS); ReactDOM.createRoot(document.getElementById('tweaks-root')).render();