/* =============================================================================
   rediseno.css — sistema CSS del rediseño de valeriabond.com
   ----------------------------------------------------------------------------
   Hoja autosuficiente: sustituye a style.css/brand.css/responsive.css en las
   plantillas nuevas. NO cargarla junto a las hojas viejas (pisa h1-h6, body…).

   La página declara su rama de color con una clase en <body>:
     <body class="rama-infancia"> · <body class="rama-adultos">
   Sin clase, rige la rama de marca (índigo #2F4858). La clase también funciona
   en cualquier contenedor, por si una sección puntual cambia de rama.

   Blindaje de modo claro: además del color-scheme de abajo, cada plantilla
   debe llevar <meta name="color-scheme" content="light"> en el <head>.
   ========================================================================== */


/* ----------------------------------------------------------------------------
   1 · FUENTES  (autoalojadas en /assets/fonts/)
   ------------------------------------------------------------------------- */

@font-face {
  font-family: 'Marcellus';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/marcellus-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+20AC, U+2122, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 200 600; /* variable: un solo fichero cubre todo el rango */
  font-display: swap;
  src: url('/assets/fonts/jost-variable-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+20AC, U+2122, U+FEFF, U+FFFD;
}

/* Respaldos con métricas ajustadas para que el swap no mueva el layout.
   Valores aproximados: si al cargar salta el texto, retocar size-adjust. */
@font-face {
  font-family: 'Jost Fallback';
  src: local('Arial'), local('Helvetica Neue'), local('Liberation Sans');
  size-adjust: 98%;
  ascent-override: 100%;
  descent-override: 27%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Marcellus Fallback';
  src: local('Georgia'), local('Times New Roman'), local('Liberation Serif');
  size-adjust: 103%;
  ascent-override: 93%;
  descent-override: 23%;
  line-gap-override: 0%;
}


/* ----------------------------------------------------------------------------
   2 · TOKENS
   ------------------------------------------------------------------------- */

:root {
  /* --- Ramas de color: profundo · base · medio · trazo ------------------- */
  --infancia-profundo: #1F3B3E;
  --infancia-base:     #2E5257;
  --infancia-medio:    #5C7B7E;
  --infancia-trazo:    #AFC4C4;

  --marca-profundo:    #22353F;
  --marca-base:        #2F4858;
  --marca-medio:       #5B7183;
  --marca-trazo:       #9DAFBC;

  --adultos-profundo:  #26334A;
  --adultos-base:      #34455F;
  --adultos-medio:     #606E88;
  --adultos-trazo:     #B4BDCC;

  /* Rama activa (marca por defecto; .rama-* la cambia entera) */
  --rama-profundo: var(--marca-profundo);
  --rama-base:     var(--marca-base);
  --rama-medio:    var(--marca-medio);
  --rama-trazo:    var(--marca-trazo);
  --rama-tinte:    #2F485814; /* base al ~8 %: fondos de tarjeta suave */
  --rama-velo:     #9DAFBC2E; /* trazo al ~18 %: velos de sección */

  /* --- Neutros ----------------------------------------------------------- */
  --tinta:  #3A4046;
  --texto:  #4A5158;
  --hueso:  #F4F2EE;
  --blanco: #FFFFFF;
  --filete:        #E3E8EC; /* filetes finos sobre claro */
  --borde-tarjeta: #DDE0E7;
  --borde-campo:   #C7CDD8;

  /* Cobre: un solo uso por pantalla. Los contextos oscuros
     (.banda-oscura, .cierre) lo cambian a la variante clara. */
  --cobre: #8F5F41;

  /* --- Tipografía -------------------------------------------------------- */
  --tipo-display: 'Marcellus', 'Marcellus Fallback', Georgia, serif;
  --tipo-texto:   'Jost', 'Jost Fallback', system-ui, sans-serif;

  /* Escala fluida. Suelos: rótulos 11,5 px, texto corrido 13 px. */
  --texto-h1:         clamp(2.375rem, 1.55rem + 3.5vw, 4.625rem);   /* 38 → 74 */
  --texto-h2:         clamp(1.75rem, 1.29rem + 2vw, 2.875rem);      /* 28 → 46 */
  --texto-h3:         clamp(1.25rem, 1.14rem + 0.5vw, 1.625rem);    /* 20 → 26 */
  --texto-entradilla: clamp(1.0625rem, 0.95rem + 0.55vw, 1.3125rem);/* 17 → 21 */
  --texto-cuerpo:     clamp(1rem, 0.95rem + 0.2vw, 1.0625rem);      /* 16 → 17 */
  --texto-menudo:     0.875rem;    /* 14 px */
  --texto-nota:       0.8125rem;   /* 13 px — suelo del texto corrido */
  --texto-rotulo:     0.71875rem;  /* 11,5 px — suelo de los rótulos */
  --texto-precio:     clamp(1.75rem, 1.4rem + 1.1vw, 2.375rem);     /* 28 → 38 */
  --texto-cifra:      clamp(4.5rem, 2.5rem + 8vw, 9.375rem);        /* 72 → 150 */

  --interletra-rotulo: 0.25em;  /* 2,9 px a 11,5 px */
  --interletra-boton:  0.17em;

  /* --- Rejilla y ritmo --------------------------------------------------- */
  --ancho-contenido: 1200px;
  --seccion-y: clamp(64px, 48px + 4vw, 100px);
  --seccion-x: clamp(24px, 8.4vw, 120px);

  /* --- Gesto de forma: esquina inferior izquierda ------------------------ */
  --curva-grande: 120px;
  --curva-media:  40px;
  --curva-chica:  24px;
}

.rama-infancia {
  --rama-profundo: var(--infancia-profundo);
  --rama-base:     var(--infancia-base);
  --rama-medio:    var(--infancia-medio);
  --rama-trazo:    var(--infancia-trazo);
  --rama-tinte:    #2E525714;
  --rama-velo:     #AFC4C42E;
}

.rama-marca {
  --rama-profundo: var(--marca-profundo);
  --rama-base:     var(--marca-base);
  --rama-medio:    var(--marca-medio);
  --rama-trazo:    var(--marca-trazo);
  --rama-tinte:    #2F485814;
  --rama-velo:     #9DAFBC2E;
}

.rama-adultos {
  --rama-profundo: var(--adultos-profundo);
  --rama-base:     var(--adultos-base);
  --rama-medio:    var(--adultos-medio);
  --rama-trazo:    var(--adultos-trazo);
  --rama-tinte:    #34455F14;
  --rama-velo:     #B4BDCC2E;
}


/* ----------------------------------------------------------------------------
   3 · RESET Y BASE
   ------------------------------------------------------------------------- */

*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  /* Blindaje: el sitio es claro siempre. La segunda declaración bloquea el
     Auto Dark Theme de Chrome donde se soporta; la primera es el respaldo. */
  color-scheme: light;
  color-scheme: only light;
  background-color: var(--blanco);
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  background-color: var(--blanco);
  color: var(--texto);
  font-family: var(--tipo-texto);
  font-size: var(--texto-cuerpo);
  font-weight: 400;
  line-height: 1.7;
}

