/* ============================================================
   ODISEA · Dirección visual «Plano Maestro»
   Complementa theme.json: aquí vive lo que theme.json no expresa
   (retícula de papel milimétrico, marcas de registro, animaciones).
   ============================================================ */

:root {
	--odisea-ease: cubic-bezier(0.4, 0, 0.2, 1);
	--odisea-header-alto: 84px;
}

/* ------------------------------------------------------------
   Papel milimétrico: retícula fina de 12px + retícula maestra de 96px
   ------------------------------------------------------------ */

/* `clip` en lugar de `hidden`: contiene desbordes sin romper el header sticky. */
html,
body {
	overflow-x: clip;
}

body {
	background-image:
		linear-gradient(var(--wp--preset--color--linea-tenue) 1px, transparent 1px),
		linear-gradient(90deg, var(--wp--preset--color--linea-tenue) 1px, transparent 1px),
		linear-gradient(rgba(201, 206, 210, 0.55) 1px, transparent 1px),
		linear-gradient(90deg, rgba(201, 206, 210, 0.55) 1px, transparent 1px);
	background-size: 12px 12px, 12px 12px, 96px 96px, 96px 96px;
	-webkit-font-smoothing: antialiased;
}

/* Las secciones con fondo propio tapan la retícula a propósito. */
.wp-block-group.has-background {
	background-clip: padding-box;
}

/* ------------------------------------------------------------
   Accesibilidad · foco visible y salto al contenido
   ------------------------------------------------------------ */

:where(a, button, input, textarea, select, summary, [tabindex]):focus-visible {
	outline: 2px solid var(--wp--preset--color--cian-tinta);
	outline-offset: 3px;
}

.skip-link.screen-reader-text:focus {
	background: var(--wp--preset--color--base);
	color: var(--wp--preset--color--cian-tinta);
	border: 1px solid var(--wp--preset--color--cian-tinta);
	font-family: var(--wp--preset--font-family--space-grotesk);
	padding: 0.75rem 1.5rem;
	z-index: 1000;
}

/* ------------------------------------------------------------
   Encabezado del sitio · barra de título del plano
   ------------------------------------------------------------ */

/* El `sticky` va en la parte de plantilla, no en el `<header>`: un elemento
   pegajoso solo se desplaza dentro de la caja de su padre, y el envoltorio
   `.wp-block-template-part` mide exactamente lo que el encabezado, así que
   este se iba con el scroll. */
.wp-site-blocks > header.wp-block-template-part {
	position: sticky;
	top: 0;
	z-index: 100;
}

.odisea-header {
	position: relative;
	border-bottom: 1px solid var(--wp--preset--color--linea);
}

/* El fondo translúcido y su desenfoque van en un pseudoelemento, no en el
   encabezado: `backdrop-filter` sobre el propio `<header>` lo convierte en
   bloque contenedor de sus descendientes `position: fixed`, y eso encerraba
   el overlay del menú móvil dentro de los 85 px del encabezado. */
.odisea-header::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background: rgba(247, 249, 250, 0.92);
	backdrop-filter: blur(6px);
	pointer-events: none;
}

/* El logo y su sello no ceden ante el menú al comprimirse el encabezado. */
.odisea-header .wp-block-site-logo,
.odisea-header .odisea-sello {
	flex-shrink: 0;
}

/* El logotipo que entregó el cliente es un JPEG con fondo blanco, y ese
   recuadro se recortaba contra la retícula del encabezado. `multiply` funde el
   blanco con el fondo sin tener que rehacer el archivo con transparencia; el
   fondo del encabezado es casi blanco, así que el logotipo no se ensucia. */
.odisea-header .wp-block-site-logo img {
	mix-blend-mode: multiply;
	height: 52px;
	width: auto;
	max-width: none;
}

/* Sello de expediente junto al logo */
.odisea-sello {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	font-size: 0.62rem;
	white-space: nowrap;
	line-height: 1.5;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--wp--preset--color--grafito-suave);
	border-left: 1px solid var(--wp--preset--color--linea);
	padding-left: 0.9rem;
	margin: 0;
}

.odisea-sello strong {
	color: var(--wp--preset--color--cian-tinta);
	font-weight: 500;
}

/* Navegación: cada enlace es una lámina numerada */
.odisea-header .wp-block-navigation {
	font-family: var(--wp--preset--font-family--space-grotesk);
	font-weight: 500;
	font-size: 0.95rem;
	letter-spacing: 0.02em;
}

