/**
 * LDucos - sistema visual.
 *
 * Direccion: inmobiliaria de lujo con lenguaje editorial. Tipografia
 * protagonista, aire generoso, hairlines en vez de cajas, y la fotografia
 * como superficie principal. Nada de tarjetas con borde.
 *
 * 1. Tokens          8.  Ficha: hero
 * 2. Base            9.  Ficha: bloques y datos
 * 3. Utilidades      10. Galeria y visor
 * 4. Cabecera        11. Contacto y formularios
 * 5. Hero catalogo   12. Entradas, paginacion, comentarios
 * 6. Filtros         13. 404 y pie
 * 7. Tarjetas        14. Motion y Elementor
 */

/* ================================================================== */
/* 1. Tokens                                                          */
/* ================================================================== */

:root {
	/*
	 * Paleta oficial del manual de marca (LOGO LDUCOS.pdf):
	 * Deep Blue #104579 y Marfil #EFECE5. No hay una tercera.
	 * El realce para estados interactivos es el azul claro que la propia
	 * disenadora usa en la filigrana del manual, del mismo tono.
	 * El personalizador sobrescribe estas tres.
	 */
	--ld-ink: #104579;
	--ld-accent: #005EAB;
	--ld-cream: #EFECE5;
	--ld-display: "Bricolage Grotesque", "Helvetica Neue", Arial, sans-serif;
	--ld-body: "Poppins", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
	--ld-radio: 2px;

	--ld-blanco: #FFFFFF;
	/* Papel: el catalogo no se lee sobre blanco puro sino sobre el marfil
	   de la marca, que es lo que hace que la fotografia se despegue. */
	--ld-papel: var(--ld-cream);
	/*
	 * El azul de marca es de los TITULARES. El texto corrido va en un
	 * gris de tinta, calido para que case con el papel marfil: una pagina
	 * entera escrita en azul no se lee como una web, se lee como un
	 * documento coloreado, y ademas le quita fuerza al titular.
	 *
	 * Los tres tonos estan medidos sobre el papel marfil (#EFECE5), que
	 * es donde vive el catalogo y donde toda mezcla pierde contraste.
	 */
	--ld-texto: #3A3733;    /* cuerpo de texto, 10:1 sobre marfil */
	--ld-tinta-72: #5F5B56; /* texto secundario, 5.7:1 */
	--ld-tinta-38: #6A655F; /* rotulos apagados, 4.9:1 */
	/* Solo decoracion: filetes, iconos y textos de ejemplo. Nunca texto. */
	--ld-tinta-52: #918B84;

	/*
	 * Color del cerco de foco. No hay ninguno que sirva a la vez sobre el
	 * marfil y sobre el azul de marca: para llegar a 3:1 sobre el marfil
	 * hace falta un color oscuro y sobre el azul uno claro. Asi que el
	 * cerco es una variable y las zonas oscuras la cambian por marfil.
	 */
	--ld-foco: var(--ld-accent);

	--ld-linea: color-mix(in srgb, var(--ld-ink) 13%, white);
	--ld-linea-clara: color-mix(in srgb, var(--ld-blanco) 22%, transparent);
	--ld-velo: color-mix(in srgb, var(--ld-ink) 4%, white);

	--ld-ancho: 1320px;
	--ld-ancho-texto: 68ch;
	--ld-gutter: clamp(1.25rem, 4vw, 3rem);
	--ld-gap: clamp(1.5rem, 3.4vw, 3rem);
	--ld-seccion: clamp(4rem, 9vw, 9rem);

	/* Curvas: entrada decidida, salida suave. */
	--ld-ease: cubic-bezier(0.22, 1, 0.36, 1);
	--ld-ease-suave: cubic-bezier(0.4, 0, 0.2, 1);
	--ld-t-rapida: 180ms;
	--ld-t-media: 280ms;

	--ld-sombra: 0 24px 60px -32px rgb(11 32 39 / 38%);
	--ld-sombra-alta: 0 40px 90px -40px rgb(11 32 39 / 52%);
}

/* ================================================================== */
/* 2. Base                                                            */
/* ================================================================== */

*,
*::before,
*::after { box-sizing: border-box; }

html {
	scroll-behavior: smooth;
	-webkit-text-size-adjust: 100%;
}

body {
	margin: 0;
	background: var(--ld-blanco);
	color: var(--ld-texto);
	font-family: var(--ld-body);
	font-size: clamp(1rem, 0.96rem + 0.18vw, 1.075rem);
	font-weight: 300;
	line-height: 1.68;
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
	overflow-x: hidden;
}

img, picture, video, iframe, svg {
	max-width: 100%;
	display: block;
}

img { height: auto; }

a { color: inherit; text-underline-offset: 0.22em; }

/*
 * Los titulares van en VERSALES. Eso cambia dos cosas respecto a la caja
 * baja: el interletrado pasa de negativo a positivo (las mayusculas
 * pegadas se leen como un muro) y el cuerpo baja, porque una linea en
 * mayusculas ocupa y pesa mas que la misma linea en minusculas.
 */
h1, h2, h3, h4 {
	font-family: var(--ld-display);
	/* Peso ligero: en versales, un 500 se lee como un grito. */
	font-weight: 400;
	line-height: 1.16;
	letter-spacing: 0.02em;
	text-transform: uppercase;
	/* El azul lo llevan los titulares, no el texto: por eso se declara
	   aqui y no se hereda del cuerpo. */
	color: var(--ld-ink);
	margin: 0 0 0.5em;
}

p { margin: 0 0 1.15em; }
p:last-child { margin-bottom: 0; }

button { font: inherit; }

.screen-reader-text {
	position: absolute !important;
	width: 1px; height: 1px;
	padding: 0; margin: -1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}

.ld-saltar {
	position: absolute;
	left: -9999px; top: 0;
	z-index: 999;
	padding: 0.9rem 1.4rem;
	background: var(--ld-ink);
	color: var(--ld-blanco);
	text-decoration: none;
}

.ld-saltar:focus { left: 1rem; top: 1rem; }

:focus-visible {
	outline: 2px solid var(--ld-foco);
	outline-offset: 3px;
}

/*
 * Elementor apaga el cerco en sus propios campos de formulario y lo
 * cambia por una sombra interior de 1px al 10% de negro, que no se ve.
 * El selector lleva `.elementor` delante para ganar por especificidad,
 * sin recurrir a !important.
 */
.elementor .elementor-field-group .elementor-field-textual:focus-visible,
.elementor .elementor-field-group .elementor-field-textual:focus {
	outline: 2px solid var(--ld-foco);
	outline-offset: 2px;
}

/* Zonas de fondo azul: el cerco pasa a marfil (8.3:1 contra el azul). */
.ld-hero,
.ld-prop-hero,
.ld-pie,
.ld-aviso,
.ld-cabecera--sobre-hero:not(.is-fija),
.ld-cabecera nav.elementor-nav-menu--dropdown,
.ld-sobre-oscuro {
	--ld-foco: var(--ld-cream);
}

/* ================================================================== */
/* 3. Utilidades                                                      */
/* ================================================================== */

.ld-contenedor {
	width: min(100% - (var(--ld-gutter) * 2), var(--ld-ancho));
	margin-inline: auto;
}

.ld-seccion { padding-block: var(--ld-seccion); }

/* Escala tipografica: el display manda. */
.ld-display {
	font-family: var(--ld-display);
	font-size: clamp(1.8rem, 0.95rem + 2.9vw, 3.5rem);
	/* A este tamano el trazo fino luce; es el titular de portada. */
	font-weight: 300;
	color: var(--ld-ink);
	line-height: 1.06;
	letter-spacing: 0.018em;
	text-transform: uppercase;
	margin: 0;
}

.ld-h2 {
	font-family: var(--ld-display);
	font-size: clamp(1.2rem, 1.02rem + 0.8vw, 1.75rem);
	line-height: 1.2;
	font-weight: 400;
	letter-spacing: 0.022em;
	text-transform: uppercase;
	color: var(--ld-ink);
	margin: 0;
}

/* Overline: el detalle que da tono editorial. */
.ld-over {
	display: block;
	margin: 0 0 1.1rem;
	font-family: var(--ld-body);
	font-size: 0.7rem;
	font-weight: 400;
	letter-spacing: 0.34em;
	text-transform: uppercase;
	color: var(--ld-accent);
}

.ld-over--tenue { color: var(--ld-tinta-38); }

.ld-prosa {
	max-width: var(--ld-ancho-texto);
	font-size: 1.06rem;
	line-height: 1.8;
	color: var(--ld-tinta-72);
}

.ld-prosa > * + * { margin-top: 1.25em; }

.ld-vacio { color: var(--ld-tinta-38); }

.ld-vacio--caja {
	padding: clamp(2.5rem, 6vw, 5rem);
	border-top: 1px solid var(--ld-linea);
	border-bottom: 1px solid var(--ld-linea);
	text-align: center;
}

.ld-vacio--caja .ld-boton { margin-top: 1.4rem; }

.ld-migas {
	display: flex;
	flex-wrap: wrap;
	gap: 0.6em;
	align-items: center;
	margin: 0 0 1.6rem;
	font-size: 0.68rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--ld-tinta-38);
}

.ld-migas a { text-decoration: none; transition: color var(--ld-t-rapida) var(--ld-ease); }
.ld-migas a:hover { color: var(--ld-accent); }
.ld-migas__sep { opacity: 0.45; }

.ld-icono { width: 1.1em; height: 1.1em; flex: none; }

/* Botones ---------------------------------------------------------- */

.ld-boton,
.elementor.elementor .ld-btn .elementor-button {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.6em;
	min-height: 48px;
	padding: 0.95em 2em;
	border: 1px solid transparent;
	/* Pastilla, como el resto de los mandos del sitio: los filtros, la
	   etiqueta de la tarjeta y los botones nativos de Elementor ya lo
	   eran. Los del tema se habian quedado en el radio de 2px de antes
	   del rediseno, y convivian dos formas de boton en la misma pagina. */
	border-radius: 999px;
	font-size: 0.75rem;
	font-weight: 400;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	text-decoration: none;
	cursor: pointer;
	overflow: hidden;
	/* El relleno del hover se pinta con z-index -1 para quedar DEBAJO del
	   texto. Hace falta aislar aqui para que ese -1 no se escape por
	   detras del fondo de la seccion. */
	isolation: isolate;
	transition: color var(--ld-t-media) var(--ld-ease),
		background-color var(--ld-t-media) var(--ld-ease),
		border-color var(--ld-t-media) var(--ld-ease),
		transform var(--ld-t-rapida) var(--ld-ease);
}

.ld-boton > *,
.ld-btn .elementor-button > * { position: relative; z-index: 1; }

/*
 * Relleno que sube desde abajo en hover: feedback con direccion.
 *
 * El z-index negativo no es un adorno. Un pseudoelemento posicionado se
 * pinta DESPUES del texto en linea, asi que sin el, al pasar el raton, el
 * relleno tapaba por completo la palabra en todos los botones cuyo texto
 * es un nodo suelto y no va envuelto en una etiqueta -que son casi todos
 * los del tema-. Se veia el boton entero azul y el texto desaparecia.
 */
.ld-boton::before,
.elementor.elementor .ld-btn .elementor-button::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background: var(--ld-ink);
	transform: scaleY(0);
	transform-origin: bottom;
	transition: transform var(--ld-t-media) var(--ld-ease);
}

/* Con el nuevo acento oliva de marca, un texto oscuro sobre el fondo del
   boton cae a 1.35:1 de contraste (el minimo AA es 4.5:1). Blanco da 8.78:1. */
.ld-boton--acento,
.elementor.elementor .ld-btn--acento .elementor-button {
	background: var(--ld-accent);
	color: var(--ld-blanco);
}

/*
 * El kit de Elementor pinta TODOS los enlaces con `.elementor-kit-4 a`,
 * que tiene dos clases y le gana a `.ld-boton--acento`, que tiene una. En
 * el bloque de «sin resultados» eso dejaba el boton con el texto del mismo
 * azul que su fondo: un pastillon liso e ilegible. Repitiendo la clase se
 * iguala la especificidad, y como theme.css carga despues, gana.
 */
.ld-boton.ld-boton--acento,
.ld-boton.ld-boton--acento:hover,
.ld-boton.ld-boton--acento:focus-visible { color: var(--ld-blanco); }

.ld-boton.ld-boton--linea { color: var(--ld-ink); }

.ld-boton--acento:hover,
.ld-boton--acento:focus-visible,
.elementor.elementor .ld-btn--acento .elementor-button:hover,
.elementor.elementor .ld-btn--acento .elementor-button:focus-visible { color: var(--ld-blanco); }
.ld-boton--acento:hover::before,
.ld-boton--acento:focus-visible::before,
.elementor.elementor .ld-btn--acento .elementor-button:hover::before,
.elementor.elementor .ld-btn--acento .elementor-button:focus-visible::before { transform: scaleY(1); }

.ld-boton--linea,
.elementor.elementor .ld-btn--linea .elementor-button {
	border-color: var(--ld-linea);
	color: var(--ld-ink);
	background: transparent;
}

.ld-boton--linea:hover,
.ld-boton--linea:focus-visible,
.elementor.elementor .ld-btn--linea .elementor-button:hover,
.elementor.elementor .ld-btn--linea .elementor-button:focus-visible {
	color: var(--ld-blanco);
	border-color: var(--ld-ink);
}

.ld-boton--linea:hover::before,
.ld-boton--linea:focus-visible::before,
.elementor.elementor .ld-btn--linea .elementor-button:hover::before,
.elementor.elementor .ld-btn--linea .elementor-button:focus-visible::before { transform: scaleY(1); }

.ld-boton--claro,
.elementor.elementor .ld-btn--claro .elementor-button {
	border-color: var(--ld-linea-clara);
	color: var(--ld-blanco);
	background: transparent;
}

.ld-boton--claro::before,
.elementor.elementor .ld-btn--claro .elementor-button::before { background: var(--ld-blanco); }
.ld-boton--claro:hover, .ld-boton--claro:focus-visible,
.elementor.elementor .ld-btn--claro .elementor-button:hover,
.elementor.elementor .ld-btn--claro .elementor-button:focus-visible { color: var(--ld-ink); }
.ld-boton--claro:hover::before, .ld-boton--claro:focus-visible::before,
.elementor.elementor .ld-btn--claro .elementor-button:hover::before,
.elementor.elementor .ld-btn--claro .elementor-button:focus-visible::before { transform: scaleY(1); }

/* WhatsApp es la accion secundaria del panel: va en contorno, no en el
   verde corporativo, que dentro de una marca de dos azules canta. */
.ld-boton--wa {
	background: transparent;
	color: var(--ld-ink);
	border-color: color-mix(in srgb, var(--ld-ink) 32%, var(--ld-cream));
}

.ld-boton--wa::before { background: var(--ld-ink); }

.ld-boton--wa:hover,
.ld-boton--wa:focus-visible {
	color: var(--ld-cream);
	border-color: var(--ld-ink);
}

/* Sin esto el texto se volvia marfil pero el relleno azul no llegaba a
   subir: marfil sobre marfil, un boton en blanco. */
.ld-boton--wa:hover::before,
.ld-boton--wa:focus-visible::before { transform: scaleY(1); }

.ld-boton--ancho { width: 100%; }
.ld-boton:active { transform: translateY(1px); }
.ld-boton:disabled, .ld-boton[aria-disabled="true"] { opacity: 0.45; pointer-events: none; }

/* Enlace con linea que crece: microinteraccion con direccion. */
.ld-enlace-linea {
	display: inline-flex;
	align-items: center;
	gap: 0.7em;
	font-size: 0.72rem;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	text-decoration: none;
	color: var(--ld-accent);
}

.ld-enlace-linea::after {
	content: "";
	width: 2.2rem;
	height: 1px;
	background: currentColor;
	transform-origin: left;
	transition: transform var(--ld-t-media) var(--ld-ease);
}

.ld-enlace-linea:hover::after,
.ld-enlace-linea:focus-visible::after { transform: scaleX(1.6); }

/* ================================================================== */
/* 4. Cabecera                                                        */
/* ================================================================== */

.ld-cabecera {
	position: fixed;
	inset: 0 0 auto;
	z-index: 100;
	transition: background-color var(--ld-t-media) var(--ld-ease-suave),
		box-shadow var(--ld-t-media) var(--ld-ease-suave);
}

.ld-cabecera__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1.5rem;
	min-height: 84px;
	transition: min-height var(--ld-t-media) var(--ld-ease-suave);
}

/* Sobre un hero oscuro la cabecera va en marfil (no en blanco puro): es
   el color del logotipo y del boton, y asi la fila entera concuerda. */
.ld-cabecera--sobre-hero { color: var(--ld-cream); }

.ld-cabecera.is-fija {
	background: color-mix(in srgb, var(--ld-blanco) 92%, transparent);
	backdrop-filter: blur(16px) saturate(1.4);
	-webkit-backdrop-filter: blur(16px) saturate(1.4);
	box-shadow: 0 1px 0 var(--ld-linea);
	color: var(--ld-ink);
}

.ld-cabecera.is-fija .ld-cabecera__inner { min-height: 68px; }

.ld-logo {
	font-family: var(--ld-display);
	font-size: clamp(1.4rem, 1.2rem + 0.6vw, 1.85rem);
	letter-spacing: 0.02em;
	text-decoration: none;
	white-space: nowrap;
}

.custom-logo-link img { display: block; max-height: 42px; width: auto; }

/* El logo real de marca lleva sus propios colores fijos (olivo + azul marino),
   ambos oscuros. Sobre la foto del hero, sin fondo propio, se pierde por falta
   de contraste luminoso. Le damos una placa clara solo mientras flota sobre el
   hero; en cuanto la cabecera se vuelve solida al hacer scroll, sobra. */
.ld-cabecera--sobre-hero:not(.is-fija) .ld-cabecera__marca {
	padding: 0.5rem 0.9rem;
	background: color-mix(in srgb, var(--ld-cream) 92%, transparent);
	backdrop-filter: blur(6px);
	-webkit-backdrop-filter: blur(6px);
	border-radius: var(--ld-radio);
	box-shadow: 0 1px 2px rgb(11 32 39 / 8%);
}

.ld-nav {
	display: flex;
	align-items: center;
	gap: clamp(1.5rem, 3vw, 2.8rem);
}

.ld-nav__lista {
	display: flex;
	align-items: center;
	gap: clamp(1.2rem, 2.4vw, 2.2rem);
	list-style: none;
	margin: 0;
	padding: 0;
}

.ld-nav__lista a {
	position: relative;
	font-size: 0.72rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	text-decoration: none;
	opacity: 0.78;
	transition: opacity var(--ld-t-rapida) var(--ld-ease);
}

.ld-nav__lista a::after {
	content: "";
	position: absolute;
	left: 0; bottom: -6px;
	width: 100%;
	height: 1px;
	background: currentColor;
	transform: scaleX(0);
	transform-origin: right;
	transition: transform var(--ld-t-media) var(--ld-ease);
}

.ld-nav__lista a:hover,
.ld-nav__lista .current-menu-item > a { opacity: 1; }

.ld-nav__lista a:hover::after,
.ld-nav__lista .current-menu-item > a::after {
	transform: scaleX(1);
	transform-origin: left;
}

.ld-nav__lista .sub-menu {
	position: absolute;
	min-width: 230px;
	margin-top: 1rem;
	padding: 0.7rem 0;
	list-style: none;
	background: var(--ld-blanco);
	color: var(--ld-ink);
	box-shadow: var(--ld-sombra);
	opacity: 0;
	visibility: hidden;
	transform: translateY(8px);
	transition: opacity var(--ld-t-media) var(--ld-ease),
		transform var(--ld-t-media) var(--ld-ease), visibility var(--ld-t-media);
}

.ld-nav__lista li { position: relative; }

.ld-nav__lista li:hover > .sub-menu,
.ld-nav__lista li:focus-within > .sub-menu {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}

.ld-nav__lista .sub-menu a { display: block; padding: 0.6rem 1.2rem; }
.ld-nav__lista .sub-menu a::after { display: none; }

.ld-nav__cta { padding: 0.75em 1.5em; min-height: 44px; }

.ld-menu-toggle {
	display: none;
	width: 46px; height: 46px;
	padding: 0;
	border: 1px solid currentColor;
	border-radius: var(--ld-radio);
	background: transparent;
	color: inherit;
	cursor: pointer;
}

.ld-menu-toggle__icono,
.ld-menu-toggle__icono::before,
.ld-menu-toggle__icono::after {
	display: block;
	width: 18px; height: 1px;
	margin-inline: auto;
	background: currentColor;
	transition: transform var(--ld-t-media) var(--ld-ease), opacity var(--ld-t-rapida);
}

.ld-menu-toggle__icono::before,
.ld-menu-toggle__icono::after { content: ""; position: relative; }
.ld-menu-toggle__icono::before { top: -6px; }
.ld-menu-toggle__icono::after { top: 5px; }

.ld-menu-toggle[aria-expanded="true"] .ld-menu-toggle__icono { background: transparent; }
.ld-menu-toggle[aria-expanded="true"] .ld-menu-toggle__icono::before { transform: translateY(6px) rotate(45deg); }
.ld-menu-toggle[aria-expanded="true"] .ld-menu-toggle__icono::after { transform: translateY(-5px) rotate(-45deg); }

@media (max-width: 1000px) {
	.ld-menu-toggle { display: block; }

	.ld-nav {
		position: fixed;
		inset: 0;
		flex-direction: column;
		align-items: flex-start;
		justify-content: center;
		gap: 2.5rem;
		padding: 6rem var(--ld-gutter) 3rem;
		background: var(--ld-ink);
		color: var(--ld-blanco);
		opacity: 0;
		visibility: hidden;
		clip-path: inset(0 0 100% 0);
		transition: opacity var(--ld-t-media) var(--ld-ease),
			clip-path 460ms var(--ld-ease), visibility var(--ld-t-media);
	}

	.ld-nav.is-abierta { opacity: 1; visibility: visible; clip-path: inset(0 0 0 0); }

	.ld-nav__lista { flex-direction: column; align-items: flex-start; gap: 1.1rem; }

	.ld-nav__lista a {
		font-family: var(--ld-display);
		font-size: 2rem;
		letter-spacing: 0;
		text-transform: none;
		opacity: 1;
	}

	.ld-nav__lista .sub-menu {
		position: static;
		opacity: 1;
		visibility: visible;
		transform: none;
		box-shadow: none;
		background: transparent;
		color: inherit;
		padding-left: 1rem;
	}

	.ld-nav__lista .sub-menu a { font-size: 1.1rem; padding: 0.3rem 0; }
}

/* La cabecera es fija: sin hero hay que reservar su altura. */
.ld-contenido { padding-top: 84px; }
.ld-tiene-hero .ld-contenido { padding-top: 0; }

/* ================================================================== */
/* 5. Hero del catalogo                                               */
/* ================================================================== */

.ld-hero {
	position: relative;
	display: flex;
	align-items: flex-end;
	min-height: clamp(420px, 62vh, 680px);
	padding-block: 8rem 3.5rem;
	overflow: hidden;
	background: var(--ld-ink);
	color: var(--ld-blanco);
	isolation: isolate;
}

.ld-hero__media {
	position: absolute;
	inset: -10% 0;
	z-index: -2;
	will-change: transform;
}

.ld-hero__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	opacity: 0.5;
}

/*
 * El velo solo tiene que oscurecer donde hay texto: arriba, por el menu,
 * y abajo, por el titular. En medio estaba al 30% y aplastaba el cielo de
 * cada render. Mismo perfil que el de la ficha, que ya estaba bien medido.
 */
.ld-hero__scrim {
	position: absolute;
	inset: 0;
	z-index: -1;
	background:
		linear-gradient(180deg, rgb(11 32 39 / 58%) 0%, rgb(11 32 39 / 12%) 34%, rgb(11 32 39 / 88%) 100%);
}

.ld-hero__inner { position: relative; z-index: 1; }
.ld-hero__inner.e-con { flex-direction: column !important; align-items: flex-start; }
.ld-hero .ld-migas,
.ld-prop-hero .ld-migas { color: color-mix(in srgb, var(--ld-blanco) 78%, transparent); }

.ld-hero .ld-migas a:hover,
.ld-prop-hero .ld-migas a:hover { color: var(--ld-accent); }

.ld-hero__meta {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: 1.4rem;
	margin: 1.8rem 0 0;
	padding-top: 1.4rem;
	border-top: 1px solid var(--ld-linea-clara);
	font-size: 0.72rem;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: color-mix(in srgb, var(--ld-blanco) 70%, transparent);
}

.ld-hero__texto {
	max-width: 52ch;
	margin-top: 1.4rem;
	color: color-mix(in srgb, var(--ld-blanco) 78%, transparent);
}

/* ================================================================== */
/* 6. Filtros                                                         */
/* ================================================================== */

/*
 * Barra ligera, no un formulario. Va posada sobre el papel: sin caja
 * blanca, sin sombra y sin filetes entre celdas. Los desplegables son
 * pastillas y los intervalos se leen en linea, con sus extremos a los
 * lados de la pista.
 */

.ld-filtros-caja {
	position: relative;
	z-index: 5;
	margin-top: clamp(2.5rem, 5vw, 4rem);
}

.ld-filtros-caja__resumen {
	display: none;
	align-items: center;
	justify-content: center;
	gap: 0.7em;
	min-height: 52px;
	padding: 1em 1.4em;
	border-radius: 999px;
	background: var(--ld-ink);
	color: var(--ld-blanco);
	cursor: pointer;
	font-size: 0.78rem;
	letter-spacing: 0.02em;
	list-style: none;
	user-select: none;
}

.ld-filtros-caja__resumen::-webkit-details-marker { display: none; }

.ld-filtros-caja__cuenta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 20px;
	height: 20px;
	padding-inline: 0.35em;
	border-radius: 999px;
	background: var(--ld-accent);
	color: var(--ld-blanco);
	font-size: 0.72rem;
}

.ld-filtros {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.85rem;
	background: transparent;
	box-shadow: none;
}

.ld-filtros--vertical { flex-direction: column; align-items: stretch; }

.ld-filtro {
	position: relative;
	margin: 0;
	padding: 0;
	border: 0;
}

/* Desplegables como pastillas. El tope de ancho evita que una ultima
   fila de dos filtros se estire de lado a lado de la barra. */
.ld-filtro--select {
	flex: 1 1 clamp(150px, 16vw, 220px);
	max-width: 260px;
	min-width: 0;
}

.ld-filtro--select label {
	position: absolute;
	width: 1px; height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}

.ld-filtro select {
	width: 100%;
	min-height: 52px;
	padding: 0 2.6rem 0 1.35rem;
	border: 1px solid transparent;
	border-radius: 999px;
	background: color-mix(in srgb, var(--ld-ink) 5%, var(--ld-papel));
	font-family: var(--ld-body);
	font-size: 0.95rem;
	font-weight: 300;
	color: var(--ld-ink);
	appearance: none;
	-webkit-appearance: none;
	cursor: pointer;
	transition: border-color var(--ld-t-rapida) var(--ld-ease),
		background-color var(--ld-t-rapida) var(--ld-ease);
}

.ld-filtro select:hover { background: color-mix(in srgb, var(--ld-ink) 9%, var(--ld-papel)); }
/* El cambio de color del filete es un refuerzo, no el aviso de foco: un
   borde de 1px que pasa de gris a azul no lo ve quien navega con teclado. */
.ld-filtro select:focus-visible { border-color: var(--ld-accent); }

.ld-filtro--select::after {
	content: "";
	position: absolute;
	top: 50%;
	right: 1.35rem;
	width: 7px; height: 7px;
	border-right: 1px solid var(--ld-tinta-52);
	border-bottom: 1px solid var(--ld-tinta-52);
	transform: translateY(-70%) rotate(45deg);
	pointer-events: none;
}

/* ------------------------------------------------------------------ */
/* Intervalo de dos mandos, en linea                                   */
/* ------------------------------------------------------------------ */

.ld-filtro--rango {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	flex: 1 1 clamp(260px, 26vw, 360px);
	min-width: 0;
	padding-left: 1.35rem;
	border-left: 1px solid color-mix(in srgb, var(--ld-ink) 12%, var(--ld-papel));
}

.ld-filtro--rango:first-of-type { border-left: 0; padding-left: 0; }

.ld-filtro__etiqueta {
	flex: 0 0 auto;
	font-size: 0.88rem;
	font-weight: 300;
	color: var(--ld-ink);
	white-space: nowrap;
}

/* Los extremos van a los lados de la pista, como cifras sueltas. */
.ld-rango__extremo {
	flex: 0 0 auto;
	font-size: 0.8rem;
	font-weight: 300;
	color: var(--ld-tinta-72);
	white-space: nowrap;
	font-variant-numeric: tabular-nums;
}

.ld-rango__pista {
	position: relative;
	flex: 1 1 auto;
	min-width: 70px;
	height: 22px;
}

/* La linea de fondo y el tramo elegido comparten sitio; el tramo se
   mueve con transform, sin tocar ancho ni posicion. */
.ld-rango__pista::before {
	content: "";
	position: absolute;
	inset: 50% 0 auto;
	height: 1px;
	background: color-mix(in srgb, var(--ld-ink) 22%, var(--ld-papel));
	transform: translateY(-50%);
}

.ld-rango__relleno {
	position: absolute;
	top: calc(50% - 1px);
	left: 0;
	right: 0;
	height: 2px;
	background: var(--ld-ink);
	transform-origin: left center;
	transform: scaleX(1);
	will-change: transform;
}

/* Los dos <input type=range> se apilan encima de la pista. Solo los
   mandos reciben el puntero, para poder coger cualquiera de los dos. */
.ld-rango__mando {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 22px;
	margin: 0;
	padding: 0;
	background: transparent;
	appearance: none;
	-webkit-appearance: none;
	pointer-events: none;
}

/* Con el raton el cerco sobraria (el mando ya se ilumina); con el teclado
   es lo unico que dice donde esta el punto de partida del rango. */
.ld-rango__mando:focus:not(:focus-visible) { outline: none; }

.ld-rango__mando::-webkit-slider-thumb {
	appearance: none;
	-webkit-appearance: none;
	width: 13px;
	height: 13px;
	border: 1px solid var(--ld-ink);
	border-radius: 50%;
	background: var(--ld-papel);
	cursor: grab;
	pointer-events: auto;
	transition: transform var(--ld-t-rapida) var(--ld-ease),
		background-color var(--ld-t-rapida) var(--ld-ease);
}

.ld-rango__mando::-moz-range-thumb {
	width: 13px;
	height: 13px;
	border: 1px solid var(--ld-ink);
	border-radius: 50%;
	background: var(--ld-papel);
	cursor: grab;
	pointer-events: auto;
	transition: transform var(--ld-t-rapida) var(--ld-ease),
		background-color var(--ld-t-rapida) var(--ld-ease);
}

