/**
 * PSLEGAL — hoja de estilo del sitio.
 *
 * Orden del archivo:
 *   0. Variables y base
 *   1. Utilidades de composición
 *   2. Tipografía del sitio
 *   3. Botones
 *   4. Cabecera y menú
 *   5. Portada
 *   6. Bandas y encabezados de sección
 *   7. Tarjetas, pasos, áreas, equipo
 *   8. Imágenes y sus animaciones
 *   9. Blog, formularios, preguntas
 *  10. Pie de página y botón de WhatsApp
 *  11. Animaciones de entrada
 *  12. Responsive
 */

/* =========================================================================
 * 0. Variables y base
 * ========================================================================= */

:root {
	/* Colores de marca. El azul sale del manual: #1F2D52. */
	--ps-navy: #1F2D52;
	--ps-navy-deep: #182340;
	--ps-navy-soft: #3A4A7A;
	--ps-paper: #FFFFFF;
	--ps-bone: #F6F7F9;
	--ps-gray-700: #4A4F5A;
	--ps-gray-500: #767C88;
	--ps-gray-200: #E6E6EA;
	--ps-gray-100: #F2F3F5;

	/*
	 * El acento cambia desde el panel (Apariencia › PSLEGAL › Marca).
	 * --ps-accent es el color decorativo; --ps-accent-ink es la versión que
	 * sí se puede leer sobre blanco. Son dos porque la plata del logotipo,
	 * usada como texto, no llega al contraste mínimo.
	 */
	--ps-accent: #FF7A00;
	--ps-accent-ink: #B75700;
	--ps-accent-soft: #FFC38C;
	--ps-metal: linear-gradient(135deg, #FFB870 0%, #FF7A00 45%, #FFCA9E 60%, #DB6900 100%);

	/*
	 * El color de los botones que tienen que llamar la atención: WhatsApp,
	 * «Consulta ahora», «Agendar». Va aparte del acento a propósito. El acento
	 * es decoración —filetes, iconos— y puede ser tan suave como quiera la
	 * marca; este tiene un solo trabajo, que es que se vea. Todos estos valores
	 * los vuelve a escribir el panel (Apariencia › PSLEGAL › Diseño): lo de aquí
	 * es lo que se ve si el panel nunca se toca.
	 */
	--ps-cta: #FF7A00;
	--ps-cta-deep: #D66600;
	--ps-cta-soft: #FFD7B2;
	/*
	 * Tinta oscura y no blanca: sobre el naranja #FF7A00, el blanco da 2,61 de
	 * contraste —muy por debajo del mínimo legible de 4,5— y el azul marino da
	 * 6,15. La maqueta llevaba el texto en blanco; en pantalla no se lee, así
	 * que va en azul. Es además el valor que calcula solo el panel, de modo que
	 * el archivo y el panel dicen lo mismo en lugar de contradecirse.
	 */
	--ps-cta-ink: #16203C;

	/* WhatsApp sigue al color de botón salvo que en el panel se pida su verde. */
	--ps-wa: var(--ps-cta);
	--ps-wa-deep: var(--ps-cta-deep);
	--ps-wa-ink: var(--ps-cta-ink);

	--ps-line: 1px solid var(--ps-gray-200);
	--ps-ease: cubic-bezier(0.16, 1, 0.3, 1);
	--ps-shell: 1240px;
	--ps-header-h: 136px;
	/* La altura que acaba midiendo la cabecera. La escribe el JS; aquí solo
	   se declara el valor de partida por si el JS no llega a ejecutarse. */
	--ps-header-real: var(--ps-header-h);
	--ps-radius: 3px;
	--ps-shadow: 0 1px 2px rgba(31, 43, 79, .04), 0 8px 24px rgba(31, 43, 79, .06);
	--ps-shadow-lg: 0 2px 6px rgba(31, 43, 79, .06), 0 24px 60px rgba(31, 43, 79, .12);
}

/* Variante dorada del acento. La pone el panel en el <body>. */
body.ps-accent-oro {
	--ps-accent: #A8894F;
	--ps-accent-ink: #8A6D34;
	--ps-accent-soft: #E4D5BA;
	--ps-metal: linear-gradient(135deg, #E4CFA5 0%, #A8894F 45%, #F0E2C4 60%, #8A6D34 100%);
}

* { box-sizing: border-box; }

html {
	scroll-behavior: smooth;
	/*
	 * Sin esto, un enlace a un ancla deja el título justo debajo de la cabecera
	 * pegada, que es como no haber saltado a ninguna parte.
	 */
	scroll-padding-top: calc(var(--ps-header-real) + 16px);
	/*
	 * iOS agranda por su cuenta el texto de algunos bloques al girar el
	 * teléfono. Con esto el tamaño es el que dice la hoja de estilo, siempre.
	 */
	-webkit-text-size-adjust: 100%;
	text-size-adjust: 100%;
}

@media (prefers-reduced-motion: reduce) {
	html { scroll-behavior: auto; }
	*, *::before, *::after {
		animation-duration: .001ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: .001ms !important;
	}
}

body {
	margin: 0;
	background: var(--ps-paper);
	color: var(--ps-navy);
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	overflow-x: hidden;
}

img, video, svg, iframe, table { max-width: 100%; }
img, video { height: auto; display: block; }
iframe { border: 0; }

/*
 * Una dirección de correo larga, una URL o el nombre de una ley no se pueden
 * partir por sílabas: en una pantalla de 320 px empujan la página entera hacia
 * la derecha y aparece la barra horizontal. Aquí se les autoriza a partirse.
 */
:where(h1, h2, h3, h4, p, li, a, span, dd, dt, td, th, summary) { overflow-wrap: break-word; }

/*
 * WordPress puede dejar un párrafo vacío alrededor de un shortcode que
 * devuelve un bloque. No se ve, pero dentro de una retícula o de un flex
 * cuenta como celda y descoloca lo que viene detrás.
 */
p:empty { display: none; }

::selection { background: var(--ps-navy); color: #fff; }

/*
 * Medida por defecto de los iconos. Cada sitio donde se usan les da la suya,
 * pero sin esta línea un icono suelto se pintaría a tamaño completo: el SVG no
 * tiene alto ni ancho propios, solo su lienzo de coordenadas.
 */
.ps-ico { width: 1.25em; height: 1.25em; flex: none; }

:where(a, button, summary):focus-visible {
	outline: 2px solid var(--ps-accent-ink);
	outline-offset: 3px;
	border-radius: 2px;
}

/* Salto al contenido, para teclado y lectores de pantalla. */
.ps-skip {
	position: absolute;
	left: -9999px;
	top: 0;
	z-index: 999;
	padding: 12px 20px;
	background: var(--ps-navy);
	color: #fff;
	font-size: .875rem;
}
.ps-skip:focus { left: 12px; top: 12px; }

/* Barra de progreso de lectura. */
.ps-progress {
	position: fixed;
	inset: 0 0 auto 0;
	height: 2px;
	background: var(--ps-metal);
	transform: scaleX(0);
	transform-origin: 0 50%;
	z-index: 60;
	pointer-events: none;
}

/* =========================================================================
 * 1. Utilidades de composición
 * ========================================================================= */

.ps-shell {
	width: 100%;
	max-width: var(--ps-shell);
	margin-inline: auto;
	padding-inline: clamp(20px, 5vw, 48px);
}

.ps-section {
	position: relative;
	padding-block: clamp(64px, 9vw, 120px);
}

.ps-section--tight { padding-block: clamp(44px, 6vw, 76px); }

/* Bandas de color. Se alternan para que la página respire. */
.ps-band-bone { background: var(--ps-bone); }
.ps-band-gray { background: var(--ps-gray-100); }
.ps-band-navy {
	background: var(--ps-navy);
	color: #fff;
}
.ps-band-navy :where(h1, h2, h3, h4, p, li, a) { color: #fff; }
.ps-band-navy .ps-eyebrow { color: var(--ps-accent-soft); }
.ps-band-navy .ps-lead { color: rgba(255, 255, 255, .82); }
.ps-band-navy .ps-contact__l { color: rgba(255, 255, 255, .55); }
.ps-band-navy .ps-contact__v { color: rgba(255, 255, 255, .88); }
.ps-band-navy .ps-contact__i { border-bottom-color: rgba(255, 255, 255, .14); }

/* Filete metálico: el detalle que repite el logotipo. */
.ps-rule {
	height: 2px;
	width: 64px;
	background: var(--ps-metal);
	border: 0;
	margin: 0;
	transform-origin: 0 50%;
	transform: scaleX(0);
	transition: transform 1s var(--ps-ease);
}
.ps-rule.is-in { transform: scaleX(1); }
.ps-rule--center { margin-inline: auto; transform-origin: 50% 50%; }
.ps-rule--full { width: 100%; height: 1px; background: var(--ps-gray-200); }

/* Retícula tenue de fondo. Da profundidad sin cargar la página. */
.ps-grid-bg {
	position: absolute;
	inset: 0;
	pointer-events: none;
	background-image:
		linear-gradient(to right, rgba(31, 43, 79, .03) 1px, transparent 1px),
		linear-gradient(to bottom, rgba(31, 43, 79, .03) 1px, transparent 1px);
	background-size: 76px 76px;
	mask-image: radial-gradient(ellipse 80% 60% at 50% 0%, #000 20%, transparent 78%);
	-webkit-mask-image: radial-gradient(ellipse 80% 60% at 50% 0%, #000 20%, transparent 78%);
}

/* =========================================================================
 * 2. Tipografía del sitio
 * ========================================================================= */

.ps-eyebrow {
	/* La rayita de color delante viene de la maqueta de septiembre de 2026. Va
	   en el antetítulo y no como elemento aparte para que no se pueda quedar
	   huérfana al mover un bloque. */
	display: flex;
	align-items: center;
	gap: 14px;
	font-family: Poppins, sans-serif;
	font-size: .75rem;
	font-weight: 600;
	letter-spacing: .18em;
	text-transform: uppercase;
	color: var(--ps-accent-ink);
	margin: 0 0 14px;
}
.ps-eyebrow::before {
	content: "";
	width: 30px;
	height: 2px;
	flex: none;
	background: var(--ps-accent);
}
.ps-sechead--center .ps-eyebrow,
.has-text-align-center.ps-eyebrow { justify-content: center; }

.ps-display {
	font-family: Lora, Georgia, serif;
	font-weight: 600;
	font-size: clamp(2.2rem, 5.2vw, 4rem);
	line-height: 1.12;
	letter-spacing: -.018em;
	margin: 0;
	color: var(--ps-navy);
}

.ps-h2 {
	font-family: Lora, Georgia, serif;
	font-weight: 600;
	font-size: clamp(1.75rem, 3.4vw, 2.75rem);
	line-height: 1.2;
	letter-spacing: -.014em;
	margin: 0;
}

.ps-h3 {
	font-family: Lora, Georgia, serif;
	font-weight: 600;
	font-size: clamp(1.15rem, 1.8vw, 1.4rem);
	line-height: 1.3;
	margin: 0;
}

.ps-lead {
	font-size: clamp(1rem, 1.35vw, 1.15rem);
	line-height: 1.75;
	color: var(--ps-gray-700);
	margin: 0;
	max-width: 62ch;
}

.ps-body {
	font-size: .975rem;
	line-height: 1.75;
	color: var(--ps-gray-700);
	margin: 0;
}

.ps-small {
	font-size: .8125rem;
	line-height: 1.6;
	color: var(--ps-gray-500);
	margin: 0;
}

/* Texto largo de las páginas interiores. */
.ps-prose :where(p, ul, ol) { color: var(--ps-gray-700); line-height: 1.8; }
.ps-prose :where(h2, h3) { margin-top: 2.2em; }
/*
 * El subrayado del texto no debe alcanzar a los botones.
 *
 * La regla de abajo pesa (0,2,1) —«.ps-prose» más «a» más el «:not()», que
 * también suma— y le ganaba a «.ps-btn--wa» (0,1,0). Dentro de un artículo, el
 * botón de WhatsApp salía subrayado y con el texto en azul marino en vez de en
 * el color que le toca. Se lee mal y parece un enlace roto.
 */
.ps-prose :where(a):not(.wp-element-button):not(.ps-btn) {
	color: var(--ps-navy);
	text-decoration: underline;
	text-decoration-color: var(--ps-accent-soft);
	text-underline-offset: 4px;
	transition: text-decoration-color .3s;
}
.ps-prose :where(a):not(.wp-element-button):not(.ps-btn):hover { text-decoration-color: var(--ps-accent-ink); }

/* Y por si algún día aparece otra regla que quiera subrayarlos. */
.ps-prose .ps-btn { text-decoration: none; }

/* =========================================================================
 * 3. Botones
 * ========================================================================= */

.wp-block-button__link,
.wp-element-button,
.ps-btn {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	overflow: hidden;
	isolation: isolate;
	font-family: Poppins, sans-serif;
	font-size: .875rem;
	font-weight: 500;
	letter-spacing: .02em;
	line-height: 1.2;
	padding: .95rem 1.8rem;
	border-radius: var(--ps-radius);
	border: 1px solid transparent;
	background: var(--ps-navy);
	color: #fff;
	cursor: pointer;
	text-decoration: none;
	transition: transform .45s var(--ps-ease), box-shadow .45s var(--ps-ease), background-color .35s, color .35s, border-color .35s;
}

/* El brillo metálico que cruza el botón al pasar el cursor. */
.wp-block-button__link::after,
.ps-btn::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background: linear-gradient(115deg, transparent 30%, rgba(255, 255, 255, .28) 48%, transparent 66%);
	transform: translateX(-120%);
	transition: transform .85s var(--ps-ease);
}

.wp-block-button__link:hover,
.ps-btn:hover {
	background: var(--ps-navy-deep);
	color: #fff;
	transform: translateY(-2px);
	box-shadow: 0 10px 26px rgba(31, 43, 79, .22);
}

.wp-block-button__link:hover::after,
.ps-btn:hover::after { transform: translateX(120%); }

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

/* Contorno: el secundario del sitio. */
.is-style-ps-ghost .wp-block-button__link,
.ps-btn--ghost {
	background: transparent;
	color: var(--ps-navy);
	border-color: var(--ps-gray-200);
	box-shadow: none;
}
.is-style-ps-ghost .wp-block-button__link:hover,
.ps-btn--ghost:hover {
	background: transparent;
	color: var(--ps-navy);
	border-color: var(--ps-accent);
	box-shadow: 0 8px 22px rgba(31, 43, 79, .1);
}

/* Contorno metálico, para usar sobre azul. */
.is-style-ps-metal .wp-block-button__link,
.ps-btn--metal {
	background: transparent;
	border-color: var(--ps-accent);
	color: var(--ps-accent-ink);
}
.ps-band-navy .is-style-ps-metal .wp-block-button__link,
.ps-band-navy .ps-btn--metal,
.ps-hero--dark .ps-btn--metal {
	color: #fff;
	border-color: rgba(255, 255, 255, .45);
}
.is-style-ps-metal .wp-block-button__link:hover,
.ps-btn--metal:hover {
	background: var(--ps-accent);
	border-color: var(--ps-accent);
	color: #fff;
}

/*
 * Botón claro sobre banda azul.
 *
 * Sin esto, un botón sólido sobre la banda azul es azul marino sobre azul
 * marino: existe, se puede pulsar, y no se ve. Aplica igual a los botones de
 * bloque y a los que pinta el tema.
 */
.ps-band-navy .wp-block-button:not(.is-style-ps-ghost):not(.is-style-ps-metal) .wp-block-button__link,
.ps-band-navy .ps-btn:not(.ps-btn--metal):not(.ps-btn--ghost),
.ps-hero--dark .ps-btn:not(.ps-btn--metal):not(.ps-btn--ghost),
.ps-pagehead .ps-btn:not(.ps-btn--metal):not(.ps-btn--ghost) {
	background: #fff;
	color: var(--ps-navy);
}
.ps-band-navy .wp-block-button:not(.is-style-ps-ghost):not(.is-style-ps-metal) .wp-block-button__link:hover,
.ps-band-navy .ps-btn:not(.ps-btn--metal):not(.ps-btn--ghost):hover,
.ps-hero--dark .ps-btn:not(.ps-btn--metal):not(.ps-btn--ghost):hover,
.ps-pagehead .ps-btn:not(.ps-btn--metal):not(.ps-btn--ghost):hover {
	background: var(--ps-bone);
	color: var(--ps-navy);
}

/* El contorno claro también necesita verse sobre azul. */
.ps-band-navy .ps-btn--ghost,
.ps-hero--dark .ps-btn--ghost {
	color: #fff;
	border-color: rgba(255, 255, 255, .38);
}
.ps-band-navy .ps-btn--ghost:hover,
.ps-hero--dark .ps-btn--ghost:hover {
	color: #fff;
	border-color: #fff;
	background: rgba(255, 255, 255, .08);
}

/* =========================================================================
 * Botones destacados
 *
 * La clienta pidió «darle mayor protagonismo a los botones de consulta y
 * WhatsApp». Hasta ahora eran azul marino: el mismo color que los títulos, que
 * el pie y que media página. Un botón del color de todo lo demás no es un
 * botón, es un párrafo con borde.
 *
 * Estos van del color que diga el panel, y ese color no se usa en ningún otro
 * sitio. Esa es toda la técnica: no destaca por ser dorado, destaca por ser el
 * único elemento dorado de la página.
 * ========================================================================= */

.ps-btn--cta,
.ps-btn--wa,
.ps-header__cta .ps-btn,
.ps-header__cta .wp-block-button__link {
	background: var(--ps-cta);
	color: var(--ps-cta-ink);
	border-color: transparent;
	font-weight: 600;
	box-shadow: 0 6px 18px color-mix(in srgb, var(--ps-cta) 34%, transparent);
}

.ps-btn--cta:hover,
.ps-btn--wa:hover,
.ps-header__cta .ps-btn:hover,
.ps-header__cta .wp-block-button__link:hover {
	background: var(--ps-cta-deep);
	color: var(--ps-cta-ink);
	box-shadow: 0 12px 30px color-mix(in srgb, var(--ps-cta) 46%, transparent);
}

/* Los de WhatsApp pueden ir en su verde, si se marca en el panel. */
.ps-btn--wa { background: var(--ps-wa); color: var(--ps-wa-ink); }
.ps-btn--wa:hover { background: var(--ps-wa-deep); color: var(--ps-wa-ink); }

.ps-btn--wa .ps-wa-ico { width: 18px; height: 18px; flex: none; }

/* WhatsApp en contorno. Dos clases (0,2,0) porque .ps-btn--wa se declara más
   abajo que .ps-btn--ghost y sin esto pintaba el fondo de color igualmente. */
.ps-btn--wa.ps-btn--ghost,
.ps-btn--wa.ps-btn--ghost:hover {
	background: transparent;
	border-color: currentColor;
}
.ps-btn--wa.ps-btn--ghost { color: var(--ps-navy); }
.ps-btn--wa.ps-btn--ghost:hover { color: var(--ps-cta); }
.ps-hero--marca .ps-btn--wa.ps-btn--ghost { color: #fff; border-color: rgba(255, 255, 255, .5); }
.ps-hero--marca .ps-btn--wa.ps-btn--ghost:hover { color: var(--ps-cta); border-color: var(--ps-cta); }

/*
 * Sobre la banda azul y sobre el héroe oscuro, la regla general convierte los
 * botones sólidos en blancos para que no desaparezcan. Los destacados no
 * necesitan ese rescate: su color ya contrasta con el azul, y perderlo era
 * justamente lo que los volvía invisibles como llamada a la acción.
 */
.ps-band-navy .ps-btn--cta,
.ps-band-navy .ps-btn--wa,
.ps-hero--dark .ps-btn--cta,
.ps-hero--dark .ps-btn--wa,
.ps-pagehead .ps-btn--cta,
.ps-pagehead .ps-btn--wa {
	background: var(--ps-cta);
	color: var(--ps-cta-ink);
}
.ps-band-navy .ps-btn--wa,
.ps-hero--dark .ps-btn--wa,
.ps-pagehead .ps-btn--wa { background: var(--ps-wa); color: var(--ps-wa-ink); }

.ps-band-navy .ps-btn--cta:hover,
.ps-hero--dark .ps-btn--cta:hover,
.ps-pagehead .ps-btn--cta:hover { background: var(--ps-cta-deep); color: var(--ps-cta-ink); }
.ps-band-navy .ps-btn--wa:hover,
.ps-hero--dark .ps-btn--wa:hover,
.ps-pagehead .ps-btn--wa:hover { background: var(--ps-wa-deep); color: var(--ps-wa-ink); }

/* Navegadores viejos sin color-mix: sombra fija, que se pierde poco. */
@supports not (color: color-mix(in srgb, red 50%, blue)) {
	.ps-btn--cta, .ps-btn--wa { box-shadow: 0 6px 18px rgba(31, 43, 79, .22); }
}

.wp-block-buttons { gap: 12px; }

/*
 * Fila de botones. En pantalla ancha van uno junto a otro y centrados; en un
 * teléfono pasan a ocupar todo el ancho, cada uno en su línea. Antes esto iba
 * escrito a mano en el estilo de cada patrón, y por eso en el móvil salían de
 * anchos distintos: parecía que el segundo botón valía menos que el primero.
 */
.ps-btnrow {
	display: flex;
	gap: 12px;
	justify-content: center;
	flex-wrap: wrap;
	margin-top: 2.2rem;
}
.ps-btnrow > * { flex: 0 1 auto; }

/* Botón grande: para la página que tiene un solo botón y nada más que decidir. */
.ps-btn--grande {
	padding: 18px 34px;
	font-size: 1.02rem;
}
.ps-btn--grande .ps-wa-ico { width: 21px; height: 21px; }

/* =========================================================================
 * 4. Cabecera y menú
 * ========================================================================= */

.ps-header {
	position: sticky;
	top: 0;
	z-index: 50;
	background: rgba(255, 255, 255, .88);
	backdrop-filter: saturate(160%) blur(14px);
	-webkit-backdrop-filter: saturate(160%) blur(14px);
	border-bottom: 1px solid transparent;
	transition: border-color .4s, box-shadow .4s, background-color .4s;
}

.ps-header.is-stuck {
	border-bottom-color: var(--ps-gray-200);
	box-shadow: 0 6px 24px rgba(31, 43, 79, .06);
}

.ps-header__in {
	display: flex;
	align-items: center;
	gap: clamp(16px, 3vw, 40px);
	min-height: var(--ps-header-h);
	padding-block: 14px;
}

.ps-header.is-stuck .ps-header__in { min-height: 96px; }

/* Marca */
.ps-logo {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	flex: none;
	font-family: Lora, Georgia, serif;
	font-size: 1.35rem;
	font-weight: 600;
	letter-spacing: .04em;
	color: var(--ps-navy);
	text-decoration: none;
	line-height: 1;
}
.ps-logo span {
	background: var(--ps-metal);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}
.ps-logo-img {
	display: block;
	width: auto;
	/* Más grande desde septiembre de 2026: la clienta lo pidió, y tiene razón
	   —el logotipo es la única marca que hay en la cabecera. */
	height: clamp(74px, 7.4vw, 104px);
	max-height: 112px;
	transition: height .4s var(--ps-ease);
}
.ps-header.is-stuck .ps-logo-img { height: clamp(58px, 5.8vw, 76px); }

/* --- Lupa de búsqueda de la cabecera --- */
.ps-busca { position: relative; display: flex; align-items: center; }
.ps-busca__b {
	display: grid;
	place-items: center;
	width: 42px;
	height: 42px;
	border: 0;
	background: transparent;
	color: inherit;
	cursor: pointer;
	border-radius: 50%;
	transition: background .3s, color .3s;
}
.ps-busca__b:hover { background: rgba(31, 45, 82, .07); color: var(--ps-cta); }
.ps-busca__b svg { width: 21px; height: 21px; stroke: currentColor; fill: none; stroke-width: 1.7; }
.ps-busca__x { display: none; }
.ps-busca.is-open .ps-busca__ico { display: none; }
.ps-busca.is-open .ps-busca__x { display: block; }

.ps-busca__f {
	position: absolute;
	top: calc(100% + 12px);
	right: 0;
	display: none;
	align-items: center;
	gap: 6px;
	background: var(--ps-paper);
	border: 1px solid var(--ps-gray-200);
	border-radius: var(--ps-radius);
	box-shadow: var(--ps-shadow-lg);
	padding: 8px 10px;
	z-index: 30;
}
.ps-busca.is-open .ps-busca__f { display: flex; }
.ps-busca__f input {
	width: min(280px, 52vw);
	border: 0;
	outline: 0;
	font-family: Poppins, sans-serif;
	font-size: .92rem;
	color: var(--ps-navy);
	background: transparent;
	padding: 6px 4px;
}
.ps-busca__f button {
	border: 0;
	background: var(--ps-cta);
	color: var(--ps-cta-ink);
	width: 34px;
	height: 34px;
	border-radius: var(--ps-radius);
	display: grid;
	place-items: center;
	cursor: pointer;
	flex: none;
}
.ps-busca__f button svg { width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 1.8; }

/* Texto solo para lectores de pantalla. */
.ps-oculto {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}

/* Navegación */
.ps-nav { margin-left: auto; }

.ps-nav .wp-block-navigation__container,
.ps-nav ul {
	display: flex;
	align-items: center;
	gap: clamp(14px, 2vw, 30px);
	list-style: none;
	margin: 0;
	padding: 0;
}

/*
 * El color de los enlaces del menú necesita más peso del que parece.
 *
 * WordPress trae esta regla en la hoja del bloque de navegación:
 *
 *   .wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content { color: inherit }
 *
 * La clase va repetida a propósito: así gana en especificidad a casi cualquier
 * cosa que escriba un tema, sin importar en qué orden se carguen las hojas. Por
 * eso el selector de aquí abajo lleva `.ps-header` delante — para pesar más—, y
 * por eso en el móvil el color va marcado como importante: allí el panel es
 * azul marino, y heredar el color del cuerpo dejaba los seis enlaces en azul
 * marino sobre azul marino. Estaban, pero no se veían.
 */
.ps-nav a,
.ps-nav .wp-block-navigation-item__content,
.ps-header .ps-nav a.wp-block-navigation-item__content {
	position: relative;
	font-family: Poppins, sans-serif;
	font-size: .9rem;
	font-weight: 400;
	color: var(--ps-navy);
	text-decoration: none;
	padding-block: 6px;
	transition: color .3s;
}

/* Subrayado que crece desde la izquierda. */
.ps-nav a::after,
.ps-nav .wp-block-navigation-item__content::after {
	content: "";
	position: absolute;
	left: 0;
	bottom: 0;
	width: 100%;
	height: 1.5px;
	background: var(--ps-metal);
	transform: scaleX(0);
	transform-origin: 0 50%;
	transition: transform .45s var(--ps-ease);
}
.ps-nav a:hover::after,
.ps-nav li.current-menu-item > a::after,
.ps-nav .wp-block-navigation-item__content:hover::after { transform: scaleX(1); }

.ps-header__cta { flex: none; margin-left: 4px; }
.ps-header__cta .wp-block-button__link { padding: .72rem 1.3rem; font-size: .82rem; }

/* Botón hamburguesa */
.ps-burger {
	display: none;
	flex: none;
	width: 44px;
	height: 44px;
	margin-left: auto;
	padding: 0;
	background: transparent;
	border: 1px solid var(--ps-gray-200);
	border-radius: var(--ps-radius);
	cursor: pointer;
	position: relative;
}
.ps-burger span {
	position: absolute;
	left: 12px;
	width: 20px;
	height: 1.5px;
	background: var(--ps-navy);
	transition: transform .4s var(--ps-ease), opacity .25s;
}
.ps-burger span:nth-child(1) { top: 16px; }
.ps-burger span:nth-child(2) { top: 21px; }
.ps-burger span:nth-child(3) { top: 26px; }
.ps-burger.is-open span:nth-child(1) { transform: translateY(5px) rotate(45deg); }
.ps-burger.is-open span:nth-child(2) { opacity: 0; }
.ps-burger.is-open span:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }

/* --- Accesos rápidos de la cabecera en móvil ---
   El botón «Consulta ahora» no cabe junto al logotipo en una pantalla de
   teléfono, pero esconder el contacto detrás de la hamburguesa es perder al
   visitante justo cuando quería escribir. Estos iconos ocupan lo que un botón
   y dejan el WhatsApp y el teléfono a un toque. */
.ps-header__quick { display: none; }

.ps-quick {
	display: grid;
	place-items: center;
	width: 44px;
	height: 44px;
	flex: none;
	border: 1px solid var(--ps-gray-200);
	border-radius: var(--ps-radius);
	color: var(--ps-navy);
	transition: background-color .3s, border-color .3s, color .3s;
}
.ps-quick svg { width: 21px; height: 21px; }
.ps-quick:hover { border-color: var(--ps-accent); }

/* La palabra junto al icono. Se enciende en el bloque de móvil. */
.ps-quick__txt { display: none; }

.ps-quick--wa { background: var(--ps-wa); border-color: var(--ps-wa); color: var(--ps-wa-ink); }
.ps-quick--wa:hover { background: var(--ps-wa-deep); border-color: var(--ps-wa-deep); color: var(--ps-wa-ink); }

/* --- El pie del menú desplegado ---
   Va dentro del panel de navegación, debajo de los enlaces: teléfono, correo,
   horario y redes.

   El JS lo mueve dentro de <nav> al cargar. No puede quedarse en la cabecera y
   posicionarse fijo, porque el backdrop-filter de la cabecera convierte a sus
   hijos fijos en hijos suyos y el bloque acabaría flotando arriba. */
.ps-menufoot { display: none; }

/* =========================================================================
 * Desplegables del menú
 *
 * WordPress esconde el submenú con opacidad, alto y ancho a cero, y lo enseña
 * al pasar el cursor —pero solo dentro de @media (hover: hover)—. Eso está
 * bien en el escritorio y es exactamente lo que no sirve en un teléfono, donde
 * no hay cursor: allí el desplegable va siempre abierto, y de eso se encarga
 * el bloque de móvil más abajo.
 *
 * Lo que se hace aquí es vestirlo. WordPress lo pinta blanco con borde gris y
 * texto negro, con reglas de dos clases de peso:
 *
 *   .wp-block-navigation:not(.has-background) .wp-block-navigation__submenu-container { background-color:#fff; border:1px solid rgba(0,0,0,.15) }
 *   .wp-block-navigation:not(.has-text-color)  .wp-block-navigation__submenu-container { color:#000 }
 *
 * Por eso los selectores de abajo llevan «.ps-header» delante: para pesar más
 * que eso sin recurrir a !important.
 * ========================================================================= */

/* El submenú es un <ul>, así que le caía encima el «display:flex» de la barra y
   sus enlaces salían en fila, uno al lado del otro, como una segunda barra
   suelta. Aquí vuelve a ser una lista, en columna. */
.ps-header .ps-nav .wp-block-navigation__submenu-container {
	display: flex;
	flex-direction: column;
	align-items: stretch;
	gap: 0;
	background: var(--ps-paper);
	border: 1px solid var(--ps-gray-200);
	border-top: 2px solid var(--ps-cta);
	border-radius: 0 0 var(--ps-radius) var(--ps-radius);
	box-shadow: var(--ps-shadow-lg);
	padding: 8px 0;
	min-width: 232px;
	top: 100%;
	left: 0;
}

/* El desplegable se coloca respecto a su padre, no respecto a la página. */
.ps-nav .has-child { position: relative; }

.ps-header .ps-nav .wp-block-navigation__submenu-container li { width: 100%; }

.ps-header .ps-nav .wp-block-navigation__submenu-container a,
.ps-header .ps-nav .wp-block-navigation__submenu-container a.wp-block-navigation-item__content {
	display: block;
	width: 100%;
	padding: 10px 20px;
	font-family: Poppins, sans-serif;
	font-size: .85rem;
	color: var(--ps-navy);
	white-space: nowrap;
	transition: background-color .25s, color .25s, padding-left .3s var(--ps-ease);
}

.ps-header .ps-nav .wp-block-navigation__submenu-container a:hover,
.ps-header .ps-nav .wp-block-navigation__submenu-container a.wp-block-navigation-item__content:hover {
	background: var(--ps-bone);
	color: var(--ps-navy);
	padding-left: 26px;
}

/* El subrayado metálico es de la barra, no de las líneas del desplegable. */
.ps-header .ps-nav .wp-block-navigation__submenu-container a::after { display: none; }

/* La flechita del padre. */
.ps-nav .wp-block-navigation__submenu-icon { margin-left: 5px; }
.ps-nav .wp-block-navigation__submenu-icon svg { width: 11px; height: 11px; }

/* --- El envoltorio del bloque de navegación de WordPress ---
   WordPress no entrega una lista de enlaces suelta. La mete dentro de cuatro
   capas y añade dos botones propios de abrir y cerrar, pensados para su propio
   menú superpuesto. Como este tema tiene su hamburguesa y su panel, esos dos
   botones sobran: además, con el menú configurado como «nunca superponer»,
   WordPress ni siquiera carga el JavaScript que los haría funcionar, así que
   quedaban ahí como una segunda hamburguesa que no hacía nada al pulsarla. */
.ps-nav .wp-block-navigation__responsive-container-open,
.ps-nav .wp-block-navigation__responsive-container-close { display: none !important; }

@media (max-width: 1024px) {
	/*
	 * Sin desenfoque en móvil. No es por gusto: un elemento con
	 * backdrop-filter se convierte en el marco de referencia de sus hijos
	 * posicionados de forma fija, así que el panel del menú —que quiere ocupar
	 * toda la pantalla— acababa encajonado dentro de la cabecera.
	 */
	.ps-header {
		backdrop-filter: none;
		-webkit-backdrop-filter: none;
		background: rgba(255, 255, 255, .97);
	}

	.ps-header__quick { display: flex; gap: 8px; margin-left: auto; align-items: center; }
	.ps-burger { margin-left: 8px; }

	/* --- Que se vea lo que hay, sin tener que tocar ---
	   La queja repetida ha sido «en el celular no están las opciones de la
	   cabecera». Los seis enlaces no caben en 390 px y no van a caber nunca.
	   Lo que sí cabe es decir dónde están: la hamburguesa lleva la palabra
	   «Menú» al lado, y el acceso de WhatsApp lleva la suya. Un icono solo lo
	   entiende quien ya sabía; la palabra la entiende cualquiera. */
	.ps-quick--wa {
		width: auto;
		padding: 0 12px;
		gap: 7px;
		grid-auto-flow: column;
		font-family: Poppins, sans-serif;
		font-size: .8rem;
		font-weight: 600;
		text-decoration: none;
	}
	.ps-quick--wa .ps-quick__txt { display: inline; }

	.ps-burger {
		width: auto;
		min-width: 44px;
		padding: 0 10px 0 36px;
		font-family: Poppins, sans-serif;
		font-size: .72rem;
		font-weight: 600;
		letter-spacing: .04em;
		text-transform: uppercase;
		color: var(--ps-navy);
	}
	.ps-burger::after { content: "Menú"; }
	.ps-burger.is-open::after { content: "Cerrar"; color: #fff; }

	/* Las tres barras siguen ancladas a la izquierda del botón. */
	.ps-burger span { left: 12px; }

	/* El menú pasa a columna: enlaces arriba, contacto abajo. */
	.ps-nav {
		flex-direction: column;
		align-items: stretch;
		justify-content: flex-start;
		/* dvh y no vh: en el móvil la barra del navegador se encoge al hacer
		   scroll y con vh el panel se queda corto o se pasa. */
		height: 100dvh;
		max-height: 100dvh;
		padding: calc(var(--ps-header-real) + 8px) 24px 32px;
		overflow-y: auto;
		-webkit-overflow-scrolling: touch;
	}
	/*
	 * ESTE ES EL BLOQUE QUE HACÍA QUE EL MENÚ SALIERA VACÍO EN EL TELÉFONO.
	 *
	 * La hoja de estilo del bloque de navegación de WordPress trae esto:
	 *
	 *   .wp-block-navigation__responsive-container { display: none; ... }
	 *   @media (min-width: 600px) { ...:not(.is-menu-open) { display: block } }
	 *
	 * Es decir: por debajo de 600 px WordPress esconde la lista de enlaces y
	 * espera que se abra con su propio menú superpuesto. Como aquí el menú está
	 * puesto en «nunca superponer» —para que en el escritorio salga en fila—,
	 * WordPress no carga el JavaScript que lo abriría, y la lista se quedaba
	 * apagada para siempre. La hamburguesa del tema abría el panel y dentro no
	 * había nada.
	 *
	 * Aquí se desmontan las cuatro capas y la lista vuelve a ser una lista.
	 */
	.ps-nav .wp-block-navigation__responsive-container {
		display: block !important;
		position: static !important;
		inset: auto !important;
		width: 100%;
		padding: 0 !important;
		overflow: visible !important;
		background: transparent !important;
		z-index: auto !important;
	}
	.ps-nav .wp-block-navigation__responsive-close,
	.ps-nav .wp-block-navigation__responsive-dialog,
	.ps-nav .wp-block-navigation__responsive-container-content {
		display: block;
		position: static;
		width: 100%;
		max-width: none;
		height: auto;
		margin: 0;
	}

	.ps-nav .wp-block-navigation__container,
	.ps-nav ul { width: 100%; flex: none; }

	/* Los enlaces del menú son grandes y en serif; los del bloque de contacto
	   no deben heredarlo por estar dentro. */
	.ps-nav .ps-menufoot a,
	.ps-nav .ps-menufoot span {
		font-family: Poppins, sans-serif;
		font-size: .95rem;
		padding: 0;
	}
	.ps-nav .ps-menufoot .ps-btn { font-size: .9rem; padding: .9rem 1.4rem; }

	.ps-nav .ps-menufoot {
		display: flex;
		flex-direction: column;
		gap: 18px;
		width: 100%;
		margin-top: 36px;
		padding-top: 26px;
		border-top: 1px solid rgba(255, 255, 255, .16);
	}

	.ps-menufoot .ps-btn--wa { background: var(--ps-wa); justify-content: center; }
	.ps-menufoot .ps-btn--wa:hover { background: var(--ps-wa-deep); }

	.ps-menufoot__datos { display: grid; gap: 14px; }
	.ps-menufoot__datos > * {
		display: flex;
		align-items: center;
		gap: 12px;
		font-size: .95rem;
		color: rgba(255, 255, 255, .88);
		text-decoration: none;
	}
	.ps-menufoot__datos svg {
		width: 18px;
		height: 18px;
		flex: none;
		stroke: var(--ps-accent-soft);
		fill: none;
	}
	.ps-menufoot .ps-social { margin-top: 0; justify-content: center; }

	/* Mientras el menú está abierto, el botón flotante estorba. */
	body.ps-menu-abierto .ps-wa { display: none; }
}

/* =========================================================================
 * 5. Portada
 * ========================================================================= */

.ps-hero {
	position: relative;
	overflow: hidden;
	padding-block: clamp(56px, 8vw, 104px) clamp(64px, 9vw, 112px);
	background: var(--ps-bone);
	isolation: isolate;
}

.ps-hero__in {
	position: relative;
	display: grid;
	grid-template-columns: minmax(0, 1.12fr) minmax(0, .88fr);
	gap: clamp(32px, 5vw, 72px);
	align-items: center;
}

/*
 * Sin límite propio: la anchura la marca la columna de la retícula. Un
 * max-width en «ch» aquí medía menos que los dos botones juntos y los partía
 * en dos filas.
 */
.ps-hero__text { max-width: 100%; }
.ps-hero .ps-lead { margin-top: 22px; }

/*
 * El titular de la portada va un punto por debajo del display general: a
 * tamaño completo, en una columna de media página, «de excelencia para» se
 * parte por la mitad y el revelado línea a línea pierde todo el sentido.
 */
.ps-hero .ps-display { font-size: clamp(1.85rem, 3.35vw, 2.9rem); }

/* Los dos botones del hero, uno junto al otro y en la misma línea de base. */
.ps-hero__cta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
	margin-top: 32px;
}

/* Titular por líneas: cada una sube desde debajo de su propia máscara. */
.ps-reveal-line {
	display: block;
	overflow: hidden;
}
.ps-reveal-line > span {
	display: block;
	transform: translateY(105%);
	transition: transform 1.05s var(--ps-ease);
}
.is-ready .ps-reveal-line > span { transform: translateY(0); }
.is-ready .ps-reveal-line:nth-child(2) > span { transition-delay: .09s; }
.is-ready .ps-reveal-line:nth-child(3) > span { transition-delay: .18s; }
.is-ready .ps-reveal-line:nth-child(4) > span { transition-delay: .27s; }

/* Marco de la imagen del hero, con filete metálico desplazado. */
.ps-hero__media { position: relative; }
.ps-hero__media::before {
	content: "";
	position: absolute;
	inset: 22px -22px -22px 22px;
	border: 1px solid var(--ps-accent);
	opacity: .55;
	pointer-events: none;
	z-index: -1;
}

/* Capa de video o imagen a pantalla completa detrás del titular. */
.ps-hero__bg { position: absolute; inset: 0; z-index: -2; overflow: hidden; }
.ps-hero__bg video,
.ps-hero__bg img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	position: absolute;
	inset: 0;
}
.ps-hero__bg video + img { display: none; }
.ps-hero__bg::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(100deg, rgba(22, 32, 60, .92) 0%, rgba(22, 32, 60, .74) 46%, rgba(22, 32, 60, .42) 100%);
}
.ps-hero__bg--velo-suave::after { background: linear-gradient(100deg, rgba(22, 32, 60, .8) 0%, rgba(22, 32, 60, .52) 50%, rgba(22, 32, 60, .24) 100%); }
.ps-hero__bg--velo-fuerte::after { background: linear-gradient(100deg, rgba(22, 32, 60, .96) 0%, rgba(22, 32, 60, .88) 46%, rgba(22, 32, 60, .66) 100%); }

/* Cuando hay fondo, el hero pasa a oscuro y el texto se invierte. */
.ps-hero--dark { background: var(--ps-navy-deep); }
.ps-hero--dark :where(.ps-display, .ps-h2, h1, h2, h3) { color: #fff; }
.ps-hero--dark .ps-lead { color: rgba(255, 255, 255, .84); }
.ps-hero--dark .ps-eyebrow { color: var(--ps-accent-soft); }
.ps-hero--dark .ps-grid-bg { opacity: .35; filter: invert(1); }

/* Cabecera invertida sobre un hero oscuro, hasta que se pega arriba. */
body.ps-hero-bg .ps-header:not(.is-stuck) {
	background: transparent;
	backdrop-filter: none;
	-webkit-backdrop-filter: none;
}
body.ps-hero-bg .ps-header:not(.is-stuck) :where(.ps-logo, .ps-nav a, .ps-nav .wp-block-navigation-item__content) { color: #fff; }
body.ps-hero-bg .ps-header:not(.is-stuck) .ps-busca__b { color: #fff; }
body.ps-hero-bg .ps-header:not(.is-stuck) .ps-burger { border-color: rgba(255, 255, 255, .4); }
body.ps-hero-bg .ps-header:not(.is-stuck) .ps-burger span { background: #fff; }
body.ps-hero-bg.ps-logo-blanco .ps-header:not(.is-stuck) .ps-logo-img { filter: brightness(0) invert(1); }
body.ps-hero-bg.ps-logo-placa .ps-header:not(.is-stuck) .ps-logo-img {
	background: #fff;
	padding: 6px 10px;
	border-radius: 2px;
}

/* Cinta de credenciales bajo el hero. */
.ps-strip {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(180px, 100%), 1fr));
	gap: 1px;
	background: var(--ps-gray-200);
	border-block: 1px solid var(--ps-gray-200);
}
.ps-strip__i {
	background: var(--ps-paper);
	padding: clamp(20px, 3vw, 30px) clamp(18px, 2.4vw, 28px);
	text-align: center;
}
.ps-strip__n {
	font-family: Lora, Georgia, serif;
	font-size: clamp(1.7rem, 3vw, 2.3rem);
	font-weight: 600;
	line-height: 1;
	color: var(--ps-navy);
	display: block;
}
.ps-strip__l {
	font-size: .78rem;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--ps-gray-500);
	margin-top: 10px;
	display: block;
}

/* --- Portada de la maqueta de septiembre de 2026 ---
   Banda azul de lado a lado, el texto a la izquierda, la fotografía a la
   derecha y la frase vertical pegada al borde. Va como variante y no
   sustituyendo a .ps-hero para que el hero claro siga existiendo: lo usan las
   páginas interiores. */
.ps-hero--marca {
	background: var(--ps-navy);
	color: #fff;
	padding-block: clamp(44px, 5.4vw, 76px);
}
.ps-hero--marca :where(.ps-display, h1) { color: #fff; }
.ps-hero--marca .ps-lead { color: rgba(255, 255, 255, .82); max-width: 46ch; }
.ps-hero--marca .ps-eyebrow { color: #fff; }
.ps-hero--marca .ps-grid-bg { opacity: .3; filter: invert(1); }

/* La palabra en color dentro del titular. */
.ps-hl { color: var(--ps-cta); }

/* Tres columnas: texto, fotografía y la frase vertical. */
.ps-hero--marca .ps-hero__in {
	grid-template-columns: minmax(0, 1fr) minmax(0, 1.04fr) auto;
	gap: clamp(28px, 3.6vw, 56px);
	align-items: center;
}
.ps-hero--marca .ps-hero__media::before { display: none; }

/* La frase vertical del borde derecho. */
.ps-hero__vert {
	margin: 0;
	writing-mode: vertical-rl;
	font-family: Poppins, sans-serif;
	font-size: .72rem;
	font-weight: 500;
	letter-spacing: .26em;
	text-transform: uppercase;
	line-height: 2.1;
	color: rgba(255, 255, 255, .72);
	border-left: 2px solid var(--ps-cta);
	padding-left: 18px;
	max-height: 320px;
}

/* --- Banda de valores bajo las especialidades --- */
.ps-valores {
	background: var(--ps-navy);
	color: #fff;
	padding-block: clamp(20px, 2.6vw, 30px);
}
.ps-valores__in {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: clamp(18px, 3vw, 44px);
	flex-wrap: wrap;
}
.ps-valores__lista {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: clamp(14px, 2.6vw, 38px);
	flex: 1 1 auto;
}
.ps-valor {
	display: inline-flex;
	align-items: center;
	gap: 11px;
	font-family: Poppins, sans-serif;
	font-size: .86rem;
	letter-spacing: .04em;
	color: rgba(255, 255, 255, .92);
	padding-right: clamp(14px, 2.6vw, 38px);
	border-right: 1px solid rgba(255, 255, 255, .22);
}
.ps-valor:last-child { border-right: 0; padding-right: 0; }
.ps-valor svg {
	width: 22px;
	height: 22px;
	flex: none;
	stroke: #fff;
	fill: none;
	stroke-width: 1.4;
}
.ps-valores__marca {
	margin: 0;
	padding-left: clamp(16px, 2.4vw, 30px);
	border-left: 2px solid var(--ps-cta);
	font-family: Lora, Georgia, serif;
	font-size: 1.28rem;
	font-weight: 600;
	letter-spacing: .12em;
	line-height: 1.2;
	color: #fff;
}
.ps-valores__marca span {
	display: block;
	font-family: Poppins, sans-serif;
	font-size: .56rem;
	font-weight: 400;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, .6);
	margin-top: 5px;
}

/* --- Encabezado de sección en fila: título a la izquierda, enlace a la derecha --- */
.ps-sechead.ps-sechead--fila {
	/* Dos clases a propósito: .ps-sechead se declara después, en la sección 6,
	   y su max-width de 68ch dejaba al enlace sin sitio y lo mandaba abajo. */
	max-width: none;
}
.ps-sechead--fila {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 20px;
	flex-wrap: wrap;
	max-width: none;
}
.ps-verlink {
	font-family: Poppins, sans-serif;
	font-size: .84rem;
	font-weight: 500;
	color: var(--ps-accent-ink);
	text-decoration: none;
	display: inline-flex;
	align-items: center;
	gap: 9px;
	white-space: nowrap;
	transition: gap .4s var(--ps-ease), color .3s;
}
.ps-verlink:hover { gap: 14px; color: var(--ps-navy); }

/* La flecha del botón grande de la portada. */
.ps-btn__fl { margin-left: 4px; transition: transform .4s var(--ps-ease); }
.ps-btn:hover .ps-btn__fl { transform: translateX(4px); }

/* --- Página de una especialidad --- */
.ps-area-detalle__foto {
	/* Flotando a la derecha: el texto la rodea y la página no se parte en dos
	   columnas que luego hay que recomponer en el móvil. */
	float: right;
	width: min(420px, 42%);
	margin: 0 0 26px 36px;
	aspect-ratio: 3 / 2;
	border-radius: var(--ps-radius);
	overflow: hidden;
}
.ps-area-detalle__foto img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* La lista de «En qué te podemos ayudar», centrada y despejada de la foto. */
.ps-area-puntos {
	clear: both;
	text-align: center;
	margin-top: 10px;
}
.ps-area-puntos__t { margin-bottom: 22px; }
.ps-area-puntos .ps-cards { text-align: left; max-width: 860px; margin-inline: auto; }

/* =========================================================================
 * 6. Encabezados de sección
 * ========================================================================= */

.ps-sechead { margin-bottom: clamp(34px, 4.5vw, 56px); max-width: 68ch; }
.ps-sechead .ps-lead { margin-top: 16px; }
.ps-sechead .ps-rule { margin-top: 20px; }

.ps-sechead--center { margin-inline: auto; text-align: center; }

/* La aclaración de cuántas áreas hay, bajo las tarjetas de la portada. */
.ps-areas-total { margin-top: 22px; }
.ps-sechead--center .ps-lead { margin-inline: auto; }

/* Portadilla de las páginas interiores. */
.ps-pagehead {
	position: relative;
	overflow: hidden;
	background: var(--ps-navy);
	color: #fff;
	padding-block: clamp(64px, 8vw, 108px);
}
.ps-pagehead::before {
	content: "";
	position: absolute;
	inset: 0;
	background-image:
		linear-gradient(to right, rgba(255, 255, 255, .05) 1px, transparent 1px),
		linear-gradient(to bottom, rgba(255, 255, 255, .05) 1px, transparent 1px);
	background-size: 76px 76px;
	mask-image: radial-gradient(ellipse 70% 80% at 85% 30%, #000 10%, transparent 72%);
	-webkit-mask-image: radial-gradient(ellipse 70% 80% at 85% 30%, #000 10%, transparent 72%);
}
.ps-pagehead > * { position: relative; }
.ps-pagehead :where(h1, .ps-display) { color: #fff; }
.ps-pagehead .ps-eyebrow { color: var(--ps-accent-soft); }
.ps-pagehead .ps-lead { color: rgba(255, 255, 255, .8); margin-top: 20px; }

/* Migas de pan. */
.ps-crumbs {
	font-size: .8rem;
	color: rgba(255, 255, 255, .6);
	margin-bottom: 18px;
	letter-spacing: .04em;
}
.ps-crumbs a { color: rgba(255, 255, 255, .82); text-decoration: none; }
.ps-crumbs a:hover { color: #fff; text-decoration: underline; text-underline-offset: 3px; }

/* =========================================================================
 * 7. Tarjetas, pasos, áreas, equipo
 * ========================================================================= */

.ps-cards {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(272px, 100%), 1fr));
	gap: clamp(16px, 2vw, 24px);
}
.ps-cards--2 { grid-template-columns: repeat(auto-fit, minmax(min(380px, 100%), 1fr)); }
.ps-cards--4 { grid-template-columns: repeat(auto-fit, minmax(min(228px, 100%), 1fr)); }

/* --- Tarjeta de área de práctica --- */
.ps-area {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 14px;
	padding: clamp(24px, 3vw, 34px);
	background: var(--ps-paper);
	border: 1px solid var(--ps-gray-200);
	border-radius: var(--ps-radius);
	text-decoration: none;
	overflow: hidden;
	transition: transform .55s var(--ps-ease), box-shadow .55s var(--ps-ease), border-color .4s;
}
/* Velo azul que sube desde abajo al pasar el cursor. */
.ps-area::before {
	content: "";
	position: absolute;
	inset: auto 0 0 0;
	height: 100%;
	background: linear-gradient(180deg, var(--ps-navy) 0%, var(--ps-navy-deep) 100%);
	transform: translateY(101%);
	transition: transform .6s var(--ps-ease);
	z-index: 0;
}
.ps-area > * { position: relative; z-index: 1; }
.ps-area:hover {
	transform: translateY(-5px);
	border-color: var(--ps-navy);
	box-shadow: var(--ps-shadow-lg);
}
.ps-area:hover::before { transform: translateY(0); }
.ps-area:hover :where(.ps-area__t, .ps-area__d, .ps-area__go) { color: #fff; }
.ps-area:hover .ps-area__ico { border-color: rgba(255, 255, 255, .4); color: #fff; }
.ps-area:hover .ps-area__ico svg { stroke: #fff; }

.ps-area__ico {
	/* Sin el círculo que llevaba antes: en la maqueta el icono va suelto y del
	   color de acento, que es lo que le da aire a la tarjeta. */
	display: grid;
	place-items: center;
	width: 40px;
	height: 40px;
	flex: none;
	color: var(--ps-accent);
	transition: color .4s, transform .6s var(--ps-ease);
}
.ps-area:hover .ps-area__ico { transform: translateY(-3px) scale(1.06); }
.ps-area__ico svg { width: 34px; height: 34px; stroke: var(--ps-accent); fill: none; stroke-width: 1.4; transition: stroke .4s; }

.ps-area__t {
	font-family: Lora, Georgia, serif;
	font-size: 1.22rem;
	font-weight: 600;
	line-height: 1.3;
	color: var(--ps-navy);
	transition: color .4s;
}
.ps-area__d {
	font-size: .925rem;
	line-height: 1.7;
	color: var(--ps-gray-700);
	transition: color .4s;
	margin: 0;
	flex: 1;
}
.ps-area__go {
	font-size: .8rem;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--ps-accent-ink);
	display: inline-flex;
	align-items: center;
	gap: 8px;
	transition: color .4s, gap .4s var(--ps-ease);
}
.ps-area:hover .ps-area__go { gap: 14px; }

/* --- Pasos numerados de la consulta --- */
.ps-steps {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr));
	gap: clamp(18px, 2.4vw, 28px);
	counter-reset: paso;
}
.ps-step {
	position: relative;
	background: var(--ps-paper);
	border: 1px solid var(--ps-gray-200);
	border-radius: var(--ps-radius);
	padding: clamp(26px, 3vw, 36px) clamp(22px, 2.6vw, 30px);
	text-align: center;
	transition: transform .5s var(--ps-ease), box-shadow .5s var(--ps-ease), border-color .4s;
}
.ps-step:hover {
	transform: translateY(-5px);
	border-color: var(--ps-accent);
	box-shadow: var(--ps-shadow-lg);
}
.ps-step__n {
	display: grid;
	place-items: center;
	width: 46px;
	height: 46px;
	margin: 0 auto 18px;
	border-radius: 50%;
	background: var(--ps-navy);
	color: #fff;
	font-family: Lora, Georgia, serif;
	font-size: 1.05rem;
	font-weight: 600;
	transition: transform .55s var(--ps-ease), background-color .4s;
}
.ps-step:last-child .ps-step__n { background: var(--ps-accent-ink); }
.ps-step:hover .ps-step__n { transform: scale(1.1); }
.ps-step__t {
	font-family: Lora, Georgia, serif;
	font-size: 1.1rem;
	font-weight: 600;
	color: var(--ps-navy);
	margin: 0 0 10px;
}
.ps-step__d { font-size: .92rem; line-height: 1.7; color: var(--ps-gray-700); margin: 0; }

/* La línea que une los pasos en escritorio. */
@media (min-width: 900px) {
	.ps-steps { position: relative; }
	.ps-steps::before {
		content: "";
		position: absolute;
		top: 60px;
		left: 12%;
		right: 12%;
		height: 1px;
		background: linear-gradient(90deg, transparent, var(--ps-accent-soft) 18%, var(--ps-accent-soft) 82%, transparent);
		z-index: -1;
	}
}

/* --- Filas del listado de áreas --- */
.ps-rows { border-top: 1px solid var(--ps-gray-200); }
.ps-row {
	position: relative;
	display: grid;
	grid-template-columns: 64px minmax(0, 1fr) minmax(0, 1.35fr) 46px;
	align-items: center;
	gap: clamp(14px, 2vw, 28px);
	padding: clamp(20px, 2.6vw, 30px) 6px;
	border-bottom: 1px solid var(--ps-gray-200);
	text-decoration: none;
	overflow: hidden;
	transition: padding-inline .5s var(--ps-ease), background-color .4s;
}
.ps-row::before {
	content: "";
	position: absolute;
	inset: 0;
	background: var(--ps-bone);
	transform: scaleY(0);
	transform-origin: 50% 100%;
	transition: transform .5s var(--ps-ease);
	z-index: 0;
}
.ps-row > * { position: relative; z-index: 1; }
.ps-row:hover { padding-inline: 20px; }
.ps-row:hover::before { transform: scaleY(1); }
.ps-row__n {
	font-family: Lora, Georgia, serif;
	font-size: .95rem;
	color: var(--ps-accent-ink);
	letter-spacing: .08em;
}
.ps-row__t {
	font-family: Lora, Georgia, serif;
	font-size: clamp(1.1rem, 1.8vw, 1.4rem);
	font-weight: 600;
	color: var(--ps-navy);
}
.ps-row__d { font-size: .92rem; line-height: 1.65; color: var(--ps-gray-500); }
.ps-row__go {
	font-size: 1.1rem;
	color: var(--ps-accent-ink);
	justify-self: end;
	transition: transform .5s var(--ps-ease);
}
.ps-row:hover .ps-row__go { transform: translateX(6px); }

/* --- Ficha de abogado --- */
.ps-people {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(250px, 100%), 1fr));
	gap: clamp(18px, 2.4vw, 30px);
}
.ps-person {
	background: var(--ps-paper);
	border: 1px solid var(--ps-gray-200);
	border-radius: var(--ps-radius);
	overflow: hidden;
	transition: transform .55s var(--ps-ease), box-shadow .55s var(--ps-ease), border-color .4s;
}
.ps-person:hover {
	transform: translateY(-6px);
	border-color: var(--ps-accent);
	box-shadow: var(--ps-shadow-lg);
}
.ps-person__ph {
	position: relative;
	aspect-ratio: 4 / 5;
	overflow: hidden;
	background: var(--ps-navy);
}
.ps-person__ph img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	filter: grayscale(1) contrast(1.04);
	transform: scale(1.02);
	transition: filter .7s var(--ps-ease), transform 1.1s var(--ps-ease);
}
.ps-person:hover .ps-person__ph img { filter: grayscale(0); transform: scale(1.07); }
.ps-person__ph::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, transparent 45%, rgba(22, 32, 60, .55) 100%);
	opacity: 0;
	transition: opacity .6s;
}
.ps-person:hover .ps-person__ph::after { opacity: 1; }
.ps-person__body { padding: 20px clamp(18px, 2vw, 24px) 24px; }
.ps-person__n {
	font-family: Lora, Georgia, serif;
	font-size: 1.12rem;
	font-weight: 600;
	color: var(--ps-navy);
	margin: 0;
}
.ps-person__r {
	font-size: .82rem;
	letter-spacing: .06em;
	color: var(--ps-accent-ink);
	margin: 6px 0 0;
}
.ps-person__b { font-size: .9rem; line-height: 1.65; color: var(--ps-gray-500); margin: 12px 0 0; }
.ps-person__links { display: flex; gap: 12px; margin-top: 14px; }
.ps-person__links a { color: var(--ps-gray-500); display: inline-flex; transition: color .3s, transform .3s; }
.ps-person__links a:hover { color: var(--ps-navy); transform: translateY(-2px); }
.ps-person__links svg { width: 17px; height: 17px; }

/* --- Fichas de equipo en modo «rostro» ---
   Lo pidió la clienta y tiene razón: con dos abogados, dos retratos verticales
   grandes son dos pantallas de fotografía antes de llegar a una sola línea de
   texto. Aquí la foto se recorta en un círculo pequeño centrado en la cara, la
   tarjeta desaparece y lo que queda es lo que se lee.

   Estos selectores llevan dos clases a propósito (0,2,0): las reglas del móvil
   que cambian la proporción del retrato tienen una sola (0,1,0) y, como las
   consultas de medios no suman especificidad, ganarían aunque estén después.
   Con dos clases no hay que repetirlas en cada bloque de móvil. */
.ps-people--rostros {
	grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr));
	gap: clamp(26px, 3vw, 44px);
	max-width: 980px;
	margin-inline: auto;
}
.ps-people--rostros .ps-person {
	background: transparent;
	border: 0;
	border-radius: 0;
	overflow: visible;
	box-shadow: none;
	text-align: center;
	padding: 0 4px;
}
.ps-people--rostros .ps-person:hover {
	transform: translateY(-4px);
	border-color: transparent;
	box-shadow: none;
}
.ps-people--rostros .ps-person__ph {
	width: clamp(124px, 22vw, 172px);
	height: clamp(124px, 22vw, 172px);
	aspect-ratio: 1 / 1;
	border-radius: 50%;
	margin: 0 auto;
	box-shadow: 0 0 0 1px var(--ps-gray-200), 0 0 0 7px var(--ps-paper), 0 10px 26px rgba(22, 32, 60, .13);
	transition: box-shadow .5s var(--ps-ease);
}
.ps-people--rostros .ps-person:hover .ps-person__ph {
	box-shadow: 0 0 0 1px var(--ps-accent), 0 0 0 7px var(--ps-paper), 0 14px 32px rgba(22, 32, 60, .2);
}
/* El recorte alto: en un retrato de medio cuerpo la cara vive arriba. */
.ps-people--rostros .ps-person__ph img { object-position: 50% 24%; }
.ps-people--rostros .ps-person:hover .ps-person__ph img { transform: scale(1.06); }
/* El velo oscuro del pie de la foto no tiene sentido sobre un círculo. */
.ps-people--rostros .ps-person__ph::after { display: none; }
.ps-people--rostros .ps-person__ph.ps-slot {
	min-height: 0;
	font-size: .7rem;
	background: var(--ps-bone);
	border: 0;
}
.ps-people--rostros .ps-person__body { padding: 18px 0 0; }
.ps-people--rostros .ps-person__n { font-size: 1.18rem; }
.ps-people--rostros .ps-person__b {
	font-size: .88rem;
	max-width: 34ch;
	margin-inline: auto;
}
.ps-people--rostros .ps-person__links { justify-content: center; }