h1, h2, h3, h4, h5, h6, p, ul, ol, dl, dd, figure, blockquote {
  margin: 0;
}

h1, h2, h3 {
  font-family: var(--tipo-display);
  font-weight: 400;
  color: var(--tinta);
}

h1 { font-size: var(--texto-h1); line-height: 1.04; letter-spacing: -0.019em; }
h2 { font-size: var(--texto-h2); line-height: 1.1;  letter-spacing: -0.011em; }
h3 { font-size: var(--texto-h3); line-height: 1.2;  letter-spacing: -0.015em; }

h4, h5, h6 {
  font-family: var(--tipo-texto);
  font-weight: 500;
  font-size: var(--texto-cuerpo);
  line-height: 1.4;
  color: var(--tinta);
}

/* Palabra realzada dentro de un titular (una por titular) */
.titular__realce { color: var(--rama-base); }

a {
  color: var(--rama-base);
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
}

a:hover { color: var(--rama-profundo); }

img, svg, video {
  display: block;
  max-width: 100%;
  height: auto;
}

input, button, textarea, select {
  font: inherit;
  color: inherit;
}

::selection {
  background-color: var(--rama-trazo);
  color: var(--tinta);
}

/* Foco de teclado visible en todo lo interactivo */
:focus-visible {
  outline: 2px solid var(--rama-base);
  outline-offset: 3px;
}

@media (prefers-reduced-motion: no-preference) {
  html { scroll-behavior: smooth; }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* Ritmo vertical genérico: separa hijos consecutivos sin margins ad hoc */
.flujo > * + * { margin-top: var(--flujo, 1.5rem); }

/* Prosa de artículo (blog, páginas largas) */
.prosa > * + * { margin-top: 1.25em; }
.prosa h2 { margin-top: 2em; }
.prosa h3 { margin-top: 1.6em; }
.prosa ul, .prosa ol { padding-left: 1.25em; }
.prosa li + li { margin-top: 0.5em; }
.prosa blockquote {
  border-left: 2px solid var(--rama-trazo);
  padding-left: 1.5em;
  color: var(--rama-medio);
  font-family: var(--tipo-display);
  font-size: var(--texto-h3);
  line-height: 1.4;
}


/* ----------------------------------------------------------------------------
   4 · UTILIDADES DE FORMA Y COLOR
   ------------------------------------------------------------------------- */

/* Esquina inferior izquierda redondeada, según peso del elemento.
   Solo en cajas cerradas, nunca en columnas separadas por un filete. */
.esquina-grande { border-radius: 0 0 0 var(--curva-grande); overflow: hidden; }
.esquina-media  { border-radius: 0 0 0 var(--curva-media);  overflow: hidden; }
.esquina-chica  { border-radius: 0 0 0 var(--curva-chica);  overflow: hidden; }

/* Retrato con arco superior */
.retrato {
  border-radius: 999px 999px 0 0;
  overflow: hidden;
}
.retrato > img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Lienzo de retrato (panel degradado tras la foto, como en la portada) */
.retrato--lienzo {
  background-image: linear-gradient(165deg, var(--rama-velo) 10%, var(--rama-trazo) 90%);
}

/* Acento cobre: un solo uso por pantalla */
.cobre { color: var(--cobre); }

.centrado { text-align: center; }

/* Solo para lectores de pantalla */
.visualmente-oculto {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}


/* ----------------------------------------------------------------------------
   5 · CABECERA DE SITIO  (barra de navegación)
   ------------------------------------------------------------------------- */

.cabecera-sitio {
  background-color: var(--blanco);
  border-bottom: 1px solid var(--filete);
  padding: 0 var(--seccion-x);
}

.cabecera-sitio__interior {
  max-width: var(--ancho-contenido);
  margin: 0 auto;
  display: flex;
  align-items: center;
  gap: 42px;
  min-height: 82px;
  flex-wrap: wrap;
}

.cabecera-sitio__logo {
  display: block;
  flex-shrink: 0;
  padding: 8px 0;
}
.cabecera-sitio__logo img { height: 64px; width: auto; }

.cabecera-sitio__nav {
  display: flex;
  align-items: center;
  gap: clamp(20px, 3vw, 42px);
  margin-left: auto;
  flex-wrap: wrap;
}

.cabecera-sitio__enlace {
  font-size: var(--texto-menudo);
  color: var(--tinta);
  text-decoration: none;
  transition: color 0.2s;
}
.cabecera-sitio__enlace:hover,
.cabecera-sitio__enlace[aria-current='page'] {
  color: var(--rama-base);
}


/* ----------------------------------------------------------------------------
   6 · SECCIÓN Y CABECERA DE PÁGINA
   ------------------------------------------------------------------------- */

.seccion {
  padding: var(--seccion-y) var(--seccion-x);
  background-color: var(--blanco);
}

/* Centra y limita el contenido a 1200 px dentro de la sección */
.contenido {
  max-width: var(--ancho-contenido);
  margin: 0 auto;
}

/* Fondos de sección: variaciones suaves para alternar bandas */
.seccion--hueso {
  background-color: var(--hueso);
  background-image: linear-gradient(180deg, var(--blanco) 0%, var(--hueso) 100%);
}
.seccion--velada {
  background-color: var(--hueso);
  background-image: linear-gradient(160deg, var(--rama-velo) 0%, rgba(255, 255, 255, 0) 65%);
}

/* Cabecera de sección: titular a la izquierda, entradilla apoyada al pie */
.seccion__cabecera {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: 32px 80px;
  align-items: end;
  margin-bottom: clamp(40px, 24px + 2.5vw, 64px);
}

.seccion__entradilla {
  font-size: var(--texto-cuerpo);
  line-height: 1.6;
  max-width: 32em;
}

/* Cabecera de página (hero de interior): rótulo, h1, entradilla y CTA */
.cabecera-pagina {
  padding: var(--seccion-y) var(--seccion-x) calc(var(--seccion-y) * 0.9);
  background-color: var(--blanco);
  background-image: linear-gradient(168deg, var(--blanco) 15%, var(--rama-velo) 85%);
  overflow: hidden; /* por si lleva decoración absoluta detrás */
  position: relative;
}

.cabecera-pagina h1 { max-width: 14em; }

.cabecera-pagina__entradilla {
  margin-top: clamp(18px, 2vw, 28px);
  font-size: var(--texto-entradilla);
  line-height: 1.6;
  max-width: 30em;
}

.cabecera-pagina__cta {
  margin-top: clamp(28px, 3vw, 38px);
  display: flex;
  align-items: center;
  gap: 26px;
  flex-wrap: wrap;
}

/* Nota junto al botón («o llama al…») */
.cabecera-pagina__nota {
  font-size: var(--texto-menudo);
  color: var(--rama-medio);
}


/* ----------------------------------------------------------------------------
   7 · RÓTULO CON FILETE
   ------------------------------------------------------------------------- */

.rotulo {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: clamp(18px, 2vw, 26px);
  font-size: var(--texto-rotulo);
  font-weight: 500;
  letter-spacing: var(--interletra-rotulo);
  text-transform: uppercase;
  color: var(--rama-medio);
  line-height: 1.6;
}

.rotulo::before {
  content: '';
  flex-shrink: 0;
  width: 34px;
  height: 1px;
  background-color: var(--rama-base);
}

/* Rótulo centrado (bandas oscuras centradas, cierres) */
.rotulo--centrado { justify-content: center; }


/* ----------------------------------------------------------------------------
   8 · BOTONES
   ------------------------------------------------------------------------- */

.boton {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 15px 30px;
  background-color: var(--rama-base);
  border: 1px solid var(--rama-base);
  color: var(--blanco);
  font-family: var(--tipo-texto);
  font-size: var(--texto-nota);
  font-weight: 500;
  letter-spacing: var(--interletra-boton);
  text-transform: uppercase;
  text-decoration: none;
  line-height: 1.5;
  cursor: pointer;
  transition: background-color 0.2s, border-color 0.2s, color 0.2s;
}

.boton:hover {
  background-color: var(--rama-profundo);
  border-color: var(--rama-profundo);
  color: var(--blanco);
}

.boton--contorno {
  background-color: transparent;
  color: var(--rama-base);
}
.boton--contorno:hover {
  background-color: var(--rama-base);
  color: var(--blanco);
}


/* ----------------------------------------------------------------------------
   9 · BANDA OSCURA CON DEGRADADO
   ------------------------------------------------------------------------- */

.banda-oscura {
  --cobre: #C79A76; /* variante de cobre sobre fondo oscuro */
  padding: calc(var(--seccion-y) * 0.95) var(--seccion-x);
  background-color: var(--rama-base);
  /* profundo → base con un aclarado suave hacia la esquina superior derecha */
  background-image:
    linear-gradient(-129deg, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.06) 78%),
    linear-gradient(-129deg, var(--rama-profundo) 25%, var(--rama-base) 62%);
  color: var(--rama-trazo);
}