.ld-rango__mando::-moz-range-track { background: transparent; border: 0; }

.ld-rango__mando:hover::-webkit-slider-thumb,
.ld-rango__mando:focus-visible::-webkit-slider-thumb {
	background: var(--ld-ink);
	transform: scale(1.2);
}

.ld-rango__mando:hover::-moz-range-thumb,
.ld-rango__mando:focus-visible::-moz-range-thumb {
	background: var(--ld-ink);
	transform: scale(1.2);
}

/* La lectura larga ("US$ 900K - US$ 1.9M") solo se usa en movil, donde
   no caben los extremos a los lados de la pista. */
.ld-rango__lectura { display: none; }

/* ------------------------------------------------------------------ */
/* Acciones                                                            */
/* ------------------------------------------------------------------ */

.ld-filtro--accion {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	margin-left: auto;
}

.ld-filtro--accion .ld-boton {
	min-height: 52px;
	border-radius: 999px;
}

/* Con JavaScript el formulario se envia solo al soltar cualquier mando o
   cambiar un desplegable, asi que el boton sobra. Sin JavaScript sigue
   ahi y el buscador funciona igual. */
.ld-filtros.is-auto .ld-filtro--accion .ld-boton { display: none; }

.ld-filtros__limpiar {
	display: inline-flex;
	align-items: center;
	gap: 0.5em;
	padding: 0.5em 0.2em;
	color: var(--ld-tinta-72);
	font-size: 0.8rem;
	letter-spacing: 0.02em;
	text-decoration: none;
	transition: color var(--ld-t-rapida) var(--ld-ease);
}

.ld-filtros__limpiar::after {
	content: "\00d7";
	font-size: 1.1em;
	line-height: 1;
}

.ld-filtros__limpiar:hover,
.ld-filtros__limpiar:focus-visible { color: var(--ld-ink); }

/* En pantallas estrechas el intervalo no cabe en linea: la etiqueta y la
   lectura se apilan sobre la pista. */
@media (max-width: 899px) {
	.ld-filtros { gap: 1.1rem; }

	.ld-filtro--select { flex: 1 1 calc(50% - 0.6rem); }

	.ld-filtro--rango {
		flex: 1 1 100%;
		display: grid;
		grid-template-columns: auto 1fr;
		align-items: center;
		gap: 0.2rem 0.9rem;
		padding-left: 0;
		border-left: 0;
	}

	.ld-filtro__etiqueta { grid-column: 1; }
	.ld-rango__lectura {
		display: block;
		grid-column: 2;
		justify-self: end;
		font-size: 0.82rem;
		font-weight: 300;
		color: var(--ld-tinta-72);
		font-variant-numeric: tabular-nums;
	}
	.ld-rango__extremo { display: none; }
	.ld-rango__pista { grid-column: 1 / -1; }

	.ld-filtro--accion { margin-left: 0; width: 100%; justify-content: space-between; }
}


/* ================================================================== */
/* 7. Tarjetas de propiedad                                           */
/* ================================================================== */

/*
 * Reticula de galeria sobre papel: la lamina en horizontal y, debajo,
 * una cartela de dos lineas (titulo y precio) en tono tranquilo. Nada de
 * caja, borde, sombra ni degradado. Los datos de la propiedad esperan al
 * hover para no llenar de texto la pagina en reposo.
 */

.ld-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr));
	gap: clamp(3.5rem, 6vw, 6rem) clamp(1.5rem, 2vw, 2rem);
}

.ld-grid--uno { grid-template-columns: 1fr; }

.ld-card { position: relative; }

.ld-card__link {
	display: flex;
	flex-direction: column;
	gap: 1.1rem;
	color: inherit;
	text-decoration: none;
}

/* La lamina, en horizontal. */
.ld-card__frame {
	position: relative;
	aspect-ratio: 5 / 4;
	overflow: hidden;
	background: var(--ld-velo);
}

.ld-card__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transform: scale(1.001);
	transition: transform 900ms var(--ld-ease);
}

.ld-card__link:hover .ld-card__img,
.ld-card__link:focus-visible .ld-card__img { transform: scale(1.055); }

.ld-card__placeholder {
	width: 100%; height: 100%;
	background: linear-gradient(135deg, var(--ld-velo), color-mix(in srgb, var(--ld-ink) 12%, white));
	/* Sin foto, un degradado a secas se lee como imagen rota. Con el mismo
	   alfiler del juego de iconos, el hueco se lee como una ficha a la que
	   aun le faltan fotos, que es lo que es. */
	display: grid;
	place-items: center;
}

.ld-card__placeholder::after {
	content: "";
	width: clamp(2rem, 14%, 3.25rem);
	aspect-ratio: 1;
	background-color: color-mix(in srgb, var(--ld-ink) 26%, transparent);
	-webkit-mask: var(--ld-alfiler) center / contain no-repeat;
	mask: var(--ld-alfiler) center / contain no-repeat;
}

:root {
	--ld-alfiler: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 21s7-5.6 7-11a7 7 0 1 0-14 0c0 5.4 7 11 7 11Z'/%3E%3Ccircle cx='12' cy='10' r='2.6'/%3E%3C/svg%3E");
}

/* Sello redondeado sobre la foto, en papel: ni versalitas ni tracking.
   Es una etiqueta discreta, no un boton. */
.ld-card__tags {
	position: absolute;
	top: 0.75rem; left: 0.75rem;
	display: flex;
	flex-wrap: wrap;
	gap: 0.4rem;
}

.ld-tag {
	padding: 0.42em 0.95em;
	background: var(--ld-cream);
	color: var(--ld-ink);
	border: 0;
	border-radius: 999px;
	font-family: var(--ld-body);
	font-size: 0.78rem;
	font-weight: 400;
	letter-spacing: 0;
	line-height: 1.3;
	text-transform: none;
}

.ld-tag--acento {
	background: var(--ld-accent);
	color: var(--ld-blanco);
}

/* La cartela. */
.ld-card__body {
	display: flex;
	flex-direction: column;
	gap: 0.22rem;
}

.ld-card__over { display: none; }

/* Con la etiqueta delante gana a `.elementor-kit-N h3`, que si no impone
   su cuerpo fijo y rompe la escala fluida de la cartela. */
h3.ld-card__title,
.ld-card__title {
	margin: 0;
	font-family: var(--ld-display);
	font-size: clamp(0.95rem, 0.87rem + 0.35vw, 1.12rem);
	font-weight: 400;
	line-height: 1.32;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	color: var(--ld-ink);
	transition: color var(--ld-t-rapida) var(--ld-ease);
}

.ld-card__link:hover .ld-card__title,
.ld-card__link:focus-visible .ld-card__title { color: var(--ld-accent); }

/* Aqui NO se reserva altura para dos lineas. Reservarla alinea los
   precios de la fila, pero deja un hueco colgando bajo los titulos de una
   sola linea y rompe la pareja titulo/precio, que es justo lo que da a la
   cartela su aire de catalogo impreso. El precio va pegado al titulo. */

/* El precio acompana al titulo, no compite con el: mismo tono de texto,
   un punto mas claro y sin mayusculas. */
.ld-card__price {
	margin: 0;
	font-family: var(--ld-body);
	font-size: 0.95rem;
	font-weight: 300;
	letter-spacing: 0.01em;
	line-height: 1.5;
	text-transform: none;
	color: color-mix(in srgb, var(--ld-ink) 78%, var(--ld-papel));
}

/* Los datos esperan al hover. La altura se reserva siempre para que la
   fila no de un salto al pasar el raton por encima. */
.ld-card__specs {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: 0 0.5rem;
	margin: 0.1rem 0 0;
	padding: 0;
	list-style: none;
	font-size: 0.78rem;
	font-weight: 300;
	line-height: 1.5;
	letter-spacing: 0.01em;
	color: color-mix(in srgb, var(--ld-ink) 78%, var(--ld-papel));
	opacity: 0;
	transform: translateY(3px);
	transition: opacity var(--ld-t-media) var(--ld-ease),
		transform var(--ld-t-media) var(--ld-ease);
}

.ld-card__link:hover .ld-card__specs,
.ld-card__link:focus-visible .ld-card__specs {
	opacity: 1;
	transform: none;
}

/* Sin puntero fino (tactil) no hay hover: los datos se quedan fijos. */
@media (hover: none) {
	.ld-card__specs { opacity: 1; transform: none; }
}

.ld-card__specs li { display: inline-flex; align-items: baseline; }

.ld-card__specs li + li::before {
	content: "\00b7";
	margin-right: 0.5rem;
	opacity: 0.55;
}

.ld-card__resumen {
	margin: 0.4rem 0 0;
	max-width: 46ch;
	color: var(--ld-tinta-72);
}

/* Destacada a lo ancho: misma cartela, lamina en panoramica al lado. */
@media (min-width: 900px) {
	.ld-card--ancha { grid-column: 1 / -1; }

	.ld-card--ancha .ld-card__link {
		display: grid;
		grid-template-columns: 1.6fr 1fr;
		align-items: center;
		gap: clamp(2rem, 4vw, 4rem);
	}

	.ld-card--ancha .ld-card__frame {
		aspect-ratio: 3 / 2;
		width: 100%;
		min-width: 0;
	}

	.ld-card--ancha .ld-card__body { min-width: 0; }

	.ld-card--ancha h3.ld-card__title,
	.ld-card--ancha .ld-card__title {
		font-size: clamp(1.15rem, 0.95rem + 0.8vw, 1.6rem);
	}

	.ld-card--ancha .ld-card__price { font-size: 1.1rem; }
	.ld-card--ancha .ld-card__specs { opacity: 1; transform: none; }
}

@media (max-width: 899px) {
	.ld-card__resumen { display: none; }
}

/* ================================================================== */
/* 8. Ficha: hero                                                     */
/* ================================================================== */

.ld-prop-hero {
	position: relative;
	display: flex;
	align-items: flex-end;
	min-height: clamp(520px, 88vh, 900px);
	padding-block: 9rem clamp(2.5rem, 5vw, 4.5rem);
	overflow: hidden;
	background: var(--ld-ink);
	color: var(--ld-blanco);
	isolation: isolate;
}

.ld-prop-hero__media {
	position: absolute;
	inset: -12% 0;
	z-index: -2;
	will-change: transform;
}

.ld-prop-hero__media img {
	width: 100%; height: 100%;
	object-fit: cover;
}

.ld-prop-hero__scrim {
	position: absolute;
	inset: 0;
	z-index: -1;
	background:
		linear-gradient(100deg, rgb(11 32 39 / 62%) 0%, rgb(11 32 39 / 18%) 52%, rgb(11 32 39 / 0%) 82%),
		linear-gradient(180deg, rgb(11 32 39 / 62%) 0%, rgb(11 32 39 / 14%) 34%, rgb(11 32 39 / 92%) 100%);
}

.ld-prop-hero__inner { position: relative; z-index: 1; }
.ld-prop-hero__inner.e-con {
	flex-direction: column !important;
	align-items: flex-start;
	gap: 0.4rem;
}
.ld-prop-hero__inner.e-con > .elementor-widget-button { margin-top: 1.4rem; }

.ld-prop-hero__precio {
	margin: 1.6rem 0 0;
	font-family: var(--ld-display);
	font-size: clamp(1.5rem, 1.15rem + 1.4vw, 2.4rem);
	line-height: 1;
	color: var(--ld-accent);
}

.ld-prop-hero__ref {
	margin: 0;
	font-size: 0.68rem;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: color-mix(in srgb, var(--ld-blanco) 82%, transparent);
}

.ld-prop-hero__pie {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 1.5rem;
	margin-top: 2.2rem;
	padding-top: 1.6rem;
	border-top: 1px solid var(--ld-linea-clara);
}

.ld-prop-hero__acciones { display: flex; flex-wrap: wrap; gap: 0.8rem; }

/* ================================================================== */
/* 9. Ficha: bloques y datos                                          */
/* ================================================================== */

/* Barra de datos: numeros grandes, etiquetas diminutas. */
.ld-specs {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
	border-bottom: 1px solid var(--ld-linea);
	background: var(--ld-blanco);
}

.ld-specs__item {
	padding: clamp(1.6rem, 3vw, 2.6rem) 1.2rem;
	border-right: 1px solid var(--ld-linea);
	text-align: center;
}

.ld-specs__item:last-child { border-right: 0; }

/*
 * Franja de datos de un PROYECTO. Cumple el mismo papel que .ld-specs en
 * la ficha de una propiedad, pero sus valores son frases y no cifras:
 * "1 and 2 bedrooms, lock-off and penthouses" no cabe al cuerpo de un
 * numero, y en versales seria ilegible. Por eso tiene bloque propio.
 */
.ld-specs-wrap {
	background: var(--ld-blanco);
	border-bottom: 1px solid var(--ld-linea);
}

.ld-fichas {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
}

.ld-ficha-dato {
	padding: clamp(1.4rem, 2.6vw, 2.2rem) clamp(0.9rem, 2vw, 1.6rem);
	border-right: 1px solid var(--ld-linea);
	text-align: center;
}

.ld-ficha-dato:last-child { border-right: 0; }

.ld-ficha-dato__valor {
	display: block;
	font-family: var(--ld-display);
	font-size: clamp(1.05rem, 0.9rem + 0.6vw, 1.5rem);
	font-weight: 400;
	line-height: 1.28;
	letter-spacing: 0.01em;
	color: var(--ld-ink);
}

.ld-ficha-dato__etiqueta {
	display: block;
	margin-top: 0.55rem;
	font-size: 0.62rem;
	letter-spacing: 0.24em;
	text-transform: uppercase;
	color: var(--ld-tinta-38);
}

@media (max-width: 560px) {
	.ld-fichas { grid-template-columns: repeat(2, 1fr); }
	.ld-ficha-dato:nth-child(2n) { border-right: 0; }
	.ld-ficha-dato:not(:nth-last-child(-n+2)) { border-bottom: 1px solid var(--ld-linea); }
}

/* En pantallas estrechas, 2x2 en vez de 3 + 1 descolgado. */
@media (max-width: 560px) {
	.ld-specs { grid-template-columns: repeat(2, 1fr); }
	.ld-specs__item:nth-child(2n) { border-right: 0; }
	.ld-specs__item:nth-child(-n+2) { border-bottom: 1px solid var(--ld-linea); }
}

.ld-specs__n {
	display: block;
	font-family: var(--ld-display);
	font-size: clamp(1.6rem, 1.25rem + 1.3vw, 2.4rem);
	line-height: 1;
	color: var(--ld-ink);
}

.ld-specs__l {
	display: block;
	margin-top: 0.6rem;
	font-size: 0.62rem;
	letter-spacing: 0.24em;
	text-transform: uppercase;
	color: var(--ld-tinta-38);
}

.ld-prop__grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: clamp(2.5rem, 5vw, 5rem);
	padding-block: var(--ld-seccion);
}

@media (min-width: 1080px) {
	.ld-prop__grid { grid-template-columns: minmax(0, 1fr) 400px; }
}

/* Bloques numerados: estructura legible y con tono de dossier. */
.ld-bloque { margin-bottom: clamp(2.5rem, 5vw, 4.5rem); }

.ld-bloque__head {
	display: flex;
	align-items: baseline;
	gap: 1.2rem;
	margin-bottom: 1.8rem;
	padding-bottom: 1rem;
	border-bottom: 1px solid var(--ld-linea);
}

.ld-bloque__num {
	font-size: 0.68rem;
	letter-spacing: 0.2em;
	color: var(--ld-accent);
}

.ld-bloque__head .ld-h2 { font-size: clamp(1.5rem, 1.2rem + 1.1vw, 2.1rem); }

.ld-bloque__accion { margin-top: 1.4rem; }

.ld-datos-widget__precio {
	margin: 0 0 1rem;
	font-family: var(--ld-display);
	font-size: clamp(1.5rem, 1.2rem + 1vw, 2rem);
	line-height: 1;
	color: var(--ld-accent);
}

.ld-datos-widget__ref { margin-top: 1rem; }

.ld-detalles { margin: 0; }

.ld-detalles__fila {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 1.5rem;
	padding: 0.95rem 0;
	border-bottom: 1px solid var(--ld-linea);
}

.ld-detalles dt {
	font-size: 0.68rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--ld-tinta-38);
}

.ld-detalles dd {
	margin: 0;
	font-size: 1.02rem;
	text-align: right;
}

.ld-amenidades {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
	gap: 0;
	margin: 0;
	padding: 0;
	list-style: none;
}

.ld-amenidades li {
	display: flex;
	align-items: center;
	gap: 0.75em;
	padding: 0.75rem 0;
	border-bottom: 1px solid var(--ld-linea);
	color: var(--ld-tinta-72);
	font-size: 0.96rem;
}

.ld-amenidades li::before {
	content: "";
	width: 5px; height: 5px;
	flex: none;
	border-radius: 50%;
	background: var(--ld-accent);
}

.ld-mapa {
	width: 100%;
	aspect-ratio: 16 / 9;
	border: 1px solid var(--ld-linea);
}

.ld-video iframe { width: 100%; aspect-ratio: 16 / 9; }

.ld-prop__lateral { align-self: start; }

@media (min-width: 1080px) {
	.ld-prop__lateral { position: sticky; top: 104px; }
}

/*
 * El bloque de relacionadas es lo ultimo de una ficha, y solo tenia
 * relleno por arriba: las tarjetas quedaban pegadas al pie, sin un
 * milimetro entre la ultima cifra y la banda azul.
 */
.ld-relacionadas {
	padding-top: var(--ld-seccion);
	padding-bottom: var(--ld-seccion);
	border-top: 1px solid var(--ld-linea);
}

.ld-relacionadas__head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 1.5rem;
	margin-bottom: var(--ld-gap);
}

/* ================================================================== */
/* 10. Galeria y visor                                                */
/* ================================================================== */

.ld-galeria { padding-block: var(--ld-seccion) 0; }

.ld-galeria__head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 1.5rem;
	margin-bottom: var(--ld-gap);
}

/* Mosaico: la primera manda, las demas acompanan. */
.ld-mosaico {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 210px), 1fr));
	gap: 0.75rem;
}

/* La foto destacada a doble tamano solo tiene sentido cuando hay
   suficientes: con tres o cuatro dejaba media fila vacia al lado. */
@media (min-width: 800px) {
	.ld-mosaico:has(> :nth-child(5)) { grid-template-columns: repeat(4, 1fr); }

	.ld-mosaico:has(> :nth-child(5)) > .ld-mosaico__item:first-child {
		grid-column: span 2;
		grid-row: span 2;
	}
}

.ld-mosaico__item {
	position: relative;
	display: block;
	padding: 0;
	border: 0;
	background: var(--ld-velo);
	aspect-ratio: 4 / 3;
	overflow: hidden;
	cursor: zoom-in;
}

.ld-mosaico__item img {
	width: 100%; height: 100%;
	object-fit: cover;
	transition: transform 800ms var(--ld-ease), opacity var(--ld-t-media) var(--ld-ease);
}

.ld-mosaico__item:hover img,
.ld-mosaico__item:focus-visible img { transform: scale(1.05); }

.ld-mosaico__mas {
	position: absolute;
	inset: 0;
	display: grid;
	place-items: center;
	background: rgb(11 32 39 / 62%);
	color: var(--ld-blanco);
	font-size: 0.78rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
}

/* Visor a pantalla completa */
.ld-visor {
	position: fixed;
	inset: 0;
	z-index: 200;
	display: none;
	place-items: center;
	padding: clamp(1rem, 4vw, 3rem);
	background: rgb(6 20 25 / 96%);
	backdrop-filter: blur(6px);
	-webkit-backdrop-filter: blur(6px);
}

.ld-visor[open],
.ld-visor.is-abierto { display: grid; }

.ld-visor__img {
	max-width: min(100%, 1400px);
	max-height: 80vh;
	width: auto;
	object-fit: contain;
	margin-inline: auto;
}

.ld-visor__barra {
	position: absolute;
	inset: auto 0 clamp(1rem, 3vw, 2rem);
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 1.5rem;
	color: var(--ld-blanco);
}

.ld-visor__contador {
	font-size: 0.72rem;
	letter-spacing: 0.22em;
	min-width: 5.5em;
	text-align: center;
}

.ld-visor__nav,
.ld-visor__cerrar {
	display: grid;
	place-items: center;
	width: 48px; height: 48px;
	border: 1px solid var(--ld-linea-clara);
	background: transparent;
	color: var(--ld-blanco);
	cursor: pointer;
	transition: background-color var(--ld-t-rapida) var(--ld-ease);
}

.ld-visor__nav:hover,
.ld-visor__cerrar:hover { background: color-mix(in srgb, var(--ld-blanco) 14%, transparent); }

.ld-visor__cerrar {
	position: absolute;
	top: clamp(1rem, 3vw, 2rem);
	right: clamp(1rem, 3vw, 2rem);
}

/* ================================================================== */
/* 11. Contacto y formularios                                         */
/* ================================================================== */

/* Panel en marfil, no en azul: al lado de la ficha, un bloque oscuro
   pesaba mas que la propia propiedad y se comia la lectura. */
.ld-contacto {
	padding: clamp(1.8rem, 3vw, 2.4rem);
	background: var(--ld-cream);
	color: var(--ld-ink);
	border: 1px solid color-mix(in srgb, var(--ld-ink) 12%, var(--ld-cream));
}

.ld-contacto__agente {
	display: flex;
	align-items: center;
	gap: 1rem;
	padding-bottom: 1.4rem;
	margin-bottom: 1.4rem;
	border-bottom: 1px solid color-mix(in srgb, var(--ld-ink) 14%, var(--ld-cream));
}

.ld-contacto__foto {
	width: 62px; height: 62px;
	border-radius: 50%;
	object-fit: cover;
}

.ld-contacto__nombre {
	margin: 0;
	font-family: var(--ld-display);
	font-size: 1.05rem;
	letter-spacing: 0.03em;
	text-transform: uppercase;
}

.ld-contacto__puesto {
	margin: 0;
	font-size: 0.62rem;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: color-mix(in srgb, var(--ld-ink) 78%, var(--ld-cream));
}

.ld-contacto__titulo { font-size: 1.6rem; margin-bottom: 0.4rem; }

.ld-contacto__texto {
	font-size: 0.92rem;
	color: color-mix(in srgb, var(--ld-ink) 78%, var(--ld-cream));
	margin-bottom: 1.6rem;
}

.ld-form__campo { position: relative; margin-bottom: 1.1rem; }

.ld-form__campo label {
	display: block;
	margin-bottom: 0.4rem;
	font-size: 0.6rem;
	letter-spacing: 0.24em;
	text-transform: uppercase;
	color: color-mix(in srgb, var(--ld-ink) 78%, var(--ld-cream));
}

/* Campos con linea inferior: menos caja, mas editorial. */
.ld-form__campo input,
.ld-form__campo textarea {
	width: 100%;
	padding: 0.55rem 0;
	border: 0;
	border-bottom: 1px solid color-mix(in srgb, var(--ld-ink) 24%, var(--ld-cream));
	border-radius: 0;
	background: transparent;
	font-family: var(--ld-body);
	font-size: 0.98rem;
	color: var(--ld-ink);
	transition: border-color var(--ld-t-media) var(--ld-ease);
}

.ld-form__campo input:focus,
.ld-form__campo textarea:focus {
	border-bottom-color: var(--ld-accent);
}

.ld-form__campo textarea { resize: vertical; min-height: 5.5rem; }

.ld-form__trampa {
	position: absolute;
	left: -9999px;
	width: 1px; height: 1px;
	overflow: hidden;
}

.ld-form__acciones { margin: 1.6rem 0 0; }

.ld-form__aviso {
	margin: 0.9rem 0 0;
	font-size: 0.88rem;
	min-height: 1.2em;
}

