/** * LP Diagnóstico - Base Científica * Main JavaScript - Funcionalidades Core * Inclui: Scroll-reveal, Cookies/LGPD, Formulários, Analytics, WhatsApp */ document.addEventListener('DOMContentLoaded', function () { // ======================================== // 1. SCROLL REVEAL ANIMATION // ======================================== if ('IntersectionObserver' in window) { var els = document.querySelectorAll('.reveal'); var io = new IntersectionObserver(function (entries) { entries.forEach(function (e) { if (e.isIntersecting) { e.target.classList.add('in-view'); io.unobserve(e.target); } }); }, { threshold: 0.12, rootMargin: '0px 0px -8% 0px' }); els.forEach(function (el) { io.observe(el); }); setTimeout(function () { els.forEach(function (el) { el.classList.add('in-view'); }); }, 1600); } else { document.querySelectorAll('.reveal').forEach(function (el) { el.classList.add('in-view'); }); } // ======================================== // 2. STICKY HEADER SHADOW // ======================================== var header = document.querySelector('.site-header'); if (header) { window.addEventListener('scroll', function () { header.classList.toggle('site-header--scrolled', window.scrollY > 10); }, { passive: true }); } // ======================================== // 3. FORMULÁRIO - CLIENT SIDE VALIDATION // ======================================== var form = document.querySelector('.form-box'); if (form) { form.addEventListener('submit', function (ev) { ev.preventDefault(); // Validação básica var required = form.querySelectorAll('[required], #foco'); var valid = true; required.forEach(function (field) { if (!field.value) valid = false; }); if (!valid) { form.reportValidity ? form.reportValidity() : alert('Preencha os campos obrigatórios.'); return; } // Coletar dados var data = { foco: form.querySelector('#foco') ? form.querySelector('#foco').value : '', nome: form.querySelector('#nome') ? form.querySelector('#nome').value : '', email: form.querySelector('#email') ? form.querySelector('#email').value : '', cro: form.querySelector('#cro') ? form.querySelector('#cro').value : '', cargo: form.querySelector('#cargo') ? form.querySelector('#cargo').value : '' }; // Google Tag Manager event if (window.dataLayer) { window.dataLayer.push({ event: 'form_submit', form_name: 'escopo_tecnico' }); } // Mensagem de sucesso form.innerHTML = '
Obrigado! Nossa equipe técnica retornará em até 48 horas úteis.
'; // Aqui você pode enviar os dados para um backend // Exemplo com Formspree: // fetch('https://formspree.io/f/YOUR_FORM_ID', { // method: 'POST', // body: JSON.stringify(data), // headers: { 'Content-Type': 'application/json' } // }).catch(err => console.error('Form submit error:', err)); }); } // ======================================== // 4. COOKIE BANNER - LGPD/Consentimento // ======================================== const banner = document.getElementById('cookie-banner'); const panel = document.getElementById('cookie-panel'); const acceptBtn = document.getElementById('cookie-accept'); const rejectBtn = document.getElementById('cookie-reject'); const settingsBtn = document.getElementById('cookie-settings'); const saveBtn = document.getElementById('cookie-save'); const analyticsCb = document.getElementById('cookie-analytics'); const marketingCb = document.getElementById('cookie-marketing'); const STORAGE_KEY = 'cookie-consent'; function hideBanner() { if (banner) banner.style.display = 'none'; } function saveConsent(data) { localStorage.setItem(STORAGE_KEY, JSON.stringify(data)); hideBanner(); if (data.analytics) loadAnalytics(); if (data.marketing) loadMarketing(); } function loadAnalytics() { console.log('Analytics consent granted'); // Aqui você carregaria Google Analytics, Mixpanel, etc. } function loadMarketing() { console.log('Marketing consent granted'); // Aqui você carregaria Facebook Pixel, etc. } const saved = localStorage.getItem(STORAGE_KEY); if (saved) { hideBanner(); const consent = JSON.parse(saved); if (consent.analytics) loadAnalytics(); if (consent.marketing) loadMarketing(); } if (acceptBtn) { acceptBtn.addEventListener('click', () => { saveConsent({ essential: true, analytics: true, marketing: true }); }); } if (rejectBtn) { rejectBtn.addEventListener('click', () => { saveConsent({ essential: true, analytics: false, marketing: false }); }); } if (settingsBtn) { settingsBtn.addEventListener('click', () => { if (panel) panel.classList.toggle('hidden'); }); } if (saveBtn) { saveBtn.addEventListener('click', () => { saveConsent({ essential: true, analytics: analyticsCb ? analyticsCb.checked : false, marketing: marketingCb ? marketingCb.checked : false }); }); } // ======================================== // 5. DETAILS/ACCORDION (FAQ) // ======================================== var detailsElements = document.querySelectorAll('details'); detailsElements.forEach(function (el) { el.addEventListener('toggle', function () { // Fecha outros accordions ao abrir um if (this.open) { detailsElements.forEach(function (other) { if (other !== el && other.open) { other.open = false; } }); } }); }); // ======================================== // 6. SMOOTH SCROLL FALLBACK // ======================================== document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { const href = this.getAttribute('href'); if (href === '#') { e.preventDefault(); return; } const target = document.querySelector(href); if (target) { e.preventDefault(); target.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); }); // ======================================== // 7. LOAD TIME METRICS (Performance) // ======================================== if (window.performance && window.performance.timing) { window.addEventListener('load', function () { var perfData = window.performance.timing; var pageLoadTime = perfData.loadEventEnd - perfData.navigationStart; console.log('Page load time:', pageLoadTime + 'ms'); // Enviar para analytics if (window.dataLayer) { window.dataLayer.push({ event: 'page_load_time', value: pageLoadTime }); } }); } console.log('✅ LP Diagnóstico - Scripts initialized'); });