/*
 * Overrides propios del tema Histhana.
 *
 * Se carga DESPUES del CSS espejado de Elementor (ver histhana_enqueue_custom en
 * functions.php), asi que gana sin necesidad de !important salvo donde se indica.
 * Todo lo que se toque aqui sobrevive a una regeneracion con tools/clone.mjs.
 *
 * Indice:
 *   0. Botones  - grosor de la flecha
 *   0b. Movimiento - curvas, aparicion al hacer scroll, parallax
 *   1. Navbar   - el boton verde no se estira
 *   2. Hero     - video de fondo self-hosted
 *   3. Carrusel "A quien acompanamos" - 3 tarjetas estables
 *   4. Carrusel de fotos - marquee movido por scroll
 *   5. Nuestro Modelo - foto de fondo
 */

/* ---------------------------------------------------------------------------
 * 0. FLECHA DE LOS BOTONES
 * El icono es un path relleno muy fino. Se engorda con un stroke del mismo
 * color siguiendo su contorno (paint-order lo pinta por debajo del relleno para
 * que no le coma las puntas). El stroke escala con el viewBox del SVG, asi que
 * el grosor se mantiene proporcional en todos los tamanos de boton.
 * ------------------------------------------------------------------------- */
/*
 * non-scaling-stroke es la clave: el icono es un viewBox de 512 unidades que se
 * pinta a 12px dentro de los botones redondos, asi que un stroke "normal" se
 * encogia a 0,3px y la flecha se veia como un pelo. Con este vector-effect el
 * grosor se mide en pixeles de pantalla y queda igual en todos los tamanos,
 * a la altura del trazo del texto.
 */
.elementor-button-icon svg[viewBox="0 0 512 376.83"] path {
	stroke: currentColor;
	stroke-width: 1.7px;
	vector-effect: non-scaling-stroke;
	stroke-linecap: round;
	stroke-linejoin: round;
	paint-order: stroke fill;
}

/*
 * Hover de los botones con circulo (.button-cta y variantes).
 *
 * El gesto original se queda tal cual: al pasar el raton la flecha se encoge por
 * la derecha y aparece un circulo por la izquierda. Lo unico que fallaba es que
 * ese circulo (un ::before) era de color liso, SIN flecha dentro, asi que la
 * flecha parecia esfumarse. Aqui se le dibuja la flecha como imagen de fondo.
 *
 * Selectores largos y !important porque los snapshots pintan ese ::before con
 * `background: <color> !important` desde un <style> del body, y la forma corta
 * del shorthand borraria la imagen.
 */
.button-cta .elementor-button .elementor-button-content-wrapper::before,
.button-cta-navbar .elementor-button .elementor-button-content-wrapper::before {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h13M12 5l7 7-7 7'/%3E%3C/svg%3E") !important;
	background-repeat: no-repeat !important;
	background-position: center !important;
	background-size: 13px 13px !important;
}

/* Esta variante lleva el circulo blanco, asi que la flecha va en naranja. */
.button-cta-color .elementor-button .elementor-button-content-wrapper::before {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23FF5B3F' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h13M12 5l7 7-7 7'/%3E%3C/svg%3E") !important;
	background-repeat: no-repeat !important;
	background-position: center !important;
	background-size: 13px 13px !important;
}

/* ---------------------------------------------------------------------------
 * 0b. MOVIMIENTO
 *
 * Tres piezas: curvas comunes, aparicion al entrar en pantalla y un parallax
 * corto en las fotos. Criterios:
 *   - solo se animan transform y opacity (van en el compositor, no repintan);
 *   - curva expo-out: casi todo el recorrido ocurre al principio, asi el
 *     movimiento se siente rapido aunque dure 700ms;
 *   - recorridos cortos (14px). Lo que se nota debe ser el contenido, no el
 *     efecto;
 *   - nada de esto se aplica con prefers-reduced-motion.
 *
 * El estado inicial (oculto) esta condicionado a .his-anim en <html>, clase que
 * pone un script inline en el <head> (functions.php). Si el JS no corre, la
 * clase nunca aparece y todo se ve normal: no hay forma de que el contenido
 * quede invisible.
 * ------------------------------------------------------------------------- */
:root {
	/* expo-out: arranca fuerte y frena suave */
	--his-ease: cubic-bezier(.16, 1, .3, 1);
	--his-ease-soft: cubic-bezier(.22, 1, .36, 1);
	--his-reveal-dur: .42s;
	--his-micro-dur: .22s;

	/*
	 * Escala de radios. Antes convivian 5, 6, 8, 10, 12, 14, 18, 20 y 25px sin
	 * criterio. Ahora hay dos medidas y las circulares (50%) se quedan como
	 * estan, que son iconos y flechas.
	 *   --his-radius        tarjetas y fotos que van sueltas
	 *   --his-radius-inner  fotos dentro de una tarjeta con padding: algo menor,
	 *                       para que las esquinas queden concentricas
	 */
	--his-radius: 14px;
	--his-radius-inner: 8px;
	--his-radius-pill: 999px;
}

/*
 * Registrar la variable la vuelve animable: sin @property, un custom property
 * salta de golpe entre valores en vez de transicionar. Es lo que permite hacer
 * el zoom de las fotos al pasar por encima sin pisar el --his-py del parallax,
 * ya que ambos viven en el mismo transform.
 */
@property --his-scale {
	syntax: '<number>';
	initial-value: 1.12;
	inherits: false;
}

/* -- Entrada de la pagina --------------------------------------------------
 * El navbar y el hero entran solos al cargar, escalonados.
 *
 * Va en CSS puro y no en JS a proposito: la clase .his-anim ya esta en <html>
 * antes del primer pintado, asi que la animacion arranca con el primer frame.
 * Si dependiera del JS del pie, el hero se pintaria quieto y saltaria despues.
 *
 * Duraciones cortas (.45s) y sin retrasos largos: el <h1> del hero es el
 * elemento LCP de la pagina y todo lo que se le añada aqui retrasa esa metrica.
 * ------------------------------------------------------------------------- */
@keyframes his-enter-up {
	from { opacity: 0; transform: translate3d(0, 16px, 0); }
	to   { opacity: 1; transform: none; }
}

@keyframes his-enter-down {
	from { opacity: 0; transform: translate3d(0, -10px, 0); }
	to   { opacity: 1; transform: none; }
}

/*
 * Orden de entrada: primero el titular palabra a palabra, luego el parrafo,
 * despues los botones y el navbar EL ULTIMO. Antes entraba el primero, que es
 * justo al reves de como se lee la pagina: lo que interesa es el mensaje, no la
 * navegacion.
 */
.his-anim .elementor-location-header > .e-con {
	animation: his-enter-down .5s var(--his-ease) .95s both;
}

