/*
Theme Name: Avanza Asesores 2025
Theme URI: https://avanzasesores.com
Description: Tema hijo de Twenty Twenty-Five para Avanza Asesores. Paleta beis clara con la tinta como único tono oscuro. Casi todo el aspecto vive en theme.json.
Author: Avanza Asesores
Template: twentytwentyfive
Version: 0.2
License: GPL v2 or later
Text Domain: avanza-2025
*/

/* Aquí solo va lo que theme.json no sabe expresar. Los colores, las
   tipografías, la escala y los espacios están allí: si buscas un color, no lo
   busques en este archivo. */

/* Titulares equilibrados.
   -----------------------
   Sin esto, un titular de tres líneas deja la última con una sola palabra
   colgando. `balance` reparte las líneas para que queden parecidas; es de las
   pocas propiedades que mejoran un texto sin tocar el texto. */
h1, h2, h3,
.wp-block-heading {
	text-wrap: balance;
}

/* Los párrafos, con `pretty`: no arregla el reparto entero, pero evita la
   línea huérfana al final. */
p {
	text-wrap: pretty;
}

/* Foco visible, siempre.
   ----------------------
   Requisito de accesibilidad y de sentido común: quien navega con el tabulador
   tiene que saber dónde está. Se usa :focus-visible y no :focus para que el
   anillo no salte al pulsar con el ratón. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
textarea:focus-visible,
select:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible {
	outline: 2px solid var(--wp--preset--color--contrast);
	outline-offset: 3px;
	border-radius: 2px;
}

/* Los anclas de encabezado no se quedan pegadas al borde superior al saltar
   a ellas desde un índice o desde una dirección con almohadilla. */
:target,
h2[id],
h3[id] {
	scroll-margin-top: calc(var(--av-cabecera) + 2rem);
}

/* En táctil, sin el retardo de 300 ms que algunos navegadores dejan por si
   viene un doble toque. */
a,
button,
.wp-block-button__link {
	touch-action: manipulation;
}

/* Números en columna alineados: importa en los precios y en las fechas del
   calendario fiscal. */
table,
.wp-block-table {
	font-variant-numeric: tabular-nums;
}

/* Nada de texto que desborde su caja por una palabra larga —un correo, una
   URL— en pantallas estrechas. */
p, li, h1, h2, h3, td {
	overflow-wrap: break-word;
}

/* Transiciones: solo las propiedades que el navegador puede animar sin
   recalcular la página, y ninguna para quien ha pedido que no se mueva nada. */
/* El botón de contorno, del mismo tamaño que el macizo.
 *
 * WordPress le da al estilo de contorno un relleno propio —`calc(0.667em + 2px)`
 * y `calc(1.333em + 2px)`— que NO hereda el de theme.json. Resultado medido: el
 * macizo salía a 60px de alto y el de contorno a 64, con 5px más de relleno
 * lateral. Con los dos dentro de la banda no cantaba; solos sobre el fondo claro,
 * sí.
 *
 * Se le resta el píxel del borde para que el tamaño exterior coincida: la caja
 * es border-box, así que 0.9rem de relleno más 1px de filo mide más que 0.9rem
 * a secas.
 *
 * Los valores son los mismos que pone theme.json en `styles.elements.button`
 * (ver bin/paleta-2025.py). Si se cambian allí, hay que cambiarlos aquí.
 */
.wp-block-button.is-style-outline > .wp-block-button__link {
	padding: calc(0.9rem - 1px) calc(1.9rem - 1px);
}

/* Los dos botones bajo la banda, del mismo ancho.
   Sin esto los mide su texto: «Reservar cita» salía a 176px y «Llámanos: 603 929
   404» a 278, y dos llamadas del mismo rango con tamaños distintos se leen como
   si una fuera menos importante que la otra. */
.av-botones-iguales .wp-block-button__link {
	min-width: 17.5rem;
	text-align: center;
}

/* El botón del mapa lo pinta el plugin; solo hay que separarlo de las dos
   columnas que tiene encima. El centrado y el ancho van en las clases que ya
   trae de fábrica.
   La clase es suya y no `.av-botones-iguales.alignwide`, que era lo que había:
   con eso el margen alcanzaba también a los botones del héroe —comparten las
   dos clases— y les metía 48px de más por arriba. */
.wp-block-buttons.av-boton-mapa {
	margin-top: var(--wp--preset--spacing--40);
}

@media (max-width: 460px) {
	/* A 375 quedan 327px útiles: el mínimo de 17.5rem no cabe con margen, así
	   que cada botón se lleva una fila entera.
	   El ancho hay que ponerlo en el CONTENEDOR del botón, no en el enlace: el
	   contenedor se encoge a su texto, así que un `min-width: 100%` en el enlace
	   se calcula sobre una caja ya encogida y no hace nada. */
	.av-botones-iguales .wp-block-button {
		flex: 1 1 100%;
	}

	.av-botones-iguales .wp-block-button__link {
		display: block;
		min-width: 0;
	}
}

/* -------------------------------------------------------- el movimiento --- */

/* Solo movimiento de respuesta: nada aparece al hacer scroll ni se mueve solo.
 *
 * Una animación de entrada retrasa la lectura del contenido y en una web de
 * servicios no aporta nada; lo que sí falta en una web sin movimiento es la
 * sensación de que los controles responden. Todo lo de aquí abajo reacciona a
 * algo que hace quien visita —pasar por encima, enfocar, pulsar un enlace del
 * índice— y nada dura más de 0.2s: por encima de eso se percibe como lentitud,
 * no como suavidad.
 *
 * Todo queda desactivado por el bloque de prefers-reduced-motion de más abajo,
 * que ya estaba.
 */

/* El salto del índice de servicios deja de ser un corte. El scroll-margin de
   los titulares (arriba, en h2[id]) es lo que evita que el titular quede pegado
   al borde al llegar. */
html {
	scroll-behavior: smooth;
}

/* Los enlaces del texto llevan el subrayado apagado y se enciende al pasar.
   Sigue viéndose en reposo —hace falta para saber que es un enlace— pero deja
   de competir con el texto en un párrafo con tres o cuatro. */
a {
	text-underline-offset: 0.18em;
	text-decoration-thickness: 1px;
	transition: color 0.18s ease, text-decoration-color 0.18s ease,
		text-underline-offset 0.18s ease;
}

.entry-content a:not(.av-cta):not(.wp-block-button__link) {
	text-decoration-color: color-mix(in srgb, currentColor 45%, transparent);
}

.entry-content a:not(.av-cta):not(.wp-block-button__link):hover,
.entry-content a:not(.av-cta):not(.wp-block-button__link):focus-visible {
	text-decoration-color: currentColor;
	text-underline-offset: 0.24em;
}

/* El botón se levanta un pelo y vuelve al pulsarlo. Un solo píxel: lo justo
   para que se note que es una pieza y no un rectángulo pintado. */
.wp-block-button__link,
.av-cta {
	transition: background-color 0.2s ease, color 0.2s ease,
		transform 0.15s ease;
}

.wp-block-button__link:hover,
.av-cta:hover {
	transform: translateY(-1px);
}

.wp-block-button__link:active,
.av-cta:active {
	transform: translateY(0);
}

/* Las tarjetas.
 * -------------
 * Qué es una tarjeta en esta web se decide aquí y en ningún otro sitio: el
 * tono, el radio y el aire de dentro. Antes cada bloque llevaba esos tres
 * valores escritos a mano en sus atributos —quince copias entre la portada, el
 * blog, contacto y la ficha del autor— y bastaba con retocar una para que
 * dejara de parecerse a las demás. Ahora llevan la clase y ya está.
 *
 * Lo que esta regla NO fija es el tamaño. El ancho lo pone la rejilla que las
 * contiene —cuatro columnas en servicios, dos en el blog, tres en el proceso—
 * y el alto, el texto que llevan dentro. Una tarjeta que necesite otro relleno
 * puede declararlo en su bloque: un estilo en línea gana a esta clase.
 */
.av-tarjeta {
	position: relative;
	padding: 2rem;
	border-radius: 16px;
	background: var(--wp--preset--color--blanco);
	transition: transform 0.18s ease, box-shadow 0.18s ease;
}

/* Todas reaccionan al pasar por encima, lleven enlace o no.
 *
 * Aquí había antes un `:has(a)` que se lo reservaba a las que llevan a algún
 * sitio, con el argumento de que una tarjeta que se levanta promete un clic que
 * no existe. El argumento no era malo pero el resultado sí: en la misma pantalla
 * convivían tarjetas vivas y tarjetas muertas con la misma pinta, y eso se lee
 * como una avería, no como una distinción. El movimiento aquí dice «esto es una
 * pieza», y lo que promete el clic es el subrayado de abajo, que solo aparece
 * donde hay enlace.
 *
 * La sombra va en el tono de la tinta, no en negro: sobre un fondo cálido un
 * gris neutro se ve sucio. */
.av-tarjeta:hover,
.av-tarjeta:focus-within {
	transform: translateY(-2px);
	box-shadow: 0 8px 24px rgba(33, 26, 23, 0.12);
}

/* Al pasar se subraya lo que se puede leer como destino: el titular y el
 * enlace del final. Si la tarjeta lleva dos —las del blog, con la categoría
 * encima del titular— se subrayan los dos, porque las dos llevan a un sitio.
 *
 * El titular solo se subraya cuando la tarjeta entera lleva a un sitio. En las
 * de contacto, que no van a ninguna parte pero tienen dentro el teléfono y el
 * correo, se subraya el enlace y el titular se queda quieto: no hay que
 * prometer un clic donde no lo hay.
 *
 * Los botones se quedan fuera: ya tienen su propio gesto, y un botón subrayado
 * parece un enlace roto. */
.av-tarjeta-enlace:hover :is(h2, h3, h4),
.av-tarjeta-enlace:focus-within :is(h2, h3, h4),
.av-tarjeta:hover a:not(.wp-block-button__link):not(.av-cta),
.av-tarjeta:focus-within a:not(.wp-block-button__link):not(.av-cta) {
	text-decoration: underline;
	text-decoration-thickness: from-font;
	text-underline-offset: 0.18em;
}

/* Las que tienen un destino único se clican enteras, que es lo que convierte el
 * efecto en verdad y no en decoración: sin esto la tarjeta se levanta pero hay
 * que acertarle al renglón de abajo.
 *
 * Se estira solo el enlace de destino —el titular de la entrada, o el «Ver…»
 * que cierra la tarjeta de servicio—, no cualquier enlace: en una tarjeta con
 * varios, cada uno tendría su capa a pantalla completa y ganaría el último,
 * que es justo el que no quieres. Por eso la clase se pone a mano donde
 * corresponde y no la deduce un `:has(a)`: las de contacto llevan teléfono y
 * correo, y ahí cada enlace tiene que seguir siendo el suyo. */
.av-tarjeta-enlace .wp-block-post-title a::after,
.av-tarjeta-enlace > p:last-child a::after {
	content: "";
	position: absolute;
	inset: 0;
}

/* La tarjeta que termina en botón: el botón al pie y centrado.
 *
 * Es el mismo problema que el «Ver…» de más abajo y la misma solución. En
 * contacto las seis tarjetas siguen el mismo patrón —título, descripción y una
 * acción— y sus descripciones no miden lo mismo, así que sin esto los botones
 * de una fila quedaban a alturas distintas y la simetría se perdía justo en lo
 * que se mira, que es dónde hay que pulsar.
 *
 * El centrado lo declara el propio bloque de botones en su maquetación; aquí va
 * también por si alguno se pega sin ella. */
