/* Periódico de Ciberseguridad — CSS propio, sin frameworks ni dependencias
   externas (salvo la tipografía Inter de Google Fonts). Paleta e identidad
   tomadas de derenzin.com (mismo logo, mismo color de marca #00B8D4).

   Tema: siempre claro/editorial a propósito (fondo blanco/gris muy claro,
   texto gris oscuro, el cian de marca solo como acento) — no hay modo
   oscuro automático; es una decisión de legibilidad, no una omisión. */

:root {
  /* Marca DERENZIN (idénticos a los --tokens de derenzin.com) */
  --marca-primario: #0052cc;
  --marca-acento: #00b8d4;      /* cian/turquesa de marca — ÚNICO acento */
  --marca-acento-oscuro: #007a94;

  --fondo: #f7f8fa;             /* gris muy claro, base de la página */
  --fondo-tarjeta: #ffffff;
  --fondo-cabecera: rgba(255, 255, 255, 0.96);
  --texto: #1c1f24;             /* casi negro, para máxima legibilidad */
  --texto-tenue: #4b5259;
  --texto-suave: #767d85;
  --acento: var(--marca-acento);
  --acento-suave: #e3f8fb;      /* tinte cian muy claro para fondos/badges */
  --borde: #e4e7eb;
  /* Cian de marca oscurecido para que el texto de enlaces cumpla contraste
     AA sobre fondo blanco; el cian puro se reserva para bordes, insignias
     e íconos, donde el tamaño/grosor ya compensa el contraste. */
  --enlace: var(--marca-acento-oscuro);
  --sombra: 0 1px 2px rgba(20, 22, 25, 0.05);
  --sombra-md: 0 8px 20px rgba(20, 22, 25, 0.08);
  --sombra-hover: 0 14px 28px rgba(20, 22, 25, 0.12);
  --max-ancho: 1180px;
  --radio: 10px;
  --fuente: "Inter", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;

  /* Pie de página: siempre oscuro, igual que en derenzin.com, sin importar
     el tema del resto del sitio. */
  --pie-fondo: #1a1a1a;
  --pie-texto: #f5f5f5;
  --pie-texto-tenue: #b5b5b5;
  --pie-borde: #333333;
}

* {
  box-sizing: border-box;
}

/* Colores por categoría: se fijan aquí como clases (nunca con style="" en
   línea) para que la Content-Security-Policy del sitio pueda prohibir
   estilos en línea sin romper las insignias/íconos. La variable
   --color-categoria se hereda de forma normal a los elementos descendientes
   (insignia sobre la imagen, ícono genérico, etiqueta junto al título). */
