// 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 (
<>