.av-tarjeta:has(> .wp-block-buttons:last-child),
.av-tarjeta:has(> .av-horario-estado:last-child) {
	display: flex;
	flex-direction: column;
	gap: 1.2rem;
}

.av-tarjeta:has(> .wp-block-buttons:last-child) > *,
.av-tarjeta:has(> .av-horario-estado:last-child) > * {
	margin: 0;
}

.av-tarjeta > .wp-block-buttons:last-child {
	margin-top: auto;
	justify-content: center;
}

/* El icono manda un poco menos de aire que el resto: va pegado a su titular. */
.av-tarjeta:has(> .wp-block-buttons:last-child) > .av-icono,
.av-tarjeta:has(> .av-horario-estado:last-child) > .av-icono {
	margin-bottom: -0.45rem;
}

/* Cuatro tarjetas van siempre de dos en dos, nunca tres y una suelta.
 *
 * La rejilla de WordPress reparte por ancho mínimo: mete las columnas que
 * quepan. Con cuatro tarjetas eso sale bien en los dos extremos —cuatro en una
 * pantalla ancha, una debajo de otra en el móvil— y mal justo en medio: en una
 * tablet en vertical caben tres, y la cuarta se queda sola en una fila,
 * arrinconada a la izquierda. No es un fallo de nadie, es lo que hace
 * `auto-fill`, y no se puede evitar eligiendo mejor el ancho mínimo porque para
 * llegar a cuatro columnas siempre hay que pasar antes por tres.
 *
 * Se fija a dos, que con cuatro tarjetas siempre cuadra, y por debajo de 600 se
 * apilan. El selector lleva `.entry-content` delante para pesar más que la
 * clase que WordPress le pone al contenedor de la rejilla. */
.entry-content > .av-dos-en-dos {
	grid-template-columns: repeat(2, minmax(0, 1fr));
}

@media (max-width: 599px) {
	.entry-content > .av-dos-en-dos {
		grid-template-columns: minmax(0, 1fr);
	}
}

/* El «Ver…» se va al pie de la tarjeta.
 *
 * Las tarjetas de una fila miden todas lo que la más alta, pero su contenido
 * cae desde arriba: con descripciones de distinto largo, el enlace de cada una
 * acababa a una altura distinta —26px de diferencia entre «Asesoría laboral» y
 * sus vecinas— y la fila se leía descuadrada aunque las cajas estuvieran
 * alineadas.
 *
 * El `margin-top: auto` se come el hueco sobrante y lo deja abajo del todo. Se
 * lo damos solo a las tarjetas que terminan en un párrafo con enlace: las del
 * blog terminan en el extracto o en la fecha, y ahí bajar el último renglón al
 * suelo dejaría un agujero en medio.
 *
 * Al pasar a flex los márgenes dejan de colapsar entre hermanos, así que el
 * aire lo pone `gap` y los márgenes propios se ponen a cero. Por eso el titular
 * de estas tarjetas no lleva margen en línea: lo pisaría. */
.av-tarjeta-enlace:has(> p:last-child a) {
	display: flex;
	flex-direction: column;
	gap: 1.2rem;
}

.av-tarjeta-enlace:has(> p:last-child a) > * {
	/* Los cuatro márgenes, no solo los de arriba y abajo.
	 *
	 * La maquetación «constrained» de WordPress le pone a cada hijo
	 * `margin-left: auto; margin-right: auto` para centrar la columna de lectura.
	 * En flujo normal eso no hace nada dentro de una tarjeta —el hijo ya ocupa
	 * todo el ancho—, pero en una caja flex un margen automático se come el hueco
	 * sobrante: el titular se encogía a lo que mide su texto y se iba al centro.
	 * Las cinco tarjetas de /servicios/ salían con el título centrado y el resto
	 * a la izquierda.
	 *
	 * Los márgenes automáticos vienen con `!important`, así que no se ganan desde
	 * aquí: se quitan en el origen, dando a esas tarjetas maquetación de flujo
	 * normal en vez de «constrained». Una tarjeta no necesita que le limiten la
	 * medida de lectura, que para eso ya es estrecha. */
	margin: 0;
}

.av-tarjeta-enlace:has(> p:last-child a) > p:last-child {
	margin-top: auto;
}

/* Los demás enlaces de la tarjeta del blog —la categoría y «Seguir leyendo»—
   tienen que seguir siendo clicables por su cuenta, así que se levantan por
   encima de la capa estirada. */
.av-tarjeta-enlace .wp-block-post-terms a,
.av-tarjeta-enlace .wp-block-post-excerpt a {
	position: relative;
	z-index: 1;
}

/* La tarjeta de sociedades, bajo las cuatro de servicios: ocupa el ancho de las
   dos columnas y va centrada, para que se lea como el cierre del bloque y no
   como un párrafo que se quedó descolgado (observación de Alba, 19/09/2026).
   El texto no pasa de 60 caracteres por línea aunque la tarjeta sea ancha. */
.av-tarjeta-ancha {
	text-align: center;
	align-items: center;
}

.av-tarjeta-ancha > * {
	max-width: 60ch;
	margin-inline: auto;
}

/* Los enlaces del índice se desplazan al pasar, que es la manera de señalar
   dónde está el cursor en una lista sin subrayar cuatro líneas seguidas. */
.av-indice a {
	display: inline-block;
	transition: transform 0.18s ease, color 0.18s ease;
}

.av-indice a:hover,
.av-indice a:focus-visible {
	transform: translateX(3px);
}

/* En el índice el realce va por enlace, no por tarjeta: son cuatro o seis
   seguidos, y subrayarlos todos a la vez al pasar por la tarjeta no señala
   nada. Aquí el que se mueve es el que está bajo el cursor. */
.av-indice:hover a,
.av-indice:focus-within a {
	text-decoration: none;
}

@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;
	}
}

/* Objetivos táctiles de la cabecera.
   ---------------------------------
   Medidos: 26px de alto los enlaces del menú y 22 la marca. El mínimo cómodo
   en táctil son 44: por debajo, acertar con el dedo es cuestión de suerte, y
   eso lo paga sobre todo quien tiene poco pulso o dedos grandes. Se gana con
   relleno, no agrandando la letra, para no engordar la cabecera. */
header .wp-block-navigation-item__content,
header .wp-block-site-title a {
	/* Se gana el alto con relleno, no con min-height.
	   Con min-height hacía falta además convertir el enlace en caja flex para
	   centrar el texto, y ese display no llegaba a aplicarse: el enlace seguía
	   siendo `block`, así que la caja medía 44px pero el texto se quedaba
	   pegado arriba. Resultado medido: el menú 9px más alto que la marca y el
	   botón, que sí coincidían entre sí.

	   Con relleno simétrico el texto queda centrado por construcción, sin
	   depender de que se aplique ningún display. */
	display: inline-block;
	padding-block: 9px;
}

/* La medida de línea la fija la rejilla, no cada bloque.
   ------------------------------------------------------
   Aquí hubo un max-width por bloque y fue peor el remedio: en una maquetación
   centrada, dos bloques con medidas distintas se centran cada uno por su lado
   y sus bordes izquierdos dejan de coincidir. La medida se controla desde
   contentSize en theme.json, que es lo que WordPress usa para colocar. */


/* La medida de lectura la fija contentSize en theme.json, no reglas de aquí.
   -------------------------------------------------------------------------
   Aquí hubo un bloque que limitaba el ancho de párrafos y titulares con
   max-width y márgenes. Se quitó: peleaba con la maquetación de bloques de
   WordPress, que también coloca esos elementos, y el resultado eran cuatro
   bordes izquierdos distintos en la misma pantalla —justo lo contrario de lo
   que buscaba—. Con una sola columna en theme.json, WordPress lo alinea todo
   solo y no hace falta ni una línea de CSS. */


/* Nota para la próxima vez que algo "no se aplique".
   -------------------------------------------------
   Aquí hubo una regla que estiraba las filas de la cabecera y del pie al 100%.
   No hacía falta: el desajuste venía de que WordPress cachea el CSS que genera
   a partir de theme.json, y estaba sirviendo el ancho viejo (1160) mientras el
   archivo ya decía 760. Cabecera y pie salían más anchos que el contenido.

   Se arregla con:
       wp transient delete --all && wp cache flush

   Conviene tenerlo presente antes de escribir CSS correctivo: varias vueltas de
   ajustes que "no surtían efecto" eran esto, no el CSS. */

/* «Abierto ahora», resaltado.
 *
 * Lo pinta el navegador (avanza-nucleo/assets/js/horario.js) y hasta ahora
 * salía como un párrafo más, indistinguible del horario que tiene encima. Es el
 * único dato de la página que cambia según el momento en que se mire, y es
 * justo el que se busca: pasa a una pastilla en Hueso sobre la Piedra de la
 * tarjeta, que es el contraste que ya usa el resto de la web para destacar algo
 * dentro de una tarjeta.
 *
 * Abierto y cerrado se distinguen por el punto —relleno o hueco— y, sobre todo,
 * por el texto, que lo dice con todas las letras. Nada depende del color: no
 * hay verde ni rojo, primero porque esta paleta no los tiene, y segundo porque
 * un estado que solo se lea por el color no lo lee todo el mundo (WCAG 1.4.1).
 */
.av-horario-estado {
	display: inline-flex;
	/* Dentro de la tarjeta, que es una caja flex, `inline-flex` se convierte en
	   `flex` y la pastilla se estiraba a los 504px de ancho de la columna. Con
	   `align-self` vuelve a medir lo que mide su texto, y de paso se centra como
	   los botones de las demás tarjetas. */
	align-self: center;
	align-items: center;
	gap: 0.5rem;
	margin-block: 0.35rem 0;
	/* Misma receta de caja que un botón de tarjeta —relleno de 0.9rem, texto de
	   0.9375rem e interlineado 1.75—, así que mide exactamente lo mismo de alto
	   sin que haya que escribir el número en ningún sitio. El relleno lateral sí
	   es más corto: es una etiqueta, no algo que se pulse. */
	padding: 0.9rem 1.25rem;
	border-radius: 999px;
	background: var(--wp--preset--color--base);
	font-size: 0.9375rem;
	font-weight: 700;
	line-height: 1.75;
}

/* En una tarjeta de móvil no caben los 34 caracteres en una línea: la pastilla
   partía en dos y se convertía en un pegote de 81px de alto. Ahí no hay ningún
   botón al lado con el que casar la altura —las tarjetas van apiladas—, así que
   se le puede recortar la letra y el relleno sin perder nada. */
@media (max-width: 480px) {
	.av-horario-estado {
		padding-inline: 0.9rem;
		font-size: 0.8125rem;
	}
}

/* Segundo escalón, para las pantallas de 360: con 13px seguía partiendo por
   ocho píxeles. El corte va en 370 y no en 380 para que los 375 del iPhone SE
   se queden en el escalón de arriba, donde ya caben. Por debajo de 340 vuelve a
   partir y se deja así: para que cupiera habría que recortar el texto, y ese lo
   escribe el navegador. */
@media (max-width: 370px) {
	.av-horario-estado {
		padding-inline: 0.65rem;
		font-size: 0.75rem;
	}
}

.av-horario-estado::before {
	content: "";
	flex: none;
	width: 0.5rem;
	height: 0.5rem;
	border: 2px solid currentColor;
	border-radius: 50%;
}

.av-horario-abierto::before {
	background: currentColor;
}