/*
 * El :not(.his-has-split) es importante. Sin el, el titular del hero recibia
 * DOS entradas encadenadas: primero el bloque hacia su fundido -- mostrando el
 * titulo ya completo -- y solo despues las palabras subian desde su ventana.
 * Se veian las dos, una detras de otra. Los titulares partidos entran solo con
 * el movimiento de sus palabras.
 */
.his-anim .elementor-1348 .elementor-element-442e492 .elementor-element-1345af9 > .elementor-widget:not(.his-has-split),
.his-anim .elementor-1348 .elementor-element-442e492 .elementor-element-1345af9 > .e-con,
.his-anim .elementor-1348 .elementor-element-442e492 .elementor-element-082a948 {
	animation: his-enter-up .45s var(--his-ease) both;
}

/*
 * Escalonado del hero. Los tiempos dejan sitio a que el titular termine de
 * componerse antes de que entre el parrafo: son 7 palabras a 38ms desde los
 * 150ms, o sea que acaba cerca de los 0.6s.
 *
 *   .05s  etiqueta          .15s  titular (palabra a palabra, ver histhana.js)
 *   .58s  parrafo           .72s  botones
 *   .78s  tarjeta lateral   .95s  navbar
 */
/* Los selectores nombran el tipo de hijo (.elementor-widget / .e-con) a
   proposito: la regla que reparte la animacion lleva un :not(.his-has-split)
   que le suma especificidad, y un `> *:nth-child()` pelado se quedaba por
   debajo. Al perder, mandaba el animation-delay:0s implicito del atajo
   `animation:` y la etiqueta y el parrafo entraban a la vez que todo. */
.his-anim .elementor-1348 .elementor-element-442e492 .elementor-element-1345af9 > .elementor-widget:nth-child(1) { animation-delay: .05s; }
.his-anim .elementor-1348 .elementor-element-442e492 .elementor-element-1345af9 > .elementor-widget:nth-child(3) { animation-delay: .58s; }
.his-anim .elementor-1348 .elementor-element-442e492 .elementor-element-1345af9 > .e-con:nth-child(4) { animation-delay: .72s; }
.his-anim .elementor-1348 .elementor-element-442e492 .elementor-element-082a948 { animation-delay: .78s; }

/* El video de fondo entra con un fundido mas largo, por debajo de todo. */
.his-anim .elementor-1348 .elementor-element-442e492 .elementor-background-video-hosted {
	animation: his-fade 1.2s var(--his-ease) both;
}

@keyframes his-fade {
	from { opacity: 0; }
	to   { opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
	.his-anim .elementor-location-header > .e-con,
	.his-anim .elementor-1348 .elementor-element-442e492 * {
		animation: none !important;
	}
}

/* -- Titulares que emergen palabra a palabra ------------------------------
 * El <span> exterior es la ventana y el interior lleva la palabra, que empieza
 * desplazada hacia abajo y sube a su sitio. No se toca la opacidad: el texto
 * llega nitido desde el primer momento, sin ese aspecto lavado del fundido.
 *
 * El padding-bottom del interior deja aire para las colas de las letras (g, j,
 * p, y): sin el, la ventana se las cortaba. Y vertical-align:top evita que ese
 * relleno descuadre la linea base del titular.
 * ------------------------------------------------------------------------- */
/*
 * El titular se mantiene invisible hasta que JavaScript lo ha partido.
 *
 * El script vive en el pie, asi que sin esto el navegador pinta primero el
 * titular como texto normal; despues el script lo envuelve en ventanas y
 * desaparece de golpe; y solo entonces empieza la animacion. Se veia aparecer,
 * ocultarse y volver a salir.
 *
 * Va con visibility y no con opacity porque no debe animarse: es un interruptor.
 * Y depende de .his-anim, que solo existe si el JS arranco, asi que sin
 * JavaScript los titulares se ven con normalidad desde el primer momento.
 */
.his-anim .elementor-1348 .elementor-widget-heading .elementor-heading-title {
	visibility: hidden;
}

.his-anim .elementor-1348 .elementor-widget-heading .elementor-heading-title.his-ready {
	visibility: visible;
}

.his-split > span,
.his-split span > span {
	display: inline-block;
}

.his-split > span {
	overflow: hidden;
	vertical-align: top;
}

.his-split > span > span {
	padding-bottom: .12em;
}

.his-anim .his-split > span > span {
	transform: translateY(110%);
}

.his-anim .his-in .his-split > span > span,
.his-anim .his-split.his-in > span > span {
	transform: none;
	transition: transform .8s var(--his-ease);
}

/*
 * El titular del hero entra con animacion, no con transicion: no depende de que
 * el JS le añada una clase en el momento justo. Confiarlo a requestAnimationFrame
 * lo dejaba escondido si la pagina se abria en una pestaña en segundo plano,
 * donde el navegador no ejecuta esos callbacks.
 */
@keyframes his-word-up {
	from { transform: translateY(110%); }
	to   { transform: none; }
}

.his-anim .elementor-element-442e492 .his-split > span > span {
	animation: his-word-up .8s var(--his-ease) both;
}

/* El bloque que contiene un titular partido no se desvanece ademas: el efecto
   de las palabras ya es la entrada, y encadenar los dos se veia turbio. */
.his-anim .elementor-1348 .his-has-split {
	opacity: 1;
	transform: none;
}

@media (prefers-reduced-motion: reduce) {
	.his-anim .his-split > span > span {
		transform: none;
	}
}

/* -- Aparicion al hacer scroll --------------------------------------------
 * Unidad de aparicion = el bloque mas externo. El :not() descarta lo que ya
 * esta dentro de otro bloque que aparece, para que no se encadenen opacidades
 * ni aparezca una tarjeta vacia que luego se rellena sola. */
.his-anim .elementor-1348 :is(.elementor-widget, .card-01, .card-02, .card-03):not(:where(
	.elementor-element-442e492 *,
	.swiper-slide *,
	.elementor-widget *,
	.card-01 *,
	.card-02 *,
	.card-03 *
)) {
	opacity: 0;
	transform: translate3d(0, 14px, 0);
}

/* El :where() de arriba no suma especificidad a proposito: sin el, el :not()
   heredaria la de su argumento mas alto y .his-in no podria revertirlo. */

.his-anim .elementor-1348 .his-in {
	opacity: 1;
	transform: none;
	transition:
		opacity var(--his-reveal-dur) var(--his-ease),
		transform var(--his-reveal-dur) var(--his-ease);
}

/* -- Parallax --------------------------------------------------------------
 * La foto se amplia un poco y su marco recorta: asi puede desplazarse en
 * vertical sin descubrir los bordes. El desplazamiento lo escribe histhana.js
 * en --his-py, que aqui solo se consume. */
/*
 * El recorte del marco es lo que mantiene el parallax (y el zoom al pasar por
 * encima) dentro de la foto en vez de desbordarla.
 *
 * Los snapshots traen un `.elementor-widget-html, .elementor-widget-container
 * { overflow: visible !important }` en un <style> del body. Al ir despues que
 * esta hoja, con la misma especificidad y tambien !important, ganaba el suyo.
 * De ahi el selector largo: hace falta subir por encima de (0,1,0).
 *
 * El redondeo vive aqui, en el marco. Si estuviera solo en la <img>, al
 * desplazarse esta asomaria por las esquinas.
 */
.his-parallax-frame,
.elementor-widget .elementor-widget-container.his-parallax-frame,
figure.his-parallax-frame {
	overflow: hidden !important;
}

.soluciones-card .his-parallax-frame {
	border-radius: var(--his-radius-inner);
}

#car-img .his-parallax-frame {
	border-radius: var(--his-radius);
}