.banda-oscura h2,
.banda-oscura h3 { color: var(--blanco); }

.banda-oscura .rotulo { color: var(--rama-trazo); }
.banda-oscura .rotulo::before { background-color: var(--cobre); }

.banda-oscura--centrada {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
}

/* Dato grande: cifra en cobre + unidad en blanco, apoyadas por la base */
.banda-oscura__dato {
  display: flex;
  align-items: baseline;
  gap: 18px;
  flex-wrap: wrap;
}

.banda-oscura__cifra {
  font-family: var(--tipo-display);
  font-size: var(--texto-cifra);
  line-height: 0.85;
  letter-spacing: -0.027em;
  color: var(--cobre);
}

.banda-oscura__unidad {
  font-family: var(--tipo-display);
  font-size: clamp(2rem, 1.4rem + 2.6vw, 3.875rem); /* 32 → 62 */
  line-height: 1;
  letter-spacing: -0.016em;
  color: var(--blanco);
}

.banda-oscura__detalle {
  margin-top: clamp(20px, 2.5vw, 32px);
  font-size: var(--texto-entradilla);
  line-height: 1.65;
  color: var(--rama-trazo);
  max-width: 38em;
}

.banda-oscura__nota {
  margin-top: clamp(16px, 2vw, 26px);
  font-size: var(--texto-menudo);
  color: var(--rama-trazo);
}

/* Interactivos sobre fondo oscuro */
.banda-oscura a { color: var(--blanco); }
.banda-oscura :focus-visible { outline-color: var(--blanco); }
.banda-oscura .boton--contorno {
  border-color: var(--rama-trazo);
  color: var(--blanco);
}
.banda-oscura .boton--contorno:hover {
  background-color: var(--blanco);
  border-color: var(--blanco);
  color: var(--rama-profundo);
}


/* ----------------------------------------------------------------------------
   10 · TARJETAS
   ------------------------------------------------------------------------- */

.tarjeta {
  background-color: var(--blanco);
  border: 1px solid var(--borde-tarjeta);
  border-radius: 0 0 0 var(--curva-media);
  padding: clamp(24px, 20px + 1.2vw, 36px) clamp(20px, 16px + 1.3vw, 34px);
  display: flex;
  flex-direction: column;
}

/* Tarjeta tintada con la rama, sin borde (pasos de proceso, destacados) */
.tarjeta--suave {
  border: 0;
  background-image: linear-gradient(0deg, var(--rama-tinte), var(--rama-tinte));
}

/* Tarjeta invertida (una por rejilla como mucho) */
.tarjeta--oscura {
  background-color: var(--rama-base);
  border-color: var(--rama-base);
  color: var(--rama-trazo);
}
.tarjeta--oscura .tarjeta__titulo,
.tarjeta--oscura h3 { color: var(--blanco); }

.tarjeta__kicker {
  font-size: var(--texto-rotulo);
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--rama-medio);
  margin-bottom: 14px;
}

.tarjeta__numero {
  font-family: var(--tipo-display);
  font-size: 1.625rem;
  line-height: 1;
  color: var(--rama-medio);
  margin-bottom: 14px;
}

.tarjeta__titulo {
  font-size: var(--texto-h3);
  margin-bottom: 14px;
}

/* Numeral y título en la misma línea (pasos «01 Valoración») */
.tarjeta__encabezado {
  display: flex;
  align-items: baseline;
  gap: 16px;
  margin-bottom: 16px;
}
.tarjeta__encabezado .tarjeta__numero,
.tarjeta__encabezado .tarjeta__titulo { margin-bottom: 0; }

.tarjeta__texto {
  font-size: 0.9375rem; /* 15 px */
  line-height: 1.65;
}

/* Tarjeta entera enlazada */
a.tarjeta {
  text-decoration: none;
  color: inherit;
  transition: border-color 0.2s, transform 0.2s, box-shadow 0.2s;
}
a.tarjeta:hover {
  border-color: var(--rama-trazo);
  transform: translateY(-3px);
  box-shadow: 0 10px 24px rgba(34, 53, 63, 0.08);
}
a.tarjeta:hover .tarjeta__titulo { color: var(--rama-base); }


/* ----------------------------------------------------------------------------
   11 · REJILLAS
   ------------------------------------------------------------------------- */

.rejilla {
  display: grid;
  gap: 30px;
}

.rejilla--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.rejilla--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.rejilla--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; }


/* ----------------------------------------------------------------------------
   12 · LISTA DE FILAS CON FILETE  (índices de servicios, áreas…)
   ------------------------------------------------------------------------- */

.lista-filas__cabecera {
  display: flex;
  align-items: baseline;
  gap: 20px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--rama-base);
}

.lista-filas__titulo {
  font-family: var(--tipo-display);
  font-weight: 400;
  font-size: var(--texto-h3);
  color: var(--tinta);
}

/* Rango de numeración («01 — 06»), pegado a la derecha */
.lista-filas__rango {
  margin-left: auto;
  font-size: var(--texto-rotulo);
  letter-spacing: 0.2em;
  color: var(--rama-medio);
}

.lista-filas__fila {
  display: flex;
  align-items: center;
  gap: clamp(14px, 2vw, 26px);
  padding: 17px 4px;
  border-bottom: 1px solid var(--filete);
  text-decoration: none;
  color: inherit;
  transition: background-color 0.2s;
}

