// Main App: orchestrates language toggle, tweaks, assembles sections const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "lang": "en", "palette": "brand", "density": "normal", "hero_variant": "conversation" }/*EDITMODE-END*/; function App() { const [lang, setLang] = useState(() => localStorage.getItem('idna_lang') || TWEAK_DEFAULTS.lang); const [palette, setPalette] = useState(TWEAK_DEFAULTS.palette); const [density, setDensity] = useState(TWEAK_DEFAULTS.density); const [tweaksOpen, setTweaksOpen] = useState(false); const [playing, setPlaying] = useState(false); const t = window.IDNA_CONTENT[lang]; useEffect(() => { localStorage.setItem('idna_lang', lang); document.documentElement.lang = lang; }, [lang]); useEffect(() => { document.body.className = `palette-${palette} density-${density}`; }, [palette, density]); // Edit mode protocol useEffect(() => { function onMsg(e) { if (e.data?.type === '__activate_edit_mode') setTweaksOpen(true); if (e.data?.type === '__deactivate_edit_mode') setTweaksOpen(false); } window.addEventListener('message', onMsg); window.parent.postMessage({ type: '__edit_mode_available' }, '*'); return () => window.removeEventListener('message', onMsg); }, []); const persist = (key, val) => { window.parent.postMessage({ type: '__edit_mode_set_keys', edits: { [key]: val } }, '*'); }; const audioRef = useRef(null); if (!audioRef.current) { const a = new Audio('/landing-new/assets/idna-teach.mp3'); a.preload = 'none'; a.onended = () => setPlaying(false); a.onerror = () => setPlaying(false); audioRef.current = a; } const handlePlay = () => { const audio = audioRef.current; if (!playing) { audio.currentTime = 0; audio.play().then(() => setPlaying(true)).catch(() => setPlaying(false)); } else { audio.pause(); setPlaying(false); } }; return ( <>

Tweaks

); } ReactDOM.createRoot(document.getElementById('root')).render();