/* --- Iniciativas de ayuda social ---
   Fotografía horizontal arriba y texto debajo. Horizontal y no vertical como
   las fichas del equipo a propósito: aquí lo que se fotografía es una escena
   —una charla, una brigada, una entrega—, no una persona posando. */
.ps-ayudas {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr));
	gap: clamp(18px, 2.4vw, 30px);
}
.ps-ayuda {
	display: flex;
	flex-direction: column;
	background: var(--ps-paper);
	border: 1px solid var(--ps-gray-200);
	border-radius: var(--ps-radius);
	overflow: hidden;
	transition: transform .55s var(--ps-ease), box-shadow .55s var(--ps-ease), border-color .4s;
}
.ps-ayuda:hover {
	transform: translateY(-5px);
	border-color: var(--ps-accent);
	box-shadow: var(--ps-shadow-lg);
}
.ps-ayuda__ph {
	aspect-ratio: 3 / 2;
	overflow: hidden;
	background: var(--ps-bone);
}
.ps-ayuda__ph img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 1.2s var(--ps-ease);
}
.ps-ayuda:hover .ps-ayuda__ph img { transform: scale(1.05); }
.ps-ayuda__body { padding: 22px clamp(18px, 2vw, 26px) 26px; display: flex; flex-direction: column; gap: 9px; flex: 1; }
.ps-ayuda__t {
	font-family: Lora, Georgia, serif;
	font-size: 1.15rem;
	font-weight: 600;
	line-height: 1.32;
	color: var(--ps-navy);
	margin: 0;
}
.ps-ayuda__l {
	font-size: .74rem;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--ps-accent-ink);
	margin: 0;
}
.ps-ayuda__d { font-size: .92rem; line-height: 1.7; color: var(--ps-gray-700); margin: 0; }

