/* ==========================================================================
   PROSA — texto largo escrito desde el editor
   ==========================================================================
   La tipografía del cuerpo de una entrada, sacada de noticias.css para poder
   usarla también en las páginas legales, que son exactamente lo mismo: títulos,
   párrafos y listas escritos en el editor de WordPress.

   Se llama .gt-prose y no .gt-post__content porque ya no es «el contenido de la
   entrada»: es CUALQUIER texto largo del sitio. Duplicar estas reglas para las
   cuatro páginas legales habría garantizado que dentro de un mes solo una de
   las dos copias estuviera al día.

   Se estiliza POR DESCENDENCIA, sin clases dentro del HTML: quien escribe desde
   el escritorio no tiene que saber nada del tema para que le quede bien.

   Ver assets/css/noticias.css para lo que sigue siendo propio de la entrada
   —cabecera, fecha, índice lateral, navegación— y page.php para las páginas.
   ========================================================================== */


/* --------------------------------------------------------------------------
   El contenido del editor
   --------------------------------------------------------------------------
   Se estiliza POR DESCENDENCIA, sin clases dentro del HTML de la entrada: quien
   escribe desde el escritorio no tiene que saber nada del tema para que le
   quede bien, y una entrada antigua se ve igual que una nueva.
   -------------------------------------------------------------------------- */

.gt-prose {
  font-family: var(--font-primary);
  font-size: 1rem;
  line-height: 1.75;
  color: var(--color-text);
}

/* --------------------------------------------------------------------------
   EL RITMO VERTICAL DEL ARTÍCULO
   --------------------------------------------------------------------------
   EL AIRE QUE HAY ENCIMA DE UN ELEMENTO DICE DE QUÉ DEPENDE. Por eso los saltos
   van en escalera y cada peldaño se distingue del anterior sin tener que medir:

       párrafo → párrafo         22px    mismo apartado, se sigue leyendo
       encima de un H4           28px
       encima de un H3           36px
       encima de un H2           46px    empieza un apartado nuevo
       debajo de un título    10-14px    el título va PEGADO a lo que abre

   La regla que lo ordena todo: DEBAJO DE UN TÍTULO HAY MUCHO MENOS AIRE QUE
   ENCIMA. Así se lee unido al bloque que abre y separado del que cierra, que es
   lo que marca dónde empieza cada apartado.

   Estaba al revés: encima de un H4 había 28px y entre dos párrafos 30, o sea
   que un apartado NUEVO quedaba más pegado que dos párrafos del MISMO apartado.

   Los 22px del párrafo son tres cuartos de línea. Un renglón entero en blanco
   —que es lo que salía con 1.75em— separa tanto que los párrafos dejan de
   leerse como un bloque seguido.

   Van en píxeles y no en em a propósito: el cuerpo solo crece de 16 a 17px
   entre móvil y escritorio, un 6%, y mantener dos escaleras por esa diferencia
   cuesta más de lo que aporta.

   --------------------------------------------------------------------------
   UN MARGEN NO ES EL BLANCO QUE SE VE, y por eso la escalera de arriba engaña.

   Cada caja de texto añade MEDIA INTERLÍNEA por arriba y otra por abajo, así
   que el blanco real entre dos bloques es:

       margen + media interlínea del de arriba + media interlínea del de abajo

   Y esa parte no declarada es muy distinta según quién esté a cada lado: un
   párrafo va a 1.8 de interlínea y aporta 6,8px por lado; un título va a 1.25 y
   aporta 2,5. Resultado: los márgenes de los títulos rinden MENOS de lo que
   dicen, y los de los párrafos, más.

   Medido en escritorio con la escalera declarada 22 / 28 / 36 / 46:

       párrafo → párrafo    22px declarados  →  35,6px de blanco
       encima de un H4      28px             →  37,1px      ¡+1,5!
       encima de un H3      36px             →  45,3px
       encima de un H2      46px             →  56,0px

   Un apartado nuevo con H4 abría con un píxel y medio más que un salto de
   párrafo: en la práctica, ninguna diferencia. La escalera existía en el código
   y no en la pantalla.

   El desajuste se notó al ensanchar la columna a 800px y abrir la interlínea a
   1.8: el párrafo ganó aire y los títulos no, así que el texto pasó a verse más
   suelto que los cortes que debían mandar sobre él.

   SE CORRIGE SOLO EN ESCRITORIO —abajo, en el bloque de ≥768—, que es donde
   están la medida larga y la interlínea abierta. En móvil la escalera de arriba
   ya funciona.
   -------------------------------------------------------------------------- */

/* El margen que traen los navegadores se quita con :where(), que NO SUMA
   ESPECIFICIDAD. Es la única forma de que no se coma la regla de debajo: antes
   el reseteo iba en `.gt-prose p { margin: 0 }`, y un selector de tipo
   pesa MÁS que el `*` de `> * + *`. Ganaba el cero, y los párrafos salían sin
   ninguna separación, leyéndose como uno solo. No estaba en el HTML, que era
   impecable; estaba aquí. */
.gt-prose :where(p, h2, h3, h4, ul, ol, figure, blockquote, table, pre) {
  margin: 0;
}

.gt-prose > * + * {
  margin-top: 22px;
}

/* El tema padre fija `p { font-size: 18px; line-height: 1.6 }` con un selector
   de tipo. Poner el tamaño en .gt-prose NO basta: eso solo se hereda, y
   la herencia siempre pierde contra una declaración hecha sobre el propio
   elemento, por poco peso que tenga su selector. El resultado era un cuerpo de
   texto de 18px fijos —sin bajar en móvil— y con las líneas más apretadas de lo
   previsto.

   Con `inherit` el párrafo vuelve a tomar lo del contenedor, que sí es el que
   marca la escala y sí cambia con el tamaño de pantalla. */