a.lista-filas__fila:hover { background-color: var(--rama-tinte); }
a.lista-filas__fila:hover .lista-filas__nombre { color: var(--rama-base); }

.lista-filas__numero {
  font-size: var(--texto-rotulo);
  letter-spacing: 0.1em;
  color: var(--rama-medio);
  flex-shrink: 0;
}

.lista-filas__nombre {
  font-size: var(--texto-cuerpo);
  color: var(--tinta);
  transition: color 0.2s;
}

.lista-filas__flecha {
  margin-left: auto;
  color: var(--rama-medio);
  font-size: var(--texto-menudo);
}


/* ----------------------------------------------------------------------------
   13 · TARIFAS  (tarjetas de precio y tabla)
   ------------------------------------------------------------------------- */

.tarjeta-tarifa__precio {
  font-family: var(--tipo-display);
  font-size: var(--texto-precio);
  line-height: 1;
  letter-spacing: -0.026em;
  color: var(--rama-base);
}

.tarjeta-tarifa__unidad {
  margin-top: 6px;
  font-size: var(--texto-nota);
  letter-spacing: 0.02em;
  color: var(--rama-medio);
}

.tarjeta-tarifa__lista {
  list-style: none;
  padding: 18px 0 0;
  margin-top: 20px;
  border-top: 1px solid var(--filete);
  font-size: var(--texto-menudo);
  line-height: 1.55;
}
.tarjeta-tarifa__lista li + li { margin-top: 10px; }

.tarjeta-tarifa__bono {
  margin-top: auto; /* la tarjeta es flex column: el bono cae al pie */
  padding-top: 18px;
  font-size: var(--texto-nota);
  font-weight: 500;
  color: var(--rama-base);
}

/* Variante invertida de la tarifa destacada */
.tarjeta--oscura .tarjeta-tarifa__precio { color: var(--blanco); }
.tarjeta--oscura .tarjeta-tarifa__unidad,
.tarjeta--oscura .tarjeta-tarifa__bono { color: var(--rama-trazo); }
.tarjeta--oscura .tarjeta-tarifa__lista { border-top-color: rgba(255, 255, 255, 0.22); }

/* Tabla de tarifas clásica (páginas con muchas filas) */
.tabla-envoltorio { overflow-x: auto; }

.tabla-tarifas {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--texto-menudo);
}

.tabla-tarifas caption {
  text-align: left;
  font-size: var(--texto-rotulo);
  font-weight: 500;
  letter-spacing: var(--interletra-rotulo);
  text-transform: uppercase;
  color: var(--rama-medio);
  padding-bottom: 14px;
}

.tabla-tarifas th {
  text-align: left;
  font-weight: 500;
  font-size: var(--texto-rotulo);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--rama-medio);
  padding: 12px 16px 12px 0;
  border-bottom: 1px solid var(--rama-base);
}

.tabla-tarifas td {
  padding: 15px 16px 15px 0;
  border-bottom: 1px solid var(--filete);
  vertical-align: top;
}

.tabla-tarifas td:first-child { color: var(--tinta); }

.tabla-tarifas .tabla-tarifas__precio {
  font-family: var(--tipo-display);
  font-size: 1.3125rem;
  color: var(--rama-base);
  white-space: nowrap;
}


/* ----------------------------------------------------------------------------
   14 · FORMULARIO DE LÍNEAS
   ------------------------------------------------------------------------- */

.formulario-lineas label {
  display: block;
  font-size: var(--texto-rotulo);
  font-weight: 500;
  letter-spacing: 0.19em;
  text-transform: uppercase;
  color: var(--rama-medio);
  margin-bottom: 8px;
}

.formulario-lineas input,
.formulario-lineas textarea,
.formulario-lineas select {
  display: block;
  width: 100%;
  border: 0;
  border-bottom: 1px solid var(--borde-campo);
  border-radius: 0; /* iOS redondea por defecto */
  background-color: transparent;
  padding: 10px 0 12px;
  font-size: 1rem;
  line-height: 1.6;
  color: var(--tinta);
  transition: border-color 0.2s, box-shadow 0.2s;
}

.formulario-lineas textarea {
  min-height: 104px;
  resize: vertical;
}

.formulario-lineas ::placeholder {
  color: var(--rama-medio);
  opacity: 1;
}

.formulario-lineas input:focus,
.formulario-lineas textarea:focus,
.formulario-lineas select:focus {
  outline: none; /* el subrayado doble hace de indicador de foco */
  border-bottom-color: var(--rama-base);
  box-shadow: 0 2px 0 var(--rama-base);
}

/* En modo de alto contraste de Windows los colores de autor se descartan, así
   que ese subrayado desaparece y el `outline: none` deja el campo sin ninguna
   marca de foco. Ahí se devuelve el contorno del sistema. */
@media (forced-colors: active) {
  .formulario-lineas input:focus,
  .formulario-lineas textarea:focus,
  .formulario-lineas select:focus {
    outline: 2px solid Highlight;
    outline-offset: 2px;
  }
}

.formulario-lineas__campo { margin-bottom: 26px; }

/* Dos campos en línea (nombre + teléfono) */
.formulario-lineas__fila {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 28px;
}

.formulario-lineas__acciones {
  display: flex;
  align-items: center;
  gap: 24px;
  margin-top: 30px;
  flex-wrap: wrap;
}

.formulario-lineas__aviso {
  font-size: var(--texto-menudo);
  color: var(--rama-medio);
  max-width: 22em;
}

/* Errores de validación */
.formulario-lineas .campo-error input,
.formulario-lineas .campo-error textarea {
  border-bottom-color: #A94436;
  box-shadow: 0 1px 0 #A94436;
}
.formulario-lineas__error {
  margin-top: 6px;
  font-size: var(--texto-nota);
  color: #A94436;
}

/* Bloque de datos de contacto junto al formulario (clave · valor) */
.datos-contacto { font-size: 0.9375rem; }
.datos-contacto__fila {
  display: flex;
  gap: 16px;
}
.datos-contacto__fila + .datos-contacto__fila { margin-top: 14px; }
.datos-contacto__clave {
  flex-shrink: 0;
  width: 88px;
  font-size: var(--texto-rotulo);
  font-weight: 500;
  letter-spacing: 0.13em;
  color: var(--rama-medio);
  line-height: 2;
}
.datos-contacto__valor { color: var(--tinta); }


/* ----------------------------------------------------------------------------
   15 · BLOQUE DE PREGUNTAS
   ------------------------------------------------------------------------- */

.preguntas { border-top: 1px solid var(--filete); }

.pregunta {
  display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
  gap: 12px 70px;
  padding: 28px 0;
  border-bottom: 1px solid var(--filete);
}

.pregunta__q {
  font-family: var(--tipo-display);
  font-weight: 400;
  font-size: var(--texto-h3);
  line-height: 1.25;
  letter-spacing: -0.017em;
  color: var(--tinta);
}

.pregunta__a {
  font-size: var(--texto-cuerpo);
  line-height: 1.7;
}


/* ----------------------------------------------------------------------------
   16 · CIERRE  (banda final de llamada a la acción)
   ------------------------------------------------------------------------- */