.cat-ransomware { --color-categoria: #c0392b; }
.cat-phishing { --color-categoria: #d97706; }
.cat-filtracion_datos { --color-categoria: #0f766e; }
.cat-vulnerabilidad { --color-categoria: #2563eb; }
.cat-malware { --color-categoria: #7c3aed; }
.cat-ddos { --color-categoria: #be185d; }
.cat-generico { --color-categoria: #475569; }

/* Accesible: visible para lectores de pantalla y buscadores, oculto
   visualmente. Usado para el <h1> de páginas donde ya hay suficiente
   jerarquía visual sin mostrarlo de nuevo en pantalla. */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

html {
  scroll-behavior: smooth;
}

body {
  margin: 0;
  padding: 0;
  background: var(--fondo);
  color: var(--texto);
  font-family: var(--fuente);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

a {
  color: var(--enlace);
}

img {
  max-width: 100%;
}

h1, h2, h3 {
  font-family: var(--fuente);
  letter-spacing: -0.01em;
  color: var(--texto);
}

/* ---------- Cabecera / marca ---------- */

.cabecera {
  position: sticky;
  top: 0;
  z-index: 10;
  background: var(--fondo-cabecera);
  backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--borde);
  padding: 1.1rem 1.25rem;
}

.cabecera-contenido {
  max-width: var(--max-ancho);
  margin: 0 auto;
}

.marca {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 0.75rem;
}

.marca-enlace {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  text-decoration: none;
  color: inherit;
}

.marca-logo {
  width: 38px;
  height: 38px;
  object-fit: contain;
  flex-shrink: 0;
}

.marca-texto {
  display: flex;
  flex-direction: column;
  line-height: 1.25;
}

.marca-titulo {
  font-size: 1.2rem;
  font-weight: 800;
  color: var(--texto);
}

.marca-byline {
  font-size: 0.72rem;
  color: var(--texto-suave);
  letter-spacing: 0.02em;
}

.marca-byline strong {
  color: var(--marca-acento-oscuro);
}

.enlace-derenzin {
  font-size: 0.8rem;
  font-weight: 600;
  text-decoration: none;
  color: var(--enlace);
  border: 1px solid var(--borde);
  border-radius: 999px;
  padding: 0.3rem 0.8rem;
  white-space: nowrap;
}

.enlace-derenzin:hover {
  border-color: var(--acento);
  text-decoration: none;
}

.subtitulo {
  margin: 0.6rem 0 0.6rem 0;
  color: var(--texto-suave);
  font-size: 0.92rem;
}

.nav {
  display: flex;
  flex-wrap: wrap;
  gap: 0.9rem 1.3rem;
}

.nav a {
  font-size: 0.9rem;
  font-weight: 600;
  text-decoration: none;
  color: var(--texto-tenue);
  padding-bottom: 2px;
}

.nav a:hover {
  color: var(--marca-acento-oscuro);
}

.nav a.activo {
  color: var(--marca-acento-oscuro);
  border-bottom: 2px solid var(--acento);
}

/* ---------- Contenido general ---------- */

.contenido {
  max-width: var(--max-ancho);
  margin: 2.25rem auto;
  padding: 0 1.25rem;
}

.seccion-titulo {
  font-size: 1.05rem;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--texto);
  margin: 0 0 1.1rem 0;
  padding-bottom: 0.6rem;
  border-bottom: 3px solid var(--acento);
  display: inline-block;
}

.noticia-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  align-items: center;
  font-size: 0.8rem;
  color: var(--texto-suave);
}

.noticia-meta .fuente {
  font-weight: 700;
  color: var(--enlace);
}

.noticia-meta .idioma-nota {
  border: 1px solid var(--borde);
  border-radius: 4px;
  padding: 0 0.4rem;
  font-size: 0.72rem;
}

/* Etiqueta de categoría junto al título (además de la insignia sobre la
   imagen) — refuerzo editorial típico de temas de revista. */
.eyebrow-categoria {
  display: inline-block;
  font-size: 0.7rem;
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-categoria, var(--marca-acento-oscuro));
}

/* Imagen (real o ícono genérico) + insignia de categoría, compartidas por la
   noticia destacada y las tarjetas de la cuadrícula. */

.noticia-imagen {
  position: relative;
  margin: 0;
  overflow: hidden;
  background: var(--acento-suave);
  /* La proporción/altura del recuadro se define ACÁ, en el contenedor, no en
     la imagen ni en el ícono -- así ambos (foto real o ícono de respaldo)
     quedan con la misma altura sin importar sus dimensiones originales, y
     "height: 100%" en la imagen (abajo) tiene una altura real y no
     ambigua/circular contra la cual resolverse en todos los navegadores. */
  aspect-ratio: 16 / 9;
}

.noticia-imagen img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.35s ease;
}

/* Ícono genérico: ahora es un <img> real (site/assets/iconos/*.svg), no SVG
   en línea — el fondo con tinte de color va en un contenedor aparte
   (.icono-generico-fondo) para no depender de aplicarle "color"/"background"
   directamente a la imagen (un <img> no hereda "color" de todas formas). Se
   declara un fondo sólido de respaldo ANTES del color-mix(): si el
   navegador no soporta color-mix() (algunos navegadores más viejos), el
   valor no reconocido se ignora y queda el respaldo — nunca se ve
   transparente/roto. */
.noticia-imagen--generica .icono-generico-fondo {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--acento-suave);
  background: color-mix(in srgb, var(--color-categoria, var(--texto-suave)) 12%, white);
}

.icono-generico {
  width: 42px;
  height: 42px;
  display: block;
}

.noticia-imagen--destacada {
  aspect-ratio: 21 / 9;
}

.noticia-imagen--destacada .icono-generico {
  width: 60px;
  height: 60px;
}

.noticia-imagen figcaption {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 1.4rem 0.9rem 0.4rem;
  font-size: 0.7rem;
  color: #fff;
  background: linear-gradient(to top, rgba(0, 0, 0, 0.55), transparent);
}

.badge-ilustrativo {
  position: absolute;
  top: 0.7rem;
  right: 0.7rem;
  z-index: 2;
  background: rgba(255, 255, 255, 0.85);
  color: var(--texto-suave);
  font-size: 0.62rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  padding: 0.2rem 0.5rem;
  border-radius: 4px;
  border: 1px solid var(--borde);
  cursor: help;
}

.categoria-badge {
  position: absolute;
  top: 0.7rem;
  left: 0.7rem;
  z-index: 2;
  background: var(--color-categoria, var(--texto-suave));
  color: #fff;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  padding: 0.3rem 0.65rem;
  border-radius: 4px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
}

/* ---------- Sección "Protección de Datos": bloque fijo de fuente oficial ---------- */

.fuente-oficial {
  background: var(--fondo-tarjeta);
  border: 1px solid var(--borde);
  border-left: 4px solid #0e7490;
  border-radius: var(--radio);
  padding: 1.25rem 1.5rem;
  margin-bottom: 1.75rem;
}

.fuente-oficial-titulo {
  margin: 0 0 0.5rem 0;
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: #0e7490;
}

.fuente-oficial-nombre {
  margin: 0 0 0.4rem 0;
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--texto);
}

.fuente-oficial-texto {
  margin: 0 0 0.85rem 0;
  font-size: 0.92rem;
  color: var(--texto-tenue);
  line-height: 1.5;
}

.fuente-oficial-cta {
  display: inline-block;
  font-size: 0.88rem;
  font-weight: 700;
  color: #0e7490;
  text-decoration: none;
}

.fuente-oficial-cta:hover {
  text-decoration: underline;
}

/* ---------- Sección "Protección de Datos": recurso propio (DERENZIN) ---------- */
/* Mismo patrón visual que .fuente-oficial, pero con el azul de marca de
   DERENZIN (--marca-primario) en vez del teal de la categoría/SPDP -- para
   que quede claro de un vistazo que este bloque es un recurso propio, no
   otra fuente de noticias ni el ente oficial. */

.recurso-propio {
  background: var(--fondo-tarjeta);
  border: 1px solid var(--borde);
  border-left: 4px solid var(--marca-primario);
  border-radius: var(--radio);
  padding: 1.25rem 1.5rem;
  margin-bottom: 1.75rem;
}

.recurso-propio-titulo {
  margin: 0 0 0.5rem 0;
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--marca-primario);
}

