const { useState: useState4, useEffect: useEffect4 } = React; /* ========================================================= TWEAKS PANEL (variant switch, persisted) ========================================================= */ window.TweaksPanel = function TweaksPanel({ variant, setVariant, accent, setAccent }) { const [open, setOpen] = useState4(false); useEffect4(() => { const handler = (e) => { if (e.data?.type === '__activate_edit_mode') setOpen(true); if (e.data?.type === '__deactivate_edit_mode') setOpen(false); }; window.addEventListener('message', handler); window.parent.postMessage({type:'__edit_mode_available'}, '*'); return () => window.removeEventListener('message', handler); }, []); const commit = (edits) => { window.parent.postMessage({type:'__edit_mode_set_keys', edits}, '*'); }; if (!open) return null; return (

Дизайн

{[ ['corporate', 'Corporate'], ['warm', 'Warm'], ['bold', 'Bold'], ].map(([v, l]) => ( ))}
{[ ['serif', 'Editorial'], ['sans', 'Sans'], ].map(([v, l]) => ( ))}
3 напрямки: Corporate — синій + editorial, Warm — теплі тони amber, Bold — чорний + жовтий акцент.
); }; /* ========================================================= COOKIE BANNER + STICKY MESSENGERS ========================================================= */ window.CookieBanner = function CookieBanner() { const [show, setShow] = useState4(true); if (!show) return null; return (
Ми використовуємо cookies для покращення роботи сайту. Продовжуючи, ви погоджуєтесь з Політикою конфіденційності.
); }; window.StickyMessengers = function StickyMessengers() { return (
); }; /* ========================================================= ROOT APP ========================================================= */ function App() { const TWEAKS = /*EDITMODE-BEGIN*/{ "variant": "corporate", "accent": "serif" }/*EDITMODE-END*/; const [variant, setVariant] = useState4(TWEAKS.variant); const [accent, setAccent] = useState4(TWEAKS.accent); const [lang, setLang] = useState4(() => { try { return localStorage.getItem('mosty_lang') || 'UA'; } catch(e) { return 'UA'; } }); useEffect4(() => { document.documentElement.setAttribute('data-variant', variant); document.documentElement.setAttribute('data-accent', accent); }, [variant, accent]); // Set data-lang SYNCHRONOUSLY before render so t() reads correct value if (typeof document !== 'undefined') { document.documentElement.setAttribute('data-lang', lang); } useEffect4(() => { document.documentElement.setAttribute('data-lang', lang); document.documentElement.setAttribute('lang', lang === 'RU' ? 'ru' : 'uk'); try { localStorage.setItem('mosty_lang', lang); } catch(e) {} if (window.I18N && window.I18N[lang]) { document.title = window.I18N[lang].title; const desc = document.querySelector('meta[name="description"]'); if (desc) desc.setAttribute('content', window.I18N[lang].description); const kw = document.querySelector('meta[name="keywords"]'); if (kw) kw.setAttribute('content', window.I18N[lang].keywords); } }, [lang]); return (
); } ReactDOM.createRoot(document.getElementById('root')).render();