/* ==========================================================================
   ALIVIO HIPOTECA — hoja única.

   CONCEPTO: «la calma después».
   Esta empresa no vende el drama: vende salir de él. Así que la web NO es
   oscura ni dramática — es luminosa, serena y de despacho serio: crema cálido,
   azul marino en vez de negro, y un oro apagado como único brillo. El miedo
   aparece UNA vez, en un solo bloque marino, y se sale de él a la luz.

   Acabado: sans geométrica (Space Grotesk) en los titulares —legible de
   verdad, nada de serifa fina—, muchísimo aire entre secciones, relieve en
   tarjetas y elementos flotantes con sombra e inclinación 3D al pasar el
   ratón, y la fotografía a sangre que se ve de verdad —con sombra en el
   texto, no ahogada bajo un velo negro—.
   ========================================================================== */

/* ── Fuentes autoalojadas (nada de CDN: RGPD) ───────────────────────────── */

@font-face {
  font-family: 'Space Grotesk';
  src: url('../fonts/space-grotesk.woff2') format('woff2');
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
                 U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
                 U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Space Grotesk';
  src: url('../fonts/space-grotesk-ext.woff2') format('woff2');
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF,
                 U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB,
                 U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  src: url('../fonts/inter.woff2') format('woff2');
  font-weight: 400 700;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
                 U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
                 U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  src: url('../fonts/inter-ext.woff2') format('woff2');
  font-weight: 400 700;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF,
                 U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB,
                 U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* ── Tokens ─────────────────────────────────────────────────────────────── */

:root {
  /* Nada de negro puro: el oscuro de la casa es azul marino. Sobre crema
     cálido da autoridad sin tristeza, que es justo el tono que necesita quien
     llega aquí con una demanda del banco encima. */
  --crema:      #faf8f3;
  --papel:      #ffffff;
  --suave:      #f2ede2;
  --linea:      #e6e0d2;

  --tinta:      #0e2438;
  --marino:     #16344f;
  --marino-hondo:#0a1a29;

  --oro:        #b08d55;
  --oro-claro:  #cfae76;
  --oro-velo:   rgb(176 141 85 / .12);

  --apagado:    #66727f;
  --tenue:      #97a0aa;

  --claro:       #faf8f3;
  --claro-medio: rgb(250 248 243 / .82);
  --claro-tenue: rgb(250 248 243 / .60);
  --linea-noche: rgb(250 248 243 / .18);

  --alerta: #a8402f;
  --exito:  #3d7a55;

  /* Sans geométrica también en los titulares: más legible que una serifa fina
     a estos tamaños, y el mismo trazo monolineal que usa Apple en sus
     titulares grandes. */
  --display: 'Space Grotesk', 'Inter', system-ui, -apple-system, sans-serif;
  --sans:    'Inter', system-ui, -apple-system, sans-serif;

  /* Escala tipográfica. Bajada un peldaño respecto a la primera versión: con
     Space Grotesk (mucho más ancha que la Garalde) los mismos tamaños se
     comían la pantalla entera en escritorio. */
  --t-xs:  0.6875rem;
  --t-s:   0.8125rem;
  --t-m:   1rem;
  --t-l:   1.0625rem;
  --t-xl:  clamp(1.2rem, 0.6vw + 1.02rem, 1.375rem);
  --t-2xl: clamp(1.5rem, 1.4vw + 1rem, 2.0625rem);
  --t-3xl: clamp(1.875rem, 2.4vw + 1rem, 3.125rem);
  /* Ojo al copiar escalas de otras webs: un hero de dos palabras («Casanova
     Beach Club») aguanta 148 px, pero este titular tiene ocho y a ese cuerpo
     ocupa la pantalla entera y echa el botón fuera del pliegue. */
  --t-4xl: clamp(2.125rem, 2.8vw + 1rem, 3.75rem);

  --e-1: 0.5rem;
  --e-2: 0.875rem;
  --e-3: 1.25rem;
  --e-4: 2rem;
  --e-5: 3.25rem;
  --e-6: 5rem;
  /* Aire de verdad entre secciones: lo que da sensación de barato es el
     amontonamiento. */
  --seccion: clamp(5.5rem, 11vw, 10rem);

  --ancho:  1280px;
  --medida: 60ch;

  /* Esquinas redondeadas: dan la calidez de despacho cercano, no de formulario
     de banco. Botones casi en píldora, tarjetas y cajas con radio generoso. */
  --radio:       20px;
  --radio-boton: 999px;
  --radio-campo: 12px;
  --barra-alto: 84px;

  --lui-acento:     var(--oro);
  --lui-texto:      var(--tinta);
  --lui-linea:      var(--linea);
  --lui-atenuado:   var(--apagado);
  --lui-superficie: var(--papel);
}

/* ── Base ───────────────────────────────────────────────────────────────── */

*, *::before, *::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--barra-alto) + 1rem);
  overflow-x: hidden;
}

body {
  margin: 0;
  font-family: var(--sans);
  font-size: var(--t-m);
  line-height: 1.75;
  color: var(--tinta);
  background: var(--crema);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  /* Los párrafos ".parrafo-deslizante" entran con translateX antes de
     revelarse y, sin este freno, ese desplazamiento suma ancho de scroll
     lateral en móvil aunque nunca se vea fuera de sitio. */
  overflow-x: hidden;
}

h1, h2, h3 {
  font-family: var(--display);
  font-weight: 600;
  line-height: 1.04;
  letter-spacing: -0.02em;
  margin: 0;
  text-wrap: balance;
}
h1 { font-size: var(--t-4xl); }
h2 { font-size: var(--t-3xl); }
h3 { font-size: var(--t-2xl); line-height: 1.15; }

/* La Space Grotesk no tiene cursiva de verdad (el navegador la inclinaría a la
   fuerza y queda irregular), así que el giro de cada frase se marca con el
   oro, no con la letra: nunca decora, siempre es la voz que baja el tono. */
em, .cursiva { font-style: normal; font-weight: 500; color: var(--oro); }

p { margin: 0 0 var(--e-3); }
ul, ol { margin: 0 0 var(--e-3); padding: 0; list-style: none; }
a { color: inherit; text-decoration: none; }
img, picture, svg, video { display: block; max-width: 100%; }
strong { font-weight: 500; color: var(--tinta); }

::selection { background: var(--tinta); color: var(--crema); }

:focus-visible {
  outline: 2px solid var(--oro);
  outline-offset: 3px;
}

/* ── Cortina de carga ───────────────────────────────────────────────────── */
/* Telón de verdad: dos paneles que tapan la pantalla al entrar y se abren
   desde el centro hacia los lados para revelarla, con el logo apareciendo
   en medio mientras están cerrados — app.js decide cuándo (solo la primera
   vez en la sesión) y marca los momentos con clases. Sin JS (`.sin-js` en
   <html>, ver head.php) queda oculta siempre: un telón que no se puede
   programar para abrirse no puede quedarse cerrado. */

#cortina { position: fixed; inset: 0; z-index: 300; }
.sin-js #cortina { display: none; }

.cortina__panel {
  position: absolute;
  top: 0; bottom: 0;
  width: 50%;
  background: var(--marino-hondo);
  transition: transform 1.1s cubic-bezier(.76, 0, .24, 1);
}
.cortina__panel--izq { left: 0; transform-origin: left center; }
.cortina__panel--der { right: 0; transform-origin: right center; }
#cortina.cortina--fuera .cortina__panel--izq { transform: translateX(-100%); }
#cortina.cortina--fuera .cortina__panel--der { transform: translateX(100%) ; transition-delay: .04s; }

/* El hilo de luz por donde se va a partir el telón: aparece con el logo y se
   apaga en el instante en que empieza a abrirse. */
.cortina__linea {
  position: absolute;
  top: 0; bottom: 0; left: 50%;
  width: 2px;
  margin-left: -1px;
  background: var(--oro);
  transform: scaleY(0);
  transition: transform .7s cubic-bezier(.16, 1, .3, 1) .15s, opacity .25s ease;
}
#cortina.cortina--lista .cortina__linea { transform: scaleY(1); }
#cortina.cortina--fuera .cortina__linea { opacity: 0; }

.cortina__marca {
  position: absolute;
  inset: 0;
  z-index: 1;
  display: grid;
  place-items: center;
  transition: opacity .35s ease;
}
#cortina.cortina--fuera .cortina__marca { opacity: 0; }

.cortina__marca img {
  width: 190px;
  height: auto;
  opacity: 0;
  transform: translateY(16px) scale(.96);
  transition: opacity .6s ease, transform .6s cubic-bezier(.16, 1, .3, 1);
}
#cortina.cortina--lista .cortina__marca img { opacity: 1; transform: none; }

/* Mientras tapa la pantalla, que no se pueda hacer scroll por detrás. */
body.cortina-activa { overflow: hidden; }