.odisea-header .wp-block-navigation-item__content {
	position: relative;
	white-space: nowrap;
	padding: 0.4rem 0;
	text-decoration: none;
	color: var(--wp--preset--color--contrast);
	transition: color 0.25s var(--odisea-ease);
}

.odisea-header .wp-block-navigation-item__content::after {
	content: "";
	position: absolute;
	left: 0;
	bottom: 0;
	width: 100%;
	height: 2px;
	background: var(--wp--preset--color--cian);
	transform: scaleX(0);
	transform-origin: left center;
	transition: transform 0.3s var(--odisea-ease);
}

.odisea-header .wp-block-navigation-item__content:hover,
.odisea-header .wp-block-navigation-item__content:focus-visible,
.odisea-header .current-menu-item > .wp-block-navigation-item__content {
	color: var(--wp--preset--color--cian-tinta);
}

.odisea-header .wp-block-navigation-item__content:hover::after,
.odisea-header .wp-block-navigation-item__content:focus-visible::after,
.odisea-header .current-menu-item > .wp-block-navigation-item__content::after {
	transform: scaleX(1);
}

/* Teléfono del encabezado en monoespaciada */
.odisea-telefono a {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	font-size: 0.82rem;
	white-space: nowrap;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--contrast);
	text-decoration: none;
}

.odisea-telefono a:hover,
.odisea-telefono a:focus-visible {
	color: var(--wp--preset--color--cian-tinta);
}

/* ------------------------------------------------------------
   Botones · sello técnico con marcas de registro en las esquinas
   ------------------------------------------------------------ */

.wp-block-button__link {
	position: relative;
	transition:
		background-color 0.25s var(--odisea-ease),
		box-shadow 0.25s var(--odisea-ease),
		transform 0.25s var(--odisea-ease);
}

.wp-block-button:not(.is-style-outline):not(.is-style-trazo) .wp-block-button__link::before,
.wp-block-button:not(.is-style-outline):not(.is-style-trazo) .wp-block-button__link::after {
	content: "";
	position: absolute;
	width: 8px;
	height: 8px;
	border-color: var(--wp--preset--color--cian);
	border-style: solid;
	transition: transform 0.25s var(--odisea-ease);
}

.wp-block-button:not(.is-style-outline):not(.is-style-trazo) .wp-block-button__link::before {
	top: -5px;
	left: -5px;
	border-width: 1px 0 0 1px;
}

.wp-block-button:not(.is-style-outline):not(.is-style-trazo) .wp-block-button__link::after {
	bottom: -5px;
	right: -5px;
	border-width: 0 1px 1px 0;
}

.wp-block-button__link:hover,
.wp-block-button__link:focus-visible {
	box-shadow: var(--wp--preset--shadow--cota);
	transform: translate(-1px, -1px);
}

.wp-block-button:not(.is-style-outline):not(.is-style-trazo) .wp-block-button__link:hover::before {
	transform: translate(-2px, -2px);
}

.wp-block-button:not(.is-style-outline):not(.is-style-trazo) .wp-block-button__link:hover::after {
	transform: translate(2px, 2px);
}

/* Botón secundario: trazo fino sobre el papel */
.wp-block-button.is-style-trazo .wp-block-button__link {
	background: transparent;
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--wp--preset--color--contrast);
	font-weight: 500;
}

.wp-block-button.is-style-trazo .wp-block-button__link:hover,
.wp-block-button.is-style-trazo .wp-block-button__link:focus-visible {
	background: transparent;
	color: var(--wp--preset--color--cian-tinta);
	border-color: var(--wp--preset--color--cian-tinta);
	box-shadow: 4px 4px 0 rgba(41, 171, 226, 0.18);
}

/* ------------------------------------------------------------
   Estilos de bloque propios
   ------------------------------------------------------------ */

/* Encabezado de expediente: kicker monoespaciado con marca de trazo */
.is-style-kicker {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	font-size: 0.75rem;
	font-weight: 400;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--wp--preset--color--cian-tinta);
	display: flex;
	align-items: center;
	gap: 0.75rem;
}

.is-style-kicker::before {
	content: "";
	width: 34px;
	height: 1px;
	flex-shrink: 0;
	background: var(--wp--preset--color--cian);
}

/* Nota de cálculo al margen */
.is-style-nota-tecnica {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	font-size: 0.72rem;
	line-height: 1.5;
	letter-spacing: 0.03em;
	color: var(--wp--preset--color--grafito-suave);
	background: rgba(247, 249, 250, 0.9);
	border: 1px solid var(--wp--preset--color--linea);
	border-left: 2px solid var(--wp--preset--color--cian);
	padding: 0.5rem 0.75rem;
	box-shadow: var(--wp--preset--shadow--papel);
}

