// site/app.jsx — main App: language state, tweaks integration, section composition. const { useState: useStateApp, useEffect: useEffectApp } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "heroVariant": "centered", "channelsLayout": "grid", "pricingLayout": "table", "palette": "mix", "showAppNote": true }/*EDITMODE-END*/; function App() { // Language state — start from detection, persist on change. const [lang, setLangState] = useStateApp(() => detectLang()); useEffectApp(() => { document.documentElement.lang = lang; try { localStorage.setItem('showtime-lang', lang); } catch (e) {} }, [lang]); const setLang = (v) => setLangState(v); // Tweaks state via the starter hook. const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); // Apply palette class on body so section selectors can react. useEffectApp(() => { document.body.classList.remove('sw-palette--mix', 'sw-palette--yellow', 'sw-palette--calm'); document.body.classList.add('sw-palette--' + (t.palette || 'mix')); }, [t.palette]); return (
setTweak('heroVariant', v)} /> setTweak('channelsLayout', v)} /> setTweak('pricingLayout', v)} /> setTweak('palette', v)} /> setLang(v)} />
); } ReactDOM.createRoot(document.getElementById('root')).render();