/* Tweaks controller — mounts the floating panel, applies live changes */ const { useEffect } = React; const PALETTES = { balanced: { label: "Equilibrado (tech + eco)", "--tech-violet": "#6b4eff", "--tech-magenta": "#ff3d8c", "--tech-cyan": "#58e6ff", "--eco-moss": "#2f5d44", "--eco-sage": "#8aa896", "--eco-clay": "#b7794a", }, vivid: { label: "Vibrante", "--tech-violet": "#7c3aed", "--tech-magenta": "#ec4899", "--tech-cyan": "#22d3ee", "--eco-moss": "#15803d", "--eco-sage": "#86efac", "--eco-clay": "#ea580c", }, earthy: { label: "Terroso / sóbrio", "--tech-violet": "#4f46e5", "--tech-magenta": "#be185d", "--tech-cyan": "#0ea5e9", "--eco-moss": "#365314", "--eco-sage": "#a3a380", "--eco-clay": "#92400e", }, noir: { label: "Editorial / mono", "--tech-violet": "#1f1f1f", "--tech-magenta": "#dc2626", "--tech-cyan": "#facc15", "--eco-moss": "#1c2e1f", "--eco-sage": "#9ca3af", "--eco-clay": "#78350f", }, }; function applyPalette(name) { const p = PALETTES[name] || PALETTES.balanced; const root = document.documentElement; Object.entries(p).forEach(([k, v]) => { if (k.startsWith("--")) root.style.setProperty(k, v); }); } function applyHeadline(text) { // Headline is split across three spans; we replace text inside the // .tech-word + .eco-word and the tail accordingly when the user // edits the headline. We accept the format "A & B — tail" or split // by the first '&' / 'e' / 'and'. const heroTitle = document.querySelector(".hero-title"); if (!heroTitle) return; // Find a separator: prefer '&', then '+', then ' e ' let sep = /\s*&\s*|\s*\+\s*|\s+e\s+/i; const dashSplit = text.split(/—|--|–/); const head = (dashSplit[0] || "").trim(); const tail = (dashSplit[1] || "").trim(); const parts = head.split(sep); const tech = (parts[0] || "Crescimento").trim(); const eco = (parts[1] || "conformidade").trim(); const techEl = heroTitle.querySelector(".tech-word"); const ecoEl = heroTitle.querySelector(".eco-word .underline-eco"); const tailEl = heroTitle.querySelector(".serif.ital"); if (techEl) techEl.textContent = tech; if (ecoEl) ecoEl.textContent = eco; if (tailEl && tail) tailEl.textContent = "— " + tail.replace(/^—\s*/, ""); } function applyDarkHero(on) { const hero = document.querySelector(".hero"); if (!hero) return; if (on) { hero.style.background = "var(--tech-ink)"; hero.style.color = "var(--paper)"; document.querySelector(".hero-orn .grid-bg").style.opacity = "0.25"; document.querySelectorAll(".hero-title .tech-word").forEach(e => e.style.color = "#fff"); const lede = document.querySelector(".hero-lede"); if (lede) lede.style.color = "rgba(246,243,236,0.85)"; const eyebrow = document.querySelector(".hero-eyebrow"); if (eyebrow) { eyebrow.style.background = "rgba(255,255,255,0.04)"; eyebrow.style.color = "#fff"; } } else { hero.style.background = ""; hero.style.color = ""; document.querySelector(".hero-orn .grid-bg").style.opacity = ""; document.querySelectorAll(".hero-title .tech-word").forEach(e => e.style.color = ""); const lede = document.querySelector(".hero-lede"); if (lede) lede.style.color = ""; const eyebrow = document.querySelector(".hero-eyebrow"); if (eyebrow) { eyebrow.style.background = ""; eyebrow.style.color = ""; } } } function applyStrip(on) { const strip = document.querySelector(".hero-strip"); if (strip) strip.style.display = on ? "" : "none"; } function TweaksApp() { const defaults = window.__MILET_TWEAKS || { palette: "balanced", headline: "Crescimento & conformidade — no mesmo time.", darkHero: false, showStrip: true, }; const [t, setTweak] = useTweaks(defaults); // Apply initial state once on mount, then re-apply whenever a tweak changes. useEffect(() => { applyPalette(t.palette); }, [t.palette]); useEffect(() => { applyHeadline(t.headline); }, [t.headline]); useEffect(() => { applyDarkHero(t.darkHero); }, [t.darkHero]); useEffect(() => { applyStrip(t.showStrip); }, [t.showStrip]); return ( ({ value: k, label: v.label }))} onChange={(v) => setTweak("palette", v)} /> setTweak("headline", v)} /> setTweak("darkHero", v)} /> setTweak("showStrip", v)} /> ); } const __mount = document.createElement("div"); __mount.id = "__tweaks_root"; document.body.appendChild(__mount); ReactDOM.createRoot(__mount).render();