.ld-form__aviso.is-ok { color: #1F6B4A; }
.ld-form__aviso.is-error { color: #A3392F; }

.ld-form.is-enviando { opacity: 0.55; pointer-events: none; }
.ld-form.is-enviando .ld-boton { cursor: progress; }

.ld-buscador-simple {
	display: flex;
	gap: 0.6rem;
	max-width: 460px;
	margin-top: 1.4rem;
}

.ld-buscador-simple input {
	width: 100%;
	padding: 0.85rem 1rem;
	border: 1px solid var(--ld-linea);
	border-radius: var(--ld-radio);
	background: var(--ld-blanco);
	font-family: var(--ld-body);
	color: var(--ld-ink);
}

/* ================================================================== */
/* 12. Entradas, paginacion y comentarios                             */
/* ================================================================== */

.ld-encabezado { padding-top: clamp(2.5rem, 5vw, 4rem); }
.ld-titulo { font-size: clamp(1.65rem, 1.15rem + 2vw, 2.9rem); margin-bottom: 0.45em; }
.ld-subtitulo { font-size: clamp(1.15rem, 1rem + 0.65vw, 1.55rem); }
.ld-subtitulo--centro { text-align: center; }
.ld-meta { font-size: 0.68rem; letter-spacing: 0.2em; text-transform: uppercase; color: var(--ld-tinta-38); }

.ld-destacada { margin: 2.5rem 0 3.5rem; overflow: hidden; }
.ld-destacada img { width: 100%; }

.ld-lista-entradas { display: grid; gap: var(--ld-gap); }

.ld-entrada-resumen {
	display: grid;
	gap: 1.8rem;
	padding-bottom: var(--ld-gap);
	border-bottom: 1px solid var(--ld-linea);
}

@media (min-width: 760px) {
	.ld-entrada-resumen { grid-template-columns: 340px minmax(0, 1fr); }
}

.ld-entrada-resumen__media img {
	width: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
}

.ld-entrada-resumen__titulo { font-size: 1.9rem; }
.ld-entrada-resumen__titulo a { text-decoration: none; }
.ld-entrada-resumen__titulo a:hover { color: var(--ld-accent); }

/* La paginacion del catalogo la imprime paginate_links() en modo array:
   enlaces sueltos, sin <ul>. El propio contenedor hace de fila. */
.ld-paginacion {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.5rem;
	margin-top: var(--ld-seccion);
}

.ld-paginacion ul {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.5rem;
	margin: 0; padding: 0;
	list-style: none;
}

.ld-paginacion a,
.ld-paginacion span {
	display: grid;
	place-items: center;
	min-width: 48px; height: 48px;
	padding: 0 1rem;
	border: 1px solid var(--ld-linea);
	font-size: 0.8rem;
	letter-spacing: 0.1em;
	text-decoration: none;
	transition: background-color var(--ld-t-rapida) var(--ld-ease),
		color var(--ld-t-rapida) var(--ld-ease), border-color var(--ld-t-rapida) var(--ld-ease);
}

.ld-paginacion a:hover { border-color: var(--ld-ink); }

.ld-paginacion .current {
	background: var(--ld-ink);
	border-color: var(--ld-ink);
	color: var(--ld-blanco);
}

.ld-comentarios {
	margin-top: var(--ld-seccion);
	padding-top: var(--ld-gap);
	border-top: 1px solid var(--ld-linea);
}

.ld-comentarios__lista,
.ld-comentarios__lista .children { list-style: none; padding-left: 0; }
.ld-comentarios__lista .children { padding-left: 1.5rem; }
.ld-comentarios .comment-body { padding: 1.3rem 0; border-bottom: 1px solid var(--ld-linea); }

.ld-comentarios input:not([type="submit"]),
.ld-comentarios textarea {
	width: 100%;
	padding: 0.8rem 0.9rem;
	border: 1px solid var(--ld-linea);
	font-family: var(--ld-body);
}

/* Widgets de barra lateral y pie */
.ld-widget { margin-bottom: 2.2rem; }

.ld-widget__title {
	font-family: var(--ld-body);
	font-size: 0.66rem;
	font-weight: 400;
	letter-spacing: 0.24em;
	text-transform: uppercase;
	color: var(--ld-accent);
	margin-bottom: 1rem;
}

.ld-widget ul { list-style: none; margin: 0; padding: 0; }
.ld-widget li { padding: 0.45rem 0; border-bottom: 1px solid var(--ld-linea); }
.ld-pie .ld-widget li { border-bottom-color: var(--ld-linea-clara); }

.ld-paginas-internas {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin-top: 2rem;
	font-size: 0.85rem;
}

.ld-404 { padding-block: clamp(3rem, 8vw, 7rem); }

/* ================================================================== */
/* 13. 404 y pie                                                      */
/* ================================================================== */

.ld-404 { text-align: center; }

.ld-404__codigo {
	font-family: var(--ld-display);
	font-size: clamp(6rem, 22vw, 14rem);
	line-height: 0.85;
	color: var(--ld-linea);
	margin: 0 0 1rem;
}

.ld-404__texto { max-width: 46ch; margin-inline: auto; color: var(--ld-tinta-72); }

.ld-404__acciones {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.8rem;
	margin: 2rem 0;
}

.ld-404 .ld-buscador-simple { margin-inline: auto; }

/*
 * Pie.
 *
 * Tres bandas del MISMO azul de marca en tres intensidades, para que el
 * pie tenga fondo y jerarquia sin meter un color nuevo: la llamada a la
 * accion arriba en el azul aclarado, el cuerpo en el azul del manual y
 * la linea legal abajo en el azul apagado.
 */
.ld-pie {
	--ld-pie-alto: color-mix(in srgb, var(--ld-ink) 88%, white);
	--ld-pie-medio: var(--ld-ink);
	--ld-pie-bajo: color-mix(in srgb, var(--ld-ink) 86%, black);
	--ld-pie-filete: color-mix(in srgb, var(--ld-cream) 15%, transparent);

	background: var(--ld-pie-medio);
	color: color-mix(in srgb, var(--ld-cream) 80%, transparent);
}

.ld-pie a {
	color: inherit;
	text-decoration: none;
	transition: color var(--ld-t-rapida) var(--ld-ease);
}

.ld-pie a:hover { color: var(--ld-cream); }

/*
 * Los contenedores de Elementor nacen con relleno lateral propio. En el
 * pie las bandas van a sangre, de borde a borde: el ancho de lectura lo
 * pone el .ld-contenedor que llevan dentro.
 */
.ld-pie.e-con,
.ld-pie__cta.e-con,
.ld-pie__bottom.e-con {
	padding-inline: 0 !important;
}

.ld-pie.e-con { padding-block: 0 !important; }

/* --- Banda de llamada a la accion --------------------------------- */

/*
 * La banda de cierre va en marfil, no en azul. Antes el final de cada
 * pagina eran tres bloques azules seguidos —el cierre del contenido, esta
 * banda y el pie— sin jerarquia entre ellos: se leia como ruido. En marfil
 * cierra el cuerpo de la pagina y deja que el azul oscuro del pie sea lo
 * unico que marca el final.
 */
.ld-pie__cta {
	background: var(--ld-cream);
	border-top: 1px solid var(--ld-linea);
	border-bottom: 0;
	padding-block: clamp(3rem, 6vw, 4.5rem);
}

.ld-pie__cta-fila.e-con {
	display: flex !important;
	flex-direction: row !important;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 1.6rem 2.5rem;
}

.ld-pie__cta-texto.e-con {
	flex: 1 1 26rem;
	width: auto !important;
}

.ld-pie__cta-titulo {
	font-family: var(--ld-display);
	font-size: clamp(1.15rem, 1rem + 0.7vw, 1.55rem);
	line-height: 1.22;
	letter-spacing: 0.022em;
	text-transform: uppercase;
	color: var(--ld-ink);
}

.ld-pie__cta-sub {
	margin-top: 0.5rem;
	max-width: 52ch;
	font-size: 0.95rem;
	line-height: 1.5;
	color: var(--ld-tinta-72);
}

.ld-pie__cta-boton { flex: 0 0 auto; }

/* --- Cuerpo: cuatro columnas -------------------------------------- */

.ld-pie__top {
	display: grid;
	gap: 2.5rem;
	padding-block: clamp(2.8rem, 5vw, 4.2rem);
}

/*
 * La marca pide mas sitio que las listas, y la columna de contacto mas
 * que las de enlaces porque lleva la direccion entera en una linea.
 */
@media (min-width: 620px) {
	.ld-pie__top { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 940px) {
	.ld-pie__top { grid-template-columns: 1.5fr 1fr 1fr 1.3fr; gap: 2rem 3rem; }
}

.ld-pie__rotulo {
	margin-bottom: 1.1rem;
	font-family: var(--ld-body);
	font-size: 0.62rem;
	font-weight: 500;
	letter-spacing: 0.24em;
	line-height: 1.5;
	text-transform: uppercase;
	/* 70% de marfil es el minimo para 4.5:1 sobre el azul de marca. */
	color: color-mix(in srgb, var(--ld-cream) 70%, transparent);
}

.ld-pie__logo { margin-bottom: 1.1rem; }
.ld-pie__logo .ld-marca__img { max-height: 52px; }

.ld-pie__puesto {
	font-size: 0.62rem;
	line-height: 1.5;
	letter-spacing: 0.24em;
	text-transform: uppercase;
	color: color-mix(in srgb, var(--ld-cream) 70%, transparent);
}

.ld-pie__texto {
	margin-top: 1rem;
	max-width: 34ch;
	font-size: 0.95rem;
	line-height: 1.68;
}

/* --- Listas de enlaces --------------------------------------------- */

/*
 * El widget de menu de Elementor viene con su propio relleno pensado para
 * una barra horizontal. En una columna del pie sobra casi todo: lo que
 * hace falta es un renglon comodo de tocar y nada mas.
 */
.ld-pie .ld-footer-nav .elementor-nav-menu--main > ul.elementor-nav-menu {
	display: block;
}

.ld-pie .ld-footer-nav .elementor-item {
	display: block;
	padding: 0.42rem 0 !important;
	font-family: var(--ld-body) !important;
	font-size: 0.95rem;
	font-weight: 300;
	letter-spacing: 0 !important;
	text-transform: none;
	line-height: 1.45;
	color: color-mix(in srgb, var(--ld-cream) 80%, transparent) !important;
	background: transparent !important;
	border: 0 !important;
	fill: currentColor;
}

.ld-pie .ld-footer-nav .elementor-item:hover,
.ld-pie .ld-footer-nav .elementor-item:focus,
.ld-pie .ld-footer-nav .elementor-item.elementor-item-active {
	color: var(--ld-cream) !important;
	background: transparent !important;
}

/* --- Contacto ------------------------------------------------------ */

.ld-pie__datos .elementor-icon-list-items { gap: 0.15rem; }

.ld-pie__datos .elementor-icon-list-item {
	align-items: flex-start;
	font-size: 0.95rem;
	line-height: 1.5;
	padding: 0.34rem 0;
}

.ld-pie__datos .elementor-icon-list-icon {
	/* El icono es una senal, no un adorno: al 55% del marfil se distingue
	   del texto sin bajar de 3:1 contra el fondo. */
	color: color-mix(in srgb, var(--ld-cream) 55%, transparent);
	margin-top: 0.25em;
}

.ld-pie__datos .elementor-icon-list-icon svg {
	width: 0.9em;
	height: 0.9em;
}

/* El kit global pinta los iconos con el azul de acento, que sobre el azul
   del pie no se ve (1.5:1). Aqui van en marfil apagado: son una senal de
   lectura, no un adorno de color. */
.ld-pie .ld-pie__datos .elementor-icon-list-icon i,
.ld-pie .ld-pie__datos .elementor-icon-list-icon svg {
	color: color-mix(in srgb, var(--ld-cream) 58%, transparent) !important;
	fill: color-mix(in srgb, var(--ld-cream) 58%, transparent) !important;
}

.ld-pie__datos .elementor-icon-list-text {
	color: color-mix(in srgb, var(--ld-cream) 82%, transparent);
	padding-inline-start: 0.65em;
}

/* --- Linea legal --------------------------------------------------- */

.ld-pie__bottom {
	background: var(--ld-pie-bajo);
	border-top: 1px solid var(--ld-pie-filete);
	padding-block: 1.2rem;
}

.ld-pie__bottom-fila.e-con {
	display: flex !important;
	flex-direction: row !important;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem 1.5rem;
}

.ld-pie__copy,
.ld-pie__lugar {
	margin: 0;
	font-size: 0.72rem;
	line-height: 1.5;
	letter-spacing: 0.02em;
	color: color-mix(in srgb, var(--ld-cream) 62%, transparent);
}

.ld-pie__lugar {
	letter-spacing: 0.16em;
	text-transform: uppercase;
	font-size: 0.62rem;
}

@media (max-width: 619px) {
	.ld-pie__bottom-fila.e-con { justify-content: flex-start; }

	/* En una sola columna los enlaces del pie se pulsan con el pulgar:
	   35px de alto se quedaban por debajo de la medida comoda. */
	.ld-pie .ld-footer-nav .elementor-item { padding: 0.72rem 0 !important; }
}
.ld-wa-flotante {
	position: fixed;
	right: clamp(1rem, 2.5vw, 1.75rem);
	bottom: clamp(1rem, 2.5vw, 1.75rem);
	z-index: 90;
	display: grid;
	place-items: center;
	width: 56px; height: 56px;
	border-radius: 50%;
	/* El verde de WhatsApp desentona con una marca de dos azules. El
	   icono ya identifica el canal de sobra. */
	background: var(--ld-ink);
	color: var(--ld-cream);
	box-shadow: var(--ld-sombra-alta);
	transition: transform var(--ld-t-media) var(--ld-ease), background-color var(--ld-t-media) var(--ld-ease);
}

.ld-wa-flotante:hover { transform: scale(1.07); background: var(--ld-accent); }
.ld-wa-flotante .ld-icono { width: 26px; height: 26px; }

/*
 * El kit global de Elementor pinta TODOS los enlaces con el azul de marca
 * desde `.elementor-kit-4 a`, que por especificidad (clase + etiqueta) le
 * gana a una clase suelta. El icono va a `currentColor`, asi que salia
 * azul sobre el circulo azul: el boton estaba ahi, pero no se veia.
 */
body a.ld-wa-flotante,
body a.ld-wa-flotante:hover,
body a.ld-wa-flotante:focus-visible {
	color: var(--ld-cream);
}

/* ================================================================== */
/* 14. Motion y Elementor                                             */
/* ================================================================== */

/* Lineas de SplitText: mascara para el revelado. GSAP las retira al acabar. */
.ld-linea { overflow: hidden; padding-bottom: 0.08em; }

/* Estado inicial de los reveal: solo cuando el motion esta activo, para que
   sin JS (o con la pestana oculta) el contenido se vea siempre. */
.ld-motion [data-ld-reveal] { opacity: 0; }
.ld-motion [data-ld-clip] { clip-path: inset(0 0 100% 0); }

@media (prefers-reduced-motion: reduce) {
	html { scroll-behavior: auto; }

	*, *::before, *::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
	}

	.ld-motion [data-ld-reveal],
	.ld-motion [data-ld-clip] { opacity: 1; clip-path: none; }

	.ld-card__link:hover .ld-card__img { transform: none; }
}

/* Elementor gestiona sus propios anchos dentro de sus contenedores. */
.elementor-section-full_width > .elementor-container { max-width: none; }
.ld-con-elementor .elementor .ld-contenedor { width: 100%; }
.elementor-widget-lducos-grid .ld-grid { grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); }

/* ================================================================== */
/* 15. Compatibilidad con widgets nativos de Elementor                 */
/*                                                                     */
/* Elementor genera una regla propia por cada instancia de widget      */
/* (.elementor-element-xxxxxxx) con la misma especificidad que una     */
/* clase nuestra. Cual gana depende del orden de impresion, que no     */
/* controlamos widget a widget. Aqui SI usamos !important, a proposito */
/* y solo aqui: es el patron aceptado para forzar el aspecto de un     */
/* widget de un plugin de terceros sobre el que no tenemos el marcado. */
/* ================================================================== */

/* Boton (widget nativo "Button") dentro de cabecera, pie y ficha. */
.ld-cabecera .elementor-button,
.ld-pie .elementor-button,
.ld-prop-hero .elementor-button {
	display: inline-flex !important;
	width: auto !important;
	min-height: 48px;
	padding: 0.95em 1.8em !important;
	border-radius: 999px !important;
	background: var(--ld-ink) !important;
	color: var(--ld-cream) !important;
	font-family: var(--ld-body) !important;
	font-size: 0.75rem !important;
	font-weight: 400;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	transition: background-color var(--ld-t-media) var(--ld-ease);
}

.ld-cabecera .elementor-button:hover,
.ld-pie .elementor-button:hover,
.ld-prop-hero .elementor-button:hover {
	background: var(--ld-accent) !important;
	color: var(--ld-cream) !important;
}

/* En la banda de llamada del pie el fondo ya es azul de marca: el boton
   se invierte, marfil con el texto azul, igual que sobre la foto. */
/* Los dos botones usan ya las variantes normales del tema (acento y
   linea), que estan pensadas para fondo claro: no hace falta forzarlos. */
/*
 * `.ld-pie .elementor-button` pinta con !important todos los botones del
 * pie en azul solido. Los dos de la banda de cierre necesitan jerarquia
 * entre si —uno principal y otro secundario—, asi que se declaran aparte.
 */
.elementor.elementor .ld-pie__cta .ld-btn--acento .elementor-button {
	background: var(--ld-accent) !important;
	color: var(--ld-blanco) !important;
}

.elementor.elementor .ld-pie__cta .ld-btn--acento .elementor-button:hover,
.elementor.elementor .ld-pie__cta .ld-btn--acento .elementor-button:focus-visible {
	background: var(--ld-ink) !important;
	color: var(--ld-blanco) !important;
}

.elementor.elementor .ld-pie__cta .ld-btn--linea .elementor-button {
	background: transparent !important;
	color: var(--ld-ink) !important;
	border: 1px solid color-mix(in srgb, var(--ld-ink) 28%, transparent) !important;
}

.elementor.elementor .ld-pie__cta .ld-btn--linea .elementor-button:hover,
.elementor.elementor .ld-pie__cta .ld-btn--linea .elementor-button:focus-visible {
	background: var(--ld-ink) !important;
	color: var(--ld-cream) !important;
	border-color: var(--ld-ink) !important;
}

.ld-pie__cta-acciones.e-con {
	display: flex !important;
	flex-direction: row !important;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.75rem;
	flex: 0 1 auto;
	width: auto !important;
	max-width: 100%;
}

/* En movil los dos botones no caben en una linea: si el bloque no puede
   encogerse, la pagina entera se va de lado. Se le da la fila entera y
   dejan de empujar. */
@media (max-width: 760px) {
	.ld-pie__cta-acciones.e-con {
		width: 100% !important;
		flex: 1 1 100%;
	}

	.elementor.elementor .ld-pie__cta-acciones .elementor-button {
		flex: 1 1 auto;
		justify-content: center;
	}
}



/* Menu de navegacion nativo (widget "Nav Menu") en la cabecera.
   La clase que le pusimos vive en el div del widget; el <nav> real de
   Elementor es un hijo suyo, de ahi el combinador de descendiente. */
/* Quien reparte los enlaces es el <ul>, no el div que lo envuelve: el
   hueco entre "Home" y "Properties" hay que pedirselo a la lista. */
/* Ojo: aqui NO se toca `display`. Elementor oculta este contenedor en
   movil para sacar el menu hamburguesa; forzarlo a flex dejaba los
   enlaces sueltos encima de la cabecera. */
.ld-header-nav .elementor-nav-menu__container { align-items: center; }

/* Ojo con el alcance: `ul.elementor-nav-menu` es la lista de LOS DOS
   menus, el de escritorio y el desplegable del movil, porque Elementor
   imprime los dos y esconde uno. Sin acotar a `--main`, la lista del
   movil tambien se ponia en fila y los enlaces se apilaban unos encima
   de otros dentro de un panel de 330px. */
.ld-header-nav .elementor-nav-menu--main > ul.elementor-nav-menu {
	display: flex;
	align-items: center;
	gap: clamp(1.6rem, 2.6vw, 2.6rem);
}

/*
 * Menu de escritorio.
 *
 * Las tres reglas van con !important porque el kit global viste los
 * enlaces del menu con la tipografia de TITULARES, y esa trae interletrado
 * NEGATIVO (-0.025em). En versalitas eso aprieta las letras y el menu se
 * lee apelmazado: unas mayusculas pequenas piden lo contrario, aire.
 */
.ld-header-nav .elementor-nav-menu--main .elementor-item {
	position: relative;
	padding: 0.85rem 0 !important;
	font-family: var(--ld-body) !important;
	font-size: 0.73rem !important;
	font-weight: 400 !important;
	letter-spacing: 0.17em !important;
	line-height: 1.2;
	text-transform: uppercase;
	white-space: nowrap;
	/* El color lo pone la cabecera, que ya alterna marfil sobre la foto y
	   azul cuando se vuelve solida al bajar. */
	color: inherit !important;
	opacity: 0.78;
	transition: opacity var(--ld-t-media) var(--ld-ease);
}

/* Filete que crece desde la izquierda: el gesto tiene direccion, no es un
   simple encendido. Se anima con transform, no con width. */
.ld-header-nav .elementor-nav-menu--main .elementor-item::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0.5rem;
	height: 1px;
	/* !important porque el widget de menu pinta el color del subrayado
	   activo sobre `.elementor-item-active::after` con su propio selector,
	   mas especifico. El filete debe seguir al texto: marfil sobre la foto
	   y azul cuando la cabecera se vuelve solida. */
	background-color: currentColor !important;
	transform: scaleX(0);
	transform-origin: right center;
	transition: transform 420ms var(--ld-ease);
}

/* El enlace activo lleva su propio color en los ajustes del widget, con
   mas peso que la regla de arriba: se iguala aqui para que todos sean del
   mismo color y solo los distinga el filete. */
.ld-header-nav .elementor-nav-menu--main .elementor-item.elementor-item-active,
.ld-header-nav .elementor-nav-menu--main .elementor-item.elementor-item-active:hover,
.ld-header-nav .elementor-nav-menu--main .elementor-item.highlighted,
.ld-header-nav .elementor-nav-menu--main .elementor-item:hover,
.ld-header-nav .elementor-nav-menu--main .elementor-item:focus {
	color: inherit !important;
}

.ld-header-nav .elementor-nav-menu--main .elementor-item:hover,
.ld-header-nav .elementor-nav-menu--main .elementor-item:focus-visible,
.ld-header-nav .elementor-nav-menu--main .elementor-item-active { opacity: 1; }

.ld-header-nav .elementor-nav-menu--main .elementor-item:hover::after,
.ld-header-nav .elementor-nav-menu--main .elementor-item:focus-visible::after,
.ld-header-nav .elementor-nav-menu--main .elementor-item-active::after {
	transform: scaleX(1);
	transform-origin: left center;
}

/* La pagina en la que estamos se queda marcada, sin animacion. */
.ld-header-nav .elementor-nav-menu--main .elementor-item-active::after {
	transition: none;
}

/* ------------------------------------------------------------------ */
/* Submenus                                                            */
/* ------------------------------------------------------------------ */

/*
 * Todavia no hay ninguno, pero en cuanto Propiedades cuelgue "En venta",
 * "En alquiler" o "Vendidas", el desplegable ya sale vestido en vez de
 * con la caja gris de fabrica.
 */
.ld-header-nav .elementor-nav-menu--main .sub-menu {
	min-width: 220px;
	padding: 0.5rem 0;
	background: var(--ld-cream);
	border: 1px solid color-mix(in srgb, var(--ld-ink) 12%, var(--ld-cream));
	border-radius: 0;
	box-shadow: 0 24px 60px -32px rgb(11 32 39 / 30%);
}

.ld-header-nav .elementor-nav-menu--main .sub-menu .elementor-sub-item {
	padding: 0.7rem 1.2rem !important;
	font-family: var(--ld-body);
	font-size: 0.82rem;
	font-weight: 300;
	letter-spacing: 0.02em;
	text-transform: none;
	color: var(--ld-ink) !important;
	border: 0;
	transition: background-color var(--ld-t-rapida) var(--ld-ease),
		color var(--ld-t-rapida) var(--ld-ease);
}

.ld-header-nav .elementor-nav-menu--main .sub-menu .elementor-sub-item:hover,
.ld-header-nav .elementor-nav-menu--main .sub-menu .elementor-sub-item.elementor-item-active {
	background: color-mix(in srgb, var(--ld-ink) 7%, var(--ld-cream));
	color: var(--ld-ink) !important;
}

/* La flecha del padre gira al abrirse. */
.ld-header-nav .elementor-nav-menu--main .sub-arrow {
	margin-left: 0.45em;
	transition: transform var(--ld-t-rapida) var(--ld-ease);
}

.ld-header-nav .elementor-nav-menu--main li:hover > a > .sub-arrow { transform: rotate(180deg); }

/* Menu de navegacion nativo en el pie: vertical, mas discreto. */
.ld-footer-nav .elementor-item {
	font-family: var(--ld-body);
	font-size: 0.85rem;
	padding: 0.3rem 0 !important;
}

/* La cabecera es un contenedor de Elementor: le damos el mismo alto y
   comportamiento fijo que el resto del sitio espera de .ld-cabecera. */
.ld-cabecera.e-con {
	position: fixed !important;
	inset: 0 0 auto !important;
	z-index: 100 !important;
}

.ld-cabecera .ld-cabecera__inner {
	min-height: 84px;
	padding-block: 0 !important;
}

/* Un contenedor nuevo de Elementor nace en columna (asi arranca en el
   editor visual). Las filas de la cabecera y del pie necesitan fila. */
.ld-cabecera__inner.e-con {
	flex-direction: row !important;
	align-items: center !important;
}

.ld-cabecera__marca.e-con {
	flex: 0 0 auto !important;
	width: auto !important;
}

.ld-cabecera .ld-header-nav {
	flex: 0 0 auto !important;
	width: auto !important;
}

.ld-cabecera .elementor-widget-button {
	flex: 0 0 auto !important;
	width: auto !important;
	margin-left: auto;
}

.ld-cabecera.is-fija .ld-cabecera__inner { min-height: 68px; }

/* Precio y etiquetas de acento en widgets de encabezado (Heading nativo):
   sin esto heredan el azul de enlace del kit global de Elementor. */
.ld-prop-hero__precio,
.ld-over {
	color: var(--ld-accent) !important;
}

.ld-prop-hero__precio a,
.ld-over a { color: inherit !important; }

/* Columnas del pie y de la ficha: pensadas para apilar sus hijos en
   vertical, como cualquier div normal. Como contenedores de Elementor
   se convierten en flex-row por defecto: hay que forzar la columna. */
.ld-pie__col.e-con,
.ld-pie__marca.e-con,
.ld-pie__contacto.e-con,
.ld-pie__cta-texto.e-con,
.ld-contacto__agente.e-con,
.ld-prop__principal.e-con {
	flex-direction: column !important;
	align-items: flex-start;
}

.ld-pie__col.e-con > *,
.ld-pie__marca.e-con > *,
.ld-pie__contacto.e-con > *,
.ld-pie__cta-texto.e-con > *,
.ld-prop__principal.e-con > * {
	width: 100%;
}

/* El widget Heading de Elementor pinta un <h1>..<h6> DENTRO del div del
   widget. Nuestras clases de escala (.ld-display, .ld-h2, .ld-over) viajan
   en el div, asi que el encabezado interior heredaba el tamano y encima le
   aplicaba su propio "2em" del navegador: un h1 de 99px salia a 199px y se
   desbordaba. Se le pide que herede la escala completa del envoltorio. */
.ld-display > .elementor-heading-title,
.ld-fuera__h > .elementor-heading-title,
.ld-camino__n > .elementor-heading-title,
.ld-camino__t > .elementor-heading-title,
.ld-h2 > .elementor-heading-title,
.ld-over > .elementor-heading-title,
.ld-prop-hero__precio > .elementor-heading-title,
.ld-pie__nombre > .elementor-heading-title,
.ld-pie__puesto > .elementor-heading-title,
.ld-pie__texto > .elementor-heading-title,
.ld-pie__rotulo > .elementor-heading-title,
.ld-pie__lugar > .elementor-heading-title,
.ld-pie__cta-titulo > .elementor-heading-title,
.ld-pie__cta-sub > .elementor-heading-title,
.ld-pie__copy > .elementor-heading-title {
	font-family: inherit;
	font-size: inherit;
	font-weight: inherit;
	font-style: inherit;
	text-transform: inherit;
	letter-spacing: inherit;
	color: inherit;
	margin: 0;
}

/* La altura de linea NO se hereda: al pasar de padre a hijo llega ya
   resuelta en pixeles y un titular de 44px se quedaba con 28px de
   interlineado. Se declara aqui, sin unidad, segun el papel de cada pieza. */
.ld-display > .elementor-heading-title { line-height: 1; }

.ld-h2 > .elementor-heading-title,
.ld-pie__nombre > .elementor-heading-title { line-height: 1.12; }

.ld-over > .elementor-heading-title,
.ld-pie__puesto > .elementor-heading-title,
.ld-pie__rotulo > .elementor-heading-title,
.ld-pie__lugar > .elementor-heading-title,
.ld-pie__cta-sub > .elementor-heading-title,
.ld-pie__copy > .elementor-heading-title { line-height: 1.5; }

.ld-pie__cta-titulo > .elementor-heading-title { line-height: 1.15; }

.ld-pie__texto > .elementor-heading-title { line-height: 1.68; }

/* Fila de tres columnas del pie: es una rejilla, no un flex de Elementor. */
.ld-pie__top.e-con {
	display: grid !important;
	align-items: start;
}



/* ------------------------------------------------------------------ */
/* Kit global de Elementor sobre fondo oscuro                          */
/* ------------------------------------------------------------------ */

/* El kit pinta enlaces y titulares en azul marino. Sobre la foto del hero
   y en el pie, ese azul desaparece: ahi mandan el blanco y el crema. */
.ld-cabecera--sobre-hero:not(.is-fija) .elementor-item,
.ld-cabecera--sobre-hero:not(.is-fija) .elementor-item:focus,
/*
 * Ojo con el alcance: esto aclara los ENLACES sueltos que van sobre la
 * fotografia. Un boton no es un enlace suelto: tiene su propio fondo, y
 * pintarle el texto de blanco dejaba "Request the presentation" en blanco
 * sobre marfil, a 1.18:1. Los botones se excluyen los dos, el nativo de
 * Elementor y el del tema.
 */
.ld-hero a:not(.elementor-button):not(.ld-boton),
.ld-prop-hero a:not(.elementor-button):not(.ld-boton),
.ld-hero .elementor-heading-title,
.ld-prop-hero .elementor-heading-title {
	color: var(--ld-blanco) !important;
}

.ld-cabecera--sobre-hero:not(.is-fija) .elementor-item:hover,
.ld-cabecera--sobre-hero:not(.is-fija) .elementor-item.elementor-item-active {
	color: var(--ld-cream) !important;
	opacity: 1;
}

/* El overline sobre foto: crema translucido, no el olivo del catalogo. */
.ld-hero .ld-over,
.ld-hero .ld-over .elementor-heading-title,
.ld-prop-hero .ld-over,
.ld-prop-hero .ld-over .elementor-heading-title,


/* El precio de la ficha si conserva el olivo, pero aclarado para que
   siga leyendose sobre la fotografia. */
.ld-prop-hero__precio,
.ld-prop-hero__precio .elementor-heading-title {
	color: color-mix(in srgb, var(--ld-accent) 45%, white) !important;
}

/* Los contenedores "a ancho completo" de Elementor ignoran el ancho de
   lectura del tema: se lo devolvemos. */
.ld-contenedor.e-con {
	width: 100% !important;
	max-width: var(--ld-ancho) !important;
	margin-inline: auto !important;
	padding-inline: var(--ld-gutter) !important;
}

/* Cabecera: el menu se agrupa con la llamada a la accion, a la derecha. */
.ld-cabecera .ld-header-nav { margin-left: auto; }
.ld-cabecera .elementor-widget-button { margin-left: clamp(1.5rem, 3vw, 3rem); }

/* Elementor trae `.elementor img { height: auto }`, que por especificidad
   (clase + etiqueta) le gana a nuestras clases sueltas: la foto de la
   tarjeta se quedaba a media altura y debajo asomaba el degradado vacio. */
.ld-card__frame > .ld-card__img {
	height: 100%;
}

/* ------------------------------------------------------------------ */
/* Cabecera en movil                                                   */
/* ------------------------------------------------------------------ */

/* La fila de la cabecera no parte nunca: si no cabe, encoge. */
.ld-cabecera__inner.e-con { flex-wrap: nowrap !important; }

.ld-cabecera .elementor-button {
	white-space: nowrap;
	line-height: 1;
}

@media (max-width: 767px) {
	.ld-cabecera .ld-cabecera__inner { min-height: 72px; }

	.ld-cabecera .elementor-button {
		min-height: 40px;
		padding: 0.7em 1.15em !important;
		font-size: 0.66rem !important;
		letter-spacing: 0.14em;
	}

	.ld-cabecera__marca .custom-logo-link img { max-height: 34px; }
	.ld-cabecera--sobre-hero:not(.is-fija) .ld-cabecera__marca { padding: 0.35rem 0.6rem; }
}

/* ------------------------------------------------------------------ */
/* Fotos de fondo servidas por el widget Image de Elementor            */
/* ------------------------------------------------------------------ */

/* `.elementor-widget-image img` pesa mas que `.ld-hero__media img`, asi
   que la foto se quedaba a media altura dentro del hero y debajo solo
   veiamos el azul de fondo. Aqui el widget es el lienzo completo. */
/*
 * Vale para cualquier widget que sirva la foto, no solo para el Image de
 * Elementor: la plantilla de ficha usa el widget propio del tema, y como
 * la regla solo nombraba al de Elementor, la cadena de envoltorios se
 * quedaba con alto automatico. La foto salia a 286px dentro de un hero de
 * 900 y las tres cuartas partes de la portada eran azul plano.
 */
/* El propio contenedor de la foto lleva los 10px de relleno que Elementor
   da a todos: dejaba un marco azul alrededor de la fotografia. */
.elementor.elementor .ld-hero__media.e-con,
.elementor.elementor .ld-prop-hero__media.e-con { padding: 0; }

.ld-hero__media .elementor-widget,
.ld-hero__media .elementor-widget > .elementor-widget-container,
.ld-prop-hero__media .elementor-widget,
.ld-prop-hero__media .elementor-widget > .elementor-widget-container {
	width: 100%;
	height: 100%;
	padding: 0;
}

.ld-hero__media .elementor-widget img,
.ld-prop-hero__media .elementor-widget img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* ------------------------------------------------------------------ */
/* Filtros plegables en movil                                          */
/* ------------------------------------------------------------------ */

/* El guion de la ficha cierra el <details> por debajo de 760px. Sin este
   bloque el <summary> seguia oculto y el buscador desaparecia del todo. */
@media (max-width: 760px) {
	.ld-filtros-caja__resumen { display: flex; }

	.ld-filtros-caja[open] .ld-filtros-caja__resumen {
		background: var(--ld-accent);
	}

	.ld-filtros-caja[open] .ld-filtros-caja__resumen { margin-bottom: 1.4rem; }
}

/* ------------------------------------------------------------------ */
/* Doble boton                                                         */
/* ------------------------------------------------------------------ */

/* Las plantillas del Theme Builder llevan las clases .ld-boton en el
   widget Button. El widget es solo el envoltorio: quien se pinta como
   boton es el <a class="elementor-button"> de dentro. Sin esto salian
   dos botones, uno dentro del otro. */
/*
 * El widget Button de Elementor es SOLO el envoltorio: quien se pinta
 * como boton es el <a> de dentro. La inversion sobre fotografia lleva
 * !important y alcanzaba tambien al envoltorio, asi que detras de la
 * pastilla aparecia un rectangulo marfil del mismo tamano, con esquinas
 * rectas. Se repite la clase del widget para ganar esa especificidad.
 */
.elementor-widget.elementor-widget-button.ld-boton,
.elementor-widget.elementor-widget-button.ld-boton--acento,
.elementor-widget.elementor-widget-button.ld-boton--linea,
.elementor-widget.elementor-widget-button.ld-boton--claro {
	display: block;
	min-height: 0 !important;
	padding: 0 !important;
	border: 0 !important;
	background: none !important;
	border-radius: 0 !important;
	box-shadow: none !important;
}

.elementor-widget-button.ld-boton::before,
.elementor-widget-button.ld-boton--acento::before { content: none; }

/* ------------------------------------------------------------------ */
/* La escala del tema por delante de la del kit                        */
/* ------------------------------------------------------------------ */

/* Los ajustes del sitio de Elementor fijan h1..h6 con selectores del tipo
   `.elementor-kit-4 h1`, que pesan mas que una clase suelta. Cuando el
   titular lleva una clase de escala del tema, manda la del tema: son las
   piezas fluidas (el titulo del hero crecia solo hasta 48px fijos). */
h1.ld-display, h2.ld-display, h3.ld-display,
h1.ld-h2, h2.ld-h2, h3.ld-h2 {
	font-family: var(--ld-display);
	font-weight: 400;
}

h1.ld-display, h2.ld-display, h3.ld-display { font-weight: 300; }

h1.ld-display, h2.ld-display, h3.ld-display {
	font-size: clamp(1.8rem, 0.95rem + 2.9vw, 3.5rem);
	line-height: 1.06;
	letter-spacing: 0.018em;
}