/* El horario de siempre, encima de la pastilla: se apoya menos, porque el dato
   que se busca es el de abajo. */
.av-horario {
	margin-bottom: 0;
}

/* La pastilla se va al pie de su tarjeta, en el sitio donde las demás llevan su
 * botón. Esa tarjeta no lleva ninguno —su llamada sería «reservar cita» y ya
 * hay una tarjeta para eso—, y sin esto el hueco quedaba todo abajo y la fila
 * se leía descuadrada.
 *
 * Ya no hace falta compensar nada: midiendo las dos lo mismo, con pegarlas al
 * mismo borde inferior quedan alineadas. */
.av-tarjeta > .av-horario-estado:last-child {
	margin-top: auto;
	margin-bottom: 0;
}

/* El icono de las tarjetas de contacto.
   ------------------------------------
   Un círculo con el icono dentro. Va aquí y no en theme.json porque theme.json
   describe la paleta y la escala, no piezas sueltas. */
.av-icono {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 48px;
	height: 48px;
	margin-bottom: 0.9rem;
	border-radius: 50%;
	background: var(--wp--preset--color--base);
	color: var(--wp--preset--color--accion);
}

/* Dentro de una tarjeta el titular no necesita el tope de medida de la columna
   principal: la tarjeta ya es estrecha. Y arranca pegado al borde de arriba, sin
   el margen que llevaría en medio de un texto.

   Vale para las tarjetas que son columna y para las que son grupo: cuando esto
   se escribió solo había de las primeras. */
.wp-block-column > .wp-block-heading,
.av-tarjeta > .wp-block-heading {
	margin-block: 0 0.5rem;
	max-width: none;
}

/* El pie, pegado abajo en las páginas cortas.
   ------------------------------------------
   Medido en el blog, que con dos entradas ocupa 1057px: en una ventana de
   1600 el pie terminaba a esa altura y dejaba 543px en blanco por debajo. No
   es que el pie fuera grande —mide 123px en todas las páginas— es que flotaba
   a media pantalla con un vacío detrás.

   La estructura de un tema de bloques es .wp-site-blocks conteniendo header,
   main y footer, así que basta con que esa caja ocupe la ventana entera y que
   el contenido se lleve el espacio sobrante. */
.wp-site-blocks {
	display: flex;
	flex-direction: column;
	min-height: 100vh;
}

.wp-site-blocks > main {
	flex: 1 0 auto;
}

/* Sin hueco entre la cabecera, el contenido y el pie.
 *
 * WordPress separa los bloques de primer nivel con el `blockGap` global, 1.2rem.
 * Entre dos zonas del mismo color no se nota, pero la portada abre y cierra con
 * banda de avena y esos 19px salían como una franja clara: la banda no llegaba
 * ni al filo de la cabecera ni al del pie.
 *
 * Se quita aquí y no en theme.json a propósito. El `blockGap` de theme.json es
 * el mismo que separa los párrafos dentro del contenido: ponerlo a cero allí
 * apelmazaría todos los textos de la web para arreglar dos franjas.
 *
 * La regla de WordPress va con :where(), que no puntúa, así que un selector con
 * una clase le gana sin necesidad de !important. */
.wp-site-blocks > * {
	margin-block-start: 0;
}

/* Piezas del contenido que vienen del plugin o de los archivos de contenido.
   -------------------------------------------------------------------------
   No son bloques del editor, así que theme.json no las alcanza: llevan clase
   propia y se les da forma aquí. Al cambiar de tema se habían quedado sin
   ningún estilo —la entradilla igual que un párrafo cualquiera, las preguntas
   frecuentes sin separación y la nota de revisión sin recuadro. */

/* Entradilla: el primer párrafo de cada página, un punto mayor. */
.av-entradilla {
	font-size: 1.2rem;
	line-height: 1.6;
	color: var(--wp--preset--color--contrast);
}

/* Nota de trabajo interno: está para que moleste hasta que alguien la resuelva
   y la borre, pero solo a quien puede resolverla. A quien no ha iniciado sesión
   se le quita del HTML —ver avanza-nucleo/inc/notas-internas.php—, así que este
   estilo solo lo ve el equipo. El filo la marca como lo que es: un recado, no
   contenido de la página. */
.av-revisar {
	padding: 1rem 1.25rem;
	border-left: 3px solid var(--wp--preset--color--accion);
	background: var(--wp--preset--color--blanco);
	font-size: 0.95rem;
}

/* Preguntas frecuentes: cada una en su desplegable.
 *
 * Eran veintidós titulares con su párrafo debajo repartidos en cinco páginas, y
 * un muro de preguntas cansa antes de encontrar la propia. Plegadas, la lista
 * entera se lee de un vistazo y se abre solo la que importa.
 *
 * Es `<details>` del navegador, no un acordeón de JavaScript: funciona sin
 * scripts, el buscador de la página (Cmd+F) encuentra el texto de dentro y lo
 * abre, y el teclado ya sabe manejarlo sin que haya que declarar roles.
 */
.av-faq details {
	border-top: 1px solid var(--wp--preset--color--borde);
}

.av-faq details:last-of-type {
	border-bottom: 1px solid var(--wp--preset--color--borde);
}

.av-faq summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1.5rem;
	padding-block: 1.1rem;
	cursor: pointer;
	font-size: 1.125rem;
	line-height: 1.4;
	/* Fuera el triángulo del navegador: se dibuja el nuestro más abajo. El
	   `list-style` es para Firefox y el pseudo-elemento para Safari. */
	list-style: none;
}

.av-faq summary::-webkit-details-marker {
	display: none;
}

/* La flecha. Dibujada con dos bordes girados en vez de con un icono: son dos
   líneas de CSS, hereda el color del texto y no hay archivo que cargar. */
.av-faq summary::after {
	content: "";
	flex: none;
	width: 0.5em;
	height: 0.5em;
	margin-bottom: 0.2em;
	border-right: 2px solid;
	border-bottom: 2px solid;
	transform: rotate(45deg);
	transition: transform 0.2s ease;
}

.av-faq details[open] summary::after {
	transform: rotate(-135deg);
	margin-bottom: -0.2em;
}

.av-faq summary:hover {
	text-decoration: underline;
}

/* El foco de la pregunta se marca subrayando, no con el recuadro de siempre.
 *
 * El navegador le pone el anillo de foco a un `<summary>` también cuando se
 * pulsa con el ratón —no solo con el teclado, como hace con un enlace—, así que
 * abrir una pregunta dejaba un rectángulo alrededor hasta pulsar en otro sitio.
 *
 * Hay que apagarlo en `:focus`, no solo en `:focus-visible`. El primer intento
 * fue con `:focus-visible` y no sirvió de nada: si el anillo lo dibuja el
 * navegador en el foco a secas, esa regla ni siquiera llega a aplicarse. El
 * recuadro seguía ahí.
 *
 * Apagarlo y ya está no vale: quien navega con el teclado necesita ver dónde
 * está. Por eso el subrayado se declara aparte, en `:focus-visible`, que es el
 * caso del teclado: señala igual de bien en una línea de texto y no dibuja una
 * caja. Es el mismo gesto que al pasar por encima, y eso es correcto: las dos
 * cosas dicen «esto se puede pulsar». */
.av-faq summary:focus,
.av-faq details:focus {
	outline: none;
}

.av-faq summary:focus-visible {
	text-decoration: underline;
	text-decoration-thickness: 2px;
	text-underline-offset: 4px;
}

.av-faq details > p {
	margin-block: 0 1.25rem;
	max-width: 60ch;
}

/* Llamada a la acción del final de cada servicio, y de cada entrada. */
/* Las tarjetas se definen por su tono y su aire, no por un filo.
 *
 * docs/paleta.md avisaba de que sin el filo desaparecerían, porque avena contra
 * leche se quedan en 1.25 de contraste. El número es correcto y la conclusión
 * no: 1.25 es poquísimo para leer un texto, pero entre dos superficies grandes
 * y planas el escalón de tono se ve de sobra. Comprobado quitándolo.
 *
 * El radio pasa de 8 a 16px. Un radio pequeño y uniforme es la firma de
 * Bootstrap y de toda la década pasada; y con Fraunces, que tiene remates
 * suaves, una esquina generosa rima mejor. */
/* La llamada del final va centrada en el ancho que tenga la página.
 *
 * Con el lateral —de 1100px para arriba— se centra cruzando las dos columnas,
 * y eso se declara en la regla de la rejilla. Por debajo no hay rejilla, y ahí
 * se quedaba pegada al borde izquierdo: a 1024 la tarjeta medía 704 en un
 * contenedor de 961 y empezaba en el mismo sitio que el texto. Centrada se lee
 * como lo que es, el cierre de la página, y no como un párrafo más. */
.av-entrada-cta {
	margin-top: 3rem;
}

/* El `!important` no es pereza: para que el carril vaya alineado a la
   izquierda, WordPress emite `margin-left: 0 !important` sobre cada hijo del
   contenido, y eso se come cualquier margen automático. Es el mismo `!important`
   contra el que ya se chocó al montar los rieles. Con `body` delante, la regla
   pesa más que la suya y gana. */
body .entry-content > .av-entrada-cta {
	margin-inline: auto !important;
}

/* En una entrada la llamada cuelga de `main` y no del contenido, así que se
   centra sola —main centra lo que no va a ancho completo— y lo único que le
   falta es el hueco de arriba. */
body main > .av-entrada-cta {
	margin-top: clamp(3rem, 2rem + 4.2vw, 5.5rem);
}

.av-entrada-cta-titulo {
	margin-block: 0 0.5rem;
}

.av-entrada-cta .av-cta,
.av-cta {
	display: inline-block;
	margin-top: 0.75rem;
	padding: 0.9rem 1.9rem;
	/* El mismo radio que los botones del tema, que lo pone theme.json. Aquí hay
	   que repetirlo porque este botón no es un bloque: lo pinta el plugin. */
	border-radius: 8px;
	/* Las variables las emite theme.json. Antes esto apuntaba al slug `accion`,
	   que era el color del botón mientras botón y enlaces coincidían. Al pasar
	   la acción a mocha dejaron de coincidir y este CTA —el que el plugin
	   inyecta al final de las páginas de servicio— se quedó en carbón mientras
	   los del tema ya eran mocha, sin que nada fallara. */
	background: var(--av-boton);
	color: var(--av-boton-letra);
	font-weight: 700;
	text-decoration: none;
}
/* El botón, centrado en la tarjeta.
   Va con márgenes automáticos y `display: block` en vez de con `text-align`:
   así se centra la caja del botón, no el renglón, y el ancho lo sigue poniendo
   su relleno. Con `text-align: center` habría que centrar también el texto de
   arriba, y ese se lee mejor alineado a la izquierda. */
.av-entrada-cta .av-cta {
	display: block;
	width: fit-content;
	margin-inline: auto;
	margin-top: 1.25rem;
}

.av-cta:hover,
.av-cta:focus {
	background: var(--av-boton-activo);
	color: var(--wp--preset--color--base);
}

/* Otros servicios: el enlazado interno entre las cinco páginas. */
.av-relacionados {
	margin-top: 3rem;
}

.av-relacionados-titulo {
	margin-block: 0 0.75rem;
	font-size: 1.2rem;
}

.av-relacionados-rejilla {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
	gap: 1.5rem;
}

/* La tarjeta es el enlace. No lleva el `::after` estirado de las demás porque
   no hay nada dentro que estirar: el enlace ya ocupa la tarjeta entera. */