/*
 * Sin will-change a proposito. Lo tenia puesto y era contraproducente: hay 30
 * fotos con parallax, asi que forzaba 30 capas de composicion permanentes y la
 * pagina se volvia pesada. El navegador ya promociona la capa solo mientras el
 * transform esta cambiando, que es justo lo que hace falta.
 */
.his-parallax {
	transform: translate3d(0, var(--his-py, 0px), 0) scale(var(--his-scale, 1.12));
	transition: --his-scale .5s var(--his-ease);
}

/* -- Microinteracciones ---------------------------------------------------- */

/* Las tarjetas de "A quien acompanamos" giraban -1deg al pasar por encima.
   El giro llama mas la atencion que la tarjeta; se queda solo la elevacion. */
.card-soluciones {
	transition: transform .45s var(--his-ease-soft) !important;
}

.card-soluciones:hover {
	transform: translate3d(0, -6px, 0);
}

/* La flecha de los enlaces de tarjeta: mismo gesto, curva mas decidida. */
.buton-line .elementor-button-icon {
	transition: transform var(--his-micro-dur) var(--his-ease);
}

.buton-line .elementor-button:hover .elementor-button-icon {
	transform: translate3d(5px, 0, 0);
}

@media (prefers-reduced-motion: reduce) {
	.his-anim .elementor-1348 :is(.elementor-widget, .card-01, .card-02, .card-03) {
		opacity: 1;
		transform: none;
	}

	.his-parallax {
		transform: none;
	}

	.card-soluciones:hover {
		transform: none;
	}
}

/* ---------------------------------------------------------------------------
 * 1. NAVBAR
 * post-1387.css reparte el header con --width:85% (barra blanca) y --width:15%
 * (contenedor del boton). En monitores anchos ese 15% estiraba el boton verde.
 * Ahora el boton mide lo que mide su contenido y la barra blanca absorbe el resto.
 * Solo desde 1025px: en tablet Elementor ya apila ambos al 100%.
 * ------------------------------------------------------------------------- */
@media (min-width: 1025px) {
	/* 1387 = cabecera del home | 2130 = cabecera del blog y de privacidad */
	.elementor-1387 .elementor-element.elementor-element-145b971,
	.elementor-2130 .elementor-element.elementor-element-f533c08 {
		--width: auto;
		flex: 1 1 auto;
		min-width: 0;
	}

	.elementor-1387 .elementor-element.elementor-element-ad71c27,
	.elementor-2130 .elementor-element.elementor-element-1c9def7 {
		--width: auto;
		flex: 0 0 auto;
	}
}

/* ---------------------------------------------------------------------------
 * 2. HERO - video de fondo
 * El contenedor del video vive dentro de .e-con-inner, que esta limitado a
 * --content-width:1650px. Lo sacamos a ancho completo para que el video (y la
 * gradiente, que es su ::before) cubran toda la pantalla.
 * ------------------------------------------------------------------------- */
.elementor-1348 .elementor-element.elementor-element-442e492 > .e-con-inner > .elementor-background-video-container {
	inset: 0 auto auto 50%;
	width: 100vw;
	height: 100%;
	transform: translateX(-50%);
}

.elementor-1348 .elementor-element.elementor-element-442e492 .elementor-background-video-hosted {
	inset: 0;
	width: 100%;
	height: 100%;
	transform: none;
	object-fit: cover;
}

/* Sin video (fallo de red o prefers-reduced-motion) queda el color de fondo del
   contenedor, asi que el texto se sigue leyendo. */
@media (prefers-reduced-motion: reduce) {
	.elementor-1348 .elementor-element.elementor-element-442e492 .elementor-background-video-hosted {
		display: none;
	}
}

/* ---------------------------------------------------------------------------
 * 3. "A QUIEN ACOMPANAMOS" - 3 tarjetas
 * El widget e72c1a8 es un carrusel anidado con exactamente 3 slides y
 * slides_to_show:3, o sea que nunca hay nada que deslizar. El autoplay (que
 * quitamos del data-settings en el snapshot) solo producia micro-saltos y
 * anchos distintos entre tarjetas. Aqui lo fijamos como grid de 3.
 * ------------------------------------------------------------------------- */
.elementor-element-e72c1a8 .swiper-wrapper {
	align-items: stretch;
	transform: none !important; /* por si Swiper alcanza a escribir un translate */
}

.elementor-element-e72c1a8 .swiper-slide {
	height: auto;
}

/* El CTA de la 3a tarjeta ("Quiero disenar un programa a medida") no cabe en una
   linea. El wrapper es flex row-reverse, asi que por defecto la flecha quedaba
   centrada respecto al bloque de dos lineas, flotando en el aire. Anclada a la
   ultima linea se lee como parte del enlace. */
.elementor-element-e72c1a8 .buton-line .elementor-button-content-wrapper {
	align-items: flex-end;
	text-align: left;
}

.elementor-element-e72c1a8 .buton-line .elementor-button-icon {
	flex: 0 0 auto;
}

/* Y que quepa en una sola linea: partido en dos, "Quiero disenar un programa
   a medida" dejaba la flecha descolgada y desalineaba las tres tarjetas. */
.elementor-element-e72c1a8 .buton-line .elementor-button-text {
	white-space: nowrap;
}

/* Los 3 puntos de paginacion no pintan nada si no hay nada que paginar. */
.elementor-element-e72c1a8 .swiper-pagination {
	display: none;
}

/* Titulo algo menor: a 1.5em los tres titulares caian en tres lineas y las
   tarjetas quedaban desiguales. El min-height alinea los parrafos aunque un
   titular ocupe una linea mas que otro. */
.elementor-element-e72c1a8 .card-soluciones .elementor-widget-heading .elementor-heading-title {
	font-size: 1.22em;
	line-height: 1.2em;
}