.gt-prose p {
  font-size: inherit;
  line-height: inherit;
  text-wrap: pretty;
}

/* Los encabezados llevan MÁS aire por arriba que por abajo: así se leen pegados
   al bloque que abren y separados del que cierran, que es lo que indica dónde
   empieza un apartado. */
.gt-prose h2,
.gt-prose h3,
.gt-prose h4 {
  font-weight: 700;
  line-height: 1.25;
  color: var(--color-primary);
  text-wrap: pretty;
}

/* Debajo del título: cuanto mayor es, un poco más de aire necesita para no
   aplastar la primera línea. Aun así, los tres están MUY por debajo de lo que
   llevan encima. */
.gt-prose > h2 + * { margin-top: 14px; }
.gt-prose > h3 + * { margin-top: 12px; }
.gt-prose > h4 + * { margin-top: 10px; }

/* Encima del título: la escalera. Cada peldaño es mayor que el anterior y
   todos lo son que los 22px de un salto de párrafo.

   Los peldaños CRECEN a medida que se sube —6, 8, 10—, no son saltos iguales:
   cuanto más arriba está el título, más tiene que notarse el corte.

   El H4 baja con los otros dos aunque no hiciera falta por sí mismo. Si se
   quedara en 32 con el H3 en 36, dos niveles distintos abrirían con cuatro
   píxeles de diferencia y se verían iguales: la escalera se aplasta por arriba
   en cuanto se recorta solo la parte alta. */
.gt-prose > * + h2 { margin-top: 46px; }
.gt-prose > * + h3 { margin-top: 36px; }
.gt-prose > * + h4 { margin-top: 28px; }

/* La escalera de tamaños, del cuerpo hacia arriba y sin empates:
       móvil       16 · 17 · 18 · 22
       escritorio  17 · 18 · 20 · 26
   El H4 estaba a 1rem, o sea EXACTAMENTE el tamaño del cuerpo en móvil y por
   debajo de él en escritorio: solo la negrita lo distinguía de un párrafo. */
.gt-prose h2 { font-size: 1.375rem; }
.gt-prose h3 { font-size: 1.125rem; }
.gt-prose h4 { font-size: 1.0625rem; }

.gt-prose a {
  color: var(--color-primary);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
}