/* --- Catálogo de servicios en línea --- */
.ps-servs__grupo { margin-bottom: clamp(44px, 5.4vw, 72px); }
.ps-servs__grupo .ps-eyebrow { margin-bottom: 22px; }

/* Rótulo de cada grupo: grande y con la rayita de color delante. Antes era un
   antetítulo gris de doce píxeles que se perdía entre las tarjetas. */
.ps-servs__t {
	display: flex;
	align-items: center;
	gap: 16px;
	font-family: Lora, Georgia, serif;
	font-size: clamp(1.35rem, 2.4vw, 1.85rem);
	font-weight: 600;
	line-height: 1.2;
	color: var(--ps-accent-ink);
	margin: 0 0 26px;
}
.ps-servs__t::before {
	content: "";
	width: 38px;
	height: 3px;
	flex: none;
	background: var(--ps-accent);
}

/* --- Un fondo por grupo ---
   Muy lavados a propósito: tienen que decir «esto es otro bloque» sin competir
   con el precio ni con el botón, que es lo que de verdad hay que mirar. El
   texto sigue yendo sobre un fondo casi blanco, así que el contraste no baja. */
/* Con la clase repetida (0,2,0): .ps-serv se declara más abajo y su fondo
   blanco ganaba por orden. */
.ps-serv.ps-serv--g-documentos    { background: #F4F7FC; border-color: #DCE5F3; }
.ps-serv.ps-serv--g-contratos     { background: #FFF6EE; border-color: #FAE1CB; }
.ps-serv.ps-serv--g-marcas        { background: #F2F8F4; border-color: #D8E8DC; }
.ps-serv.ps-serv--g-emprendedores { background: #FAF4FA; border-color: #EDDBEA; }
.ps-serv.ps-serv--g-asesoria      { background: #F7F6F2; border-color: #E7E3D8; }
.ps-serv.ps-serv--destacado       { border-color: var(--ps-navy); }

/*
 * auto-fill y no auto-fit: los grupos de una o dos tarjetas —«Para
 * emprendedores», «Asesoría jurídica»— se estiraban a todo el ancho de la
 * página y rompían la retícula. Con auto-fill la columna vacía se mantiene y
 * cada tarjeta conserva su medida.
 */
.ps-servs {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(320px, 100%), 1fr));
	gap: clamp(18px, 2.2vw, 26px);
	align-items: start;
}

.ps-serv {
	position: relative;
	display: flex;
	flex-direction: column;
	height: 100%;
	background: var(--ps-paper);
	border: 1px solid var(--ps-gray-200);
	border-radius: var(--ps-radius);
	padding: clamp(24px, 3vw, 32px);
	transition: transform .5s var(--ps-ease), box-shadow .5s var(--ps-ease), border-color .4s;
}
.ps-serv:hover {
	transform: translateY(-5px);
	border-color: var(--ps-accent);
	box-shadow: var(--ps-shadow-lg);
}

/* El destacado se distingue por el filete superior, no por otro color de
   fondo: así la retícula sigue leyéndose como una sola familia. */
.ps-serv--destacado { border-color: var(--ps-navy); }
.ps-serv--destacado::before {
	content: "";
	position: absolute;
	inset: -1px -1px auto -1px;
	height: 3px;
	background: var(--ps-metal);
	border-radius: var(--ps-radius) var(--ps-radius) 0 0;
}
.ps-serv__sello {
	align-self: flex-start;
	font-size: .68rem;
	font-weight: 600;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--ps-accent-ink);
	border: 1px solid var(--ps-accent-soft);
	border-radius: 999px;
	padding: 4px 12px;
	margin-bottom: 14px;
}

.ps-serv__t {
	font-family: Lora, Georgia, serif;
	font-size: 1.22rem;
	font-weight: 600;
	line-height: 1.3;
	color: var(--ps-navy);
	margin: 0 0 12px;
}
.ps-serv__g {
	font-size: .95rem;
	line-height: 1.65;
	color: var(--ps-navy);
	margin: 0 0 12px;
}
.ps-serv__d {
	font-size: .9rem;
	line-height: 1.7;
	color: var(--ps-gray-700);
	margin: 0 0 10px;
}
.ps-serv__inc {
	font-size: .875rem;
	line-height: 1.65;
	color: var(--ps-gray-700);
	margin: 6px 0 0;
	padding-left: 14px;
	border-left: 2px solid var(--ps-gray-200);
}
.ps-serv__inc strong { color: var(--ps-navy); }

/* Precio y plazo: la línea que separa el «qué es» del «cuánto cuesta». */
.ps-serv__meta {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: 8px 18px;
	margin: auto 0 0;
	padding-top: 20px;
	border-top: 1px solid var(--ps-gray-200);
}
.ps-serv__precio {
	font-family: Lora, Georgia, serif;
	font-size: 1.45rem;
	font-weight: 600;
	color: var(--ps-navy);
	line-height: 1;
}
.ps-serv__tiempo {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: .8rem;
	color: var(--ps-gray-500);
}
.ps-serv__tiempo svg { width: 15px; height: 15px; stroke: var(--ps-gray-500); fill: none; }

.ps-serv__btn {
	margin-top: 18px;
	width: 100%;
	text-align: center;
}
.ps-serv__no {
	font-size: .78rem;
	line-height: 1.6;
	color: var(--ps-gray-500);
	margin: 14px 0 0;
}
.ps-serv__no strong { color: var(--ps-gray-700); }

/* --- Testimonios --- */
.ps-quote {
	background: var(--ps-paper);
	border: 1px solid var(--ps-gray-200);
	border-left: 2px solid var(--ps-accent);
	border-radius: var(--ps-radius);
	padding: clamp(24px, 3vw, 34px);
	transition: transform .5s var(--ps-ease), box-shadow .5s var(--ps-ease);
}
.ps-quote:hover { transform: translateY(-4px); box-shadow: var(--ps-shadow); }
.ps-quote__t {
	font-family: Lora, Georgia, serif;
	font-size: 1.05rem;
	line-height: 1.7;
	color: var(--ps-navy);
	margin: 0;
}
.ps-quote__a { font-size: .82rem; color: var(--ps-gray-500); margin: 16px 0 0; letter-spacing: .04em; }

/* --- Testimonios en video ---
   Van antes de los escritos: una cara hablando convence más que un párrafo
   entrecomillado, y quien no quiera verlos sigue bajando. */
.ps-vtestis {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(340px, 100%), 1fr));
	gap: clamp(18px, 2.4vw, 30px);
	margin-bottom: clamp(28px, 4vw, 48px);
}
/* Con un solo video no se estira a toda la página: queda centrado y a medida. */
.ps-vtestis--uno { grid-template-columns: minmax(0, 720px); justify-content: center; }