.elementor-element-e72c1a8 .card-soluciones .elementor-widget-heading {
	min-height: 2.4em;
	display: flex;
	align-items: flex-end;
}

/* ---------------------------------------------------------------------------
 * 4. CARRUSEL DE FOTOS (#car-img)
 * Las 9 fotos vienen con relaciones de aspecto muy distintas (900x1600,
 * 1024x768, 1920x2560...). Le quitamos el control a Swiper (ver el cambio de
 * data-widget_type en el snapshot) y lo montamos como una cinta de tamano fijo
 * que histhana.js desplaza con el scroll.
 * ------------------------------------------------------------------------- */
#car-img {
	--his-slide-w: clamp(200px, 22vw, 300px);
	--his-slide-h: clamp(260px, 28vw, 380px);
	--his-slide-gap: 16px;
}

/* El recorte lo hace el contenedor exterior, que esta quieto. */
#car-img .elementor-image-carousel-wrapper {
	overflow: hidden;
}

/* La cinta NO debe recortar: Swiper le pone overflow:hidden y, como la movemos
   con transform, su caja viaja con ella y se comia los slides de la derecha. */
#car-img .swiper-wrapper {
	display: flex;
	gap: var(--his-slide-gap);
	align-items: stretch;
	width: max-content;
	overflow: visible;
	transform: translate3d(0, 0, 0);
	will-change: transform;
}

#car-img .swiper-slide {
	flex: 0 0 var(--his-slide-w);
	width: var(--his-slide-w);
	height: var(--his-slide-h);
	margin: 0;
}

#car-img .swiper-slide-inner,
#car-img .swiper-slide > a {
	display: block;
	width: 100%;
	height: 100%;
	margin: 0;
}

#car-img .swiper-slide-image {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	border-radius: 6px;
}

/* Sin autoplay tampoco hacen falta los controles. */
#car-img .swiper-pagination,
#car-img .elementor-swiper-button {
	display: none;
}

@media (max-width: 767px) {
	#car-img {
		--his-slide-w: 62vw;
		--his-slide-h: 78vw;
		--his-slide-gap: 12px;
	}
}

/* ---------------------------------------------------------------------------
 * 4b. NUESTRAS SOLUCIONES - tarjetas
 * Antes la foto, el titulo y el texto flotaban sueltos sobre el fondo crema.
 * Se agrupan en una tarjeta blanca con un padding corto, de forma que se lean
 * como una sola pieza. El radio de la foto es algo menor que el de la tarjeta
 * para que las esquinas queden concentricas.
 * ------------------------------------------------------------------------- */
.soluciones-card {
	background-color: #fff;
	padding: 12px 12px 20px;
	border-radius: var(--his-radius);
	box-shadow: 0 2px 4px rgb(44 62 80 / 4%), 0 12px 28px rgb(44 62 80 / 6%);
	transition: box-shadow .4s var(--his-ease);
}

/*
 * La tarjeta NO se desplaza al pasar por encima. Vive dentro del .swiper, que
 * lleva overflow:hidden, asi que al levantarse su sombra se cortaba contra el
 * borde del slide y se veia un tajo. El gesto lo hace la foto, que se acerca un
 * poco dentro de su marco, mas una sombra algo mas honda.
 */
.soluciones-card:hover {
	box-shadow: 0 4px 10px rgb(44 62 80 / 7%), 0 18px 36px rgb(44 62 80 / 10%);
}

.soluciones-card:hover .his-parallax {
	--his-scale: 1.2;
}

.soluciones-card .elementor-widget-image img {
	display: block;
	width: 100%;
	border-radius: var(--his-radius-inner);
}

/* El padding de la tarjeta ya separa del borde; el texto solo necesita
   un respiro lateral extra minimo. */
.soluciones-card .elementor-widget-heading,
.soluciones-card .elementor-widget-text-editor {
	padding-inline: 6px;
}

/* Titulo en UNA sola linea. El mas largo ("Transformacion Organizacional y
   Cultural") necesitaba unos 388px y solo hay 380, asi que a 24px no cabia por
   poco. A 19px entra con margen incluso el mas largo.
   El selector es largo porque la regla original viene de la hoja generada por
   Elementor, con especificidad 0-3-0. */