@media (max-width: 640px) { .cortina__marca img { width: 150px; } }
@media (prefers-reduced-motion: reduce) { #cortina { display: none; } }

/* ── Utilidades ─────────────────────────────────────────────────────────── */

.vo {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

.saltar {
  position: absolute;
  top: -100px; left: var(--e-3);
  z-index: 100;
  padding: .7rem 1.1rem;
  background: var(--oro);
  color: var(--papel);
  font-weight: 500;
  transition: top .2s ease;
}
.saltar:focus { top: var(--e-3); }

.contenedor { width: min(100% - 3rem, var(--ancho)); margin-inline: auto; }
.contenedor--angosta { width: min(100% - 3rem, 880px); }

.seccion { padding-block: var(--seccion); }
.seccion--ajustada { padding-block: calc(var(--seccion) * .6); }

/* La etiqueta de sección va en versalitas trackeadas de la sans: sin cursiva
   (Space Grotesk no la tiene de verdad), la marca de voz pasa al tracking y
   al oro, no a la inclinación de la letra. */
.etiqueta {
  display: inline-flex;
  align-items: center;
  gap: .85rem;
  margin: 0 0 var(--e-3);
  font-family: var(--sans);
  font-style: normal;
  font-weight: 600;
  text-transform: uppercase;
  font-size: var(--t-xs);
  letter-spacing: .22em;
  color: var(--oro);
}
.etiqueta::before {
  content: '';
  width: 2.25rem; height: 1px;
  background: currentColor;
  flex-shrink: 0;
}
/* Centrada, el filete va a los dos lados (como el «— Castelldefels —») */
.etiqueta--centro::after {
  content: '';
  width: 2.25rem; height: 1px;
  background: currentColor;
  flex-shrink: 0;
}

.entradilla {
  font-size: var(--t-l);
  line-height: 1.8;
  color: var(--apagado);
  max-width: var(--medida);
}
.remate { margin-top: var(--e-3); max-width: var(--medida); color: var(--apagado); }

.centro { text-align: center; }
.centro .etiqueta { justify-content: center; }
/* La segunda forma (`.remate.centro`) es para cuando la clase va en el propio
   párrafo y no en un ancestro: sin ella el bloque se queda pegado a la
   izquierda aunque su texto sí esté centrado. */
.centro .entradilla, .centro .remate,
.entradilla.centro, .remate.centro { margin-inline: auto; }

/* Filete vertical dorado: el respiro entre dos ideas. Vale más que un <hr>. */
.filete-v {
  width: 1px; height: 3.5rem;
  background: var(--oro);
  margin: var(--e-6) auto 0;
  opacity: .7;
}

/* Tres pasos con icono a modo de resumen — rompen el tramo de puro texto sin
   meter otra imagen donde no toca. */
.enfoque {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--e-5);
  margin: var(--e-6) 0 0;
}
.enfoque li {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .75rem;
  font-size: var(--t-xs);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--apagado);
  cursor: pointer;
  outline: none;
  transition: transform .3s cubic-bezier(.16,1,.3,1);
}
.enfoque li:hover,
.enfoque li:focus-visible,
.enfoque li.destacado { transform: translateY(-4px); }
.enfoque__icono {
  display: grid;
  place-items: center;
  width: 52px; height: 52px;
  border-radius: 50%;
  background: var(--oro-velo);
  color: var(--oro);
  transition: background .3s ease, color .3s ease;
}
.enfoque li:hover .enfoque__icono,
.enfoque li:focus-visible .enfoque__icono,
.enfoque li.destacado .enfoque__icono { background: var(--oro); color: var(--papel); }
.enfoque__icono svg { width: 22px; height: 22px; }

/* ── Fondos ─────────────────────────────────────────────────────────────── */

.fondo-marino { background: var(--marino-hondo); color: var(--claro); }
.fondo-suave  { background: var(--suave); }
.fondo-papel  { background: var(--papel); }

.fondo-marino .entradilla,
.fondo-marino .remate { color: var(--claro-medio); }
.fondo-marino .lista-check li { border-top-color: var(--linea-noche); }
.fondo-marino .lista-check li:last-child { border-bottom-color: var(--linea-noche); }
.fondo-marino .boton--linea { color: var(--claro); border-color: var(--linea-noche); }
.fondo-marino .boton--linea:hover { background: var(--claro); color: var(--tinta); border-color: var(--claro); }
.fondo-marino .filete-v { background: var(--oro-claro); }
.fondo-marino {
  --lui-texto: var(--claro);
  --lui-linea: var(--linea-noche);
  --lui-atenuado: var(--claro-medio);
  --lui-superficie: var(--marino);
}

/* «No estás solo»: la única sección con foto de fondo sobre marino. Va bien
   oscurecida y con un pelín de desenfoque — el texto tiene que leerse
   exactamente igual que antes, la foto solo rompe el plano vacío. */
.solo { position: relative; isolation: isolate; overflow: hidden; }
.solo__foto { position: absolute; inset: 0; z-index: -2; }
.solo__foto picture, .solo__foto img {
  width: 100%; height: 100%; object-fit: cover;
  filter: blur(2px) saturate(90%);
  transform: scale(1.04); /* disimula el borde que deja el blur */
}
.solo__foto::after {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(100deg, rgb(10 26 41 / .93) 0%, rgb(10 26 41 / .88) 55%, rgb(10 26 41 / .8) 100%);
}

/* Alias de .etiqueta para las páginas interiores */
.hora {
  display: inline-flex;
  align-items: center;
  gap: .85rem;
  margin: 0 0 var(--e-3);
  font-family: var(--sans);
  font-style: normal;
  font-weight: 600;
  text-transform: uppercase;
  font-size: var(--t-xs);
  letter-spacing: .22em;
  color: var(--oro);
}
.hora::before { content: ''; width: 2.25rem; height: 1px; background: currentColor; }

/* ── Botones ────────────────────────────────────────────────────────────── */
/* Rectangulares y con mucho tracking: se leen como un grabado, no como una app */

.boton {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .6rem;
  padding: 1.15rem 2.1rem;
  min-height: 52px;
  font-family: var(--sans);
  font-size: var(--t-xs);
  font-weight: 500;
  letter-spacing: .28em;
  text-transform: uppercase;
  border: 1px solid var(--tinta);
  border-radius: var(--radio-boton);
  background: var(--tinta);
  color: var(--crema);
  cursor: pointer;
  transition: background .3s ease, color .3s ease, border-color .3s ease,
              transform .25s ease, box-shadow .25s ease;
}
.boton:hover {
  background: transparent;
  color: var(--tinta);
  transform: translateY(-3px);
  box-shadow: 0 16px 32px -18px rgb(14 36 56 / .45);
}
.boton:active { transform: translateY(-1px); }

/* Sobre foto o sobre marino: relleno claro, que es lo que más destaca */
.boton--luz { background: var(--papel); color: var(--tinta); border-color: var(--papel); }
.boton--luz:hover { background: transparent; color: var(--papel); border-color: var(--papel); }

.boton--oro { background: var(--oro); border-color: var(--oro); color: var(--papel); }
.boton--oro:hover { background: transparent; color: var(--oro); }

.boton--linea { background: transparent; color: var(--tinta); border-color: rgb(14 36 56 / .35); }
.boton--linea:hover { background: var(--tinta); color: var(--crema); border-color: var(--tinta); }

.boton--bloque { width: 100%; }

.acciones { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-2); margin-top: var(--e-5); }
.centro .acciones { justify-content: center; }
/* ── Barra superior ─────────────────────────────────────────────────────── */
/* Transparente sobre el hero y sólida al bajar: así la foto se ve entera al
   entrar, que es la primera impresión. Lo conmuta app.js con .es-scroll. */

.barra {
  position: fixed;
  inset: 0 0 auto;
  z-index: 50;
  padding-block: 1.4rem;
  color: var(--papel);
  border-bottom: 1px solid transparent;
  transition: background .45s ease, padding .35s ease, border-color .35s ease, color .35s ease;
}
.barra.es-scroll {
  background: rgb(250 248 243 / .95);
  backdrop-filter: blur(14px) saturate(140%);
  -webkit-backdrop-filter: blur(14px) saturate(140%);
  border-color: var(--linea);
  color: var(--tinta);
  padding-block: .8rem;
}
.barra__interior {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--e-3);
}
.barra__logo { display: block; flex-shrink: 0; line-height: 0; }
.barra__logo img { width: 176px; height: auto; transition: opacity .3s ease; }
/* Dos logos, uno claro y otro oscuro: teñir un PNG con filtros nunca acierta */
.barra__logo .logo-oscuro { display: none; }
.barra.es-scroll .logo-claro  { display: none; }
.barra.es-scroll .logo-oscuro { display: block; }

.barra__nav { display: flex; align-items: center; gap: var(--e-5); }
.barra__enlaces { display: flex; align-items: center; gap: var(--e-4); margin: 0; }
.barra__enlaces li { margin: 0; }
.barra__enlaces a {
  font-size: var(--t-s);
  letter-spacing: .02em;
  color: currentColor;
  opacity: .85;
  padding-bottom: 3px;
  border-bottom: 1px solid transparent;
  transition: opacity .25s ease, border-color .25s ease;
}
.barra__enlaces a:hover { opacity: 1; border-bottom-color: var(--oro); }

.barra__acciones { display: flex; align-items: center; gap: var(--e-3); }
.barra__tel {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  font-size: var(--t-s);
  font-weight: 500;
  letter-spacing: .04em;
  white-space: nowrap;
}
.barra__tel svg { width: 15px; height: 15px; fill: var(--oro); }
.barra .boton { padding: .85rem 1.5rem; min-height: 0; }
.barra .boton--luz { background: transparent; color: currentColor; border-color: currentColor; }
.barra .boton--luz:hover { background: var(--papel); color: var(--tinta); border-color: var(--papel); }
/* Con la barra ya sólida (fondo crema) el botón en contorno se perdía: en
   vez del truco de "currentColor", aquí va relleno de marino — colores
   invertidos respecto al resto de botones claros. */
