/* ================================================== STOCK, Shared chrome for internal pages (Header + mega menu, Footer, Internal hero, Contact) Home file is NOT affected by this file. ================================================== */ const { useState, useEffect, useRef } = React; const HOME = 'index.html'; const PAGE_PRODUTO = 'Stock - Produto.html'; const PAGE_SOLUCOES = 'Stock - Soluções.html'; const PAGE_INSTITUCIONAL = 'Stock - Institucional.html'; const PAGE_CONTATO = 'Stock - Contato.html'; const IG_URL = 'https://www.instagram.com/stock.armazenagem/'; /* ---------- LOGO ---------- */ function Logo() { return ( Stock, Sistema de armazenagem e construtivos ); } /* ---------- NAV + MEGA DATA ---------- */ const NAV_LINKS = [ { label: 'HOME', href: HOME }, { label: 'SOLUÇÕES', href: PAGE_SOLUCOES, mega: true }, { label: 'CLIENTES', href: HOME + '#clientes' }, { label: 'INSTITUCIONAL', href: PAGE_INSTITUCIONAL }, { label: 'CONTATO', href: PAGE_CONTATO }, ]; const MEGA_PRODUCTS = [ { name: 'Porta Pallet', group: 'Estáticos', featured: true, href: 'porta-pallet.html', img: 'assets/produtos/porta-pallet.webp', desc: 'Seletividade total e layout flexível para qualquer operação.' }, { name: 'Mini Porta Pallet', group: 'Estáticos', href: 'mini-porta-pallet.html', img: 'assets/produtos/mini-porta-pallet.webp', desc: 'Compacto, ideal para cargas leves e fracionadas.' }, { name: 'Cantilever', group: 'Estáticos', href: 'cantilever.html', img: 'assets/produtos/cantilever.webp', desc: 'Para cargas longas e volumosas, sem colunas frontais.' }, { name: 'Mezanino', group: 'Estáticos', href: 'mezanino.html', img: 'assets/produtos/mezanino.webp', desc: 'Multiplica a área útil do galpão em novos pavimentos.' }, { name: 'Rack Pallet', group: 'Estáticos', href: 'rack-pallet.html', img: 'assets/produtos/porta-pallet.webp', desc: 'Paletização modular, robusta e de fácil movimentação.' }, { name: 'Drive In', group: 'Dinâmicos', href: 'drive-in.html', img: 'assets/produtos/drive-in.webp', desc: 'Alta densidade de estocagem sem corredores intermediários.' }, { name: 'Push Back', group: 'Dinâmicos', href: 'push-back.html', img: 'assets/produtos/push-back.webp', desc: 'Densidade com múltiplas posições por corredor.' }, { name: 'Flow Rack', group: 'Dinâmicos', href: 'flow-rack.html', img: 'assets/produtos/flow-rack.webp', desc: 'Separação ágil de pedidos com abastecimento por gravidade.' }, { name: 'Dinâmico', group: 'Dinâmicos', href: 'dinamico.html', img: 'assets/produtos/dinamico.webp', desc: 'Sistema FIFO: primeiro a entrar, primeiro a sair.' }, { name: 'Carro Satélite', group: 'Dinâmicos', href: 'carro-satelite.html', img: 'assets/produtos/carro-satelite.webp', desc: 'Movimentação semiautomática de alta densidade.' }, ]; const MEGA_SERVICES = [ { name: 'Projeto', href: PAGE_INSTITUCIONAL + '#projeto' }, { name: 'Fabricação', href: PAGE_INSTITUCIONAL + '#fabricacao' }, { name: 'Instalação', href: PAGE_INSTITUCIONAL + '#instalacao' }, ]; function HexIcon() { return ( ); } function MegaPanel({ onClose }) { const [hov, setHov] = useState(0); useEffect(() => { const onKey = (e) => { if (e.key === 'Escape') onClose(); }; window.addEventListener('keydown', onKey); return () => window.removeEventListener('keydown', onKey); }, [onClose]); const cols = [ { title: 'Estruturas Estáticas', items: MEGA_PRODUCTS.filter(p => p.group === 'Estáticos') }, { title: 'Estruturas Dinâmicas', items: MEGA_PRODUCTS.filter(p => p.group === 'Dinâmicos') }, ]; const idxOf = (p) => MEGA_PRODUCTS.indexOf(p); const cur = MEGA_PRODUCTS[hov]; return (

Soluções Stock

Estruturas sob medida para cada tipo de operação.

{cols.map(c => (
{c.title}
))}
Serviços
Quero fazer meu projeto
{MEGA_PRODUCTS.map((p, i) => (
))}
Estruturas {cur.group}

{cur.name}

{cur.desc}

Ver detalhes
); } function Header() { const [scrolled, setScrolled] = useState(false); const [megaOpen, setMegaOpen] = useState(false); useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 40); window.addEventListener('scroll', onScroll); onScroll(); return () => window.removeEventListener('scroll', onScroll); }, []); useEffect(() => { document.body.style.overflow = megaOpen ? 'hidden' : ''; return () => { document.body.style.overflow = ''; }; }, [megaOpen]); return (
Faça um orçamento
setMegaOpen(false)} />
); } /* ---------- INTERNAL HERO ---------- */ function InternalHero({ crumb, title, subtitle, cta, image, kicker }) { return (
{kicker && {kicker}}

{title}

{subtitle &&

{subtitle}

} {cta !== false && (
Faça um orçamento Ver soluções
)}
{image && (
{title}
Fabricação própria10.000 m² de área fabril
)}
); } /* ---------- CONTACT BLOCK (reused CTA) ---------- */ function ContactBlock({ id }) { const [sent, setSent] = useState(false); const onSubmit = (e) => { e.preventDefault(); setSent(true); setTimeout(() => setSent(false), 3000); }; return (
Entre em contato

Fale com nossos consultores

Solicite seu orçamento ou tire suas dúvidas. Nosso time responde rápido, geralmente no mesmo dia.

Endereço
Av. Assedipe, 15, Abreu e Lima/PE
); } /* ---------- FOOTER ---------- */ function Footer() { return ( ); } /* ---------- REVEAL HOOK ---------- */ function useScrollReveal() { useEffect(() => { const obs = new IntersectionObserver(entries => { entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('in'); obs.unobserve(e.target); } }); }, { threshold: 0.12, rootMargin: '0px 0px -60px 0px' }); document.querySelectorAll('.reveal').forEach(el => obs.observe(el)); return () => obs.disconnect(); }, []); } Object.assign(window, { Logo, Header, Footer, MegaPanel, HexIcon, InternalHero, ContactBlock, useScrollReveal, MEGA_PRODUCTS, MEGA_SERVICES, HOME, PAGE_PRODUTO, PAGE_SOLUCOES, PAGE_INSTITUCIONAL, PAGE_CONTATO, IG_URL, });