h1.ld-h2, h2.ld-h2, h3.ld-h2 {
	font-size: clamp(1.2rem, 1.02rem + 0.8vw, 1.75rem);
	line-height: 1.2;
	letter-spacing: 0.022em;
}

/* Titulos sobre fotografia: el kit los pinta en azul marino y sobre la
   foto desaparecen. Aqui van en blanco pase lo que pase. */
.ld-hero h1, .ld-hero h2, .ld-hero h3,
.ld-prop-hero h1, .ld-prop-hero h2, .ld-prop-hero h3 {
	color: var(--ld-blanco) !important;
}

/* El precio es el dato que el ojo busca: blanco crema, no olivo apagado. */
.ld-prop-hero__precio,
.ld-prop-hero__precio .elementor-heading-title {
	color: var(--ld-cream) !important;
}

/* El pie es oscuro: los widgets de texto de Elementor heredan el color de
   cuerpo del kit (azul marino) y ahi no se leen. */
.ld-pie .elementor-widget-text-editor,
.ld-pie .elementor-widget-text-editor p,
.ld-pie .elementor-icon-list-text,
.ld-pie .ld-pie__texto,
.ld-pie .ld-pie__copy {
	color: color-mix(in srgb, var(--ld-blanco) 76%, transparent);
}

.ld-pie .elementor-icon-list-icon svg,
.ld-pie .elementor-icon-list-icon i { color: var(--ld-accent); fill: var(--ld-accent); }

/* ------------------------------------------------------------------ */
/* El catalogo va sobre papel                                          */
/* ------------------------------------------------------------------ */

/* Sobre blanco puro la fotografia no se despega del fondo y la pagina se
   lee como una hoja de resultados. El papel calido es lo que le da a la
   reticula aire de galeria. El hero y el pie llevan su propio fondo. */
body.post-type-archive-propiedad,
body.tax-propiedad_operacion,
body.tax-propiedad_tipo,
body.tax-propiedad_zona,
body.tax-propiedad_amenidad {
	background: var(--ld-papel);
}

/* ------------------------------------------------------------------ */
/* Cabecera de la seccion del catalogo                                 */
/* ------------------------------------------------------------------ */

/* Enmarca la reticula: sin ella el buscador arrancaba pegado al hero y
   la zona de papel no tenia principio. */
.ld-catalogo__cabecera.e-con {
	align-items: center !important;
	text-align: center;
	gap: 0.7rem;
	padding-top: clamp(3.5rem, 7vw, 6rem);
}

.ld-catalogo__cabecera .elementor-widget { width: auto; max-width: 100%; }

.ld-catalogo__titulo,
.ld-catalogo__titulo .elementor-heading-title {
	color: var(--ld-ink) !important;
	font-weight: 400;
	text-align: center;
}

.ld-catalogo__entradilla,
.ld-catalogo__entradilla .elementor-heading-title {
	margin: 0;
	max-width: 46ch;
	font-family: var(--ld-body);
	font-size: 0.98rem;
	font-weight: 300;
	line-height: 1.6;
	letter-spacing: 0;
	color: var(--ld-tinta-72) !important;
}

/* El buscador ya no cuelga del hero: la cabecera le da su propio aire. */
.ld-catalogo__cabecera + * .ld-filtros-caja,
.ld-catalogo__cabecera ~ * .ld-filtros-caja { margin-top: clamp(2rem, 4vw, 3rem); }

/* ------------------------------------------------------------------ */
/* Logotipo de marca en sus dos versiones                              */
/* ------------------------------------------------------------------ */

/*
 * El manual trae el logotipo en azul y en marfil. La cabecera flota sobre
 * la foto del hero y al hacer scroll se vuelve blanca, asi que se
 * imprimen los dos y aqui se decide cual se ve: sin JavaScript, sin
 * parpadeo y sin la placa crema que hacia falta cuando solo habia
 * version oscura.
 */
.ld-marca {
	position: relative;
	display: block;
	line-height: 0;
	text-decoration: none;
}

.ld-marca__img {
	display: block;
	width: auto;
	max-height: 40px;
	transition: opacity var(--ld-t-media) var(--ld-ease-suave);
}

/* La segunda version se apila encima de la primera, no debajo. */
.ld-marca__img--claro {
	position: absolute;
	inset: 0;
	opacity: 0;
}

/* Sobre la foto del hero manda el marfil; en cuanto la cabecera se
   vuelve solida, vuelve el azul. */
.ld-cabecera--sobre-hero:not(.is-fija) .ld-marca__img--oscuro { opacity: 0; }
.ld-cabecera--sobre-hero:not(.is-fija) .ld-marca__img--claro { opacity: 1; }

/* El pie es azul: alli solo existe la version marfil. */
.ld-pie .ld-marca__img--claro { position: static; opacity: 1; }
.ld-pie .ld-marca__img--oscuro { display: none; }

.ld-pie__logo .ld-marca__img { max-height: 52px; }
.ld-pie__logo { margin-bottom: 0.9rem; }

/* Ya no hace falta la placa crema detras del logotipo: la version marfil
   se lee sola sobre la fotografia. */
.ld-cabecera--sobre-hero:not(.is-fija) .ld-cabecera__marca {
	padding: 0;
	background: none;
	backdrop-filter: none;
	-webkit-backdrop-filter: none;
	box-shadow: none;
	border-radius: 0;
}

@media (max-width: 767px) {
	.ld-marca__img { max-height: 32px; }
	.ld-pie__logo .ld-marca__img { max-height: 42px; }
}

/* ------------------------------------------------------------------ */
/* Botones con la paleta oficial                                       */
/* ------------------------------------------------------------------ */

/*
 * La marca tiene dos colores, asi que la llamada a la accion se resuelve
 * invirtiendolos, igual que hace el manual con el logotipo: azul sobre
 * marfil en fondo claro, marfil sobre azul en fondo oscuro.
 */
.ld-boton--acento {
	background: var(--ld-ink);
	color: var(--ld-cream);
}

.ld-boton--acento::before { background: var(--ld-accent); }

.ld-boton--acento:hover,
.ld-boton--acento:focus-visible { color: var(--ld-cream); }

/* Sobre la foto del hero el azul se pierde contra el fondo oscuro: alli
   el boton va en marfil con el texto azul. */
.ld-cabecera--sobre-hero:not(.is-fija) .elementor-button,
.ld-cabecera--sobre-hero:not(.is-fija) .ld-boton--acento {
	background: var(--ld-cream) !important;
	color: var(--ld-ink) !important;
}

.ld-cabecera--sobre-hero:not(.is-fija) .elementor-button:hover,
.ld-cabecera--sobre-hero:not(.is-fija) .ld-boton--acento:hover {
	background: var(--ld-blanco) !important;
	color: var(--ld-ink) !important;
}

/* Aqui el texto va en azul, asi que el relleno tiene que ser claro: con
   el azul de fabrica quedaba azul sobre azul. */
.ld-cabecera--sobre-hero:not(.is-fija) .ld-boton--acento::before {
	background: var(--ld-blanco);
}

/* El sello "Featured" en azul de marca; el de operacion se queda marfil. */
.ld-tag--acento {
	background: var(--ld-ink);
	color: var(--ld-cream);
}

/* Una llamada a la accion sobre fotografia se resuelve en marfil: el azul
   de marca, por oscuro, se hunde en la foto. Mismo criterio que en la
   cabecera flotante. */
.ld-hero .elementor-button,
.ld-prop-hero .elementor-button,
.ld-hero .ld-boton--acento,
.ld-prop-hero .ld-boton--acento {
	background: var(--ld-cream) !important;
	color: var(--ld-ink) !important;
}

.ld-hero .elementor-button:hover,
.ld-prop-hero .elementor-button:hover,
.ld-hero .ld-boton--acento:hover,
.ld-prop-hero .ld-boton--acento:hover {
	background: var(--ld-blanco) !important;
	color: var(--ld-ink) !important;
}

/* El texto de estos botones es azul: el relleno del hover va en blanco. */
.ld-hero .ld-boton--acento::before,
.ld-prop-hero .ld-boton--acento::before {
	background: var(--ld-blanco);
}

/*
 * La rejilla del catalogo va pegada al buscador: entre los dos habia
 * 204px (130 de relleno de seccion mas 64 del margen de la linea de
 * resultados). El buscador y sus resultados son una sola pieza.
 */
.ld-catalogo__listado.e-con {
	padding-top: clamp(1.4rem, 3vw, 2.4rem) !important;
}

.ld-catalogo__listado .ld-resultados {
	margin-top: 0;
}

/* La entradilla del catalogo cabe en una linea en escritorio. */
.ld-catalogo__entradilla,
.ld-catalogo__entradilla .elementor-heading-title { max-width: 58ch; }

/* ------------------------------------------------------------------ */
/* Botones que NO son llamadas a la accion                             */
/* ------------------------------------------------------------------ */

/*
 * El kit de Elementor viste TODOS los <button> del sitio con el color y
 * la pildora de sus botones. Las miniaturas de la galeria, el
 * hamburguesa y los mandos del visor son botones por accesibilidad, no
 * llamadas a la accion: aqui se les devuelve su forma.
 */
/* Va con !important a proposito: el kit imprime su hoja despues de la del
   tema y con mas especificidad (`.elementor-kit-N button`), asi que sin
   esto las miniaturas salian como ovalos azules. */
.ld-mosaico__item,
.ld-menu-toggle,
.ld-visor__nav,
.ld-visor__cerrar {
	border-radius: 0 !important;
	box-shadow: none !important;
	text-shadow: none;
	letter-spacing: normal;
	text-transform: none;
}

.ld-mosaico__item,
.ld-menu-toggle {
	background: var(--ld-velo) !important;
	color: inherit;
	padding: 0 !important;
	border: 0 !important;
	min-height: 0;
}

.ld-menu-toggle { background: transparent !important; }

.ld-visor__nav,
.ld-visor__cerrar {
	border-radius: 50% !important;
	background: color-mix(in srgb, var(--ld-blanco) 10%, transparent) !important;
	color: var(--ld-blanco) !important;
}

/* Con exactamente cuatro fotos, dos columnas cuadran mejor que tres:
   con tres, la cuarta se quedaba sola en una fila. */
@media (min-width: 800px) {
	.ld-mosaico:has(> :nth-child(4)):not(:has(> :nth-child(5))) {
		grid-template-columns: repeat(2, 1fr);
	}
}

/* ------------------------------------------------------------------ */
/* El titular del hero, abajo a la izquierda                           */
/* ------------------------------------------------------------------ */

/*
 * El CSS original alineaba abajo con `align-items: flex-end`, que es lo
 * correcto en un flex de FILA. Pero un contenedor de Elementor nace en
 * COLUMNA, y ahi ese eje es el horizontal: empujaba a la derecha (y ni
 * eso se veia, porque `.ld-contenedor` recentra con margin auto). Para
 * bajar el bloque en una columna manda `justify-content`.
 */
.ld-hero.e-con,
.ld-prop-hero.e-con {
	flex-direction: column !important;
	justify-content: flex-end !important;
	align-items: stretch !important;
	padding-bottom: clamp(3rem, 6vw, 5.5rem) !important;
}

/* Y dentro del contenedor, el texto pegado a la izquierda. */
.ld-hero__inner.e-con,
.ld-prop-hero__inner.e-con {
	align-items: flex-start !important;
	text-align: left;
}

/* ================================================================== */
/* 16. Mega menu de Propiedades                                        */
/* ================================================================== */

/*
 * El desplegable no depende del guion de Elementor (SmartMenus): se abre
 * con :hover y :focus-within en CSS puro. Asi el panel es predecible, se
 * puede recorrer con el teclado y la animacion es de opacidad y
 * transform, sin tocar el diseno de la pagina.
 */

/* El panel se ancla al ancho de la cabecera, no al del enlace. */
.ld-header-nav .elementor-nav-menu--main > ul > li.ld-mega { position: static; }

/* El `display` va con !important porque Elementor oculta los submenus
   asi; quien decide si se ve es la opacidad, no el display. */
.ld-header-nav .elementor-nav-menu--main > ul > li > .sub-menu {
	display: block !important;
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
	transform: translateY(8px);
	transition: opacity var(--ld-t-media) var(--ld-ease),
		transform var(--ld-t-media) var(--ld-ease),
		visibility var(--ld-t-media);
}

.ld-header-nav .elementor-nav-menu--main > ul > li:hover > .sub-menu,
.ld-header-nav .elementor-nav-menu--main > ul > li:focus-within > .sub-menu {
	opacity: 1;
	visibility: visible;
	pointer-events: auto;
	transform: none;
}

/* --- El panel de dos columnas ------------------------------------- */

/* Panel anclado a la ventana: la cabecera esta llena de contenedores de
   Elementor posicionados y el desplegable acababa saliendose por la
   izquierda. Fijo y centrado es predecible a cualquier ancho. */
.ld-header-nav .elementor-nav-menu--main > ul > li.ld-mega > .sub-menu {
	display: grid !important;
	/* Tres columnas: tipologia y oportunidad son listas cortas, las zonas
	   son doce y se llevan el hueco sobrante. */
	grid-template-columns: minmax(140px, max-content) minmax(0, 1fr) minmax(150px, max-content);
	gap: 0 clamp(1.8rem, 3.5vw, 3.5rem);
	position: fixed !important;
	/* Elementor le pone `top: 100%` al desplegable; siendo `fixed`, ese
	   100% es el alto de la ventana y el panel se iba al pie. */
	top: 84px !important;
	left: 50% !important;
	right: auto !important;
	width: min(var(--ld-ancho), calc(100vw - var(--ld-gutter) * 2)) !important;
	max-height: calc(100vh - 120px);
	overflow-y: auto;
	transform: translateX(-50%) translateY(8px);
	padding: clamp(1.8rem, 3vw, 2.6rem) clamp(1.8rem, 3vw, 2.8rem);
}

/* Al hacerse solida la cabecera encoge, y el panel la sigue. */
.ld-cabecera.is-fija .ld-header-nav .elementor-nav-menu--main > ul > li.ld-mega > .sub-menu {
	top: 68px !important;
}

.ld-header-nav .elementor-nav-menu--main > ul > li.ld-mega:hover > .sub-menu,
.ld-header-nav .elementor-nav-menu--main > ul > li.ld-mega:focus-within > .sub-menu {
	transform: translateX(-50%);
}

/* Las cabeceras de columna no son enlaces: son rotulos. */
/* Mas especifico que la regla general de submenus, que si no pinta los
   rotulos del mismo azul que los enlaces. */
.ld-header-nav .elementor-nav-menu--main .sub-menu .ld-mega__col > .elementor-sub-item,
.ld-header-nav .ld-mega__col > .elementor-sub-item {
	padding: 0 0 0.9rem !important;
	margin-bottom: 0.9rem;
	border-bottom: 1px solid color-mix(in srgb, var(--ld-ink) 14%, var(--ld-cream));
	font-family: var(--ld-body);
	font-size: 0.6rem !important;
	letter-spacing: 0.24em !important;
	text-transform: uppercase;
	color: color-mix(in srgb, var(--ld-ink) 55%, var(--ld-cream)) !important;
	pointer-events: none;
	background: transparent !important;
}

/* No son enlaces desplegables: la flechita de Elementor sobra. */
.ld-header-nav .ld-mega__col > .elementor-sub-item .sub-arrow { display: none; }

/* La lista de cada columna se queda dentro del panel, no vuela aparte. */
/*
 * Estas listas van DENTRO del panel, asi que solo tienen que dejar de ser
 * desplegables sueltos: en columna y en el flujo.
 *
 * Ojo con lo que NO se toca aqui. `visibility` y `pointer-events` los
 * decide el panel, que es quien sabe si esta abierto. Ponerles
 * `visibility: visible` los devolvia a la vista aunque el panel estuviera
 * oculto (la visibilidad si se puede revertir en un hijo), y con
 * `pointer-events: auto` quedaban transparentes PERO activos: al mover el
 * raton por el hero, a media pantalla de distancia del menu, se pasaba por
 * encima de esos enlaces invisibles, eso contaba como hover del item
 * "Properties" y el mega menu se abria solo. Ademas eran clicables y
 * tabulables sin verse.
 */
.ld-header-nav .elementor-nav-menu--main .ld-mega .sub-menu .sub-menu {
	display: block !important;
	position: static !important;
	transform: none !important;
	/* El guion de Elementor calcula un ancho fijo para cada submenu; aqui
	   la lista debe ocupar toda su columna. */
	width: 100% !important;
	min-width: 0 !important;
	max-width: none !important;
	padding: 0;
	border: 0;
	background: transparent;
	box-shadow: none;
}

/* Las zonas son doce: van a varias columnas para no hacer una tira larga. */
.ld-header-nav .ld-mega__col--ancha > .sub-menu {
	columns: 2;
	column-gap: clamp(1.5rem, 3vw, 3rem);
}

@media (min-width: 1250px) {
	.ld-header-nav .ld-mega__col--ancha > .sub-menu { columns: 3; }
}

.ld-header-nav .ld-mega__col--ancha > .sub-menu > li {
	break-inside: avoid;
}

/* "Ver todas" cierra el panel de lado a lado. */
.ld-header-nav .ld-mega__todas {
	grid-column: 1 / -1;
	margin-top: 1.4rem;
	padding-top: 1.2rem;
	border-top: 1px solid color-mix(in srgb, var(--ld-ink) 14%, var(--ld-cream));
}

.ld-header-nav .ld-mega__todas > .elementor-sub-item {
	padding: 0 !important;
	font-family: var(--ld-body);
	font-size: 0.66rem !important;
	letter-spacing: 0.2em !important;
	text-transform: uppercase;
	background: transparent !important;
}

/* --- Ajustes de sitio --------------------------------------------- */

/* Con siete secciones la fila va justa entre 1025 y 1200: se aprieta el
   hueco antes de que el menu se coma el boton de WhatsApp. */
@media (min-width: 1025px) and (max-width: 1200px) {
	.ld-header-nav ul.elementor-nav-menu { gap: 1.1rem; }

	.ld-header-nav .elementor-nav-menu--main .elementor-item {
		font-size: 0.68rem !important;
		letter-spacing: 0.12em !important;
	}
}

/* ------------------------------------------------------------------ */
/* Menu movil: panel a pantalla completa                               */
/* ------------------------------------------------------------------ */

/*
 * El widget de la cabecera esta configurado como `dropdown-tablet`: el
 * menu de escritorio desaparece y sale el hamburguesa a partir de los
 * 1024px, no de los 767. Todo lo que viste al panel vive aqui, en esa
 * misma frontera; abajo de 767 solo quedan los ajustes de la fila de la
 * cabecera (alto, logo, boton), que si son de movil.
 */
@media (max-width: 1024px) {

	/*
	 * De fabrica el desplegable hereda el ancho del widget, que en la
	 * cabecera mide lo que ocupa el hamburguesa: un panel de 330px
	 * pegado a la derecha. Aqui se saca del flujo y ocupa el ancho
	 * entero, desde el borde de abajo de la cabecera.
	 *
	 * `--ld-cab-alto` la escribe theme.js midiendo la cabecera de
	 * verdad, asi que vale igual con la barra de aviso puesta, con la
	 * cabecera encogida al bajar y sin ninguna de las dos.
	 */
	.ld-cabecera .elementor-nav-menu--dropdown.elementor-nav-menu__container {
		position: fixed;
		top: var(--ld-cab-alto, 72px);
		left: 0;
		right: 0;
		width: 100%;
		margin-top: 0;
		background: var(--ld-ink);
		color: var(--ld-cream);
		border-top: 1px solid color-mix(in srgb, var(--ld-cream) 16%, transparent);
		box-shadow: 0 30px 60px -20px rgb(11 32 39 / 55%);
		overscroll-behavior: contain;
	}

	/*
	 * Abierto, Elementor le pone de tope el alto natural de la lista
	 * (`--menu-height`). Con el panel fijo, lo que pase de la pantalla
	 * se queda fuera y sin manera de alcanzarlo: el tope lo pone la
	 * ventana y lo que sobra se desplaza dentro del panel.
	 */
	.ld-cabecera .elementor-menu-toggle.elementor-active + .elementor-nav-menu--dropdown {
		max-height: calc(100vh - var(--ld-cab-alto, 72px)) !important;
		max-height: calc(100dvh - var(--ld-cab-alto, 72px)) !important;
		overflow-y: auto !important;
	}

	.ld-cabecera .elementor-nav-menu--dropdown > ul.elementor-nav-menu {
		display: block;
		padding: 0.3rem 0 2.6rem;
	}

	/* Con el panel abierto la cabecera se viste de azul: el hamburguesa,
	   el logotipo y el panel tienen que leerse como una sola pieza, no
	   como una barra transparente sobre la foto y un cajon debajo.
	   Va con !important porque compite con el estado "sobre el hero",
	   que es mas especifico y no sabe nada del menu. */
	html.ld-menu-abierto .ld-cabecera {
		background: var(--ld-ink) !important;
		backdrop-filter: none !important;
		-webkit-backdrop-filter: none !important;
		box-shadow: none !important;
		color: var(--ld-cream) !important;
	}

	html.ld-menu-abierto .ld-cabecera .ld-cabecera__marca {
		background: transparent !important;
		padding: 0 !important;
		backdrop-filter: none !important;
		-webkit-backdrop-filter: none !important;
	}

	html.ld-menu-abierto .ld-marca__img--oscuro { opacity: 0 !important; }
	html.ld-menu-abierto .ld-marca__img--claro { opacity: 1 !important; }

	/* La pagina de detras no se mueve mientras el panel esta abierto. */
	html.ld-menu-abierto,
	html.ld-menu-abierto body { overflow: hidden; }

	/* --- Primer nivel ------------------------------------------------ */

	.ld-header-nav .elementor-nav-menu--dropdown .elementor-item {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: 1rem;
		min-height: 58px;
		padding: 1rem var(--ld-gutter) !important;
		font-family: var(--ld-display) !important;
		font-size: 1.3rem;
		font-weight: 400;
		letter-spacing: -0.02em;
		line-height: 1.15;
		text-transform: none;
		color: var(--ld-cream) !important;
		opacity: 1;
		border-inline-start: 0 !important;
		border-bottom: 1px solid color-mix(in srgb, var(--ld-cream) 12%, transparent);
	}

	.ld-header-nav .elementor-nav-menu--dropdown > ul > li:last-child > .elementor-item {
		border-bottom: 0;
	}

	.ld-header-nav .elementor-nav-menu--dropdown .elementor-item:hover,
	.ld-header-nav .elementor-nav-menu--dropdown .elementor-item:focus,
	.ld-header-nav .elementor-nav-menu--dropdown .elementor-item.elementor-item-active,
	.ld-header-nav .elementor-nav-menu--dropdown .elementor-item[aria-expanded="true"] {
		background: color-mix(in srgb, var(--ld-cream) 8%, transparent);
		color: var(--ld-cream) !important;
	}

	/* La flecha de Elementor es un caret minusculo pegado al texto. En el
	   panel se va a la derecha, crece y gira cuando la seccion se abre. */
	.ld-header-nav .elementor-nav-menu--dropdown .sub-arrow {
		display: flex;
		align-items: center;
		margin: 0;
		padding: 0;
		transition: transform var(--ld-t-media) var(--ld-ease);
	}

	.ld-header-nav .elementor-nav-menu--dropdown .sub-arrow svg {
		width: 0.8em;
		height: 0.8em;
		fill: color-mix(in srgb, var(--ld-cream) 65%, transparent);
		transform: none;
	}

	.ld-header-nav .elementor-nav-menu--dropdown [aria-expanded="true"] > .sub-arrow {
		transform: rotate(180deg);
	}

	/* --- Segundo nivel ----------------------------------------------- */

	.ld-header-nav .elementor-nav-menu--dropdown .sub-menu {
		background: color-mix(in srgb, var(--ld-cream) 6%, transparent);
		padding: 0.2rem 0 0.8rem;
	}

	.ld-header-nav .elementor-nav-menu--dropdown .sub-menu .elementor-sub-item {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: 1rem;
		min-height: 48px;
		padding: 0.5rem var(--ld-gutter) !important;
		font-family: var(--ld-body) !important;
		font-size: 1rem !important;
		font-weight: 300;
		letter-spacing: 0 !important;
		text-transform: none;
		/* Elementor mete 8px de borde inicial transparente en cada enlace
		   del desplegable; aqui la sangria la lleva el padding. */
		border-inline-start: 0 !important;
		color: color-mix(in srgb, var(--ld-cream) 82%, transparent) !important;
	}

	.ld-header-nav .elementor-nav-menu--dropdown .sub-menu .elementor-sub-item:hover,
	.ld-header-nav .elementor-nav-menu--dropdown .sub-menu .elementor-sub-item.elementor-item-active {
		background: color-mix(in srgb, var(--ld-cream) 8%, transparent);
		color: var(--ld-cream) !important;
	}

	/*
	 * "By type", "By area" y "By opportunity" son rotulos de columna del
	 * mega menu de escritorio, no enlaces. Aqui se quedan de separador y
	 * su lista se ensena siempre abierta: tres niveles de plegado en un
	 * telefono son un laberinto, y ademas el rotulo no se puede pulsar.
	 */
	.ld-header-nav .elementor-nav-menu--dropdown .ld-mega__col > .elementor-sub-item {
		min-height: 0;
		padding: 1.2rem var(--ld-gutter) 0.4rem !important;
		font-family: var(--ld-body) !important;
		font-size: 0.6rem !important;
		font-weight: 500;
		letter-spacing: 0.24em !important;
		text-transform: uppercase;
		/* 70% es el minimo para 4.5:1 de marfil sobre el azul de marca;
		   al 58% del mega menu de escritorio, en versalitas de 9px, no
		   llegaba. */
		color: color-mix(in srgb, var(--ld-cream) 70%, transparent) !important;
		background: transparent !important;
		pointer-events: none;
	}

	.ld-header-nav .elementor-nav-menu--dropdown .ld-mega__col > .elementor-sub-item .sub-arrow {
		display: none;
	}

	/* SmartMenus deja estas listas en `display: none` con estilo en linea;
	   una declaracion de hoja con !important le gana. */
	.ld-header-nav .elementor-nav-menu--dropdown .ld-mega__col > .sub-menu {
		display: block !important;
		background: transparent;
		padding: 0;
	}

	/* Las zonas van a dos columnas en el mega menu de escritorio. En un
	   panel de 390px eso son dos columnas de nada, con los nombres largos
	   partidos en tres lineas: aqui la lista va entera, una debajo de otra. */
	.ld-header-nav .elementor-nav-menu--dropdown .ld-mega__col--ancha > .sub-menu {
		columns: auto;
	}

	/* --- Tercer nivel ------------------------------------------------ */

	.ld-header-nav .elementor-nav-menu--dropdown .sub-menu .sub-menu .elementor-sub-item {
		padding-left: calc(var(--ld-gutter) + 0.9rem) !important;
		font-size: 0.95rem !important;
	}

	/* El enlace a todo el catalogo cierra la seccion y se distingue de la
	   lista: es el unico que lleva a la pagina entera. */
	.ld-header-nav .elementor-nav-menu--dropdown .ld-mega__todas > .elementor-sub-item {
		justify-content: center;
		margin: 1rem var(--ld-gutter) 0.2rem;
		padding: 0.85rem 1.2rem !important;
		font-family: var(--ld-display) !important;
		font-size: 0.66rem !important;
		font-weight: 500;
		letter-spacing: 0.2em !important;
		text-transform: uppercase;
		color: var(--ld-cream) !important;
		/* 50% deja el filete en 3.3:1, el minimo de un elemento de mando. */
		border: 1px solid color-mix(in srgb, var(--ld-cream) 50%, transparent);
	}

	/* --- Hamburguesa -------------------------------------------------- */

	/* El hamburguesa cierra la fila por la derecha, despues de la llamada
	   a la accion: es el borde de la pantalla lo que el pulgar alcanza. */
	.ld-cabecera .ld-header-nav { margin-left: auto; order: 3; }
	.ld-cabecera .elementor-widget-button { order: 2; margin-left: auto; }

	/* Toma el color de la cabecera (marfil sobre la foto, azul cuando se
	   vuelve solida) y crece hasta la medida minima de un dedo. */
	.ld-cabecera .elementor-menu-toggle {
		color: currentColor;
		background: transparent !important;
		border: 0 !important;
		padding: 0.4rem !important;
		width: 44px;
		height: 44px;
	}

	.ld-cabecera .elementor-menu-toggle svg {
		width: 26px;
		height: 26px;
		fill: currentColor;
	}
}

/* ================================================================== */
/* 17. Paginas de contenido                                            */
/* ================================================================== */

/*
 * Las paginas de seccion (Vivir en Cap Cana, Invertir, Sobre mi...) se
 * leen en columna estrecha, pero algunas piezas necesitan todo el ancho.
 * `.ld-ancho` sale de la columna de lectura sin salirse del contenedor.
 */
.ld-prosa .ld-ancho {
	width: min(var(--ld-ancho), calc(100vw - var(--ld-gutter) * 2));
	margin-inline: calc(50% - min(var(--ld-ancho), calc(100vw - var(--ld-gutter) * 2)) / 2);
	max-width: none;
}

/*
 * La banda de datos de la ficha (dormitorios, banos, metros) y el numero
 * de referencia salen de un widget suelto, colocado en un contenedor de
 * Elementor sin ancho de lectura. Se quedaban a 10px del borde: ni
 * alineados con el texto de la ficha, que empieza mucho mas adentro, ni
 * a sangre de verdad. Aqui comparten eje con el resto de la pagina.
 */
.ld-datos-widget {
	width: min(100% - (var(--ld-gutter) * 2), var(--ld-ancho));
	margin-inline: auto;
}

/* Cada seccion arranca con un filete y su rotulo: da ritmo sin cajas. */
.ld-bloque {
	padding-top: clamp(2.5rem, 5vw, 4.5rem);
	margin-top: clamp(2.5rem, 5vw, 4.5rem);
	border-top: 1px solid var(--ld-linea);
	scroll-margin-top: 120px;
}

.ld-bloque:first-child {
	padding-top: 0;
	margin-top: 0;
	border-top: 0;
}

.ld-bloque > .ld-over { margin-bottom: 0.8rem; }
.ld-bloque > .ld-h2 { margin-bottom: 1.2rem; }
.ld-bloque > p + .ld-h2 { margin-top: 2rem; }

/* Entradilla: el primer parrafo de una seccion, un punto mayor. */
.ld-entrada {
	font-size: clamp(1.08rem, 1rem + 0.35vw, 1.28rem);
	line-height: 1.65;
	/* Es el primer parrafo de la seccion, no un titular: va en tinta. Lo
	   que lo distingue del resto del texto es el cuerpo, no el color. */
	color: var(--ld-texto);
}