.barra.es-scroll .boton--luz {
  background: var(--marino-hondo);
  color: var(--claro);
  border-color: var(--marino-hondo);
}
.barra.es-scroll .boton--luz:hover {
  background: transparent;
  color: var(--marino-hondo);
  border-color: var(--marino-hondo);
}

.barra__menu { display: none; background: none; border: 0; padding: 0; cursor: pointer; color: currentColor; }

/* ── Hero ───────────────────────────────────────────────────────────────── */
/* La foto se VE. Nada de velo negro al 90 %: un degradado suave abajo y sombra
   en el propio texto bastan para el contraste, y la imagen conserva su luz. */

.hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: flex;
  align-items: center;
  min-height: min(100svh, 1000px);
  padding-block: calc(var(--barra-alto) + var(--e-5)) var(--e-6);
  color: var(--papel);
  background: var(--marino-hondo);
}
.hero__foto { position: absolute; inset: 0; z-index: -2; }
.hero__foto picture,
.hero__foto img,
.hero__foto video { width: 100%; height: 100%; object-fit: cover; }
.hero__foto::after {
  content: '';
  position: absolute; inset: 0;
  background:
    /* Viñeta central: la foto es un contraluz y el sol cae justo detrás del
       titular. Oscurecer el centro deja leer el texto y conserva la luz en los
       bordes, que es lo que hace que la imagen siga viéndose viva. Capa base
       algo más oscura que antes (a petición del cliente, el texto costaba de
       leer) además de la viñeta y el degradado inferior. */
    radial-gradient(70% 60% at 50% 46%, rgb(8 20 32 / .8) 0%, rgb(8 20 32 / .5) 60%, rgb(8 20 32 / .22) 100%),
    linear-gradient(180deg, rgb(8 20 32 / .68) 0%, rgb(8 20 32 / .46) 40%, rgb(8 20 32 / .86) 100%);
}

.hero__contenido {
  max-width: 62rem;
  margin-inline: auto;
  text-align: center;
}
.hero .etiqueta { color: var(--papel); font-size: 1.0625rem; letter-spacing: .12em; }
.hero .etiqueta::before, .hero .etiqueta::after { background: rgb(255 255 255 / .8); }

.hero h1 {
  font-size: var(--t-4xl);
  line-height: .98;
  /* La sombra hace el trabajo que haría un velo, sin apagar la foto */
  text-shadow: 0 2px 26px rgb(10 26 41 / .5), 0 0 2px rgb(10 26 41 / .4);
}
.hero h1 em { color: var(--oro-claro); }

/* El hero no lleva `.fondo-marino` (su fondo es la foto), así que no hereda
   ninguna de aquellas reglas: el centrado de las acciones y el color claro del
   botón de línea hay que dárselos aquí, o el segundo botón sale en azul oscuro
   sobre una foto oscura — invisible. */
.hero .acciones { justify-content: center; }
.hero .boton--linea {
  color: var(--papel);
  border-color: rgb(255 255 255 / .55);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  background: rgb(10 26 41 / .22);
}
.hero .boton--linea:hover { background: var(--papel); color: var(--tinta); border-color: var(--papel); }

.hero__bajada {
  margin: var(--e-4) auto 0;
  max-width: 44rem;
  font-size: var(--t-l);
  line-height: 1.8;
  color: var(--papel);
  text-shadow: 0 1px 14px rgb(10 26 41 / .55);
}
.hero__texto {
  margin: var(--e-3) auto 0;
  max-width: 46rem;
  font-size: var(--t-s);
  line-height: 1.8;
  color: rgb(255 255 255 / .84);
  text-shadow: 0 1px 12px rgb(10 26 41 / .55);
}

.hero__confianza {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--e-2);
  margin: var(--e-5) 0 0;
}
/* Chips de cristal que flotan sobre la foto: cada garantía es su propia
   placa, no solo texto suelto — el mismo lenguaje "flotante" que las
   tarjetas del resto de la página. */
.hero__confianza li {
  display: inline-flex;
  align-items: center;
  gap: .55rem;
  padding: .65rem 1.15rem;
  border-radius: var(--radio-boton);
  background: rgb(255 255 255 / .1);
  border: 1px solid rgb(255 255 255 / .22);
  backdrop-filter: blur(10px) saturate(140%);
  -webkit-backdrop-filter: blur(10px) saturate(140%);
  box-shadow: 0 16px 32px -20px rgb(10 26 41 / .6);
  font-size: var(--t-xs);
  letter-spacing: .18em;
  text-transform: uppercase;
  color: rgb(255 255 255 / .9);
  text-shadow: 0 1px 10px rgb(10 26 41 / .5);
  transition: transform .3s cubic-bezier(.16,1,.3,1), background .3s ease;
}
.hero__confianza li:hover { transform: translateY(-4px); background: rgb(255 255 255 / .18); }
.hero__confianza svg { width: 14px; height: 14px; fill: none; stroke: var(--oro-claro); stroke-width: 2; flex-shrink: 0; }

/* Dirección al pie del hero, como una firma */
.hero__pie {
  position: absolute;
  left: 0; right: 0; bottom: 1.6rem;
  z-index: 2;
  font-family: var(--display);
  font-weight: 500;
  font-size: 1rem;
  color: rgb(255 255 255 / .82);
  text-shadow: 0 1px 10px rgb(10 26 41 / .55);
}

/* ── Manifiesto ─────────────────────────────────────────────────────────── */

.manifiesto { padding-block: var(--seccion); }
.manifiesto__grid {
  display: grid;
  grid-template-columns: 1.15fr 1fr;
  gap: var(--e-6);
  align-items: center;
}
.manifiesto__niega {
  font-family: var(--display);
  font-weight: 500;
  font-size: var(--t-3xl);
  line-height: 1.02;
  letter-spacing: -0.015em;
  margin: 0;
}
.manifiesto__afirma {
  margin: var(--e-4) 0 0;
  max-width: 32rem;
  font-family: var(--display);
  font-weight: 400;
  font-size: var(--t-2xl);
  line-height: 1.32;
  color: var(--oro);
}
/* Recuadrada a propósito: es la garantía que quita la mayor objeción («esto
   me va a costar dinero que no tengo»), así que no puede leerse como una
   nota a pie de página — necesita su propia caja. */
.manifiesto__gratis {
  display: inline-flex;
  align-items: center;
  gap: .85rem;
  margin: var(--e-5) 0 0;
  padding: .9rem 1.3rem;
  border: 1px solid var(--oro);
  border-radius: var(--radio-campo);
  background: var(--oro-velo);
  font-family: var(--sans);
  font-size: var(--t-s);
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--tinta);
  cursor: pointer;
  outline: none;
  transition: background .3s ease, box-shadow .3s ease, transform .3s cubic-bezier(.16,1,.3,1);
}
/* Se ilumina al posar el ratón, llegar por tabulador o tocar/clicar — y solo
   entonces: en reposo es la misma placa tenue de siempre. */
.manifiesto__gratis:hover,
.manifiesto__gratis:focus-visible,
.manifiesto__gratis.destacado {
  background: var(--oro);
  color: var(--papel);
  box-shadow: 0 0 0 5px rgb(176 141 85 / .22), 0 18px 32px -16px rgb(14 36 56 / .4);
  transform: translateY(-2px);
}
.manifiesto__gratis-icono {
  display: grid;
  place-items: center;
  width: 32px; height: 32px;
  flex-shrink: 0;
  border-radius: 50%;
  background: var(--oro);
  transition: background .3s ease, box-shadow .3s ease;
}
.manifiesto__gratis-icono svg { width: 15px; height: 15px; fill: none; stroke: var(--papel); stroke-width: 3; }
.manifiesto__gratis:hover .manifiesto__gratis-icono,
.manifiesto__gratis:focus-visible .manifiesto__gratis-icono,
.manifiesto__gratis.destacado .manifiesto__gratis-icono {
  background: var(--papel);
  box-shadow: inset 0 0 0 2px var(--oro);
}
.manifiesto__gratis:hover .manifiesto__gratis-icono svg,
.manifiesto__gratis:focus-visible .manifiesto__gratis-icono svg,
.manifiesto__gratis.destacado .manifiesto__gratis-icono svg { stroke: var(--oro); }

/* La foto ocupa el hueco que antes se quedaba vacío: tarjeta flotante con el
   mismo lenguaje que el resto de la página (radio + doble sombra). */
.manifiesto__medio {
  border-radius: var(--radio);
  overflow: hidden;
  box-shadow: 0 30px 60px -30px rgb(14 36 56 / .35);
}
.manifiesto__medio picture, .manifiesto__medio img { width: 100%; height: 100%; object-fit: cover; }

@media (max-width: 900px) {
  .manifiesto__grid { grid-template-columns: 1fr; gap: var(--e-5); }
  /* Antes `max-height: 22rem` fijo: la foto es vertical (más alta que
     ancha) y esa altura, repartida sobre el ancho completo de una tablet,
     obligaba a un recorte carnicero que se comía las cabezas de los padres.
     Con `aspect-ratio` en vez de un tope absoluto, el recuadro escala con
     el ancho real del dispositivo y mantiene casi la proporción original
     de la foto (0.84) en vez de aplanarla igual en un móvil de 380px que
     en una tablet de 820px. */
  .manifiesto__medio { order: -1; aspect-ratio: 4 / 5; max-height: none; }
}