.ps-vtesti { margin: 0; }
.ps-vtesti__v {
	width: 100%;
	aspect-ratio: 16 / 9;
	display: block;
	background: #000;
	border-radius: var(--ps-radius);
	border: 1px solid rgba(255, 255, 255, .14);
	object-fit: cover;
}
.ps-vtesti__pie {
	margin-top: 12px;
	font-size: .82rem;
	letter-spacing: .04em;
	color: rgba(255, 255, 255, .7);
	text-align: center;
}
/* Sobre fondo claro el pie tiene que cambiar de color. */
:where(.ps-band-bone, .ps-band-gray) .ps-vtesti__pie { color: var(--ps-gray-500); }

/* =========================================================================
 * 8. Imágenes y sus animaciones
 * ========================================================================= */

.ps-media {
	position: relative;
	margin: 0;
	/* Sin esto, una figura con aspect-ratio dentro de una columna flexible se
	   encoge a su contenido y la foto sale del tamaño de un sello. */
	width: 100%;
	overflow: hidden;
	background: var(--ps-gray-100);
	border-radius: var(--ps-radius);
}
.ps-media img,
.ps-media video {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

/* Cortina que descubre la imagen al entrar en pantalla. */
.ps-media::after {
	content: "";
	position: absolute;
	inset: 0;
	background: var(--ps-navy);
	transform-origin: 50% 100%;
	transform: scaleY(1);
	transition: transform 1.05s var(--ps-ease);
	z-index: 2;
	pointer-events: none;
}
.ps-media.is-in::after { transform: scaleY(0); }

/* Y la propia imagen entra con un zoom lento. */
.ps-media img,
.ps-media video { transform: scale(1.12); transition: transform 1.5s var(--ps-ease); }
.ps-media.is-in img,
.ps-media.is-in video { transform: scale(1); }

/* Al pasar el cursor, la imagen respira. */
.ps-media--zoom img { transition: transform 1.4s var(--ps-ease); }
.ps-media--zoom:hover img { transform: scale(1.06); }

/* Foto en gris que recupera el color. */
.ps-media--gris img { filter: grayscale(1); transition: filter .8s var(--ps-ease), transform 1.4s var(--ps-ease); }
.ps-media--gris:hover img { filter: grayscale(0); transform: scale(1.04); }

/* Marco metálico desplazado, para las fotos destacadas. */
.ps-media--marco { z-index: 1; }
.ps-media--marco::before {
	content: "";
	position: absolute;
	inset: -1px;
	border: 1px solid var(--ps-accent);
	opacity: .6;
	z-index: 3;
	pointer-events: none;
	border-radius: var(--ps-radius);
}

.ps-media__cap { font-size: .78rem; color: var(--ps-gray-500); margin-top: 10px; }

/* Hueco vacío, mientras no se sube nada desde el panel. */
.ps-slot {
	display: grid;
	place-items: center;
	text-align: center;
	background: var(--ps-gray-100);
	border: 1px dashed var(--ps-accent-soft);
	border-radius: var(--ps-radius);
	color: var(--ps-gray-500);
	padding: 24px;
	min-height: 180px;
}
.ps-slot span {
	font-size: .72rem;
	letter-spacing: .14em;
	text-transform: uppercase;
	line-height: 1.9;
}
.ps-slot::after { display: none; }

/* Efecto de leve paralaje. Solo con JS y sin reducción de movimiento. */
.js .ps-parallax { will-change: transform; }

/* Cinta continua de logotipos o sellos. */
.ps-marquee {
	overflow: hidden;
	mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}
.ps-marquee__track {
	display: flex;
	align-items: center;
	gap: clamp(36px, 6vw, 80px);
	width: max-content;
	animation: ps-marquee 34s linear infinite;
}
.ps-marquee:hover .ps-marquee__track { animation-play-state: paused; }
.ps-marquee__item {
	font-family: Lora, Georgia, serif;
	font-size: 1.05rem;
	color: var(--ps-gray-500);
	white-space: nowrap;
}
.ps-marquee__item--img img {
	height: 40px;
	width: auto;
	filter: grayscale(1);
	opacity: .62;
	transition: filter .4s, opacity .4s;
}
.ps-marquee__item--img:hover img { filter: grayscale(0); opacity: 1; }
@keyframes ps-marquee { to { transform: translateX(-50%); } }

/* =========================================================================
 * 9. Blog, formularios, preguntas
 * ========================================================================= */

.ps-posts {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(290px, 100%), 1fr));
	gap: clamp(18px, 2.4vw, 28px);
}
.ps-post {
	display: flex;
	flex-direction: column;
	background: var(--ps-paper);
	border: 1px solid var(--ps-gray-200);
	border-radius: var(--ps-radius);
	overflow: hidden;
	text-decoration: none;
	transition: transform .55s var(--ps-ease), box-shadow .55s var(--ps-ease), border-color .4s;
}
.ps-post:hover { transform: translateY(-5px); border-color: var(--ps-accent); box-shadow: var(--ps-shadow-lg); }
.ps-post__ph { aspect-ratio: 16 / 9; overflow: hidden; background: var(--ps-bone); }
.ps-post__ph img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.2s var(--ps-ease); }
.ps-post:hover .ps-post__ph img { transform: scale(1.06); }
.ps-post__body { padding: 22px clamp(18px, 2vw, 24px) 26px; display: flex; flex-direction: column; gap: 10px; flex: 1; }
.ps-post__cat {
	font-size: .7rem;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--ps-accent-ink);
}
.ps-post__t {
	font-family: Lora, Georgia, serif;
	font-size: 1.1rem;
	font-weight: 600;
	line-height: 1.35;
	color: var(--ps-navy);
	margin: 0;
}
.ps-post__x { font-size: .9rem; line-height: 1.65; color: var(--ps-gray-500); margin: 0; flex: 1; }
.ps-post__m { font-size: .78rem; color: var(--ps-gray-500); }