/* Lista de datos con filete: para procesos, requisitos y preguntas. */
.ld-datos {
	margin: 1.8rem 0 0;
	padding: 0;
	list-style: none;
}

.ld-datos > li,
.ld-datos > .e-con {
	padding: 1.15rem 0;
	border-top: 1px solid var(--ld-linea);
}

.ld-datos > li:last-child,
.ld-datos > .e-con:last-child { border-bottom: 1px solid var(--ld-linea); }

.ld-datos strong,
.ld-datos .ld-dato__titulo {
	display: block;
	margin-bottom: 0.3rem;
	font-family: var(--ld-display);
	font-size: 1.05rem;
	font-weight: 500;
	letter-spacing: -0.015em;
	color: var(--ld-ink);
}

.ld-datos span {
	display: block;
	color: var(--ld-tinta-72);
	font-size: 0.96rem;
}

/* Rejilla de apuntes cortos, a todo el ancho. */
.ld-apuntes {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
	gap: clamp(1.6rem, 3vw, 2.6rem);
	margin: 2.2rem 0 0;
	padding: 0;
	list-style: none;
}

.ld-apuntes > li,
.ld-apuntes > .e-con { border-top: 1px solid var(--ld-linea); padding-top: 1.1rem; }

.ld-apuntes strong,
.ld-apuntes .ld-apunte__titulo {
	display: block;
	margin-bottom: 0.45rem;
	font-family: var(--ld-display);
	font-size: 1.1rem;
	font-weight: 500;
	letter-spacing: -0.015em;
}

.ld-apuntes span,
.ld-apuntes .ld-apunte__texto { color: var(--ld-tinta-72); font-size: 0.94rem; line-height: 1.6; }

/* Version con fotografia: cuatro columnas de texto suelto no ensenaban
   nada de un sitio que se vende por como se ve. La foto va arriba, con la
   misma proporcion en las cuatro para que las lineas de texto empiecen a
   la misma altura. */
.ld-apuntes--fotos > li,
.ld-apuntes--fotos > .e-con {
	border-top: 0;
	padding-top: 0;
}

.ld-apuntes--fotos img {
	display: block;
	width: 100%;
	aspect-ratio: 4 / 3;
	height: auto;
	margin-bottom: 1rem;
	object-fit: cover;
	background: var(--ld-cream);
}

.ld-apuntes--fotos strong,
.ld-apuntes--fotos .ld-apunte__titulo {
	padding-top: 0.9rem;
	border-top: 1px solid var(--ld-linea);
}

/* Panel en marfil para lo que conviene destacar. */
.ld-destacado {
	margin: 2.2rem 0 0;
	padding: clamp(1.6rem, 3vw, 2.4rem);
	background: var(--ld-cream);
	border: 1px solid color-mix(in srgb, var(--ld-ink) 12%, var(--ld-cream));
}

.ld-destacado > :first-child { margin-top: 0; }
.ld-destacado > :last-child { margin-bottom: 0; }

/* Enlaces de zona o tipologia, en linea. */
.ld-fichas-enlace {
	display: flex;
	flex-wrap: wrap;
	gap: 0.6rem;
	margin: 1.6rem 0 0;
	padding: 0;
	list-style: none;
}

.ld-fichas-enlace a,
.elementor.elementor .ld-pastilla .elementor-button {
	display: inline-flex;
	padding: 0.55em 1.1em;
	border: 1px solid color-mix(in srgb, var(--ld-ink) 18%, white);
	border-radius: 999px;
	font-size: 0.85rem;
	text-decoration: none;
	color: var(--ld-ink);
	transition: background-color var(--ld-t-rapida) var(--ld-ease),
		border-color var(--ld-t-rapida) var(--ld-ease),
		color var(--ld-t-rapida) var(--ld-ease);
}

.ld-fichas-enlace a:hover,
.ld-fichas-enlace a:focus-visible,
.elementor.elementor .ld-pastilla .elementor-button:hover,
.elementor.elementor .ld-pastilla .elementor-button:focus-visible {
	background: var(--ld-ink);
	border-color: var(--ld-ink);
	color: var(--ld-cream);
}

/* Banda de cierre: la llamada a la accion de cada pagina. */
.ld-cierre {
	margin-top: clamp(3rem, 6vw, 5rem);
	padding: clamp(2.4rem, 5vw, 4rem);
	background: var(--ld-ink);
	color: var(--ld-cream);
	text-align: center;
}

.ld-cierre .ld-h2,
.ld-cierre h2 { color: var(--ld-cream); margin-bottom: 0.8rem; }

.ld-cierre p {
	max-width: 52ch;
    margin-inline: auto;
	color: color-mix(in srgb, var(--ld-cream) 80%, transparent);
}

.ld-cierre .ld-acciones {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.8rem;
	margin-top: 1.8rem;
}

.ld-cierre .ld-boton--acento,
.elementor.elementor .ld-cierre .ld-btn--acento .elementor-button {
	background: var(--ld-cream);
	color: var(--ld-ink);
}

.ld-cierre .ld-boton--acento::before,
.elementor.elementor .ld-cierre .ld-btn--acento .elementor-button::before { background: var(--ld-blanco); }
.ld-cierre .ld-boton--acento:hover,
.elementor.elementor .ld-cierre .ld-btn--acento .elementor-button:hover { color: var(--ld-ink); }

.ld-cierre .ld-boton--linea,
.elementor.elementor .ld-cierre .ld-btn--linea .elementor-button {
	background: transparent;
	color: var(--ld-cream);
	border-color: color-mix(in srgb, var(--ld-cream) 45%, transparent);
}

.ld-cierre .ld-boton--linea::before,
.elementor.elementor .ld-cierre .ld-btn--linea .elementor-button::before { background: color-mix(in srgb, var(--ld-cream) 14%, transparent); }
.ld-cierre .ld-boton--linea:hover,
.elementor.elementor .ld-cierre .ld-btn--linea .elementor-button:hover { color: var(--ld-cream); border-color: var(--ld-cream); }

/* El buscador y las rejillas insertadas en una pagina necesitan aire. */
.ld-inserto { margin: 2.4rem 0 0; }

/* El titulo de la pagina comparte borde izquierdo con el texto: la
   columna de lectura va centrada en el contenedor, asi que la cabecera
   tiene que ir con ella o el titulo queda descolgado a la izquierda. */
.ld-pagina-simple .ld-encabezado {
	max-width: var(--ld-ancho-texto);
	margin-inline: auto;
}

/* ================================================================== */
/* 18. Resultados, busqueda libre y guardadas                          */
/* ================================================================== */

/* --- Caja de busqueda libre, dentro de la barra de filtros --------- */
.ld-filtro--texto {
	position: relative;
	flex: 1 1 clamp(220px, 24vw, 320px);
	max-width: 340px;
	min-width: 0;
}

.ld-filtro--texto label {
	position: absolute;
	width: 1px; height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}

.ld-filtro--texto .ld-icono {
	position: absolute;
	left: 1.15rem;
	top: 50%;
	width: 16px;
	height: 16px;
	transform: translateY(-50%);
	color: var(--ld-tinta-52);
	pointer-events: none;
}

.ld-filtro--texto input {
	width: 100%;
	min-height: 52px;
	padding: 0 1.2rem 0 2.9rem;
	border: 1px solid transparent;
	border-radius: 999px;
	background: color-mix(in srgb, var(--ld-ink) 5%, var(--ld-papel));
	font-family: var(--ld-body);
	font-size: 0.95rem;
	font-weight: 300;
	color: var(--ld-ink);
	appearance: none;
	-webkit-appearance: none;
}

.ld-filtro--texto input::placeholder { color: var(--ld-tinta-52); }
.ld-filtro--texto input:hover { background: color-mix(in srgb, var(--ld-ink) 9%, var(--ld-papel)); }
.ld-filtro--texto input:focus-visible { border-color: var(--ld-accent); }
.ld-filtro--texto input::-webkit-search-cancel-button { -webkit-appearance: none; }

/* --- Linea de resultados ------------------------------------------ */
.ld-resultados {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	margin: clamp(2.5rem, 5vw, 4rem) 0 clamp(1.5rem, 3vw, 2.4rem);
	padding-bottom: 1rem;
	border-bottom: 1px solid color-mix(in srgb, var(--ld-ink) 12%, var(--ld-papel));
}

.ld-resultados__cuenta {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	margin: 0;
	font-size: 0.9rem;
	font-weight: 300;
	color: var(--ld-tinta-72);
}

.ld-resultados__cuenta strong {
	font-family: var(--ld-display);
	font-size: 1.15rem;
	font-weight: 500;
	color: var(--ld-ink);
}

/* El `display` explicito gana al `display:none` que trae el atributo
   `hidden`, asi que hay que devolverselo. Y el fondo va con !important
   porque el kit de Elementor viste todos los <button> del sitio. */
.ld-resultados__guardadas[hidden] { display: none !important; }

.ld-resultados__guardadas {
	display: inline-flex;
	align-items: center;
	gap: 0.45em;
	margin-left: 0.8rem;
	padding: 0.45em 1em !important;
	border: 1px solid color-mix(in srgb, var(--ld-ink) 20%, var(--ld-papel)) !important;
	border-radius: 999px !important;
	background: transparent !important;
	color: var(--ld-ink) !important;
	letter-spacing: normal;
	text-transform: none;
	min-height: 0;
	box-shadow: none !important;
	font-family: var(--ld-body);
	font-size: 0.78rem;
	cursor: pointer;
	transition: background-color var(--ld-t-rapida) var(--ld-ease),
		border-color var(--ld-t-rapida) var(--ld-ease),
		color var(--ld-t-rapida) var(--ld-ease);
}

.ld-resultados__guardadas .ld-icono { width: 15px; height: 15px; }

.ld-resultados__guardadas:hover { border-color: var(--ld-ink) !important; }

.ld-resultados__guardadas.is-activo {
	background: var(--ld-ink) !important;
	border-color: var(--ld-ink) !important;
	color: var(--ld-cream) !important;
}

.ld-resultados__guardadas.is-activo .ld-icono { fill: currentColor; }

.ld-resultados__orden { margin: 0; }

.ld-resultados__orden select {
	min-height: 44px;
	padding: 0 2.4rem 0 1.1rem;
	border: 1px solid transparent;
	border-radius: 999px;
	background: color-mix(in srgb, var(--ld-ink) 5%, var(--ld-papel));
	font-family: var(--ld-body);
	font-size: 0.85rem;
	font-weight: 300;
	color: var(--ld-ink);
	appearance: none;
	-webkit-appearance: none;
	cursor: pointer;
}

.ld-resultados__orden select:hover { background: color-mix(in srgb, var(--ld-ink) 9%, var(--ld-papel)); }
.ld-resultados__orden select:focus-visible { border-color: var(--ld-accent); }

/* --- El corazon de cada tarjeta ------------------------------------ */

/* Va FUERA del <a> de la tarjeta: un boton dentro de un enlace no es
   marcado valido y el clic acabaria abriendo la propiedad. */
.ld-card__guardar {
	position: absolute;
	z-index: 3;
	top: 0.75rem;
	right: 0.75rem;
	display: grid;
	place-items: center;
	width: 36px;
	height: 36px;
	padding: 0 !important;
	border: 0 !important;
	border-radius: 50% !important;
	background: color-mix(in srgb, var(--ld-cream) 92%, transparent) !important;
	color: var(--ld-ink);
	cursor: pointer;
	opacity: 0;
	transform: scale(0.9);
	transition: opacity var(--ld-t-media) var(--ld-ease),
		transform var(--ld-t-media) var(--ld-ease),
		background-color var(--ld-t-rapida) var(--ld-ease);
}

.ld-card:hover .ld-card__guardar,
.ld-card:focus-within .ld-card__guardar,
.ld-card__guardar:focus-visible,
.ld-card__guardar.is-guardada {
	opacity: 1;
	transform: none;
}

/* Sin puntero fino no hay hover: el corazon se queda a la vista. */
@media (hover: none) {
	.ld-card__guardar { opacity: 1; transform: none; }
}

.ld-card__guardar .ld-icono {
	width: 18px;
	height: 18px;
	transition: fill var(--ld-t-rapida) var(--ld-ease);
}

.ld-card__guardar:hover { background: var(--ld-cream) !important; }

.ld-card__guardar.is-guardada {
	background: var(--ld-ink) !important;
	color: var(--ld-cream);
}

.ld-card__guardar.is-guardada .ld-icono { fill: currentColor; }

@media (max-width: 700px) {
	.ld-resultados { align-items: flex-start; }
	.ld-resultados__cuenta { flex-wrap: wrap; }
	.ld-resultados__guardadas { margin-left: 0; }
}

/* ================================================================== */
/* 19. Proyectos de obra nueva                                         */
/* ================================================================== */

/* Pestanas de tipologia: filtran en el navegador, no recargan. */
.ld-pestanas {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin-bottom: clamp(1.8rem, 3vw, 2.6rem);
}

.ld-pestana {
	padding: 0.62em 1.25em !important;
	border: 1px solid color-mix(in srgb, var(--ld-ink) 18%, var(--ld-papel)) !important;
	border-radius: 999px !important;
	background: transparent !important;
	color: var(--ld-tinta-72) !important;
	font-family: var(--ld-body);
	font-size: 0.78rem;
	font-weight: 400;
	letter-spacing: normal;
	text-transform: none;
	min-height: 0;
	box-shadow: none !important;
	cursor: pointer;
	transition: background-color var(--ld-t-rapida) var(--ld-ease),
		border-color var(--ld-t-rapida) var(--ld-ease),
		color var(--ld-t-rapida) var(--ld-ease);
}

.ld-pestana:hover { border-color: var(--ld-ink) !important; color: var(--ld-ink) !important; }

.ld-pestana.is-activa {
	background: var(--ld-ink) !important;
	border-color: var(--ld-ink) !important;
	color: var(--ld-cream) !important;
}

.ld-proyectos {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 340px), 1fr));
	gap: clamp(2.5rem, 4vw, 3.5rem) clamp(1.5rem, 2.4vw, 2.5rem);
}

.ld-proyecto__link {
	display: flex;
	flex-direction: column;
	gap: 1.3rem;
	color: inherit;
	text-decoration: none;
}

.ld-proyecto__frame {
	position: relative;
	aspect-ratio: 4 / 3;
	overflow: hidden;
	background: var(--ld-velo);
}

.ld-proyecto__frame > .ld-proyecto__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transform: scale(1.001);
	transition: transform 900ms var(--ld-ease);
}

.ld-proyecto__link:hover .ld-proyecto__img,
.ld-proyecto__link:focus-visible .ld-proyecto__img { transform: scale(1.055); }

.ld-proyecto__body { display: flex; flex-direction: column; gap: 0.35rem; }

h3.ld-proyecto__titulo,
.ld-proyecto__titulo {
	margin: 0;
	font-family: var(--ld-display);
	font-size: clamp(1rem, 0.9rem + 0.4vw, 1.2rem);
	font-weight: 400;
	line-height: 1.3;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	color: var(--ld-ink);
	transition: color var(--ld-t-rapida) var(--ld-ease);
}

.ld-proyecto__link:hover .ld-proyecto__titulo { color: var(--ld-accent); }

.ld-proyecto__resumen {
	margin: 0.2rem 0 0;
	font-size: 0.88rem;
	font-weight: 300;
	line-height: 1.6;
	color: var(--ld-tinta-72);
}

/* Los tres datos que deciden una compra sobre plano. */
.ld-proyecto__datos {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(85px, 1fr));
	gap: 0.9rem;
	margin: 1rem 0 0;
	padding-top: 0.95rem;
	border-top: 1px solid color-mix(in srgb, var(--ld-ink) 12%, var(--ld-papel));
}

.ld-proyecto__datos div { min-width: 0; }

.ld-proyecto__datos dt {
	font-size: 0.6rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--ld-tinta-72);
}

.ld-proyecto__datos dd {
	margin: 0.3rem 0 0;
	font-family: var(--ld-display);
	font-size: 0.95rem;
	font-weight: 500;
	color: var(--ld-ink);
}

/* Desplegables de cualificacion del formulario general. */
.ld-form__campo--select select {
	width: 100%;
	min-height: 44px;
	padding: 0 2.2rem 0 0;
	border: 0;
	border-bottom: 1px solid color-mix(in srgb, var(--ld-ink) 24%, var(--ld-cream));
	border-radius: 0;
	background: transparent;
	font-family: var(--ld-body);
	font-size: 0.98rem;
	font-weight: 300;
	color: var(--ld-ink);
	appearance: none;
	-webkit-appearance: none;
	cursor: pointer;
}

.ld-form__campo--select { position: relative; }

.ld-form__campo--select::after {
	content: "";
	position: absolute;
	right: 0.35rem;
	bottom: 1.1rem;
	width: 7px; height: 7px;
	border-right: 1px solid var(--ld-tinta-52);
	border-bottom: 1px solid var(--ld-tinta-52);
	transform: rotate(45deg);
	pointer-events: none;
}

.ld-form__campo--select select:focus-visible {
	border-bottom-color: var(--ld-accent);
}

/* ------------------------------------------------------------------ */
/* Barra de aviso                                                      */
/* ------------------------------------------------------------------ */

/* Va fija encima de todo. La cabecera tambien es fija, asi que hay que
   bajarla su altura exacta o se solaparian. */
.ld-aviso {
	position: fixed;
	inset: 0 0 auto;
	z-index: 110;
	margin: 0;
	padding: 0.55rem 1rem;
	background: var(--ld-ink);
	color: color-mix(in srgb, var(--ld-cream) 88%, transparent);
	font-family: var(--ld-body);
	font-size: 0.68rem;
	font-weight: 300;
	letter-spacing: 0.14em;
	line-height: 1.4;
	text-align: center;
	text-transform: uppercase;
}

body.ld-con-aviso .ld-cabecera,
body.ld-con-aviso .ld-cabecera.e-con { top: 34px !important; }

body.ld-con-aviso .ld-header-nav .elementor-nav-menu--main > ul > li.ld-mega > .sub-menu { top: 118px !important; }
body.ld-con-aviso .ld-cabecera.is-fija .ld-header-nav .elementor-nav-menu--main > ul > li.ld-mega > .sub-menu { top: 102px !important; }

/* Sin hero oscuro el contenido ya reservaba el alto de la cabecera; con
   aviso hay que SUMARLE el suyo. Antes esta regla ponia 34px sueltos y
   pisaba los 84px de .ld-contenido, asi que con la barra de aviso puesta
   quedaba menos hueco que sin ella; y como tambien apuntaba al articulo,
   que vive dentro del main, el poco que quedaba se contaba dos veces. */
body.ld-con-aviso:not(.ld-tiene-hero) main.ld-contenido { padding-top: 118px; }

/* Con hero, la fotografia sube hasta debajo del aviso y la cabecera va
   encima: el texto del hero tiene que empezar por debajo de las dos. */
body.ld-con-aviso .ld-hero { padding-top: calc(8rem + 34px); }

@media (max-width: 767px) {
	/* 0.6rem son 9.6px: lo mas pequeno de todo el sitio, y va en versales
	   con interletrado ancho. En un telefono no se lee. */
	.ld-aviso { font-size: 0.68rem; letter-spacing: 0.09em; padding: 0.55rem 0.9rem; }
}

/* ------------------------------------------------------------------ */
/* Mapa de situacion                                                   */
/* ------------------------------------------------------------------ */

.ld-mapa-bloque { margin-top: clamp(3rem, 6vw, 5rem); }
.ld-mapa-bloque .ld-h2 { margin-bottom: 1.4rem; }

.ld-mapa {
	height: clamp(300px, 42vw, 460px);
	background: var(--ld-velo);
	border: 1px solid var(--ld-linea);
}

/* Leaflet trae su propia tipografia y sus enlaces en azul de fabrica. */
.ld-mapa .leaflet-container {
	font-family: var(--ld-body);
	background: var(--ld-velo);
}

.ld-mapa .leaflet-control-attribution {
	background: color-mix(in srgb, var(--ld-cream) 88%, transparent);
	font-size: 0.62rem;
	color: var(--ld-tinta-72);
}

.ld-mapa .leaflet-control-attribution a { color: var(--ld-ink); }

.ld-mapa .leaflet-control-zoom a {
	color: var(--ld-ink);
	background: var(--ld-cream);
	border-color: var(--ld-linea);
}

.ld-mapa__nota {
	margin: 0.9rem 0 0;
	font-size: 0.78rem;
	color: var(--ld-tinta-72);
}

/* ================================================================== */
/* 20. Pagina de contacto                                              */
/* ================================================================== */

/* La portada aqui no lleva foto de fondo propia del tema: la pone
   Elementor como fondo del contenedor, para que se cambie desde el
   constructor. Solo hace falta que el texto se lea encima. */
.ld-hero--contacto.e-con {
	background-color: var(--ld-ink);
	isolation: isolate;
}

.ld-hero--contacto .ld-hero__texto,
.ld-hero--contacto .ld-hero__texto .elementor-heading-title {
	max-width: 46ch;
	margin-top: 1.2rem;
	font-family: var(--ld-body);
	font-size: 1rem;
	font-weight: 300;
	line-height: 1.65;
	letter-spacing: 0;
	color: color-mix(in srgb, var(--ld-cream) 82%, transparent) !important;
}

/* --- Los tres datos ------------------------------------------------ */
.ld-contacto-datos.e-con {
	display: grid !important;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr));
	gap: clamp(2rem, 4vw, 3.5rem);
	align-items: start !important;
	padding-block: clamp(3.5rem, 7vw, 6rem);
}

.ld-contacto-col.e-con {
	display: flex !important;
	flex-direction: column !important;
	align-items: flex-start !important;
	gap: 0.35rem;
	padding-top: 1.1rem;
	border-top: 1px solid var(--ld-linea);
	width: auto !important;
}

.ld-contacto-col > .ld-over { margin-bottom: 0.5rem; }

.ld-dato-contacto,
.ld-dato-contacto p {
	margin: 0;
	font-size: 0.98rem;
	font-weight: 300;
	line-height: 1.6;
	color: var(--ld-tinta-72);
}

.ld-dato-contacto a {
	color: var(--ld-ink);
	text-decoration: none;
	border-bottom: 1px solid color-mix(in srgb, var(--ld-ink) 22%, transparent);
	transition: border-color var(--ld-t-rapida) var(--ld-ease);
}

.ld-dato-contacto a:hover { border-bottom-color: var(--ld-ink); }

/* --- La banda con la tarjeta flotando ------------------------------ */

/* La foto va a sangre y la tarjeta se apoya sobre ella, alineada a la
   derecha. Es la pieza que da caracter a la pagina. */
/* Trampa de siempre: el contenedor de Elementor apila en COLUMNA, asi
   que centrar en vertical es `justify-content`, no `align-items`. Con
   align-items la tarjeta se quedaba arriba. */
.ld-banda-foto.e-con {
	display: flex !important;
	flex-direction: column !important;
	justify-content: center !important;
	align-items: stretch !important;
	background-color: var(--ld-ink);
	padding-block: clamp(3rem, 6vw, 5rem) !important;
}

.ld-banda-foto__inner.e-con {
	display: flex !important;
	flex-direction: row !important;
	justify-content: flex-end !important;
	align-items: center !important;
}

.ld-tarjeta-flotante.e-con {
	display: flex !important;
	flex-direction: column !important;
	align-items: center !important;
	gap: 1.4rem;
	width: min(460px, 100%) !important;
	flex: 0 0 auto !important;
	padding: clamp(2.4rem, 4vw, 3.4rem) clamp(2rem, 3.5vw, 3rem);
	background: var(--ld-cream);
	text-align: center;
	box-shadow: 0 30px 70px -40px rgb(10 39 64 / 45%);
}

.ld-tarjeta-flotante__marca .ld-marca__img { max-height: 46px; margin-inline: auto; }

/* Dentro de la tarjeta el fondo es claro: manda la version azul. */
.ld-tarjeta-flotante .ld-marca__img--claro { display: none; }
.ld-tarjeta-flotante .ld-marca__img--oscuro { position: static; opacity: 1; }

.ld-tarjeta-flotante__texto,
.ld-tarjeta-flotante__texto p {
	margin: 0;
	font-size: 0.95rem;
	font-weight: 300;
	line-height: 1.7;
	color: var(--ld-tinta-72);
}

/* Boton de contorno, como el "INQUIRE" de la referencia. */
.ld-banda-foto .ld-boton--contorno .elementor-button {
	background: transparent !important;
	color: var(--ld-ink) !important;
	border: 1px solid color-mix(in srgb, var(--ld-ink) 34%, transparent) !important;
}

.ld-banda-foto .ld-boton--contorno .elementor-button:hover {
	background: var(--ld-ink) !important;
	color: var(--ld-cream) !important;
	border-color: var(--ld-ink) !important;
}

/* --- El formulario -------------------------------------------------- */
/*
 * El formulario se planta en 720px. Alineado a la izquierda de una
 * seccion de 1184, dejaba media pagina en blanco a la derecha y la
 * pantalla se veia descuadrada. Se centra el bloque entero -rotulo,
 * entradilla y formulario- sobre un mismo eje; el texto de dentro sigue
 * alineado a la izquierda.
 */
.ld-contacto-forma.e-con {
	display: flex !important;
	flex-direction: column !important;
	align-items: center !important;
	padding-block: clamp(3.5rem, 7vw, 6rem);
	scroll-margin-top: 120px;
}

/* Elementor acota sus widgets con `.elementor.elementor .e-con > .elementor-widget`,
   que por especificidad le gana a una clase nuestra: hay que repetir la
   raiz para empatarle y pasarle por delante. */
.elementor.elementor .ld-contacto-forma.e-con > .elementor-widget {
	width: 100%;
	max-width: 720px;
}

.ld-contacto-forma__entrada,
.ld-contacto-forma__entrada .elementor-heading-title {
	max-width: 60ch;
	margin: 0.6rem 0 0;
	font-family: var(--ld-body);
	font-size: 1rem;
	font-weight: 300;
	line-height: 1.65;
	letter-spacing: 0;
	color: var(--ld-tinta-72) !important;
}

.ld-contacto-forma .elementor-widget-lducos-contacto { width: 100%; margin-top: 2.2rem; }
.ld-contacto-forma .ld-contacto { max-width: 720px; }

@media (max-width: 900px) {
	.ld-banda-foto__inner.e-con { justify-content: center !important; }
	.ld-tarjeta-flotante.e-con { width: 100% !important; }
}

/* ------------------------------------------------------------------ */
/* Zonas y tipologias todavia sin propiedades                          */
/* ------------------------------------------------------------------ */

/* El mega menu enlaza las doce zonas de Cap Cana, y varias aun no tienen
   inventario. Un «no hay nada» a secas es un callejon sin salida: se le
   dan dos salidas. */
.ld-vacio {
	margin: clamp(2rem, 4vw, 3rem) 0 0;
	padding: clamp(2rem, 4vw, 3rem);
	background: var(--ld-cream);
	border: 1px solid color-mix(in srgb, var(--ld-ink) 12%, var(--ld-cream));
	font-size: 1rem;
	font-weight: 300;
	color: var(--ld-tinta-72);
	text-align: center;
}

.ld-vacio__acciones {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.7rem;
	margin-top: 1.4rem;
}

.ld-vacio__acciones .ld-boton { min-height: 46px; border-radius: 999px; }

/* ------------------------------------------------------------------ */
/* Medida minima del dedo                                              */
/* ------------------------------------------------------------------ */

/*
 * En pantalla tactil todo lo que se pulsa necesita 44px de lado. Con el
 * raton basta menos, asi que esto va solo donde importa y no engorda el
 * diseno en escritorio. Se dejan fuera las migas de pan: alli el enlace
 * es texto corrido y agrandarlo lo convertiria en un boton que no es.
 */
@media (max-width: 1024px) {
	.ld-pestana {
		min-height: 44px;
		padding-block: 0.75em !important;
	}

	.ld-card__guardar {
		width: 44px;
		height: 44px;
	}

	.ld-cabecera .elementor-button { min-height: 44px; }

	/*
	 * Telefono y correo del pie: eran renglones de 23px. El alto lo tiene
	 * que llevar el ENLACE, no el <li>: la fila alineada arriba (para que
	 * el icono cuadre con la primera linea de la direccion) dejaba el
	 * enlace pegado al texto, sin estirarse.
	 */
	.ld-pie__datos .elementor-icon-list-item {
		min-height: 44px;
		padding-block: 0;
	}

	.ld-pie__datos .elementor-icon-list-item > a {
		display: flex;
		align-self: stretch;
		align-items: flex-start;
		width: 100%;
		padding-block: 0.62rem;
	}

	/*
	 * iOS amplia la pagina entera al tocar un campo cuyo texto mide menos
	 * de 16px, y deja al visitante teniendo que alejarla a dos dedos. Con
	 * 16 exactos no hay salto. Era el fallo movil mas molesto que quedaba:
	 * lo sufria cualquiera que filtrase o escribiera una consulta.
	 */
	.ld-form__campo input,
	.ld-form__campo textarea,
	.ld-form__campo select,
	.ld-filtro input,
	.ld-filtro select,
	.ld-filtro--texto input,
	.ld-resultados__orden select,
	.ld-buscador-simple input,
	.elementor .elementor-field-textual {
		font-size: 16px;
	}

	/* Ver guardadas: se quedaba en 41px. */
	.ld-resultados__guardadas { min-height: 44px; }

	/* Las zonas de "Vivir en Cap Cana" son una lista de enlaces-pastilla
	   que se pulsan con el pulgar, no texto corrido. */
	.ld-fichas-enlace a {
		min-height: 44px;
		padding-block: 0.7rem;
	}

	/* Telefono, correo y WhatsApp de la columna de contacto: eran enlaces
	   en linea de 23px de alto, la mitad de lo que abarca un dedo. */
	.ld-contacto-col p a {
		display: inline-flex;
		align-items: center;
		min-height: 44px;
	}

	/* El boton de la tarjeta flotante se quedaba fuera de la regla que
	   da 48px a los botones de cabecera, pie y ficha. */
	.ld-tarjeta-flotante .elementor-button { min-height: 44px; }

	/* Los botones de zoom de Leaflet vienen a 30px de fabrica. Con el mapa
	   pidiendo dos dedos para moverse, son la unica manera de acercar con
	   un solo dedo: tienen que poder pulsarse. */
	/* Leaflet los fija con `.leaflet-touch .leaflet-bar a`, que empata en
	   especificidad con una clase nuestra y ademas se imprime despues:
	   hay que nombrar tambien la clase del boton para pasarle por delante. */
	.ld-mapa .leaflet-control-zoom a.leaflet-control-zoom-in,
	.ld-mapa .leaflet-control-zoom a.leaflet-control-zoom-out {
		width: 44px;
		height: 44px;
		line-height: 44px;
		font-size: 1.35rem;
	}
}