/* En tablet la foto ya no se recorta (ver arriba), pero a ese ancho ocupaba
   demasiado hueco frente al texto: se reduce y centra en vez de ir a ancho
   completo. Solo en el tramo tablet — en móvil estrecho el ancho completo
   sigue siendo lo correcto. */
@media (min-width: 641px) and (max-width: 900px) {
  .manifiesto__medio { max-width: 82%; margin-inline: auto; }
}

/* ── Franja de datos ────────────────────────────────────────────────────── */
/* Sin animación de conteo, a propósito: ver la nota en index.php. */

.franja { padding-block: var(--e-6); background: var(--suave); }
.franja__lista {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr));
  gap: var(--e-4);
  margin: 0;
  text-align: center;
}
/* En el tramo tablet el `auto-fit` de arriba cabe justo para 3 columnas
   (no 4): la cuarta tarjeta caía sola en una segunda fila, pegada a la
   izquierda. Se fija en 2×2 y se centra el bloque entero — mejor un
   cuadrado ordenado que una rejilla que "casi" completa. */
@media (min-width: 641px) and (max-width: 1024px) {
  .franja__lista {
    grid-template-columns: repeat(2, minmax(0, 16rem));
    justify-content: center;
  }
}
/* Cada cifra es una tarjeta que flota sobre el fondo, no un número suelto con
   una línea al lado: es lo que da la sensación de placa elevada. */
.franja__lista li {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  background: var(--papel);
  border-radius: var(--radio);
  padding: var(--e-5) var(--e-3) var(--e-4);
  box-shadow: 0 20px 40px -30px rgb(14 36 56 / .2);
  cursor: pointer;
  outline: none;
  transition: transform .4s cubic-bezier(.16,1,.3,1), box-shadow .4s ease;
}
.franja__lista li:hover,
.franja__lista li:focus-visible,
.franja__lista li.destacado {
  transform: translateY(-6px);
  box-shadow: 0 30px 55px -25px rgb(14 36 56 / .32);
}

/* Icono propio: es lo que distingue una garantía de otra a golpe de vista,
   no solo el número. */
.franja__icono {
  display: grid;
  place-items: center;
  width: 52px; height: 52px;
  margin-bottom: var(--e-3);
  border-radius: 50%;
  background: var(--oro-velo);
  color: var(--oro);
}
.franja__icono svg { width: 24px; height: 24px; }

.franja__cifra {
  display: block;
  font-family: var(--display);
  font-weight: 600;
  font-size: clamp(2.25rem, 3vw, 3rem);
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--tinta);
}
.franja__texto {
  display: block;
  margin-top: .6rem;
  font-size: var(--t-xs);
  letter-spacing: .12em;
  text-transform: uppercase;
  line-height: 1.6;
  color: var(--apagado);
}

/* La garantía de «sin coste» quita la mayor objeción de quien llega aquí:
   por eso es la única que se destaca, en vez de que las cuatro compitan por
   la misma atención.
   Va como `.franja__lista li.franja__item--destacado` a propósito:
   `.franja__lista li` (0,1,1) le ganaba a `.franja__item--destacado` (0,1,0)
   y la tarjeta se quedaba en blanco con letra clara encima — invisible. */
.franja__lista li.franja__item--destacado {
  background: var(--marino-hondo);
  box-shadow: 0 26px 50px -26px rgb(10 26 41 / .5);
}
.franja__lista li.franja__item--destacado:hover,
.franja__lista li.franja__item--destacado:focus-visible,
.franja__lista li.franja__item--destacado.destacado { box-shadow: 0 34px 60px -22px rgb(10 26 41 / .6); }
.franja__item--destacado .franja__icono {
  background: rgb(207 174 118 / .18);
  color: var(--oro-claro);
  position: relative;
}
/* Anillo que respira alrededor del icono: la única animación en bucle de la
   página, y solo aquí — para que señale sin cansar. */
.franja__item--destacado .franja__icono::after {
  content: '';
  position: absolute;
  inset: -6px;
  border-radius: 50%;
  border: 1px solid var(--oro-claro);
  animation: respirar 2.6s ease-out infinite;
}
.franja__item--destacado .franja__cifra { color: var(--claro); }
.franja__item--destacado .franja__texto { color: var(--claro-medio); }

.franja__insignia {
  position: absolute;
  top: -.7rem;
  padding: .35rem .9rem;
  border-radius: var(--radio-boton);
  background: var(--oro);
  color: var(--marino-hondo);
  font-size: .625rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  box-shadow: 0 10px 20px -10px rgb(14 36 56 / .5);
}

@keyframes respirar {
  0%   { transform: scale(1);    opacity: .8; }
  100% { transform: scale(1.35); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .franja__item--destacado .franja__icono::after { animation: none; }
}

/* ── La letanía ─────────────────────────────────────────────────────────── */
/* El único bloque oscuro de la web. Siete frases sueltas en tamaño de titular:
   es lo que suena en la cabeza a las cuatro de la mañana, no una lista de
   características. Por eso se compone como poesía. */

.letania { margin: 0; padding: 0; }
.letania li {
  font-family: var(--display);
  font-weight: 400;
  font-size: clamp(1.5rem, 2.6vw, 2.25rem);
  line-height: 1.32;
  letter-spacing: -0.01em;
  color: var(--claro-tenue);
  padding: .5rem 0;
  cursor: pointer;
  outline: none;
  transition: color .3s ease, padding-left .3s ease;
}
.letania li:nth-child(n+4) { color: var(--claro-medio); }
.letania li:last-child { color: var(--claro); font-weight: 500; }
.letania li:hover,
.letania li:focus-visible,
.letania li.destacado { color: var(--claro); padding-left: .5rem; }

.giro { margin-top: var(--e-6); }
.giro__entrada {
  font-family: var(--sans);
  font-style: normal;
  font-weight: 600;
  text-transform: uppercase;
  font-size: var(--t-xs);
  letter-spacing: .22em;
  color: var(--oro-claro);
  margin: 0 0 var(--e-3);
}
.giro__clave {
  font-family: var(--display);
  font-weight: 500;
  font-size: var(--t-2xl);
  line-height: 1.15;
  color: var(--claro);
  margin: 0;
  max-width: 26ch;
}
.giro__clave em { color: var(--oro-claro); }
.giro__cola { margin: var(--e-3) 0 0; color: var(--claro-medio); max-width: var(--medida); }

/* ── Listas ─────────────────────────────────────────────────────────────── */

.lista-check { margin: 0; }
.lista-check li {
  display: flex;
  align-items: flex-start;
  gap: 1rem;
  padding: 1.15rem 1rem;
  margin-inline: -1rem;
  border-radius: var(--radio-campo);
  border-top: 1px solid var(--linea);
  font-family: var(--display);
  font-weight: 400;
  font-size: var(--t-xl);
  line-height: 1.35;
  cursor: pointer;
  outline: none;
  transition: background .3s ease, color .3s ease, border-color .3s ease;
}
/* Colores invertidos al posar, enfocar por tabulador o tocar/clicar: fondo
   marino, letra en crema — no solo un tono más oscuro de texto. */
.lista-check li:hover,
.lista-check li:focus-visible,
.lista-check li.destacado {
  background: var(--marino-hondo);
  color: var(--crema);
  border-top-color: transparent;
}
.lista-check li:hover svg,
.lista-check li:focus-visible svg,
.lista-check li.destacado svg { stroke: var(--oro-claro); }
.lista-check li:last-child { border-bottom: 1px solid var(--linea); }
.lista-check li:last-child:hover,
.lista-check li:last-child:focus-visible,
.lista-check li:last-child.destacado { border-bottom-color: transparent; }
.lista-check svg {
  width: 17px; height: 17px;
  margin-top: .45rem;
  flex-shrink: 0;
  fill: none; stroke: var(--oro); stroke-width: 2;
}

/* ── Cómo ayudamos: fichas numeradas ────────────────────────────────────── */

.fichas {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--e-3);
  margin: 0;
}
.fichas li {
  background: var(--papel);
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  padding: var(--e-3) var(--e-4);
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: var(--e-3);
  box-shadow: 0 24px 44px -34px rgb(14 36 56 / .22);
  cursor: pointer;
  outline: none;
  transition: background .35s ease, transform .35s cubic-bezier(.16,1,.3,1),
              box-shadow .35s ease, border-color .35s ease;
}
.fichas li:hover,
.fichas li:focus-visible,
.fichas li.destacado {
  transform: translateY(-6px);
  box-shadow: 0 24px 48px -28px rgb(14 36 56 / .35);
  border-color: var(--oro);
}
/* Antes era el numerito «01»: un icono representativo dice más que el orden
   de la tarjeta. */
.fichas__num {
  display: grid;
  place-items: center;
  flex-shrink: 0;
  width: 56px; height: 56px;
  border-radius: 50%;
  background: var(--oro-velo);
  color: var(--oro);
  transition: background .3s ease, color .3s ease;
}
.fichas__num svg { width: 26px; height: 26px; }
.fichas li:hover .fichas__num,
.fichas li:focus-visible .fichas__num,
.fichas li.destacado .fichas__num { background: var(--oro); color: var(--papel); }
.fichas__texto {
  font-family: var(--display);
  font-weight: 400;
  font-size: var(--t-xl);
  line-height: 1.28;
  margin: 0;
}