.cierre {
  --cobre: #C79A76;
  padding: var(--seccion-y) var(--seccion-x);
  background-color: var(--rama-profundo);
  background-image:
    linear-gradient(-125deg, rgba(255, 255, 255, 0) 55%, rgba(255, 255, 255, 0.05) 85%),
    linear-gradient(-125deg, var(--rama-profundo) 30%, var(--rama-base) 75%);
  color: var(--rama-trazo);
}

.cierre__interior {
  max-width: var(--ancho-contenido);
  margin: 0 auto;
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  gap: 80px;
  align-items: center;
}

.cierre__logotipo { max-width: 430px; width: 100%; }

.cierre__titulo {
  color: var(--blanco);
  font-size: var(--texto-h2);
}

.cierre__texto {
  margin-top: clamp(18px, 2vw, 26px);
  font-size: var(--texto-entradilla);
  line-height: 1.6;
  color: var(--rama-trazo);
  max-width: 32em;
}

.cierre__botones {
  margin-top: clamp(28px, 3.5vw, 42px);
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}

.cierre a { color: var(--blanco); }
.cierre :focus-visible { outline-color: var(--blanco); }

.cierre .boton--contorno {
  border-color: var(--rama-trazo);
  color: var(--blanco);
}
.cierre .boton--contorno:hover {
  background-color: var(--blanco);
  border-color: var(--blanco);
  color: var(--rama-profundo);
}


/* ----------------------------------------------------------------------------
   17 · PIE
   ------------------------------------------------------------------------- */

.pie {
  background-color: var(--blanco);
  border-top: 1px solid var(--filete);
  padding: var(--seccion-y) var(--seccion-x) 42px;
}

.pie__interior {
  max-width: var(--ancho-contenido);
  margin: 0 auto;
}

.pie__rejilla {
  display: grid;
  grid-template-columns: minmax(0, 2fr) repeat(3, minmax(0, 1fr));
  gap: 42px;
}

.pie__logo img { height: 96px; width: auto; }

.pie__descripcion {
  margin-top: 24px;
  font-size: var(--texto-menudo);
  line-height: 1.6;
  color: var(--rama-medio);
  max-width: 22em;
}

.pie__titulo {
  font-size: var(--texto-rotulo);
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--tinta);
  margin-bottom: 16px;
}

.pie__lista {
  list-style: none;
  padding: 0;
  font-size: var(--texto-menudo);
  line-height: 2.05;
}

.pie__lista a {
  color: var(--rama-medio);
  text-decoration: none;
  transition: color 0.2s;
}
.pie__lista a:hover { color: var(--rama-base); }

.pie__legal {
  margin-top: clamp(40px, 5vw, 68px);
  padding-top: 26px;
  border-top: 1px solid var(--filete);
  display: flex;
  justify-content: space-between;
  gap: 16px 26px;
  flex-wrap: wrap;
  font-size: 0.8125rem;
  color: var(--rama-medio);
}
.pie__legal a { color: inherit; }


/* ----------------------------------------------------------------------------
   18 · SEPARADORES DE SECCIÓN  (onda, arco, diagonal)
   ----------------------------------------------------------------------------
   Van como <div> suelto entre dos secciones. Dos variables de color:
     --separador-fondo  → color plano de la sección de ARRIBA
     --separador-color  → color plano de la sección de ABAJO (la forma)
   Ejemplo:
     <div class="separador separador--onda"
          style="--separador-fondo:#F4F2EE; --separador-color:#FFF"
          aria-hidden="true"></div>
   Las variantes --espejo invierten la curva (para pasar de claro a oscuro).
   Si el navegador no soporta mask, degrada a un corte recto del color de abajo.
   ------------------------------------------------------------------------- */

.separador {
  height: clamp(34px, 4vw, 58px);
  background-color: var(--separador-fondo, transparent);
  position: relative;
  overflow: hidden;
}

.separador::after {
  content: '';
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background-color: var(--separador-color, var(--blanco));
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-size: 100% 100%;
  mask-size: 100% 100%;
}

.separador--onda::after {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%2019.1C9.2%2017%2041.2%208.8%2054.9%206.3C68.5%203.7%2071.8%204.3%2081.9%203.8C92%203.2%20100.8%202.1%20115.2%203.1C129.6%204.2%20150.9%205.9%20168.3%2010.1C185.7%2014.2%20207.9%2024.6%20219.6%2027.9C231.3%2031.3%20233.1%2030.2%20238.5%2030.1C243.9%2030.1%20245.1%2029.7%20252%2027.6C258.9%2025.6%20268.9%2020.9%20279.9%2017.9C290.9%2014.9%20307.9%2011.3%20317.7%209.4C327.4%207.5%20331.1%206.8%20338.4%206.3C345.8%205.8%20355.2%206.2%20361.8%206.6C368.4%207%20373.2%207.3%20378%208.5C382.8%209.7%20385.8%208.7%20390.6%2013.8C395.4%2018.9%20403.1%2034.3%20406.8%2039.2C410.6%2044.2%20410.1%2043.5%20413.1%2043.3C416.1%2043.1%20418.6%2042.4%20424.8%2038C430.9%2033.5%20443.6%2020.9%20450%2016.6C456.4%2012.4%20459.8%2013.2%20463.5%2012.6C467.2%2011.9%20469.8%2012.1%20472.5%2012.6C475.2%2013%20474%2011.2%20479.7%2015.4C485.4%2019.6%20499.4%2033.6%20506.7%2037.7C514%2041.8%20515.4%2039.8%20523.8%2039.9C532.2%2040%20540.5%2040.1%20557.1%2038.3C573.8%2036.5%20597.5%2032.3%20623.7%2029.2C650%2026.1%20676.5%2022.4%20714.6%2019.8C752.7%2017.1%20810.5%2013.6%20852.3%2013.2C894.1%2012.8%20920.5%2014.2%20965.7%2017.6C1010.9%2021%201079.2%2030.1%201123.2%2033.6C1167.2%2037.1%201193.7%2038.2%201229.4%2038.6C1265.1%2039%201302.5%2038.2%201337.4%2036.1C1372.3%2034%201422.2%2027.7%201439.1%2026.1L1440%2058L0%2058Z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%2019.1C9.2%2017%2041.2%208.8%2054.9%206.3C68.5%203.7%2071.8%204.3%2081.9%203.8C92%203.2%20100.8%202.1%20115.2%203.1C129.6%204.2%20150.9%205.9%20168.3%2010.1C185.7%2014.2%20207.9%2024.6%20219.6%2027.9C231.3%2031.3%20233.1%2030.2%20238.5%2030.1C243.9%2030.1%20245.1%2029.7%20252%2027.6C258.9%2025.6%20268.9%2020.9%20279.9%2017.9C290.9%2014.9%20307.9%2011.3%20317.7%209.4C327.4%207.5%20331.1%206.8%20338.4%206.3C345.8%205.8%20355.2%206.2%20361.8%206.6C368.4%207%20373.2%207.3%20378%208.5C382.8%209.7%20385.8%208.7%20390.6%2013.8C395.4%2018.9%20403.1%2034.3%20406.8%2039.2C410.6%2044.2%20410.1%2043.5%20413.1%2043.3C416.1%2043.1%20418.6%2042.4%20424.8%2038C430.9%2033.5%20443.6%2020.9%20450%2016.6C456.4%2012.4%20459.8%2013.2%20463.5%2012.6C467.2%2011.9%20469.8%2012.1%20472.5%2012.6C475.2%2013%20474%2011.2%20479.7%2015.4C485.4%2019.6%20499.4%2033.6%20506.7%2037.7C514%2041.8%20515.4%2039.8%20523.8%2039.9C532.2%2040%20540.5%2040.1%20557.1%2038.3C573.8%2036.5%20597.5%2032.3%20623.7%2029.2C650%2026.1%20676.5%2022.4%20714.6%2019.8C752.7%2017.1%20810.5%2013.6%20852.3%2013.2C894.1%2012.8%20920.5%2014.2%20965.7%2017.6C1010.9%2021%201079.2%2030.1%201123.2%2033.6C1167.2%2037.1%201193.7%2038.2%201229.4%2038.6C1265.1%2039%201302.5%2038.2%201337.4%2036.1C1372.3%2034%201422.2%2027.7%201439.1%2026.1L1440%2058L0%2058Z'/%3E%3C/svg%3E");
}

