// page-rest.jsx — páginas do site const NEWSLETTER_FORM_URL = 'https://docs.google.com/forms/d/e/1FAIpQLSdNpRsogQ2dOqKcYEI9A8alkZfgcJbBa2VHX9lpo8_dM3MgNw/viewform?utm_source=ig&utm_medium=social&utm_content=link_in_bio&fbclid=PAcGRvZgJleHRuA2FlbQIxMQBzcnRjBmFwcF9pZA81NjcwNjczNDMzNTI0MjcAAadPMkxvM8IpWLvuaYVtIusqWUmblWMlDuPR8-IZG5kmJYGCaWNm9u8VzF7_2g_aem_v5AqtjFwaqbubSxYe5Ijhg'; const CONTATO_FORM_URL = 'https://forms.gle/PLACEHOLDER-CONTATO-TROCAR'; const MONITORIA_FORM_URL = 'https://docs.google.com/forms/d/e/1FAIpQLSeoOtcOT8wJDl0pa1OZvMVoNoiu6iSt2EsMxRocfrvos9O0hA/viewform?usp=send_form&utm_source=ig&utm_medium=social&utm_content=link_in_bio&fbclid=PAcGRvZgJleHRuA2FlbQIxMQBzcnRjBmFwcF9pZA81NjcwNjczNDMzNTI0MjcAAadPMkxvM8IpWLvuaYVtIusqWUmblWMlDuPR8-IZG5kmJYGCaWNm9u8VzF7_2g_aem_v5AqtjFwaqbubSxYe5Ijhg'; const MONITORIA_EDITAL_URL = 'https://www.canva.com/design/DAHRczi9KUQ/Q0_zu-G2MULuvr2yIepMPQ/view?utm_content=DAHRczi9KUQ&utm_campaign=designshare&utm_medium=link2&utm_source=uniquelinks&utlId=h8c031195a3&fbclid=PAb21jcAUBX_ZwZG9mAmV4dG4DYWVtAjExAHNydGMGYXBwX2lkDzU2NzA2NzM0MzM1MjQyNwABp08yTG8zwilYu-5phW0i6ypZSZuVYyUO49Hz4hkbmSYlgYJpY2b27xXMXv_a_aem_v5AqtjFwaqbubSxYe5Ijhg'; function useRevealCards(deps) { React.useEffect(() => { const t = setTimeout(() => { const io = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('visible'); io.unobserve(e.target); } }); }, { threshold: 0.05, rootMargin: '0px 0px -20px 0px' }); document.querySelectorAll('.fadein:not(.visible)').forEach(el => io.observe(el)); setTimeout(() => { document.querySelectorAll('.fadein:not(.visible)').forEach(el => { const rect = el.getBoundingClientRect(); if (rect.top < window.innerHeight && rect.bottom > 0) { el.classList.add('visible'); } }); }, 100); return () => io.disconnect(); }, 20); return () => clearTimeout(t); }, deps); } function FilterBar({ options, active, onChange, counts }) { const scrollRef = React.useRef(null); const [showLeft, setShowLeft] = React.useState(false); const [showRight, setShowRight] = React.useState(false); const checkScroll = React.useCallback(() => { const el = scrollRef.current; if (!el) return; setShowLeft(el.scrollLeft > 4); setShowRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 4); }, []); React.useEffect(() => { checkScroll(); const el = scrollRef.current; if (!el) return; el.addEventListener('scroll', checkScroll, { passive: true }); window.addEventListener('resize', checkScroll); return () => { el.removeEventListener('scroll', checkScroll); window.removeEventListener('resize', checkScroll); }; }, [checkScroll, options.length]); React.useEffect(() => { const el = scrollRef.current; if (!el) return; const activeBtn = el.querySelector('.filter-chip.active'); if (activeBtn) { const btnRect = activeBtn.getBoundingClientRect(); const wrapRect = el.getBoundingClientRect(); if (btnRect.right > wrapRect.right || btnRect.left < wrapRect.left) { activeBtn.scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' }); } } }, [active]); return (