/* ── Cita a pantalla completa ───────────────────────────────────────────── */

.cita {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  padding-block: clamp(6rem, 13vw, 11rem);
  color: var(--papel);
  background: var(--marino);
  text-align: center;
}
.cita__foto { position: absolute; inset: 0; z-index: -2; }
.cita__foto img { width: 100%; height: 100%; object-fit: cover; }
.cita__foto::after {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgb(14 36 56 / .74) 0%, rgb(14 36 56 / .82) 100%);
}
.cita__texto {
  font-family: var(--display);
  font-weight: 500;
  font-size: clamp(1.875rem, 3.2vw, 3.25rem);
  line-height: 1.08;
  letter-spacing: -0.015em;
  margin: 0 auto;
  max-width: 20ch;
  text-shadow: 0 2px 22px rgb(10 26 41 / .4);
}
.cita__texto em { color: var(--oro-claro); }
.cita .etiqueta { color: var(--oro-claro); justify-content: center; }
.cita .etiqueta::before, .cita .etiqueta::after { background: currentColor; }

/* ── «Cómo trabajamos»: rueda tipo tragaperras ──────────────────────────── */
/* Sustituye al viejo sticky-relato de la librería: aquí el paso activo se
   queda fijo en el centro de una ventana y los vecinos asoman arriba y abajo,
   atenuados — como la rueda de una máquina tragaperras. El giro lo calcula
   app.js según el scroll; aquí solo el aspecto. */

.proceso h3 { margin: 0 0 var(--e-2); }
.proceso p { color: var(--apagado); max-width: 44ch; margin: 0; }
.proceso__paso {
  display: block;
  font-family: var(--sans);
  font-style: normal;
  font-weight: 600;
  text-transform: uppercase;
  font-size: var(--t-xs);
  letter-spacing: .22em;
  color: var(--oro);
  margin-bottom: var(--e-2);
}

.rueda-envoltorio {
  position: relative;
  height: calc(var(--pasos, 4) * 82vh);
}
.rueda {
  position: sticky;
  top: calc(var(--barra-alto) + 2.5rem);
  height: min(58vh, 500px);
  overflow: hidden;
  /* El cristal de la rueda: los vecinos se desvanecen en vez de cortarse en
     seco arriba y abajo. */
  -webkit-mask-image: linear-gradient(180deg, transparent 0, black 20%, black 80%, transparent 100%);
          mask-image: linear-gradient(180deg, transparent 0, black 20%, black 80%, transparent 100%);
}
.rueda__pista { will-change: transform; }
.rueda__paso {
  height: min(42vh, 360px);
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  align-items: center;
  gap: 3rem;
  padding-inline: .5rem;
}
.rueda__foto {
  height: 100%;
  border-radius: var(--radio);
  overflow: hidden;
  box-shadow: 0 24px 50px -28px rgb(14 36 56 / .3);
  transition: box-shadow .4s ease;
}
.rueda__foto picture, .rueda__foto img { width: 100%; height: 100%; object-fit: cover; }

.rueda__paso.activo .rueda__foto {
  box-shadow: 0 34px 64px -26px rgb(14 36 56 / .42), 0 0 0 3px var(--oro-velo);
}

@media (max-width: 900px) {
  .rueda-envoltorio { height: auto; }
  .rueda {
    position: static;
    height: auto;
    overflow: visible;
    -webkit-mask-image: none;
            mask-image: none;
  }
  .rueda__pista { display: flex; flex-direction: column; gap: 2.5rem; transform: none !important; }
  .rueda__paso {
    height: auto;
    grid-template-columns: 1fr;
    gap: 1.25rem;
    opacity: 1 !important;
    transform: none !important;
  }
  .rueda__foto { height: 14rem; order: -1; }
}

/* ── Contraste y compromiso ─────────────────────────────────────────────── */

.contraste {
  display: grid;
  grid-template-columns: 1fr 1fr;
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  overflow: hidden;
  box-shadow: 0 30px 60px -38px rgb(14 36 56 / .3);
  transition: transform .5s cubic-bezier(.16,1,.3,1);
}
.contraste > div { padding: var(--e-5) var(--e-4); }
/* Sin esto el panel «Lo habitual» era del mismo crema que el fondo de la
   sección: se veía como si no tuviera panel. Un paso más oscuro que --suave
   para que la tarjeta se distinga de lo que hay detrás. */
.contraste > div:first-child { background: var(--linea); border-right: 1px solid rgb(14 36 56 / .12); }
.contraste > div:last-child { background: var(--marino-hondo); color: var(--claro); }

.contraste__eti {
  display: block;
  font-family: var(--sans);
  font-style: normal;
  font-weight: 600;
  text-transform: uppercase;
  font-size: var(--t-xs);
  letter-spacing: .18em;
  margin-bottom: var(--e-2);
  color: var(--tenue);
}
.contraste__nuestro .contraste__eti { color: var(--oro-claro); }
.contraste p {
  font-family: var(--display);
  font-weight: 400;
  font-size: var(--t-2xl);
  line-height: 1.2;
  margin: 0;
}
.contraste__ajeno p { color: var(--apagado); }
.contraste__nuestro p { color: var(--claro); }

.compromiso__lista { margin-top: var(--e-4); }
.compromiso__lista li {
  display: flex;
  gap: 1rem;
  padding: .85rem 0;
  border-radius: var(--radio-campo);
  font-size: var(--t-l);
  color: var(--apagado);
  border-top: 1px solid var(--linea);
  transition: color .3s ease, background .3s ease;
}
.compromiso__lista li::before {
  content: '';
  flex-shrink: 0;
  width: 5px; height: 5px;
  margin-top: .85rem;
  background: var(--oro);
  border-radius: 50%;
  transition: transform .3s ease, box-shadow .3s ease;
}
.fondo-marino .compromiso__lista li { color: var(--claro-medio); border-top-color: var(--linea-noche); }

/* Iluminación al posar, enfocar por tabulador o tocar — y solo entonces.
   Antes escalaba (scale 1.02) y crecía de padding a la vez: el conjunto se
   notaba exagerado y, con el tilt 3D que traía [data-tilt] (pensado para
   tarjetas, no para una fila de texto), el recálculo del ratón en cada
   "mousemove" chocaba con la propia transición CSS y quedaba vibrando. El
   `padding-inline` tampoco funcionó: al estrechar el ancho del texto le
   obligaba a partirse en más líneas, esa fila crecía de alto y su fondo
   invadía la fila de arriba. Ahora solo cambia el color de fondo (nada de
   relleno ni desplazamiento, así la caja nunca cambia de tamaño) y el punto
   brilla un poco, sin desbordarse hacia las filas vecinas.
   El color de texto del destacado cambia según el fondo: esta lista se usa
   tanto sobre marino («Nuestro compromiso») como sobre crema (el cierre), y
   poner siempre texto claro lo dejaba invisible sobre el fondo claro. */
.compromiso__lista li.destacable { cursor: pointer; outline: none; }
.compromiso__lista li.destacable:hover,
.compromiso__lista li.destacable:focus-visible,
.compromiso__lista li.destacable.destacado {
  background: rgb(207 174 118 / .1);
  color: var(--marino);
}
.fondo-marino .compromiso__lista li.destacable:hover,
.fondo-marino .compromiso__lista li.destacable:focus-visible,
.fondo-marino .compromiso__lista li.destacable.destacado {
  background: rgb(207 174 118 / .08);
  color: var(--claro);
}
.compromiso__lista li.destacable:hover::before,
.compromiso__lista li.destacable:focus-visible::before,
.compromiso__lista li.destacable.destacado::before {
  transform: scale(1.6);
  box-shadow: 0 0 6px 1px var(--oro-claro);
}

/* ── Urgencia ───────────────────────────────────────────────────────────── */

.urgencia { background: var(--suave); }
.urgencia__interior {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--e-5);
  padding-block: var(--seccion);
}
.urgencia__texto { max-width: 44rem; }
.urgencia__cuerpo { margin: var(--e-4) 0 0; max-width: var(--medida); color: var(--apagado); }
.urgencia .boton { flex-shrink: 0; }

/* ── FAQ ─────────────────────────────────────────────────────────────────── */

.faq__item {
  margin-bottom: var(--e-2);
  border-bottom: 1px solid var(--linea);
  transition: background .3s ease, border-color .3s ease;
}
.faq__item:first-child { border-top: 1px solid var(--linea); }
.faq__item:last-child { margin-bottom: 0; }
/* La pregunta abierta se queda destacada mientras se lee la respuesta, no
   solo un signo «−» distinto: toda la tarjeta se ilumina. */
.faq__item[open] {
  background: var(--oro-velo);
  border-color: transparent;
  border-radius: var(--radio-campo);
}
.faq__item[open] + .faq__item { border-top-color: transparent; }
.faq__item[open] .faq__pregunta { color: var(--marino); }
.faq__pregunta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--e-3);
  padding: 1.75rem var(--e-2);
  margin-inline: calc(var(--e-2) * -1);
  border-radius: var(--radio-campo);
  cursor: pointer;
  list-style: none;
  font-family: var(--display);
  font-weight: 500;
  font-size: var(--t-xl);
  line-height: 1.3;
  transition: background .25s ease, color .25s ease;
}
.faq__pregunta:hover { background: var(--suave); color: var(--marino); }
.faq__pregunta::-webkit-details-marker { display: none; }
.faq__pregunta::after {
  content: '+';
  flex-shrink: 0;
  font-family: var(--sans);
  font-size: 1.5rem;
  font-weight: 300;
  color: var(--oro);
  line-height: 1;
  transition: transform .3s ease;
}
.faq__item[open] .faq__pregunta::after { content: '\2212'; }
.faq__respuesta {
  padding: 0 var(--e-2) 1.75rem;
  max-width: var(--medida);
  color: var(--apagado);
  animation: faq-abre .35s ease;
}
@keyframes faq-abre {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: none; }
}