/* ------------------------------------------------------------------ */
/* Pantallas muy estrechas                                             */
/* ------------------------------------------------------------------ */

/*
 * En pantallas de 320px el logotipo a tamano normal deja al hamburguesa
 * sin sitio comodo. La regla que ademas escondia la llamada a la accion
 * de la cabecera se retiro al quitarse ese boton del encabezado.
 */
@media (max-width: 360px) {
	.ld-cabecera .ld-marca__img,
	.ld-cabecera__marca .custom-logo-link img { max-height: 28px; }
}

/* ------------------------------------------------------------------ */
/* Impresion                                                           */
/* ------------------------------------------------------------------ */

/*
 * Una ficha de propiedad se imprime y se guarda en PDF constantemente:
 * es lo que el comprador ensena a su pareja y lo que el abogado archiva.
 * En papel no hay menus, ni hover, ni fondos oscuros que gastar tinta.
 */
@media print {
	@page { margin: 16mm; }

	/* 1. Fuera lo que en un papel no se puede pulsar. */
	.ld-aviso,
	.ld-cabecera .ld-header-nav,
	.ld-cabecera .elementor-widget-button,
	.elementor-menu-toggle,
	.ld-wa-flotante,
	.ld-pie__cta,
	.ld-pie .ld-footer-nav,
	.ld-filtros-caja,
	.ld-resultados,
	.ld-paginacion,
	.ld-card__guardar,
	.ld-visor,
	.ld-mapa-bloque,
	.ld-relacionadas,
	.ld-prop__lateral,
	.ld-vacio__acciones,
	.ld-saltar { display: none !important; }

	/* 2. Tinta: fondo blanco y texto negro, tambien donde la pantalla iba
	   en azul. Un pie en azul marino a sangre se come un cartucho. */
	html,
	body,
	.ld-pie,
	.ld-pie__bottom {
		background: #fff !important;
		color: #000 !important;
	}

	.ld-pie a,
	.ld-pie .elementor-heading-title,
	.ld-pie__rotulo,
	.ld-pie__copy,
	.ld-pie__lugar { color: #000 !important; }

	/* 3. La cabecera deja de flotar y se queda de membrete. */
	.ld-cabecera,
	.ld-cabecera.e-con {
		position: static !important;
		background: #fff !important;
		box-shadow: none !important;
		backdrop-filter: none !important;
		-webkit-backdrop-filter: none !important;
	}

	/* De las dos versiones del logotipo, en papel manda la oscura. */
	.ld-marca__img--claro { display: none !important; }

	.ld-marca__img--oscuro {
		position: static !important;
		opacity: 1 !important;
	}

	/* 4. El hero deja de ser un lienzo: la foto arriba y el titulo debajo,
	   en negro. En pantalla el texto va en blanco sobre la fotografia, y
	   muchas impresoras no imprimen fondos: saldria una hoja en blanco. */
	.ld-hero,
	.ld-prop-hero {
		display: block !important;
		height: auto !important;
		min-height: 0 !important;
		color: #000 !important;
	}

	.ld-hero__scrim,
	.ld-prop-hero__scrim { display: none !important; }

	.ld-hero__media,
	.ld-prop-hero__media {
		position: static !important;
		height: auto !important;
	}

	.ld-hero__media img,
	.ld-prop-hero__media img {
		max-height: 90mm;
		object-fit: cover;
	}

	.ld-hero__inner,
	.ld-prop-hero__inner {
		position: static !important;
		padding: 6mm 0 0 !important;
		color: #000 !important;
	}

	/* El azul del hero es fondo del contenedor: sin quitarlo salia una
	   plancha de tinta a pagina completa detras de la fotografia. */
	.ld-hero,
	.ld-prop-hero,
	.ld-hero__inner,
	.ld-prop-hero__inner,
	.ld-hero__media,
	.ld-prop-hero__media { background: #fff !important; }

	/* Un boton en un papel no lleva a ninguna parte. */
	.ld-hero .elementor-button,
	.ld-prop-hero .elementor-button { display: none !important; }

	/* Sin la columna del formulario, la rejilla de la ficha deja de tener
	   dos columnas: si no, reserva el hueco y salen medias hojas vacias. */
	.ld-prop__grid,
	.ld-prop__grid.e-con {
		display: block !important;
	}

	/* En pantalla cada seccion respira 115px por arriba y otros tantos por
	   abajo. En una hoja eso es un tercio de pagina en blanco entre el
	   numero de referencia y la descripcion. */
	/* Elementor escribe el relleno de cada contenedor con un selector de
	   tres clases; hay que repetir la raiz para pasarle por delante. */
	.elementor.elementor .ld-prop__grid.e-con,
	.elementor.elementor .ld-prop__principal.e-con,
	.elementor.elementor .ld-catalogo.e-con,
	.ld-seccion,
	.ld-relacionadas { padding-block: 6mm !important; }

	/* Del pie solo interesan la marca y como llamar; los menus, no. */
	.ld-pie__col:not(.ld-pie__marca):not(.ld-pie__contacto) { display: none !important; }

	/* El telefono y el correo iban en marfil sobre azul: en blanco sobre
	   blanco desaparecian y la hoja salia sin manera de contactar. */
	.ld-pie__datos .elementor-icon-list-text,
	.ld-pie__datos .elementor-icon-list-icon,
	.ld-pie__datos .elementor-icon-list-icon i,
	.ld-pie__datos .elementor-icon-list-icon svg,
	.ld-pie__puesto,
	.ld-pie__texto {
		color: #000 !important;
		fill: #000 !important;
	}

	.ld-hero h1,
	.ld-prop-hero h1,
	.ld-hero .ld-over,
	.ld-prop-hero .ld-over,
	.ld-prop-hero__precio,
	.ld-prop-hero__precio .elementor-heading-title,
	.ld-hero .elementor-heading-title,
	.ld-prop-hero .elementor-heading-title { color: #000 !important; }

	/* 5. Nada se parte a la mitad entre dos hojas. */
	.ld-specs,
	.ld-card,
	.ld-proyecto,
	.ld-datos-widget,
	figure,
	img {
		break-inside: avoid;
		page-break-inside: avoid;
	}

	h1, h2, h3 {
		break-after: avoid;
		page-break-after: avoid;
	}

	/*
	 * 6. Los revelados de scroll no han llegado a dispararse cuando se
	 * manda a imprimir, y lo que no se ha revelado esta a opacidad 0: sin
	 * esto se imprimen hojas con huecos en blanco.
	 */
	.ld-motion [data-ld-reveal] { opacity: 1 !important; transform: none !important; }
	.ld-motion [data-ld-clip] { clip-path: none !important; }

	/* Las miniaturas de la galeria son botones; en papel son fotos. */
	.ld-mosaico__item {
		border: 0 !important;
		background: none !important;
	}
}

/* ------------------------------------------------------------------ */
/* Paginas montadas con Elementor                                      */
/* ------------------------------------------------------------------ */

/*
 * Las paginas de seccion (inicio, proyectos, vivir en Cap Cana) pasaron
 * del editor de HTML al constructor. La maqueta es la misma que escribia
 * page.php; lo que cambia es que ahora cada parrafo es un widget. Estas
 * reglas le devuelven a los contenedores de Elementor lo que las clases
 * del tema daban por sentado: el ancho de lectura, el degradado del hero
 * y los rellenos que `.e-con` pisa por especificidad.
 */

/* Columna de lectura. `.ld-contenedor.e-con` fija el ancho grande con
   !important, asi que hay que ganarle con una clase mas. */
.ld-contenedor.ld-prosa.e-con {
	/* Lo mismo que hacian juntas `.ld-contenedor` y `.ld-prosa` sobre el
	   <div> del tema: ancho de lectura, centrado y sin relleno propio. El
	   relleno lateral que anade `.ld-contenedor.e-con` estrechaba el texto
	   dos gutters mas de la cuenta. */
	width: min(100% - (var(--ld-gutter) * 2), var(--ld-ancho-texto)) !important;
	max-width: none !important;
	padding-inline: 0 !important;
	margin-inline: auto !important;
	display: block;
}

/* Dentro del constructor el hero no puede llevar el <div> del degradado:
   se pinta con un pseudoelemento sobre la imagen de fondo del contenedor. */
.ld-hero--el { position: relative; }

.ld-hero--el::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	/*
	 * Dos capas, como en la portada de una ficha: la diagonal oscurece el
	 * lado por donde entra el texto y la vertical asienta el titular. Con
	 * solo la vertical, un cielo claro arriba a la derecha se comia el
	 * menu y la frase de entrada cruzaba una franja blanca.
	 */
	background:
		linear-gradient(100deg, rgb(11 32 39 / 62%) 0%, rgb(11 32 39 / 20%) 55%, rgb(11 32 39 / 0%) 85%),
		linear-gradient(180deg, rgb(11 32 39 / 58%) 0%, rgb(11 32 39 / 18%) 34%, rgb(11 32 39 / 88%) 100%);
	pointer-events: none;
}

.elementor.elementor .ld-hero--el.e-con {
	align-items: flex-end;
	padding-inline: 0;
}

/* Bloques y cajas: el relleno y el fondo son del tema, no del widget. */
.elementor.elementor .ld-cierre.e-con {
	display: block;
	padding: clamp(2.4rem, 5vw, 4rem);
}

.elementor.elementor .ld-destacado.e-con {
	display: block;
	padding: clamp(1.6rem, 3vw, 2.4rem);
}

.elementor.elementor .ld-bloque.e-con {
	display: block;
	padding: 0;
}

/* Los widgets de texto traen su propio margen inferior; los parrafos del
   tema ya lo tenian. Sin esto cada parrafo sumaba los dos y la pagina
   crecia un tercio. */
.ld-prosa .elementor-widget:not(:last-child) { margin-block-end: 0; }
.ld-prosa .elementor-widget-text-editor p:last-child { margin-bottom: 0; }
.ld-prosa .elementor-widget + .elementor-widget { margin-top: 1.25em; }
.ld-prosa .elementor-widget-heading + .elementor-widget-heading { margin-top: 0.35em; }

/* `.ld-ancho` saca un bloque de la columna de lectura. Dentro del
   constructor pierde: Elementor fija el ancho de sus widgets con
   `.elementor .e-con > .elementor-widget`, tres clases contra las dos de
   la regla del tema, y la rejilla de proyectos se quedaba a una columna
   dentro de los 68 caracteres del texto. */
.elementor.elementor .ld-prosa .ld-ancho {
	width: min(var(--ld-ancho), calc(100vw - var(--ld-gutter) * 2)) !important;
	max-width: none !important;
	margin-inline: calc(50% - min(var(--ld-ancho), calc(100vw - var(--ld-gutter) * 2)) / 2) !important;
}

/* ------------------------------------------------------------------ */
/* Listas y botones montados con contenedores de Elementor             */
/* ------------------------------------------------------------------ */

/*
 * Las tarjetas de las paginas dejaron de ser un <ul> escrito a mano para
 * ser contenedores y widgets, y asi poder editarse una a una desde el
 * constructor. El aspecto es el mismo: las reglas de arriba ya aceptan
 * las dos marcas. Aqui solo se deshace lo que `.e-con` impone por
 * especificidad -flex, rellenos y anchos- sobre las clases del tema.
 */

.elementor.elementor .ld-apuntes.e-con {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
	gap: clamp(1.6rem, 3vw, 2.6rem);
	padding: 0;
	margin: 2.2rem 0 0;
}

.elementor.elementor .ld-apuntes.e-con > .e-con {
	display: block;
	width: auto;
	padding: 1.1rem 0 0;
}

.elementor.elementor .ld-apuntes--fotos.e-con > .e-con { padding: 0; }

/* El widget de imagen envuelve la foto en un <figure> con margen propio. */
.ld-apuntes--fotos figure,
.ld-apuntes--fotos .elementor-widget-image { margin: 0; }

.elementor.elementor .ld-datos.e-con {
	display: block;
	padding: 0;
	margin: 1.8rem 0 0;
}

.elementor.elementor .ld-datos.e-con > .e-con { width: auto; display: block; }

.elementor.elementor .ld-fichas-enlace.e-con {
	display: flex;
	/* En columna -el reparto por defecto de un contenedor de Elementor-
	   las doce pastillas de zona salian apiladas una encima de otra. */
	flex-direction: row;
	align-items: flex-start;
	flex-wrap: wrap;
	gap: 0.6rem;
	padding: 0;
	margin: 1.6rem 0 0;
}

.elementor.elementor .ld-fichas-enlace.e-con > .elementor-widget { width: auto; margin: 0; }

/* Fila de botones del cierre de pagina. */
.elementor.elementor .ld-acciones.e-con {
	display: flex;
	/* Los contenedores de Elementor apilan en columna por defecto y los
	   dos botones del cierre salian uno debajo del otro. */
	flex-direction: row;
	align-items: center;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.8rem;
	margin-top: 1.8rem;
	padding: 0;
}

.elementor.elementor .ld-acciones.e-con > .elementor-widget { width: auto; margin: 0; }

/* Elementor pinta sus botones con el color y el radio del kit; el del
   tema los quiere en pastilla, en versales y con el relleno que sube. */
.elementor.elementor .ld-btn .elementor-button,
.elementor.elementor .ld-pastilla .elementor-button {
	background-image: none;
	box-shadow: none;
	line-height: 1.2;
}

.elementor.elementor .ld-btn .elementor-button-content-wrapper,
.elementor.elementor .ld-pastilla .elementor-button-content-wrapper {
	position: relative;
	z-index: 1;
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 0.6em;
}

/* La pastilla de zona es mas baja que un boton: ni 48px de alto ni
   versales, que en doce enclaves seguidos gritaba. */
.elementor.elementor .ld-pastilla .elementor-button {
	min-height: 0;
	font-weight: 400;
	letter-spacing: normal;
	text-transform: none;
	overflow: visible;
	/* La pastilla es un contorno, no un boton relleno: sin esto se queda
	   con el azul de acento que Elementor da a sus botones por defecto, y
	   el texto -que va en tinta, tambien azul- desaparecia dentro. */
	background-color: transparent;
}

/* Los titulos de tarjeta eran un <strong> dentro del <li>. Ahora son
   widgets de encabezado, y el <h3> que pintan arrastra las versales y el
   peso de la escala de titulares del sitio: "Who is building it" salia
   como "WHO IS BUILDING IT". Aqui se le devuelve el aspecto que tenia. */
.ld-apunte__titulo .elementor-heading-title,
.ld-dato__titulo .elementor-heading-title {
	margin: 0;
	font-weight: 500;
	line-height: 1.35;
	letter-spacing: -0.015em;
	text-transform: none;
}

.ld-apuntes .ld-apunte__titulo .elementor-heading-title { font-size: 1.1rem; color: var(--ld-ink); }
.ld-datos .ld-dato__titulo .elementor-heading-title { font-size: 1.05rem; color: var(--ld-ink); }

.ld-apunte__titulo a { color: inherit; text-decoration: none; }
.ld-apunte__titulo a:hover { color: var(--ld-accent); }

/* El widget de texto envuelve el parrafo; el <span> de antes no tenia
   margenes. */
.ld-apunte__texto p:last-child { margin-bottom: 0; }

/* ------------------------------------------------------------------ */
/* Guia de enclaves                                                    */
/* ------------------------------------------------------------------ */

/*
 * Doce nombres sueltos no ayudaban a elegir, y siete de ellos llevaban a
 * una pagina vacia mientras las zonas con mas cartera ni salian. Ahora
 * cada enclave se ve: una foto de lo que hay dentro y cuanto hay.
 */
.ld-zonas {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 230px), 1fr));
	gap: clamp(1rem, 2vw, 1.6rem);
	margin-top: 2rem;
}

.ld-zona {
	display: block;
	text-decoration: none;
	color: inherit;
	background: var(--ld-blanco);
	border: 1px solid var(--ld-linea);
	overflow: hidden;
	transition: border-color var(--ld-t-media) var(--ld-ease),
		box-shadow var(--ld-t-media) var(--ld-ease),
		transform var(--ld-t-media) var(--ld-ease);
}

.ld-zona:hover,
.ld-zona:focus-visible {
	border-color: var(--ld-ink);
	box-shadow: 0 14px 34px rgb(11 32 39 / 10%);
	transform: translateY(-3px);
}

.ld-zona__media {
	display: block;
	aspect-ratio: 4 / 3;
	overflow: hidden;
	background: var(--ld-cream);
}

.ld-zona__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 700ms var(--ld-ease);
}

.ld-zona:hover .ld-zona__media img { transform: scale(1.05); }

.ld-zona__cuerpo { display: block; padding: 0.95rem 1.1rem 1.15rem; }

.ld-zona__nombre {
	display: block;
	font-family: var(--ld-display);
	font-size: 1.02rem;
	font-weight: 500;
	letter-spacing: -0.015em;
	color: var(--ld-ink);
}

.ld-zona__cuenta {
	display: block;
	margin-top: 0.2rem;
	font-size: 0.8rem;
	color: var(--ld-tinta-38);
}

/* ------------------------------------------------------------------ */
/* Banda de cifras montada con contenedores                            */
/* ------------------------------------------------------------------ */

/* La misma franja que abre una ficha, pero escrita desde el constructor:
   un contenedor por dato, con su cifra y su rotulo. */
.elementor.elementor .ld-fichas.e-con {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
	padding: 0;
}

.elementor.elementor .ld-fichas.e-con > .ld-ficha-dato.e-con {
	display: block;
	width: auto;
	padding: clamp(1.4rem, 2.6vw, 2.2rem) clamp(0.9rem, 2vw, 1.6rem);
}

.ld-ficha-dato .ld-ficha-dato__valor .elementor-heading-title,
.ld-ficha-dato .ld-ficha-dato__etiqueta .elementor-heading-title { margin: 0; }

/* ------------------------------------------------------------------ */
/* Cita destacada                                                      */
/* ------------------------------------------------------------------ */

/* Un parrafo que merece leerse dos veces. Rompe el muro de texto y da
   sitio a la voz de la agente, que es lo que diferencia la pagina. */
.ld-cita {
	margin: clamp(2rem, 4vw, 3rem) 0;
	padding-left: clamp(1.2rem, 3vw, 2rem);
	border-left: 2px solid var(--ld-accent);
}

.ld-cita p,
.ld-cita .elementor-widget-container p {
	margin: 0;
	font-family: var(--ld-display);
	font-size: clamp(1.2rem, 1.02rem + 0.8vw, 1.6rem);
	font-weight: 300;
	line-height: 1.38;
	letter-spacing: -0.012em;
	color: var(--ld-ink);
}

.ld-cita__firma,
.ld-cita__firma .elementor-heading-title {
	margin-top: 0.9rem;
	font-size: 0.68rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--ld-tinta-38);
}

/* ------------------------------------------------------------------ */
/* Preguntas frecuentes                                                */
/* ------------------------------------------------------------------ */

/* Sin plegar: quien duda no hace clic para descubrir si le contestan, y
   una respuesta escondida no la lee ni Google. */
.elementor.elementor .ld-faq.e-con {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr));
	gap: 0 clamp(1.8rem, 4vw, 3.5rem);
	padding: 0;
	margin-top: 2rem;
}

.elementor.elementor .ld-faq.e-con > .e-con {
	display: block;
	width: auto;
	padding: 1.2rem 0;
	border-top: 1px solid var(--ld-linea);
}

.ld-faq__p .elementor-heading-title {
	margin: 0 0 0.4rem;
	font-size: 1rem;
	font-weight: 500;
	line-height: 1.35;
	letter-spacing: -0.015em;
	text-transform: none;
	color: var(--ld-ink);
}

.ld-faq__r { color: var(--ld-tinta-72); font-size: 0.94rem; line-height: 1.65; }
.ld-faq__r p:last-child { margin-bottom: 0; }

/* ------------------------------------------------------------------ */
/* Acciones dentro de un hero                                          */
/* ------------------------------------------------------------------ */

.elementor.elementor .ld-hero__acciones.e-con {
	display: flex;
	flex-direction: row;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.8rem;
	margin-top: 1.8rem;
	padding: 0;
}

.elementor.elementor .ld-hero__acciones.e-con > .elementor-widget { width: auto; margin: 0; }

/* Sobre una fotografia, el relleno del boton sube en blanco: el azul de
   marca sobre una foto oscura no se distingue del fondo. */
.elementor.elementor .ld-hero .ld-btn--acento .elementor-button::before,
.elementor.elementor .ld-prop-hero .ld-btn--acento .elementor-button::before { background: var(--ld-blanco); }
.elementor.elementor .ld-hero .ld-btn--acento .elementor-button:hover,
.elementor.elementor .ld-prop-hero .ld-btn--acento .elementor-button:hover { color: var(--ld-ink); }

/* La frase de entrada del hero es un widget de texto, y Elementor da el
   100% de ancho a todos los suyos con tres clases: la linea se iba a 130
   caracteres, el doble de lo que se lee de un tiron. */
.elementor.elementor .ld-hero__texto { max-width: 52ch !important; }
.ld-hero__texto p:last-child { margin-bottom: 0; }

/* ------------------------------------------------------------------ */
/* Trama de marca sobre los fondos azules                              */
/* ------------------------------------------------------------------ */

/*
 * El isotipo repetido al tresbolillo, casi invisible. Un azul plano de
 * cuatro metros de alto no dice nada; con la trama la marca esta presente
 * sin que nadie tenga que leerla.
 *
 * El degradado no es solo decorativo: mantiene la trama en los margenes y
 * la quita del centro, que es por donde pasa el texto. A la primera la
 * puse al 8.5% y de lado a lado, y las letras del parrafo del cierre
 * cruzaban justo por encima de un isotipo.
 *
 * Va solo en el pie. `ld-trama` es una clase suelta: se puede anadir a
 * cualquier contenedor desde Elementor, pero no se aplica sola a nada.
 */
.ld-trama {
	position: relative;
	isolation: isolate;
}

.ld-trama::before {
	content: "";
	position: absolute;
	inset: 0;
	/* Debajo del texto y encima del fondo de la seccion: por eso el
	   aislamiento de arriba, que impide que el -1 se escape detras. */
	z-index: -1;
	background-image: url("../img/trama-ld.png");
	background-repeat: repeat;
	background-size: clamp(240px, 22vw, 400px);
	opacity: 0.045;
	pointer-events: none;
}

/* Con el texto centrado, la trama vive en los dos margenes. */
.ld-trama::before {
	-webkit-mask-image: linear-gradient(100deg, #000 0%, transparent 32%, transparent 68%, #000 100%);
	mask-image: linear-gradient(100deg, #000 0%, transparent 32%, transparent 68%, #000 100%);
}

/* Sobre marfil la trama tendria que ir en tinta, no en blanco. */
.ld-trama--tinta::before {
	opacity: 0.04;
	filter: invert(1);
}

@media print {
	.ld-trama::before { display: none !important; }
}

/* --- Variantes de la trama ------------------------------------------ */

/* Mas marcas y mas pequenas: para bloques anchos y bajos, como el pie,
   donde la baldosa grande solo dejaba ver dos isotipos y medio. */
.ld-trama--densa::before {
	background-size: clamp(150px, 12vw, 230px);
	opacity: 0.08;
	-webkit-mask-image: linear-gradient(115deg, transparent 0%, #000 30%, #000 66%, transparent 96%);
	mask-image: linear-gradient(115deg, transparent 0%, #000 30%, #000 66%, transparent 96%);
}

/*
 * Sobre una fotografia la trama compite con la imagen, asi que sube un
 * punto y se coloca en el lado contrario al texto. Y va por ENCIMA del
 * degradado del hero: debajo, un scrim al 88% se la comia entera.
 */
.ld-trama--foto::before {
	z-index: 0;
	opacity: 0.07;
	background-size: clamp(200px, 17vw, 320px);
	-webkit-mask-image: linear-gradient(100deg, transparent 0%, transparent 40%, #000 76%);
	mask-image: linear-gradient(100deg, transparent 0%, transparent 40%, #000 76%);
}

/* El contenido del hero ya va en z-index 1; el rotulo y el titulo se
   quedan por delante de la trama. */
.ld-trama--foto > .ld-hero__inner,
.ld-trama--foto > .ld-prop-hero__inner { position: relative; z-index: 1; }

/*
 * Una sola marca en una esquina, no un mosaico.
 *
 * El isotipo repetido llenaba el pie y se leia como un estampado, que era
 * justo lo contrario de lo que tenia que hacer. Una marca grande, recortada
 * por la esquina de abajo a la derecha, firma el bloque sin competir con
 * los enlaces.
 */
.ld-trama--marca::before {
	background-image: url("../img/marca-ld.png");
	background-repeat: no-repeat;
	/* Entera y apoyada en la esquina de abajo a la izquierda, con su
	   margen: recortada por el borde dejaba de leerse como la marca. */
	background-position: left 44px bottom 38px;
	background-size: clamp(190px, 21vw, 310px) auto;
	opacity: 0.1;
	-webkit-mask-image: none;
	mask-image: none;
}

/* ================================================================== */
/* Portada                                                            */
/* ================================================================== */

/*
 * Piezas propias de la home. Todas se montan con contenedores y widgets
 * de Elementor; aqui solo esta el aspecto, para que la maqueta se siga
 * editando desde el constructor.
 */

/* El titular de portada pide mas cuerpo y menos peso que el de una
   seccion: a este tamano el trazo de 200 luce y el de 300 engorda. */
.ld-display--xl {
	font-size: clamp(2.4rem, 1.1rem + 4.4vw, 5.1rem);
	font-weight: 200;
	line-height: 1.02;
	letter-spacing: 0.01em;
	max-width: 17ch;
}

/* --- Dos caminos: terminado o sobre plano --------------------------- */

/* Un hilo de 1px hace de separador entre las dos columnas: con `gap`
   sobre el fondo de la linea se dibuja solo, sin bordes que doblar. */
.elementor.elementor .ld-caminos.e-con {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr));
	gap: 1px;
	padding: 0;
	background: var(--ld-linea);
	margin-top: 2.4rem;
}

.elementor.elementor .ld-camino.e-con {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 0.7rem;
	width: auto;
	padding: clamp(2rem, 4vw, 3.2rem);
	background: var(--ld-cream);
	transition: background var(--ld-t-media) var(--ld-ease);
}

.elementor.elementor .ld-camino.e-con:hover { background: var(--ld-blanco); }

.ld-camino__n {
	font-family: var(--ld-display);
	font-size: clamp(2rem, 1.4rem + 2vw, 2.8rem);
	font-weight: 200;
	line-height: 1;
	letter-spacing: 0;
	text-transform: none;
	color: var(--ld-accent);
	font-variant-numeric: tabular-nums;
}

.ld-camino__t {
	font-size: 1.32rem;
	font-weight: 300;
	line-height: 1.2;
	color: var(--ld-ink);
}

.ld-camino__mas {
	font-size: 0.66rem;
	font-weight: 400;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--ld-ink);
}

.ld-camino__mas a { text-decoration: none; color: inherit; }
.ld-camino__mas a:hover { color: var(--ld-accent); }

/* --- Banda de fuera de mercado -------------------------------------- */

/* Es el unico bloque bravo de la pagina: azul a sangre, el isotipo
   saliendose por la esquina y una sola linea muy grande. Todo lo demas
   se queda callado para que esto suene. */
.elementor.elementor .ld-fuera.e-con {
	position: relative;
	display: block;
	padding-block: clamp(4.5rem, 10vw, 8.5rem);
	background: var(--ld-ink);
	color: var(--ld-cream);
	overflow: hidden;
	isolation: isolate;
}

.ld-fuera { --ld-deriva: 0px; }

.ld-fuera::before {
	content: "";
	position: absolute;
	/* La variable la mueve GSAP con el scroll; sin motion se queda en 0
	   y la marca no se entera. */
	transform: translateY(var(--ld-deriva));
	will-change: transform;
	/* Elementor deja un `inset: 0` en el ::before de sus contenedores y
	   el `left: 0` ganaba: la marca se pegaba al borde izquierdo. */
	top: auto;
	left: auto;
	right: -3%;
	bottom: -8%;
	z-index: -1;
	width: min(42%, 500px);
	aspect-ratio: 640 / 510;
	background: url("../img/marca-ld.png") no-repeat center / contain;
	opacity: 0.1;
	pointer-events: none;
}

.ld-fuera__h {
	/* En versales, como el resto de los titulares del sitio: al heredar
	   del envoltorio el <h2> perdia el text-transform global. */
	text-transform: uppercase;
	letter-spacing: 0.012em;
	max-width: 19ch;
	font-size: clamp(1.9rem, 1rem + 3.4vw, 3.9rem);
	font-weight: 200;
	line-height: 1.06;
	color: var(--ld-blanco);
}

.ld-fuera__p { max-width: 46ch; color: color-mix(in srgb, var(--ld-cream) 78%, transparent); }
.ld-fuera .ld-over { color: color-mix(in srgb, var(--ld-cream) 70%, transparent); }

/* --- Banda partida: foto y texto ------------------------------------ */
.elementor.elementor .ld-duo.e-con {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr));
	align-items: stretch;
	gap: 0;
	padding: 0;
}

.elementor.elementor .ld-duo__foto.e-con { padding: 0; width: auto; min-height: 340px; }
.ld-duo__foto .elementor-widget-image,
.ld-duo__foto .elementor-widget-image > .elementor-widget-container { height: 100%; padding: 0; }
.ld-duo__foto img { width: 100%; height: 100%; object-fit: cover; display: block; }

.elementor.elementor .ld-duo__texto.e-con {
	display: flex;
	flex-direction: column;
	justify-content: center;
	align-items: flex-start;
	gap: 1rem;
	width: auto;
	padding: clamp(2.4rem, 6vw, 5rem);
	background: var(--ld-cream);
}

/* Los tres datos de la banda, en una linea. */
.elementor.elementor .ld-duo__datos.e-con {
	display: flex;
	flex-direction: row;
	flex-wrap: wrap;
	gap: 0.5rem 2rem;
	width: auto;
	padding: 0;
	margin-top: 0.3rem;
}

.elementor.elementor .ld-duo__datos.e-con > .elementor-widget { width: auto; margin: 0; }
.ld-duo__dato { font-size: 0.78rem; color: var(--ld-tinta-38); }
.ld-duo__dato b { color: var(--ld-ink); font-weight: 400; }

/* --- Ritmo vertical de la portada ----------------------------------- */

/*
 * `.ld-seccion` reserva 130px arriba y otros 130 abajo, que entre dos
 * secciones seguidas son 260px de aire. En una pagina interior, con una
 * seccion por pantalla, funciona; en la portada, con ocho bloques
 * seguidos, la pagina se despega y hay que hacer scroll para nada.
 */
.elementor.elementor .ld-seccion--ajustada.e-con {
	padding-block: clamp(2.6rem, 5vw, 4.5rem);
}

/* El bloque de cierre ya trae su propio margen superior: sumado al
   relleno de la seccion daban 210px antes del recuadro azul. */
.elementor.elementor .ld-seccion--ajustada.e-con > .ld-cierre { margin-top: 0; }

/* La banda de fuera de mercado se queda mas alta que el resto -es la
   pieza que manda- pero no el doble. */
.elementor.elementor .ld-fuera.e-con {
	padding-block: clamp(3.5rem, 7.5vw, 6.5rem);
}

/* Cuatro fichas en la portada. La rejilla del catalogo se reparte en
   columnas de 320px minimo, que a 1320px de ancho dan tres: la cuarta
   ficha se quedaba sola en la fila de abajo. */
.ld-grid--4 .ld-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.ld-grid--4 .ld-grid .ld-card__link { gap: 0.9rem; }

@media (max-width: 1180px) {
	.ld-grid--4 .ld-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 620px) {
	.ld-grid--4 .ld-grid { grid-template-columns: minmax(0, 1fr); }
}

/* ------------------------------------------------------------------ */
/* Vitrina de portada: una manda y dos acompanan                       */
/* ------------------------------------------------------------------ */

/*
 * Tres fichas iguales en fila son un listado; en la portada lo que hace
 * falta es una portada de revista. La primera ocupa la columna izquierda
 * entera, en vertical y con los datos a la vista; las otras dos se apilan
 * a la derecha, apaisadas. Es la composicion que usan las casas grandes
 * del sector, y aqui sale gratis: la ficha es la misma de siempre.
 */
/*
 * La composicion solo se sostiene con tres fichas: con dos, la grande se
 * estiraria sobre un hueco vacio. `:has()` comprueba que exista la
 * tercera; si no, la rejilla se comporta como siempre.
 */
@media (min-width: 900px) {
	.ld-vitrina .ld-grid:has(> .ld-card:nth-child(3)) {
		grid-template-columns: 1.18fr 1fr;
		gap: clamp(1.6rem, 2.6vw, 2.6rem) clamp(1.8rem, 3vw, 3.2rem);
		align-items: start;
	}

	.ld-vitrina .ld-grid:has(> .ld-card:nth-child(3)) > .ld-card:first-child {
		grid-row: 1 / span 2;
		align-self: stretch;
	}

	/* La foto grande se estira hasta igualar las dos de al lado: las dos
	   columnas empiezan y acaban a la misma altura. */
	.ld-vitrina .ld-grid:has(> .ld-card:nth-child(3)) > .ld-card:first-child .ld-card__link { height: 100%; }

	.ld-vitrina .ld-grid:has(> .ld-card:nth-child(3)) > .ld-card:first-child .ld-card__frame {
		aspect-ratio: auto;
		flex: 1 1 auto;
		min-height: 30rem;
	}

	.ld-vitrina .ld-grid:has(> .ld-card:nth-child(3)) > .ld-card:first-child .ld-card__title {
		font-size: clamp(1.18rem, 0.98rem + 0.85vw, 1.7rem);
	}

	.ld-vitrina .ld-grid:has(> .ld-card:nth-child(3)) > .ld-card:first-child .ld-card__price { font-size: 1.12rem; }

	/* En la que manda los datos no esperan al hover. */
	.ld-vitrina .ld-grid:has(> .ld-card:nth-child(3)) > .ld-card:first-child .ld-card__specs {
		opacity: 1;
		transform: none;
	}

	.ld-vitrina .ld-grid:has(> .ld-card:nth-child(3)) > .ld-card:not(:first-child) .ld-card__frame { aspect-ratio: 16 / 10; }
}

/* ------------------------------------------------------------------ */
/* Journal: el diario de la web.                                        */
/*                                                                      */
/* Una nota se lee de arriba abajo en este orden: de que seccion es,    */
/* cuando se escribio y cuanto cuesta leerla; luego el titular. Ese     */
/* rotulo va DELANTE porque es lo que decide si sigues o pasas, y es    */
/* justo lo que el widget de Elementor no sabe hacer.                   */
/* ------------------------------------------------------------------ */

.ld-notas {
	display: grid;
	gap: 0;
	margin-top: clamp(2.4rem, 5vw, 3.6rem);
	border-top: 1px solid var(--ld-linea);
}

.ld-nota {
	display: grid;
	gap: clamp(1.4rem, 3vw, 2.6rem);
	padding-block: clamp(1.8rem, 3.6vw, 2.8rem);
	border-bottom: 1px solid var(--ld-linea);
	color: inherit;
	text-decoration: none;
}

@media (min-width: 768px) {
	.ld-nota {
		grid-template-columns: minmax(0, 30%) minmax(0, 1fr);
		align-items: start;
	}
}

.ld-nota__media {
	display: block;
	overflow: hidden;
	background: color-mix(in srgb, var(--ld-ink) 7%, transparent);
}

.ld-nota__media:empty { display: none; }

.ld-nota__img {
	display: block;
	width: 100%;
	height: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	transition: transform 0.8s var(--ld-ease, cubic-bezier(0.22, 1, 0.36, 1));
}

.ld-nota:hover .ld-nota__img,
.ld-nota:focus-visible .ld-nota__img { transform: scale(1.045); }

.ld-nota__cuerpo { display: block; }

.ld-nota__rotulo {
	display: block;
	margin-bottom: 0.85rem;
	font-family: var(--ld-body);
	font-size: 0.72rem;
	font-weight: 500;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--ld-accent);
}