.gt-prose a:hover,
.gt-prose a:focus-visible {
  color: var(--color-accent);
  color: color-mix(in srgb, var(--color-accent) 86%, #000);
}

.gt-prose ol {
  padding-left: 20px;
}

.gt-prose li + li {
  margin-top: 8px;
}

/* --------------------------------------------------------------------------
   Listas dentro de listas
   --------------------------------------------------------------------------
   Sin esto, el segundo nivel arranca en la misma vertical que el primero: lo
   único que lo separaba era el ancho de su propia viñeta, y un subapartado se
   leía como un punto más de la lista de arriba. La sangría es lo que dice que
   depende del punto anterior.

   El margen superior existe porque el segundo nivel cuelga del TEXTO de su
   punto padre, no de un hueco entre puntos: sin él queda pegado a la frase que
   lo introduce.
   -------------------------------------------------------------------------- */

.gt-prose li > ul,
.gt-prose li > ol {
  margin-top: 10px;
  padding-left: 22px;
}

/* Viñeta roja: el único sitio del texto corrido donde entra el acento, y como
   marca, no como letra. Se dibuja con un pseudoelemento porque el marcador
   nativo de la lista no admite color propio en todos los navegadores. */
.gt-prose ul {
  padding-left: 0;
  list-style: none;
}

.gt-prose ul li {
  position: relative;
  padding-left: 22px;
}

.gt-prose ul li::before {
  content: "";
  position: absolute;
  left: 2px;
  top: 0.65em;

  width: 7px;
  height: 7px;

  background-color: var(--color-accent);
  border-radius: 2px;
}

.gt-prose figure,
.gt-prose img {
  max-width: 100%;
  height: auto;
}

.gt-prose figure {
  margin: 32px 0;
}

.gt-prose img {
  display: block;
  border-radius: 10px;
}

.gt-prose figcaption {
  margin-top: 10px;

  font-size: 0.8125rem;
  line-height: 1.45;
  color: rgba(0, 0, 0, 0.55);
  text-wrap: pretty;
}

/* La cita no lleva comillas dibujadas ni cursiva: filo de acento y sangrado,
   que es el mismo recurso que marca el H1 del hero. */
/* --------------------------------------------------------------------------
   LA CITA
   --------------------------------------------------------------------------
   Era un filete rojo a la izquierda y el texto al mismo tamaño que el cuerpo: se
   distinguía de un párrafo solo por cuatro píxeles de color, y al recorrer el
   artículo con la vista pasaba desapercibida. Una cita en una noticia de empresa
   suele ser lo ÚNICO que dice alguien con nombre y apellidos, y es lo que se
   acaba entrecomillando en una nota de prensa: tiene que verse.

   Ahora es una PIEZA: fondo azul rebajadísimo, la barra de acento pegada al
   borde y la letra un peldaño por encima del cuerpo. Sigue el mismo lenguaje que
   los paneles de formulario y las tablas —filo suave y esquinas de 3px—, así que
   no introduce un recurso nuevo en la página.

   SIN COMILLAS DECORATIVAS. Es la tentación evidente y aquí sobra: estas citas ya
   traen las suyas escritas —«"Este hito refuerza…"»—, y una comilla gigante de
   adorno encima de otra comilla de verdad se lee como un error de maquetación.

   SIN CURSIVA, por lo mismo de siempre en este sitio: Poppins no trae itálica y
   el navegador la inventa inclinando las letras, que es lo que hace que un
   párrafo entero en cursiva se vea sucio. */

.gt-prose blockquote {
  margin: 32px 0;
  padding: 20px 22px;

  background-color: #f5f8fa;
  background-color: color-mix(in srgb, var(--color-primary) 4%, transparent);
  border-left: 3px solid var(--color-accent);
  border-radius: 0 3px 3px 0;

  font-size: 1.0625rem;
  line-height: 1.55;
  color: var(--color-primary);
}

.gt-prose blockquote p { margin: 0; }
.gt-prose blockquote p + p { margin-top: 12px; }

/* La atribución, cuando el editor la escribe como tal. Hoy ninguna cita la usa
   —el nombre va dentro del propio párrafo—, pero el bloque de WordPress la ofrece
   y quien la use debe encontrarla ya vestida: más pequeña, en gris y sin cursiva,
   para que se lea como la firma de la cita y no como parte de lo dicho. */
.gt-prose blockquote cite {
  display: block;
  margin-top: 12px;

  font-size: 0.875rem;
  font-style: normal;
  line-height: 1.5;
  color: #5a5a5a;
}

.gt-prose blockquote cite::before {
  content: "— ";
}


/* --------------------------------------------------------------------------
   El salto al pulsar un enlace interno.
   --------------------------------------------------------------------------
   scroll-margin-top deja aire por encima del apartado al que se salta: sin él
   el título aterriza pegado al borde superior de la ventana —o debajo de la
   cabecera del sitio— y parece que el enlace ha fallado.
   -------------------------------------------------------------------------- */

.gt-prose h2 {
  scroll-margin-top: 90px;
}


@media (min-width: 768px) {

  /* MÁS INTERLINEADO QUE EN MÓVIL, porque el renglón es mucho más largo: 800px
     de medida son unas 88 letras, y lo que evita perder la línea al saltar no es
     el tamaño de la letra sino el aire entre renglones. Es la contrapartida del
     ancho, no un capricho: si algún día se estrecha la columna, esto vuelve a
     1.75 y la escalera de abajo, a la de móvil. */
  .gt-prose     { font-size: 1.0625rem; line-height: 1.8; }
  .gt-prose h2  { font-size: 1.625rem; }
  .gt-prose h3  { font-size: 1.25rem; }
  .gt-prose h4  { font-size: 1.125rem; }
  /* La cita se queda SIEMPRE un peldaño por encima del cuerpo. Estaba fija en
     1.0625rem: un punto por encima en móvil y exactamente igual que el texto
     corrido en escritorio, donde dejaba de leerse como cita. */
  .gt-prose blockquote {
    padding: 26px 28px;
    font-size: 1.125rem;
  }


  /* LA ESCALERA, RECALCULADA EN BLANCO REAL. Ver la explicación de arriba: los
     números de la izquierda son márgenes y los de la derecha, lo que se ve.

         párrafo → párrafo    22px  →  35,6px    (sin tocar)
         encima de un H4      36px  →  45,1px
         encima de un H3      46px  →  55,3px
         encima de un H2      58px  →  68,1px

     Los peldaños vuelven a crecer al subir —+9,5 / +10,2 / +12,8— y ninguno se
     confunde ya con un salto de párrafo. */
  /* Debajo del título NO se toca casi: ahí el problema es el contrario y ya
     estaba resuelto —24,1px de blanco frente a los 35,6 de un salto de párrafo,
     o sea que el título sigue leyéndose pegado a lo que abre—. El H2 sube dos
     píxeles solo porque su letra es la mayor y la primera línea le quedaba algo
     justa a esta medida. */
  .gt-prose > h2 + * { margin-top: 16px; }

  /* EL ORDEN DE ESTAS DOS REGLAS IMPORTA, y no se ve. `> h2 + *` y `> * + h3`
     pesan lo mismo, así que cuando un H3 sigue a un H2 las dos compiten y gana la
     última escrita. Va después la de ENCIMA —igual que en la escalera base de más
     arriba— para que dos títulos seguidos se separen como títulos y no como el
     texto que cuelga de uno. Al escribirlas al revés, un H3 detrás de un H2 se
     pegaba a él con 16px y parecía un subtítulo suyo. */
  .gt-prose > * + h2 { margin-top: 58px; }
  .gt-prose > * + h3 { margin-top: 46px; }
  .gt-prose > * + h4 { margin-top: 36px; }

}



/* ==========================================================================
   LA PÁGINA DE TEXTO LARGO: dos columnas e índice
   ==========================================================================
   Estaba en noticias.css con nombre de entrada —.gt-post__layout, __aside,
   __article—, pero no tiene nada de entrada: es la maqueta de cualquier texto
   largo con apartados, y la usan igual una noticia y un aviso legal. Se
   renombró a .gt-longform al traerla aquí.
   ========================================================================== */


/* El ancho de lectura, declarado UNA vez para las dos piezas que lo comparten:
   el texto y la imagen de entrada. Si se escribiera dos veces, el día que se
   cambie una la foto dejaría de medir lo que mide el texto y no habría manera
   de saber por qué.

   800px POR PETICIÓN EXPRESA, y en píxeles y no en `ch` para que sea el número
   que se pidió y no uno que dependa de la fuente. Estaba en 72ch —723px—.

   LO QUE ESTO CUESTA, dicho aquí para que no se pierda: a 17px caben unas 88
   letras por renglón, por encima de las 80 que marca la referencia de
   accesibilidad (WCAG 1.4.8) y de las 66 que se consideran óptimas. Cuanto más
   largo es el renglón, más fácil es que el ojo se pierda al saltar de línea.
   Se compensa abriendo el interlineado ahí abajo, que es lo que de verdad ayuda
   a encontrar el renglón siguiente en una medida larga. */
.gt-longform__main,
.gt-longform__lead {
  max-width: 800px;
}


/* --------------------------------------------------------------------------
   Reparto de la entrada: texto e índice
   --------------------------------------------------------------------------
   La columna de lectura NO se ensancha para llenar el hueco. A 72ch ya caben
   unos 80 caracteres por línea —el `ch` mide el cero, que es más ancho que la
   letra media—, y ese es el techo recomendado: por encima, el ojo pierde el
   renglón al saltar de línea. Lo que se hace con el espacio sobrante es
   ocuparlo con algo útil, no estirar el texto.

   space-between empuja el índice contra el margen derecho, de modo que el
   sobrante se convierte en aire entre las dos columnas y no en un hueco
   colgando al final.
   -------------------------------------------------------------------------- */

/* minmax(0, 1fr) y no 1fr a secas, y min-width: 0 en la columna: SIN ESTO UNA
   TABLA ANCHA ESTIRA LA COLUMNA. Una casilla de rejilla mide por defecto al
   menos lo que su contenido, así que la tabla de cookies —620px de mínimo—
   ensanchaba la página entera en un teléfono. Y como el sitio recorta el
   desplazamiento lateral, el texto no se desplazaba: se quedaba cortado.

   Con esto, la casilla puede encoger y es la tabla la que se desliza dentro de
   su propia caja, que es lo que se pretendía. */
.gt-longform {
  display: grid;
  grid-template-columns: minmax(0, 1fr);

  /* Dos huecos distintos: entre columnas hace falta aire para que el índice no
     parezca un margen del texto; entre filas —foto, índice, artículo— basta con
     el salto normal entre bloques. */
  column-gap: 32px;
  row-gap: 28px;
}

.gt-longform__main {
  min-width: 0;
}

/* Hasta escritorio el índice va arriba, que es donde sirve: en un teléfono
   interesa saber de qué va el texto ANTES de empezarlo. */
.gt-longform__aside {
  min-width: 0;
}


/* --------------------------------------------------------------------------
   .gt-toc — índice del artículo
   --------------------------------------------------------------------------
   Los anclajes se generan en PHP, no con JavaScript: así los enlaces funcionan
   desde el primer instante y un enlace directo a una sección lleva a su sitio
   aunque el script no llegue a cargarse nunca.
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   SIN CAJA. Un raíl vertical con un punto por apartado.
   --------------------------------------------------------------------------
   La versión anterior era un recuadro gris con filo rojo, y ese lenguaje ya
   está muy repetido en el sitio: filo de acento lo llevan el H1 del hero, las
   citas del texto y los beneficios de la certificación; y recuadro con fondo,
   las tarjetas de noticia, de servicio y de peligro.

   El raíl no es decoración: dice que los apartados van EN ORDEN y cuántos
   quedan, que es exactamente para lo que se mira un índice. Y al no tener
   fondo deja de parecer un accesorio pegado al margen y se lee como parte de
   la página.

   La línea se dibuja con el borde del <ol> y los puntos se montan encima con
   el fondo de la página, de modo que el raíl parece pasar POR DETRÁS de ellos
   sin necesidad de una segunda capa.
   -------------------------------------------------------------------------- */

.gt-toc__title {
  margin: 0 0 16px;

  font-family: var(--font-primary);
  font-size: 0.75rem;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: 0.12em;
  text-transform: uppercase;

  /* Azul y no rojo: el rótulo en versalitas rojas ya lo usan las fichas
     técnicas, la del certificado y la navegación entre entradas. */
  color: var(--color-primary);
}

.gt-toc__list {
  margin: 0;
  padding: 0 0 0 20px;
  list-style: none;

  border-left: 2px solid rgba(0, 0, 0, 0.1);
}

.gt-toc__list li {
  position: relative;
}

.gt-toc__list li + li {
  margin-top: 16px;
}

/* El punto del raíl. Va con el fondo de la página y un anillo, no macizo: así
   la línea se ve interrumpida en cada parada, que es lo que hace que se lea
   como una secuencia y no como una lista con topos. */
.gt-toc__list li::before {
  content: "";
  position: absolute;
  left: -26px;
  top: 0.45em;

  width: 9px;
  height: 9px;

  background-color: var(--color-bg);
  border: 2px solid rgba(0, 0, 0, 0.25);
  border-radius: 50%;

  transition: border-color 0.2s ease, background-color 0.2s ease;
}

/* Al apuntar un apartado, su punto se enciende en rojo. El acento marca, no
   escribe: el texto del enlace nunca se pinta de rojo sobre blanco. */
.gt-toc__list li:hover::before,
.gt-toc__list li:focus-within::before {
  background-color: var(--color-accent);
  border-color: var(--color-accent);
}

.gt-toc__list a {
  font-family: var(--font-primary);
  font-size: 0.875rem;
  font-weight: 500;
  line-height: 1.45;
  color: var(--color-primary);
  text-decoration: none;
  text-wrap: pretty;

  transition: color 0.2s ease;
}

.gt-toc__list a:hover,
.gt-toc__list a:focus-visible {
  color: var(--color-accent);
  color: color-mix(in srgb, var(--color-accent) 86%, #000);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.gt-toc__list a:focus-visible {
  outline: 3px solid var(--color-primary);
  outline-offset: 3px;
  border-radius: 2px;
}

/* Al quitar la caja, en móvil el índice y el artículo quedaban pegados sin
   nada que los separase. Un filo fino debajo hace de corte; en escritorio
   sobra, porque ya los separa el estar en columnas distintas. */
.gt-toc {
  padding-bottom: 24px;
  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}


@media (min-width: 1024px) {

  /* Dos columnas: el texto en su ancho de lectura y el índice a la derecha.
     minmax(0, 72ch) y no 72ch a secas, para que una palabra larga o un bloque
     de código no puedan ensanchar la columna por encima del contenedor. */
  /* EL ANCHO DE LECTURA NO SE TOCA: 72ch son unos 80 caracteres por línea, el
     techo por encima del cual el ojo pierde el principio del renglón siguiente.
     Lo que sí se corrige es el AGUJERO que quedaba al lado: con el índice a
     280px y `space-between`, el sobrante del contenedor se metía todo entre las
     dos columnas —229px de blanco— y el índice parecía de otra página.

     Se arregla por los dos lados: el texto se lleva su ancho y el ÍNDICE SE COME
     LO QUE SOBRE, en vez de que el sobrante quede en medio o al final.

     LAS DOS COLUMNAS SE MIDEN DISTINTO, y es lo que hace que funcione:

       · el texto es `minmax(0, 800px)`: crece hasta su ancho y ahí se planta;
       · el índice es `minmax(260px, 1fr)`: parte de 260 y se queda con TODO lo
         que quede después.

     El orden en que la rejilla reparte el espacio hace el resto. Una columna con
     `fr` se sirve la última, así que el texto coge primero lo suyo y el índice
     recoge el resto: en una ventana ancha son 800 + 56 + 376 y no queda un solo
     píxel muerto; en una estrecha el que cede es el índice, no el texto, que es
     el orden correcto —quien lee necesita el renglón, no el sumario—.

     `justify-content: start` Y NO `space-between`: con space-between el hueco que
     sobra se mete ENTRE las dos columnas y abre un boquete en medio. Con `start`
     las dos arrancan pegadas al margen de siempre, que es la línea del titular
     del hero y la referencia de toda la página. */
  .gt-longform--toc {
    grid-template-columns: minmax(0, 800px) minmax(260px, 1fr);
    justify-content: start;
    column-gap: 56px;
    row-gap: 32px;
    align-items: start;
  }

  .gt-longform--toc .gt-longform__aside {
    grid-column: 2;
    grid-row: 1;

    /* Acompaña la lectura en lugar de perderse arriba. 24px de separación con
       el borde superior para que no quede pegado a la ventana. */
    position: sticky;
    top: 24px;
  }

  .gt-longform--toc .gt-longform__main {
    grid-column: 1;
    grid-row: 1;
  }

  /* CON IMAGEN DE ENTRADA HAY DOS FILAS, no una: la foto arriba y el texto
     debajo, las dos en la columna izquierda, y el índice al lado abarcando las
     dos. Sin esto el índice se quedaba a la altura del primer párrafo y dejaba
     a su izquierda un hueco blanco del tamaño de la foto: parecía descolgado.

     Los selectores exigen que la foto exista —`.gt-longform__lead ~`—, así que
     una entrada sin imagen destacada conserva el reparto de una sola fila. */
  .gt-longform--toc .gt-longform__lead {
    grid-column: 1;
    grid-row: 1;
  }

  .gt-longform--toc .gt-longform__lead ~ .gt-longform__main {
    grid-row: 2;
  }

  /* El índice acompaña TODO el artículo, no solo el trozo que hay al lado de la
     foto: por eso abarca las dos filas. Es lo que le permite seguir pegado
     arriba mientras se baja. */
  .gt-longform--toc .gt-longform__lead ~ .gt-longform__aside {
    grid-row: 1 / span 2;
  }

  .gt-toc {
    padding-bottom: 0;
    border-bottom: 0;
  }

  .gt-toc__list a { font-size: 0.9375rem; }}


@media (prefers-reduced-motion: reduce) {

  .gt-toc__list li::before,
  .gt-toc__list a {
    transition: none;
  }}


/* --------------------------------------------------------------------------
   Tablas
   --------------------------------------------------------------------------
   La primera del sitio dentro de un texto es la relación de cookies: cinco
   columnas que no caben en un ancho de lectura. Salía con el estilo por defecto
   del tema padre —rejilla de bordes en cada celda, letra negra, celdas
   apretadas— y partiendo palabras por la mitad.

   LA TABLA PUEDE SER MÁS ANCHA QUE EL TEXTO. Por debajo de 700px se desliza
   DENTRO de su propia caja en lugar de estrujar las columnas, y la página no se
   mueve en horizontal. Estrujarla es lo que convertía una fila en cinco
   renglones de dos palabras.

   Solo filetes horizontales, y no rejilla: lo que se recorre en una tabla es la
   fila, y las líneas verticales solo añaden ruido.
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   LAS FIGURAS: imágenes, tablas y cualquier bloque con marco
   --------------------------------------------------------------------------
   Debajo de una imagen aparecían casi 108px de blanco hasta el título siguiente,
   cuando la escalera del artículo dice 58. Eran TRES cosas sumándose, y ninguna
   se ve leyendo el marcado:

     · el padre declara `figure { display: inline-block }`. Un inline-block se
       apoya en la línea base del texto, así que deja debajo el hueco de los
       rabillos de las letras: unos 10px de nada que nadie ha pedido. Y, por ser
       inline-block, SUS MÁRGENES NO SE FUNDEN con los del vecino, que es lo que
       hace que se sumen en vez de solaparse;
     · el padre le da a la figura `margin: 32px 0` propios, una segunda fuente de
       ritmo compitiendo con la de aquí;
     · y a la imagen de dentro, `margin-bottom: .5rem`.

   En bloque y sin márgenes propios, la separación vuelve a decidirla la escalera
   del artículo, que es donde está escrita. */
.gt-prose figure {
  display: block;
  margin-block: 0;
}

/* Y OJO CON LO DE ARRIBA: `.gt-prose figure` pesa (0,1,1) y la escalera
   `.gt-prose > * + *` pesa (0,1,0). El cero que le quita a la figura el margen
   del padre le quitaba también el de la escalera, y una foto detrás de un
   párrafo salía PEGADA a él —0px— mientras detrás de un título llevaba sus 23.
   Se detectó el 2026-09-12 midiendo las cuatro noticias con foto o vídeo.

   Se le devuelve el peldaño con el mismo peso y detrás; los ajustes de
   `h2 + figure` de más abajo pesan (0,1,2) y siguen mandando. */
.gt-prose > * + figure {
  margin-top: 22px;
}

.gt-prose figure img {
  margin-bottom: 0;
}

/* --------------------------------------------------------------------------
   VÍDEOS INCRUSTADOS (el bloque «Insertar» de YouTube)
   --------------------------------------------------------------------------
   WordPress escribe el <iframe> a 500×281 fijos, así que en una columna de 800
   el vídeo se quedaba a la izquierda con 300px de blanco al lado, y en móvil
   ancho de columna pero con la altura de escritorio: se veía deformado.

   La caja reserva 16:9 y el iframe la llena. En BLOQUE, además: un iframe es
   inline y se apoya en la línea base, y eso dejaba 9px de hueco debajo, el
   mismo rabillo que dejaban las figuras antes de ponerlas en bloque. */
.gt-prose .wp-block-embed__wrapper {
  position: relative;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  border-radius: 10px;
}

/* Absoluto y no height:100%: entre la caja y el iframe WordPress mete un
   <p> —el wpautop de siempre— y un 100% de un párrafo de alto automático es
   nada. Pegado a las cuatro esquinas de la caja, el párrafo deja de contar. */
.gt-prose .wp-block-embed__wrapper iframe {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}

/* El pie de una figura sí va pegado a su imagen: es lo que la explica. */
.gt-prose figure figcaption {
  margin-top: 10px;

  font-size: 0.8125rem;
  line-height: 1.6;
  color: #5a5a5a;
}


/* --------------------------------------------------------------------------
   LA GALERÍA
   --------------------------------------------------------------------------
   Las cuatro fotos salían UNA DEBAJO DE OTRA a 261×174px: miniaturas en fila
   india dentro de una columna de 800, y el navegador descargando el recorte de
   300px. Se rehace con rejilla: dos columnas desde tablet y una en móvil —dos
   columnas en 358px dan 173px por foto, que para una obra no enseña nada—, con
   proporción 3:2 y recorte al centro para que las filas no bailen de altura.

   --------------------------------------------------------------------------
   POR QUÉ LOS SELECTORES SON ASÍ DE FEOS: `:not(#individual-image)`

   WordPress escribe los suyos de esta forma:

     .wp-block-gallery.has-nested-images.columns-default
       figure.wp-block-image:not(#individual-image) { width: calc(33.33% - …) }

   Ese `:not(#individual-image)` NO filtra nada —no existe ningún elemento con
   ese id en la página—: está ahí para inflar la especificidad. Un :not() vale lo
   que vale su argumento, así que ese selector cuenta como si llevara un ID, y
   NINGUNA combinación de clases le gana. Se probaron cuatro por aquí y las fotos
   seguían en 125px.

   Copiarle el truco y añadir una clase resuelve el caso normal, pero NO todos:
   WordPress trae además reglas por número de fotos —dos fotos, `width: 50%`—
   escritas con la misma cuenta de clases, y ahí se empata y gana la última hoja
   cargada. Con dos fotos, cada una se quedaba en 192px dentro de una celda de
   392: la mitad de la mitad.

   Por eso el ancho, y solo el ancho, lleva !important: es una familia entera de
   reglas ajenas —una por cada recuento— y no una regla concreta a la que ganar.
   Lo demás se resuelve con especificidad.
   -------------------------------------------------------------------------- */

.gt-prose .wp-block-gallery {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 12px;
}

/* La foto ocupa su celda y toma de ella la proporción. La altura la fija
   `aspect-ratio` en el MARCO y no en la imagen: el marco es un contenedor flex
   —cosa de WordPress— y la imagen de dentro ya viene con `height: 100%` y
   `object-fit: cover` de la clase `is-cropped`, así que rellena sola. */
.gt-prose .wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image) {
  width: auto !important;
  max-width: none !important;
  margin: 0;
  aspect-ratio: 3 / 2;
}

/* Y por si la galería NO viene recortada —`is-cropped` es una opción del
   editor—, la imagen se comporta igual: llena el marco y recorta al centro en vez
   de dejar la fila con alturas distintas. */
.gt-prose .wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image) img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;

  border: 1px solid #e0e5e9;
  border: 1px solid color-mix(in srgb, var(--color-primary) 12%, transparent);
  border-radius: 3px;
}