.is-style-nota-tecnica strong {
	display: block;
	font-weight: 500;
	color: var(--wp--preset--color--contrast);
}

/* Cajetín: bloque enmarcado como recuadro de plano */
.wp-block-group.is-style-cajetin {
	background: rgba(255, 255, 255, 0.75);
	border: 1px solid var(--wp--preset--color--linea);
	padding: var(--wp--preset--spacing--40);
	position: relative;
}

.wp-block-group.is-style-cajetin::before,
.wp-block-group.is-style-cajetin::after {
	content: "";
	position: absolute;
	width: 10px;
	height: 10px;
	border-color: var(--wp--preset--color--cian);
	border-style: solid;
}

.wp-block-group.is-style-cajetin::before {
	top: -1px;
	left: -1px;
	border-width: 2px 0 0 2px;
}

.wp-block-group.is-style-cajetin::after {
	bottom: -1px;
	right: -1px;
	border-width: 0 2px 2px 0;
}

/* Imagen con marco de plano */
.wp-block-image.is-style-marco-plano img {
	border: 1px solid var(--wp--preset--color--linea);
	box-shadow: var(--wp--preset--shadow--papel);
}

/* Palabra delineada, como trazo sin relleno */
.odisea-contorno {
	color: transparent;
	-webkit-text-stroke: 1.5px var(--wp--preset--color--cian-tinta);
}

/* ------------------------------------------------------------
   Hero · credenciales como renglón de notas de cálculo
   ------------------------------------------------------------ */

.odisea-credenciales p {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	letter-spacing: 0.05em;
	color: var(--wp--preset--color--grafito-suave);
	position: relative;
	padding-left: 1rem;
	margin: 0;
}

.odisea-credenciales p::before {
	content: "+";
	position: absolute;
	left: 0;
	color: var(--wp--preset--color--cian-tinta);
	font-weight: 500;
}

/* ------------------------------------------------------------
   Esquema estructural · pórtico de 3 crujías × 4 niveles en CSS
   ------------------------------------------------------------ */

.odisea-esquema {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 520px;
}

.odisea-marco {
	position: relative;
	width: min(100%, 460px);
	max-width: 100%;
	height: 440px;
}

.odisea-marco span {
	position: absolute;
}

/* Ejes estructurales punteados con burbuja de identificación */
.odisea-eje {
	top: 34px;
	bottom: 56px;
	width: 0;
	border-left: 1px dashed var(--wp--preset--color--linea);
}

.odisea-eje-a { left: 5%; }
.odisea-eje-b { left: 35%; }
.odisea-eje-c { left: 65%; }
.odisea-eje-d { left: 95%; }

.odisea-burbuja {
	top: -34px;
	left: 50%;
	transform: translateX(-50%);
	width: 26px;
	height: 26px;
	display: flex;
	align-items: center;
	justify-content: center;
	border: 1.5px solid var(--wp--preset--color--cian-tinta);
	border-radius: 50%;
	background: var(--wp--preset--color--base);
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	font-size: 0.68rem;
	font-weight: 500;
	color: var(--wp--preset--color--cian-tinta);
}

/* Terreno y achurado de cimentación */
.odisea-terreno {
	left: 0;
	right: 0;
	bottom: 56px;
	height: 2px;
	background: var(--wp--preset--color--contrast);
	transform-origin: left center;
}

.odisea-achurado {
	left: 0;
	right: 0;
	bottom: 42px;
	height: 14px;
	transform-origin: left center;
	background: repeating-linear-gradient(
		-45deg,
		var(--wp--preset--color--linea) 0,
		var(--wp--preset--color--linea) 1px,
		transparent 1px,
		transparent 7px
	);
}

/* Columnas */
.odisea-columna {
	bottom: 56px;
	width: 5px;
	height: 350px;
	background: var(--wp--preset--color--contrast);
	transform: translateX(-50%);
	transform-origin: bottom center;
}

.odisea-columna-1 { left: 5%; }
.odisea-columna-2 { left: 35%; }
.odisea-columna-3 { left: 65%; }
.odisea-columna-4 { left: 95%; }

/* Trabes por nivel */
.odisea-trabe {
	left: 5%;
	right: 5%;
	height: 4px;
	background: var(--wp--preset--color--cian);
	transform-origin: left center;
}

