/* global React, ReactDOM, useTweaks, TweaksPanel, TweakSection, TweakRadio, TweakSelect, TweakSlider, TweakToggle, TweakColor */ const { useEffect: useEffectApp, useState: useStateApp } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "heroVariant": "editorial", "savingsPct": 16, "fontDisplay": "Sora", "fontSans": "Plus Jakarta Sans", "typeScale": 1, "animations": true, "primaryGreen": "#155224", "accentYellow": "#f5c64a", "accentOrange": "#ed6a1c" }/*EDITMODE-END*/; const FONT_DISPLAY_OPTIONS = ["Sora", "Space Grotesk", "Manrope", "DM Sans", "Instrument Serif", "Fraunces"]; const FONT_SANS_OPTIONS = ["Plus Jakarta Sans", "Inter", "DM Sans", "Manrope", "IBM Plex Sans", "Geist"]; function App() { const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS); // apply CSS variables from tweaks useEffectApp(() => { const r = document.documentElement; r.style.setProperty("--green-900", tweaks.primaryGreen); r.style.setProperty("--yellow", tweaks.accentYellow); r.style.setProperty("--orange", tweaks.accentOrange); r.style.setProperty("--font-display", `"${tweaks.fontDisplay}", sans-serif`); r.style.setProperty("--font-sans", `"${tweaks.fontSans}", sans-serif`); r.style.setProperty("--typescale", tweaks.typeScale); }, [tweaks]); // dynamically load chosen google fonts useEffectApp(() => { const id = "dyn-fonts"; let link = document.getElementById(id); if (!link) { link = document.createElement("link"); link.id = id; link.rel = "stylesheet"; document.head.appendChild(link); } const f1 = tweaks.fontDisplay.replace(/ /g, "+"); const f2 = tweaks.fontSans.replace(/ /g, "+"); link.href = `https://fonts.googleapis.com/css2?family=${f1}:ital,wght@0,400;0,600;1,400&family=${f2}:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap`; }, [tweaks.fontDisplay, tweaks.fontSans]); // scroll reveal useEffectApp(() => { const els = document.querySelectorAll(".reveal"); const io = new IntersectionObserver((entries) => { entries.forEach((e) => { if (e.isIntersecting) e.target.classList.add("in"); }); }, { threshold: 0.1 }); els.forEach((el) => io.observe(el)); return () => io.disconnect(); }, [tweaks.heroVariant]); const goToSimulator = () => { document.getElementById("simular")?.scrollIntoView({ behavior: "smooth" }); }; const Hero = tweaks.heroVariant === "bold" ? window.HeroBoldNumber : window.HeroEditorial; return (
); } ReactDOM.createRoot(document.getElementById("root")).render();