/* Entrada individual */
/*
 * El titular de un artículo, un punto por debajo del de una página.
 *
 * Un título de página lo escribe el diseñador y es corto. Un titular de
 * artículo lo escribe quien redacta y suele ser una pregunta larga: a tamaño de
 * portada, «¿Recibiste una notificación de una entidad pública? Esto es lo
 * primero que debes revisar» ocupaba seis líneas y llenaba la pantalla entera
 * antes de que empezara el texto.
 */
.ps-titulo-articulo {
	font-size: clamp(1.6rem, 3.2vw, 2.6rem);
	line-height: 1.18;
}

.ps-single__meta {
	display: flex;
	flex-wrap: wrap;
	gap: 18px;
	font-size: .82rem;
	color: var(--ps-gray-500);
	margin-top: 16px;
}

/* --- Preguntas frecuentes --- */
.ps-faq { border-top: 1px solid var(--ps-gray-200); }
.ps-faq details {
	border-bottom: 1px solid var(--ps-gray-200);
	padding: 4px 0;
}
.ps-faq summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 20px;
	padding: 22px 4px;
	cursor: pointer;
	list-style: none;
	font-family: Lora, Georgia, serif;
	font-size: clamp(1rem, 1.5vw, 1.15rem);
	font-weight: 600;
	color: var(--ps-navy);
	transition: color .3s;
}
.ps-faq summary::-webkit-details-marker { display: none; }
.ps-faq summary:hover { color: var(--ps-accent-ink); }
.ps-faq summary::after {
	content: "";
	flex: none;
	width: 12px;
	height: 12px;
	border-right: 1.5px solid var(--ps-accent-ink);
	border-bottom: 1.5px solid var(--ps-accent-ink);
	transform: rotate(45deg) translateY(-3px);
	transition: transform .45s var(--ps-ease);
}
.ps-faq details[open] summary::after { transform: rotate(-135deg) translateY(-3px); }
.ps-faq details > :not(summary) {
	padding: 0 4px 24px;
	font-size: .95rem;
	line-height: 1.8;
	color: var(--ps-gray-700);
	margin: 0;
	animation: ps-fade .5s var(--ps-ease);
}
@keyframes ps-fade { from { opacity: 0; transform: translateY(-6px); } }