.separador--onda-espejo::after {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%2034.9C9.2%2037%2041.2%2045.2%2054.9%2047.7C68.5%2050.3%2071.8%2049.7%2081.9%2050.2C92%2050.8%20100.8%2051.9%20115.2%2050.9C129.6%2049.8%20150.9%2048.1%20168.3%2044C185.7%2039.8%20207.9%2029.4%20219.6%2026.1C231.3%2022.7%20233.1%2023.8%20238.5%2023.9C243.9%2023.9%20245.1%2024.3%20252%2026.4C258.9%2028.4%20268.9%2033.1%20279.9%2036.1C290.9%2039.1%20307.9%2042.6%20317.7%2044.6C327.4%2046.5%20331.1%2047.2%20338.4%2047.7C345.8%2048.2%20355.2%2047.8%20361.8%2047.4C368.4%2047%20373.2%2046.7%20378%2045.5C382.8%2044.3%20385.8%2045.3%20390.6%2040.2C395.4%2035.1%20403.1%2019.7%20406.8%2014.8C410.6%209.8%20410.1%2010.5%20413.1%2010.7C416.1%2010.9%20418.6%2011.6%20424.8%2016C430.9%2020.5%20443.6%2033.1%20450%2037.4C456.4%2041.6%20459.8%2040.8%20463.5%2041.4C467.2%2042.1%20469.8%2041.9%20472.5%2041.4C475.2%2041%20474%2042.8%20479.7%2038.6C485.4%2034.4%20499.4%2020.4%20506.7%2016.3C514%2012.2%20515.4%2014.2%20523.8%2014.1C532.2%2014%20540.5%2013.9%20557.1%2015.7C573.8%2017.5%20597.5%2021.7%20623.7%2024.8C650%2027.9%20676.5%2031.6%20714.6%2034.2C752.7%2036.9%20810.5%2040.5%20852.3%2040.8C894.1%2041.2%20920.5%2039.8%20965.7%2036.4C1010.9%2033%201079.2%2023.9%201123.2%2020.4C1167.2%2016.9%201193.7%2015.8%201229.4%2015.4C1265.1%2015%201302.5%2015.8%201337.4%2017.9C1372.3%2020%201422.2%2026.3%201439.1%2027.9L1440%2058L0%2058Z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%2034.9C9.2%2037%2041.2%2045.2%2054.9%2047.7C68.5%2050.3%2071.8%2049.7%2081.9%2050.2C92%2050.8%20100.8%2051.9%20115.2%2050.9C129.6%2049.8%20150.9%2048.1%20168.3%2044C185.7%2039.8%20207.9%2029.4%20219.6%2026.1C231.3%2022.7%20233.1%2023.8%20238.5%2023.9C243.9%2023.9%20245.1%2024.3%20252%2026.4C258.9%2028.4%20268.9%2033.1%20279.9%2036.1C290.9%2039.1%20307.9%2042.6%20317.7%2044.6C327.4%2046.5%20331.1%2047.2%20338.4%2047.7C345.8%2048.2%20355.2%2047.8%20361.8%2047.4C368.4%2047%20373.2%2046.7%20378%2045.5C382.8%2044.3%20385.8%2045.3%20390.6%2040.2C395.4%2035.1%20403.1%2019.7%20406.8%2014.8C410.6%209.8%20410.1%2010.5%20413.1%2010.7C416.1%2010.9%20418.6%2011.6%20424.8%2016C430.9%2020.5%20443.6%2033.1%20450%2037.4C456.4%2041.6%20459.8%2040.8%20463.5%2041.4C467.2%2042.1%20469.8%2041.9%20472.5%2041.4C475.2%2041%20474%2042.8%20479.7%2038.6C485.4%2034.4%20499.4%2020.4%20506.7%2016.3C514%2012.2%20515.4%2014.2%20523.8%2014.1C532.2%2014%20540.5%2013.9%20557.1%2015.7C573.8%2017.5%20597.5%2021.7%20623.7%2024.8C650%2027.9%20676.5%2031.6%20714.6%2034.2C752.7%2036.9%20810.5%2040.5%20852.3%2040.8C894.1%2041.2%20920.5%2039.8%20965.7%2036.4C1010.9%2033%201079.2%2023.9%201123.2%2020.4C1167.2%2016.9%201193.7%2015.8%201229.4%2015.4C1265.1%2015%201302.5%2015.8%201337.4%2017.9C1372.3%2020%201422.2%2026.3%201439.1%2027.9L1440%2058L0%2058Z'/%3E%3C/svg%3E");
}

.separador--arco::after {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%2054C420%200%201020%200%201440%2054L1440%2058L0%2058Z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%2054C420%200%201020%200%201440%2054L1440%2058L0%2058Z'/%3E%3C/svg%3E");
}

.separador--arco-espejo::after {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%200C420%2054%201020%2054%201440%200L1440%2058L0%2058Z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%200C420%2054%201020%2054%201440%200L1440%2058L0%2058Z'/%3E%3C/svg%3E");
}

.separador--diagonal::after {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%2035L1440%200L1440%2058L0%2058Z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%2035L1440%200L1440%2058L0%2058Z'/%3E%3C/svg%3E");
}

.separador--diagonal-espejo::after {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%200L1440%2035L1440%2058L0%2058Z'/%3E%3C/svg%3E");
  mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201440%2058'%20preserveAspectRatio='none'%3E%3Cpath%20d='M0%200L1440%2035L1440%2058L0%2058Z'/%3E%3C/svg%3E");
}


/* ----------------------------------------------------------------------------
   19 · RESPONSIVE
   ----------------------------------------------------------------------------
   La tipografía y los paddings de sección ya son fluidos con clamp();
   aquí solo cambia lo estructural: columnas y excepciones.
   ------------------------------------------------------------------------- */

