/* ==========================================================================
   CursosFull — Sistema de diseño v1.0
   CSS propio, sin frameworks. Objetivo: < 500 KB por página (hoy: 2.000-2.600 KB).
   Orden: tokens → reset → tipografía → layout → componentes → utilidades
   ========================================================================== */

/* --------------------------------------------------------------- 1. TOKENS */
:root {
  /* Marca */
  --brand-900: #0B1B33;
  --brand-800: #14294F;
  --brand-700: #1E3A8A;
  --brand-600: #1D4ED8;
  --brand-100: #DBE6FF;
  --brand-50:  #EFF4FF;

  /* Acción */
  --cta-700: #C2410C;
  --cta-600: #EA580C;
  --cta-50:  #FFF3EC;

  /* Semánticos */
  --accent-500: #F59E0B;
  --trust-700:  #047857;
  --trust-50:   #ECFDF5;
  --danger-700: #B91C1C;
  --danger-50:  #FEF2F2;

  /* Neutros */
  --ink-900: #0F172A;
  --ink-700: #334155;
  --ink-600: #475569;
  --ink-400: #94A3B8;
  --surface: #FFFFFF;
  --bg:      #F6F8FC;
  --bg-alt:  #EEF2F9;
  --border:  #E2E8F0;
  --border-strong: #64748B; /* borde de controles: 4,76:1 sobre blanco, cumple WCAG 1.4.11 */

  /* Tipografía */
  --font-head: "Lexend", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-body: "Source Sans 3", system-ui, -apple-system, "Segoe UI", sans-serif;
  --fs-display: clamp(2rem, 1.4rem + 2.6vw, 3.25rem);
  --fs-h1: clamp(1.75rem, 1.3rem + 1.8vw, 2.5rem);
  --fs-h2: clamp(1.375rem, 1.15rem + 1vw, 1.875rem);
  --fs-h3: 1.25rem;
  --fs-body: 1.0625rem;
  --fs-sm: 0.9375rem;
  /* 14px, no 13. Este token lo usan las etiquetas de categoría, la nota de
     precio, el aviso de afiliación del pie y la etiqueta de la barra de compra
     móvil. A 13px se leían mal en un teléfono, y el aviso de afiliación es
     texto de confianza: no es sitio para letra pequeña. */
  --fs-xs: 0.875rem;

  /* Espacio */
  --sp-1: 4px;  --sp-2: 8px;  --sp-3: 12px; --sp-4: 16px;
  --sp-5: 24px; --sp-6: 32px; --sp-7: 48px; --sp-8: 64px; --sp-9: 96px;

  /* Medidas */
  --w-narrow: 68ch;
  --w-content: 1120px;
  --w-wide: 1280px;

  /* Forma */
  --r-sm: 8px;
  --r-md: 12px;
  --r-pill: 999px;
  --shadow-1: 0 1px 2px rgba(15,23,42,.06), 0 1px 3px rgba(15,23,42,.10);
  --shadow-2: 0 4px 12px rgba(15,23,42,.08);

  /* Capas */
  --z-header: 10; --z-dropdown: 20; --z-drawer: 30; --z-consent: 40; --z-modal: 50;

  /* Movimiento */
  --t-fast: 150ms ease;
  --t-base: 220ms ease;
}

/* ---------------------------------------------------------------- 2. RESET */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--ink-900);
  font-family: var(--font-body);
  font-size: var(--fs-body);
  line-height: 1.65;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}