.ld-nota__sep {
	display: inline-block;
	margin-inline: 0.6em;
	color: var(--ld-tinta-38);
}

/* A partir de la fecha el rotulo es dato, no seccion: baja de tono para
   que la seccion siga leyendose primero. */
.ld-nota__sep ~ .ld-nota__sep { color: var(--ld-tinta-38); }

.ld-nota__titulo {
	display: block;
	font-family: var(--ld-display);
	font-size: clamp(1.45rem, 1.15rem + 1vw, 1.9rem);
	font-weight: 400;
	line-height: 1.14;
	letter-spacing: -0.022em;
	text-transform: none;
	color: var(--ld-ink);
	text-wrap: balance;
	transition: color 0.3s ease;
}

.ld-nota:hover .ld-nota__titulo,
.ld-nota:focus-visible .ld-nota__titulo { color: var(--ld-accent); }

.ld-nota__resumen {
	display: block;
	margin-top: 0.8rem;
	max-width: 62ch;
	font-size: 1rem;
	line-height: 1.66;
	color: var(--ld-tinta-72);
}

.ld-nota__mas {
	display: inline-block;
	margin-top: 1.15rem;
	padding-bottom: 0.3rem;
	border-bottom: 1px solid color-mix(in srgb, var(--ld-ink) 30%, transparent);
	font-family: var(--ld-body);
	font-size: 0.72rem;
	font-weight: 500;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--ld-ink);
	transition: color 0.3s ease, border-color 0.3s ease;
}

.ld-nota:hover .ld-nota__mas,
.ld-nota:focus-visible .ld-nota__mas {
	color: var(--ld-accent);
	border-color: var(--ld-accent);
}

/* La pieza de apertura: a una sola columna y con la fotografia ancha,
   que es lo que la separa de las de debajo sin cambiarle el estilo. */
@media (min-width: 768px) {
	.ld-nota--lead {
		grid-template-columns: minmax(0, 1fr);
		gap: clamp(1.6rem, 3vw, 2.4rem);
		padding-top: 0;
		padding-bottom: clamp(2.4rem, 4.5vw, 3.4rem);
	}

	.ld-nota--lead .ld-nota__img { aspect-ratio: 21 / 9; }

	.ld-nota--lead .ld-nota__cuerpo {
		display: grid;
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
		column-gap: clamp(2rem, 4vw, 3.4rem);
		align-items: start;
	}

	.ld-nota--lead .ld-nota__rotulo { grid-column: 1 / -1; }

	.ld-nota--lead .ld-nota__titulo {
		font-size: clamp(2rem, 1.3rem + 2.1vw, 3.05rem);
		line-height: 1.06;
	}

	.ld-nota--lead .ld-nota__resumen {
		margin-top: 0;
		font-size: 1.08rem;
	}

	.ld-nota--lead .ld-nota__mas { grid-column: 2; margin-top: 1.3rem; }
}

/* Variante en rejilla: la que cierra una entrada con "Read next". Son
   las mismas tarjetas, con la foto arriba y sin filete entre ellas —
   no es una lista que se recorre, son tres salidas al mismo nivel. */
.ld-notas--rejilla {
	grid-template-columns: minmax(0, 1fr);
	gap: clamp(1.6rem, 3vw, 2.4rem);
	border-top: 0;
}

/* Tres salidas, en una fila. Van dentro de la columna de lectura, que es
   estrecha, asi que la fila se declara y no se deja a `auto-fit`: con
   `auto-fit` cabian dos y la tercera se descolgaba sola debajo. */
@media (min-width: 620px) {
	.ld-notas--rejilla { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

.ld-notas--rejilla .ld-nota {
	grid-template-columns: minmax(0, 1fr);
	gap: 1.1rem;
	padding-block: 0;
	border-bottom: 0;
	align-content: start;
}

.ld-notas--rejilla .ld-nota__img { aspect-ratio: 3 / 2; }

.ld-notas--rejilla .ld-nota__rotulo { margin-bottom: 0.55rem; font-size: 0.68rem; }

.ld-notas--rejilla .ld-nota__titulo {
	font-size: clamp(1.08rem, 1rem + 0.35vw, 1.22rem);
	line-height: 1.22;
}

.ld-notas--rejilla .ld-nota__resumen,
.ld-notas--rejilla .ld-nota__mas { display: none; }

/* Paginacion del diario: la del tema, con aire por encima. */
.ld-notas + .ld-paginacion,
.ld-journal .ld-paginacion { margin-top: clamp(2.4rem, 4.5vw, 3.4rem); }

/* ------------------------------------------------------------------ */
/* Journal: la ficha de una entrada.                                    */
/* ------------------------------------------------------------------ */

/* El pie, la firma y lo que se lee despues se alinean con la columna de
   lectura, no con el contenedor ancho: si no, los botones de compartir
   empiezan 300px antes que el texto al que pertenecen.
   `.ld-contenedor.e-con` fija el ancho grande con !important, asi que —
   igual que hace `.ld-contenedor.ld-prosa.e-con` — hay que ganarle con
   una clase mas y en sus mismos terminos. */
.ld-contenedor.ld-post-pie.e-con,
.ld-contenedor.ld-firma.e-con,
.ld-contenedor.ld-relacionadas.e-con {
	width: min(100% - (var(--ld-gutter) * 2), var(--ld-ancho-texto)) !important;
	max-width: none !important;
	margin-inline: auto !important;
	padding-inline: 0 !important;
}

.ld-post-pie.e-con {
	margin-top: clamp(2.6rem, 5vw, 3.8rem);
	padding-top: clamp(1.6rem, 3vw, 2.2rem);
	border-top: 1px solid var(--ld-linea);
	gap: clamp(1.8rem, 3.5vw, 2.6rem);
}

/* Firma: quien escribe esto y por que deberia importarte. */
.ld-firma.e-con {
	display: grid !important;
	grid-template-columns: minmax(0, 1fr);
	gap: clamp(1.2rem, 2.5vw, 1.8rem);
	margin-top: clamp(2.4rem, 5vw, 3.4rem);
	padding-block: clamp(1.6rem, 3vw, 2.2rem) 0;
	border-top: 1px solid var(--ld-linea);
	align-items: start;
}

/* Con retrato: la foto a un lado, en columna fija, y el texto al lado.
   Quien lee una nota de mercado quiere saber quien se la firma. */
@media (min-width: 560px) {
	.ld-firma.e-con { grid-template-columns: 108px minmax(0, 1fr); }
}

/* El recorte cuadrado de un retrato de cuerpo entero deja la cara muy
   pequena: el circulo recorta y la imagen se acerca dentro de el, con el
   origen en la cabeza. El redondeo va en el contenedor, no en la imagen,
   porque es el contenedor el que recorta el acercamiento. */
.ld-firma__retrato.e-con {
	padding: 0;
	aspect-ratio: 1 / 1;
	overflow: hidden;
	border-radius: 50%;
}

.ld-firma__retrato img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center top;
	transform: scale(1.6);
	transform-origin: center 14%;
	filter: grayscale(1);
}

.ld-firma__cuerpo.e-con {
	display: grid !important;
	gap: 0.4rem;
	padding: 0;
}

.ld-firma__cargo {
	font-family: var(--ld-body);
	font-size: 0.76rem;
	font-weight: 400;
	letter-spacing: 0.06em;
	line-height: 1.5;
	text-transform: none;
	color: var(--ld-tinta-38);
}

.ld-firma__cargo > .elementor-heading-title {
	font: inherit;
	letter-spacing: inherit;
	text-transform: inherit;
	color: inherit;
	margin: 0;
	line-height: 1.5;
}

.ld-firma__rotulo {
	font-family: var(--ld-body);
	font-size: 0.72rem;
	font-weight: 500;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--ld-tinta-38);
}

.ld-firma__nombre {
	font-family: var(--ld-display);
	font-size: 1.32rem;
	font-weight: 400;
	letter-spacing: -0.02em;
	text-transform: none;
	color: var(--ld-ink);
}

.ld-firma__texto {
	font-size: 1rem;
	line-height: 1.68;
	color: var(--ld-tinta-72);
}

.ld-firma__rotulo > .elementor-heading-title,
.ld-firma__nombre > .elementor-heading-title,
.ld-firma__texto > .elementor-heading-title {
	font: inherit;
	letter-spacing: inherit;
	text-transform: inherit;
	color: inherit;
	margin: 0;
}

.ld-firma__rotulo > .elementor-heading-title { line-height: 1.5; }
.ld-firma__nombre > .elementor-heading-title { line-height: 1.2; }
.ld-firma__texto > .elementor-heading-title { line-height: 1.68; }

/* Compartir: cuadrados sobrios, no pastillas de color. */
.elementor.elementor .ld-compartir .elementor-share-btn {
	height: auto;
	padding: 0.7rem 1rem;
	border: 1px solid var(--ld-linea);
	border-radius: 0;
	background: transparent;
	font-family: var(--ld-body);
	font-size: 0.68rem;
	font-weight: 500;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--ld-tinta-72);
	transition: border-color 0.3s ease, color 0.3s ease;
}

.elementor.elementor .ld-compartir .elementor-share-btn:hover {
	border-color: var(--ld-ink);
	color: var(--ld-ink);
}

/* El acabado por defecto del widget (skin "gradient") pinta la etiqueta
   en blanco porque da por hecho un boton de color. Al dejarlo sin fondo la
   etiqueta desaparecia: tres recuadros vacios. El color se declara aqui
   porque el selector de skin de Elementor es una `prefix_class`, y esas no
   se escriben en una plantilla guardada fuera del constructor. */
.elementor.elementor .ld-compartir .elementor-share-btn__icon,
.elementor.elementor .ld-compartir .elementor-share-btn__text { background: transparent; }

.elementor.elementor .ld-compartir .elementor-share-btn__text,
.elementor.elementor .ld-compartir .elementor-share-btn__title,
.elementor.elementor .ld-compartir .elementor-share-btn__icon { color: var(--ld-tinta-72); }

.elementor.elementor .ld-compartir .elementor-share-btn:hover .elementor-share-btn__text,
.elementor.elementor .ld-compartir .elementor-share-btn:hover .elementor-share-btn__title,
.elementor.elementor .ld-compartir .elementor-share-btn:hover .elementor-share-btn__icon { color: var(--ld-ink); }

.ld-nav-entradas .elementor-post-navigation { border-color: var(--ld-linea); }

/* El color en reposo del titular NO se declara aqui a proposito: lo pone
   el color global "Titulares" del kit de Elementor, para que se pueda
   cambiar desde el constructor. Solo se define el estado de paso, que no
   tiene color global. */
.elementor.elementor .ld-nav-entradas a:hover span.post-navigation__prev--title,
.elementor.elementor .ld-nav-entradas a:hover span.post-navigation__next--title {
	color: var(--ld-accent);
}

.elementor.elementor .ld-nav-entradas span.post-navigation__prev--label,
.elementor.elementor .ld-nav-entradas span.post-navigation__next--label {
	color: var(--ld-tinta-38);
}

/* Las flechas heredan lo mismo. */
.ld-nav-entradas .post-navigation__arrow-wrapper { color: var(--ld-tinta-38); }
.ld-nav-entradas a:hover .post-navigation__arrow-wrapper { color: var(--ld-accent); }

.ld-nav-entradas .post-navigation__prev--label,
.ld-nav-entradas .post-navigation__next--label {
	display: block;
	margin-bottom: 0.4rem;
	font-family: var(--ld-body);
	font-size: 0.68rem;
	font-weight: 500;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--ld-tinta-38);
}

.ld-nav-entradas .post-navigation__prev--title,
.ld-nav-entradas .post-navigation__next--title {
	font-family: var(--ld-display);
	font-size: 1.05rem;
	line-height: 1.25;
	letter-spacing: -0.015em;
}

.ld-nav-entradas a:hover .post-navigation__prev--title,
.ld-nav-entradas a:hover .post-navigation__next--title { color: var(--ld-accent); }

/* La linea de contexto del hero de una entrada: seccion, fecha y
   minutos. El widget Post Info insiste en poner un icono delante de cada
   dato aunque se le deje vacio; aqui el separador es el filete vertical,
   no un punto de color. */
.ld-over .elementor-icon-list-items { margin: 0; padding: 0; }
.ld-over .elementor-icon-list-icon { display: none !important; }
.ld-over .elementor-icon-list-text { padding-inline-start: 0; }

.ld-over .elementor-icon-list-item,
.ld-over .elementor-icon-list-item a { color: inherit; font: inherit; letter-spacing: inherit; }

.ld-over .elementor-icon-list-item a:hover { text-decoration: underline; }

/* Consentimiento del formulario: la casilla y su texto en una sola linea
   de lectura, con el enlace a la politica visible pero sin gritar. */
.ld-form__consentimiento {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: 0.7rem;
	align-items: start;
	margin: 0.4rem 0 0;
}

.ld-form__consentimiento input[type="checkbox"] {
	width: 1.05rem;
	height: 1.05rem;
	margin: 0.15rem 0 0;
	accent-color: var(--ld-accent);
	flex: none;
}

.ld-form__consentimiento label {
	margin: 0;
	font-family: var(--ld-body);
	font-size: 0.86rem;
	font-weight: 400;
	line-height: 1.55;
	letter-spacing: 0;
	text-transform: none;
	color: var(--ld-tinta-72);
	cursor: pointer;
}

.ld-form__consentimiento a {
	color: var(--ld-ink);
	text-decoration: underline;
	text-underline-offset: 0.18em;
}

.ld-form__consentimiento a:hover { color: var(--ld-accent); }

/* Sobre la banda oscura del cierre el texto tiene que aclararse. */
.ld-cierre .ld-form__consentimiento label,
.ld-prop-contacto--oscuro .ld-form__consentimiento label {
	color: color-mix(in srgb, var(--ld-cream) 78%, transparent);
}

.ld-cierre .ld-form__consentimiento a,
.ld-prop-contacto--oscuro .ld-form__consentimiento a { color: var(--ld-cream); }

/* Enlace legal del pie: al lado del copyright, en el mismo tono apagado. */
.ld-pie__legal,
.ld-pie__legal > .elementor-heading-title {
	font-family: var(--ld-body);
	font-size: 0.78rem;
	font-weight: 400;
	letter-spacing: 0.04em;
	line-height: 1.5;
	text-transform: none;
	margin: 0;
}

/* El kit de Elementor pinta todos los enlaces en azul de marca con
   `.elementor-kit-4 a`, misma especificidad que la nuestra pero cargando
   despues: el enlace salia azul sobre el pie azul oscuro, invisible. Se
   repite la raiz, como en el resto del tema. */
.elementor.elementor .ld-pie__legal a {
	color: color-mix(in srgb, var(--ld-cream) 62%, transparent);
	text-decoration: none;
	border-bottom: 1px solid transparent;
	transition: color 0.3s ease, border-color 0.3s ease;
}

.elementor.elementor .ld-pie__legal a:hover {
	color: var(--ld-cream);
	border-bottom-color: color-mix(in srgb, var(--ld-cream) 45%, transparent);
}

/* ------------------------------------------------------------------ */
/* Testimonios.                                                         */
/* ------------------------------------------------------------------ */
.ld-testimonios {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr));
	gap: clamp(1.6rem, 3vw, 2.6rem);
	margin-top: clamp(2rem, 4vw, 3rem);
}

.ld-testimonio {
	display: grid;
	align-content: start;
	gap: 1.1rem;
	margin: 0;
	padding-top: 1.4rem;
	border-top: 2px solid var(--ld-ink);
}

.ld-testimonio__cita {
	margin: 0;
	font-family: var(--ld-display);
	font-size: clamp(1.05rem, 1rem + 0.3vw, 1.18rem);
	font-weight: 400;
	line-height: 1.5;
	letter-spacing: -0.012em;
	color: var(--ld-ink);
}

.ld-testimonio__cita::before { content: "\201C"; }
.ld-testimonio__cita::after { content: "\201D"; }

.ld-testimonio__pie { display: grid; gap: 0.2rem; }

.ld-testimonio__nombre {
	font-family: var(--ld-body);
	font-size: 0.78rem;
	font-weight: 500;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--ld-texto);
}

.ld-testimonio__detalle {
	font-family: var(--ld-body);
	font-size: 0.82rem;
	color: var(--ld-tinta-38);
}

/* Cuando un widget no pinta nada, Elementor no deja ni su envoltorio: la
   seccion se queda como un contenedor SIN hijos pero con su relleno, y
   sale un hueco en blanco. Es lo que pasaba entre la banda de cifras y el
   cierre mientras no hubiera testimonios.
   `:empty` no vale porque dentro queda un salto de linea; `:not(:has(*))`
   mira si hay elementos, que es lo que importa. Va acotado a las
   secciones con relleno, para no tocar piezas vacias a proposito como
   `.ld-hero__scrim`. */
.e-con.ld-seccion--ajustada:not(:has(*)),
.e-con.ld-seccion:not(:has(*)) {
	display: none;
}

/* Cabecera de la seccion, cuando si hay testimonios. */
.ld-testimonios__cabecera { margin-bottom: 0; }

/* ================================================================== */
/* Ficha de la agente.                                                 */
/*                                                                     */
/* Una pagina sobre una persona se abre con la persona, no con una     */
/* playa de archivo. El retrato sale de la banda azul y cae sobre el   */
/* marfil: es lo unico que rompe la reja en todo el sitio, y por eso   */
/* funciona. El resto es la linea de siempre — Bricolage en           */
/* versalitas, filetes, marfil y aire.                                 */
/* ================================================================== */

.ld-hero.ld-retrato {
	display: block;
	align-items: stretch;
	min-height: 0;
	padding-block: clamp(7rem, 12vw, 10rem) 0;
	overflow: visible;
}

/* El monograma no debe taparlo el retrato ni recortarse con el. */
.ld-hero.ld-retrato::before { z-index: 0; }

.ld-retrato__fila.e-con {
	display: grid !important;
	grid-template-columns: minmax(0, 1fr);
	gap: clamp(2.4rem, 5vw, 3.6rem);
	align-items: end;
	position: relative;
	z-index: 1;
}

@media (min-width: 900px) {
	.ld-retrato__fila.e-con {
		/* Hueco ancho a proposito: es lo que separa una ficha cara de una
		   plantilla. */
		grid-template-columns: minmax(0, 1fr) minmax(0, 0.78fr);
		gap: clamp(3.5rem, 8vw, 8rem);
	}
}

.ld-retrato__texto.e-con {
	padding: 0 0 clamp(3rem, 6vw, 5rem);
	display: grid !important;
	gap: 0;
	align-content: end;
}

.ld-retrato__texto .ld-over { margin-bottom: 1.1rem; color: color-mix(in srgb, var(--ld-cream) 62%, transparent); }

.ld-retrato__texto .ld-display { color: var(--ld-cream); }

.ld-retrato__cargo {
	margin-top: 1.4rem;
	padding-top: 1.3rem;
	border-top: 1px solid color-mix(in srgb, var(--ld-cream) 24%, transparent);
	font-family: var(--ld-body);
	font-size: 0.74rem;
	font-weight: 500;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: color-mix(in srgb, var(--ld-cream) 80%, transparent);
}

.ld-retrato__cargo > .elementor-heading-title {
	font: inherit;
	letter-spacing: inherit;
	text-transform: inherit;
	color: inherit;
	line-height: 1.6;
	margin: 0;
}

.ld-retrato__lema p {
	margin: 1.1rem 0 0;
	max-width: 34ch;
	font-size: 1.05rem;
	line-height: 1.65;
	color: color-mix(in srgb, var(--ld-cream) 72%, transparent);
}

/* El marco: el retrato baja y se come el borde de la banda. */
.ld-retrato__marco.e-con {
	padding: 0;
	position: relative;
	margin-bottom: clamp(-4.5rem, -7vw, -7rem);
}

.ld-retrato__marco img {
	display: block;
	width: 100%;
	aspect-ratio: 4 / 5;
	object-fit: cover;
	object-position: center 16%;
	/* Lo que pedia el cliente: esquinas francamente redondeadas. El
	   sitio vive en 2px, asi que aqui el radio es el gesto. */
	border-radius: clamp(20px, 2.4vw, 34px);
	filter: grayscale(1) contrast(1.04);
	box-shadow: 0 40px 80px -40px rgb(10 30 55 / 0.55);
}

/* Deja sitio abajo para lo que sobresale. */
.ld-hero.ld-retrato + .e-con { padding-top: clamp(5.5rem, 9vw, 8.5rem); }

@media (max-width: 899px) {
	.ld-retrato__marco.e-con { margin-bottom: clamp(-3rem, -6vw, -4.5rem); }
	.ld-retrato__marco img { aspect-ratio: 3 / 4; }
}

/* ------------------------------------------------------------------ */
/* Bio: hoja de datos fija a un lado, texto al otro.                    */
/* ------------------------------------------------------------------ */
.ld-bio.e-con {
	display: grid !important;
	grid-template-columns: minmax(0, 1fr);
	gap: clamp(2.4rem, 5vw, 3.4rem);
	align-items: start;
}

@media (min-width: 900px) {
	.ld-bio.e-con {
		grid-template-columns: minmax(0, 0.62fr) minmax(0, 1fr);
		gap: clamp(3.5rem, 8vw, 8rem);
	}

	/* La hoja acompana la lectura en vez de perderse arriba. */
	.ld-bio__hoja.e-con {
		position: sticky;
		top: calc(var(--ld-alto-cabecera, 88px) + 2.5rem);
	}
}

.ld-bio__hoja.e-con,
.ld-bio__texto.e-con { padding: 0; }

.ld-bio__hoja .ld-over { margin-bottom: 1.2rem; }

.ld-hoja.e-con {
	display: grid !important;
	gap: 0;
	padding: 0;
	border-top: 1px solid var(--ld-linea);
}

.ld-hoja__fila.e-con {
	display: grid !important;
	grid-template-columns: minmax(0, 1fr);
	gap: 0.15rem;
	padding: 0.85rem 0;
	border-bottom: 1px solid var(--ld-linea);
}

.ld-hoja__rotulo {
	font-family: var(--ld-body);
	font-size: 0.68rem;
	font-weight: 500;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--ld-tinta-38);
}

.ld-hoja__valor {
	font-family: var(--ld-display);
	font-size: 1.02rem;
	font-weight: 400;
	letter-spacing: -0.015em;
	text-transform: none;
	color: var(--ld-ink);
}

.ld-hoja__rotulo > .elementor-heading-title,
.ld-hoja__valor > .elementor-heading-title {
	font: inherit;
	letter-spacing: inherit;
	text-transform: inherit;
	color: inherit;
	margin: 0;
	line-height: 1.45;
}

/* ------------------------------------------------------------------ */
/* Metodo: una secuencia numerada, no cuatro tarjetas iguales.          */
/* Van numeradas porque es el orden real en que se piden los papeles.   */
/* ------------------------------------------------------------------ */
.ld-metodo__cabecera { margin-bottom: clamp(2rem, 4vw, 3rem); }

.ld-pasos.e-con {
	display: grid !important;
	gap: 0;
	padding: 0;
	border-top: 1px solid var(--ld-linea);
}

.ld-paso.e-con {
	display: grid !important;
	grid-template-columns: minmax(0, 1fr);
	gap: 0.6rem;
	padding: clamp(1.6rem, 3vw, 2.4rem) 0;
	border-bottom: 1px solid var(--ld-linea);
	transition: background-color 0.4s var(--ld-ease);
}

/* En movil el titular y el texto van apilados dentro de su envoltorio. */
.ld-paso__cuerpo.e-con {
	display: grid !important;
	gap: 0.5rem;
	padding: 0;
}

/* De tablet para arriba el envoltorio se disuelve con `display: contents`
   y sus dos hijos pasan a ser columnas del propio paso: numero, titular y
   explicacion en una sola linea de reja.
   ESTE BLOQUE VA DESPUES del de arriba a proposito: misma especificidad y
   ambos con !important, asi que manda el ultimo. Al reves, el envoltorio
   seguia siendo una caja de 320px y la tercera columna quedaba vacia. */
@media (min-width: 760px) {
	.ld-paso.e-con {
		grid-template-columns: 5.5rem minmax(0, 19rem) minmax(0, 1fr);
		gap: clamp(1.5rem, 4vw, 3.5rem);
		align-items: start;
	}

	.ld-paso__cuerpo.e-con {
		display: contents !important;
	}
}

.ld-paso__n {
	font-family: var(--ld-display);
	font-size: clamp(1.1rem, 1rem + 0.5vw, 1.35rem);
	font-weight: 400;
	letter-spacing: 0.02em;
	color: var(--ld-accent);
	font-variant-numeric: tabular-nums;
}

.ld-paso__titulo {
	font-family: var(--ld-display);
	font-size: clamp(1.18rem, 1.05rem + 0.5vw, 1.42rem);
	font-weight: 400;
	line-height: 1.22;
	letter-spacing: -0.02em;
	text-transform: none;
	color: var(--ld-ink);
	text-wrap: balance;
}

.ld-paso__texto {
	font-family: var(--ld-body);
	font-size: 1rem;
	font-weight: 300;
	line-height: 1.68;
	letter-spacing: 0;
	text-transform: none;
	color: var(--ld-tinta-72);
}