/* El pie de una foto de la galería, debajo de la suya y no del conjunto. */
.gt-prose .wp-block-gallery > figure > figcaption {
  margin-top: 8px;
  font-size: 0.8125rem;
  line-height: 1.5;
  color: #5a5a5a;
}


@media (min-width: 768px) {

  /* ESTE BLOQUE VA AQUÍ, detrás de las reglas base y no en el de ≥768 de más
     arriba. Allí lo puse primero y no servía de nada: pesan lo mismo, y las de
     abajo, por ir después, le devolvían la columna única. Una media query no gana
     por ser media query. */
  .gt-prose .wp-block-gallery {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
  }

  /* La impar de la última fila ocupa el ancho entero: una foto a media anchura
     con un hueco al lado parece que falta algo. */
  /* La proporción se queda en 3:2 como las demás: la foto ancha es la MISMA foto,
     no una portada, y recortarla a 2:1 le comería un tercio de altura sin más
     motivo que rellenar el hueco. */
  .gt-prose .wp-block-gallery > figure:last-child:nth-child(odd) {
    grid-column: 1 / -1;
  }

}

/* LA TABLA ES UNA PIEZA, no unas líneas sueltas: filo alrededor y esquinas del
   sitio. Sin él, una tabla ancha que se desliza no enseña dónde empieza ni dónde
   acaba, y en medio de un artículo parece texto mal alineado. */