.odisea-trabe-n1 { bottom: 134px; }
.odisea-trabe-n2 { bottom: 222px; }
.odisea-trabe-n3 { bottom: 310px; }
.odisea-trabe-n4 { bottom: 402px; }

.odisea-nivel {
	right: -8px;
	transform: translate(100%, 50%);
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	font-size: 0.62rem;
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--grafito-suave);
	white-space: nowrap;
}

/* Línea de cota con flechas y topes */
.odisea-cota {
	left: 5%;
	right: 5%;
	bottom: 6px;
	height: 1px;
	background: var(--wp--preset--color--cian-tinta);
}

.odisea-cota::before,
.odisea-cota::after {
	content: "";
	position: absolute;
	top: -3px;
	width: 0;
	height: 0;
	border-top: 3.5px solid transparent;
	border-bottom: 3.5px solid transparent;
}

.odisea-cota::before {
	left: 0;
	border-right: 8px solid var(--wp--preset--color--cian-tinta);
}

.odisea-cota::after {
	right: 0;
	border-left: 8px solid var(--wp--preset--color--cian-tinta);
}

.odisea-cota-tope {
	bottom: 0;
	width: 1px;
	height: 12px;
	background: var(--wp--preset--color--cian-tinta);
}

.odisea-cota-tope-inicio { left: 5%; }
.odisea-cota-tope-fin { left: 95%; }

.odisea-cota-texto {
	left: 50%;
	bottom: 12px;
	transform: translateX(-50%);
	padding: 0 0.5rem;
	background: var(--wp--preset--color--base);
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	font-size: 0.68rem;
	letter-spacing: 0.08em;
	color: var(--wp--preset--color--cian-tinta);
	white-space: nowrap;
}

/* Notas de cálculo flotantes al margen */
.odisea-nota {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	font-size: 0.64rem;
	line-height: 1.5;
	letter-spacing: 0.03em;
	color: var(--wp--preset--color--grafito-suave);
	background: rgba(247, 249, 250, 0.9);
	border: 1px solid var(--wp--preset--color--linea);
	border-left: 2px solid var(--wp--preset--color--cian);
	padding: 0.4rem 0.6rem;
	white-space: nowrap;
	box-shadow: var(--wp--preset--shadow--papel);
}

.odisea-nota strong {
	display: block;
	font-weight: 500;
	color: var(--wp--preset--color--contrast);
}

.odisea-nota-trabe { top: 16%; left: -6%; }
.odisea-nota-columna { bottom: 26%; left: -12%; }
.odisea-nota-carga { top: 36%; right: -9%; }

/* Cruces de registro, como marcas de plóter */
.odisea-registro {
	width: 18px;
	height: 18px;
	opacity: 0.65;
}

.odisea-registro::before,
.odisea-registro::after {
	content: "";
	position: absolute;
	background: var(--wp--preset--color--linea);
}

.odisea-registro::before {
	left: 50%;
	top: 0;
	bottom: 0;
	width: 1px;
}

.odisea-registro::after {
	top: 50%;
	left: 0;
	right: 0;
	height: 1px;
}

.odisea-registro-1 { top: 8%; right: 4%; }
.odisea-registro-2 { bottom: 10%; left: 2%; }

/* El esquema se delinea: terreno, columnas, trabes, cotas, notas */
@keyframes odisea-trazo-h { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes odisea-trazo-v {
	from { transform: translateX(-50%) scaleY(0); }
	to   { transform: translateX(-50%) scaleY(1); }
}
@keyframes odisea-aparece { from { opacity: 0; } to { opacity: 1; } }
@keyframes odisea-cota-pulso { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } }

.odisea-terreno,
.odisea-achurado {
	transform: scaleX(0);
	animation: odisea-trazo-h 0.6s var(--odisea-ease) 0.5s forwards;
}

.odisea-columna {
	transform: translateX(-50%) scaleY(0);
	animation: odisea-trazo-v 0.55s var(--odisea-ease) forwards;
}

.odisea-columna-1 { animation-delay: 0.80s; }
.odisea-columna-2 { animation-delay: 0.95s; }
.odisea-columna-3 { animation-delay: 1.10s; }
.odisea-columna-4 { animation-delay: 1.25s; }

.odisea-trabe {
	transform: scaleX(0);
	animation: odisea-trazo-h 0.55s var(--odisea-ease) forwards;
}