@media (max-width: 1024px) {
  .rejilla--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 30px; }

  .seccion__cabecera { gap: 32px 48px; }
  .cierre__interior { gap: 48px; }
  .pregunta { gap: 12px 40px; }

  .cierre__logotipo { max-width: 320px; }
}

@media (max-width: 768px) {
  .rejilla--2,
  .rejilla--3,
  .rejilla--4 { grid-template-columns: minmax(0, 1fr); }

  .seccion__cabecera,
  .pregunta,
  .formulario-lineas__fila,
  .cierre__interior { grid-template-columns: minmax(0, 1fr); }

  .cierre__interior { gap: 40px; }
  .cierre__logotipo { max-width: 240px; }

  .pie__rejilla { grid-template-columns: repeat(2, minmax(0, 1fr)); }

  /* La navegación se apila; el menú plegable, si llega, va en la plantilla */
  .cabecera-sitio__interior { padding: 14px 0; gap: 16px 28px; }

  .lista-filas__fila { flex-wrap: wrap; }

  /* La curva grande a ancho de móvil resulta desproporcionada */
  :root { --curva-grande: 72px; }
}

@media (max-width: 480px) {
  :root {
    --seccion-x: 24px;
    --curva-grande: 56px;
    --curva-media: 32px;
  }

  .pie__rejilla { grid-template-columns: minmax(0, 1fr); gap: 32px; }

  .formulario-lineas__acciones { align-items: flex-start; flex-direction: column; }
  .boton { width: 100%; }
  .cabecera-sitio .boton,
  .cierre .boton { width: auto; }
}

/* -------------------------------------------------------------------------
   Separadores: combinaciones listas
   El separador necesita saber de qué color viene y a cuál va. Con los valores
   por defecto (transparente sobre blanco) queda invisible, así que estas clases
   cubren los cortes que se dan de verdad en el sitio y evitan declarar las dos
   variables a mano en cada plantilla.
   ------------------------------------------------------------------------- */

.separador--claro-a-oscuro {
  --separador-fondo: var(--hueso);
  --separador-color: var(--rama-profundo);
}
.separador--oscuro-a-claro {
  --separador-fondo: var(--rama-base);
  --separador-color: var(--blanco);
}
.separador--blanco-a-hueso {
  --separador-fondo: var(--blanco);
  --separador-color: var(--hueso);
}
.separador--hueso-a-blanco {
  --separador-fondo: var(--hueso);
  --separador-color: var(--blanco);
}

/* Respuesta del formulario, la pinta form-rediseno.js tras enviar */
.formulario-lineas__respuesta {
  margin: 24px 0 0;
  padding: 16px 20px;
  border-left: 3px solid var(--rama-base);
  background: var(--rama-tinte, #F1F4F6);
  font-size: 1rem;
  line-height: 1.6;
  outline: none;
}
.formulario-lineas__respuesta[data-estado="error"] {
  border-left-color: #A94436;
  background: #FBF2F0;
}

/* =========================================================================
   MOVIMIENTO
   Reglas que me he impuesto, por orden de importancia:

   1. El contenido NUNCA se oculta esperando a que algo lo revele. Todo el
      texto está visible por defecto; la animación solo se activa dentro de
      @supports (animation-timeline: view()), así que si el navegador no la
      soporta no pasa nada: se ve igual, sin saltos y sin huecos en blanco.
      Esto es lo que evita que una animación cueste posiciones.
   2. Sin JavaScript. Nada de IntersectionObserver ni de librerías: son
      animaciones dirigidas por scroll, resueltas por el compositor.
   3. Solo `transform` y `opacity`, que no provocan reflow ni repintado.
   4. prefers-reduced-motion manda: quien lo pida no ve ni un movimiento.
   5. Poco recorrido y rápido. Esto es la web de una logopeda, no un portfolio:
      el movimiento acompaña la lectura, no la interrumpe.
   ========================================================================= */

@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {

    /* Entrada de bloque: sube 18 px y aparece.
       El rango termina en `entry`, no en `cover`: así el elemento está del todo
       opaco en cuanto ha acabado de entrar en la ventana. Con `cover` se queda
       a medio camino mientras no scrollees, y lo que asoma por el borde de
       abajo al cargar se ve descolorido sin que nadie lo haya pedido. */
    @keyframes entra {
      from { opacity: 0; transform: translateY(18px); }
      to   { opacity: 1; transform: none; }
    }

    .seccion__cabecera,
    .cabecera-pagina > *,
    .banda-oscura > .contenido > *,
    .lista-filas__fila,
    .pregunta,
    .cierre__texto {
      animation: entra linear both;
      animation-timeline: view();
      animation-range: entry 0% entry 60%;
    }

    /* Las tarjetas entran con un desfase pequeño entre columnas: da sensación
       de rejilla que se compone, sin que la última se haga esperar. */
    .rejilla > *,
    .tarjetas > * {
      animation: entra linear both;
      animation-timeline: view();
      animation-range: entry 0% entry 55%;
    }
    .rejilla > *:nth-child(2),
    .tarjetas > *:nth-child(2) { animation-range: entry 5% entry 62%; }
    .rejilla > *:nth-child(3),
    .tarjetas > *:nth-child(3) { animation-range: entry 10% entry 69%; }
    .rejilla > *:nth-child(4),
    .tarjetas > *:nth-child(4) { animation-range: entry 15% entry 76%; }

    /* La cifra de la banda oscura crece un pelo: es el dato que sostiene la
       sección y merece el único gesto con algo de amplitud del sitio. */
    @keyframes crece {
      from { opacity: 0; transform: scale(0.94); }
      to   { opacity: 1; transform: none; }
    }
    .banda-oscura__cifra {
      animation: crece linear both;
      animation-timeline: view();
      animation-range: entry 0% entry 70%;
    }

    /* Las ilustraciones y los retratos, un poco más lentos que el texto:
       el ojo llega antes a la palabra que al dibujo.
       La imagen de la cabecera queda FUERA a propósito: es la que marca el LCP
       y lleva fetchpriority="high". Animarle la opacidad es pedirle al
       navegador que pinte tarde justo lo que le hemos dicho que pinte antes. */
    .retrato img,
    .seccion figure img {
      animation: entra linear both;
      animation-timeline: view();
      animation-range: entry 0% entry 80%;
    }
  }

  /* Micro-interacciones. Estas sí van siempre: no dependen del scroll y no
     ocultan nada, solo responden al puntero y al teclado. */
  .tarjeta {
    transition: transform .35s ease, box-shadow .35s ease, border-color .35s ease;
  }
  .tarjeta:hover,
  .tarjeta:focus-within {
    transform: translateY(-4px);
    box-shadow: 0 14px 34px rgba(34, 53, 63, .10);
  }

  .boton { transition: transform .2s ease, background-color .25s ease, color .25s ease; }
  .boton:hover { transform: translateY(-2px); }
  .boton:active { transform: translateY(0); }

  /* El enlace de «ver el servicio» empuja su flecha al pasar por encima */
  .tarjeta__enlace,
  .lista-filas__flecha { transition: transform .25s ease; }
  .tarjeta:hover .lista-filas__flecha,
  .lista-filas__fila:hover .lista-filas__flecha { transform: translateX(4px); }

  /* Los enlaces de texto subrayan de dentro hacia fuera */
  .prosa a,
  .seccion p a {
    background-image: linear-gradient(currentColor, currentColor);
    background-size: 0% 1px;
    background-position: 0 100%;
    background-repeat: no-repeat;
    text-decoration: none;
    transition: background-size .3s ease;
  }
  .prosa a:hover,
  .seccion p a:hover,
  .prosa a:focus-visible,
  .seccion p a:focus-visible { background-size: 100% 1px; }
}