.elementor-1348 .elementor-element .soluciones-card .elementor-widget-heading .elementor-heading-title {
	font-size: 19px;
	line-height: 1.3;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* Que las 6 tarjetas midan lo mismo aunque el titulo ocupe una o dos lineas. */
.elementor-element-4b7ed2d .swiper-slide {
	height: auto;
}

.elementor-element-4b7ed2d .swiper-slide > .e-con,
.elementor-element-4b7ed2d .swiper-slide > .e-con > .e-con-inner,
.elementor-element-4b7ed2d .soluciones-card {
	height: 100%;
}

/* ---------------------------------------------------------------------------
 * 4a. NUESTRO ADN - tarjetas apiladas
 *
 * Las tarjetas son sticky y su rotacion la escribe el scroll en el atributo
 * style. El snapshot les puso ademas `transition: transform .4s`, y ahi estaba
 * el peso: al transicionar un transform que YA cambia con el scroll, la tarjeta
 * va siempre cuatro decimas por detras de la rueda. Se sentia como arrastrar.
 * El scroll ya es la animacion; no necesita otra encima.
 * ------------------------------------------------------------------------- */
.card-section .card-01,
.card-section .card-02,
.card-section .card-03 {
	transition: box-shadow .3s var(--his-ease) !important;
}

/* ---------------------------------------------------------------------------
 * 4b2. NUESTRAS SOLUCIONES - paginacion y flechas
 * Los puntos venian con el gris por defecto de Swiper, ajenos a la paleta. Se
 * pasan a los colores de marca: el activo se alarga en capsula en vez de solo
 * cambiar de color, que se lee mejor de un vistazo.
 * ------------------------------------------------------------------------- */
/* html body para ganarle a la hoja de Swiper y al <style> del body, que
   alineaban los puntos a la izquierda. */
/*
 * Anclada al pie del widget. Dejandola en el flujo normal acababa 730px por
 * debajo de su seccion -- se colaba en "Nuestro Modelo" -- porque la caja del
 * swiper es mucho mas alta que las tarjetas visibles.
 */
html body .elementor-element-4b7ed2d > .elementor-widget-container {
	position: relative;
	padding-bottom: 3.2rem;
}

html body .elementor-element-4b7ed2d .swiper-pagination {
	position: absolute !important;
	inset: auto 0 .6rem 0;
	display: flex !important;
	justify-content: center !important;
	align-items: center;
	gap: 7px;
	width: 100%;
	transform: none !important;
	margin: 0;
}

/* -- Flechas de navegacion (las inyecta histhana.js) ---------------------- */
.elementor-element-4b7ed2d .swiper {
	position: relative;
}

.elementor-element-4b7ed2d .his-nav {
	position: absolute;
	top: 50%;
	z-index: 5;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: #fff;
	color: #0F2C2C;
	cursor: pointer;
	box-shadow: 0 2px 6px rgb(16 44 44 / 10%), 0 10px 26px rgb(16 44 44 / 12%);
	transform: translateY(-50%);
	transition: background var(--his-micro-dur) var(--his-ease), color var(--his-micro-dur) var(--his-ease);
}

/* El giro va dentro del mismo transform que el centrado: como propiedad suelta
   (rotate:) se componia despues del translateY y descuadraba la altura. */
.elementor-element-4b7ed2d .his-nav--prev {
	left: 8px;
	transform: translateY(-50%) rotate(180deg);
}

.elementor-element-4b7ed2d .his-nav--next {
	right: 8px;
}

.elementor-element-4b7ed2d .his-nav:hover {
	background: #FF5B3F;
	color: #fff;
}

@media (max-width: 767px) {
	.elementor-element-4b7ed2d .his-nav {
		width: 36px;
		height: 36px;
	}
}

/* Swiper calcula el tamaño del punto desde sus propias variables, asi que hay
   que fijarlas ademas del width, y con !important para ganarle a su hoja. */
.elementor-element-4b7ed2d .swiper-pagination-bullet {
	--swiper-pagination-bullet-size: 7px;
	--swiper-pagination-bullet-width: 7px;
	--swiper-pagination-bullet-height: 7px;
	width: 7px !important;
	height: 7px !important;
	margin: 0 !important;
	background: #0F2C2C !important;
	opacity: .18;
	border-radius: var(--his-radius-pill);
	transition: width .35s var(--his-ease), opacity .35s var(--his-ease), background .35s var(--his-ease);
}

/* Selector deliberadamente exagerado: el ancho lo pisa una regla de un <style>
   del body que gana por orden de documento, y no basta con !important a igual
   especificidad. */
html body .elementor-element-4b7ed2d .swiper-pagination .swiper-pagination-bullet-active {
	width: 26px !important;
	background: #FF5B3F !important;
	opacity: 1;
}

/* ---------------------------------------------------------------------------
 * 4b3. BLOG - carrusel
 * El widget venia como rejilla de 4 columnas; histhana.js lo reordena al
 * maquetado de Swiper y aqui se desactiva la rejilla para que no pelee.
 * ------------------------------------------------------------------------- */
.his-blog-carousel {
	display: block !important;
	position: relative;
	grid-template-columns: none !important;
}

.his-blog-carousel .swiper-slide {
	height: auto;
	display: flex;
}

.his-blog-carousel .swiper-slide > .e-loop-item {
	width: 100%;
}

/*
 * Tarjetas parejas. Los titulares ocupan una, dos o tres lineas, asi que sin
 * esto cada tarjeta terminaba a una altura y el "Ver mas" bailaba. La tarjeta
 * se estira a lo alto y el enlace se ancla abajo con margin-top:auto.
 */
.his-blog-carousel .e-loop-item,
.his-blog-carousel .e-loop-item > .e-con,
.his-blog-carousel .e-loop-item > .e-con > .e-con-inner {
	height: 100%;
}

.his-blog-carousel .e-loop-item > .e-con {
	display: flex;
	flex-direction: column;
}

.his-blog-carousel .e-loop-item .elementor-widget-button {
	margin-top: auto;
}

/* Espaciados propios de la tarjeta: la fecha discreta y pegada al titular, y el
   titular sin el hueco de mas que traia. */
.his-blog-carousel .e-loop-item .elementor-widget-post-info {
	margin-bottom: .35rem;
}

.his-blog-carousel .e-loop-item .elementor-post-info__item--type-date {
	font-size: .72rem;
	letter-spacing: .06em;
	color: #9C9B9B;
}

.his-blog-carousel .e-loop-item .elementor-widget-heading {
	margin-bottom: .9rem;
}

.his-blog-carousel .e-loop-item .elementor-heading-title {
	line-height: 1.32;
}

/* Las flechas se reutilizan del carrusel de soluciones, pero aqui el fondo es
   verde oscuro, asi que el circulo blanco ya contrasta por si solo. */
.his-blog-carousel .his-nav {
	position: absolute;
	top: 44%;
	z-index: 5;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: #fff;
	color: #0F2C2C;
	cursor: pointer;
	box-shadow: 0 2px 6px rgb(0 0 0 / 14%), 0 10px 26px rgb(0 0 0 / 18%);
	transform: translateY(-50%);
	transition: background var(--his-micro-dur) var(--his-ease), color var(--his-micro-dur) var(--his-ease);
}

.his-blog-carousel .his-nav--prev {
	left: 6px;
	transform: translateY(-50%) rotate(180deg);
}

.his-blog-carousel .his-nav--next {
	right: 6px;
}

.his-blog-carousel .his-nav:hover {
	background: #FF5B3F;
	color: #fff;
}

.his-blog-carousel .his-nav.swiper-button-disabled {
	opacity: .35;
	pointer-events: none;
}

.his-blog-pagination {
	position: relative !important;
	display: flex;
	justify-content: center;
	align-items: center;
	gap: 7px;
	width: 100%;
	left: 0 !important;
	transform: none !important;
	margin-top: 1.8rem;
}

.his-blog-pagination .swiper-pagination-bullet {
	width: 7px !important;
	height: 7px !important;
	margin: 0 !important;
	background: #fff !important;
	opacity: .3;
	border-radius: var(--his-radius-pill);
	transition: width .35s var(--his-ease), opacity .35s var(--his-ease);
}

.his-blog-pagination .swiper-pagination-bullet-active {
	width: 26px !important;
	opacity: 1;
}

/* ---------------------------------------------------------------------------
 * 4c. EQUIPO E IMPACTO - tarjetas
 *
 * El widget trae su propio <style> dentro del snapshot; esto lo sobreescribe
 * porque nuestra hoja carga despues.
 *
 * Antes: la foto ocupaba toda la tarjeta y el nombre iba encima, sobre una
 * gradiente blanca. Ahora la tarjeta es blanca con padding, la foto va dentro
 * y el nombre y el cargo debajo, sobre el blanco. Sin gradiente.
 * ------------------------------------------------------------------------- */
.team-section {
	height: 440px;
}

.team-section .team-card {
	padding: 10px;
	border-radius: var(--his-radius);
	border-color: rgb(44 62 80 / 7%);
	box-shadow: 0 2px 4px rgb(44 62 80 / 4%), 0 12px 28px rgb(44 62 80 / 6%);
	transition: flex .55s var(--his-ease), box-shadow .55s var(--his-ease);
}

/* La foto pasa de estar posicionada en absoluto a ser un elemento flex normal:
   asi deja sitio al nombre debajo y la apertura la controla el propio flex. */
/* position:static a proposito. El nombre (.team-card-info) es HIJO de la foto y
   se posiciona en absoluto: si la foto fuera el bloque contenedor, el nombre no
   podria salir de ella y seguiria pegado sobre la imagen. Siendo estatica, el
   nombre se resuelve contra .team-card y cae en la banda blanca de abajo; el
   overflow:hidden de la foto tampoco lo recorta, porque su bloque contenedor
   queda por encima del que recorta. */
.team-section .team-card-photo {
	position: static;
	inset: auto;
	flex: 0 0 100%;
	width: 100%;
	min-width: 0;
	height: calc(100% - 62px);
	border-radius: var(--his-radius-inner);
	transition:
		flex .55s var(--his-ease),
		width .55s var(--his-ease),
		min-width .55s var(--his-ease),
		height .55s var(--his-ease);
}

.team-section .team-card:hover .team-card-photo {
	position: static;
	flex: 0 0 200px;
	width: 200px;
	min-width: 200px;
	height: 100%;
	transform: none;
}

/* Altura minima en vez de fija: en la tarjeta encogida el nombre puede ocupar
   dos lineas y con altura cerrada se veia apretado contra el borde. */
.team-section .team-card-info {
	position: absolute;
	inset: auto 10px 10px;
	min-height: 52px;
	height: auto;
	padding: 0 4px;
	background: none; /* fuera la gradiente */
	display: flex;
	flex-direction: column;
	justify-content: center;
	transition: opacity .18s var(--his-ease);
}

/*
 * La bio se adapta al ancho disponible. Probe con ancho fijo para evitar que el
 * texto se recompusiera durante la apertura, pero cuando la tarjeta expandida
 * quedaba mas estrecha que ese ancho el texto salia cortado a media palabra.
 *
 * No hace falta el ancho fijo: la bio aparece con 0.3s de retraso, o sea cuando
 * la tarjeta ya casi termino de abrirse, asi que el reajuste de lineas ocurre
 * mientras todavia es invisible. Nadie lo ve.
 */
.team-section .team-card-bio-inner {
	width: 100%;
	max-width: 460px;
	padding: 30px 28px;
}

/* Y aparece cuando la tarjeta ya casi ha terminado de abrirse, no a mitad. */
.team-section .team-card:hover .team-card-bio {
	transition: opacity .3s var(--his-ease) .3s, visibility 0s linear .3s;
}

/* Cuando una tarjeta se abre, la otra se encoge tanto que el nombre se parte en
   tres lineas y se desborda. Se oculta, como hacia el diseno original, y la
   tarjeta contraida se queda solo con la foto: mas limpio. */
.team-section:has(.team-card:hover) .team-card:not(:hover) .team-card-photo {
	height: 100%;
}

@media (max-width: 1024px) {
	.team-section .team-card-bio-inner {
		width: 320px;
		padding: 24px 22px;
	}

	.team-section .team-card:hover .team-card-photo {
		flex: 0 0 170px;
		width: 170px;
		min-width: 170px;
	}
}

/* El nombre, algo mayor y en el naranja de marca: es el dato que se busca en la
   tarjeta y antes competia de tu a tu con el cargo. */
.team-section .team-card-bio-name {
	font-size: clamp(17px, 1.35vw, 19px);
	color: #FF5B3F;
}

/* ---------------------------------------------------------------------------
 * 4d. RADIOS
 * Los snapshots traen radios sueltos por todas partes. Aqui se alinean con la
 * escala. Las esquinas circulares (50%) no se tocan: son iconos y flechas.
 * ------------------------------------------------------------------------- */
/*
 * Va con !important y tocando tambien --border-radius porque los snapshots
 * traen una regla generada por Elementor para cada contenedor
 * (.elementor-1348 .elementor-element.elementor-element-XXXX), con mas
 * especificidad que cualquier selector de clase razonable, y porque los
 * contenedores no leen border-radius sino la variable --border-radius.
 */
.elementor-1348 .elementor-element.card-01,
.elementor-1348 .elementor-element.card-02,
.elementor-1348 .elementor-element.card-03,
.elementor-1348 .elementor-element.card-soluciones,
.elementor-1348 .elementor-element.soluciones-card,
.elementor-1348 .elementor-element.elementor-element-9fcb1f4,
#car-img .swiper-slide-image {
	--border-radius: var(--his-radius);
	border-radius: var(--his-radius) !important;
}