.odisea-trabe-n1 { animation-delay: 1.45s; }
.odisea-trabe-n2 { animation-delay: 1.60s; }
.odisea-trabe-n3 { animation-delay: 1.75s; }
.odisea-trabe-n4 { animation-delay: 1.90s; }

.odisea-eje,
.odisea-nivel,
.odisea-cota,
.odisea-cota-tope {
	opacity: 0;
	animation: odisea-aparece 0.5s var(--odisea-ease) 2.1s forwards;
}

.odisea-cota-texto {
	opacity: 0;
	animation:
		odisea-aparece 0.5s var(--odisea-ease) 2.3s forwards,
		odisea-cota-pulso 4s ease-in-out 3.2s infinite;
}

.odisea-nota {
	opacity: 0;
	animation: odisea-trazo-fade-up 0.6s var(--odisea-ease) forwards;
}

.odisea-nota-trabe { animation-delay: 2.50s; }
.odisea-nota-columna { animation-delay: 2.65s; }
.odisea-nota-carga { animation-delay: 2.80s; }

/* ------------------------------------------------------------
   Secciones del home
   ------------------------------------------------------------ */

/* Cifras de respaldo: números grandes en la display, como cotas */
.odisea-cifras > .wp-block-column {
	padding-top: var(--wp--preset--spacing--30);
}

.odisea-cifra {
	font-family: var(--wp--preset--font-family--space-grotesk);
	font-size: clamp(2rem, 4vw, 2.75rem);
	font-weight: 700;
	line-height: 1;
	letter-spacing: -0.02em;
	color: var(--wp--preset--color--cian-tinta);
	margin-bottom: 0.5rem;
}

/* Tarjeta de servicio: cajetín con número de lámina */
.odisea-servicio {
	height: 100%;
}

.odisea-servicio-num {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	font-size: 0.75rem;
	font-weight: 500;
	letter-spacing: 0.12em;
	color: var(--wp--preset--color--cian-tinta);
	margin-bottom: var(--wp--preset--spacing--20);
}

/* Pie de foto de proyecto: cajetín inferior del plano */
.odisea-cajetin-pie {
	border: 1px solid var(--wp--preset--color--linea);
	border-top: 0;
	padding: var(--wp--preset--spacing--20);
	background: rgba(255, 255, 255, 0.75);
}

.odisea-cajetin-pie h3 {
	line-height: 1.3;
	margin-bottom: 0.35rem;
}

.odisea-cajetin-pie p {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	letter-spacing: 0.04em;
	color: var(--wp--preset--color--grafito-suave);
	margin: 0;
}

/* La imagen y su pie forman una sola pieza, y los pies cierran a la misma altura */
.odisea-proyectos > .wp-block-column {
	display: flex;
	flex-direction: column;
}

.odisea-cajetin-pie {
	flex: 1;
}

.odisea-proyectos .wp-block-image {
	margin-bottom: 0;
}

.odisea-proyectos .wp-block-image img {
	width: 100%;
	aspect-ratio: 4 / 5;
	object-fit: cover;
	display: block;
}

.odisea-proyectos .wp-block-image.is-style-marco-plano img {
	border-bottom: 0;
	box-shadow: none;
}

/* Testimonios */
.odisea-testimonio {
	height: 100%;
}

.odisea-testimonio p:first-child {
	line-height: 1.5;
	color: var(--wp--preset--color--contrast);
}

.odisea-testimonio-autor {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--wp--preset--color--cian-tinta);
	margin-top: var(--wp--preset--spacing--30);
	padding-top: var(--wp--preset--spacing--20);
	border-top: 1px solid var(--wp--preset--color--linea);
}

/* CTA de cierre sobre grafito: la retícula se invierte */
.odisea-cta {
	background-image:
		linear-gradient(rgba(255, 255, 255, 0.045) 1px, transparent 1px),
		linear-gradient(90deg, rgba(255, 255, 255, 0.045) 1px, transparent 1px);
	background-size: 96px 96px, 96px 96px;
}

.odisea-cta .is-style-kicker {
	color: var(--wp--preset--color--cian);
}

.odisea-cta a {
	color: var(--wp--preset--color--cian);
}

.odisea-cta a:hover,
.odisea-cta a:focus-visible {
	color: var(--wp--preset--color--blanco);
}

.odisea-cta .wp-block-button__link,
.odisea-cta .wp-block-button__link:hover {
	color: var(--wp--preset--color--blanco);
}

/* Rótulo de dato de contacto. Por defecto sobre papel; dentro del CTA oscuro
   se aclara para mantener el contraste. */