/* ── Cierre / formulario ────────────────────────────────────────────────── */

.cierre { position: relative; isolation: isolate; overflow: hidden; background: var(--crema); }
.cierre__foto { position: absolute; inset: 0; z-index: -2; }
.cierre__foto img { width: 100%; height: 100%; object-fit: cover; }
.cierre__foto::after {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(100deg, var(--crema) 0%, rgb(250 248 243 / .96) 46%, rgb(250 248 243 / .6) 100%);
}

.apunte { margin-top: var(--e-5); font-size: var(--t-s); color: var(--apagado); }
.apunte a { color: var(--oro); font-weight: 500; }
.apunte a:hover { text-decoration: underline; }

.caja-form {
  background: var(--papel);
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  padding: var(--e-5) var(--e-4);
  /* Doble sombra: una de contacto, pegada, y otra ambiental, muy difusa —
     así la caja parece elevada de verdad y no solo recortada con un borde. */
  box-shadow: 0 2px 6px -3px rgb(14 36 56 / .18), 0 50px 90px -45px rgb(14 36 56 / .4);
}

/* ── Formulario ─────────────────────────────────────────────────────────── */

.formulario { display: grid; gap: var(--e-3); }
.pareja { display: grid; grid-template-columns: 1fr 1fr; gap: var(--e-3); }

.campo { display: grid; gap: .45rem; }
.campo label {
  font-size: var(--t-xs);
  font-weight: 500;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--apagado);
}
.campo label .opcional { text-transform: none; letter-spacing: 0; color: var(--tenue); font-weight: 400; }

.campo input:not([type="checkbox"]):not([type="radio"]),
.campo select,
.campo textarea {
  font-family: var(--sans);
  font-size: var(--t-m);
  color: var(--tinta);
  background: var(--crema);
  border: 1px solid var(--linea);
  border-radius: var(--radio-campo);
  padding: .9rem 1rem;
  width: 100%;
  transition: border-color .2s ease, box-shadow .2s ease, background .2s ease;
}
.campo textarea { min-height: 120px; resize: vertical; line-height: 1.6; }

.campo input:not([type="checkbox"]):not([type="radio"]):hover,
.campo select:hover,
.campo textarea:hover { border-color: var(--tenue); }

.campo input:not([type="checkbox"]):not([type="radio"]):focus,
.campo select:focus,
.campo textarea:focus {
  outline: none;
  border-color: var(--oro);
  background: var(--papel);
  box-shadow: 0 0 0 3px var(--oro-velo);
}

.campo input::placeholder, .campo textarea::placeholder { color: var(--tenue); }

.campo--error input:not([type="checkbox"]):not([type="radio"]),
.campo--error select,
.campo--error textarea { border-color: var(--alerta); }

.campo__error { margin: 0; font-size: var(--t-xs); color: var(--alerta); min-height: 1em; }
.campo__error:empty { display: none; }
.campo--miel { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

.grupo { border: 0; margin: 0; padding: 0; }
.grupo__leyenda {
  font-size: var(--t-xs);
  font-weight: 500;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--apagado);
  padding: 0;
  margin-bottom: .7rem;
}
.opcion {
  display: flex;
  align-items: center;
  gap: .75rem;
  padding: .5rem 0;
  cursor: pointer;
  font-size: var(--t-s);
}
.opcion input { accent-color: var(--oro); width: 17px; height: 17px; flex-shrink: 0; }

/* Va con `.campo` delante a propósito: `.campo label` (0,1,1) le gana a
   `.consentimiento` (0,1,0) y el aviso salía TODO EN MAYÚSCULAS. */
.campo label.consentimiento {
  display: flex;
  align-items: flex-start;
  gap: .75rem;
  font-size: var(--t-s);
  line-height: 1.6;
  color: var(--apagado);
  cursor: pointer;
  text-transform: none;
  letter-spacing: 0;
  font-weight: 400;
}
.consentimiento input { accent-color: var(--oro); width: 17px; height: 17px; margin-top: .25rem; flex-shrink: 0; }
.consentimiento a { color: var(--oro); font-weight: 500; text-decoration: underline; }

.form__aviso { margin: 0; font-size: var(--t-s); }
.form__aviso:empty { display: none; }
.form__aviso[data-estado="error"] { color: var(--alerta); }
.form__aviso[data-estado="ok"] { color: var(--exito); }
.form__pie { margin: 0; font-size: var(--t-xs); color: var(--tenue); line-height: 1.6; }

/* ── Pie ─────────────────────────────────────────────────────────────────── */

.pie { background: var(--marino-hondo); color: var(--claro-medio); padding-block: var(--e-6) var(--e-4); }
.pie__interior {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr;
  gap: var(--e-5);
  padding-bottom: var(--e-5);
  border-bottom: 1px solid var(--linea-noche);
}
.pie__logo { width: 190px; height: auto; margin-bottom: var(--e-3); }
.pie__claim {
  max-width: 38ch;
  font-family: var(--display);
  font-weight: 400;
  font-size: 1.125rem;
  line-height: 1.55;
  color: var(--claro-tenue);
}
.pie__titulo {
  font-family: var(--sans);
  font-style: normal;
  font-weight: 600;
  text-transform: uppercase;
  font-size: var(--t-xs);
  color: var(--oro-claro);
  margin: 0 0 var(--e-3);
  letter-spacing: .18em;
}
.pie__lista { font-size: var(--t-s); }
.pie__lista li { margin-bottom: .6rem; }
.pie__lista a:hover { color: var(--oro-claro); }

.pie__abajo {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: var(--e-3);
  padding-top: var(--e-4);
  font-size: var(--t-xs);
  color: var(--claro-tenue);
}
.pie__nota { max-width: 92ch; }

/* ── Flotantes ──────────────────────────────────────────────────────────── */

.whatsapp {
  position: fixed;
  right: 1.5rem; bottom: 1.5rem;
  z-index: 40;
  width: 52px; height: 52px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--marino-hondo);
  box-shadow: 0 10px 26px -8px rgb(10 26 41 / .45);
  transition: transform .15s ease, opacity .25s ease;
  animation: flotante-entra .6s cubic-bezier(.16,1,.3,1) 1.2s backwards;
}
.whatsapp svg { width: 27px; height: 27px; fill: var(--oro); }
.whatsapp:hover { transform: scale(1.08) translateY(-2px); }
@keyframes flotante-entra {
  from { opacity: 0; transform: scale(.5) translateY(20px); }
  to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  .whatsapp { animation: none; }
}

/* Al llegar al pie de página (`app.js`, IntersectionObserver sobre `.pie`):
   ambos flotantes se apartan en vez de tapar el aviso legal y las políticas
   de privacidad/cookies del footer — acordado en el status del 31-ago. */
.whatsapp.flotante--oculto,
.cta-movil.flotante--oculto {
  opacity: 0;
  pointer-events: none;
  transform: translateY(12px);
}

.cta-movil { display: none; }
/* ── Páginas interiores (legales, gracias, 404, 500) ────────────────────── */

.interior {
  padding-block: calc(var(--barra-alto) + var(--e-6)) var(--seccion);
  background: var(--crema);
}
.interior__cuerpo { max-width: var(--medida); }
/* La Garalde tiene interlínea muy cerrada: sin margen, el titular se pega al
   primer párrafo y parecen un bloque. */
.interior__cuerpo h1 { font-size: var(--t-3xl); margin-bottom: var(--e-3); }
.interior__cuerpo h2 { font-size: var(--t-2xl); margin-top: var(--e-5); margin-bottom: var(--e-2); }
.interior__cuerpo h3 { font-size: var(--t-xl); margin-top: var(--e-4); }
.interior__cuerpo a { color: var(--oro); font-weight: 500; }
/* …salvo los botones: `.interior__cuerpo a` (0,1,1) le gana a `.boton` (0,1,0)
   y el botón oscuro salía con la letra dorada. */
.interior__cuerpo a.boton { color: var(--crema); }
.interior__cuerpo a.boton--linea { color: var(--tinta); }
.interior__cuerpo a.boton--luz { color: var(--tinta); }
.interior__cuerpo ul { list-style: disc; padding-left: 1.15rem; margin: 0 0 var(--e-3); }
.interior__cuerpo li { margin-bottom: var(--e-1); }
.interior__fecha { color: var(--tenue); font-size: var(--t-s); }

.pendiente { background: var(--oro-velo); padding: 0 .3rem; border-bottom: 1px dashed var(--oro); }

.tabla-envoltorio { overflow-x: auto; margin-bottom: var(--e-3); }
.tabla { width: 100%; border-collapse: collapse; font-size: var(--t-s); min-width: 480px; }
.tabla th, .tabla td {
  text-align: left;
  padding: .75rem .85rem;
  border-bottom: 1px solid var(--linea);
  vertical-align: top;
}
.tabla th { font-weight: 500; background: var(--suave); }