.av-relacionados-tarjeta {
	display: flex;
	align-items: center;
	min-height: 5.5rem;
	font-weight: 700;
	text-decoration: none;
}

.av-relacionados-tarjeta:hover,
.av-relacionados-tarjeta:focus-visible {
	text-decoration: underline;
	text-decoration-thickness: from-font;
	text-underline-offset: 0.18em;
}

/* ---------------------------------------------------------------- el pie --- */

/* Etiquetas: los rótulos pequeños que van encima de un titular.
 *
 * Van en versalitas y espaciadas porque tienen que leerse como etiquetas, no
 * como titulares. El interletrado abierto es lo que hace legible un texto en
 * mayúsculas a tamaño pequeño; sin él, las mayúsculas se apelmazan.
 *
 * Ojo: estos párrafos NO llevan la clase has-small-font-size. Las clases de
 * tamaño que genera WordPress salen con !important, así que le ganarían a este
 * font-size y los rótulos volverían a 15px sin que nada avisara.
 */
.av-etiqueta {
	margin-block: 0 1rem;
	text-transform: uppercase;
	letter-spacing: 0.12em;
	font-weight: 700;
	font-size: 0.75rem;
}

/* En el contenido, la etiqueta se apoya en un filo que cruza el carril ancho.
 *
 * Un solo elemento hace de separador de sección y de rótulo, que es mejor que
 * dos: un <hr> aparte y una etiqueta debajo se descuadran en cuanto alguien
 * mueve uno de los dos.
 *
 * El filo va en Taupe porque en esta paleta Taupe es el color de las líneas —el
 * mismo de los filos de las tarjetas—, y porque con 2.79 sobre el fondo se ve
 * sin llegar a pesar. No lleva color propio: hereda el del cuerpo, que es el
 * tono medio de la paleta, así que queda por debajo del titular sin tener que
 * fijarlo aquí. Si el texto cambia de tono, la etiqueta lo sigue.
 */
main .av-etiqueta {
	border-top: 1px solid var(--wp--preset--color--borde);
	padding-top: 1.25rem;
}

/* Salvo cuando la sección viene justo después de una banda de color: ahí el
   borde de la banda ya hace de separador, y un filo a dos centímetros de él son
   dos líneas seguidas diciendo lo mismo. */
/* La etiqueta que viene justo debajo de una banda de color pierde el filo: el
   borde de la banda ya hace de separador, y un filo a dos centímetros de él son
   dos líneas seguidas diciendo lo mismo.
   Conserva el `padding-top`, que es lo que la hace colgar del borde exactamente
   igual que colgaba del filo. Sin él se pega a la banda y el hueco deja de
   coincidir con el de las demás secciones. */
main .av-etiqueta-sin-filo {
	border-top: 0;
}

/* Dentro de una tarjeta no hay nada de lo que colgar: la tarjeta ya está
   delimitada por su relleno, así que ni filo ni hueco. */
/* La entradilla queda con el mismo aire arriba que abajo.
 *
 * La portada de la página termina en un filo y deja 64px hasta la entradilla;
 * el filo de la primera etiqueta se le pegaba al renglón siguiente sin nada en
 * medio. El párrafo quedaba colgando del de arriba en vez de respirar entre dos
 * líneas, que es lo que hace la página.
 *
 * Es el mismo clamp que el margen inferior de `.av-portada-pagina`: los dos
 * huecos son el mismo hueco y tienen que encoger a la vez. */
main .av-entradilla + .av-etiqueta {
	margin-top: clamp(2rem, 1.3rem + 3vw, 4rem);
}

main .av-tarjeta .av-etiqueta {
	border-top: 0;
	padding-top: 0;
}

/* El pie es una lista de datos sueltos, no prosa: interlineado más corto y los
   párrafos pegados entre sí. Con el 1.75 del cuerpo, cuatro enlaces seguidos
   ocupan lo que una sección. */
footer .wp-block-column p {
	margin-block: 0 0.35rem;
	line-height: 1.6;
}

/* La salida de un atajo la envuelve wpautop en un <p> PELADO, sin las clases
   del bloque: el `fontSize` que se le pone al bloque de atajo no llega al HTML.
   Sin esto, la dirección y el teléfono salían a 17px entre vecinos de 15.
   El :not([class]) es a propósito: así solo alcanza a esos párrafos sueltos y
   no le gana por especificidad al has-large-font-size del nombre. */
footer .wp-block-column p:not([class]) {
	font-size: var(--wp--preset--font-size--small);
}

/* En el pie los enlaces van sin subrayar: son una lista de navegación, y cuatro
   subrayados seguidos ensucian. Se subrayan al pasar y al enfocar, que es
   cuando hace falta saber que son enlaces. */
footer a {
	text-decoration: none;
}

footer a:hover,
footer a:focus-visible {
	text-decoration: underline;
}

/* El texto de los enlaces del pie mide 19px de alto y WCAG 2.5.8 pide un área de
   toque de 24. El relleno vertical de un elemento EN LÍNEA crece hacia fuera de
   su línea sin separarla, así que el área llega a 25px y la maquetación no se
   mueve. Con 30px entre líneas no llegan a solaparse.

   No se usa display:inline-block, que sería lo obvio: el correo es largo y en
   una columna estrecha necesita poder partirse entre dos líneas. */
footer .wp-block-column a {
	padding-block: 3px;
}

/* El logotipo del pie usa la variante clara del archivo, no la oscura con un
   filtro: el trazo es fino y cualquier inversión por CSS lo emborrona. */
.wp-block-image.av-marca-pie {
	margin: 0 0 0.75rem;
}

.wp-block-image.av-marca-pie img {
	display: block;
	width: 140px;
	height: auto;
}

.av-pie-legal {
	row-gap: 0.75rem;
}

.av-pie-legal p {
	margin-block: 0;
}

/* ------------------------------------------------ las páginas interiores --- */

/* Las migas hacen de etiqueta de página.
 *
 * En la portada la etiqueta de sección es un rótulo escrito a mano. Aquí no
 * hace falta inventarlo: las migas ya dicen dónde estás, y puestas encima del
 * titular ocupan exactamente ese sitio. Se les quita el peso —salían a 17px y
 * subrayadas, compitiendo con el titular— y se quedan en tamaño de etiqueta.
 *
 * El subrayado vuelve al pasar y al enfocar, que es cuando hace falta saber que
 * son enlaces.
 */
.av-migas {
	margin-block: 0 0.75rem;
	font-size: var(--wp--preset--font-size--small);
	line-height: 1.5;
}

.av-migas a {
	text-decoration: none;
}

/* Las migas son texto, no botones, y su caja se ajusta a la palabra: a 360
 * «Blog» salía en 29×20, por debajo de los 44×44 del mínimo táctil (WCAG
 * 2.5.5). Con `padding` de sobra y el mismo valor en negativo en `margin` la
 * caja real —la que mide el navegador y la que se puede pulsar— crece a
 * 44+; el hueco que ocupan entre sí las migas y con lo de abajo no se
 * entera, porque el margen negativo cancela justo lo que añade el relleno.
 *
 * El relleno no se reparte igual arriba que abajo (revisado el 20/09/2026):
 * casi todo va en `padding-top`, y `padding-bottom` se deja mínimo. Repartido
 * a partes iguales, como antes, la caja crecía lo mismo hacia abajo que
 * hacia arriba —12,8px, el resultado de 0,8rem— y en la entrada esos 12,8px
 * de más se comían el hueco hasta el titular, que aquí es un `<h1>` y no
 * otro enlace: un toque que caía en esa franja abría la categoría en vez de
 * no hacer nada. Arriba de las migas no hay nada que tapar —es lo primero
 * de la página—, así que ahí no hay ese riesgo y se le puede cargar casi
 * todo el relleno. */
.av-migas a {
	display: inline-block;
	padding: 1.1rem 0.55rem 0.25rem;
	margin: -1.1rem -0.55rem -0.25rem;
}

.av-migas a:hover,
.av-migas a:focus-visible {
	text-decoration: underline;
}

/* La categoría sobre el titular de la entrada —«Fiscal», «Sociedades»— es el
 * bloque de WordPress «Términos de la entrada» y le pasa lo mismo que a las
 * migas: a 360 salía en 42×20. Mismo arreglo, y el mismo reparto desigual
 * (ver el comentario de `.av-migas a` aquí arriba): en la entrada individual
 * (`single.html`) este es el último elemento antes del `<h1>` del titular, a
 * un solo `margin-bottom` de por medio —el hueco más corto de los tres
 * elementos de la cabecera de la entrada—, así que es donde más importaba
 * quitarle relleno de abajo. En las tarjetas del blog, donde va encima de
 * otro título más pequeño y el hueco es mayor, este reparto no cambia nada
 * a ojos vistas: sigue midiendo lo mismo por dentro. */
.wp-block-post-terms a {
	display: inline-block;
	padding: 1.1rem 0.55rem 0.25rem;
	margin: -1.1rem -0.55rem -0.25rem;
}

/* El filo bajo la cabecera de página: marca dónde acaba la portada de la página
   y empieza el texto. Cruza el carril ancho, como las etiquetas de sección. */
/* El titular de la página no se mide con la vara del texto.
 *
 * La portada va en el carril ancho pero su maquetación es «constrained», así
 * que WordPress le pone a cada hijo el tope de 640px de la columna de lectura.
 * A un párrafo eso le viene bien; a un titular de 64px no: «Asesoría para
 * autónomos» ocupa 713px y partía en dos renglones de 389 y 324, y un titular
 * partido a media palabra no se lee como una decisión.
 *
 * Un titular no es texto seguido: no hay medida de lectura que proteger, hay
 * una línea que leer de un vistazo. Se le quita el tope y cabe en el carril
 * ancho. Sigue partiendo cuando de verdad no cabe, que es lo que pasa en móvil.
 */
.av-portada-pagina .wp-block-post-title,
.av-portada-pagina h1 {
	max-width: none;
}

.av-portada-pagina {
	margin-bottom: clamp(2rem, 1.3rem + 3vw, 4rem);
	padding-bottom: clamp(1.5rem, 1.1rem + 1.7vw, 2.5rem);
	border-bottom: 1px solid var(--wp--preset--color--borde);
}

/* Aquí estuvo la indentación del cuerpo.
 *
 * A 1440px, un párrafo de 640 pegado al borde del carril deja 520px de vacío a
 * su derecha. La solución era indentar el cuerpo 300px y dejar el titular
 * colgando en el borde: se llenaba el ancho sin tocar la medida de lectura.
 *
 * Funcionaba en un portátil y no en una pantalla de ordenador: allí el párrafo
 * no llenaba nada, se quedaba flotando en medio de la página sin nada que lo
 * justificara. Un texto indentado sin margen que lo sostenga se lee como un
 * error de maquetación, no como una decisión.
 *
 * Ahora ese hueco lleva contenido —el lateral con el índice y la reserva, en
 * `avanza-nucleo/inc/lateral.php`— y el cuerpo vuelve al mismo borde izquierdo
 * que los titulares, la navegación y las tarjetas. Las páginas que no llevan
 * lateral son las que ya llenan el ancho por su cuenta: contacto y el blog son
 * rejillas de tarjetas y reservar cita es un formulario.
 */