/* --- Áreas en acordeón ---
   Reutiliza el componente de preguntas frecuentes: mismo comportamiento, mismo
   JS que cierra las hermanas al abrir una, y solo cambia lo que hace falta para
   que un área se lea como un área y no como una pregunta. */
.ps-faq--areas summary { gap: 18px; align-items: baseline; padding: 26px 4px; }
.ps-faq--areas summary::after { align-self: center; }

.ps-acc__n {
	flex: none;
	font-family: Lora, Georgia, serif;
	font-size: .95rem;
	color: var(--ps-accent-ink);
	letter-spacing: .08em;
}
.ps-acc__t { flex: 1; }

.ps-faq--areas details[open] summary { color: var(--ps-accent-ink); }

/* La regla general del acordeón fija su propio relleno, así que aquí hace
   falta ganarle en especificidad para que el texto quede alineado con el
   título y no con el número. */
.ps-faq--areas details > .ps-acc__body { padding: 0 4px 30px 46px; }
.ps-acc__body .ps-body + .ps-body { margin-top: 1rem; }

.ps-acc__label {
	font-family: Poppins, sans-serif;
	font-size: .72rem;
	font-weight: 600;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--ps-accent-ink);
	margin: 26px 0 12px;
}

.ps-acc__lista {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr));
	gap: 2px 28px;
}
.ps-acc__lista li {
	display: flex;
	align-items: flex-start;
	gap: 11px;
	padding: 9px 0;
	font-size: .92rem;
	line-height: 1.6;
	color: var(--ps-gray-700);
	border-bottom: 1px solid var(--ps-gray-100);
}
.ps-acc__lista svg {
	width: 17px;
	height: 17px;
	flex: none;
	margin-top: 3px;
	stroke: var(--ps-accent-ink);
	fill: none;
}

.ps-acc__link {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin-top: 24px;
	font-size: .82rem;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--ps-accent-ink);
	text-decoration: none;
	transition: gap .4s var(--ps-ease), color .3s;
}
.ps-acc__link:hover { gap: 14px; color: var(--ps-navy); }

@media (max-width: 640px) {
	.ps-acc__body { padding-left: 4px; }
	.ps-faq--areas summary { gap: 12px; }
}

/* --- Formularios (plugin externo, con nuestro estilo) --- */
.ps-form :where(input[type=text], input[type=email], input[type=tel], input[type=url], input[type=date], input[type=number], select, textarea) {
	width: 100%;
	font-family: Poppins, sans-serif;
	font-size: .95rem;
	color: var(--ps-navy);
	background: var(--ps-paper);
	border: 1px solid var(--ps-gray-200);
	border-radius: var(--ps-radius);
	padding: .85rem 1rem;
	transition: border-color .3s, box-shadow .3s;
}
.ps-form :where(input, select, textarea):focus {
	outline: none;
	border-color: var(--ps-accent);
	box-shadow: 0 0 0 3px rgba(142, 151, 166, .18);
}
.ps-form textarea { min-height: 150px; resize: vertical; }

/*
 * En el iPhone, tocar un campo con la letra por debajo de 16 px hace que el
 * navegador amplíe la página entera y ya no vuelva sola. Es la causa habitual
 * de que un formulario «se descoloque» en el móvil.
 */
@media (max-width: 900px) {
	.ps-form :where(input, select, textarea) { font-size: 16px; }
}
.ps-form label { display: block; font-size: .85rem; font-weight: 500; margin-bottom: 6px; color: var(--ps-navy); }
.ps-form :where(input[type=submit], button[type=submit]) {
	background: var(--ps-navy);
	color: #fff;
	border: 0;
	border-radius: var(--ps-radius);
	padding: .95rem 2rem;
	font-family: Poppins, sans-serif;
	font-size: .875rem;
	font-weight: 500;
	cursor: pointer;
	transition: background-color .3s, transform .4s var(--ps-ease);
}
.ps-form :where(input[type=submit], button[type=submit]):hover { background: var(--ps-navy-deep); transform: translateY(-2px); }