.gt-prose figure.wp-block-table {
  /* `display: block` ya viene de la regla de las figuras, ahí arriba. */
  overflow-x: auto;

  border: 1px solid #e0e5e9;
  border: 1px solid color-mix(in srgb, var(--color-primary) 12%, transparent);
  border-radius: 3px;
}

.gt-prose table {
  width: 100%;

  /* SE DESLIZA ANTES DE ESTRUJARSE, pero no antes de tiempo. Estaba en 700px,
     casi el ancho de la columna: cualquier tabla de tres columnas se quedaba al
     borde de arrastrarse sin necesitarlo. Con 640 las de tres caben enteras en
     escritorio y las de cuatro o cinco siguen deslizándose, que es lo que evita
     que una fila se convierta en cinco renglones de dos palabras. */
  min-width: 640px;
  border-collapse: collapse;

  /* 14px y no 13: estas tablas son comparativas de tres y cuatro columnas con
     frases dentro, no listas de datos sueltos. A 13 se leían como letra pequeña
     dentro de un artículo de 17. */
  font-size: 0.875rem;
  line-height: 1.55;
}

/* La disposición fija del editor reparte el ancho a partes iguales sin mirar el
   contenido: una columna de fechas cortas se lleva lo mismo que una de frases.
   Con `auto` cada columna pide lo que necesita. */