/* El ritmo dentro de una página larga.
 *
 * En la portada el ritmo lo dan los rellenos de cada sección. Aquí no hay
 * secciones: hay un texto seguido con titulares dentro, así que el ritmo tiene
 * que salir del espacio ANTES de cada h2. Sin esto, un h2 de 34px separado del
 * párrafo anterior por el interlineado normal no se lee como el principio de
 * nada.
 *
 * El filo va sólo en los h2 y no en los h3: si lo llevaran los dos, una página
 * de servicio saldría con nueve líneas horizontales y parecería una tabla.
 */
.entry-content > h2 {
	margin-top: clamp(3rem, 2rem + 4.2vw, 5.5rem);
	padding-top: clamp(1.25rem, 1rem + 1vw, 1.75rem);
	border-top: 1px solid var(--wp--preset--color--borde);
}

.entry-content > h3 {
	margin-top: clamp(2rem, 1.6rem + 1.7vw, 3rem);
}

/* La marca de la cabecera.
 *
 * El logotipo es un monograma ALTO —proporción 1:0.67—, no un lockup
 * horizontal, y eso obliga a elegir en una barra de navegación: o la cabecera
 * crece, o la marca encoge hasta que «AVANZA ASESORES» deja de leerse.
 *
 * El logotipo de 2026 es casi cuadrado —proporción 0.92— porque el rótulo va
 * DEBAJO del monograma, no cruzándolo como en el anterior. Eso lo hace más alto
 * a igual ancho, pero también lo salva: a tamaño pequeño el rótulo sigue
 * leyéndose como una banda de texto en vez de emborronarse sobre el trazo.
 *
 * A 90px son 83 de alto y la cabecera se queda en 99, casi lo que medía antes.
 * Más grande se come la primera pantalla; más pequeño y «AVANZA ASESORES» deja
 * de distinguirse.
 */
.wp-block-image.av-marca {
	margin: 0;
}

.wp-block-image.av-marca img {
	display: block;
	width: 90px;
	height: auto;
}

/* --------------------------------------------------------- la cabecera --- */

/* La cabecera acompaña al hacer scroll.
 *
 * `sticky` y no `fixed`: así sigue ocupando su sitio en el flujo y no hay que
 * compensar su alto con un relleno en el contenido, que es de donde salen la
 * mitad de los descuadres con las barras fijas.
 *
 * Funciona dentro de `.wp-site-blocks`, que es un flex en columna, porque el
 * contenedor de referencia de un `sticky` es su ancestro con scroll y ese es la
 * página entera.
 *
 * El fondo es imprescindible: sin él, el texto de la página se vería por debajo
 * al pasar. Ya lo trae del bloque (`backgroundColor: base`).
 *
 * --av-cabecera es su alto, y lo usan otras dos cosas que tienen que esquivarla:
 * el `scroll-margin` de los titulares con id —para que al saltar desde el índice
 * no queden ocultos detrás— y el `top` del lateral pegajoso de los servicios.
 * Si cambia el alto de la cabecera, cambia aquí y las tres cosas se enteran.
 */
:root {
	--av-cabecera: 109px;
}

.wp-site-blocks > header {
	position: sticky;
	top: 0;
	z-index: 20;
}

@media (max-width: 700px) {
	:root {
		--av-cabecera: 84px;
	}

	/* La cabecera se partía en dos filas: el nombre arriba, y debajo el menú y
	   el botón. Medido a 375px, el nombre (126) más el menú (24) más el botón
	   (164) más los huecos pasaban de los 327 disponibles.
	   Lo que sobra es el botón, que llevaba el relleno de escritorio: 30px a
	   cada lado para un texto de 15. Con el relleno recortado y el hueco
	   interior a 1rem, la cabecera cabe en una fila hasta en pantallas de 360. */
	header .wp-block-button__link {
		padding-inline: 1.1rem;
		padding-block: 0.65rem;
	}

	header .wp-block-navigation {
		--wp--style--block-gap: 1rem;
	}

	.wp-block-image.av-marca img {
		width: 68px;
	}
}

@media (max-width: 420px) {
	/* Segundo escalón, para pantallas de 360.
	   Medido: con el nombre y el botón un punto más pequeños, la cabecera cabe
	   en una fila desde 360px de ancho, que es el móvil más estrecho que se usa
	   hoy. Por debajo —320px, un iPhone SE de primera generación— vuelve a
	   partirse en dos filas, y se deja así a propósito: para que cupiera habría
	   que recortar el margen lateral de la cabecera, y entonces el nombre del
	   despacho dejaría de caer a plomo sobre el texto de la página. Dos filas
	   no es un fallo; un borde descuadrado sí se ve.

	   El tamaño va en el <a>, no en el <div> del bloque: la clase
	   has-small-font-size de WordPress lleva !important, pero está en el div
	   padre, así que basta con declararlo en el hijo para ganarle. */
	.wp-block-image.av-marca img {
		width: 62px;
	}

	header .wp-block-button__link {
		padding-inline: 0.9rem;
		font-size: 0.875rem;
	}
}

/* ------------------------------------------------------ el menú de arriba --- */

/* El foco del menú no deja recuadro al pulsar con el ratón.
 *
 * Es exactamente lo que pasaba con las preguntas frecuentes, y por el mismo
 * motivo: WordPress pinta tres <button> en la cabecera —las dos flechas de
 * submenú y el icono del menú compacto— y el navegador le pone a un <button> el
 * anillo de foco también cuando se pulsa con el ratón, no solo con el teclado.
 * Abrir «Servicios» dejaba un rectángulo alrededor de la flecha hasta pulsar en
 * otro sitio.
 *
 * Se apaga en `:focus`, no en `:focus-visible`: si el anillo lo dibuja el
 * navegador en el foco a secas, una regla de `:focus-visible` ni llega a
 * aplicarse. Eso ya costó un intento la vez anterior.
 *
 * Y se vuelve a encender justo después para el teclado, que es lo que significa
 * `:focus-visible`: quien navega con el tabulador tiene que seguir viendo dónde
 * está. Va aquí repetido, y no basta con el anillo general de arriba, porque
 * `outline: none` en `:focus` también alcanza al foco del teclado —todo lo que
 * es `:focus-visible` es `:focus`— y hay que ganarle en orden. */
header nav.wp-block-navigation :is(a, button):focus {
	outline: none;
}

header nav.wp-block-navigation :is(a, button):focus-visible {
	outline: 2px solid var(--wp--preset--color--contrast);
	outline-offset: 3px;
	border-radius: 2px;
}

/* El desplegable, en la paleta.
 *
 * El de WordPress viene en blanco puro con un filo gris del 15% y las esquinas
 * a escuadra: los tres detalles que esta web no usa en ningún otro sitio.
 *
 * Va del mismo Hueso que la cabecera, así que el desplegable se lee como la
 * barra estirándose hacia abajo y no como una pieza pegada encima. Lo que lo
 * separa de la página es la sombra, no el color: sobre un fondo del mismo tono
 * hace falta que sea algo más marcada de lo normal.
 *
 * El realce se lo queda el enlace bajo el cursor, que se pinta en Piedra —el
 * tono de las tarjetas—. Así el color solo aparece donde está la mano.
 *
 * El desplegable NO cuelga por debajo de la cabecera: se le monta encima. Sale
 * del borde inferior de los enlaces —que ocupan el alto entero de la barra— y
 * tapa los nueve píxeles que le quedan a la cabecera por debajo, filo incluido.
 *
 * Antes arrancaba a ras de ese filo, y como el desplegable es del mismo Hueso
 * que la cabecera, el filo se leía como una línea cruzándole la tapa. Ahora, al
 * superponerse, la línea se interrumpe donde está el desplegable y la pieza se
 * ve entera: la barra bajando, no algo apoyado debajo.
 *
 * Y no hace falta ningún puente. El submenú se abre y se cierra con
 * `pointerenter`/`pointerleave` sobre el <li>: si entre la etiqueta y el panel
 * quedara un hueco, el puntero lo cruzaría, saldría del <li> y el menú se
 * cerraría en la cara de quien iba a pulsar. Al no haber hueco, no hay nada que
 * cruzar.
 */
/* La barra es el marco de referencia del botón de menú, que en móvil se coloca
   sobre ella fuera de flujo. */
.av-barra {
	position: relative;
}

@media (min-width: 860px) {
	/* Los enlaces de primer nivel ocupan el alto entero de la barra. Así el
	   panel cuelga justo de su borde inferior y no hay hueco que cruzar; de
	   paso el área de pulsación pasa de 44px a los 92 de la barra. */
	/* La cadena de estirados. Entre la barra y el <li> hay tres cajas flex, todas
	   centradas: basta con que una no estire para que el <li> se quede en sus 50px
	   y vuelva a aparecer el hueco muerto. El botón se queda centrado, que es lo
	   único que no debe crecer. */
	header .av-barra > .wp-block-group {
		align-self: stretch;
		align-items: stretch;
	}

	header .av-barra .wp-block-buttons {
		align-self: center;
	}

	header nav.wp-block-navigation {
		align-self: stretch;
	}

	/* Entre <nav> y el <li> WordPress mete cinco envoltorios —el contenedor
	   responsive, el cierre, el diálogo, el contenido y el <ul>—, todos cajas de
	   bloque que se quedan en el alto de su contenido. Se les da el alto entero
	   uno a uno; con que falte uno, la cadena se rompe. */
	header nav.wp-block-navigation {
		align-items: stretch;
	}

	header .wp-block-navigation__responsive-container,
	header .wp-block-navigation__responsive-close,
	header .wp-block-navigation__responsive-dialog,
	header .wp-block-navigation__responsive-container-content,
	header .wp-block-navigation__container {
		height: 100%;
	}

	header .wp-block-navigation__responsive-container-content,
	header .wp-block-navigation__container {
		align-items: stretch;
	}

	header .wp-block-navigation__container > .wp-block-navigation-item {
		align-items: stretch;
	}

	header .wp-block-navigation__container > .wp-block-navigation-item > .wp-block-navigation-item__content {
		display: flex;
		align-items: center;
		padding-block: 0;
	}

	header nav.wp-block-navigation .wp-block-navigation-item.has-child > .wp-block-navigation__submenu-container {
		border: 0;
		background-clip: padding-box;
		background-color: var(--wp--preset--color--base);
		border-radius: 16px;
		box-shadow: 0 12px 32px rgba(33, 26, 23, 0.14);
		padding: 0.75rem;
		/* WordPress lo saca un píxel a la izquierda para que su filo caiga sobre
		   el del enlace. Sin filo, ese píxel es solo un desajuste. */
		left: 0;
	}

	header nav.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
		padding: 0.55rem 0.75rem;
		border-radius: 10px;
	}

	header nav.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover,
	header nav.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item__content:focus-visible {
		background-color: var(--wp--preset--color--blanco);
	}

}

/* El menú compacto no es solo cosa del móvil: llega hasta la tablet.
 *
 * WordPress cambia de menú desplegado a icono en 600px y ese número no se toca
 * desde el bloque. A 768 —una tablet en vertical— la barra no cabía: marca 90
 * más menú 422 más botón 157, con sus huecos, pasan de los 705 disponibles, así
 * que envolvía y la cabecera pasaba de 109px a 184, con la marca en una fila y
 * el menú ancho debajo.
 *
 * El corte se sube a 860, que es donde el menú desplegado empieza a caber con
 * aire de verdad. Entre 600 y 859 se rehacen las dos reglas de WordPress: la
 * que enseña el menú en línea y la que esconde el icono.
 */
@media (min-width: 600px) and (max-width: 859px) {
	.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) {
		display: none;
	}

	.wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: flex;
	}
}