img, svg, video { max-width: 100%; height: auto; display: block; }
a { color: var(--brand-700); text-underline-offset: 3px; }
a:hover { color: var(--brand-600); }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; }
:focus-visible { outline: 3px solid var(--brand-600); outline-offset: 2px; border-radius: 4px; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
}
.salto-contenido {
  position: absolute; left: -9999px; top: 0; background: var(--brand-900); color: #fff;
  padding: var(--sp-3) var(--sp-4); z-index: var(--z-modal); border-radius: 0 0 var(--r-sm) 0;
}
.salto-contenido:focus { left: 0; }
.solo-lectores {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ----------------------------------------------------------- 3. TIPOGRAFÍA */
h1, h2, h3, h4 { font-family: var(--font-head); font-weight: 600; line-height: 1.2; color: var(--brand-900); margin: 0 0 var(--sp-4); letter-spacing: -0.01em; }
h1 { font-size: var(--fs-h1); }
h2 { font-size: var(--fs-h2); }
h3 { font-size: var(--fs-h3); }
h4 { font-size: 1.0625rem; }
p { margin: 0 0 var(--sp-4); max-width: var(--w-narrow); }
.entradilla { font-size: 1.1875rem; color: var(--ink-600); max-width: 60ch; }
.texto-pequeno { font-size: var(--fs-sm); color: var(--ink-600); }
.num { font-variant-numeric: tabular-nums; }

/* --------------------------------------------------------------- 4. LAYOUT */
.contenedor { width: 100%; max-width: var(--w-content); margin-inline: auto; padding-inline: var(--sp-4); }
.contenedor--ancho { max-width: var(--w-wide); }
.seccion { padding-block: var(--sp-7); }
.seccion--amplia { padding-block: var(--sp-8); }
.seccion--gris { background: var(--bg-alt); }
.cabecera-seccion { display: flex; flex-wrap: wrap; gap: var(--sp-3) var(--sp-5); align-items: flex-end; justify-content: space-between; margin-bottom: var(--sp-5); }
.cabecera-seccion p { margin: 0; }
.rejilla { display: grid; gap: var(--sp-5); }
.rejilla--cursos { grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
.rejilla--3 { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
.rejilla--2 { grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
.con-cabecera { scroll-margin-top: 96px; }

/* ------------------------------------------------------------ 5. CABECERA */
.cabecera { position: sticky; top: 0; z-index: var(--z-header); background: var(--surface); border-bottom: 1px solid var(--border); }
.cabecera__barra { display: flex; align-items: center; gap: var(--sp-4); min-height: 68px; }
.marca { display: inline-flex; align-items: center; gap: var(--sp-3); font-family: var(--font-head); font-weight: 700; font-size: 1.25rem; color: var(--brand-900); text-decoration: none; letter-spacing: -0.02em; }
.marca:hover { color: var(--brand-700); }
.marca__icono { width: 34px; height: 34px; border-radius: 9px; background: var(--brand-700); color: #fff; display: grid; place-items: center; font-size: 1rem; }
.marca__full { color: var(--cta-700); }
.nav { margin-left: auto; }
.nav__lista { display: flex; align-items: center; gap: var(--sp-2); list-style: none; margin: 0; padding: 0; }
.nav__enlace { display: inline-flex; align-items: center; min-height: 44px; padding: 0 var(--sp-3); border-radius: var(--r-sm); color: var(--ink-700); text-decoration: none; font-weight: 500; font-size: var(--fs-sm); transition: background var(--t-fast), color var(--t-fast); }
.nav__enlace:hover, .nav__enlace[aria-current="page"] { background: var(--brand-50); color: var(--brand-700); }
.cabecera__acciones { display: flex; align-items: center; gap: var(--sp-2); }
.buscador-cabecera { display: flex; align-items: center; gap: var(--sp-2); flex: 1; max-width: 380px; }
@media (max-width: 900px) { .buscador-cabecera { display: none; } .nav { display: none; } }

/* ------------------------------------------------------------- 6. BOTONES */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-2);
  min-height: 48px; padding: 0 var(--sp-5); border: 1px solid transparent; border-radius: var(--r-sm);
  font-family: var(--font-head); font-weight: 600; font-size: var(--fs-sm); text-decoration: none;
  cursor: pointer; transition: background var(--t-fast), color var(--t-fast), border-color var(--t-fast), box-shadow var(--t-fast);
}
.btn--cta { background: var(--cta-700); color: #fff; box-shadow: var(--shadow-1); }
.btn--cta:hover { background: var(--cta-600); color: #fff; box-shadow: var(--shadow-2); }
.btn--primario { background: var(--brand-700); color: #fff; }
.btn--primario:hover { background: var(--brand-600); color: #fff; }
.btn--ghost { background: var(--surface); border-color: var(--border-strong); color: var(--brand-700); }
.btn--ghost:hover { background: var(--brand-50); border-color: var(--brand-700); }
.btn--bloque { width: 100%; }
.btn--grande { min-height: 56px; font-size: 1.0625rem; padding-inline: var(--sp-6); }
.btn--icono { min-height: 44px; min-width: 44px; padding: 0; background: transparent; border-color: transparent; color: var(--ink-700); }
.btn--icono:hover { background: var(--brand-50); }

/* -------------------------------------------------------------- 7. ETIQUETAS */
.badge {
  display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: var(--r-pill);
  font-size: var(--fs-xs); font-weight: 600; line-height: 1.5; white-space: nowrap;
  background: var(--brand-50); color: var(--brand-700); border: 1px solid var(--brand-100);
}
.badge--verificado { background: var(--trust-50); color: var(--trust-700); border-color: #A7F3D0; }
.badge--oferta { background: var(--cta-50); color: var(--cta-700); border-color: #FED7AA; }
.badge--nivel { background: var(--bg-alt); color: var(--ink-700); border-color: var(--border); }
.badge svg { width: 14px; height: 14px; flex: none; }

/* --------------------------------------------------------------- 8. TARJETAS */
.card { display: flex; flex-direction: column; background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); overflow: hidden; transition: border-color var(--t-base), box-shadow var(--t-base); }
.card:hover { border-color: var(--border-strong); box-shadow: var(--shadow-2); }
.card__media { position: relative; aspect-ratio: 16 / 9; background: var(--bg-alt); overflow: hidden; }
.card__media img { width: 100%; height: 100%; object-fit: cover; }
.card__cuerpo { display: flex; flex-direction: column; gap: var(--sp-3); padding: var(--sp-4); flex: 1; }
.card__titulo { font-size: 1.0625rem; margin: 0; line-height: 1.35; }
/* El título es el destino principal de la tarjeta, y en un teléfono se pulsa con
   el pulgar. En línea medía 23px de alto, justo por debajo del mínimo de 24px de
   la WCAG 2.2 (2.5.8) y lejos de los 44px cómodos. Se agranda el ÁREA pulsable
   sin mover el texto ni un píxel: el relleno crece y el margen negativo lo
   compensa. El hueco entre elementos de la tarjeta es de 12px, así que los 6px
   de expansión por lado no invaden nada. */
.card__titulo a { display: block; color: inherit; text-decoration: none; padding-block: 6px; margin-block: -6px; }
.card__titulo a:hover { color: var(--brand-700); }
.card__meta { display: flex; flex-wrap: wrap; gap: var(--sp-2) var(--sp-3); font-size: var(--fs-xs); color: var(--ink-600); margin: 0; padding: 0; list-style: none; }
.card__meta li { display: inline-flex; align-items: center; gap: 5px; }
/* El resumen de la tarjeta se limita a 3 líneas: el texto completo está en la
   ficha. Sin el límite, una tarjeta con resumen largo descuadra la rejilla. */
.card__resumen { margin: 0; font-size: var(--fs-sm); color: var(--ink-600); display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.card__pie { margin-top: auto; display: flex; flex-direction: column; align-items: stretch; gap: var(--sp-3); padding-top: var(--sp-3); border-top: 1px solid var(--border); }
.card__acciones { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
.card__acciones .btn { flex: 1 1 auto; }
/* «Ver oferta» es secundario a propósito: mismo tamaño táctil, menos peso
   visual. Lleva fuera del sitio, y el clic principal debe seguir siendo la ficha. */
.card__oferta { font-size: var(--fs-sm); }
.card__media-enlace { display: block; width: 100%; height: 100%; }
.precio { font-family: var(--font-head); font-weight: 700; font-size: 1.25rem; color: var(--ink-900); }
/* Aquí estaba .precio__antes (el tachado). Se eliminó con la decisión de no
   mostrar precios tachados: el «descuento» del 50% es uniforme en todo el
   catálogo y no representa un ahorro real. Ver herramientas/auditar-precios.mjs. */
.precio__nota { display: block; font-family: var(--font-body); font-size: var(--fs-xs); color: var(--ink-600); font-weight: 400; }

.card--fila { flex-direction: row; align-items: stretch; }
.card--fila .card__media { aspect-ratio: auto; width: 280px; flex: none; }
@media (max-width: 720px) { .card--fila { flex-direction: column; } .card--fila .card__media { width: 100%; aspect-ratio: 16 / 9; } }

/* ------------------------------------------------------------ 9. HERO */
.hero { background: linear-gradient(180deg, var(--brand-900) 0%, var(--brand-800) 100%); color: #fff; padding-block: var(--sp-8); }
.hero h1 { color: #fff; font-size: var(--fs-display); max-width: 20ch; margin-bottom: var(--sp-4); }
.hero p { color: #D8E2F5; font-size: 1.1875rem; max-width: 56ch; }
.hero__acciones { display: flex; flex-wrap: wrap; gap: var(--sp-3); margin-top: var(--sp-5); }
.hero__datos { display: flex; flex-wrap: wrap; gap: var(--sp-6); margin-top: var(--sp-7); padding-top: var(--sp-5); border-top: 1px solid rgba(255,255,255,.16); }
.hero__dato strong { display: block; font-family: var(--font-head); font-size: 1.75rem; font-weight: 700; }
.hero__dato span { font-size: var(--fs-sm); color: #B9C8E4; }
.hero .btn--ghost { background: transparent; border-color: rgba(255,255,255,.4); color: #fff; }
.hero .btn--ghost:hover { background: rgba(255,255,255,.1); border-color: #fff; color: #fff; }

/* Buscador principal */
.buscador { display: flex; gap: var(--sp-2); background: var(--surface); padding: var(--sp-2); border-radius: var(--r-md); box-shadow: var(--shadow-2); max-width: 620px; margin-top: var(--sp-5); }
.buscador input { flex: 1; min-height: 48px; padding: 0 var(--sp-4); border: 1px solid var(--border); border-radius: var(--r-sm); background: var(--surface); }
.buscador input:focus { border-color: var(--brand-600); }
@media (max-width: 560px) { .buscador { flex-direction: column; } }

/* --------------------------------------------------------- 10. FILTROS/LISTA */
.layout-catalogo { display: grid; grid-template-columns: 248px 1fr; gap: var(--sp-6); align-items: start; }
@media (max-width: 900px) { .layout-catalogo { grid-template-columns: 1fr; } }
.filtros { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: var(--sp-4); position: sticky; top: 88px; }
.filtros fieldset { border: 0; padding: 0; margin: 0 0 var(--sp-5); }
.filtros legend { font-family: var(--font-head); font-weight: 600; font-size: var(--fs-sm); padding: 0; margin-bottom: var(--sp-2); color: var(--brand-900); }
.casilla { display: flex; align-items: center; gap: var(--sp-2); min-height: 44px; font-size: var(--fs-sm); color: var(--ink-700); cursor: pointer; }
.casilla input { width: 18px; height: 18px; accent-color: var(--brand-700); }
.barra-resultados { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-3); justify-content: space-between; margin-bottom: var(--sp-5); }
.paginacion { display: flex; flex-wrap: wrap; gap: var(--sp-2); justify-content: center; margin-top: var(--sp-7); list-style: none; padding: 0; }
.paginacion a, .paginacion span { display: grid; place-items: center; min-width: 44px; min-height: 44px; padding: 0 var(--sp-3); border: 1px solid var(--border); border-radius: var(--r-sm); background: var(--surface); text-decoration: none; color: var(--ink-700); font-size: var(--fs-sm); }
.paginacion [aria-current="page"] { background: var(--brand-700); border-color: var(--brand-700); color: #fff; font-weight: 600; }

/* ------------------------------------------------------- 11. AVISO AFILIACIÓN */
.afiliacion { display: flex; gap: var(--sp-3); align-items: flex-start; background: var(--brand-50); border: 1px solid var(--brand-100); border-left: 4px solid var(--brand-700); border-radius: var(--r-sm); padding: var(--sp-3) var(--sp-4); font-size: var(--fs-sm); color: var(--ink-700); margin-block: var(--sp-4); }
.afiliacion svg { width: 20px; height: 20px; flex: none; color: var(--brand-700); margin-top: 2px; }
.afiliacion p { margin: 0; max-width: none; }

/* --------------------------------------------------- 12. BLOQUES DE CONFIANZA */
.confianza { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: var(--sp-5); }
.confianza__item { display: flex; gap: var(--sp-3); align-items: flex-start; }
.confianza__icono { width: 44px; height: 44px; flex: none; border-radius: var(--r-sm); background: var(--trust-50); color: var(--trust-700); display: grid; place-items: center; }
.confianza__icono svg { width: 22px; height: 22px; }
.confianza h3 { font-size: 1rem; margin-bottom: 2px; }
.confianza p { font-size: var(--fs-sm); color: var(--ink-600); margin: 0; }

/* ------------------------------------------------------------- 13. FICHA */
.ficha { display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: var(--sp-7); align-items: start; }
@media (max-width: 1000px) { .ficha { grid-template-columns: 1fr; } }
.ficha__panel { position: sticky; top: 88px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: var(--sp-5); box-shadow: var(--shadow-1); }
/* Los relacionados ocupan las dos columnas y van debajo. En el móvil quedan
   después del panel de compra, que es justo lo que se busca: primero el botón
   del curso que se está viendo, después las alternativas. */
.ficha__relacionados { grid-column: 1 / -1; }
.ficha__lista { list-style: none; margin: 0 0 var(--sp-4); padding: 0; display: grid; gap: var(--sp-2); }
.ficha__lista li { display: flex; justify-content: space-between; gap: var(--sp-3); padding-bottom: var(--sp-2); border-bottom: 1px dashed var(--border); font-size: var(--fs-sm); }
.ficha__lista dt, .ficha__lista span:first-child { color: var(--ink-600); }
.ficha__lista strong { font-weight: 600; color: var(--ink-900); text-align: right; }
.prosa { max-width: var(--w-narrow); }
.prosa h2 { margin-top: var(--sp-7); }
.prosa ul, .prosa ol { padding-left: 1.25em; max-width: var(--w-narrow); }
.prosa li { margin-bottom: var(--sp-2); }
/* --- Temario real de la ficha -------------------------------------------------
   Se muestra la agrupación que publica el productor: módulos con sus clases, o
   una lista plana cuando él no agrupa. El número del módulo es el suyo. */
.temario { list-style: none; margin: 0 0 var(--sp-5); padding: 0; max-width: var(--w-narrow); }
.modulo { border-top: 1px solid var(--border); padding: var(--sp-4) 0; }
.modulo:last-child { border-bottom: 1px solid var(--border); }
.modulo__titulo { font-size: 1rem; margin: 0 0 var(--sp-3); color: var(--brand-900); display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--sp-2); }
.modulo__num { flex: none; font-family: var(--font-head); font-size: var(--fs-xs); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--brand-700); background: var(--brand-50); border-radius: var(--r-sm); padding: 3px 8px; }
.modulo--sinclases .modulo__titulo { margin-bottom: 0; }
.modulo__clases { list-style: none; margin: 0; padding: 0 0 0 var(--sp-4); display: grid; gap: 6px; }
.modulo__clases li { position: relative; font-size: var(--fs-sm); color: var(--ink-700); padding-left: var(--sp-4); }
.modulo__clases li::before { content: ""; position: absolute; left: 0; top: .55em; width: 6px; height: 6px; border-radius: 50%; background: var(--brand-100); border: 1px solid var(--brand-700); }

/* Listas con marca de verificación: objetivos, qué incluye, para quién. */
.lista-check { list-style: none; margin: 0 0 var(--sp-5); padding: 0; max-width: var(--w-narrow); display: grid; gap: var(--sp-2); }
.lista-check li { position: relative; padding-left: var(--sp-6); font-size: var(--fs-sm); color: var(--ink-700); }
.lista-check li::before { content: "✓"; position: absolute; left: 0; top: 0; color: var(--brand-700); font-weight: 700; }

/* Lo que la ficha todavía no sabe: se marca en tono de aviso, no de error. */
.lista-aviso { list-style: none; margin: 0 0 var(--sp-4); padding: 0; max-width: var(--w-narrow); display: grid; gap: var(--sp-3); }
.lista-aviso li { border-left: 3px solid var(--cta-600); background: var(--bg-alt); border-radius: 0 var(--r-sm) var(--r-sm) 0; padding: var(--sp-3) var(--sp-4); font-size: var(--fs-sm); color: var(--ink-700); }
.lista-aviso strong { display: block; color: var(--ink-900); }

/* Desplegable para el contenido largo: los objetivos y las clases que sobran
   siguen en el HTML (se indexan y los lee el lector de pantalla), pero no
   obligan a recorrer un muro de viñetas antes de llegar al botón. */
.plegable { max-width: var(--w-narrow); border: 1px solid var(--border); border-radius: var(--r-sm); background: var(--surface); margin-bottom: var(--sp-5); }
.plegable summary { display: flex; align-items: center; gap: var(--sp-2); padding: var(--sp-3) var(--sp-4); min-height: 48px; cursor: pointer; font-family: var(--font-head); font-weight: 600; font-size: var(--fs-sm); color: var(--brand-700); list-style: none; }
.plegable summary::-webkit-details-marker { display: none; }
.plegable summary::after { content: "+"; margin-left: auto; font-size: 1.25rem; color: var(--brand-700); }
.plegable[open] summary::after { content: "−"; }
.plegable > .lista-check, .plegable > .temario { padding: var(--sp-4); margin-bottom: 0; }
.plegable > .temario .modulo:first-child { border-top: 0; padding-top: 0; }

/* FAQ de la ficha: preguntas y respuestas visibles, sin acordeón. Se usa una
   lista de definiciones y NO la clase .faq, que en este sitio son desplegables
   de otras páginas. */
.faq-lista { max-width: var(--w-narrow); margin: 0; }
.faq-lista dt { font-family: var(--font-head); font-weight: 600; color: var(--brand-900); margin-top: var(--sp-5); }
.faq-lista dd { margin: var(--sp-2) 0 0; color: var(--ink-700); font-size: var(--fs-sm); }

/* Cierre de la ficha: el CTA final, cuando el usuario ya ha leído todo. */
.cta-final { max-width: var(--w-narrow); margin-top: var(--sp-7); padding: var(--sp-5); border: 1px solid var(--border-strong); border-radius: var(--r-md); background: var(--bg-alt); }
.cta-final h2 { margin-top: 0; }
.cta-final__acciones { display: flex; flex-wrap: wrap; gap: var(--sp-3); margin-block: var(--sp-4); }

/* Barra de compra en móvil. Arranca oculta y la enseña el JavaScript: sin JS no
   aparece y la ficha sigue completa (panel + CTA de cierre). No tapa contenido
   porque el body reserva su altura cuando está visible. */
.cta-movil { display: none; }
@media (max-width: 1000px) {
  .cta-movil[hidden] { display: none; }
  .cta-movil { position: fixed; inset: auto 0 0 0; z-index: var(--z-header); display: flex; align-items: center; gap: var(--sp-3); padding: var(--sp-3) var(--sp-4); background: var(--surface); border-top: 1px solid var(--border-strong); box-shadow: 0 -2px 12px rgb(0 0 0 / .08); }
  .cta-movil__texto { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; }
  .cta-movil__texto strong { font-family: var(--font-head); font-size: 1.0625rem; color: var(--ink-900); }
  .cta-movil__texto span { font-size: var(--fs-xs); color: var(--ink-600); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .cta-movil .btn { flex: 1 1 auto; white-space: nowrap; }
  body.con-cta-movil { padding-bottom: 84px; }
}

/* --------------------------------------------------------- 14. TABLA COMPARATIVA */
.tabla-scroll { overflow-x: auto; border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface); }
table.comparativa { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
table.comparativa th, table.comparativa td { padding: var(--sp-3) var(--sp-4); text-align: left; border-bottom: 1px solid var(--border); }
table.comparativa thead th { background: var(--bg-alt); font-family: var(--font-head); font-weight: 600; color: var(--brand-900); white-space: nowrap; }
table.comparativa tbody tr:hover { background: var(--brand-50); }

/* ------------------------------------------------------------ 15. FAQ */
.faq { max-width: var(--w-narrow); }
.faq details { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-sm); margin-bottom: var(--sp-3); }
.faq summary { padding: var(--sp-4); min-height: 52px; cursor: pointer; font-family: var(--font-head); font-weight: 600; font-size: var(--fs-sm); color: var(--brand-900); }
.faq div { padding: 0 var(--sp-4) var(--sp-4); color: var(--ink-700); font-size: var(--fs-sm); }

/* Barra de filtros del catálogo (mejora progresiva: sin JS siguen las páginas) */
.filtros--barra { position: static; display: grid; gap: var(--sp-3); background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: var(--sp-4) var(--sp-5); margin-block: var(--sp-5); }
.filtros--barra fieldset { border: 0; padding: 0; margin: 0; }
.filtros--barra legend { font-family: var(--font-head); font-weight: 600; font-size: var(--fs-sm); color: var(--brand-900); padding: 0 0 var(--sp-1); }
.filtros--barra .fila { gap: var(--sp-2) var(--sp-5); }
.filtros--barra select { min-height: 44px; padding: 0 var(--sp-3); border: 1px solid var(--border-strong); border-radius: var(--r-sm); background: var(--surface); }
.filtros--barra label[for] { font-size: var(--fs-sm); color: var(--ink-600); }
@media (max-width: 720px) { .filtros--barra { padding: var(--sp-4); } }

/* ---------------------------------------------------------- 16. MIGAS */
.migas { font-size: var(--fs-sm); padding-block: var(--sp-4); }
.migas ol { display: flex; flex-wrap: wrap; gap: var(--sp-2); list-style: none; margin: 0; padding: 0; color: var(--ink-600); }
.migas li + li::before { content: "/"; margin-right: var(--sp-2); color: var(--ink-400); }
.migas a { color: var(--ink-600); }

/* ------------------------------------------------------- 17. PIE */
.pie { background: var(--brand-900); color: #C7D3E8; margin-top: var(--sp-8); padding-block: var(--sp-7); font-size: var(--fs-sm); }
.pie a { color: #fff; }
.pie__rejilla { display: grid; grid-template-columns: 1.4fr repeat(3, 1fr); gap: var(--sp-6); }
@media (max-width: 860px) { .pie__rejilla { grid-template-columns: 1fr 1fr; } }
@media (max-width: 520px) { .pie__rejilla { grid-template-columns: 1fr; } }
.pie h2 { color: #fff; font-size: 1rem; margin-bottom: var(--sp-3); }
.pie ul { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--sp-2); }
.pie__legal { margin-top: var(--sp-6); padding-top: var(--sp-5); border-top: 1px solid rgba(255,255,255,.16); display: flex; flex-wrap: wrap; gap: var(--sp-3) var(--sp-5); justify-content: space-between; font-size: var(--fs-xs); }
.pie .marca { color: #fff; }
.pie__afiliacion { background: rgba(255,255,255,.06); border-radius: var(--r-sm); padding: var(--sp-3) var(--sp-4); font-size: var(--fs-xs); color: #C7D3E8; }

/* Un botón que tiene que parecer un enlace.
   «Preferencias de cookies» abre el aviso de cookies: no navega a ningún sitio,
   así que lo correcto es un <button>, no un <a href="#">. Con href="#" el
   navegador salta al principio de la página al pulsarlo y, si el JavaScript no
   carga, el enlace no hace nada y engaña.

   El color se HEREDA a propósito: este botón se usa en el pie (fondo oscuro,
   texto claro) y dentro de la política de cookies (fondo claro, texto oscuro).
   Fijar un color lo haría invisible en uno de los dos sitios. */
.enlace-boton {
  background: none; border: 0; padding: 0; margin: 0; font: inherit;
  color: inherit; cursor: pointer; text-align: left;
  text-decoration: underline; text-underline-offset: 2px;
}
.enlace-boton:focus-visible { outline: 2px solid var(--accent-500); outline-offset: 2px; }

/* ------------------------------------------------------- 18. COOKIES */
.consentimiento { position: fixed; inset: auto var(--sp-4) var(--sp-4); z-index: var(--z-consent); background: var(--surface); border: 1px solid var(--border-strong); border-radius: var(--r-md); box-shadow: var(--shadow-2); padding: var(--sp-5); max-width: 560px; }
.consentimiento h2 { font-size: 1.0625rem; }
.consentimiento p { font-size: var(--fs-sm); color: var(--ink-600); }
.consentimiento__acciones { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
@media (min-width: 1200px) { .consentimiento { left: var(--sp-4); right: auto; } }

/* ------------------------------------------------------- 19. UTILIDADES */
.mt-0 { margin-top: 0; }
.mb-0 { margin-bottom: 0; }
.mb-4 { margin-bottom: var(--sp-4); }
.mb-6 { margin-bottom: var(--sp-6); }
.centrado { text-align: center; }
.centrado p { margin-inline: auto; }
.fila { display: flex; flex-wrap: wrap; gap: var(--sp-3); align-items: center; }
.fila--sep { justify-content: space-between; }
.oculto-visual { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