.gt-prose table.has-fixed-layout {
  table-layout: auto;
}

.gt-prose th,
.gt-prose td {
  padding: 11px 14px;
  border: 0;
  border-bottom: 1px solid rgba(0, 0, 0, 0.08);
  text-align: left;
  vertical-align: top;
}

.gt-prose thead th {
  background-color: var(--color-bg-alt);
  border-bottom: 2px solid var(--color-primary);
  color: var(--color-primary);
  font-weight: 700;
  white-space: nowrap;
}

/* FILAS ALTERNAS, muy flojas. En una comparativa de cuatro columnas, seguir una
   fila hasta el final es justo lo que falla; el filete de abajo ayuda, pero una
   banda de fondo ayuda más y no añade líneas. Al 3% es un cambio que no se ve
   como color, solo como guía. */
.gt-prose tbody tr:nth-child(even) td {
  background-color: #f7f9fa;
  background-color: color-mix(in srgb, var(--color-primary) 3%, transparent);
}

/* La primera columna de estas tablas SIEMPRE es la etiqueta de la fila —Aspecto,
   Tipo, Familia—, no un dato más. En azul y en negrita hace de encabezado
   lateral, que es lo que de verdad es. */
.gt-prose tbody td:first-child {
  color: var(--color-primary);
  font-weight: 700;
}