.recurso-propio-texto {
  margin: 0 0 0.85rem 0;
  font-size: 0.92rem;
  color: var(--texto-tenue);
  line-height: 1.5;
}

.recurso-propio-cta {
  display: inline-block;
  font-size: 0.88rem;
  font-weight: 700;
  color: var(--marca-primario);
  text-decoration: none;
}

.recurso-propio-cta:hover {
  text-decoration: underline;
}

.sin-noticias {
  color: var(--texto-suave);
  font-size: 0.95rem;
  padding: 1rem 0;
}

/* ---------- Noticia destacada ("lo más reciente") ---------- */

.destacada {
  display: grid;
  grid-template-columns: 1.15fr 1fr;
  gap: 0;
  background: var(--fondo-tarjeta);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  overflow: hidden;
  box-shadow: var(--sombra-md);
  margin-bottom: 2.75rem;
}

.destacada-imagen-enlace {
  display: block;
}

.destacada-cuerpo {
  padding: 1.85rem 2.1rem;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 0.7rem;
}

.destacada-eyebrow {
  font-size: 0.72rem;
  font-weight: 800;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--marca-acento-oscuro);
}

.destacada .eyebrow-categoria {
  margin-top: -0.4rem;
}

.destacada-titulo {
  margin: 0;
  font-size: 1.7rem;
  line-height: 1.22;
  font-weight: 800;
}

