web-next: página /cookies (Declaración de Cookies) + consentimiento Zaraz

Crea la ruta de Declaración de Cookies con el markup del tema y las 5 tablas
de cookies (uw-cookie-table, estilizadas en globals.css) + estilos de listas
y botones (btn-uw). Los enlaces internos .php se cablean a las rutas Next
(/privacy-policy, /contact-us).

Sistema de consentimiento = Cloudflare Zaraz (elección del usuario):
components/CookieConsent.tsx expone window.UWCookies.showBanner()
(zaraz.consent.modal=true) y revokeConsent() (zaraz.consent.setAll(false)),
que Cloudflare activa cuando el dominio pasa por su proxy con Zaraz Consent;
degrada con aviso si Zaraz no está presente. El footer ya enlazaba aquí.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-13 11:49:16 +00:00
parent 8ebf59f991
commit e289a87d1f
3 changed files with 303 additions and 0 deletions
+180
View File
@@ -0,0 +1,180 @@
import type { Metadata } from 'next'
import { Link } from '@/i18n/navigation'
import { CookieConsentButtons } from '@/components/CookieConsent'
export const metadata: Metadata = {
title: 'Declaración de Cookies',
}
export default function CookiesPage() {
return (
<div className="main-page">
<div className="middle-content">
<div className="body-content">
<div className="title-content">
<h1>Declaración de Cookies</h1>
</div>
<div className="box-content">
<div className="body-box-content justified">
<p>Esta página web usa cookies. Las cookies de este sitio web se usan para personalizar el contenido y los anuncios, ofrecer funciones de redes sociales y analizar el tráfico. Además, compartimos información sobre el uso que haga del sitio web con nuestros partners de redes sociales, publicidad y análisis web, quienes pueden combinarla con otra información que les haya proporcionado o que hayan recopilado a partir del uso que haya hecho de sus servicios.</p>
<br />
<p>Las cookies son pequeños archivos de texto que las páginas web pueden utilizar para hacer más eficiente la experiencia del usuario.</p>
<p>La ley afirma que podemos almacenar cookies en tu dispositivo si son estrictamente necesarias para el funcionamiento de esta página. Para todos los demás tipos de cookies necesitamos tu permiso.</p>
<br />
<p>Esta página utiliza tipos diferentes de cookies. Algunas cookies son colocadas por servicios de terceros que aparecen en nuestras páginas.</p>
<p>En cualquier momento puedes cambiar o retirar tu consentimiento desde esta Declaración de cookies en nuestro sitio web.</p>
<br />
<p>Obten más información sobre quiénes somos, cómo puedes contactarnos y cómo procesamos los datos personales en nuestra <Link href="/privacy-policy">Política de Privacidad</Link>.</p>
<br />
<hr />
<br />
<span>Tipos de cookies que utilizamos</span>
<br />
<span className="second-brown">Cookies Necesarias</span>
<p>Las cookies necesarias ayudan a hacer una página web utilizable activando funciones básicas como la navegación en la página y el acceso a áreas seguras de la página web. La página web no puede funcionar adecuadamente sin estas cookies.</p>
<table className="uw-cookie-table">
<thead>
<tr>
<th>Cookie</th>
<th>Proveedor</th>
<th>Propósito</th>
<th>Duración</th>
</tr>
</thead>
<tbody>
<tr><td>PHPSESSID</td><td>UltimoWoW</td><td>Mantiene el estado de la sesión del usuario entre páginas. Presente en ultimowow.com y wotlk.ultimowow.com.</td><td>Sesión</td></tr>
<tr><td>uw_cookie_consent</td><td>UltimoWoW</td><td>Almacena tus preferencias de consentimiento de cookies. Se comparte entre ultimowow.com y wotlk.ultimowow.com.</td><td>1 año</td></tr>
<tr><td>cf_clearance</td><td>Cloudflare</td><td>Identifica tráfico legítimo y protege contra bots.</td><td>1 año</td></tr>
<tr><td>__cf_bm</td><td>Cloudflare</td><td>Bot management y protección contra ataques DDoS.</td><td>30 minutos</td></tr>
<tr><td>_cfuvid</td><td>Cloudflare</td><td>Identificador de sesión para gestión de tráfico.</td><td>Sesión</td></tr>
<tr><td>CF_VERIFIED_DEVICE_*</td><td>Cloudflare</td><td>Verificación de dispositivo para seguridad.</td><td>30 días</td></tr>
<tr><td>_cf_logged_in</td><td>Cloudflare</td><td>Indica estado de autenticación en servicios Cloudflare.</td><td>Sesión</td></tr>
<tr><td>cf_chl_*</td><td>Cloudflare Turnstile</td><td>Cookies del sistema de verificación captcha Turnstile.</td><td>Variable</td></tr>
<tr><td>cf.turnstile.u</td><td>Cloudflare Turnstile</td><td>Distingue entre humanos y bots en el sistema de verificación.</td><td>Persistente</td></tr>
<tr><td>zaraz-consent</td><td>Cloudflare Zaraz</td><td>Gestión de consentimiento del sistema Zaraz.</td><td>1 año</td></tr>
<tr><td>cfz_*</td><td>Cloudflare Zaraz</td><td>Cookies técnicas del sistema de gestión de tags Zaraz.</td><td>Variable</td></tr>
</tbody>
</table>
<p className="third-brown">Nota sobre Cloudflare: Utilizamos Cloudflare como proveedor de seguridad y rendimiento. Cloudflare puede establecer cookies adicionales de forma dinámica para proteger el sitio contra amenazas, gestionar el tráfico y optimizar el rendimiento. Estas cookies son estrictamente necesarias para el funcionamiento seguro del sitio. Para más información, consulta la <a href="https://www.cloudflare.com/cookie-policy/" target="_blank" rel="noopener">Política de Cookies de Cloudflare</a>.</p>
<br />
<span className="second-brown">Cookies de Preferencias</span>
<p>Las cookies de preferencias permiten a la página web recordar información que cambia la forma en que la página se comporta o el aspecto que tiene, como su idioma preferido o la región en la que usted se encuentra.</p>
<table className="uw-cookie-table">
<thead>
<tr>
<th>Cookie</th>
<th>Proveedor</th>
<th>Propósito</th>
<th>Duración</th>
</tr>
</thead>
<tbody>
<tr><td>comments_sort</td><td>wotlk.ultimowow.com</td><td>Guarda tu preferencia de ordenación de comentarios.</td><td>1 año</td></tr>
<tr><td>wwcomments_sort</td><td>wotlk.ultimowow.com</td><td>Guarda tu preferencia de ordenación de comentarios.</td><td>1 año</td></tr>
<tr><td>temp_default_3dmodel</td><td>wotlk.ultimowow.com</td><td>Guarda la configuración del visor 3D de modelos.</td><td>1 año</td></tr>
</tbody>
</table>
<span className="second-brown">Cookies Analíticas</span>
<p>Las cookies analíticas nos permiten contar las visitas y fuentes de tráfico para poder medir y mejorar el rendimiento de nuestro sitio. Nos ayudan a saber qué páginas son las más y menos populares, y a ver cómo se mueven los visitantes por el sitio. Toda la información que recogen estas cookies es agregada y, por lo tanto, anónima.</p>
<table className="uw-cookie-table">
<thead>
<tr>
<th>Cookie</th>
<th>Proveedor</th>
<th>Propósito</th>
<th>Duración</th>
</tr>
</thead>
<tbody>
<tr><td>_ga</td><td>Google Analytics</td><td>Distingue usuarios únicos asignando un número aleatorio.</td><td>2 años</td></tr>
<tr><td>_ga_*</td><td>Google Analytics</td><td>Mantiene el estado de la sesión.</td><td>2 años</td></tr>
<tr><td>_gid</td><td>Google Analytics</td><td>Distingue usuarios para análisis estadístico.</td><td>24 horas</td></tr>
<tr><td>_gat</td><td>Google Analytics</td><td>Limita la velocidad de solicitudes.</td><td>1 minuto</td></tr>
<tr><td>sparrow_id</td><td>Cloudflare</td><td>Identificador para análisis de rendimiento web.</td><td>1 año</td></tr>
</tbody>
</table>
<span className="second-brown">Cookies de Marketing</span>
<p>Las cookies de marketing se utilizan para rastrear a los visitantes en las páginas web. La intención es mostrar anuncios relevantes y atractivos para el usuario individual, y por lo tanto, más valiosos para los editores y terceros anunciantes.</p>
<table className="uw-cookie-table">
<thead>
<tr>
<th>Cookie</th>
<th>Proveedor</th>
<th>Propósito</th>
<th>Duración</th>
</tr>
</thead>
<tbody>
<tr><td>_gcl_*</td><td>Google</td><td>Conversiones de Google Ads.</td><td>90 días</td></tr>
<tr><td>IDE</td><td>Google DoubleClick</td><td>Publicidad personalizada.</td><td>1 año</td></tr>
<tr><td>_fbp</td><td>Facebook (Meta)</td><td>Identifica navegadores para proporcionar servicios de publicidad y análisis.</td><td>3 meses</td></tr>
<tr><td>_fbc</td><td>Facebook (Meta)</td><td>Almacena el último clic en anuncios de Facebook.</td><td>3 meses</td></tr>
<tr><td>fr</td><td>Facebook (Meta)</td><td>Habilita la entrega y medición de anuncios.</td><td>3 meses</td></tr>
<tr><td>AMCV_*</td><td>Adobe Experience Cloud</td><td>Identificación de visitantes para servicios de Adobe.</td><td>2 años</td></tr>
<tr><td>_q_state_*</td><td>Varios</td><td>Gestión de estado para servicios de publicidad.</td><td>Variable</td></tr>
</tbody>
</table>
<p className="third-brown">Nota sobre servicios de terceros: Utilizamos Cloudflare Zaraz como sistema de gestión de tags. Los servicios de marketing (Google Ads, Facebook, Adobe, etc.) pueden establecer cookies adicionales cuando aceptas cookies de marketing. Para más información sobre cada servicio, consulta sus respectivas políticas de privacidad.</p>
<br />
<span className="second-brown">Cookies de Contenido Embebido</span>
<p>Algunas páginas de nuestro sitio incluyen contenido embebido de terceros (vídeos de YouTube, widgets de Discord, publicaciones de redes sociales, etc.). Estos servicios pueden establecer sus propias cookies cuando visualizas dicho contenido.</p>
<table className="uw-cookie-table">
<thead>
<tr>
<th>Proveedor</th>
<th>Tipo de contenido</th>
<th>Más información</th>
</tr>
</thead>
<tbody>
<tr><td>YouTube (Google)</td><td>Vídeos embebidos</td><td><a href="https://policies.google.com/privacy" target="_blank" rel="noopener">Política de Privacidad</a></td></tr>
<tr><td>Discord</td><td>Widgets de servidor</td><td><a href="https://discord.com/privacy" target="_blank" rel="noopener">Política de Privacidad</a></td></tr>
<tr><td>Twitch</td><td>Streams embebidos</td><td><a href="https://www.twitch.tv/p/legal/privacy-notice/" target="_blank" rel="noopener">Política de Privacidad</a></td></tr>
<tr><td>Facebook (Meta)</td><td>Vídeos y publicaciones</td><td><a href="https://www.facebook.com/privacy/policy/" target="_blank" rel="noopener">Política de Privacidad</a></td></tr>
</tbody>
</table>
<p className="third-brown">Utilizamos youtube-nocookie.com cuando es posible para minimizar el seguimiento. Sin embargo, los servicios de terceros pueden establecer cookies como: YSC, VISITOR_INFO1_LIVE, yt-remote-*, __Secure-*, y otras relacionadas con la reproducción de contenido.</p>
<br />
<hr />
<br />
<span>Cómo eliminar cookies de tu navegador</span>
<p>Además de utilizar nuestro panel de configuración, puedes eliminar las cookies directamente desde tu navegador:</p>
<ul>
<li>Chrome: Configuración Privacidad y seguridad Cookies y otros datos de sitios</li>
<li>Firefox: Opciones Privacidad &amp; Seguridad Cookies y datos del sitio</li>
<li>Safari: Preferencias Privacidad Gestionar datos de sitios web</li>
<li>Edge: Configuración Cookies y permisos del sitio Cookies</li>
</ul>
<br />
<hr />
<br />
<span>Tu estado de consentimiento</span>
<p>Puedes cambiar o retirar tu consentimiento en cualquier momento. Al contactarnos respecto a su consentimiento, por favor, indique la fecha de su consentimiento.</p>
<CookieConsentButtons />
<br />
<hr />
<br />
<span>Más información</span>
<p>Si tienes alguna pregunta sobre nuestra política de cookies, puedes contactarnos a través de nuestra página de <Link href="/contact-us">Contacto</Link>.</p>
<br />
<p className="grey-info2">Última actualización: Marzo 2026</p>
</div>
</div>
</div>
</div>
</div>
)
}
+65
View File
@@ -132,6 +132,71 @@ textarea:focus {
margin-bottom: 10px;
}
/* Listas dentro de las cajas de contenido (el tema no las estiliza y el
preflight de Tailwind quita los bullets; los devolvemos como en Django). */
.body-box-content ul {
list-style: disc;
padding-left: 22px;
margin: 8px 0;
}
.body-box-content li {
line-height: 22px;
}
/* Declaración de cookies: tablas y botones de consentimiento. */
.uw-cookie-table {
width: 100%;
border-collapse: collapse;
margin: 12px 0 16px;
font-size: 15px;
}
.uw-cookie-table th,
.uw-cookie-table td {
border: 1px solid #352e2b;
padding: 8px 10px;
text-align: left;
vertical-align: top;
}
.uw-cookie-table th {
background: hsla(0, 0%, 100%, 0.05);
color: #ebdec2;
text-transform: uppercase;
font-size: 13px;
}
.uw-cookie-table td {
color: #b1997f;
}
.uw-cookie-table a {
color: #2471a9;
}
.uw-consent-buttons {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin: 12px 0;
}
.btn-uw {
border: 2px solid #352e2b;
background: hsla(0, 0%, 100%, 0.05);
color: #ebdec2;
padding: 10px 18px;
cursor: pointer;
text-transform: uppercase;
transition: 0.3s;
}
.btn-uw:hover {
background: hsla(0, 0%, 100%, 0.1);
color: #fff;
}
.btn-uw-secondary {
border-color: #5c2b2b;
color: #d98c8c;
}
.btn-uw-secondary:hover {
background: hsla(0, 60%, 30%, 0.15);
color: #fff;
}
/* Colores de clase de WoW (nombre de personaje) */
.class-warrior { color: #c79c6e; }
.class-paladin { color: #f58cba; }
+58
View File
@@ -0,0 +1,58 @@
'use client'
import { useEffect } from 'react'
// API de consentimiento de Cloudflare Zaraz (se inyecta cuando el dominio pasa
// por el proxy de Cloudflare con Zaraz Consent activado).
interface ZarazConsent {
modal?: boolean
APIReady?: boolean
setAll?: (status: boolean) => void
getAll?: () => Record<string, boolean>
}
declare global {
interface Window {
zaraz?: { consent?: ZarazConsent }
UWCookies?: { showBanner: () => void; revokeConsent: () => void }
}
}
/** Abre el modal de consentimiento de Zaraz. */
function showBanner() {
const c = typeof window !== 'undefined' ? window.zaraz?.consent : undefined
if (c) c.modal = true
else console.warn('[UWCookies] Zaraz no disponible (el sitio debe pasar por Cloudflare con Zaraz Consent activado).')
}
/** Retira el consentimiento (pone todos los propósitos a false) y reabre el modal. */
function revokeConsent() {
const c = typeof window !== 'undefined' ? window.zaraz?.consent : undefined
if (c?.setAll) {
c.setAll(false)
c.modal = true
} else {
console.warn('[UWCookies] Zaraz no disponible; no se puede retirar el consentimiento.')
}
}
/**
* Botones de consentimiento de la página /cookies. Cablean el sistema de
* Cloudflare Zaraz y exponen window.UWCookies (showBanner/revokeConsent) para
* el resto del sitio.
*/
export function CookieConsentButtons() {
useEffect(() => {
window.UWCookies = { showBanner, revokeConsent }
}, [])
return (
<div className="uw-consent-buttons">
<button type="button" onClick={showBanner} className="btn-uw btn-uw-form">
Cambiar consentimiento
</button>
<button type="button" onClick={revokeConsent} className="btn-uw btn-uw-form btn-uw-secondary">
Retirar consentimiento
</button>
</div>
)
}