/* ========================================== SHELL — Header, Footer, page wrapper ========================================== */ const NAV = [ { id: 'home', label: 'Início', path: '/' }, { id: 'metodo', label: 'Método', path: '/metodo' }, { id: 'solucoes', label: 'Soluções', path: '/solucoes' }, { id: 'projetos', label: 'Projetos', path: '/projetos' }, { id: 'mentoria', label: 'Mentoria', path: '/mentoria' }, { id: 'blog', label: 'Conteúdo', path: '/conteudo' }, { id: 'sobre', label: 'Sobre', path: '/sobre' }, { id: 'contato', label: 'Contato', path: '/contato' }, ]; const Header = ({ page, onNav, dark }) => { const [open, setOpen] = React.useState(false); React.useEffect(() => { setOpen(false); }, [page]); React.useEffect(() => { document.body.style.overflow = open ? 'hidden' : ''; return () => { document.body.style.overflow = ''; }; }, [open]); const go = (p) => { setOpen(false); onNav(p); }; const handleNavClick = (event, targetPage) => { if ( event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey ) { return; } event.preventDefault(); go(targetPage); }; return (
handleNavClick(event, 'home')} style={{ cursor: 'pointer' }}>
setOpen(false)}/> ); }; const Footer = ({ onNav }) => (
© 2026 Yohann Escher
IA AUTOMAÇÃO SISTEMAS EXECUÇÃO
); // Reveal-on-scroll wrapper const Reveal = ({ children, stagger = false, delay = 0, className = '', as = 'div', style = {} }) => { const ref = React.useRef(null); const [inView, setInView] = React.useState(false); React.useEffect(() => { const el = ref.current; if (!el) return; const io = new IntersectionObserver(([e]) => { if (e.isIntersecting) { setTimeout(() => setInView(true), delay); io.disconnect(); } }, { threshold: 0.12, rootMargin: '0px 0px -40px 0px' }); io.observe(el); return () => io.disconnect(); }, [delay]); const Cls = `${stagger ? 'reveal-stagger' : 'reveal'} ${inView ? 'in' : ''} ${className}`; const Tag = as; return {children}; }; // Avatar stack (for "Empresas que..." style) const AvatarStack = ({ count = 3, more = '+', size = 28 }) => { const photos = [ 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=80&h=80&fit=crop', 'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=80&h=80&fit=crop', 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=80&h=80&fit=crop', ]; return (
{photos.slice(0, count).map((p, i) => (
))} {more &&
{more}
}
); }; // Scroll-reveal section heading const SectionHead = ({ eyebrow, title, lead, cta, side, dark }) => (
{eyebrow &&
{eyebrow}
} {title &&

} {lead &&

{lead}

} {cta}

{side &&
{side}
}
); window.Header = Header; window.Footer = Footer; window.Reveal = Reveal; window.AvatarStack = AvatarStack; window.SectionHead = SectionHead; window.NAV = NAV;