/* El filete de la última fila sobra: ya está el filo de la caja. */
.gt-prose tbody tr:last-child td {
  border-bottom: 0;
}

/* --------------------------------------------------------------------------
   WordPress trae `.wp-block-table .has-fixed-layout td { word-break: break-word }`,
   que pesa más que un `.gt-prose td` —dos clases contra una— y ganaba: dejaba
   «Analí / tica» y «Publi / citari / a» partidos por la mitad. Se iguala el
   peso para que, antes que partir una palabra, la columna pida su sitio y la
   tabla se deslice.
   -------------------------------------------------------------------------- */

.gt-prose .wp-block-table table th,
.gt-prose .wp-block-table table td {
  overflow-wrap: normal;
  word-break: normal;
  hyphens: none;
}

/* El último filete sobra: ya lo cierra el final de la tabla. */
.gt-prose tbody tr:last-child td {
  border-bottom: 0;
}

/* --------------------------------------------------------------------------
   .gt-legal-note — la letra pequeña
   --------------------------------------------------------------------------
   Un aviso legal al pie de una página no es cuerpo de texto: nadie lo lee
   seguido, se consulta. Al mismo tamaño que el resto compite con lo que sí hay
   que leer —en el Canal Ético, el formulario— y alarga la página sin aportar.

   SIN CAJA DE COLOR, solo un filete y letra menor. Justo encima está el recuadro
   gris de las condiciones del formulario, y dos cajas grises seguidas se leen
   como si fueran lo mismo.

   13px es el peldaño de la escala para datos secundarios. Por debajo no se baja:
   letra pequeña no significa letra ilegible.

   WordPress envuelve el grupo en un contenedor interno propio, así que el ritmo
   se pide en los dos sitios: si algún día deja de ponerlo, esto sigue igual.
   -------------------------------------------------------------------------- */