/* La barra en móvil: la marca a la izquierda, «Menú» en el centro y la cita a
   la derecha.
 *
 * Las tres piezas están en dos grupos anidados —la marca por un lado, el menú y
 * el botón por otro—, así que en una fila de flex el menú caía pegado al botón.
 * Con `display: contents` el grupo de en medio desaparece como caja y sus dos
 * hijos pasan a ser casillas de la rejilla de la barra; con `1fr auto 1fr` las
 * dos casillas de los lados miden lo mismo, y eso deja el menú centrado de
 * verdad y no a ojo.
 *
 * Medido a 375px: los lados salen a 127px y el botón mide 105 con el recorte de
 * relleno de más abajo, así que cabe. A 360 también.
 */
@media (max-width: 859px) {
	/* `display: contents` disuelve el grupo de en medio y deja la marca, el menú
	   y el botón como tres hijos de la barra. */
	header .av-barra > .wp-block-group {
		display: contents;
	}

	/* El menú se saca del flujo y se centra sobre la barra.
	 *
	 * Primero se probó con rejilla de `1fr auto 1fr`, que centra la casilla del
	 * medio cuando las de los lados miden lo mismo. Aquí no pueden: la marca mide
	 * 62px y el botón 125, y para que las dos casillas midieran 125 harían falta
	 * 358px de barra cuando a 360 de pantalla solo hay 312. El menú se quedaba a
	 * 172px del borde en una pantalla cuyo centro está en 180.
	 *
	 * Fuera de flujo el centro es el centro, midan lo que midan los lados, y la
	 * marca y el botón se reparten los extremos como ya hacían.
	 *
	 * Se centra con `inset: 0` y márgenes automáticos, no con un `translate`: un
	 * `transform` convierte el elemento en el marco de referencia de todo lo que
	 * lleve dentro con `position: fixed`, y el menú desplegado de móvil es
	 * exactamente eso. Con translate, el panel a pantalla completa salía de 160
	 * por 32 píxeles, encajado dentro del botón. */
	header .av-barra nav.wp-block-navigation {
		position: absolute;
		inset: 0;
		margin: auto;
		width: fit-content;
		height: fit-content;
	}

	/* «Reservar cita» en una línea. En la rejilla el botón se ajusta al ancho de
	   su casilla y partía en dos renglones: la cabecera pasaba de 84px a 90 y el
	   botón se quedaba con la altura de dos líneas y el texto descolocado. */
	header .av-barra .wp-block-button__link {
		white-space: nowrap;
	}

	.wp-block-navigation__responsive-container-open {
		display: flex;
		align-items: center;
		gap: 0.45rem;
	}
}

/* La palabra junto al icono.
 *
 * Un icono de tres rayas se entiende, pero se entiende antes con el nombre al
 * lado. Se pone donde cabe: la palabra son 46px más, y con el menú clavado en
 * el centro esos 46 salen de los dos lados a la vez, 23 por banda, y lo que se
 * come es el hueco con «Reservar cita».
 *
 * Medido con el botón ya recortado: a 400px de pantalla quedan 16 de aire hasta
 * el botón; a 390, once; a 375, nueve; a 360, dos; a 320 se solapan. El corte
 * va en 385, que deja fuera solo las pantallas donde de verdad no cabe y cubre
 * las de hoy —390 del iPhone, 393 y 412 de los Android—. Por debajo se queda el
 * icono solo, que se reconoce igual.
 *
 * El nombre accesible del botón lo pone WordPress con su aria-label, así que
 * esta palabra es solo lo que se ve. */
@media (min-width: 385px) and (max-width: 859px) {
	.wp-block-navigation__responsive-container-open::before {
		content: "Menú";
		font-size: 0.9375rem;
	}
}

/* Con el menú clavado en el centro, quien tiene que ceder es el botón.
   Medido a 360: la marca ocupa hasta 86 y el menú, centrado, va de 145 a 215;
   el botón con el relleno anterior empezaba en 211 y se solapaban cuatro
   píxeles. Con este recorte empieza en 222. */
@media (max-width: 380px) {
	header .wp-block-button__link {
		padding-inline: 0.7rem;
		font-size: 0.8125rem;
	}
}

/* El botón de abrir el menú mide 24×24: el icono de WordPress, sin relleno.
 * Por debajo de los 44×44 del mínimo táctil (WCAG 2.5.5). Y no solo hasta 384px: desde 385 el botón gana la
 * palabra «Menú» al lado (la regla de aquí arriba) y se ensancha de sobra en
 * ancho, pero el alto se queda en 24 en todo el rango donde existe la
 * hamburguesa —hasta 859px, el corte que esta misma hoja sube más abajo—.
 * Medido a 390 y a 412, los dos anchos de móvil reales que antes se quedaban
 * fuera del `@media` de 384: la caja seguía en 24 de alto.
 *
 * El relleno con margen negativo de siempre —`padding` de sobra y el mismo
 * valor en negativo en `margin`— solo se aplica aquí en el eje vertical
 * (`padding-block`/`margin-block`), no en el horizontal: probado con los dos
 * ejes a la vez, el `<nav>` que envuelve el botón no cancelaba el margen
 * negativo al calcular su propio `fit-content` como sí parece hacerlo en el
 * eje vertical, y crecía 10px de ancho a cada lado —de 69,5 a 89,5px a
 * 390—, con el `<nav>`, centrado sobre toda la barra, empujado hacia el
 * icono de llamar hasta metérsele dentro de su borde. Con solo el eje
 * vertical no pasa: el ancho del botón no se toca —ya sobra, por la
 * palabra— y el alto crece a 44 sin mover un píxel el ancho que decide
 * dónde se centra el `<nav>`. */
@media (min-width: 385px) and (max-width: 859px) {
	.wp-block-navigation__responsive-container-open {
		box-sizing: border-box;
		padding-block: 10px;
		margin-block: -10px;
		overflow: visible;
	}
}

/* Esto sí es solo de los anchos más estrechos, hasta 384px, donde el botón
 * es únicamente el icono (sin la palabra «Menú»).
 *
 * Ensancharlo con `min-width`/`min-height` a secas no vale: el `<nav>` que lo
 * envuelve mide `fit-content` y se centra sobre la barra con
 * `inset: 0; margin: auto`, así que un botón más ancho agranda el `<nav>` y
 * el centrado lo reparte a partes iguales a los dos lados. A 360 eso empuja
 * el borde izquierdo hacia el botón de llamar —que ya lo roza en 7px por
 * diseño— y lo tapa.
 *
 * Por eso el `<nav>` se fija a los 24×24 de siempre —el tamaño real del
 * icono, no un número inventado— y es el botón, dentro, el que crece con la
 * regla de arriba: mismo tamaño de caja para el centrado, área de toque real
 * de 44×44. El resultado no roza el botón de llamar más de lo que ya lo
 * hacía y deja 5px libres antes de «Reservar cita».
 *
 * Solo hasta 384px: a partir de 385 el botón lleva la palabra «Menú» al lado
 * y ya no mide 24 de ancho, así que fijar el `<nav>` a ese tamaño le
 * cortaría sitio a la palabra y lo descentraría.
 *
 * El selector es a propósito el mismo que el de `header .av-barra
 * nav.wp-block-navigation` de la sección «la barra en móvil» (arriba, dentro
 * de su propio `@media (max-width: 859px)`), que fija ese mismo `<nav>` a
 * `width: fit-content; height: fit-content`. Las dos reglas matchean a la
 * vez por debajo de 384px y, ya con el mismo selector, la especificidad
 * queda empatada: gana quien va después en la hoja, que es esta regla —así
 * que el `!important` no hace falta para ganar la cascada hoy.
 *
 * Se deja de todos modos, comprobado sin él: son dos reglas con un propósito
 * distinto que no tienen por qué seguir una detrás de otra —centrar el
 * `<nav>` entero, fijarlo a 24×24 para este arreglo táctil— y nada ata su
 * orden en el archivo. Sin `!important`, mover cualquiera de los dos bloques
 * en un cambio futuro rompería el área de toque en silencio; con él, el
 * `<nav>` se queda en 24×24 aquí gane quien gane el orden. */
@media (max-width: 384px) {
	header .av-barra nav.wp-block-navigation {
		width: 24px !important;
		height: 24px !important;
	}

	/* Aquí sí en los dos ejes: sin la palabra «Menú», el botón es cuadrado y
	   le falta tanto ancho como alto. Con el `<nav>` ya fijado arriba, no hay
	   fit-content del que tirar: da igual que el margen negativo cancele o
	   no el ancho, la caja que centra el botón es siempre 24×24. */
	.wp-block-navigation__responsive-container-open {
		box-sizing: border-box;
		padding: 10px;
		margin: -10px;
		overflow: visible;
	}
}

/* La equis que cierra el menú a pantalla completa es el mismo icono de
 * WordPress, 24×24 y sin relleno. Aquí no hay ningún centrado del que tirar
 * —va con `position: absolute; top: 0; right: 0` dentro del panel, que a esa
 * escala sobra de espacio alrededor—, así que basta con el relleno, sin el
 * negativo que hace falta en el botón de abrir. */
.wp-block-navigation__responsive-container-close {
	box-sizing: border-box;
	padding: 10px;
}

/* ----------------------------------------------- el formulario de reserva --- */

/* Amelia se dibuja dentro de un contenedor propio y todo lo suyo viene con una
 * especificidad alta —un id más tres clases—, así que lo poco que le tocamos
 * hay que escribirlo igual de específico. Y solo eso: el resto lo lleva su
 * panel, y la paleta se la pasa el plugin (avanza-nucleo/inc/amelia.php).
 */

/* El formulario ocupa el carril ancho. En la columna de lectura se quedaba en
   640px, y Amelia reparte ahí dentro una barra lateral de pasos y el
   calendario: con ese ancho los cuatro campos del formulario salían a 156px
   cada uno, que no es un campo, es una casilla. */
.av-reserva .amelia-v2-booking {
	max-width: none;
}

/* En móvil, de borde a borde de la pantalla.
 *
 * No es un capricho: Amelia mira el ancho de SU contenedor y por debajo de
 * 340px se cambia a la maquetación más pequeña que tiene —etiquetas de 12px,
 * celdas de calendario de 41— que es lo que se veía diminuto. Con los márgenes
 * de la página, en un móvil de 375 el contenedor se quedaba en 327 y caía justo
 * del lado malo de ese número.
 *
 * A sangre son 375, y con eso Amelia usa su escalón normal. El `!important` es
 * el de siempre: las reglas de maquetación de WordPress fijan los márgenes
 * laterales de los hijos del contenido con esa marca. */
@media (max-width: 599px) {
	.av-reserva {
		width: 100vw;
		margin-inline: calc(50% - 50vw) !important;
	}
}

/* El nombre cede sitio a los apellidos: 40 y 60 en vez de 50 y 50.
 *
 * Un nombre de pila cabe de sobra en menos de la mitad y los dos apellidos que
 * se usan aquí no: «Rodríguez Roldán» ya son dieciséis caracteres, y en 216px
 * se cortaba a media escritura.
 *
 * El `:not(...)` no es adorno. Cuando el formulario es estrecho, Amelia le pone
 * al contenedor la clase `-mobile` y pasa todos los campos al 100%; esta regla,
 * que es más específica, se lo comería y dejaría los campos a media anchura en
 * el móvil. */
.amelia-v2-booking #amelia-container .am-fs__info-form:not(.am-fs__info-form-mobile) .el-form-item.am-info-first-name {
	width: calc(40% - 12px);
}