.ld-paso__n > .elementor-heading-title,
.ld-paso__titulo > .elementor-heading-title,
.ld-paso__texto > .elementor-heading-title {
	font: inherit;
	letter-spacing: inherit;
	text-transform: inherit;
	color: inherit;
	margin: 0;
}

.ld-paso__n > .elementor-heading-title { line-height: 1.3; }
.ld-paso__titulo > .elementor-heading-title { line-height: 1.22; }
.ld-paso__texto > .elementor-heading-title { line-height: 1.68; }

/* ------------------------------------------------------------------ */
/* Cifras: banda de tinta, numerales grandes.                           */
/* ------------------------------------------------------------------ */
.ld-cifras.e-con {
	padding-block: clamp(3rem, 6vw, 5rem);
	background: var(--ld-ink);
	color: var(--ld-cream);
}

.ld-cifras__fila.e-con {
	display: grid !important;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: clamp(2rem, 4vw, 3.5rem) clamp(1.5rem, 3vw, 3rem);
	padding-inline: var(--ld-gutter);
}

@media (min-width: 900px) {
	.ld-cifras__fila.e-con { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

.ld-cifra.e-con {
	display: grid !important;
	gap: 0.55rem;
	padding: 0 0 0 clamp(1rem, 2vw, 1.6rem);
	border-left: 1px solid color-mix(in srgb, var(--ld-cream) 26%, transparent);
}

.ld-cifra__valor {
	font-family: var(--ld-display);
	font-size: clamp(2.6rem, 1.8rem + 3vw, 4.2rem);
	font-weight: 300;
	line-height: 0.95;
	letter-spacing: -0.03em;
	color: var(--ld-cream);
	font-variant-numeric: tabular-nums;
}

.ld-cifra__etiqueta {
	font-family: var(--ld-body);
	font-size: 0.7rem;
	font-weight: 500;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: color-mix(in srgb, var(--ld-cream) 66%, transparent);
}

.ld-cifra__valor > .elementor-heading-title,
.ld-cifra__etiqueta > .elementor-heading-title {
	font: inherit;
	letter-spacing: inherit;
	text-transform: inherit;
	color: inherit;
	margin: 0;
}

.ld-cifra__valor > .elementor-heading-title { line-height: 0.95; }
.ld-cifra__etiqueta > .elementor-heading-title { line-height: 1.5; }

/* El flotante se aparta cuando el boton de enviar esta en pantalla: en un
   movil los dos comparten la esquina inferior derecha. Se va con una
   transformada, sin tocar el layout, y sigue siendo accesible en cuanto el
   formulario sale de vista. */
.ld-wa-flotante {
	transition: transform 0.35s var(--ld-ease), opacity 0.25s ease, background-color 0.3s var(--ld-ease);
}

.ld-wa-flotante.is-oculto {
	transform: translateY(120%) scale(0.9);
	opacity: 0;
	pointer-events: none;
}

@media (prefers-reduced-motion: reduce) {
	.ld-wa-flotante { transition: opacity 0.2s ease; }
	.ld-wa-flotante.is-oculto { transform: none; }
}

/* En movil los rotulos del pie bajaban a 9,9px reales: legibles en una
   pantalla de escritorio a 0.62rem, pero no en la mano. Suben lo justo
   para que se puedan leer sin perder el aire de rotulo. */
@media (max-width: 767px) {
	.ld-pie__rotulo,
	.ld-pie__puesto,
	.ld-pie__lugar {
		font-size: 0.72rem;
		letter-spacing: 0.14em;
	}

	.ld-aviso { font-size: 0.7rem; }
}

/* La casilla de consentimiento es un campo obligatorio: en el movil tenia
   17px de lado, el minimo comodo son 24. La etiqueta entera ya era
   pulsable, pero el cuadro tiene que verse y acertarse. */
@media (max-width: 767px) {
	.ld-form__consentimiento { gap: 0.85rem; align-items: center; }

	.ld-form__consentimiento input[type="checkbox"] {
		width: 1.45rem;
		height: 1.45rem;
		margin-top: 0;
	}

	.ld-form__consentimiento label { font-size: 0.88rem; }
}

/* ------------------------------------------------------------------ */
/* Centrado del texto dentro de CUALQUIER boton.                        */
/*                                                                      */
/* Elementor mete el rotulo en dos <span> anidados. Si el boton no es   */
/* un flex centrado, ese envoltorio se estira a la altura del contenido */
/* y la linea de texto se queda arriba del todo: en el boton del hero   */
/* de una ficha habia 8,9px por encima y 22,6px por debajo.             */
/*                                                                      */
/* La regla estaba puesta, pero solo para `.ld-btn`. Los botones con la */
/* clase antigua `.ld-boton` — cabecera, ficha de propiedad, ficha de   */
/* proyecto y pie — se quedaban fuera. Se aplica ahora a todos por el   */
/* elemento, que es lo unico que no se puede olvidar al anadir uno.     */
/* ------------------------------------------------------------------ */
.elementor.elementor .elementor-button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
}

.elementor.elementor .elementor-button-content-wrapper {
	display: flex;
	align-items: center;
	justify-content: center;
	line-height: 1;
}

/* El interletrado se anade DESPUES de cada letra, tambien de la ultima,
   asi que un texto centrado queda desplazado media pulsacion a la
   izquierda. Se compensa sangrando el mismo valor. */
.elementor.elementor .elementor-button .elementor-button-text,
.ld-boton,
.ld-btn .elementor-button {
	text-indent: 0.2em;
}

/* Los botones que pinta el tema (no Elementor) comparten el problema. */
.ld-boton {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	line-height: 1;
}

/* ------------------------------------------------------------------ */
/* El envoltorio de un widget de boton no se pinta.                     */
/*                                                                      */
/* En un boton del tema la clase `.ld-boton--acento` va en el <a>: es   */
/* el boton. En un widget de Elementor la MISMA clase la lleva el <div> */
/* envoltorio, que es un bloque de ancho completo y sin radio. Las      */
/* reglas de fondo escritas para el boton — por ejemplo                 */
/* `.ld-hero .ld-boton--acento:hover { background: var(--ld-blanco) }` —*/
/* le pintaban a ese div un rectangulo blanco por detras de la          */
/* pastilla: al pasar el raton el boton parecia volverse cuadrado.      */
/*                                                                      */
/* El color siempre lo pone el <a.elementor-button>, nunca el           */
/* envoltorio. Y si alguna regla futura vuelve a colarse, el radio      */
/* heredado evita que se vea como una esquina viva.                     */
/* ------------------------------------------------------------------ */
.elementor-widget-button[class*="ld-boton"],
.elementor-widget-button[class*="ld-boton"]:hover,
.elementor-widget-button[class*="ld-boton"]:focus-within,
.elementor-widget-button[class*="ld-btn"],
.elementor-widget-button[class*="ld-btn"]:hover,
.elementor-widget-button[class*="ld-btn"]:focus-within {
	background: none !important;
	border-color: transparent !important;
	border-radius: 999px;
}

/* ------------------------------------------------------------------ */
/* La columna de lectura que sigue a la banda de cifras.                */
/*                                                                      */
/* Projects y Living in Cap Cana estan montadas igual: hero, banda de   */
/* cifras y DESPUES un unico contenedor con toda la pagina dentro. Ese  */
/* contenedor solo llevaba los 10px de relleno que pone Elementor por   */
/* defecto, asi que el primer rotulo —"UNDER CONSTRUCTION"— arrancaba   */
/* pegado al filete de las cifras.                                      */
/* ------------------------------------------------------------------ */
.ld-specs-wrap + .ld-contenedor.ld-prosa.e-con {
	padding-top: clamp(3rem, 6vw, 5rem);
}

/* Y al final pasaba lo contrario: la banda oscura del cierre terminaba
   10px antes que el pie, y quedaba un filete blanco entre dos bandas del
   mismo azul. Pasaba en las cuatro paginas que cierran asi — Projects,
   Living in Cap Cana, About y cada entrada del diario —, porque todas
   envuelven el cierre en un `.ld-contenedor` que se queda con el relleno
   de 10px de Elementor.

   Solo se recorta cuando el cierre es el ULTIMO hijo: si debajo hay algo
   mas, ese aire hace falta. */
.ld-contenedor.e-con:has(> .ld-cierre:last-child) {
	padding-bottom: 0;
}

/* ------------------------------------------------------------------ */
/* Banda de cifras en movil.                                            */
/*                                                                      */
/* La version de Elementor reparte con `repeat(auto-fit, minmax(190px,  */
/* 1fr))`. En un movil el contenedor mide 330px, asi que 190×2 no entra */
/* y la reja cae a UNA columna — mientras que los bordes siguen siendo  */
/* los de la reja de dos (`nth-child(2n)` sin filete derecho, y filete  */
/* inferior solo en los que no son de la ultima pareja).                */
/*                                                                      */
/* El resultado eran dos filetes verticales colgando a la derecha de    */
/* las tarjetas 1 y 3, y separadores solo bajo las dos primeras. Se le  */
/* dan las dos columnas que el tema ya declara para su propia banda, y  */
/* asi los bordes vuelven a cuadrar.                                    */
/* ------------------------------------------------------------------ */
@media (max-width: 560px) {
	.elementor.elementor .ld-fichas.e-con {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

/* ------------------------------------------------------------------ */
/* Selector de idioma.                                                  */
/*                                                                      */
/* Dos rotulos, EN / ES, con el mismo tratamiento que el menu. El del   */
/* idioma activo va en tinta plena; el otro, apagado. No es un          */
/* desplegable: con dos idiomas, un desplegable es un clic de mas.      */
/* ------------------------------------------------------------------ */
/* ==================================================================== */
/* Selector de idioma: interruptor de dos posiciones                    */
/* ==================================================================== */

/*
 * Antes eran dos rotulos separados por una barra, y el que no estaba
 * puesto iba al 52% de opacidad: sobre la foto del hero no se leia. Ahora
 * es un interruptor con carril y pastilla, y el idioma activo va en solido
 * invertido, que es lo unico que se lee igual de bien sobre foto, sobre
 * azul y sobre blanco.
 *
 * Los dos colores se declaran aqui y la cabecera los cambia segun este
 * sobre el hero o ya fija sobre fondo claro.
 */
.ld-idioma__grupo {
	--ld-sw-carril: color-mix(in srgb, currentColor 26%, transparent);
	/* 78% y no menos: al 66% el idioma apagado se quedaba en 3.9:1 sobre
	   la cabecera blanca, y esto es texto pequeno en versalitas. */
	--ld-sw-apagado: color-mix(in srgb, currentColor 78%, transparent);
	--ld-sw-fondo: var(--ld-ink);
	--ld-sw-texto: var(--ld-cream);

	display: inline-flex;
	align-items: center;
	gap: 2px;
	padding: 3px;
	border: 1px solid var(--ld-sw-carril);
	border-radius: 999px;
	font-family: var(--ld-body);
	font-size: 0.68rem;
	font-weight: 600;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	white-space: nowrap;
	line-height: 1;
}

/* Tres clases porque el kit de Elementor pinta todos los <a> con
   `.elementor-kit-4 a` y con dos empataria. */
/*
 * Elementor pone `padding:13px 20px` a TODO <a> del menu principal, no solo
 * a los .elementor-item, y su variante :hover/:focus tiene especificidad
 * (0,3,1), que le gana a una regla de tres clases (0,3,0). Resultado: al
 * pasar el raton la pastilla del idioma se hinchaba de 31x29 a 55x46 px y
 * sobre la foto del hero eso se veia como un recuadro raro. Hay que
 * repetir el selector en las cuatro variantes suyas para ganarle.
 */
.ld-idioma .ld-idioma__grupo .ld-idioma__op,
.ld-idioma .ld-idioma__grupo .ld-idioma__op:hover,
.ld-idioma .ld-idioma__grupo .ld-idioma__op:focus,
.ld-idioma .ld-idioma__grupo .ld-idioma__op.highlighted {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 2.6em;
	padding: 0.42em 0.72em;
	border-radius: 999px;
	color: var(--ld-sw-apagado);
	text-decoration: none;
	/*
	 * Solo el color. Animar tambien background-color hacia que Chrome
	 * promocionara la pastilla a capa propia al pasar el raton, y en esa
	 * capa repintaba el backdrop-filter de la cabecera: sobre la foto del
	 * hero aparecia un rectangulo borroso de bordes duros alrededor del
	 * interruptor. El fondo ademas solo cambia al cambiar de idioma, que
	 * es una recarga: no habia nada que animar.
	 */
	transition: color var(--ld-t-rapida) var(--ld-ease);
}

.ld-idioma .ld-idioma__grupo .ld-idioma__op:hover,
.ld-idioma .ld-idioma__grupo .ld-idioma__op:focus-visible { color: inherit; }

.ld-idioma .ld-idioma__grupo .ld-idioma__op.is-actual {
	background: var(--ld-sw-fondo);
	color: var(--ld-sw-texto);
}

/* El cerco de foco por fuera del carril, que si va por dentro lo tapa la
   pastilla del idioma activo. */
.ld-idioma .ld-idioma__grupo .ld-idioma__op:focus-visible {
	outline: 2px solid var(--ld-foco);
	outline-offset: 3px;
}

/* Sobre el hero la cabecera va en marfil: la pastilla se invierte para
   que el idioma puesto sea el trozo mas claro de la fila. */
.ld-cabecera--sobre-hero:not(.is-fija) .ld-idioma__grupo {
	--ld-sw-fondo: var(--ld-cream);
	--ld-sw-texto: var(--ld-ink);
}

@media (max-width: 1024px) {
	/* En el menu movil, que es una lista a pantalla completa, el
	   interruptor se separa del resto para que no parezca otra pagina. */
	.ld-menu-movil .ld-idioma,
	.ld-header-nav .ld-idioma {
		margin-top: 0.9rem;
		padding-top: 1rem;
		border-top: 1px solid color-mix(in srgb, currentColor 18%, transparent);
	}

	.ld-idioma__grupo { font-size: 0.74rem; }

	/* En pantalla tactil cada posicion tiene que ser un blanco de dedo:
	   con el tamano de escritorio quedaban en 30px de alto. */
	.ld-idioma .ld-idioma__grupo .ld-idioma__op,
	.ld-idioma .ld-idioma__grupo .ld-idioma__op:hover,
	.ld-idioma .ld-idioma__grupo .ld-idioma__op:focus,
	.ld-idioma .ld-idioma__grupo .ld-idioma__op.highlighted {
		min-width: 3.4em;
		min-height: 44px;
		padding: 0 0.9em;
	}
}


/* ==================================================================== */
/* Buscador: reventa u obra nueva                                       */
/* ==================================================================== */

/*
 * Un solo formulario sirve a los dos catalogos. El selector va en pastilla
 * partida, no en desplegable: son dos opciones y las dos tienen que verse
 * a la vez, porque muchos visitantes no saben todavia cual de las dos
 * quieren.
 */
.ld-filtro--catalogo {
	display: inline-flex;
	flex: 0 0 auto;
	gap: 2px;
	padding: 4px;
	border-radius: 999px;
	background: color-mix(in srgb, var(--ld-ink) 5%, var(--ld-papel));
}

.ld-catalogo__op {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	padding: 0 1.35rem;
	border-radius: 999px;
	font-family: var(--ld-body);
	font-size: 0.9rem;
	font-weight: 400;
	line-height: 1;
	color: var(--ld-tinta-72);
	white-space: nowrap;
	cursor: pointer;
	transition: background-color var(--ld-t-rapida) var(--ld-ease),
		color var(--ld-t-rapida) var(--ld-ease);
}

/* El radio sigue en el documento para el teclado y el lector de pantalla;
   lo que se ve es la pastilla. */
.ld-catalogo__op input {
	position: absolute;
	width: 1px; height: 1px;
	margin: -1px;
	padding: 0;
	border: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
}

.ld-catalogo__op:hover { color: var(--ld-ink); }

.ld-catalogo__op:has(input:checked) {
	background: var(--ld-accent);
	color: var(--ld-blanco);
}

.ld-catalogo__op:has(input:focus-visible) {
	outline: 2px solid var(--ld-foco);
	outline-offset: 2px;
}

/* Casilla suelta (CONFOTUR): misma altura que las pastillas para que la
   barra no se descuadre. */
.ld-filtro--casilla {
	display: inline-flex;
	flex: 0 0 auto;
	align-items: center;
	min-height: 52px;
}

.ld-filtro--casilla label {
	display: inline-flex;
	align-items: center;
	gap: 0.6rem;
	padding: 0 1.35rem;
	min-height: 52px;
	border-radius: 999px;
	background: color-mix(in srgb, var(--ld-ink) 5%, var(--ld-papel));
	font-size: 0.95rem;
	font-weight: 300;
	color: var(--ld-ink);
	white-space: nowrap;
	cursor: pointer;
}

.ld-filtro--casilla label:hover { background: color-mix(in srgb, var(--ld-ink) 9%, var(--ld-papel)); }

.ld-filtro--casilla input { width: 1.05rem; height: 1.05rem; accent-color: var(--ld-accent); }

/* Un filtro que no aplica al catalogo elegido se va del todo: dejarlo
   apagado a la vista solo genera preguntas. */
.ld-filtros [data-ld-para][hidden] { display: none !important; }

@media (max-width: 760px) {
	.ld-filtro--catalogo { width: 100%; justify-content: stretch; }
	.ld-catalogo__op { flex: 1 1 50%; }
	.ld-filtro--casilla,
	.ld-filtro--casilla label { width: 100%; }
}

/*
 * La banda del buscador en la portada. Va pegada a la tira de cifras y
 * antes de la seleccion de la semana: es el primer sitio donde el visitante
 * puede hacer algo, asi que respira por arriba y por abajo pero no llega a
 * separarse en una seccion aparte.
 */
.e-con.ld-buscar-banda {
	padding-top: clamp(1.75rem, 3.5vw, 2.75rem);
	padding-bottom: clamp(1.75rem, 3.5vw, 2.75rem);
}

.ld-buscar-banda .ld-filtros-caja { margin: 0; }

@media (max-width: 760px) {
	.e-con.ld-buscar-banda {
		padding-top: clamp(1.25rem, 5vw, 2rem);
		padding-bottom: clamp(1.25rem, 5vw, 2rem);
	}
}


/* ==================================================================== */
/* Filtrado en vivo                                                     */
/* ==================================================================== */

/*
 * Mientras llegan los resultados el bloque se apaga un poco y deja de
 * aceptar clics. Nada de girar ruedas: la espera es de unos cientos de
 * milisegundos y un indicador que aparece y desaparece marea mas de lo
 * que informa.
 */
.elementor-widget-lducos-grid .elementor-widget-container.is-cargando,
.elementor-widget-shortcode .elementor-widget-container.is-cargando,
[data-ld-proyectos].is-cargando {
	opacity: 0.5;
	pointer-events: none;
	transition: opacity var(--ld-t-rapida) var(--ld-ease);
}

@media (prefers-reduced-motion: reduce) {
	.elementor-widget-lducos-grid .elementor-widget-container.is-cargando,
	.elementor-widget-shortcode .elementor-widget-container.is-cargando,
	[data-ld-proyectos].is-cargando {
		transition: none;
	}
}


/* Credito de quien hizo la web: al final de la linea del pie, en el mismo
   tono apagado que el resto de esa barra para que no compita con la marca
   de Luz. */
.ld-pie__credito,
.ld-pie__credito > .elementor-heading-title {
	font-family: var(--ld-body);
	font-size: 0.72rem;
	font-weight: 400;
	letter-spacing: 0.04em;
	line-height: 1.5;
	text-transform: none;
	margin: 0;
}

.ld-pie__credito { margin-left: auto; }

.elementor.elementor .ld-pie__credito a {
	color: color-mix(in srgb, var(--ld-cream) 62%, transparent);
	text-decoration: none;
	border-bottom: 1px solid transparent;
	transition: color 0.3s ease, border-color 0.3s ease;
}

.elementor.elementor .ld-pie__credito a:hover,
.elementor.elementor .ld-pie__credito a:focus-visible {
	color: var(--ld-cream);
	border-bottom-color: color-mix(in srgb, var(--ld-cream) 45%, transparent);
}

@media (max-width: 760px) {
	/* Apilado, el margen automatico deja un hueco raro. */
	.ld-pie__credito { margin-left: 0; }
}

/* ------------------------------------------------------------------ */
/* Enlace con el tratamiento de las notas del diario.                   */
/*                                                                      */
/* Dentro de un bloque de prosa una pastilla rellena pesa demasiado:    */
/* corta la lectura en vez de continuarla. Este modificador le da al    */
/* boton de Elementor el mismo aspecto que el "seguir leyendo" de News  */
/* (.ld-nota__mas): rotulo en versalitas con una linea debajo, que pasa */
/* al color de acento al apuntarlo. Sigue siendo un widget de boton,    */
/* asi que el texto y el destino se cambian desde Elementor, y cambiar  */
/* la clase por ld-btn--acento lo devuelve a pastilla.                  */
/* ------------------------------------------------------------------ */
.elementor.elementor .ld-btn--nota .elementor-button {
	min-height: 0;
	padding: 0 0 0.3rem;
	border: 0;
	border-bottom: 1px solid color-mix(in srgb, var(--ld-ink) 30%, transparent);
	border-radius: 0;
	background: none;
	font-family: var(--ld-body);
	font-size: 0.72rem;
	font-weight: 500;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--ld-ink);
	text-indent: 0;
	transition: color 0.3s ease, border-color 0.3s ease;
}

/* El relleno que sube en hover es de la pastilla; aqui estorba. */
.elementor.elementor .ld-btn--nota .elementor-button::before {
	content: none;
}

.elementor.elementor .ld-btn--nota .elementor-button:hover,
.elementor.elementor .ld-btn--nota .elementor-button:focus-visible {
	background: none;
	color: var(--ld-accent);
	border-bottom-color: var(--ld-accent);
}

/* Separacion del parrafo anterior, como la nota del diario. */
.ld-btn--nota { margin-top: 1.15rem; }

/* ------------------------------------------------------------------ */
/* Video de fondo del hero.                                             */
/*                                                                      */
/* La foto sigue dentro del contenedor y NO se quita: es la que pinta   */
/* primero (con srcset y texto alternativo), la que ve el movil -donde  */
/* Elementor no arranca el video- y la que queda cuando se pide menos   */
/* animacion. El video se monta encima como una capa mas.               */
/*                                                                      */
/* El 0.5 de opacidad no es decorativo: es el mismo que lleva la foto.  */
/* Sin el, un aereo con arena blanca y cielo abierto sube tanto el      */
/* fondo que el titular blanco se queda sin contraste.                  */
/* ------------------------------------------------------------------ */
/*
 * Elementor pone la foto de reserva como background del contenedor, y el
 * widget de imagen ya pinta esa misma foto. Con el video encima al 50% se
 * veian las dos superpuestas y el hero salia lavado. Sobra el background:
 * la etiqueta <img> cubre todos los casos y ademas trae srcset y alt.
 */
.ld-hero__media { background-image: none !important; }

.ld-hero__media .elementor-background-video-container {
	position: absolute;
	inset: 0;
	z-index: 1;
	overflow: hidden;
	pointer-events: none;
	/* Entra cuando hay fotogramas que ensenar, no antes: si no, el primer
	   segundo es un hueco oscuro donde deberia estar la portada. */
	opacity: 0;
	transition: opacity 0.9s ease;
}

.ld-hero__media.ld-video-listo .elementor-background-video-container { opacity: 1; }

/* La foto se retira a la vez que entra el video. Las dos van al 50%, asi
   que mientras se cruzan la suma se mantiene y no hay parpadeo. */
.ld-hero__media .elementor-widget-image { transition: opacity 0.9s ease; }
.ld-hero__media.ld-video-listo .elementor-widget-image { opacity: 0; }

.ld-hero__media .elementor-background-video-container video,
.ld-hero__media video.elementor-background-video-hosted {
	width: 100%;
	height: 100%;
	max-width: none;
	object-fit: cover;
	/*
	 * A color pleno, no al 50%. Con media opacidad el video se mezclaba con
	 * el azul del fondo y se veia lavado: se perdia justo lo que lo hace
	 * valer, que es el color del agua y del amanecer. El contraste del
	 * titular se recupera reforzando el velo, abajo, en vez de apagando la
	 * imagen.
	 */
	opacity: 1;
}

/*
 * Velo mas denso SOLO mientras se ve el video.
 *
 * El perfil suave (12% en el centro) esta medido para los renders de las
 * otras portadas y ahi funciona; si se sube para todos, aplasta el cielo de
 * cada render. Por eso va atado a .ld-video-listo, que es la clase que marca
 * que el video esta en marcha, y el scrim es hermano posterior del media.
 *
 * El 34% no es un numero al azar: con el video a opacidad 1, deja el parrafo
 * del hero en 4.6:1 en el decimo de segundos mas luminoso del video y en
 * 6.2:1 el resto del tiempo. El minimo exigible para texto normal es 4.5:1.
 */
.ld-hero__media.ld-video-listo ~ .ld-hero__scrim {
	background:
		linear-gradient(180deg, rgb(11 32 39 / 58%) 0%, rgb(11 32 39 / 34%) 34%, rgb(11 32 39 / 88%) 100%);
}

/*
 * Mismo velo cuando el fondo viene de YouTube. Ahi Elementor no pone un
 * <video>: deja un div vacio y le mete el iframe por JavaScript, calculando
 * el tamano para que cubra. El encuadre lo deja Elementor; aqui solo va la
 * opacidad, que es lo que mantiene legible el titular blanco.
 */
.ld-hero__media .elementor-background-video-embed,
.ld-hero__media .elementor-background-video-container iframe {
	opacity: 1;
	border: 0;
	pointer-events: none;
}

/* Menos animacion: se queda la foto, que dice lo mismo sin moverse. */
@media (prefers-reduced-motion: reduce) {
	.ld-hero__media .elementor-background-video-container { display: none !important; }
}

/* ------------------------------------------------------------------ */
/* Portada alternativa: el hero limpio y el texto debajo.               */
/*                                                                      */
/* Mismos tamanos y mismo ancho de linea que en el hero: se conserva    */
/* .ld-hero__inner y aqui solo cambia la alineacion. Hace falta         */
/* !important porque la regla que pega el texto a la izquierda ya lo    */
/* lleva.                                                               */
/*                                                                      */
/* Fuera del hero el texto deja de heredar el blanco y pasa al color    */
/* normal de la pagina, que es lo que se quiere: ninguno de estos       */
/* widgets tiene color propio.                                          */
/* ------------------------------------------------------------------ */
.elementor.elementor .ld-intro-centrada.e-con {
	align-items: center !important;
	text-align: center;
	padding-block: clamp(2.75rem, 5vw, 4.5rem) 0;
}

.ld-intro-centrada .ld-hero__texto {
	margin-inline: auto;
	/*
	 * .ld-hero__texto va en blanco al 78% porque esta pensado para ir
	 * sobre la fotografia. Aqui el bloque esta fuera del hero, sobre el
	 * papel: sin esto el parrafo quedaba en blanco sobre blanco, invisible,
	 * y entre el titulo y los botones solo se veia un hueco.
	 */
	color: var(--ld-texto);
}

.elementor.elementor .ld-intro-centrada .ld-hero__acciones.e-con {
	justify-content: center;
}

/* Variante sin botones: el aire de abajo lo daban ellos, asi que el bloque
   lo pone por su cuenta. Sin esto el parrafo queda pegado a la banda de
   cifras que viene despues. */
.elementor.elementor .ld-intro-centrada--sola.e-con {
	padding-block-end: clamp(2.25rem, 4vw, 3.5rem);
}

/* ------------------------------------------------------------------ */
/* Hero sin texto encima: el video, limpio.                             */
/*                                                                      */
/* Cuando el titular y los botones bajan debajo del hero, el velo deja  */
/* de tener trabajo... salvo arriba: el logo y el menu siguen yendo en  */
/* blanco sobre el video, y esa franja es la mas clara de todas         */
/* -mediana 149 y hasta 222 en los planos de playa-. Sin nada de velo   */
/* el menu se queda en 2.2:1 de contraste, y en 1.3:1 en los momentos   */
/* mas luminosos: desaparece.                                           */
/*                                                                      */
/* Asi que el degradado se concentra arriba, donde hace falta, y a      */
/* partir de un tercio de altura no queda nada: el video se ve tal      */
/* cual. Con 50% a la altura de la cabecera el menu queda en 4.9:1.     */
/* ------------------------------------------------------------------ */
.ld-hero--limpio .ld-hero__scrim,
.ld-hero--limpio .ld-hero__media.ld-video-listo ~ .ld-hero__scrim {
	background:
		linear-gradient(
			180deg,
			rgb(11 32 39 / 62%) 0%,
			rgb(11 32 39 / 50%) 14%,
			rgb(11 32 39 / 14%) 26%,
			rgb(11 32 39 / 0%) 38%,
			rgb(11 32 39 / 0%) 100%
		);
}

/* ------------------------------------------------------------------ */
/* Hero limpio: menos velo todavia.                                     */
/*                                                                      */
/* El degradado de arriba seguia notandose como una banda oscura. Baja  */
/* de 62/50% a 36/24% y se apaga al 30% de altura, asi que practicamente*/
/* todo el hero es video puro.                                          */
/*                                                                      */
/* Lo que antes hacia el velo lo hace ahora una sombra en el propio     */
/* texto: con el logo y el menu en blanco sobre arena y cielo, la sombra*/
/* crea el contraste justo donde hace falta -alrededor de cada letra-   */
/* en vez de oscurecer la imagen entera.                                */
/* ------------------------------------------------------------------ */
.ld-hero--limpio .ld-hero__scrim,
.ld-hero--limpio .ld-hero__media.ld-video-listo ~ .ld-hero__scrim {
	background:
		linear-gradient(
			180deg,
			rgb(11 32 39 / 36%) 0%,
			rgb(11 32 39 / 24%) 12%,
			rgb(11 32 39 / 8%) 22%,
			rgb(11 32 39 / 0%) 30%,
			rgb(11 32 39 / 0%) 100%
		);
}

.ld-hero-limpio .ld-cabecera--sobre-hero .ld-marca__img {
	filter: drop-shadow(0 1px 2px rgb(0 0 0 / 55%)) drop-shadow(0 0 12px rgb(0 0 0 / 40%));
}

.ld-hero-limpio .ld-cabecera--sobre-hero .ld-header-nav .elementor-item,
.ld-hero-limpio .ld-cabecera--sobre-hero .ld-idioma__op,
.ld-hero-limpio .ld-cabecera--sobre-hero .ld-menu-toggle {
	text-shadow: 0 1px 2px rgb(0 0 0 / 60%), 0 0 12px rgb(0 0 0 / 40%);
}