.marca-exito {
  display: grid;
  place-items: center;
  width: 58px; height: 58px;
  border: 1px solid var(--oro);
  border-radius: var(--radio-campo);
  margin-bottom: var(--e-4);
}
.marca-exito svg { width: 26px; height: 26px; fill: var(--oro); }

/* ── Rejilla ────────────────────────────────────────────────────────────── */

.rejilla {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: clamp(var(--e-4), 5vw, var(--e-6));
}
.col-texto  { grid-column: span 5; }
.col-lateral{ grid-column: 7 / span 6; }
.col-titular{ grid-column: span 4; position: sticky; top: calc(var(--barra-alto) + 2rem); }
.col-cuerpo { grid-column: 6 / span 7; }
.col-ancha  { grid-column: span 9; }
.col-intro  { grid-column: span 5; }
.col-form   { grid-column: 7 / span 6; }

/* Aparición al hacer scroll. `--i` (opcional, puesto por PHP en tarjetas y
   listas) escalona la entrada de cada elemento en vez de que aparezcan todos
   a la vez: es lo que hace que una fila de tarjetas se sienta viva. */
.revelar-listo .revelar { opacity: 0; transform: translateY(26px); }
.revelar-listo .revelar.visible {
  opacity: 1;
  transform: none;
  transition: opacity .8s cubic-bezier(.25,.85,.25,1), transform .8s cubic-bezier(.25,.85,.25,1);
  transition-delay: calc(var(--i, 0) * 90ms);
}

/* Variante «pop»: para tarjetas sueltas (las de datos), no para bloques de
   texto — entra con un pequeño escalado además del desplazamiento, y con más
   tiempo entre una y otra, para que se note que aparecen una a una. */
.revelar-listo .revelar.revelar--pop { transform: translateY(34px) scale(.88); }
.revelar-listo .revelar.revelar--pop.visible {
  transition-duration: .7s;
  transition-delay: calc(var(--i, 0) * 140ms);
}

/* ── Titular que se ilumina letra a letra ───────────────────────────────── */
/* app.js calcula cuántas letras van «encendidas» según el scroll y les pone
   esta clase; aquí solo el aspecto. Empiezan apagadas de un tono, no
   invisibles — así en el instante antes de que el JS actúe (o si no llega a
   cargar) el titular ya se lee entero. */
.titulo-letras { display: inline; }
.palabra { display: inline-block; white-space: nowrap; }
.letra {
  opacity: .28;
  transition: opacity .15s ease, text-shadow .15s ease;
}
.letra.encendida {
  opacity: 1;
  text-shadow: 0 0 20px rgb(176 141 85 / .4);
}
@media (prefers-reduced-motion: reduce) {
  .letra { opacity: 1; text-shadow: none; transition: none; }
}

/* Párrafo que entra deslizándose cuando el titular de encima lleva 6 letras
   encendidas (lo dispara app.js con la clase `.visible`). Dos sentidos: una
   sección entra de izquierda a derecha, la otra al revés — para que no se
   sientan la misma sección repetida. */
.parrafo-deslizante {
  opacity: 0;
  transition: opacity .7s ease, transform .7s cubic-bezier(.16,1,.3,1);
}
.parrafo-deslizante--desde-izquierda { transform: translateX(-52px); }
.parrafo-deslizante--desde-derecha   { transform: translateX(52px); }
.parrafo-deslizante.visible { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  .parrafo-deslizante { opacity: 1; transform: none; transition: none; }
}

/* ── Tarjetas flotantes ─────────────────────────────────────────────────── */
/* Flotan solas todo el rato (sutil, con un `animation-delay` negativo y
   distinto por tarjeta para que no floten todas a la vez, en bloque). Al
   tocar o clicar una: crece de verdad (con su texto), se ilumina y proyecta
   sombra en la dirección contraria a un "sol" fijo arriba-centro de la
   rejilla (como el vértice de una pirámide sobre el panel de tarjetas) — la
   dirección la calcula app.js — mientras el resto se atenúa, con `:has()` y
   sin más JS. Más condensadas entre sí (menos separación vertical) y con más
   aire a los lados de la página: ver `#preguntas-destacadas`/`#soluciones`
   más abajo. */

.tarjetas-flotantes {
  display: grid;
  gap: 1.1rem;
  margin: 0;
}
.tarjetas-flotantes--preguntas { grid-template-columns: repeat(4, 1fr); }
.tarjetas-flotantes--soluciones { grid-template-columns: repeat(3, 1fr); }

/* Estas dos secciones respiran más por los lados que el resto de la web a
   propósito: con 4 columnas de tarjetas, el ancho de contenedor habitual
   (1.5rem por lado) se sentía justo. */
#preguntas-destacadas .contenedor,
#soluciones .contenedor { width: min(100% - 3rem, var(--ancho)); }
@media (min-width: 641px) {
  #preguntas-destacadas .contenedor,
  #soluciones .contenedor { width: min(100% - 6rem, var(--ancho)); }
}

.tarjeta-flotante {
  position: relative;
  /* Son `<li>`: fuera de un `<ul>` (el carrusel las agrupa en `<div>`) ya no
     heredan el `list-style: none` del reset global y el navegador les pinta
     su marcador por defecto. */
  list-style: none;
  background: var(--papel);
  border: 1px solid var(--linea);
  border-radius: var(--radio);
  padding: var(--e-4) var(--e-3);
  cursor: pointer;
  outline: none;
  box-shadow: 0 18px 34px -28px rgb(14 36 56 / .22);
  animation: flotar 6s ease-in-out infinite;
  animation-delay: calc(var(--i, 0) * -0.6s);
  transition: opacity .4s ease, filter .4s ease, box-shadow .35s ease, border-color .35s ease;
}
@keyframes flotar {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-9px); }
}

.tarjeta-flotante__icono {
  display: grid;
  place-items: center;
  width: 42px; height: 42px;
  margin-bottom: var(--e-2);
  border-radius: 50%;
  background: var(--oro-velo);
  color: var(--oro);
  transition: background .3s ease, color .3s ease;
}
.tarjeta-flotante__icono svg { width: 19px; height: 19px; }

.tarjeta-flotante__pregunta {
  font-family: var(--display);
  font-weight: 500;
  font-size: 1.0625rem;
  line-height: 1.4;
  color: var(--tinta);
  margin: 0;
}
.tarjeta-flotante__titulo {
  font-family: var(--display);
  font-weight: 600;
  font-size: 1.1875rem;
  line-height: 1.25;
  color: var(--tinta);
  margin: 0 0 .5rem;
}
.tarjeta-flotante__texto {
  font-size: .9375rem;
  line-height: 1.6;
  color: var(--apagado);
  margin: 0;
}

/* Destacada: quieta (se corta la animación para fijar su propia postura),
   notablemente más grande —el texto crece con ella, es la misma tarjeta a
   otra escala, no un truco aparte— y con la sombra cayendo en la dirección
   contraria al sol fijo de arriba (la calcula app.js en `--sombra-x/y`).
   Va como `.revelar-listo .revelar.tarjeta-flotante.destacado` a propósito:
   `.revelar-listo .revelar.visible` (0,3,0) le ganaba a `.tarjeta-flotante.
   destacado` (0,2,0) y forzaba `transform: none` — la tarjeta se quedaba en
   su tamaño normal (nunca llegaba a crecer) en vez de agrandarse. */
.revelar-listo .revelar.tarjeta-flotante.destacado {
  animation: none;
  transform: translateY(-10px) scale(1.16);
  z-index: 3;
  border-color: var(--oro);
  box-shadow:
    var(--sombra-x, 0px) var(--sombra-y, 0px) 70px 14px rgb(176 141 85 / .32),
    var(--sombra-x, 0px) var(--sombra-y, 0px) 26px 0 rgb(14 36 56 / .28),
    0 30px 50px -22px rgb(14 36 56 / .35);
}
.tarjeta-flotante.destacado .tarjeta-flotante__icono { background: var(--oro); color: var(--papel); }

@media (max-width: 1024px) {
  /* En rejillas de 2 columnas, crecer tanto como en escritorio hace que la
     tarjeta destacada invada a sus vecinas: se modera la escala. */
  .revelar-listo .revelar.tarjeta-flotante.destacado { transform: translateY(-6px) scale(1.08); }
}

/* El resto se apaga mientras una está destacada — `:has()` evita tener que
   marcar "no activa" en cada tarjeta desde JS. `.carrusel__pagina` además de
   `.tarjetas-flotantes`: en el carrusel el padre directo de las tarjetas ya
   no es el `<ul>` original, sino la página que las agrupa. */
.tarjetas-flotantes:has(.destacado) .tarjeta-flotante:not(.destacado),
.carrusel__pagina:has(.destacado) .tarjeta-flotante:not(.destacado) {
  opacity: .42;
  filter: saturate(.75);
}

@media (prefers-reduced-motion: reduce) {
  .tarjeta-flotante { animation: none; }
}