.amelia-v2-booking #amelia-container .am-fs__info-form:not(.am-fs__info-form-mobile) .el-form-item.am-info-last-name {
	width: calc(60% - 12px);
}

/* El correo y el teléfono, cada uno en su línea.
 *
 * Amelia pone todos los campos al 50% y los va emparejando: nombre con
 * apellidos —que son cortos y casan— pero también correo con teléfono, que son
 * justo los dos que más se escriben y los que más largos salen. Un correo no
 * cabe en media línea.
 *
 * El correo trae clase propia; el teléfono no, así que se le reconoce por el
 * envoltorio con el selector de país que lleva dentro. */
.amelia-v2-booking #amelia-container .am-fs__info-form .el-form-item.am-info-email,
.amelia-v2-booking #amelia-container .am-fs__info-form .el-form-item:has(.am-input-phone-wrapper) {
	width: 100%;
}

/* Tres controles del calendario por debajo de los 44×44 del mínimo táctil
 * (WCAG 2.5.5): las flechas de mes (36×36), el selector de mes y el de año
 * (36 de alto) y el botón «Continuar» (40 de alto). Los tres son botones o
 * campos de verdad —no texto suelto como las migas— así que `min-width` y
 * `min-height` de sobra: ya vienen centrados por dentro con flex, y crecer
 * no les desplaza el icono ni el texto. */
.amelia-v2-booking #amelia-container [aria-label="previous month"],
.amelia-v2-booking #amelia-container [aria-label="next month"] {
	min-width: 44px;
	min-height: 44px;
}

.amelia-v2-booking #amelia-container .el-select__wrapper {
	min-height: 44px;
}

/* El propio `<input>` del desplegable —de solo lectura, invisible, y ahí solo
 * para que el teclado y el lector de pantalla tengan combobox— cuenta aparte
 * para el guión de áreas táctiles porque es un `<input>` de verdad. Lo que se
 * ve y se pulsa es el texto en `.el-select__placeholder`, del mismo tamaño
 * que el envoltorio de arriba; esto solo hace que el elemento invisible mida
 * lo mismo. Amelia le fija `height: 24px` con una regla tan específica como
 * esta y cargada después, así que sin `!important` se queda en 24. */
.amelia-v2-booking #amelia-container .el-select__input {
	min-height: 44px !important;
}

.amelia-v2-booking #amelia-container .am-button-continue {
	min-height: 44px;
}

/* ------------------------------------------------------------ las fotos --- */

/* Las fotos se recortan por CSS, no al generarlas.
 *
 * Los originales son 16:9, que a 1160px de ancho son 652px de alto: demasiado
 * para una banda dentro de una página. Recortarlos al generarlos habría sido lo
 * eficiente, pero deja el encuadre congelado: cualquier ajuste obliga a rehacer
 * los cuatro tamaños y a volver a mirar si se corta una cabeza.
 *
 * Con `object-fit: cover` el navegador recorta y el alto se ajusta a la
 * pantalla. Se pagan unos kilobytes de imagen que no se ven, y a cambio el
 * encuadre se toca aquí, en una línea.
 *
 * `object-position` centra en horizontal y sube el encuadre al 32% en vertical:
 * en las dos fotos lo que importa —la cara y el logotipo— está en la mitad de
 * arriba, y un recorte centrado se comía la cabeza.
 */
.av-foto {
	margin-block: clamp(2.5rem, 1.8rem + 3vw, 4rem) 0;
}

/* El selector lleva también .wp-block-image: la hoja de WordPress declara
   `height: auto` para las imágenes de bloque con la misma especificidad que
   `.av-foto img`, y ganaba por orden de encolado. Sin esto la foto sale a su
   alto natural —651px a 1160 de ancho— y no se recorta nada. */
.wp-block-image.av-foto img {
	display: block;
	width: 100%;
	height: clamp(220px, 32vw, 440px);
	object-fit: cover;
	object-position: center 32%;
	border-radius: 16px;
}

/* Las ilustraciones de los servicios, enteras.
 *
 * Las fotos se recortan a banda (arriba). Una ilustración no: está compuesta
 * para verse entera, y a 1160×440 una 3:2 pierde la mitad —la de laboral, vista
 * desde arriba, se quedaba sin cabezas—. Van a su proporción, centradas y a 720px
 * como mucho, que a esa medida el trazo se ve limpio.
 *
 * El fondo de las ilustraciones es un blanco roto (#fbfaf5) algo más claro que
 * el Hueso de la página: con el mismo radio que las fotos se lee como una hoja
 * apoyada, no como un recuadro mal ajustado.
 */
.wp-block-image.av-foto.av-ilustracion {
	/* El marco de las fotos de «Sobre nosotros» y de la fundadora: todo el
	   ancho y 16:9. A 720px sueltas se veían de otra familia, más pequeñas que
	   cualquier foto de la web (21/09/2026). La ilustración va entera dentro,
	   centrada, y el sobrante de los lados se rellena con el blanco roto de su
	   propio papel: se lee como una lámina, no como una imagen con bandas.
	   El color es el del dibujo, no de la paleta, por eso no va por token. */
	aspect-ratio: 16 / 9;
	background: #fbfaf5;
	border-radius: 16px;
	overflow: hidden;
}

.wp-block-image.av-foto.av-ilustracion img {
	width: 100%;
	height: 100%;
	object-fit: contain;
	object-position: center;
	border-radius: 0;
}

/* El recorte de Alba en la banda de inicio.
 *
 * Va con la altura fijada y el ancho automático, al revés que las demás fotos:
 * es un recorte sin fondo y lo que manda es cuánto ocupa ella de alto en la
 * banda, no cuánto ancho tiene su columna. Con `width: 100%` se estiraría hasta
 * llenar la columna y la banda pasaría de 900px de alto.
 *
 * Pegada abajo y a la derecha, y sin margen inferior: el archivo está recortado
 * hasta el borde a propósito, para que se apoye en la base de la banda en vez
 * de flotar.
 */
.wp-block-image.av-heroe-foto {
	margin: 0;
}

/* La altura manda, y el ancho la sigue: el recorte es estrecho —780×1251— así
   que subir la altura es la única forma de que ella ocupe más.
   El tope son 500px, y no es estético: por encima de 560 los botones de la
   banda caen fuera de una pantalla de 900, y la llamada a reservar tiene que
   verse sin hacer scroll. La cuenta está en el commit. */
.wp-block-image.av-heroe-foto img {
	display: block;
	width: auto;
	height: clamp(300px, 36vw, 500px);
	margin-left: auto;
	border-radius: 0;
}

@media (max-width: 781px) {
	/* Apiladas, la foto va debajo del texto y centrada. */
	.wp-block-image.av-heroe-foto img {
		height: 300px;
		margin-inline: auto;
	}

	/* Y la columna del texto pierde su relleno inferior. En escritorio hace
	   falta —la foto está al lado y el titular tocaría el borde de la banda—,
	   pero apiladas la foto va debajo y ese relleno se suma al hueco entre
	   columnas: 96px de vacío entre la entradilla y la foto.
	   Lleva !important porque el relleno es un estilo en línea de la plantilla. */
	.av-heroe > .wp-block-column:first-child {
		padding-bottom: 0 !important;
	}
}

/* La banda de inicio va centrada entera —titular, entradilla y llamadas—
   mientras el resto de la página arranca del borde izquierdo. La regla que hace
   que eso se lea como una decisión y no como un descuido: **las bandas de color
   van centradas, el cuerpo de la página va a la izquierda**. Las dos bandas de
   avena, la de arriba y la del final, se comportan igual. */

/* ------------------------------------- el lateral de las páginas de servicio --- */

/* Dos columnas: el texto a la izquierda y, a la derecha, el índice de secciones
 * y la llamada a reservar, que acompañan al hacer scroll.
 *
 * Es la otra respuesta al vacío de la derecha —la «B» de docs/maquetacion.md—.
 * Aquí sale a cuenta porque hay contenido de verdad que poner: estas son las
 * únicas páginas de la web con intención de compra, y antes la llamada iba al
 * final del texto, donde solo la ve quien llega abajo.
 *
 * La rejilla se monta sobre `.entry-content` y no sobre un contenedor propio
 * porque el lateral lo inserta el plugin dentro del contenido: no hay ningún
 * sitio en la plantilla donde ponerlo.
 *
 * Se entra a 1100px, igual que la indentación: por debajo el lateral se queda
 * en el flujo, justo después de la entradilla y la foto, que para un índice es
 * exactamente donde se necesita.
 */
.av-lateral {
	margin-block: 2.5rem;
}

/* El índice es una tarjeta. Antes era texto suelto separado de la reserva por un
   filo; ahora está solo en el lateral y el filo no separaba de nada. */

.av-indice ul {
	margin: 0;
	padding: 0;
	list-style: none;
}

.av-indice li + li {
	margin-top: 0.5rem;
}

.av-indice a {
	font-size: var(--wp--preset--font-size--small);
	text-decoration: none;
	/* El área de toque de un enlace de lista se queda en 20px de alto. El
	   relleno de un elemento en línea crece fuera de su línea, así que sube a 26
	   sin separar el índice. */
	padding-block: 3px;
}

.av-indice a:hover,
.av-indice a:focus-visible {
	text-decoration: underline;
}

