function initCookieConsent_memo(){function setCookie_memo(name,value,days){let expires="";if(days){const d=new Date();d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000);expires="; expires=" + d.toUTCString();}document.cookie=name+"="+(value || "") + expires + "; path=/; SameSite=Lax";}function getCookie_memo(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;}const COOKIE_NAME = "cookieConsentPrefs";const defaultPrefs={essential: true,statistics: false,marketing: false};let prefs = defaultPrefs;const styleContent = `
#cookie-consent-banner{position:fixed;bottom:0;left:0;right:0;background:#222;color:#fff;padding:15px 20px;font-family:Arial;font-size:14px;display:flex;align-items:center;z-index:2147483647;box-shadow:0 -2px 5px #0000004d;pointer-events:auto;gap:30px}
#cookie-consent-banner > div:first-child{flex:1;display:flex;flex-direction:column;justify-content:center}
#cookie-consent-banner > div:first-child h1{margin:0 0 5px;font-size:20px;font-weight:700;display:block;color:#fff}
#cookie-consent-banner > div:first-child p{margin:0 0 5px;font-size:14px;line-height:1.3;display:block;color:#fff}
#cookie-consent-banner > div:first-child a{color:#fff;text-decoration:underline;cursor:pointer;font-size:14px;width:fit-content}
#cookie-consent-banner > div:last-child{display:flex;gap:10px;flex-wrap:nowrap;justify-content:flex-end}
#cookie-consent-banner button{background:#0072ce;border:none;color:#fff;padding:8px 14px;cursor:pointer;border-radius:3px;font-weight:600;white-space:nowrap}
#cookie-consent-banner button:hover{background:#005bb5}
#cookie-consent-panel{position:fixed;top:0;left:0;height:100vh;width:350px;background:#222;font-family:Arial;color:#fff;font-size:14px;padding:25px 20px;overflow-y:auto;z-index:2147483647;display:flex;flex-direction:column;transform:translateX(-100%);transition:transform .3s ease-in-out;border-right:1px solid #ccc}
#cookie-consent-panel.show{transform:translateX(0)}
#cookie-consent-panel h2{margin-top:0;font-weight:700;font-size:20px;margin-bottom:15px;color:#fff}
#cookie-consent-panel p{margin-bottom:15px;line-height:1.4;color:#fff}
#cookie-consent-panel .cookie-category{margin-bottom:15px;border-bottom:1px solid #ddd;padding-bottom:10px}
.cookie-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.checkbox-toggle-label{position:relative;display:inline-flex;align-items:center;justify-content:space-between;width:90px;height:32px;background-color:#888;border-radius:20px;padding:4px 8px;cursor:pointer;font-size:12px;transition:background-color .3s}
.checkbox-toggle-label .checkbox-toggle-on,.checkbox-toggle-label .checkbox-toggle-off{z-index:2;font-weight:600;font-size:12px;transition:color .3s}
.checkbox-toggle-toggle{width:50%;height:100%;background:#fff;border-radius:50px;position:absolute;top:0;left:0;transition:transform .3s;z-index:1}
.checkbox-toggle-input:checked ~ .checkbox-toggle-toggle{transform:translate(100%,0%)}
.checkbox-toggle-input:checked ~ .checkbox-toggle-on{color:#0c6}
.checkbox-toggle-input:not(:checked) ~ .checkbox-toggle-off{color:#ccc}
.checkbox-toggle-input:checked ~ .checkbox-toggle-label{background-color:#0c6!important}
.checkbox-toggle-label:focus-within{outline:auto}
.checkbox-toggle-input{position:absolute;opacity:0;width:0;height:0}
.checkbox-toggle-on,.checkbox-toggle-off{color:#fff;font-weight:600;transition:opacity .2s;z-index:2}
.checkbox-toggle-toggle{width:50%;height:100%;background:#fff;border-radius:50px;position:absolute;top:0;left:0;transition:transform .3s;z-index:1}
.checkbox-toggle-input:checked ~ .checkbox-toggle-toggle{transform:translate(100%,0%)}
.ccc-sr-only{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px);white-space:nowrap}
.checkbox-toggle-label:focus-within{outline:auto}
#cookie-consent-panel button{background:#0072ce;border:none;color:#fff;padding:10px 16px;margin-top:10px;cursor:pointer;border-radius:3px;font-weight:600;width:100%}
#cookie-consent-panel button:hover{background:#005bb5}
#cookie-consent-panel #close-panel{background:transparent;border:2px solid #fff}
.cookie-title-with-toggle{display:flex;align-items:center;gap:6px;cursor:pointer;user-select:none}
.arrow{display:inline-block;transition:transform .3s ease;font-size:14px}
.cookie-title-with-toggle.active .arrow{transform:rotate(180deg)}
.cookie-description{display:none;margin-top:10px;font-size:13px;color:#444}
@media screen and (max-width: 576px) {#cookie-consent-banner{flex-direction:column!important}}
`;function injectStyle_memo(){if (!document.getElementById("cookie-consent-style")){const style=document.createElement("style");style.id="cookie-consent-style";style.textContent=styleContent;document.head.appendChild(style);}}
function createBanner_cookie()
{
if (document.getElementById("cookie-consent-banner"))return;
const banner = document.createElement("div");
banner.id = "cookie-consent-banner";
banner.innerHTML = `
Este website utiliza cookies
Utilizamos cookies para personalizar conteúdo e anúncios, fornecer funcionalidades de redes sociais e analisar o nosso tráfego...
Ver mais
Aceitar todos
Não Aceito
Detalhes
`;
document.body.appendChild(banner);
document.getElementById("cookie-accept-all").addEventListener("click", () => {prefs = { essential:true,statistics:true,marketing:true };savePrefs_memo();removeBanner_cookie();});
document.getElementById("cookie-dont-accept-all").addEventListener("click", () => {prefs = { essential: true, statistics: false, marketing: false };savePrefs_memo();removeBanner_cookie();});
document.getElementById("cookie-view-more").addEventListener("click", () => {removeBanner_cookie();showPanel_cookie();});
document.getElementById("cookie-details-all").addEventListener("click", () => {removeBanner_cookie();showPanel_cookie();});
}function removeBanner_cookie() {const b = document.getElementById("cookie-consent-banner");if (b) b.remove();}function updateSwitchLabels() {
const switches = document.querySelectorAll("#cookie-consent-panel .switch");
switches.forEach(s => {
const input = s.querySelector("input");
const label = s.querySelector(".switch-label");
if (input && label) {
label.textContent = input.checked ? "On" : "Off";
input.addEventListener("change", () => {label.textContent = input.checked ? "On" : "Off";});
}
});
} function createPanel_cookie(){
if (document.getElementById("cookie-consent-panel")) return;
const panel = document.createElement("div");
panel.id = "cookie-consent-panel";
panel.innerHTML = `
Configuração de Cookies Utilizamos cookies para personalizar conteúdo e anúncios, fornecer funcionalidades de redes sociais e analisar o nosso tráfego. Concorda com os nossos cookies se continuar a utilizar o nosso website.
Estes, estão ativos ainda que não aceite a nossa política de cookies, uma vez que têm em vista a operabilidade, otimização e a segurança do sistema. Servem para permitir o acesso às funções básicas de navegação no website, ao serviço que oferecemos, e a zonas seguras do website.
Por estes motivos, não carecem de autorização do utilizador.
São tendencialmente cookies de longa duração. Nome: PHPSESSID Fornecedor: www.designarte.pt Finalidade: Preserva o estado da sessão do utilizador entre pedidos de página.
É usada para manter funcionalidades essenciais, como login, carrinhos de compras ou navegação autenticada. Validade: Sessão (expira ao fechar o navegador) Nome: cookieConsentPrefs Fornecedor: www.designarte.pt Finalidade: Armazena o consentimento das cookies do utilizador para o domínio atual. Validade: 1 ano
Recolhem informação sobre a utilização feita do website (como os cliques realizados e os anúncios visualizados), permitindo identificar as preferências do utilizador para que a publicidade que lhe seja dirigida seja do seu melhor interesse. São cookies tendencialmente de longa duração, uma vez que são armazenados para que sejam disponibilizados numa próxima visita ao website. Nome: _ga Fornecedor: Google Finalidade: Regista um ID exclusivo usado para gerar dados estatísticos sobre como o utilizador utiliza o website. Validade: 2 anos Nome: _gid Fornecedor: Google Finalidade: Distingue os utilizadores e recolhe informações sobre como navegam no site, para fins estatísticos. Validade:
Os cookies de marketing são utilizados para direcionar anúncios aos visitantes e têm como finalidade contribuir para uma melhor experiência de navegação ajustada aos interesses do utilizador. O objetivo é divulgar conteúdos(inclusive editores e anunciantes) que sejam relevantes de acordo com as preferências individuais. Nome: _gcl_au Fornecedor: Google Finalidade: Utilizada pelo Google AdSense para experimentar a eficiência da publicidade em websites que utilizam os seus serviços. Validade:
Guardar preferências
Fechar
`;
document.body.appendChild(panel);updateSwitchLabels(); document.getElementById("cookie-save-prefs").addEventListener("click", () => {const newPrefs = {essential: true,statistics: document.getElementById("cookie-statistics").checked,marketing: document.getElementById("cookie-marketing").checked};savePrefs_memo(newPrefs);hidePanel_cookie();});
document.querySelectorAll('.cookie-title-with-toggle').forEach(toggle => {
toggle.addEventListener('click', () => {
const category = toggle.closest('.cookie-category');
const desc = category.querySelector('.cookie-description');
const isVisible = desc.style.display === 'table';
desc.style.display = isVisible ? 'none' : 'table';
toggle.classList.toggle('active', !isVisible);
toggle.setAttribute('aria-expanded', String(!isVisible));
});
toggle.addEventListener('keydown', e => {if (e.key === 'Enter' || e.key === ' ') {e.preventDefault();toggle.click();}});
});
document.getElementById("close-panel").addEventListener("click", () => {hidePanel_cookie();});
}
function showPanel_cookie() {const panel = document.getElementById("cookie-consent-panel");if (panel){document.getElementById("cookie-statistics").checked = prefs.statistics;document.getElementById("cookie-marketing").checked = prefs.marketing;panel.classList.add("show");updateSwitchLabels();}}
function hidePanel_cookie() {const panel = document.getElementById("cookie-consent-panel");if (panel) panel.classList.remove("show");}
function removeOptionalCookies() {
const consent = JSON.parse(getCookie_memo("cookieConsentPrefs") || "{}");
const hostname = window.location.hostname;
const rootDomain = hostname.replace(/^www\./i, "");
const domains = [null, hostname];
if (rootDomain !== hostname) {
domains.push(rootDomain, "." + rootDomain);
}
function expireCookie(name) {
domains.forEach(domain => {
const domainPart = domain ? "; domain=" + domain : "";
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0; path=/" + domainPart + "; SameSite=Lax";
});
}
const cookieNames = document.cookie
.split(";")
.map(cookie => cookie.trim().split("=")[0])
.filter(Boolean);
cookieNames.forEach(name => {
const isStatisticsCookie = /^_ga(?:_|$)/.test(name) || /^_gid$/.test(name) || /^_gat(?:_|$)/.test(name);
const isMarketingCookie = /^_gcl(?:_|$)/.test(name) || /^_gac(?:_|$)/.test(name);
if ((!consent.statistics && isStatisticsCookie) || (!consent.marketing && isMarketingCookie)) {
expireCookie(name);
}
});
}
function savePrefs_memo(passedPrefs)
{
const updatedPrefs = passedPrefs || prefs;
prefs = updatedPrefs;
setCookie_memo(COOKIE_NAME, JSON.stringify(updatedPrefs), 365);
removeOptionalCookies();
const analyticsGranted = !!updatedPrefs.statistics;
const marketingGranted = !!updatedPrefs.marketing;
if (typeof gtag === 'function') {
gtag('consent', 'update', {
'analytics_storage': analyticsGranted ? 'granted' : 'denied',
'ad_storage': marketingGranted ? 'granted' : 'denied',
'ad_user_data': marketingGranted ? 'granted' : 'denied',
'ad_personalization':marketingGranted ? 'granted' : 'denied',
// Essenciais mantêm-se granted
'functionality_storage': 'granted',
'security_storage': 'granted'
});
// Opcional: dispara um evento para GTM reagir (ex: ativar GA4 só após consent)
window.dataLayer && window.dataLayer.push({
event: 'cookie_consent_updated',
consent: {
statistics: analyticsGranted,
marketing: marketingGranted
}
});
}
}
function openCookieSettings() {
const panel = document.getElementById("cookie-consent-panel");
if (!panel) {console.warn("Painel de cookies não foi encontrado.");return;}
const cookiePrefs = getCookie_memo("cookieConsentPrefs");
if (cookiePrefs) {
try {
const prefs = JSON.parse(cookiePrefs);
document.getElementById("cookie-statistics").checked = !!prefs.statistics;
document.getElementById("cookie-marketing").checked = !!prefs.marketing;
} catch (e) {
console.warn("Erro ao ler preferências de cookies.");
}
}
panel.classList.add("show");
updateSwitchLabels();
}
function loadPrefs_memo() {
const cookie = getCookie_memo(COOKIE_NAME);
if (cookie) {
try {
const c = JSON.parse(cookie);
if (typeof c === "object" && c !== null) {
prefs = {essential: true,statistics: !!c.statistics,marketing: !!c.marketing};
}
} catch (e) {prefs = defaultPrefs;}
}
else {prefs = defaultPrefs;}
}
function init_memo()
{
injectStyle_memo();
const hasSavedPrefs = !!getCookie_memo(COOKIE_NAME);
loadPrefs_memo();
createPanel_cookie();
if (!hasSavedPrefs) {createBanner_cookie();}
else {savePrefs_memo(prefs);}
}
window.openCookieSettings = openCookieSettings;
window.savePrefs_memo = savePrefs_memo;
init_memo();
}
initCookieConsent_memo();