.soluciones-card .elementor-widget-image img {
	border-radius: var(--his-radius-inner) !important;
}

/* Botones: la mayoria ya eran capsula (hero, "Agenda una conversacion",
   "Enviar solicitud"); el del navbar y alguno suelto iban a 8px o 50px. Todos
   capsula. Lleva !important porque varios snapshots declaran su radio tambien
   con !important y si no, ganan ellos. Para volver atras, quita este bloque. */
.elementor-button,
.elementor-button-wrapper .elementor-button {
	border-radius: var(--his-radius-pill) !important;
}

/* La flecha circular que llevan dentro algunos botones se queda redonda. */
.elementor-button .elementor-button-icon {
	border-radius: 50%;
}

/* ---------------------------------------------------------------------------
 * 4e. MODAL DE "VER VIDEO"
 * Venia en gris carbon, con borde claro, una barra que solo decia "Video" y un
 * boton de cerrar cuadrado: no se parecia a nada del resto del sitio. Se pasa
 * al mismo lenguaje que las tarjetas (blanco, padding corto, radio y sombra
 * comunes) y el fondo se tiñe del verde de marca en vez de negro puro.
 * Los selectores son largos porque el <style> del widget va en el body, es
 * decir despues que esta hoja.
 * ------------------------------------------------------------------------- */
.vc-modal .vc-backdrop {
	background: rgb(16 44 44 / 72%);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
}

.vc-modal .vc-dialog {
	margin-block-start: 10vh;
	padding: 10px;
	background: #fff;
	border: 0;
	border-radius: var(--his-radius);
	box-shadow: 0 30px 80px rgb(16 44 44 / 35%);
	animation: his-modal-in .45s var(--his-ease) both;
}

@keyframes his-modal-in {
	from { opacity: 0; transform: translate3d(0, 14px, 0) scale(.985); }
	to   { opacity: 1; transform: none; }
}

/* La barra solo servia para sostener el boton de cerrar; el rotulo "Video"
   sobra al lado de un video que ya se esta viendo. */
.vc-modal .vc-topbar {
	padding: 0 0 10px;
	justify-content: flex-end;
}

