/* SIMONIS — Tweaks app: expressive controls that reshape the whole feel. Mounted into #tweaks-root. Panel self-hides until the Tweaks toolbar is on. */ const SIMONIS_TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "aura": "#2E9BFF", "atmosphere": "midnight", "energy": "balanced" }/*EDITMODE-END*/; /* hex helpers to derive a darker / lighter shade from one accent */ function _hx(h) { h = h.replace('#',''); return [parseInt(h.slice(0,2),16), parseInt(h.slice(2,4),16), parseInt(h.slice(4,6),16)]; } function _toHex(r,g,b){ return '#' + [r,g,b].map(function(v){ v=Math.max(0,Math.min(255,Math.round(v))); return (v<16?'0':'')+v.toString(16); }).join(''); } function shade(hex, amt) { /* amt>0 lighten toward white, <0 darken */ var c=_hx(hex); return _toHex( amt>0 ? c[0]+(255-c[0])*amt : c[0]*(1+amt), amt>0 ? c[1]+(255-c[1])*amt : c[1]*(1+amt), amt>0 ? c[2]+(255-c[2])*amt : c[2]*(1+amt)); } function SimonisTweaks() { const [t, setTweak] = useTweaks(SIMONIS_TWEAK_DEFAULTS); var root = document.documentElement.style; var auraMounted = React.useRef(false); React.useEffect(function () { // Skip the first run so the per-load accent rotation (accent-rotate.js) // stays visible. Only override when the user actively picks a color. if (!auraMounted.current) { auraMounted.current = true; return; } var accent = t.aura || '#2E9BFF'; root.setProperty('--accent', accent); root.setProperty('--accent-2', shade(accent, -0.28)); root.setProperty('--accent-3', shade(accent, 0.42)); root.setProperty('--c-id', accent); }, [t.aura]); React.useEffect(function () { document.body.classList.remove('atmo-slate', 'atmo-cosmic'); if (t.atmosphere === 'slate') document.body.classList.add('atmo-slate'); else if (t.atmosphere === 'cosmic') document.body.classList.add('atmo-cosmic'); }, [t.atmosphere]); React.useEffect(function () { document.body.classList.remove('energy-calm', 'energy-alive'); if (t.energy === 'calm') document.body.classList.add('energy-calm'); else if (t.energy === 'alive') document.body.classList.add('energy-alive'); }, [t.energy]); return ( setTweak('aura', v)} /> setTweak('atmosphere', v)} /> setTweak('energy', v)} /> ); } ReactDOM.createRoot(document.getElementById('tweaks-root')).render();