// shared.jsx — Reusable UI primitives, header, footer, menu (IA V2) function Arrow() { return ; } function Cta({ children, href, onClick, large, target }) { const cls = "cta" + (large ? " cta-large" : ""); const Tag = href ? "a" : "button"; const props = href ? { href, target, rel: target === "_blank" ? "noreferrer" : undefined } : { type: "button", onClick }; return ( {children} ); } function MenuToggle({ onClick }) { return ( ); } function Header({ onDark, onMenuOpen, navigate }) { const nav = (e, path, hash) => { e.preventDefault(); navigate(path, hash); }; return (
nav(e, '/')}>AMVZ
nav(e, '/prendre-rendez-vous')}> Prendre rendez-vous
); } function MenuOverlay({ open, onClose, navigate }) { const [sub, setSub] = React.useState(null); const go = (path, hash) => { onClose(); setSub(null); setTimeout(() => navigate(path, hash), 50); }; return (
{ e.preventDefault(); go('/'); }} style={{ color: 'var(--brown)' }}>AMVZ
AMVZ — Etterbeek, Bruxelles

Praticienne indépendante en kinésiologie de la santé, Reiki et soins par les bols de cristal. Cercles de femmes mensuels.

« Le corps sait avant la tête. »

Naviguer { e.preventDefault(); go('/'); }}>Accueil {sub === 'acc' && (
{ e.preventDefault(); go('/kinesiologie'); }}>Kinésiologie de la santé { e.preventDefault(); go('/reiki'); }}>Reiki et bols de cristal
)} {sub === 'ag' && (
{ e.preventDefault(); go('/agenda', '#cercles'); }}>Cercles { e.preventDefault(); go('/agenda', '#evenements'); }}>Événements
)} { e.preventDefault(); go('/journal'); }}>Journal { e.preventDefault(); go('/contact'); }}>Contact { e.preventDefault(); go('/prendre-rendez-vous'); }}>Prendre rendez-vous
); } function Footer({ navigate }) { const nav = (e, path) => { e.preventDefault(); navigate(path); }; return ( ); } // Reveal-on-scroll wrapper function Reveal({ children, as: Tag = 'div', className = '', ...rest }) { const ref = React.useRef(null); const [visible, setVisible] = React.useState(false); React.useEffect(() => { const el = ref.current; if (!el) return; const obs = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) { setVisible(true); obs.disconnect(); } }); }, { threshold: 0.12 }); obs.observe(el); return () => obs.disconnect(); }, []); return {children}; } Object.assign(window, { Arrow, Cta, MenuToggle, Header, MenuOverlay, Footer, Reveal });