@media (max-width: 1024px) {
  .tarjetas-flotantes--preguntas  { grid-template-columns: repeat(2, 1fr); }
  .tarjetas-flotantes--soluciones { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  /* `#preguntas-destacadas` pasa por el carrusel JS a partir de 6 tarjetas
     (ver `iniciarCarruseles` en app.js): ahí las `.tarjeta-flotante` ya no
     cuelgan de `.tarjetas-flotantes--preguntas` sino de `.carrusel__pagina`,
     así que hace falta repetir la regla con ese otro padre o el tamaño de
     letra/padding solo se aplica en el fallback sin JS. */
  .tarjetas-flotantes--preguntas .tarjeta-flotante,
  #preguntas-destacadas .carrusel__pagina .tarjeta-flotante {
    padding: var(--e-3) var(--e-2);
  }
  .tarjetas-flotantes--preguntas .tarjeta-flotante__pregunta,
  #preguntas-destacadas .carrusel__pagina .tarjeta-flotante__pregunta {
    font-size: .8125rem;
  }
  .tarjetas-flotantes--soluciones { grid-template-columns: 1fr; }
}

/* ── Carrusel (bloques de más de 6 tarjetas) ───────────────────────────────
   `app.js` (`iniciarCarruseles`) solo interviene cuando hay más de 6 tarjetas
   dentro de `[data-carrusel]`: agrupa la `<ul class="tarjetas-flotantes">`
   original en páginas de `.carrusel__pagina` (6 a la vez, repartidas a
   partes iguales) y las mete en esta pista. Sin JS, el `<ul>` original se ve
   tal cual — la rejilla normal de arriba — así que nunca hay contenido
   inaccesible.
   El efecto es el de Osmo «Liquid Glass Carousel», pero acotado a como lo
   quiere el cliente: solo la página vecina inmediata asoma a cada lado (no
   dos), y con esa página se ve un cristal esmerilado detrás — no números de
   página, unos puntitos con el activo destacado. */

.carrusel { position: relative; overflow: hidden; }

.carrusel__pista {
  display: flex;
  align-items: stretch;
  gap: 2%;
  cursor: grab;
  touch-action: pan-y;
  will-change: transform;
  -webkit-user-select: none;
  user-select: none;
}
.carrusel__pista:active { cursor: grabbing; }

.carrusel__pagina {
  position: relative;
  /* 78 % deja un 11 % de margen a cada lado; con el 2 % de `gap` de arriba
     restado, quedan ~9 % de asomo real antes del encogido de la vecina —
     lo bastante para que se note el cristal, pero solo "1 a cada lado". */
  flex: 0 0 78%;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.1rem;
  border-radius: var(--radio);
  transition: transform .6s cubic-bezier(.16,1,.3,1), filter .6s ease, opacity .6s ease;
}

.carrusel__pagina--activa { transform: none; opacity: 1; filter: none; }

/* Página vecina: la que se «desliza hacia» el centro. Encogida, atenuada y
   con un velo de cristal encima — el «Liquid Glass» del que habla Osmo. */
.carrusel__pagina--vecina {
  transform: scale(.94);
  opacity: .55;
  filter: blur(2px) saturate(.75);
}
.carrusel__pagina--vecina::after {
  content: '';
  position: absolute; inset: 0;
  border-radius: inherit;
  background: linear-gradient(135deg, rgb(255 255 255 / .32), rgb(255 255 255 / .04) 45%, transparent 75%);
  backdrop-filter: blur(5px);
  -webkit-backdrop-filter: blur(5px);
}
/* Cualquier página más allá de la vecina inmediata: fuera de vista (solo
   quedan 3 candidatas a la vez — «1 en medio, 1 a cada lado»). */
.carrusel__pagina--lejana { opacity: 0; }

@media (max-width: 1024px) {
  .carrusel__pagina { grid-template-columns: repeat(2, 1fr); }
}

.carrusel__puntos {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: .55rem;
  margin-top: var(--e-4);
}
.carrusel__punto {
  width: 8px; height: 8px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: var(--tenue);
  cursor: pointer;
  transition: background .3s ease, transform .3s cubic-bezier(.16,1,.3,1), width .3s cubic-bezier(.16,1,.3,1);
}
.carrusel__punto:hover { background: var(--oro-claro); }
.carrusel__punto--activo {
  width: 22px;
  border-radius: var(--radio-boton);
  background: var(--oro);
}

@media (prefers-reduced-motion: reduce) {
  .carrusel__pagina, .carrusel__punto { transition: none; }
}

/* ── Responsive ─────────────────────────────────────────────────────────── */

@media (max-width: 1024px) {
  .rejilla { display: block; }
  .col-texto, .col-lateral, .col-titular, .col-cuerpo, .col-ancha, .col-intro, .col-form {
    grid-column: auto;
    position: static;
  }
  .col-lateral, .col-cuerpo, .col-form { margin-top: var(--e-5); }
  .col-titular { margin-bottom: var(--e-4); }

  .pie__interior { grid-template-columns: 1fr 1fr; }
  .pie__logo { grid-column: 1 / -1; }

  .fichas { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 900px) {
  .barra__menu { display: block; position: relative; width: 40px; height: 40px; }
  .barra__menu-barras,
  .barra__menu-barras::before,
  .barra__menu-barras::after {
    position: absolute;
    left: 8px; right: 8px;
    height: 1px;
    background: currentColor;
    transition: transform .2s ease, opacity .2s ease;
  }
  .barra__menu-barras { top: 19px; }
  .barra__menu-barras::before { content: ''; top: -7px; }
  .barra__menu-barras::after  { content: ''; top: 7px; }
  .barra__menu[aria-expanded="true"] .barra__menu-barras { background: transparent; }
  .barra__menu[aria-expanded="true"] .barra__menu-barras::before { transform: translateY(7px) rotate(45deg); }
  .barra__menu[aria-expanded="true"] .barra__menu-barras::after  { transform: translateY(-7px) rotate(-45deg); }

  .js .barra__nav {
    display: none;
    position: absolute;
    top: 100%; left: 0; right: 0;
    flex-direction: column;
    align-items: stretch;
    gap: var(--e-3);
    background: var(--crema);
    color: var(--tinta);
    border-bottom: 1px solid var(--linea);
    padding: var(--e-3) 1.5rem var(--e-4);
  }
  .js .barra__nav.abierto { display: flex; }
  .barra__enlaces { flex-direction: column; align-items: stretch; gap: 0; }
  .barra__enlaces a { display: block; padding: .9rem 0; border-bottom: 1px solid var(--linea); opacity: 1; }
  .barra__acciones { flex-direction: column; align-items: stretch; gap: var(--e-2); margin-top: var(--e-1); }
  .barra__tel { justify-content: center; padding: .5rem 0; }
  .barra__acciones .boton { width: 100%; }
  .barra .boton--luz { color: var(--tinta); border-color: var(--tinta); }

  .contraste { grid-template-columns: 1fr; }
  .contraste > div:first-child { border-right: 0; border-bottom: 1px solid rgb(14 36 56 / .12); }

  .urgencia__interior { flex-direction: column; align-items: stretch; }
  .urgencia .boton { width: 100%; }
}

@media (max-width: 640px) {
  .seccion { padding-block: calc(var(--seccion) * .8); }
  .barra__logo img { width: 148px; }
  .acciones { flex-direction: column; align-items: stretch; width: 100%; max-width: 22rem; margin-inline: auto; }
  .acciones .boton { width: 100%; }
  .pareja { grid-template-columns: 1fr; }
  .pie__interior { grid-template-columns: 1fr; gap: var(--e-4); }

  .fichas { grid-template-columns: 1fr; }

  .hero__confianza { gap: var(--e-1) var(--e-4); }
  .hero__pie { display: none; }
  .caja-form { padding: var(--e-4) var(--e-3); }

  /* Solo los SUBTÍTULOS bajan en móvil (los títulos h1/h2/h3 no se tocan
     aquí): son los que llenaban la pantalla entera de letra grande sin decir
     más que el titular de encima. */
  .manifiesto__afirma,
  .giro__clave,
  .contraste p,
  .cita__texto { font-size: 1.5rem; line-height: 1.3; }

  .fichas__texto,
  .lista-check li { font-size: 1.0625rem; }

  .entradilla { font-size: 1rem; }

  .cta-movil {
    display: flex;
    gap: .6rem;
    position: fixed;
    left: 0; right: 0; bottom: 0;
    z-index: 40;
    padding: .6rem .75rem calc(.6rem + env(safe-area-inset-bottom));
    background: var(--marino-hondo);
    border-top: 1px solid var(--linea-noche);
    transition: transform .25s ease, opacity .25s ease;
  }
  .cta-movil .boton { flex: 1; min-height: 48px; padding: .8rem .5rem; font-size: .625rem; letter-spacing: .16em; }
  .cta-movil .boton--linea { color: var(--claro); border-color: var(--linea-noche); }
  .whatsapp { bottom: 5.25rem; width: 46px; height: 46px; }
  .whatsapp svg { width: 24px; height: 24px; }

  body { padding-bottom: 4.25rem; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .revelar-listo .revelar { opacity: 1; transform: none; transition: none; }

  /* Sin el giro: los 4 pasos se ven todos, uno debajo de otro, en vez de
     quedarse parados en el paso 1 para siempre. */
  .rueda-envoltorio { height: auto; }
  .rueda { position: static; height: auto; overflow: visible; -webkit-mask-image: none; mask-image: none; }
  .rueda__pista { display: flex; flex-direction: column; gap: 2.5rem; transform: none !important; }
  .rueda__paso { height: auto; grid-template-columns: 1fr; gap: 1.25rem; opacity: 1 !important; transform: none !important; }
  .rueda__foto { height: 14rem; order: -1; }
}

@media print {
  .barra, .cta-movil, .whatsapp, .saltar { display: none; }
}
