/* EduTrust.lk — Tweaks island. Mounts a React panel that drives CSS vars + hero variant. */ const ET_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": ["#1EA8A0", "#FF7A18"], "font": "Poppins + Inter", "hero": "split", "radius": 16, "showStats": true, "showStories": true, "showPreview": true }/*EDITMODE-END*/; const ET_PALETTES = [ ["#1EA8A0", "#FF7A18"], // brand ["#0F766E", "#F59E0B"], // deep teal + amber ["#2563EB", "#FF7A18"], // blue + orange ["#7C3AED", "#06B6D4"], // violet + cyan ["#0F172A", "#1EA8A0"] // navy + teal ]; const ET_FONTS = { "Poppins + Inter": { display: "'Poppins',system-ui,sans-serif", body: "'Inter',system-ui,sans-serif" }, "Sora + Inter": { display: "'Sora',system-ui,sans-serif", body: "'Inter',system-ui,sans-serif" }, "Manrope": { display: "'Manrope',system-ui,sans-serif", body: "'Manrope',system-ui,sans-serif" }, "DM Sans": { display: "'DM Sans',system-ui,sans-serif", body: "'DM Sans',system-ui,sans-serif" } }; function mix(hex, pct, withWhite){ // simple lighten/darken const c = hex.replace('#',''); const n = parseInt(c,16); let r=(n>>16)&255,g=(n>>8)&255,b=n&255; const t = withWhite?255:0; r=Math.round(r+(t-r)*pct); g=Math.round(g+(t-g)*pct); b=Math.round(b+(t-b)*pct); return '#'+((1<<24)+(r<<16)+(g<<8)+b).toString(16).slice(1); } function applyTweaks(t){ const root = document.documentElement.style; const [teal, orange] = t.palette; root.setProperty('--teal', teal); root.setProperty('--teal-700', mix(teal,.18,false)); root.setProperty('--teal-900', mix(teal,.4,false)); root.setProperty('--teal-50', mix(teal,.9,true)); root.setProperty('--teal-100', mix(teal,.78,true)); root.setProperty('--orange', orange); root.setProperty('--orange-600', mix(orange,.14,false)); root.setProperty('--orange-50', mix(orange,.9,true)); root.setProperty('--ring', `color-mix(in srgb, ${teal} 28%, transparent)`); const f = ET_FONTS[t.font] || ET_FONTS["Poppins + Inter"]; root.setProperty('--font-display', f.display); root.setProperty('--font-body', f.body); root.setProperty('--radius', t.radius + 'px'); root.setProperty('--radius-sm', Math.max(6, t.radius-4) + 'px'); const hero = document.querySelector('.hero'); if(hero){ const map = {split:'', centered:'centered', immersive:'immersive'}; if(map[t.hero]) hero.setAttribute('data-variant', map[t.hero]); else hero.removeAttribute('data-variant'); } const tog = (sel,on)=>{ const el=document.querySelector(sel); if(el) el.style.display = on?'':'none'; }; tog('#sec-stats', t.showStats); tog('#sec-stories', t.showStories); tog('#sec-preview', t.showPreview); } function ETTweaks(){ const [t, setTweak] = useTweaks(ET_DEFAULTS); React.useEffect(()=>{ applyTweaks(t); }, [t]); return ( setTweak('palette', v)} /> setTweak('font', v)} /> setTweak('hero', v)} /> setTweak('radius', v)} /> setTweak('showStats', v)} /> setTweak('showStories', v)} /> setTweak('showPreview', v)} /> ); } (function mount(){ const el = document.createElement('div'); el.id = 'et-tweaks-root'; document.body.appendChild(el); ReactDOM.createRoot(el).render(); })();