/* Bloque de datos de contacto. */
.ps-contact { display: grid; gap: 2px; }
.ps-contact__i {
	display: flex;
	align-items: flex-start;
	gap: 14px;
	padding: 16px 0;
	border-bottom: 1px solid var(--ps-gray-200);
}
.ps-contact__i svg { width: 19px; height: 19px; flex: none; margin-top: 3px; stroke: var(--ps-accent-ink); fill: none; stroke-width: 1.4; }
.ps-contact__l { font-size: .72rem; letter-spacing: .12em; text-transform: uppercase; color: var(--ps-gray-500); display: block; }
.ps-contact__v { font-size: .98rem; color: var(--ps-navy); text-decoration: none; }
a.ps-contact__v:hover { color: var(--ps-accent-ink); }

/* Aviso legal discreto al pie de las páginas de consulta. */
.ps-disclaimer {
	font-size: .78rem;
	line-height: 1.7;
	color: var(--ps-gray-500);
	border-left: 2px solid var(--ps-gray-200);
	padding-left: 16px;
	max-width: 70ch;
}

/* =========================================================================
 * 10. Pie de página y botón de WhatsApp
 * ========================================================================= */

.ps-footer {
	background: var(--ps-navy-deep);
	color: rgba(255, 255, 255, .74);
	padding-block: clamp(50px, 6vw, 80px) 28px;
	margin-top: 0;
}
.ps-footer :where(h1, h2, h3, h4) { color: #fff; }
.ps-footer a { color: rgba(255, 255, 255, .74); text-decoration: none; transition: color .3s; }
.ps-footer a:hover { color: #fff; }
.ps-footer__top {
	display: grid;
	/*
	 * La primera columna era 1.5fr porque llevaba un párrafo de tres líneas.
	 * Sin él solo tiene el logotipo y las redes, y sobraba la mitad del ancho
	 * mientras al lado se partían en dos líneas nombres como «Derecho
	 * Financiero, Bancario y Recuperación de Cartera». El ancho se reparte
	 * ahora donde hay texto que leer.
	 */
	grid-template-columns: minmax(0, 1.05fr) repeat(3, minmax(0, 1fr));
	gap: clamp(26px, 4vw, 52px);
	padding-bottom: clamp(34px, 4vw, 50px);
}
.ps-footer__t {
	font-family: Poppins, sans-serif;
	font-size: .74rem;
	font-weight: 600;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--ps-accent-soft);
	margin: 0 0 16px;
}
.ps-footer ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 11px; font-size: .92rem; }
.ps-footer .ps-logo { color: #fff; }
.ps-footer .ps-logo-img { height: 92px; filter: brightness(0) invert(1); }
.ps-footer .ps-contact__i { border-bottom-color: rgba(255, 255, 255, .12); }
.ps-footer .ps-contact__l { color: rgba(255, 255, 255, .5); }
.ps-footer .ps-contact__v { color: rgba(255, 255, 255, .85); }
.ps-footer a.ps-contact__v:hover { color: #fff; }
.ps-footer .ps-contact__i svg { stroke: var(--ps-accent-soft); }

.ps-footer__bottom {
	display: flex;
	flex-wrap: wrap;
	gap: 12px 26px;
	justify-content: space-between;
	align-items: center;
	border-top: 1px solid rgba(255, 255, 255, .12);
	padding-top: 24px;
	font-size: .8rem;
	color: rgba(255, 255, 255, .5);
}
.ps-footer__bottom p { margin: 0; }

/* Redes sociales */
.ps-social { display: flex; gap: 10px; margin-top: 20px; }
.ps-social a {
	display: grid;
	place-items: center;
	width: 38px;
	height: 38px;
	border: 1px solid rgba(255, 255, 255, .2);
	border-radius: 50%;
	transition: background-color .35s, border-color .35s, transform .45s var(--ps-ease);
}
.ps-social a:hover { background: #fff; border-color: #fff; transform: translateY(-3px); }
.ps-social a:hover svg { fill: var(--ps-navy); }
.ps-social svg { width: 16px; height: 16px; fill: rgba(255, 255, 255, .8); transition: fill .35s; }

/* --- Redes destacadas, en el pie ---
   Tres círculos pequeños y grises al final de una columna los salta la vista.
   Aquí van más grandes, con el borde del color de acento en vez de un blanco
   apagado, con la palabra «Síguenos» encima y encendiéndose en el color de los
   botones al pasar por encima. Es el mismo elemento; lo que cambia es que
   ahora pide que lo pulses. */
.ps-social__t { margin: 26px 0 14px; }

.ps-social--destacado { gap: 12px; margin-top: 0; }
.ps-social--destacado a {
	width: 50px;
	height: 50px;
	border-color: color-mix(in srgb, var(--ps-accent) 55%, transparent);
	background: rgba(255, 255, 255, .04);
}
.ps-social--destacado svg { width: 21px; height: 21px; fill: #fff; }
.ps-social--destacado a:hover,
.ps-social--destacado a:focus-visible {
	background: var(--ps-cta);
	border-color: var(--ps-cta);
	transform: translateY(-3px);
}
.ps-social--destacado a:hover svg,
.ps-social--destacado a:focus-visible svg { fill: var(--ps-cta-ink); }

@supports not (color: color-mix(in srgb, red 50%, blue)) {
	.ps-social--destacado a { border-color: rgba(255, 255, 255, .32); }
}

/* Texto opcional bajo el logotipo del pie. Solo existe si se escribe algo en
   el panel; de fábrica viene vacío y no ocupa ni un píxel. */
.ps-footer__intro { margin-top: 1.2rem; }

/* Botón flotante de WhatsApp */
.ps-wa {
	position: fixed;
	right: clamp(16px, 3vw, 28px);
	bottom: clamp(16px, 3vw, 28px);
	z-index: 70;
	display: inline-flex;
	align-items: center;
	gap: 0;
	height: 56px;
	padding: 0 18px;
	border-radius: 999px;
	background: var(--ps-wa);
	color: var(--ps-wa-ink);
	text-decoration: none;
	font-family: Poppins, sans-serif;
	font-size: .875rem;
	font-weight: 500;
	white-space: nowrap;
	box-shadow: 0 8px 30px color-mix(in srgb, var(--ps-wa) 44%, transparent);
	transform: translateY(90px);
	opacity: 0;
	transition: transform .6s var(--ps-ease), opacity .5s, box-shadow .4s;
}
.ps-wa.is-in { transform: translateY(0); opacity: 1; }
.ps-wa:hover { box-shadow: 0 12px 38px rgba(37, 211, 102, .52); }
.ps-wa svg { width: 26px; height: 26px; fill: #fff; flex: none; }
.ps-wa__txt {
	max-width: 0;
	overflow: hidden;
	opacity: 0;
	transition: max-width .55s var(--ps-ease), opacity .35s, margin-left .55s var(--ps-ease);
}
.ps-wa:hover .ps-wa__txt { max-width: 220px; opacity: 1; margin-left: 10px; }
/* Un latido suave para que se note sin ser molesto. */
.ps-wa::before {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: 999px;
	border: 2px solid var(--ps-wa);
	animation: ps-pulse 2.8s var(--ps-ease) infinite;
	pointer-events: none;
}
@keyframes ps-pulse {
	0% { transform: scale(1); opacity: .7; }
	70%, 100% { transform: scale(1.35); opacity: 0; }
}

/* =========================================================================
 * 11. Animaciones de entrada
 * ========================================================================= */

.js [data-anim] {
	opacity: 0;
	transform: translateY(26px);
	transition: opacity .85s var(--ps-ease), transform .85s var(--ps-ease);
}
.js [data-anim].is-in { opacity: 1; transform: none; }

/* Escalonado dentro de una misma retícula. */
.js [data-anim]:nth-child(2) { transition-delay: .07s; }
.js [data-anim]:nth-child(3) { transition-delay: .14s; }
.js [data-anim]:nth-child(4) { transition-delay: .21s; }
.js [data-anim]:nth-child(5) { transition-delay: .28s; }
.js [data-anim]:nth-child(6) { transition-delay: .35s; }

/* Si el navegador sabe animar con el scroll, se lo dejamos a él. */
@supports (animation-timeline: view()) {
	html.ps-native [data-anim] {
		opacity: 1;
		transform: none;
		transition: none;
		animation: ps-in linear both;
		animation-timeline: view();
		animation-range: entry 8% cover 26%;
	}
	@keyframes ps-in {
		from { opacity: 0; transform: translateY(26px); }
		to { opacity: 1; transform: none; }
	}
}

@media (prefers-reduced-motion: reduce) {
	.js [data-anim] { opacity: 1 !important; transform: none !important; }
	.ps-media::after { display: none; }
	.ps-media img, .ps-media video { transform: none !important; }
	.ps-marquee__track { animation: none; }
	.ps-wa { transform: none; opacity: 1; }
	.ps-wa::before { animation: none; }
	.ps-reveal-line > span { transform: none; }
}

/* =========================================================================
 * 12. Responsive
 *
 * La escalera de anchos, de mayor a menor:
 *
 *   ≥ 1600  monitores grandes: la caja de contenido crece
 *   ≤ 1180  portátiles pequeños
 *   ≤ 1080  el pie pasa a dos columnas
 *   ≤ 1024  tablet apaisada
 *   ≤  900  tablet vertical: aquí entra el menú de hamburguesa
 *   ≤  760  se acaban las dos columnas de tarjetas
 *   ≤  640  teléfono
 *   ≤  400  teléfono pequeño
 *
 * Además hay dos bloques que no miran el ancho sino el aparato: pantallas
 * apaisadas muy bajas (un teléfono girado) y pantallas sin cursor, donde cada
 * cosa que se pueda pulsar necesita 44 px de alto.
 * ========================================================================= */

/* --- Monitores grandes ---
   Con la caja fija en 1240 px, en un monitor de 27 pulgadas el sitio queda
   como una columna estrecha en medio de un desierto blanco. */
@media (min-width: 1600px) {
	:root { --ps-shell: 1400px; }
	.ps-hero .ps-display { font-size: clamp(1.85rem, 3.35vw, 3.2rem); }
}

@media (max-width: 1180px) {
	.ps-servs { grid-template-columns: repeat(auto-fill, minmax(min(290px, 100%), 1fr)); }
	.ps-cards--2 { grid-template-columns: repeat(auto-fit, minmax(min(320px, 100%), 1fr)); }
}

@media (max-width: 1080px) {
	.ps-footer__top { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* --- Tablet apaisada ---
   Todo cabe todavía en dos columnas, pero el aire de escritorio sobra. */
@media (max-width: 1024px) {
	.ps-section { padding-block: clamp(56px, 7.5vw, 92px); }
	.ps-hero__in { gap: clamp(28px, 4vw, 48px); }
	.ps-strip__i { padding: clamp(18px, 2.6vw, 24px) 14px; }
}

/* --- El menú pasa a hamburguesa ---
   El corte está en 1024 y no en 900 por una razón medida: con siete entradas
   en el menú —al añadir «Ayuda social»— los enlaces no caben en una sola fila
   hasta los 1920 px, y un menú partido en dos filas encima del logotipo parece
   una página rota. Entre 1024 y 1440 se aprieta la tipografía (más abajo) y
   por debajo de 1024 se recoge en la hamburguesa, que ahora lleva escrito
   «Menú» y se entiende sin explicación. */
@media (max-width: 1024px) {
	.ps-burger { display: block; }
	.ps-header__cta { display: none; }
	/*
	 * El panel arranca arriba y no centrado: centrado, en cuanto el menú es
	 * más alto que la pantalla —siete enlaces más el bloque de contacto, o el
	 * teléfono girado— la mitad de arriba se sale por encima y no hay forma de
	 * llegar a ella haciendo scroll.
	 */
	.ps-nav {
		position: fixed;
		inset: 0;
		background: var(--ps-navy-deep);
		display: flex;
		flex-direction: column;
		align-items: stretch;
		justify-content: flex-start;
		opacity: 0;
		visibility: hidden;
		transform: translateY(-12px);
		transition: opacity .45s var(--ps-ease), transform .45s var(--ps-ease), visibility .45s;
		z-index: 55;
		margin: 0;
	}
	.ps-nav.is-open { opacity: 1; visibility: visible; transform: none; }
	.ps-nav .wp-block-navigation__container,
	.ps-nav ul {
		flex-direction: column;
		gap: 8px;
		text-align: center;
	}
	/*
	 * Blanco marcado como importante. Sobre el panel azul marino esto no es una
	 * preferencia de estilo: sin ello, la regla de WordPress hace que los
	 * enlaces hereden el color del cuerpo —azul marino— y el menú se abre con
	 * los enlaces puestos, en su sitio, y completamente invisibles.
	 *
	 * El selector largo se repite tal cual el de la regla base: una consulta de
	 * medios no añade peso, así que si aquí se pusiera solo «.ps-nav a» la
	 * regla base —más específica para ganarle a WordPress— seguiría mandando y
	 * el menú móvil saldría con la tipografía del escritorio.
	 */
	.ps-nav a,
	.ps-nav .wp-block-navigation-item__content,
	.ps-header .ps-nav a.wp-block-navigation-item__content {
		color: #fff !important;
		font-family: Lora, Georgia, serif;
		font-size: 1.5rem;
		padding: 12px 20px;
	}
	.ps-nav a::after { display: none; }

	/*
	 * --- Los desplegables, dentro del panel del teléfono ---
	 *
	 * WordPress solo abre un submenú al pasar el cursor, y esa regla vive
	 * dentro de @media (hover: hover). En un teléfono no hay cursor: el
	 * submenú se quedaría cerrado para siempre y «Equipo», «Ayuda social»,
	 * «Consultas» y «Agendar cita» serían inalcanzables desde el móvil. Que es
	 * el mismo error que ya tuvimos con el menú entero.
	 *
	 * Aquí van siempre abiertos, sangrados bajo su padre. No hay nada que
	 * desplegar porque no hay sitio donde esconderlo: la pantalla es alta y
	 * estrecha, y el panel ya se desplaza.
	 */
	.ps-nav .wp-block-navigation__submenu-container {
		position: static !important;
		display: block !important;
		opacity: 1 !important;
		visibility: visible !important;
		height: auto !important;
		width: 100% !important;
		min-width: 0 !important;
		overflow: visible !important;
		background: transparent !important;
		border: 0 !important;
		box-shadow: none !important;
		padding: 2px 0 10px !important;
	}

	.ps-nav .wp-block-navigation__submenu-container a,
	.ps-header .ps-nav .wp-block-navigation__submenu-container a.wp-block-navigation-item__content {
		font-family: Poppins, sans-serif;
		font-size: .95rem;
		font-weight: 400;
		color: rgba(255, 255, 255, .78) !important;
		padding: 9px 20px;
		text-align: center;
		white-space: normal;
	}
	.ps-nav .wp-block-navigation__submenu-container a:hover { background: transparent; padding-left: 20px; }

	/* La flecha sobra: no hay nada que desplegar. */
	.ps-nav .wp-block-navigation__submenu-icon { display: none !important; }

	/* El padre del grupo, un punto más discreto que las entradas sueltas para
	   que se lea como encabezado de su bloque y no como una opción más. */
	.ps-nav .has-child > a.wp-block-navigation-item__content { padding-bottom: 4px; }

	/* El botón de cerrar queda por encima del panel. */
	.ps-burger { z-index: 56; }
	.ps-burger.is-open span { background: #fff; }
	.ps-burger.is-open { border-color: rgba(255, 255, 255, .4); }

	/* Con el menú abierto, la página de debajo no se mueve. */
	body.ps-menu-abierto { overflow: hidden; }
}

/* --- El menú de escritorio, apretado ---
   Entre 1024 y 1440 las siete entradas caben, pero solo si se les recorta el
   aire. Por encima de 1440 vuelven a su tamaño de siempre. */
/* Y en la franja más justa —justo por encima del corte de la hamburguesa— un
   punto más de apriete. Medido: a 1025 px, con la talla del tramo siguiente,
   las siete entradas se partían en dos filas. */
@media (min-width: 1025px) and (max-width: 1180px) {
	.ps-nav .wp-block-navigation__container,
	.ps-nav ul { gap: 10px; }

	.ps-nav a,
	.ps-nav .wp-block-navigation-item__content,
	.ps-header .ps-nav a.wp-block-navigation-item__content { font-size: .76rem; letter-spacing: -.005em; }

	.ps-header__cta .wp-block-button__link,
	.ps-header__cta .ps-btn { padding: .6rem .9rem; font-size: .74rem; }

	.ps-logo-img { height: clamp(62px, 6.2vw, 78px); }
}

@media (min-width: 1181px) and (max-width: 1440px) {
	.ps-nav .wp-block-navigation__container,
	.ps-nav ul { gap: clamp(11px, 1.5vw, 22px); }

	.ps-nav a,
	.ps-nav .wp-block-navigation-item__content,
	.ps-header .ps-nav a.wp-block-navigation-item__content { font-size: .82rem; }

	.ps-header__cta .wp-block-button__link,
	.ps-header__cta .ps-btn { padding: .68rem 1.05rem; font-size: .78rem; }

	.ps-header__in { gap: clamp(12px, 2vw, 24px); }
}

@media (max-width: 900px) {
	.ps-hero__in { grid-template-columns: 1fr; }
	.ps-hero__text { max-width: none; }

	/*
	 * La frase vertical se va. Girada noventa grados ocupa toda la altura de la
	 * pantalla de un teléfono y no aporta nada que no diga ya el titular; y su
	 * columna «auto» rompía la retícula de una sola columna.
	 */
	.ps-hero--marca .ps-hero__in { grid-template-columns: 1fr; }

	/* La foto de la especialidad, a todo el ancho y sin flotar. */
	.ps-area-detalle__foto {
		float: none;
		width: 100%;
		margin: 0 0 24px;
	}
	.ps-hero__vert { display: none; }

	/* La banda de valores, en dos filas y sin las rayas verticales. */
	.ps-valores__in { justify-content: center; text-align: center; }
	.ps-valores__lista { justify-content: center; gap: 12px 20px; }
	.ps-valor { border-right: 0; padding-right: 0; font-size: .8rem; }
	.ps-valores__marca {
		border-left: 0;
		padding-left: 0;
		border-top: 2px solid var(--ps-cta);
		padding-top: 14px;
		width: 100%;
		text-align: center;
	}

	/* El enlace «ver todas» baja a su propia línea bajo el título. */
	.ps-sechead--fila { display: block; }
	.ps-sechead--fila .ps-verlink { margin-top: 16px; }
	.ps-hero__media::before { inset: 16px -16px -16px 16px; }
	.ps-row { grid-template-columns: 44px minmax(0, 1fr) 30px; }
	.ps-row__d { display: none; }

	/*
	 * La foto vertical del hero, a todo el ancho de un móvil, ocupa pantalla y
	 * cuarto: el visitante hace scroll a ciegas sin llegar a nada. Se recorta
	 * a un formato horizontal; la imagen no se deforma, se reencuadra.
	 */
	.ps-hero__media .ps-media { aspect-ratio: 4 / 3 !important; }
}

/* --- Fin de las dos columnas ---
   Por debajo de esto media tarjeta son unos 350 px: cabe el título y poco
   más. Mejor una sola columna ancha que dos ilegibles. */
@media (max-width: 760px) {
	.ps-cards,
	.ps-cards--2,
	.ps-cards--4,
	.ps-servs,
	.ps-steps,
	.ps-posts,
	.ps-ayudas,
	.ps-people { grid-template-columns: 1fr; }

	.ps-acc__lista { grid-template-columns: 1fr; }

	/*
	 * Las fichas del equipo llevan retrato vertical. Tres abogados en una
	 * columna serían tres pantallas de fotografía antes de llegar al texto.
	 */
	.ps-person__ph { aspect-ratio: 16 / 10; }
	.ps-person__ph img { object-position: 50% 25%; }

	/* Las fotos sueltas de las páginas interiores, igual. */
	.ps-media:not(.ps-post__ph):not(.ps-person__ph) { aspect-ratio: 4 / 3 !important; }
	.ps-slot { min-height: 150px; }

	/* El marco desplazado se sale de la pantalla si no se recoge. */
	.ps-hero__media::before,
	.ps-media--marco::before { inset: 8px -8px -8px 8px; }
}

@media (max-width: 640px) {
	.ps-footer__top { grid-template-columns: 1fr; }
	.ps-footer .ps-contact__i { border-bottom-color: rgba(255, 255, 255, .12); }
	.ps-footer .ps-contact__l { color: rgba(255, 255, 255, .5); }
	.ps-footer .ps-contact__v { color: rgba(255, 255, 255, .85); }
	.ps-footer a.ps-contact__v:hover { color: #fff; }
	.ps-footer .ps-contact__i svg { stroke: var(--ps-accent-soft); }

	.ps-footer__bottom { flex-direction: column; align-items: flex-start; }
	.ps-wa { height: 52px; padding: 0 14px; }
	.ps-wa__txt { display: none; }
	.ps-strip { grid-template-columns: repeat(2, 1fr); }
	.ps-section { padding-block: 56px; }
	.ps-section--tight { padding-block: 40px; }

	/*
	 * La cabecera medía 124 px: en una pantalla de teléfono es la sexta parte
	 * de todo lo que se ve, y encima va pegada arriba. El logotipo no encoge;
	 * lo que se recorta es el aire que tiene alrededor.
	 */
	:root { --ps-header-h: 104px; }
	.ps-header__in { padding-block: 8px; }
	.ps-header.is-stuck .ps-header__in { min-height: 84px; }

	/*
	 * Dos botones seguidos quedaban de anchos distintos, uno debajo del otro,
	 * como si el segundo importara menos. A todo el ancho se leen como lo que
	 * son: dos caminos igual de válidos.
	 */
	.ps-hero__cta,
	.ps-btnrow,
	.ps-band-navy .wp-block-buttons {
		flex-direction: column;
		align-items: stretch;
		width: 100%;
	}
	.ps-hero__cta > .ps-btn,
	.ps-hero__cta > .wp-block-button,
	.ps-hero__cta .wp-block-button__link,
	.ps-btnrow > *,
	.ps-band-navy .wp-block-buttons .wp-block-button,
	.ps-band-navy .wp-block-buttons .wp-block-button__link { width: 100%; }

	/* Un título de tres palabras no necesita ocupar cuatro líneas. */
	.ps-h2 { font-size: clamp(1.55rem, 6.4vw, 1.9rem); }
	.ps-display { font-size: clamp(1.9rem, 8vw, 2.4rem); }
	/* El titular de un artículo, más contenido: es largo por naturaleza y en un
	   teléfono llenaba la pantalla entera antes de empezar a leer. */
	.ps-titulo-articulo { font-size: clamp(1.45rem, 5.6vw, 1.85rem); }
	.ps-lead { font-size: 1rem; }

	.ps-faq summary { padding: 18px 2px; gap: 14px; }
	.ps-quote { padding: 22px; }
	.ps-serv { padding: 22px; }

	/* Las migas de pan largas se parten en vez de estirar la página. */
	.ps-crumbs { font-size: .74rem; line-height: 1.7; }
}

/* --- Teléfono pequeño ---
   iPhone SE y Android de gama de entrada: de 320 a 400 px de ancho. */
@media (max-width: 400px) {
	.ps-shell { padding-inline: 16px; }
	.ps-strip__n { font-size: 1.8rem; }
	.ps-strip__i { padding: 16px 8px; }
	.ps-quick:not(.ps-quick--wa) { width: 40px; }
	.ps-quick { height: 40px; }
	.ps-quick svg { width: 19px; height: 19px; }
	.ps-burger { height: 40px; margin-left: 6px; }
	.ps-header__quick { gap: 6px; }
	.ps-logo-img { height: 60px; }
	.ps-row { grid-template-columns: 32px minmax(0, 1fr) 22px; gap: 10px; }
	.ps-area { padding: 20px; }
	.ps-nav a,
	.ps-nav .wp-block-navigation-item__content,
	.ps-header .ps-nav a.wp-block-navigation-item__content { font-size: 1.3rem; padding: 10px 12px; }
}

/* --- Teléfonos estrechos ---
   Aquí no caben a la vez el logotipo, WhatsApp con su rótulo, el icono de
   llamar y «Menú». Algo tiene que salir, y sale el icono de llamar: es el
   único de los cuatro que está repetido —el teléfono aparece otra vez dentro
   del menú y en el pie—, y quitarlo es preferible a dejar los otros dos como
   iconos mudos, que es justo lo que hacía que no se entendiera la cabecera.
   El número está medido: sin el icono de llamar, la cabecera ocupa 285 px, y
   en la pantalla más estrecha que existe hoy quedan 288 útiles. */
@media (max-width: 420px) {
	.ps-quick:not(.ps-quick--wa) { display: none; }
}

/* En las pantallas de 320 y 360 px la cuenta salía por un pelo: se aprieta el
   relleno de los dos botones y entran con holgura. Medido, no estimado. */
@media (max-width: 365px) {
	.ps-quick--wa { padding: 0 10px; gap: 6px; font-size: .76rem; }
	.ps-burger { padding: 0 8px 0 32px; font-size: .68rem; letter-spacing: .02em; }
	.ps-burger span { left: 9px; width: 17px; }
}

/* --- Teléfono girado ---
   Con el teclado abierto o en apaisado quedan menos de 520 px de alto: el
   menú a pantalla completa no cabía y el hero se comía la primera pantalla. */
@media (max-height: 520px) and (orientation: landscape) {
	/* Una cabecera de 136 px en una pantalla de 360 px de alto es más de un
	   tercio de todo lo que se ve, y va pegada arriba. */
	:root { --ps-header-h: 76px; }
	.ps-header__in { padding-block: 6px; }
	.ps-logo-img { height: 54px; }
	.ps-hero { padding-block: 36px 44px; }
	.ps-nav {
		align-items: flex-start;
		padding-block: calc(var(--ps-header-real) + 8px) 24px;
		overflow-y: auto;
	}
	.ps-nav a,
	.ps-nav .wp-block-navigation-item__content,
	.ps-header .ps-nav a.wp-block-navigation-item__content { font-size: 1.15rem; padding: 8px 16px; }
	.ps-nav .ps-menufoot { margin-top: 20px; padding-top: 18px; }
}

/* --- Pantallas táctiles ---
   No es cuestión de ancho: en una tablet de 1024 px tampoco hay cursor. Un
   enlace de 17 px de alto se falla una vez de cada tres. La recomendación de
   Apple y la de Google coinciden: 44 px. */
@media (hover: none) {
	.ps-footer ul a,
	.ps-crumbs a,
	.ps-person__links a,
	.ps-social a {
		display: inline-flex;
		align-items: center;
		min-height: 44px;
	}
	.ps-footer ul { gap: 0; }
	.ps-contact__i { padding: 14px 0; min-height: 56px; }

	/* El dato de contacto que además es enlace —teléfono, WhatsApp, correo—
	   se cobra el alto que le falta hacia fuera, sin mover la fila. */
	a.ps-contact__v { display: block; padding-block: 12px; margin-block: -12px; }
	.ps-menufoot__datos > * { min-height: 44px; }

	/*
	 * Sin cursor no hay «pasar por encima». Los efectos que solo se ven al
	 * apuntar con el ratón se apagan: en un móvil dejan la foto en gris para
	 * siempre y la tarjeta levantada a destiempo al tocarla.
	 */
	.ps-area:hover,
	.ps-person:hover,
	.ps-step:hover,
	.ps-post:hover,
	.ps-serv:hover,
	.ps-quote:hover { transform: none; }
	.ps-media--gris img,
	.ps-person__ph img { filter: none; }
}

/* Impresión: el papel no necesita animaciones ni menús. */
@media print {
	.ps-header, .ps-footer, .ps-wa, .ps-progress, .ps-nav { display: none !important; }
	[data-anim] { opacity: 1 !important; transform: none !important; }
	body { color: #000; }
}