@media (min-width: 1100px) {
	body.av-con-lateral .entry-content {
		display: grid;
		grid-template-columns: minmax(0, 640px) minmax(0, 1fr);
		column-gap: 3.75rem;
	}

	/* Todo al carril de lectura salvo lo que se declare ancho, que cruza las dos
	   columnas. La foto de la página va antes que el lateral, así que cruzar no
	   la solapa con nada.
	   Los márgenes automáticos hay que anularlos: WordPress se los pone a los
	   hijos para centrarlos, pero en una rejilla un margen automático ENCOGE el
	   elemento hasta su contenido en vez de centrarlo. Sin esto, los titulares
	   salían del ancho de su texto —209px— y con ellos el filo de sección, y la
	   foto se quedaba en 660 en vez de cruzar. */
	body.av-con-lateral .entry-content > * {
		grid-column: 1;
		margin-inline: 0 !important;
		max-width: none;
	}

	body.av-con-lateral .entry-content > .alignwide,
	body.av-con-lateral .entry-content > .alignfull {
		grid-column: 1 / -1;
	}

	/* Salvo las que van DEBAJO del lateral, que se quedan en la columna de
	 * lectura.
	 *
	 * Un bloque ancho ocupa las dos columnas, y el lateral ocupa la derecha
	 * durante toda la página: las dos cosas no caben a la vez. Gana el bloque
	 * ancho y el lateral se queda con las filas de antes, así que en sobre
	 * nosotros —que tiene una rejilla de tarjetas en mitad del texto— medía 426
	 * píxeles de alto en una página de 3.596. Una caja pegajosa solo se despega
	 * dentro de su contenedor: con 426 de recorrido, el índice se movía un
	 * palmo y se quedaba quieto el resto de la página.
	 *
	 * Encima del lateral no hay conflicto —la foto de las páginas de servicio va
	 * antes— y por eso esas sí cruzan. */
	body.av-con-lateral .entry-content > .av-lateral ~ .alignwide,
	body.av-con-lateral .entry-content > .av-lateral ~ .alignfull {
		grid-column: 1;
	}

	/* «Cuéntanos tu caso» cierra la página centrada en el ancho entero, no
	 * pegada al borde izquierdo del texto. Es lo último que hay, así que cruzar
	 * las dos columnas aquí no le quita recorrido al lateral: cuando llega, ya
	 * ha acompañado toda la lectura.
	 *
	 * El `!important` del margen no es un capricho: la regla de arriba pone
	 * `margin-inline: 0 !important` a todos los hijos para que los márgenes
	 * automáticos de WordPress no encojan los elementos dentro de la rejilla. */
	body.av-con-lateral .entry-content > .av-entrada-cta {
		grid-column: 1 / -1;
		width: min(640px, 100%);
		margin-inline: auto !important;
	}

	/* El `span 999` es lo que hace que el lateral llegue hasta el final del
	   texto. Sin él ocuparía una sola fila y el sticky no tendría recorrido: una
	   caja pegajosa solo se despega dentro de su propio contenedor. */
	body.av-con-lateral .entry-content > .av-lateral {
		grid-column: 2;
		grid-row: span 999;
		margin-block: 0;
	}

	/* Cuando la página lleva foto, el lateral arranca a la misma altura que el
	 * primer titular, no pegado a ella.
	 *
	 * El lateral se inserta justo antes del primer h2. Si encima hay una foto
	 * —que cruza las dos columnas—, el lateral cae en la fila siguiente y sin
	 * margen se le quedaba tocando: cero píxeles, mientras el texto de al lado
	 * respiraba 88. Es el mismo clamp que el margen superior de
	 * `.entry-content > h2`, para que los dos suban y bajen a la vez.
	 *
	 * En una página sin foto no hace falta y además estorba: ahí el lateral cae
	 * en la primera fila, al lado de la entradilla, y el margen lo dejaría
	 * empezando a media altura del párrafo en vez de a la altura de su primera
	 * línea. */
	body.av-con-lateral .entry-content:has(> .wp-block-image) > .av-lateral {
		margin-top: clamp(3rem, 2rem + 4.2vw, 5.5rem);
	}

	/* El pegajoso va DENTRO, no en el elemento de la rejilla: ese se estira para
	   llenar las filas que abarca, y un elemento que ya ocupa todo su hueco no
	   tiene de dónde despegarse. */
	.av-lateral-interior {
		position: sticky;
		top: calc(var(--av-cabecera) + 2rem);
	}
}

/* El número de cada paso: cifras tabulares, para que 01, 02 y 03 ocupen
   exactamente lo mismo y los tres pasos arranquen alineados.
   NO lleva color propio. La primera versión lo puso en Taupe, que sobre el
   fondo se queda en 2.79: vale para un filo y no para texto, y un «01» sí
   transmite información. Hereda el color del cuerpo, que da 6.01. */
.av-paso {
	font-variant-numeric: tabular-nums;
}

/* La imagen de marca: en el carril ancho y SIN recortar.
 *
 * Estuvo a sangre y se veía mal: a 1440 son 1440x648 desde un archivo de 2400,
 * o sea escalando por encima de lo que da, y el recorte apaisado además pedía
 * anclarlo arriba para no cortar ni la cabeza ni el rótulo.
 *
 * En el carril mide 1160x650 y se ve entera. Es alta para una página de texto,
 * pero es lo que pide su composición: el logotipo ocupa la mitad izquierda con
 * el rótulo debajo y ella la derecha, así que cualquier ventana más apaisada
 * corta una de las dos cosas.
 *
 * Conserva el radio de 16px que le da `.av-foto`. Lo perdía de cuando iba a
 * sangre, donde una esquina redonda no tiene sentido; dentro del carril sí lo
 * tiene, y así las dos fotos de Alba —esta y la del despacho— se recortan
 * igual. La clase sigue existiendo por lo que dice el párrafo de arriba: esta
 * imagen no se puede recortar sin partir el rótulo.
 */
.wp-block-image.av-foto-marca img {
	height: auto;
	object-fit: fill;
}

/* La foto de «quién está detrás» NO se recorta.
 *
 * El primer intento la recortaba más alta, como las bandas, y con eso el
 * logotipo de la pared quedaba partido por la mitad: peor que no salir. El
 * problema no era la posición del encuadre sino la proporción —a esa altura la
 * ventana de recorte es más estrecha que la composición de la foto—, así que
 * aquí se deja entera. La foto ya está compuesta: logotipo a la izquierda, ella
 * a la derecha. */
.wp-block-image.av-foto-retrato img {
	height: auto;
	object-fit: fill;
}

/* ------------------------------------------------ la firma de las entradas --- */

/* Foto, nombre y biografía de quien firma, en una fila.
 *
 * La foto es un cuadrado de la toma de Alba en el despacho, con la taza, que
 * eligió para la firma; la recorta bin/firma.php y el redondo se hace aquí. El
 * fondo es el de la web y solo se ve mientras carga, en vez de un hueco del
 * color de la tarjeta. No sale de Gravatar: ver avanza_foto_autor().
 *
 * El nombre va en la letra de los titulares porque es lo que se busca con la
 * vista al llegar al pie; la biografía y el enlace, un punto por debajo del
 * texto del artículo, que ya se ha terminado de leer. */
.av-autor {
	display: flex;
	align-items: center;
	gap: 1.25rem;
}

.av-autor-marco {
	flex: none;
	line-height: 0;
}

.av-autor-foto {
	display: block;
	width: 5rem;
	height: 5rem;
	border-radius: 50%;
	background: var(--wp--preset--color--base);
	object-fit: cover;
}

.av-autor-texto {
	display: grid;
	gap: 0.2rem;
	min-width: 0;
}

.av-autor-texto > p {
	margin: 0;
}

.av-autor-nombre {
	font-family: var(--wp--preset--font-family--titulos);
	font-size: var(--wp--preset--font-size--large);
	line-height: 1.2;
}

.av-autor-bio,
.av-autor-enlace {
	font-size: var(--wp--preset--font-size--small);
}

.av-autor-texto > .av-autor-enlace {
	margin-top: 0.35rem;
}

/* En un móvil estrecho la foto baja un tamaño y se alinea arriba: con la
 * biografía partida en tres renglones, centrada quedaba flotando a media
 * altura del texto. */
@media (max-width: 480px) {
	.av-autor {
		align-items: flex-start;
		gap: 1rem;
	}

	.av-autor-foto {
		width: 3.75rem;
		height: 3.75rem;
	}
}

/* La zona de actuación, en dos columnas de tres
 * ---------------------------------------------
 * Seis municipios uno debajo de otro hacían la tarjeta más alta que las de
 * servicios y la dejaban medio vacía a la derecha. Rellenando por columnas y no
 * por filas, cada columna se lee de arriba abajo: primero los tres más cerca del
 * despacho, en Guadalajara, y luego el resto.
 *
 * Sigue siendo una lista: un lector de pantalla anuncia «lista, seis elementos»
 * en vez de leer seis líneas sueltas. Se queda en dos columnas también en el
 * móvil; «Cabanillas del Campo» parte en dos renglones y se lee bien. */
.av-tarjeta .av-zona-lista {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	grid-template-rows: repeat(3, auto);
	grid-auto-flow: column;
	gap: 0.35rem 1.5rem;
	margin: 0;
	padding: 0;
	list-style: none;
}

.av-tarjeta .av-zona-lista > li {
	margin: 0;
}

/* Instagram en la portada
 * -----------------------
 * Tres fotos en fila también en el móvil: es la cuadrícula del propio perfil, y
 * así se reconoce de un vistazo qué es sin leer el título. Apiladas, tres fotos
 * a todo lo ancho eran tres pantallas de scroll para llegar al blog.
 *
 * En 4:5, que es el formato vertical de Instagram: el recorte se hace al
 * descargarlas (avanza-nucleo/inc/instagram.php) y aquí `aspect-ratio` solo
 * reserva el hueco para que la página no salte al cargar.
 *
 * El gesto al pasar es el de las tarjetas, con la misma sombra en el tono de la
 * tinta: son piezas que llevan a un sitio, igual que ellas. */
.av-instagram-rejilla {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: var(--wp--preset--spacing--30);
	margin: 0;
	padding: 0;
	list-style: none;
}

.av-instagram-rejilla > li {
	margin: 0;
}

.av-instagram-enlace {
	display: block;
	overflow: hidden;
	border-radius: 16px;
	background: var(--wp--preset--color--superficie);
	transition: transform 0.18s ease, box-shadow 0.18s ease;
}

.av-instagram-enlace:hover,
.av-instagram-enlace:focus-visible {
	transform: translateY(-2px);
	box-shadow: 0 8px 24px rgba(33, 26, 23, 0.12);
}

.av-instagram-enlace:focus-visible {
	outline: 2px solid var(--wp--preset--color--accion);
	outline-offset: 3px;
}

.av-instagram-enlace img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 5;
	object-fit: cover;
}

/* El botón lleva delante el glifo de Instagram: con él se sabe adónde lleva
 * antes de leerlo. Flex para que icono y texto compartan línea media; con
 * `vertical-align` el icono quedaba un par de píxeles por encima. */
.av-boton-instagram > .wp-block-button__link {
	display: inline-flex;
	align-items: center;
	gap: 0.6rem;
}

.av-boton-icono {
	flex: none;
}

/* En el móvil cada foto mide poco más de 100px: el radio y el hueco de
 * escritorio se comían media foto. */
@media (max-width: 599px) {
	.av-instagram-rejilla {
		gap: 0.5rem;
	}

	.av-instagram-enlace {
		border-radius: 8px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.av-instagram-enlace {
		transition: none;
	}

	.av-instagram-enlace:hover,
	.av-instagram-enlace:focus-visible {
		transform: none;
	}
}

/* Los campos del formulario de reserva, sin el recuadro del tema.
 * ---------------------------------------------------------------
 * El tercer caso del mismo recuadro, después de las preguntas frecuentes y del
 * menú. Esta vez no es el navegador: es nuestro anillo general de arriba. Un
 * campo de texto cuenta como `:focus-visible` también al pulsarlo con el ratón
 * —se va a escribir en él con el teclado—, así que cada clic en «Nombre»,
 * «Apellidos» o «Correo» dibujaba un rectángulo oscuro a 3px del campo, por
 * dentro de su propio borde.
 *
 * Aquí sí se puede apagar en todos los casos, teclado incluido, porque el
 * campo no se queda sin señal: Amelia marca el activo oscureciendo su borde
 * (`.el-input__wrapper.is-focus`, en el color primario que le pone
 * avanza-nucleo/inc/amelia.php). Su propio `outline: none` perdía contra el
 * nuestro por especificidad; con la clase del formulario delante gana.
 *
 * Solo campos: los botones del calendario y el «Continuar» no dibujan anillo al
 * pulsarlos con el ratón y necesitan el suyo para el teclado. */
.amelia-v2-booking :is(input, textarea):focus {
	outline: none;
}

/* ------------------------------------------- aparición al hacer scroll --- */

/* Ver assets/js/revelar.js. Solo opacidad y desplazamiento: no mueven nada de
   sitio en el cálculo de la página, así que no provocan saltos (CLS). */
.av-revelar {
	opacity: 0;
	transform: translateY(16px);
	transition: opacity 0.5s ease, transform 0.5s ease;
}

.av-revelar.av-revelado {
	opacity: 1;
	transform: none;
}

/* Las tarjetas que van en fila no aparecen a la vez: la segunda, un poco después. */
.wp-block-column + .wp-block-column.av-revelar {
	transition-delay: 0.08s;
}

@media print {
	.av-revelar {
		opacity: 1;
		transform: none;
	}
}