.vc-modal .vc-topbar > div:first-child {
	display: none;
}

.vc-modal .vc-close {
	width: 34px;
	height: 34px;
	border: 0;
	background: rgb(16 44 44 / 7%);
	color: #0F2C2C;
	transition: background var(--his-micro-dur) var(--his-ease), transform var(--his-micro-dur) var(--his-ease);
}

.vc-modal .vc-close:hover {
	background: rgb(16 44 44 / 14%);
	transform: scale(1.06);
}

/* La aspa venia en blanco, pensada para el fondo oscuro anterior. */
.vc-modal .vc-close svg {
	stroke: #0F2C2C;
}

.vc-modal .vc-frame-wrap {
	border-radius: var(--his-radius-inner);
	overflow: hidden;
}

@media (prefers-reduced-motion: reduce) {
	.vc-modal .vc-dialog {
		animation: none;
	}
}

/* ---------------------------------------------------------------------------
 * 4f. BLOG - fecha del articulo
 * El clon no mostraba fecha en ningun post. Los articulos nuevos la llevan,
 * porque para un lector (y para un buscador) saber cuando se escribio algo
 * cambia como lo lee.
 * ------------------------------------------------------------------------- */
/*
 * Pie del articulo (autora y fecha). Venia con los iconos y el gris por defecto
 * de Elementor, ajeno al resto. Se convierte en una barra separada por una
 * linea fina, con la autora en el verde de marca y la fecha en gris discreto:
 * el mismo lenguaje de las tarjetas.
 */
/* El :not(.e-loop-item *) es imprescindible: las tarjetas del blog usan el mismo
   widget para su fecha, y sin el heredaban esta linea separadora, que ahi no
   pinta nada y quedaba pegada al dia. */
.elementor-widget-post-info:not(.e-loop-item *) .elementor-post-info {
	margin-top: 2.2rem;
	padding-top: 1.1rem;
	border-top: 1px solid rgb(16 44 44 / 10%);
	gap: 1.4rem;
	align-items: center;
}

.elementor-widget-post-info .elementor-post-info__item {
	font-family: "Manrope", sans-serif;
	font-size: .82rem;
	letter-spacing: .01em;
}

.elementor-widget-post-info .elementor-icon-list-item[itemprop="author"] .elementor-post-info__item {
	color: #0F5C5C;
	font-weight: 600;
}

.elementor-widget-post-info .elementor-icon-list-item[itemprop="datePublished"] .elementor-post-info__item {
	color: #9C9B9B;
}

.elementor-widget-post-info .elementor-icon-list-icon svg {
	width: 15px;
	height: 15px;
	opacity: .55;
}

.his-post-date {
	margin: -.5rem 0 1.5rem;
	font-family: "Manrope", sans-serif;
	font-size: .8rem;
	font-weight: 600;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: #9C9B9B;
}

/* ---------------------------------------------------------------------------
 * 4g. MOVIL - usabilidad
 * Correcciones de tamaños, espaciado y zonas de toque en pantallas pequeñas.
 * ------------------------------------------------------------------------- */
@media (max-width: 767px) {
	/* El boton flotante de WhatsApp se plantaba encima de los CTA del hero y del
	   pie: en esas zonas tapaba justo lo que hay que pulsar. Se sube un poco y
	   se reduce para dejarlos libres. */
	.elementor-widget-contact-buttons,
	[class*="contact-buttons"] .e-contact-buttons__chat-button,
	[class*="floating-buttons"] .e-floating-buttons__chat-button {
		inset-block-end: 84px !important;
	}

	/* Zona de toque minima de 44px: varios enlaces de texto quedaban por debajo
	   y son dificiles de acertar con el dedo. */
	.elementor-button,
	.buton-line .elementor-button {
		min-height: 44px;
		display: inline-flex;
		align-items: center;
	}

	/* Titulares algo mas contenidos: a tamaño de escritorio partian en demasiadas
	   lineas y empujaban el contenido util fuera de pantalla. */
	.elementor-1348 h1.elementor-heading-title {
		font-size: clamp(28px, 8vw, 34px);
		line-height: 1.15;
	}

	.elementor-1348 h2.elementor-heading-title,
	.elementor-1348 h3.elementor-heading-title {
		font-size: clamp(22px, 6.4vw, 27px);
		line-height: 1.2;
	}

	/* Cuerpo de texto: 15px es el minimo comodo de lectura en movil. */
	.elementor-1348 .elementor-widget-text-editor,
	.elementor-1348 .elementor-widget-text-editor p {
		font-size: 15px;
		line-height: 1.6;
	}

	/* Las tarjetas de soluciones recuperan el titular en dos lineas: en movil hay
	   ancho de sobra y recortarlo con puntos suspensivos perdia informacion. */
	.elementor-1348 .elementor-element .soluciones-card .elementor-widget-heading .elementor-heading-title {
		font-size: 18px;
		white-space: normal;
		overflow: visible;
		text-overflow: clip;
	}

	/* Respiro entre secciones: en movil se pegaban unas a otras. */
	.elementor-1348 > .e-con.e-parent {
		--padding-top: 3.5rem;
		--padding-bottom: 3.5rem;
	}

	/* Los pasos de "Nuestro Modelo" iban en dos columnas muy estrechas. */
	.hst-grid {
		grid-template-columns: 1fr !important;
		gap: 14px !important;
	}
}

/* ---------------------------------------------------------------------------
 * 4h. FORMULARIO DE CONTACTO
 * El envio lo maneja inc/formulario.php; aqui van el aspecto y los estados.
 * ------------------------------------------------------------------------- */

/* Campo trampa para bots. No basta con display:none: algunos bots lo detectan.
   Se saca de la pantalla conservando su tamaño, y aria-hidden + tabindex="-1"
   (los pone el JS) lo apartan de lectores de pantalla y del tabulador. */
.his-trampa {
	position: absolute !important;
	left: -9999px !important;
	width: 1px !important;
	height: 1px !important;
	opacity: 0 !important;
	pointer-events: none !important;
}

.elementor-form .elementor-field-group input:not([type="checkbox"]),
.elementor-form .elementor-field-group textarea,
.elementor-form .elementor-field-group select {
	transition: border-color var(--his-micro-dur) var(--his-ease),
		box-shadow var(--his-micro-dur) var(--his-ease),
		background-color var(--his-micro-dur) var(--his-ease);
}

.elementor-form .elementor-field-group input:focus,
.elementor-form .elementor-field-group textarea:focus,
.elementor-form .elementor-field-group select:focus {
	outline: none;
	border-color: #0F5C5C;
	box-shadow: 0 0 0 3px rgb(15 92 92 / 12%);
}