.odisea-cta-dato {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	text-transform: uppercase;
	letter-spacing: 0.12em;
	color: var(--wp--preset--color--grafito-suave);
	margin-bottom: 0.25rem;
}

.odisea-cta .odisea-cta-dato {
	color: var(--wp--preset--color--linea);
	opacity: 0.75;
}

/* ------------------------------------------------------------
   Formulario de contacto (Fluent Forms) alineado al «Plano Maestro»
   ------------------------------------------------------------ */

.odisea-formulario .ff-el-input--label label {
	font-family: var(--wp--preset--font-family--space-grotesk);
	font-size: 0.95rem;
	font-weight: 600;
	color: var(--wp--preset--color--contrast);
}

.odisea-formulario .ff-el-form-control {
	border: 1px solid var(--wp--preset--color--linea);
	border-radius: 0;
	background: var(--wp--preset--color--blanco);
	font-family: var(--wp--preset--font-family--ibm-plex-sans);
	font-size: 1rem;
	color: var(--wp--preset--color--contrast);
	padding: 0.7rem 0.9rem;
	box-shadow: none;
	transition: border-color 0.25s var(--odisea-ease), box-shadow 0.25s var(--odisea-ease);
}

.odisea-formulario .ff-el-form-control:focus {
	border-color: var(--wp--preset--color--cian-tinta);
	box-shadow: 0 0 0 2px rgba(41, 171, 226, 0.2);
	outline: none;
}

.odisea-formulario .ff-el-form-control::placeholder {
	color: var(--wp--preset--color--grafito-suave);
	opacity: 0.7;
}

/* Notas de ayuda y asteriscos con el lenguaje de las anotaciones de cálculo */
.odisea-formulario .ff-el-help-message {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	font-size: 0.7rem;
	letter-spacing: 0.03em;
	color: var(--wp--preset--color--grafito-suave);
}

.odisea-formulario .ff-el-is-required.asterisk-right:after,
.odisea-formulario .ff-el-is-required:after {
	color: var(--wp--preset--color--cian-tinta);
}

/* Botón de envío: mismo sello técnico que el resto del sitio */
.odisea-formulario .ff-btn-submit {
	border-radius: 0;
	border: 1px solid var(--wp--preset--color--cian-tinta);
	background: var(--wp--preset--color--cian-tinta);
	color: var(--wp--preset--color--blanco);
	font-family: var(--wp--preset--font-family--space-grotesk);
	font-size: 0.95rem;
	font-weight: 600;
	letter-spacing: 0.03em;
	padding: 0.75rem 1.5rem;
	transition: background-color 0.25s var(--odisea-ease), box-shadow 0.25s var(--odisea-ease), transform 0.25s var(--odisea-ease);
}

.odisea-formulario .ff-btn-submit:hover,
.odisea-formulario .ff-btn-submit:focus-visible {
	background: var(--wp--preset--color--cian-profundo);
	border-color: var(--wp--preset--color--cian-profundo);
	box-shadow: var(--wp--preset--shadow--cota);
	transform: translate(-1px, -1px);
}

/* Errores y confirmación */
.odisea-formulario .error.text-danger,
.odisea-formulario .ff-el-is-error .text-danger {
	font-family: var(--wp--preset--font-family--ibm-plex-mono);
	font-size: 0.72rem;
	letter-spacing: 0.03em;
}

.odisea-formulario .ff-message-success {
	border: 1px solid var(--wp--preset--color--cian);
	border-left-width: 2px;
	border-radius: 0;
	background: rgba(41, 171, 226, 0.06);
	color: var(--wp--preset--color--contrast);
	padding: var(--wp--preset--spacing--30);
}

/* ------------------------------------------------------------
   Pie de página
   ------------------------------------------------------------ */

.odisea-footer {
	border-top: 1px solid var(--wp--preset--color--linea);
	background: var(--wp--preset--color--grafito-fuerte);
	color: var(--wp--preset--color--linea);
}

.odisea-footer :where(p, li, a) {
	color: var(--wp--preset--color--linea);
}

.odisea-footer :where(h2, h3, h4, h5, h6, strong) {
	color: var(--wp--preset--color--base);
}

.odisea-footer a:hover,
.odisea-footer a:focus-visible {
	color: var(--wp--preset--color--cian);
}

/* El correo no se parte a media palabra: baja de cuerpo antes que romperse. */
.odisea-footer a[href^="mailto:"] {
	font-size: 0.8rem;
	overflow-wrap: normal;
	word-break: normal;
}

