/** * Script de Consentimento de Cookies - Auto Estatísticas * Versão 1.0 * Compatível com LGPD */ // Configurações do Cookie Consent const cookieConfig = { cookieName: 'autoEstatisticasConsent', cookieExpiryDays: 365, necessaryCookies: ['session', 'security'], analyticsCookies: ['_ga', '_gid', '_gat'], marketingCookies: ['fbp', 'fr'], bannerPosition: 'bottom', colors: { bannerBackground: '#1a1a1a', bannerText: '#ffffff', buttonBackground: '#981e32', buttonText: '#ffffff', buttonHover: '#7a1728' }, content: { title: 'Este site usa cookies', message: 'Nós utilizamos cookies para melhorar sua experiência no site. Ao continuar navegando, você concorda com nossa Política de Privacidade.', accept: 'Aceitar todos', settings: 'Configurar', reject: 'Rejeitar não essenciais', close: '✕', necessaryTitle: 'Cookies Necessários', necessaryDesc: 'Essenciais para o funcionamento do site', analyticsTitle: 'Cookies de Análise', analyticsDesc: 'Nos ajudam a entender como você usa o site', marketingTitle: 'Cookies de Marketing', marketingDesc: 'Usados para personalizar anúncios', save: 'Salvar preferências' } }; // Verifica se o usuário já consentiu com os cookies function checkConsent() { const consent = getCookie(cookieConfig.cookieName); if (consent) { const consentData = JSON.parse(consent); loadCookies(consentData); return true; } return false; } // Mostra o banner de cookies se não houver consentimento function showCookieBanner() { if (checkConsent()) return; const banner = document.createElement('div'); banner.id = 'cookie-consent-banner'; banner.style.cssText = ` position: fixed; ${cookieConfig.bannerPosition}: 0; left: 0; right: 0; background: ${cookieConfig.colors.bannerBackground}; color: ${cookieConfig.colors.bannerText}; padding: 20px; z-index: 9999; display: flex; flex-direction: column; gap: 15px; box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.2); font-family: 'Montserrat', 'Roboto', sans-serif; `; const textContainer = document.createElement('div'); textContainer.style.cssText = 'max-width: 1200px; margin: 0 auto; width: 100%;'; if (cookieConfig.content.title) { const title = document.createElement('h3'); title.textContent = cookieConfig.content.title; title.style.cssText = 'margin: 0 0 10px 0; font-size: 1.2rem;'; textContainer.appendChild(title); } const message = document.createElement('p'); message.innerHTML = `${cookieConfig.content.message} Política de Privacidade`; message.style.cssText = 'margin: 0; font-size: 0.9rem; line-height: 1.5;'; textContainer.appendChild(message); const buttonsContainer = document.createElement('div'); buttonsContainer.style.cssText = 'display: flex; gap: 10px; flex-wrap: wrap; margin-top: 10px;'; const acceptAllBtn = createButton(cookieConfig.content.accept, 'accept-all', true); acceptAllBtn.addEventListener('click', () => { setConsent(true, true, true); banner.remove(); }); buttonsContainer.appendChild(acceptAllBtn); const settingsBtn = createButton(cookieConfig.content.settings, 'settings', false); settingsBtn.addEventListener('click', () => showSettingsModal()); buttonsContainer.appendChild(settingsBtn); const rejectBtn = createButton(cookieConfig.content.reject, 'reject', false); rejectBtn.addEventListener('click', () => { setConsent(true, false, false); banner.remove(); }); buttonsContainer.appendChild(rejectBtn); const closeBtn = document.createElement('button'); closeBtn.textContent = cookieConfig.content.close; closeBtn.style.cssText = ` position: absolute; top: 10px; right: 10px; background: none; border: none; color: ${cookieConfig.colors.bannerText}; font-size: 1rem; cursor: pointer; padding: 5px; `; closeBtn.addEventListener('click', () => { banner.remove(); // Define consentimento apenas para cookies necessários setConsent(true, false, false); }); banner.appendChild(closeBtn); banner.appendChild(textContainer); banner.appendChild(buttonsContainer); document.body.appendChild(banner); } // Mostra o modal de configurações avançadas function showSettingsModal() { const modal = document.createElement('div'); modal.id = 'cookie-settings-modal'; modal.style.cssText = ` position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: ${cookieConfig.colors.bannerBackground}; color: ${cookieConfig.colors.bannerText}; padding: 30px; z-index: 10000; max-width: 600px; width: 90%; border-radius: 8px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); font-family: 'Montserrat', 'Roboto', sans-serif; `; const closeBtn = document.createElement('button'); closeBtn.textContent = cookieConfig.content.close; closeBtn.style.cssText = ` position: absolute; top: 10px; right: 10px; background: none; border: none; color: ${cookieConfig.colors.bannerText}; font-size: 1rem; cursor: pointer; padding: 5px; `; closeBtn.addEventListener('click', () => modal.remove()); const title = document.createElement('h3'); title.textContent = 'Preferências de Cookies'; title.style.cssText = 'margin: 0 0 20px 0; font-size: 1.3rem;'; // Cookies Necessários (sempre ativos) const necessaryDiv = document.createElement('div'); necessaryDiv.style.marginBottom = '20px'; const necessaryTitle = document.createElement('h4'); necessaryTitle.textContent = cookieConfig.content.necessaryTitle; necessaryTitle.style.cssText = 'margin: 0 0 10px 0; font-size: 1.1rem;'; const necessaryDesc = document.createElement('p'); necessaryDesc.textContent = cookieConfig.content.necessaryDesc; necessaryDesc.style.cssText = 'margin: 0 0 10px 0; font-size: 0.9rem; opacity: 0.8;'; const necessaryCheckbox = document.createElement('input'); necessaryCheckbox.type = 'checkbox'; necessaryCheckbox.id = 'necessary-cookies'; necessaryCheckbox.checked = true; necessaryCheckbox.disabled = true; necessaryCheckbox.style.marginRight = '10px'; const necessaryLabel = document.createElement('label'); necessaryLabel.htmlFor = 'necessary-cookies'; necessaryLabel.textContent = 'Sempre ativos'; necessaryLabel.style.cssText = 'font-size: 0.9rem; cursor: not-allowed;'; necessaryDiv.appendChild(necessaryTitle); necessaryDiv.appendChild(necessaryDesc); necessaryDiv.appendChild(necessaryCheckbox); necessaryDiv.appendChild(necessaryLabel); // Cookies de Análise const analyticsDiv = document.createElement('div'); analyticsDiv.style.marginBottom = '20px'; const analyticsTitle = document.createElement('h4'); analyticsTitle.textContent = cookieConfig.content.analyticsTitle; analyticsTitle.style.cssText = 'margin: 0 0 10px 0; font-size: 1.1rem;'; const analyticsDesc = document.createElement('p'); analyticsDesc.textContent = cookieConfig.content.analyticsDesc; analyticsDesc.style.cssText = 'margin: 0 0 10px 0; font-size: 0.9rem; opacity: 0.8;'; const analyticsCheckbox = document.createElement('input'); analyticsCheckbox.type = 'checkbox'; analyticsCheckbox.id = 'analytics-cookies'; analyticsCheckbox.style.marginRight = '10px'; const analyticsLabel = document.createElement('label'); analyticsLabel.htmlFor = 'analytics-cookies'; analyticsLabel.textContent = 'Ativar cookies de análise'; analyticsLabel.style.cssText = 'font-size: 0.9rem; cursor: pointer;'; analyticsDiv.appendChild(analyticsTitle); analyticsDiv.appendChild(analyticsDesc); analyticsDiv.appendChild(analyticsCheckbox); analyticsDiv.appendChild(analyticsLabel); // Cookies de Marketing const marketingDiv = document.createElement('div'); marketingDiv.style.marginBottom = '30px'; const marketingTitle = document.createElement('h4'); marketingTitle.textContent = cookieConfig.content.marketingTitle; marketingTitle.style.cssText = 'margin: 0 0 10px 0; font-size: 1.1rem;'; const marketingDesc = document.createElement('p'); marketingDesc.textContent = cookieConfig.content.marketingDesc; marketingDesc.style.cssText = 'margin: 0 0 10px 0; font-size: 0.9rem; opacity: 0.8;'; const marketingCheckbox = document.createElement('input'); marketingCheckbox.type = 'checkbox'; marketingCheckbox.id = 'marketing-cookies'; marketingCheckbox.style.marginRight = '10px'; const marketingLabel = document.createElement('label'); marketingLabel.htmlFor = 'marketing-cookies'; marketingLabel.textContent = 'Ativar cookies de marketing'; marketingLabel.style.cssText = 'font-size: 0.9rem; cursor: pointer;'; marketingDiv.appendChild(marketingTitle); marketingDiv.appendChild(marketingDesc); marketingDiv.appendChild(marketingCheckbox); marketingDiv.appendChild(marketingLabel); // Botão Salvar const saveBtn = createButton(cookieConfig.content.save, 'save-settings', true); saveBtn.style.width = '100%'; saveBtn.addEventListener('click', () => { const analyticsConsent = document.getElementById('analytics-cookies').checked; const marketingConsent = document.getElementById('marketing-cookies').checked; setConsent(true, analyticsConsent, marketingConsent); modal.remove(); document.getElementById('cookie-consent-banner')?.remove(); }); modal.appendChild(closeBtn); modal.appendChild(title); modal.appendChild(necessaryDiv); modal.appendChild(analyticsDiv); modal.appendChild(marketingDiv); modal.appendChild(saveBtn); document.body.appendChild(modal); // Adiciona overlay const overlay = document.createElement('div'); overlay.style.cssText = ` position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); z-index: 9999; `; overlay.addEventListener('click', () => { modal.remove(); overlay.remove(); }); document.body.appendChild(overlay); } // Cria um botão estilizado function createButton(text, className, isPrimary) { const btn = document.createElement('button'); btn.textContent = text; btn.className = className; btn.style.cssText = ` padding: 10px 15px; border: none; border-radius: 4px; cursor: pointer; font-family: 'Montserrat', 'Roboto', sans-serif; font-size: 0.9rem; transition: all 0.3s ease; background: ${isPrimary ? cookieConfig.colors.buttonBackground : 'transparent'}; color: ${isPrimary ? cookieConfig.colors.buttonText : cookieConfig.colors.bannerText}; border: ${!isPrimary ? `1px solid ${cookieConfig.colors.bannerText}` : 'none'}; `; btn.addEventListener('mouseover', () => { if (isPrimary) { btn.style.background = cookieConfig.colors.buttonHover; } else { btn.style.background = 'rgba(255, 255, 255, 0.1)'; } }); btn.addEventListener('mouseout', () => { if (isPrimary) { btn.style.background = cookieConfig.colors.buttonBackground; } else { btn.style.background = 'transparent'; } }); return btn; } // Define o consentimento do usuário function setConsent(necessary, analytics, marketing) { const consentData = { necessary, analytics, marketing, date: new Date().toISOString() }; setCookie(cookieConfig.cookieName, JSON.stringify(consentData), cookieConfig.cookieExpiryDays); loadCookies(consentData); } // Carrega os cookies com base no consentimento function loadCookies(consent) { // Cookies necessários já estão sendo carregados // Carrega Google Analytics se consentido if (consent.analytics && !window.GA_INITIALIZED) { window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-XXXXX-Y'); // Substitua pelo seu ID do Google Analytics window.GA_INITIALIZED = true; } // Carrega Facebook Pixel se consentido if (consent.marketing && !window.FB_INITIALIZED) { !function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', 'XXXXXXXXXXXXXXX'); // Substitua pelo seu Pixel ID fbq('track', 'PageView'); window.FB_INITIALIZED = true; } } // Funções auxiliares para manipulação de cookies function setCookie(name, value, days) { const date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); const expires = "expires=" + date.toUTCString(); document.cookie = name + "=" + value + ";" + expires + ";path=/;SameSite=Lax"; } function getCookie(name) { const nameEQ = name + "="; const ca = document.cookie.split(';'); for (let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) === ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length); } return null; } // Inicializa o banner quando o DOM estiver pronto document.addEventListener('DOMContentLoaded', function() { if (!checkConsent()) { showCookieBanner(); } }); // Exporta funções para uso global (se necessário) window.cookieConsent = { showSettings: showSettingsModal, resetConsent: function() { document.cookie = `${cookieConfig.cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; showCookieBanner(); } };