.destacada-titulo a {
  color: var(--texto);
  text-decoration: none;
}

.destacada-titulo a:hover {
  color: var(--enlace);
}

.destacada-resumen {
  margin: 0;
  color: var(--texto-tenue);
  font-size: 1.02rem;
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.destacada-cta {
  display: inline-block;
  align-self: flex-start;
  margin-top: 0.3rem;
  font-weight: 700;
  font-size: 0.9rem;
  text-decoration: none;
  color: #fff;
  background: var(--marca-acento-oscuro);
  padding: 0.6rem 1.15rem;
  border-radius: 999px;
  transition: background 0.15s ease, transform 0.15s ease;
}

.destacada-cta:hover {
  background: #005a6b;
  transform: translateY(-1px);
}

/* ---------- Cuadrícula de tarjetas ---------- */

.grid-noticias {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));
  gap: 1.6rem;
}

.tarjeta {
  background: var(--fondo-tarjeta);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  overflow: hidden;
  box-shadow: var(--sombra);
  transition: box-shadow 0.2s ease, transform 0.2s ease;
  display: flex;
  flex-direction: column;
}

.tarjeta:hover {
  box-shadow: var(--sombra-hover);
  transform: translateY(-3px);
}

.tarjeta:hover .noticia-imagen img {
  transform: scale(1.04);
}

.tarjeta-imagen-enlace {
  display: block;
}

.tarjeta-cuerpo {
  padding: 1.2rem 1.3rem 1.4rem;
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
  flex: 1;
}

.tarjeta-titulo {
  margin: 0;
  font-size: 1.05rem;
  line-height: 1.35;
  font-weight: 700;
}

.tarjeta-titulo a {
  color: var(--texto);
  text-decoration: none;
}

.tarjeta-titulo a:hover {
  color: var(--enlace);
}

.tarjeta-resumen {
  margin: 0.15rem 0 0;
  color: var(--texto-tenue);
  font-size: 0.88rem;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  flex: 1;
}

.tarjeta .noticia-meta {
  margin-top: auto;
  padding-top: 0.6rem;
  border-top: 1px solid var(--borde);
}

/* ---------- Página de detalle de una noticia ---------- */

.contenido.pagina-noticia {
  max-width: 760px;
}

.noticia-detalle > .eyebrow-categoria {
  display: block;
  margin-bottom: 0.5rem;
}

.noticia-detalle-titulo {
  margin: 0 0 0.9rem 0;
  font-size: 1.9rem;
  line-height: 1.2;
  font-weight: 800;
}

.noticia-detalle > .noticia-meta {
  margin-bottom: 1.5rem;
}

/* Botones de compartir: bajo la fecha/fuente, antes de la imagen. Los
   enlaces a redes son <a href target=_blank> normales (no requieren JS);
   "Copiar enlace" es el único <button> real, con navigator.clipboard
   (assets/compartir.js). */
.compartir {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.6rem;
  margin-bottom: 1.75rem;
}

.compartir-etiqueta {
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--texto-suave);
}