/* Mientras se envia: el formulario se atenua y deja de aceptar clics, para que
   no se pueda pulsar dos veces sin querer. */
.elementor-form.his-enviando {
	opacity: .6;
	pointer-events: none;
}

.elementor-form .elementor-button[disabled] {
	cursor: wait;
}

/* Aviso de resultado. Empieza sin altura para no dejar un hueco vacio bajo el
   boton mientras no hay nada que decir. */
.his-form-aviso {
	margin: 1rem 0 0;
	padding: 0;
	max-height: 0;
	overflow: hidden;
	font-family: "Manrope", sans-serif;
	font-size: .88rem;
	line-height: 1.5;
	border-radius: var(--his-radius-inner);
	opacity: 0;
	transition: opacity .3s var(--his-ease), max-height .3s var(--his-ease), padding .3s var(--his-ease);
}

.his-form-aviso.his-ok,
.his-form-aviso.his-error {
	max-height: 10rem;
	padding: .8rem 1rem;
	opacity: 1;
}

.his-form-aviso.his-ok {
	background: rgb(15 92 92 / 8%);
	color: #0F5C5C;
}

.his-form-aviso.his-error {
	background: rgb(255 91 63 / 10%);
	color: #C43B22;
}

/* ---------------------------------------------------------------------------
 * 4i. PAGINA 404
 * Sin imagenes ni video: una pagina de error tiene que cargar al instante,
 * porque quien llega aqui ya venia de un enlace que no funciono.
 * ------------------------------------------------------------------------- */
.his-404 {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 78vh;
	padding: 9rem 1.5rem 5rem;
	background: #F5F1E4;
}

.his-404__inner {
	width: 100%;
	max-width: 760px;
	text-align: center;
}

.his-404__eyebrow {
	margin: 0 0 1rem;
	font-family: "Manrope", sans-serif;
	font-size: .74rem;
	font-weight: 700;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: #FF5B3F;
}

/* El color va con !important porque la hoja del kit de Elementor pinta todos
   los h1 del sitio y aqui salia en naranja. */
.his-404 h1.his-404__title {
	margin: 0 0 1rem;
	font-family: "Neutra", sans-serif;
	font-size: clamp(2rem, 5.4vw, 3.1rem);
	line-height: 1.1;
	color: #0F5C5C !important;
}

.his-404__text {
	margin: 0 auto 2.4rem;
	max-width: 52ch;
	font-family: "Manrope", sans-serif;
	font-size: 1rem;
	line-height: 1.6;
	color: #6b7280;
}

.his-404__acciones {
	display: flex;
	flex-wrap: wrap;
	gap: .8rem;
	justify-content: center;
	margin-bottom: 3.4rem;
}

.his-404__btn {
	display: inline-flex;
	align-items: center;
	min-height: 48px;
	padding: 0 1.7rem;
	border: 1px solid #0F5C5C;
	border-radius: var(--his-radius-pill);
	font-family: "Manrope", sans-serif;
	font-size: .92rem;
	font-weight: 600;
	color: #0F5C5C;
	text-decoration: none;
	transition: background var(--his-micro-dur) var(--his-ease),
		color var(--his-micro-dur) var(--his-ease),
		transform var(--his-micro-dur) var(--his-ease);
}

.his-404__btn:hover {
	transform: translateY(-2px);
	background: rgb(15 92 92 / 8%);
}

.his-404__btn--primario {
	background: #0F5C5C;
	color: #fff;
}

.his-404__btn--primario:hover {
	background: #0b4747;
	color: #fff;
}

.his-404__mapa {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: .8rem;
	text-align: left;
}

.his-404__enlace {
	display: block;
	padding: 1.1rem 1.2rem;
	background: #fff;
	border-radius: var(--his-radius);
	text-decoration: none;
	box-shadow: 0 2px 4px rgb(44 62 80 / 4%), 0 10px 24px rgb(44 62 80 / 5%);
	transition: transform var(--his-micro-dur) var(--his-ease),
		box-shadow var(--his-micro-dur) var(--his-ease);
}

.his-404__enlace:hover {
	transform: translateY(-3px);
	box-shadow: 0 4px 8px rgb(44 62 80 / 6%), 0 18px 34px rgb(44 62 80 / 9%);
}

.his-404__enlace-titulo {
	display: block;
	margin-bottom: .2rem;
	font-family: "Neutra", sans-serif;
	font-size: 1.02rem;
	color: #0F5C5C;
}

.his-404__enlace-texto {
	display: block;
	font-family: "Manrope", sans-serif;
	font-size: .82rem;
	line-height: 1.45;
	color: #9C9B9B;
}

@media (max-width: 767px) {
	.his-404 {
		padding: 7rem 1.2rem 3.5rem;
	}

	.his-404__mapa {
		grid-template-columns: 1fr;
	}
}

/* ---------------------------------------------------------------------------
 * 5. NUESTRO MODELO - foto de fondo
 * La declaracion de --wpr-bg-e975ade5... esta en functions.php
 * (histhana_enqueue_custom), no aqui: un url() relativo se resuelve contra la
 * hoja que USA la variable -- post-1348.css, enterrada en cache/background-css/ --
 * y no contra la que la declara, asi que la ruta salia mal. Desde PHP podemos
 * escribir la URL absoluta del tema y funciona este donde este instalado WP.
 * ------------------------------------------------------------------------- */

/* ---------------------------------------------------------------------------
 * 6. Peso de los titulares de tarjeta
 *
 * Al reordenar la jerarquia de titulares (H4 -> H3, para que el indice del
 * documento tenga sentido), estas tarjetas engordaron de 600 a 700: el kit de
 * Elementor define el peso por ETIQUETA (h3 va a 700, h4 iba a 600) y la regla
 * propia de cada elemento fija tamaño y interlineado, pero no el peso.
 *
 * Se devuelve el 600 original. Solo afecta al peso: el resto del tipo ya lo
 * resuelve Elementor. Se comprobo midiendo en el navegador antes y despues.
 * ------------------------------------------------------------------------- */
.elementor-1348 .elementor-element-47b18b6 .elementor-heading-title,
.elementor-1348 .elementor-element-0019cc8 .elementor-heading-title,
.elementor-1348 .elementor-element-1f92af0 .elementor-heading-title,
.elementor-1348 .elementor-element-49d9c5f .elementor-heading-title,
.elementor-1348 .elementor-element-0fb5ee9 .elementor-heading-title,
.elementor-1348 .elementor-element-a57ca3d .elementor-heading-title,
.elementor-1348 .elementor-element-e2baa41 .elementor-heading-title,
.elementor-1348 .elementor-element-03b3f1e .elementor-heading-title,
.elementor-1348 .elementor-element-810b63f .elementor-heading-title {
	font-weight: 600;
}