/* =========================================================================
   MÓVIL: CABECERA COMPACTA Y OBJETIVOS TÁCTILES
   Medido el 13-ago-2026 en producción con un viewport real, no con capturas.
   No hay menú plegable a propósito (serían seis enlaces detrás de un clic y
   JavaScript que ahora no hace falta), pero sin él la cabecera se comía 220 px
   a 360, o sea una cuarta parte de la pantalla antes del primer titular.
   ========================================================================= */

/* El objetivo táctil mínimo es 24x24 CSS px (WCAG 2.2, 2.5.8). Los enlaces
   dentro de un párrafo están exentos por la excepción de texto en línea; los
   de la navegación y el pie no lo están, y medían 19 px de alto. El padding
   los sube sin mover nada de sitio: el hueco entre ellos ya lo absorbe. */
.cabecera-sitio__enlace,
.pie__lista a,
.pie__legal a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 24px;
  /* también el ancho: «Voz», en el menú de categorías del blog, se quedaba en
     22 px por ser una palabra corta. */
  min-width: 24px;
  padding: 4px 0;
}
.pie__lista { line-height: 1.75; }

/* La casilla de la política se sube a 24 px en el <style> crítico de cada
   plantilla, no aquí: allí hay una regla más específica
   (`.formulario-lineas .formulario-lineas__casilla input`) que existe para
   deshacer el `width: 100%` del formulario de líneas, y cualquier regla que
   se ponga en esta hoja pierde contra ella. */
.formulario-lineas__casilla input[type='checkbox'],
.formulario-lineas__casilla label { cursor: pointer; }

/* Por debajo de 768 el logo y la navegación ya no caben en una sola línea, y
   ahí es donde la cabecera se desmadraba: 220 px a 360 y 192 a 481, o sea una
   pantalla entera de móvil consumida antes del primer titular.

   «Pedir cita» sube a la fila del logo. En el HTML va dentro del <nav>, que es
   donde tiene que estar, así que se coloca en absoluto en vez de sacarlo de
   ahí: se recupera la fila entera que ocupaba y la navegación baja de tres
   líneas a dos. El logo es más alto que el botón, así que no se pisan.

   Nada de menú plegable: son cinco enlaces, caben, y esconderlos costaría
   JavaScript y un clic de más para llegar a cualquier sección. */
@media (max-width: 899px) {
  .cabecera-sitio__interior {
    position: relative;
    gap: 10px 24px;
    min-height: 0;
    padding: 12px 0;
  }
  .cabecera-sitio__logo { padding: 0; }
  .cabecera-sitio__logo img { height: 52px; }
  .cabecera-sitio__nav { margin-left: 0; gap: 8px 16px; }
  .cabecera-sitio__nav .boton {
    position: absolute;
    top: 6px;
    right: 0;
    padding: 9px 18px;
    font-size: var(--texto-rotulo);
  }
  .pie__logo img { height: 68px; }
}

@media (max-width: 480px) {
  .cabecera-sitio__logo img { height: 44px; }
  .cabecera-sitio__nav { gap: 8px 16px; }
  .pie__logo img { height: 58px; }
}

/* La categoría del artículo es un enlace suelto dentro de su rótulo, así que
   funciona como una etiqueta pulsable y no como texto corrido: se le da alto
   suficiente para el pulgar. Medía 18 px. Lo mismo con el enlace al mapa de
   /contacto/, que se quedaba justo en el límite. */
.rotulo a {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
}
/* La clase va en el propio <a>, no en un contenedor: `.consulta__mapa a` no
   selecciona nada. */
a.consulta__mapa,
a.tarjeta-consulta__mapa { display: inline-flex; align-items: center; min-height: 28px; }

/* Las migas son navegación, no texto corrido: la excepción de enlace en línea
   no las cubre y medían 20 px. */
.migas a {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
}


/* =========================================================================
   CONTRASTE SOBRE FONDO OSCURO
   Medido el 13-ago-2026 con el color calculado de cada elemento y el fondo
   realmente pintado detrás, no leyendo la hoja. Salieron 26 combinaciones por
   debajo del mínimo, y la peor era grave: `.tarjeta__texto` dentro de una
   tarjeta oscura heredaba --texto (#4A5158) y quedaba en 1,19:1, o sea texto
   invisible en la tarjeta del teléfono de /contacto/.

   Se arregla en la raíz y no selector a selector: los contenedores oscuros
   redefinen los tokens que usa el texto secundario, y todo lo que hay dentro
   hereda el valor bueno. --rama-trazo se aclara solo lo justo para pasar de
   4,25:1 a 4,6:1, y el cobre sube de 3,4-3,8:1 a 4,6:1.
   ========================================================================= */

:root        { --sobre-oscuro: #A6B6C2; }  /* 4,61:1 sobre #2F4858 */
.rama-marca  { --sobre-oscuro: #A6B6C2; }
.rama-infancia { --sobre-oscuro: #AFC4C4; } /* 4,68:1 sobre #2E5257 */
.rama-adultos  { --sobre-oscuro: #B4BDCC; } /* 5,13:1 sobre #34455F */

.banda-oscura,
.cabecera-oscura,
.cierre,
.tarjeta--oscura,
.quien-soy__panel,
.mencion {
  --rama-trazo: var(--sobre-oscuro);
  --rama-medio: var(--sobre-oscuro);
  --cobre: #D8B9A0;               /* 4,6:1 o más sobre las tres ramas */
  --texto: var(--sobre-oscuro);   /* lo que herede el color de texto general */
  --tinta: var(--blanco);
}

/* El rótulo del centro de la tarjeta oscura llevaba el texto general heredado.
   Con --texto redefinido arriba ya no hace falta tocarlo uno a uno, pero se
   deja explícito porque es el que estaba ilegible. */
.tarjeta--oscura .tarjeta__texto,
.tarjeta--oscura p { color: var(--sobre-oscuro); }

/* Sobre hueso, el medio de la rama infantil se quedaba en 4,09:1: es la rama
   más clara de las tres y los rótulos y las etiquetas del formulario usan ese
   token. Se oscurece lo justo. */
.rama-infancia { --infancia-medio: #557275; }  /* 4,64:1 sobre #F4F2EE */

/* Dos restos sueltos, los dos sobre fondo claro: el número grande de los pasos
   (2,02:1, y al ser texto de 36 px le basta con 3:1) y el punto que separa
   autor y fecha en la firma del artículo (2,26:1). */
.paso__numero { color: var(--rama-medio); }
.articulo-firma__sep { color: var(--rama-medio); }
