// Milfers · Capa legal — banner de cookies + modal con pestañas (Aviso / Privacidad / Cookies) // Emails protegidos anti-bot: se ensamblan en runtime desde data-u / data-d / data-t. function LegalLayer() { React.useEffect(() => { const COOKIE_KEY = 'milfers_cookie_consent_v1'; /* ---- Email anti-bots: arma la dirección sólo en runtime ---- */ document.querySelectorAll('a.e-mail').forEach((a) => { const u = a.dataset.u, d = a.dataset.d, t = a.dataset.t; if (!u || !d || !t) return; const addr = u + '\u0040' + d + '.' + t; a.setAttribute('href', 'mailto:' + addr); if (a.dataset.show === 'addr') a.textContent = addr; }); /* ---- Banner de cookies ---- */ const cookieBanner = document.getElementById('cookieBanner'); function showCookieBanner() { if (!cookieBanner) return; cookieBanner.hidden = false; requestAnimationFrame(() => requestAnimationFrame(() => cookieBanner.classList.add('is-visible'))); } function hideCookieBanner() { if (!cookieBanner) return; cookieBanner.classList.remove('is-visible'); setTimeout(() => { cookieBanner.hidden = true; }, 260); } function setConsent(value) { try { localStorage.setItem(COOKIE_KEY, value); } catch (e) {} if (window.dataLayer) window.dataLayer.push({ event: 'cookie_consent', consent: value }); hideCookieBanner(); } try { if (!localStorage.getItem(COOKIE_KEY)) showCookieBanner(); } catch (e) { showCookieBanner(); } /* ---- Modal legal ---- */ const legalModal = document.getElementById('legalModal'); const LEGAL_META = { aviso: { eye: 'Aviso legal', ttl: 'Aviso legal y condiciones de uso.' }, privacidad: { eye: 'Privacidad', ttl: 'Política de privacidad.' }, cookies: { eye: 'Cookies', ttl: 'Política de cookies.' } }; function openLegal(tab) { if (!legalModal) return; tab = tab || 'aviso'; legalModal.querySelectorAll('.legal-tab').forEach((b) => b.classList.toggle('is-active', b.dataset.legalTab === tab)); legalModal.querySelectorAll('.legal-pane').forEach((p) => p.classList.toggle('is-active', p.dataset.legalPane === tab)); const meta = LEGAL_META[tab] || LEGAL_META.aviso; legalModal.querySelector('[data-legal-eyebrow]').textContent = meta.eye; legalModal.querySelector('[data-legal-title]').textContent = meta.ttl; legalModal.querySelector('.legal-body').scrollTop = 0; legalModal.hidden = false; document.body.classList.add('no-scroll'); setTimeout(() => legalModal.classList.add('is-open'), 0); } function closeLegal() { legalModal.classList.remove('is-open'); document.body.classList.remove('no-scroll'); setTimeout(() => { legalModal.hidden = true; }, 220); } function onClick(e) { if (e.target.closest('[data-cookie-accept]')) { setConsent('all'); return; } if (e.target.closest('[data-cookie-decline]')) { setConsent('necessary'); return; } const op = e.target.closest('[data-legal-open]'); if (op) { e.preventDefault(); openLegal(op.getAttribute('data-legal-open')); return; } if (e.target.closest('[data-legal-close]')) { closeLegal(); return; } const tb = e.target.closest('[data-legal-tab]'); if (tb) { openLegal(tb.getAttribute('data-legal-tab')); return; } } function onKey(e) { if (e.key === 'Escape' && legalModal && !legalModal.hidden) closeLegal(); } document.addEventListener('click', onClick); document.addEventListener('keydown', onKey); return () => { document.removeEventListener('click', onClick); document.removeEventListener('keydown', onKey); }; }, []); return ( {/* ▸ COOKIE BANNER */} {/* ▸ LEGAL MODAL */} ); } window.LegalLayer = LegalLayer;