/* Los enlaces del pie son listas de destinos, no enlaces dentro de una frase:
   les aplica el mínimo de 24 px de WCAG 2.2 (SC 2.5.8) y medían 17-21 px de
   alto. El relleno vertical agranda el área táctil sin mover el texto.
   Los teléfonos y correos son el mismo caso: en todo el sitio aparecen como
   dato de contacto suelto, nunca embebidos en una frase, así que no les
   corresponde la excepción de enlaces en línea. */
.odisea-footer a,
a[href^="tel:"],
a[href^="mailto:"] {
	display: inline-block;
	padding-block: 0.2rem;
}

.odisea-footer .wp-block-social-links .wp-social-link {
	background: transparent;
	color: var(--wp--preset--color--linea);
}

.odisea-footer .wp-block-social-links .wp-social-link:hover {
	color: var(--wp--preset--color--cian);
}

/* ------------------------------------------------------------
   Páginas interiores
   ------------------------------------------------------------ */

/* Listas de requisitos y alcances: viñeta de cota en vez de punto */
.odisea-lista {
	list-style: none;
	padding-left: 0;
	margin-top: var(--wp--preset--spacing--20);
}

.odisea-lista li {
	position: relative;
	padding-left: 1.4rem;
	margin-bottom: 0.55rem;
	color: var(--wp--preset--color--grafito-suave);
}

.odisea-lista li::before {
	content: "";
	position: absolute;
	top: 0.72em;
	left: 0;
	width: 12px;
	height: 1px;
	background: var(--wp--preset--color--cian);
}

/* Fichas de persona y de dirección técnica: cierran a la misma altura */
.odisea-ficha {
	height: 100%;
}

.odisea-ficha .odisea-testimonio-autor {
	margin-bottom: 0;
}

/* Ficha de servicio: el número crece hasta leerse como número de lámina */
.odisea-servicio-ficha .odisea-servicio-num {
	font-size: 1rem;
	margin-bottom: var(--wp--preset--spacing--20);
}

/* En pantalla ancha el título del servicio acompaña al texto sin alejarse */
@media (min-width: 782px) {
	.odisea-servicio-ficha h2 {
		position: sticky;
		top: var(--wp--preset--spacing--40);
	}
}

/* Cita a ancho completo en la página de Testimonios */
.odisea-cita {
	line-height: 1.4;
	color: var(--wp--preset--color--contrast);
	border-left: 2px solid var(--wp--preset--color--cian);
	padding-left: var(--wp--preset--spacing--30);
	margin: 0;
}

/* Pasos del proceso: separados por trazo, como cotas encadenadas */
.odisea-proceso > .wp-block-column {
	border-top: 2px solid var(--wp--preset--color--cian);
	padding-top: var(--wp--preset--spacing--20);
}

/* ------------------------------------------------------------
   Movimiento · el plano se delinea al entrar
   ------------------------------------------------------------ */

@keyframes odisea-trazo-fade-up {
	from { opacity: 0; transform: translateY(18px); }
	to   { opacity: 1; transform: translateY(0); }
}

.odisea-anima > * {
	opacity: 0;
	animation: odisea-trazo-fade-up 0.7s var(--odisea-ease) forwards;
}

.odisea-anima > *:nth-child(1) { animation-delay: 0.10s; }
.odisea-anima > *:nth-child(2) { animation-delay: 0.25s; }
.odisea-anima > *:nth-child(3) { animation-delay: 0.40s; }
.odisea-anima > *:nth-child(4) { animation-delay: 0.55s; }
.odisea-anima > *:nth-child(5) { animation-delay: 0.70s; }

@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after {
		animation-duration: 0.01ms !important;
		animation-delay: 0s !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
	}

	.odisea-anima > *,
	.odisea-eje,
	.odisea-nivel,
	.odisea-cota,
	.odisea-cota-tope,
	.odisea-cota-texto,
	.odisea-nota {
		opacity: 1;
	}

	.odisea-columna { transform: translateX(-50%) scaleY(1); }
	.odisea-trabe,
	.odisea-terreno,
	.odisea-achurado { transform: scaleX(1); }
}

/* ------------------------------------------------------------
   Responsivo
   ------------------------------------------------------------ */

/* El encabezado se descarga de elementos conforme se estrecha:
   primero el sello de expediente, luego el teléfono. */
@media (max-width: 1500px) {
	.odisea-sello {
		display: none;
	}
}