.gt-prose .gt-legal-note {
  margin-top: 46px;
  padding-top: 22px;
  border-top: 1px solid rgba(0, 0, 0, 0.12);
}

.gt-prose .gt-legal-note,
.gt-prose .gt-legal-note p,
.gt-prose .gt-legal-note li {
  font-size: 0.8125rem;
  line-height: 1.6;
  color: #4a4a4a;
}

.gt-prose .gt-legal-note > * + *,
.gt-prose .gt-legal-note .wp-block-group__inner-container > * + * {
  margin-top: 12px;
}

/* El rótulo se queda como encabezado —cuenta para el esquema del documento y
   para el índice—, pero al tamaño de la nota, no al de un apartado. */
.gt-prose .gt-legal-note h2,
.gt-prose .gt-legal-note h3 {
  font-size: 0.875rem;
  line-height: 1.4;
  color: var(--color-primary);
}

.gt-prose .gt-legal-note a {
  color: var(--color-primary);
}

/* --------------------------------------------------------------------------
   .gt-form-panel — el formulario, como panel
   --------------------------------------------------------------------------
   Un formulario dentro de un texto largo no es un párrafo más: es una zona
   donde se hace algo, no donde se lee. El fondo lo separa de la lectura y le
   dice al visitante «aquí es donde se escribe», sin necesidad de explicarlo.

   Sale del ancho de lectura por los lados —el relleno tira hacia fuera con
   márgenes negativos— para que el panel respire y las cajas del formulario
   conserven su medida. Se hace solo desde tablet: en un teléfono, salirse a los
   lados dejaría el panel pegado al borde de la pantalla.
   -------------------------------------------------------------------------- */

.gt-prose .gt-form-panel {
  margin-top: 46px;
  padding: 24px 20px;

  background-color: var(--color-bg-alt);
  border-radius: 3px;
}

.gt-prose .gt-form-panel > * + *,
.gt-prose .gt-form-panel .wp-block-group__inner-container > * + * {
  margin-top: 22px;
}

/* El rótulo abre el panel: pegado a lo que abre, como cualquier título. */
.gt-prose .gt-form-panel .wp-block-group__inner-container > h2 + * {
  margin-top: 14px;
}

@media (min-width: 768px) {

  .gt-prose .gt-form-panel {
    margin-inline: -32px;
    padding: 34px 32px;
  }

}

/* --------------------------------------------------------------------------
   Botón dentro del texto
   --------------------------------------------------------------------------
   El bloque «Botón» del editor trae los colores de WordPress: gris oscuro y
   forma de píldora. Sobre este sitio salía además con la letra azul encima del
   gris, casi ilegible.

   Se le da el mismo aspecto que a .gt-btn del resto del sitio. Se toca por la
   clase del bloque y no metiendo clases en el editor: quien escriba una entrada
   solo tiene que insertar un botón y ya sale bien.

   El selector lleva la clase del bloque Y la del enlace porque WordPress imprime
   sus colores por defecto en una hoja propia con ese mismo peso.
   -------------------------------------------------------------------------- */

.gt-prose .wp-block-buttons {
  margin-top: 36px;
}

.gt-prose .wp-block-button__link,
.gt-prose .wp-block-button .wp-block-button__link {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 15px 34px;

  background-color: var(--color-accent);
  color: var(--color-bg);

  font-family: var(--font-primary);
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: 0.04em;
  text-decoration: none;

  border: 0;
  border-radius: 3px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.22);

  transition: background-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
}

.gt-prose .wp-block-button__link:hover,
.gt-prose .wp-block-button__link:focus-visible {
  background-color: #b03d3b;
  background-color: color-mix(in srgb, var(--color-accent) 88%, #000);
  color: var(--color-bg);
  transform: translateY(-2px);
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.26);
  text-decoration: none;
}

.gt-prose .wp-block-button__link:focus-visible {
  outline: 3px solid var(--color-primary);
  outline-offset: 3px;
}

@media (prefers-reduced-motion: reduce) {

  .gt-prose .wp-block-button__link {
    transition: none;
  }

  .gt-prose .wp-block-button__link:hover,
  .gt-prose .wp-block-button__link:focus-visible {
    transform: none;
  }

}


/* --------------------------------------------------------------------------
   FOTOS AMPLIABLES
   --------------------------------------------------------------------------
   Las marca asap_child_fotos_ampliables() en functions.php. Lo único que hace
   falta aquí es que se vea que se pueden pulsar: una imagen que se amplía y no lo
   parece es una función que no existe.
   -------------------------------------------------------------------------- */

.gt-prose [data-gt-lightbox] {
  cursor: zoom-in;
}

.gt-prose [data-gt-lightbox]:focus-visible {
  outline: 3px solid var(--color-accent);
  outline-offset: 3px;
}


/* --------------------------------------------------------------------------
   UNA FIGURA DEBAJO DE UN TÍTULO PIDE MÁS MARGEN QUE UN PÁRRAFO
   --------------------------------------------------------------------------
   Un párrafo aporta media interlínea por arriba —casi 7px— y una imagen no aporta
   nada: su borde superior es su borde superior. Con el mismo margen declarado, el
   blanco real bajo el título salía siete píxeles más corto y la galería quedaba
   pegada a «Galería de imágenes».

   Se le devuelven esos píxeles para que el hueco VISIBLE sea el mismo que tendría
   un párrafo. Ver la explicación del ritmo vertical, más arriba.
   -------------------------------------------------------------------------- */

.gt-prose > h2 + figure { margin-top: 23px; }
.gt-prose > h3 + figure { margin-top: 19px; }
.gt-prose > h4 + figure { margin-top: 17px; }