.compartir-lista {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

.compartir-boton {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.35rem;
  width: 2.25rem;
  height: 2.25rem;
  padding: 0;
  border: 1px solid var(--borde);
  border-radius: 50%;
  background: var(--fondo-tarjeta);
  color: var(--texto-tenue);
  cursor: pointer;
  font: inherit;
  transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

.compartir-boton:hover,
.compartir-boton:focus-visible {
  background: var(--acento-suave);
  color: var(--marca-acento-oscuro);
  border-color: var(--marca-acento);
}

.compartir-copiar {
  width: auto;
  padding: 0 0.85rem;
  border-radius: 999px;
}

.compartir-copiar-msg {
  font-size: 0.82rem;
  font-weight: 600;
  white-space: nowrap;
}

.compartir-copiar--hecho {
  background: var(--acento-suave);
  color: var(--marca-acento-oscuro);
  border-color: var(--marca-acento);
}

@media (max-width: 480px) {
  .compartir {
    gap: 0.5rem;
  }
  .compartir-etiqueta {
    width: 100%;
  }
}

.noticia-detalle > .noticia-imagen {
  border-radius: var(--radio);
  margin-bottom: 1.75rem;
}

.noticia-detalle-cuerpo {
  font-size: 1.05rem;
  line-height: 1.75;
  color: var(--texto-tenue);
}

.noticia-detalle-cuerpo p {
  margin: 0 0 1.15rem 0;
  /* Justificado solo acá (cuerpo del resumen completo en la página de
     detalle) -- NO en las tarjetas de portada/grid, que quedan alineadas
     a la izquierda como siempre. hyphens:auto evita que la justificación
     deje espacios grandes entre palabras en líneas cortas (el <html
     lang="es"> ya declarado activa el diccionario de guiones en español). */
  text-align: justify;
  -webkit-hyphens: auto;
  hyphens: auto;
}

.noticia-fuente-final {
  margin-top: 2.25rem;
  padding: 1.5rem;
  background: var(--acento-suave);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}

.noticia-fuente-final p {
  margin: 0;
  font-size: 0.95rem;
  color: var(--texto);
}

.noticia-fuente-final p a {
  font-weight: 700;
}

/* ---------- Archivo (listado de ediciones) ---------- */

.lista-archivo {
  list-style: none;
  padding: 0;
  margin: 0;
}

.lista-archivo li {
  padding: 0.9rem 0;
  border-bottom: 1px solid var(--borde);
}

.lista-archivo a {
  text-decoration: none;
  font-size: 1.05rem;
  font-weight: 600;
  color: var(--texto);
}

.lista-archivo a:hover {
  color: var(--enlace);
  text-decoration: underline;
}

/* ---------- Pie de página ---------- */

.pie {
  background: var(--pie-fondo);
  color: var(--pie-texto-tenue);
  margin-top: 2.5rem;
  border-top: 3px solid var(--acento);
}

.pie-contenido {
  max-width: var(--max-ancho);
  margin: 0 auto;
  padding: 2rem 1.25rem 1.5rem;
  display: flex;
  flex-wrap: wrap;
  gap: 2rem;
  justify-content: space-between;
}

.pie-marca {
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
  max-width: 320px;
}

.pie-marca-enlace {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  text-decoration: none;
}

.pie-logo {
  width: 32px;
  height: 32px;
  object-fit: contain;
}

.pie-marca-nombre {
  color: var(--pie-texto);
  font-weight: 700;
  font-size: 1rem;
}

.pie-tagline {
  font-size: 0.8rem;
  margin: 0;
  color: var(--pie-texto-tenue);
}

.pie-tagline a {
  color: var(--marca-acento);
  text-decoration: none;
  font-weight: 600;
}

.pie-tagline a:hover {
  text-decoration: underline;
}

.pie-legal {
  flex: 1 1 320px;
  min-width: 240px;
  border-top: 1px solid var(--pie-borde);
  padding-top: 1rem;
}

.pie-contenido .pie-marca {
  border-top: none;
}

.pie p {
  margin: 0.4rem 0;
  font-size: 0.8rem;
  line-height: 1.55;
}

.pie-copyright {
  color: var(--pie-texto-tenue);
  font-size: 0.75rem !important;
  margin-top: 0.8rem !important;
}

@media (min-width: 640px) {
  .pie-legal {
    border-top: none;
    border-left: 1px solid var(--pie-borde);
    padding-top: 0;
    padding-left: 2rem;
  }
}

/* ---------- Responsive ---------- */

@media (max-width: 860px) {
  .destacada {
    grid-template-columns: 1fr;
  }

  .destacada-imagen-enlace .noticia-imagen--destacada {
    aspect-ratio: 16 / 9;
  }

  .destacada-titulo {
    font-size: 1.4rem;
  }

  .destacada-cuerpo {
    padding: 1.4rem 1.5rem;
  }
}

@media (max-width: 480px) {
  .grid-noticias {
    grid-template-columns: 1fr;
  }

  .destacada-titulo {
    font-size: 1.25rem;
  }

  .contenido {
    padding: 0 1rem;
  }
}