@media (max-width: 1300px) {
	.odisea-telefono {
		display: none;
	}
}

@media (max-width: 1080px) {
	.odisea-nota-columna { left: -2%; }
	.odisea-nota-carga { right: -2%; }
}

@media (max-width: 920px) {
	.odisea-esquema { min-height: 480px; }
	.odisea-marco { width: min(100%, 420px); }
	.odisea-nota-trabe,
	.odisea-nota-columna { left: 0; }
	.odisea-nota-carga { right: 0; }
	.odisea-nivel { display: none; }
}

/* El CTA del encabezado nunca parte la palabra. */
.odisea-header .wp-block-button__link {
	white-space: nowrap;
}

/* El bloque de navegación de WordPress colapsa en hamburguesa a 600 px, pero
   nuestro menú de seis entradas necesita ~800 px para caber en línea junto al
   logotipo: entre 600 y 800 px el menú se salía del viewport y arrastraba el
   CTA fuera de la pantalla. Se sube el punto de colapso a 1024 px replicando
   las reglas de core (que viven en un `@media (min-width: 600px)`). */
@media (max-width: 1023px) {
	.odisea-header .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) {
		display: none;
	}

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

/* Franja intermedia: el menú sigue en línea y ya no cabe el CTA.
   El hero y el pie mantienen la llamada a la acción. */
@media (min-width: 1024px) and (max-width: 1200px) {
	.odisea-header .wp-block-buttons {
		display: none;
	}
}

/* Con el menú colapsado el CTA vuelve, más compacto. */
@media (max-width: 1023px) {
	.odisea-header .wp-block-button__link {
		padding-left: 1rem;
		padding-right: 1rem;
		font-size: 0.85rem;
	}
}

@media (max-width: 782px) {
	/* Apiladas en vertical, cuatro fotos en formato retrato alargan demasiado
	   la página: en móvil se recortan a horizontal. */
	.odisea-proyectos .wp-block-image img {
		aspect-ratio: 3 / 2;
	}
}

/* WordPress apila las columnas por debajo de 782 px. En tablet eso dejaba el
   pie de cuatro bloques en una tira de 662 px de alto: aquí se acomodan 2 × 2. */
@media (min-width: 600px) and (max-width: 782px) {
	/* La clase se repite a propósito: core imprime su `flex-basis: 100%
	   !important` en estilos en línea que van después de esta hoja, así que
	   hace falta ganar por especificidad, no por orden. */
	.odisea-footer .wp-block-columns.wp-block-columns {
		flex-wrap: wrap !important;
		gap: 2.5rem 1.5rem;
	}

	/* El gap se fija arriba para poder descontarlo aquí: con el valor heredado
	   la suma de dos columnas excedía el ancho útil y volvían a apilarse. */
	.odisea-footer .wp-block-columns.wp-block-columns > .wp-block-column {
		flex-basis: calc(50% - 0.75rem) !important;
		flex-grow: 0;
	}
}

@media (max-width: 640px) {
	.odisea-header .wp-block-site-logo img {
		height: 44px;
	}

	/* Los 40 px de margen del cajetín se comían casi un cuarto del ancho útil
	   en móvil (el formulario quedaba en 260 px de 342). */
	.wp-block-group.is-style-cajetin {
		padding: var(--wp--preset--spacing--30);
	}

	/* A partir de aquí el CTA en una sola línea ya no cabe junto al logo y el
	   menú (391 px de contenido en 342 px útiles): se le permite partir en dos
	   renglones y se cierra la separación entre elementos. */
	.odisea-header .wp-block-button__link {
		white-space: normal;
		text-wrap: balance;
		line-height: 1.25;
	}

	.odisea-header .alignwide {
		gap: 0.75rem;
	}

	/* Las notas al margen no caben sin desbordar: el esquema se lee igual sin ellas. */
	.odisea-nota,
	.odisea-registro {
		display: none;
	}

	.odisea-esquema {
		min-height: 380px;
	}

	.odisea-marco {
		height: 340px;
	}

	.odisea-columna {
		height: 260px;
	}

	.odisea-trabe-n1 { bottom: 110px; }
	.odisea-trabe-n2 { bottom: 176px; }
	.odisea-trabe-n3 { bottom: 242px; }
	.odisea-trabe-n4 { bottom: 308px; }

	.odisea-cota-texto {
		font-size: 0.6rem;
	}

	.is-style-kicker {
		align-items: flex-start;
	}

	.is-style-kicker::before {
		margin-top: 0.55em;
	}
}
