// App — wires everything together
const App = () => {
const defaults = JSON.parse(document.getElementById('tweak-defaults').textContent.replace(/\/\*EDITMODE-(BEGIN|END)\*\//g, ''));
const [tweaks, setTweaks] = useState(defaults);
const [tweaksActive, setTweaksActive] = useState(false);
const [bookingOpen, setBookingOpen] = useState(false);
const [bookingPrefill, setBookingPrefill] = useState('single');
const [showStickyBar, setShowStickyBar] = useState(false);
const [activeSection, setActiveSection] = useState('');
const openBooking = (service = 'masazas60') => {
setBookingPrefill(service);
setBookingOpen(true);
};
useEffect(() => {
const onScroll = () => {
const y = window.scrollY;
setShowStickyBar(y > 900 && tweaks.showStickyBookBar && !bookingOpen);
const sections = ['about','method','process','results','pricing','faq'];
let current = '';
for (const id of sections) {
const el = document.getElementById(id);
if (el && el.offsetTop - 120 <= y) current = id;
}
setActiveSection(current);
};
window.addEventListener('scroll', onScroll, { passive: true });
onScroll();
return () => window.removeEventListener('scroll', onScroll);
}, [tweaks.showStickyBookBar, bookingOpen]);
useEffect(() => {
const listener = (e) => {
if (e.data?.type === '__activate_edit_mode') setTweaksActive(true);
if (e.data?.type === '__deactivate_edit_mode') setTweaksActive(false);
};
window.addEventListener('message', listener);
window.parent.postMessage({ type: '__edit_mode_available' }, '*');
return () => window.removeEventListener('message', listener);
}, []);
return (
<>
{tweaks.showPromoBanner && }