/* =====================================================================
   public.css — Sitio público
   Paleta profesional minimalista para inmobiliaria:
   - Navy profundo (confianza, elegancia) como color base.
   - Latón/oro apagado como acento (premium, cálido, no estridente).
   - Crema cálida de fondo (menos frío que un blanco puro).
   Tipografía: Manrope (moderna, geométrica, legible).
   Mobile-first; se realza en breakpoints mayores.
   ===================================================================== */

:root {
    --navy:        #152238;
    --navy-700:    #1e3050;
    --navy-500:    #2a4066;
    --accent:      #c6a15b;
    --accent-600:  #b58f47;
    --ink:         #1c2430;
    --muted:       #5d6673;   /* gris secundario con mejor contraste */
    --cream:       #f7f5f1;
    --surface:     #ffffff;
    --line:        #e7e3db;
    --shadow:      0 6px 24px rgba(21, 34, 56, .08);
    --shadow-lg:   0 14px 40px rgba(21, 34, 56, .14);
    --radius:      14px;
}

* { box-sizing: border-box; }

body {
    font-family: 'Manrope', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
    color: var(--ink);
    background: var(--cream);
    margin: 0;
    line-height: 1.6;
    /* Peso medio como base: Manrope en 400 se ve muy delgada; con 500
       los párrafos y datos se leen con presencia (los pesos 400-800
       vienen cargados desde theme_head). */
    font-weight: 500;
}

h1, h2, h3, h4 { font-weight: 800; letter-spacing: -.01em; color: var(--navy); }

/* Enlaces: color primario sobre fondo claro (el blanco sobre fondo oscuro
   se define en cada sección oscura: footer, breadcrumb de resultados, etc.).
   Los links con color propio (menú, marca, tarjetas) mandan por especificidad. */
a { color: var(--accent); text-decoration: none; }
a:hover { color: var(--accent-600); }

.text-accent { color: var(--accent) !important; }

/* ------------------------- Botones ------------------------- */
/* Todos los botones del sitio con esquinas cuadradas */
.btn, .btn-accent, .btn-whatsapp, .hero-search__btn, .btn-action,
.page-link, .services-cta__contact { border-radius: 0 !important; }

.btn-accent {
    background: var(--accent);
    border: 1px solid var(--accent);
    color: #fff;
    font-weight: 600;
    padding: .55rem 1.15rem;
    transition: background .15s ease, transform .15s ease;
}
.btn-accent:hover, .btn-accent:focus { background: var(--navy); border-color: var(--navy); color: #fff; transform: translateY(-1px); }

/* Sin scroll horizontal: los elementos animados con translateX (reveal
   de fotos) y decorativos no deben ensanchar la página en móvil.
   Se usa `clip` y NO `hidden` porque hidden rompería el position:sticky
   del header (clip recorta sin crear contenedor de scroll). */
html, body { overflow-x: clip; }

/* Reserva SIEMPRE el ancho de la barra de scroll: así, al abrir un modal
   (lightbox de la galería) la página no se reajusta ni queda hueco. */
html { scrollbar-gutter: stable; }

/* Bootstrap, al abrir un modal, agrega padding-right al <body> para
   compensar la barra que oculta. Con scrollbar-gutter estable ya no hace
   falta y ese padding aparecía como una FRANJA BLANCA a la derecha detrás
   del lightbox. Se anula (también en los elementos fijos que Bootstrap
   ajusta). */
body.modal-open { padding-right: 0 !important; }
.fixed-top, .fixed-bottom, .sticky-top { padding-right: 0 !important; }

/* ------------------------- Header -------------------------- */
.site-header {
    position: sticky;
    top: 0;
    z-index: 1030;
    background: #fff;
    /* Sin backdrop-filter: el fondo es opaco (el blur no se vería) y es
       muy costoso en scroll al ser un header sticky. */
    border-bottom: 1px solid var(--line);
}
.site-header .navbar-brand { color: var(--navy); font-size: 1.25rem; }

/* Logo con tamaño controlable por variables (se definen inline en el
   <header> desde site_settings): normal, sticky y móvil. */
.site-header .site-logo {
    height: var(--logo-h, 40px);
    width: auto;
    display: block;
    transform-origin: left center;
    /* Se anima con transform (GPU) — suave y SIN reflow de layout. */
    transition: transform .25s ease;
}
/* Estado "sticky": el logo encoge (transform, no height) y aparece la
   sombra. El header NO cambia de altura -> cero reflujo -> 100% fluido. */
.site-header { transition: box-shadow .25s ease; }
.site-header.is-scrolled { box-shadow: 0 2px 14px rgba(21,34,56,.10); }
.site-header.is-scrolled .site-logo { transform: scale(var(--logo-scale, .8)); }

/* En móvil el logo usa su propio tamaño y no encoge al scrollear. */
@media (max-width: 991.98px) {
    .site-header .site-logo,
    .site-header.is-scrolled .site-logo { height: var(--logo-h-mobile, 34px); }
    .site-header.is-scrolled .site-logo { transform: none; }
}
.site-header .nav-link { color: var(--ink); font-weight: 700; padding-inline: .85rem; transition: color .15s ease; }
.site-header .nav-link:hover, .site-header .nav-link:focus { color: var(--accent); }
/* Página actual: color de acento + subrayado sutil (sin mover el layout) */
.site-header .nav-link.active {
    color: var(--accent);
    font-weight: 800;
    text-decoration: underline;
    text-underline-offset: 7px;
    text-decoration-thickness: 2px;
}

/* Dropdown de tipos de propiedad: se abre al hacer hover en desktop */
@media (min-width: 992px) {
    .site-header .dropdown:hover > .dropdown-menu { display: block; margin-top: 0; }
    .site-header .dropdown-menu { border-top: 2px solid var(--accent); border-radius: 0 0 6px 6px; }
}

/* Iconos de redes sociales en el header: círculos con borde fino que
   se rellenan del color de acento al hover (look premium). */
.nav-social { gap: .6rem; }
@media (min-width: 992px) {
    .nav-social { border-left: 1px solid rgba(0, 0, 0, .1); }
}
.social-nav-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 50%;
    border: 1.5px solid var(--line);
    color: var(--navy);
    font-size: 1.05rem;
    line-height: 1;
    transition: color .2s, background .2s, border-color .2s, transform .2s, box-shadow .2s;
}
.social-nav-icon:hover {
    color: #fff;
    background: var(--accent);
    border-color: var(--accent);
    transform: translateY(-2px);
    box-shadow: 0 6px 16px rgba(0, 0, 0, .18);
}

/* ---- Menú móvil desplegado: diseño limpio y moderno ---- */
@media (max-width: 991.98px) {
    .site-header .navbar-collapse {
        padding: .5rem .25rem 1.15rem;
        margin-top: .5rem;
        border-top: 1px solid var(--line);
    }
    .site-header .navbar-nav .nav-link {
        font-size: 1.06rem;
        padding: .85rem .25rem;
    }
    /* Separadores finos entre ítems */
    .site-header .navbar-nav > .nav-item + .nav-item { border-top: 1px solid var(--line); }
    /* Submenú de tipos: panel suave, sin sombra de dropdown */
    .site-header .dropdown-menu {
        border: 0;
        box-shadow: none;
        background: #f7f5f1;
        border-radius: 10px;
        margin: 0 0 .75rem;
        padding: .35rem 0;
    }
    .site-header .dropdown-item { padding: .6rem 1.25rem; }
    /* Redes: fila de círculos con aire */
    .nav-social { padding: 1rem .25rem .35rem; gap: .75rem; }
    .nav-social .social-nav-icon { width: 44px; height: 44px; font-size: 1.2rem; }
    /* Botón "Vende tu propiedad": ancho completo, redondeado */
    .nav-sell { padding-top: .85rem; border-top: 0 !important; }
    .nav-sell .btn {
        display: flex;
        justify-content: center;
        width: 100%;
        padding: .75rem 1rem;
        font-size: 1rem;
    }
}

/* Menú hamburguesa (móvil): 3 barras gruesas redondeadas en color
   primario, con la central más corta (asimétrica). Al tocar/hover la
   central se completa; con el menú ABIERTO se transforma en una X
   (Bootstrap alterna aria-expanded en el botón). Dibujado con CSS
   (no el SVG de Bootstrap) para respetar el tema. */
.site-header .navbar-toggler {
    border: 0;
    padding: .55rem .4rem;
    box-shadow: none;
    line-height: 0;
}
.site-header .navbar-toggler:focus,
.site-header .navbar-toggler:active { box-shadow: none; outline: 0; }
.site-header .navbar-toggler-icon {
    background-image: none;   /* quita el icono SVG por defecto */
    width: 34px;
    height: 4px;
    position: relative;
    background: var(--accent);
    border-radius: 99px;
    transition: transform .3s ease, background .2s ease;
}
.site-header .navbar-toggler-icon::before,
.site-header .navbar-toggler-icon::after {
    content: '';
    position: absolute;
    left: 0;
    width: 34px;
    height: 4px;
    background: var(--accent);
    border-radius: 99px;
    transition: transform .3s ease, opacity .2s ease;
}
.site-header .navbar-toggler-icon::before { top: -10px; }
.site-header .navbar-toggler-icon::after  { top:  10px; }

/* Menú abierto: morph a X (giran la barra central y la de arriba;
   la de abajo se desvanece) */
.site-header .navbar-toggler[aria-expanded="true"] .navbar-toggler-icon {
    transform: rotate(45deg);
}
.site-header .navbar-toggler[aria-expanded="true"] .navbar-toggler-icon::before {
    transform: translateY(10px) rotate(-90deg);
}
.site-header .navbar-toggler[aria-expanded="true"] .navbar-toggler-icon::after {
    opacity: 0;
    transform: translateX(8px);
}

/* -------------------------- Hero --------------------------- */
/* fondo transparente: evita la "franja oscura"; el tramo bajo la imagen
   queda sobre el fondo crema de la página */
.hero { position: relative; color: #fff; }

@keyframes hero-zoom {
    from { transform: scale(1); }
    to   { transform: scale(1.09); }
}

/* Fundido de entrada de los heros estáticos (mismo efecto que el
   banner de Testimonios). Solo anima la opacidad: con
   prefers-reduced-motion la animación se anula y la foto queda
   visible (opacidad base = 1). */
@keyframes hero-fade {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Cada slide del carrusel: fondo (imagen/video/gradiente) + overlay + texto */
.hero__slide {
    position: relative;
    min-height: calc(62vh - 8px);
    display: flex;
    align-items: center;
    overflow: hidden;
    background: linear-gradient(135deg, var(--navy) 0%, var(--navy-500) 100%);
    background-size: cover;
    background-position: center;
}
.hero__slide[style*="--hero-img"] { background-image: none; }
.hero__slide[style*="--hero-img"]::before {
    content: '';
    position: absolute; inset: 0;
    background-image: var(--hero-img);
    background-size: cover;
    background-position: center;
    animation: hero-zoom 10s ease-in-out infinite alternate;
    z-index: 0;
}
.hero__video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
/* Oscurece a la izquierda (para el texto) y abajo (para el buscador),
   dejando ver la imagen en el centro. */
.hero__overlay {
    position: absolute;
    inset: 0;
    z-index: 1;
    background:
        linear-gradient(90deg, rgba(15,24,42,.72) 0%, rgba(15,24,42,.28) 55%, rgba(15,24,42,.10) 100%),
        linear-gradient(180deg, rgba(15,24,42,0) 45%, rgba(15,24,42,.55) 100%);
}
/* padding-block (no horizontal) para conservar el margen lateral del .container */
.hero__text { position: relative; z-index: 2; width: 100%; padding-block: 3rem 6.5rem; }
.hero__eyebrow {
    display: inline-flex;
    align-items: center;
    color: var(--accent);
    font-weight: 700;
    font-size: .78rem;
    letter-spacing: .18em;
    text-transform: uppercase;
    margin-bottom: 1.1rem;
}
.hero__eyebrow::before {
    content: "";
    width: 30px; height: 2px;
    background: var(--accent);
    margin-right: .7rem;
}
.hero__title {
    color: #fff;
    font-size: clamp(2rem, 4.6vw, 3.4rem);
    font-weight: 800;
    line-height: 1.08;
    letter-spacing: -.01em;
    max-width: 26ch;
    margin-bottom: 1rem;
    text-shadow: 0 2px 24px rgba(0,0,0,.28);
}
.hero__subtitle {
    color: rgba(255, 255, 255, .9);
    font-size: clamp(1rem, 1.6vw, 1.22rem);
    max-width: 50ch;
    margin-bottom: 0;
    text-shadow: 0 1px 14px rgba(0,0,0,.3);
}

/* Flechas e indicadores del carrusel */
.hero__carousel .carousel-control-prev,
.hero__carousel .carousel-control-next { width: 6%; z-index: 3; }
.hero__carousel .carousel-indicators { bottom: 6rem; z-index: 3; margin-bottom: 0; }

/* Buscador montado SOBRE el borde inferior del hero: su centro cae en la
   línea de abajo (mitad sobre la imagen, mitad sobre el crema), centrado. */
.hero__search-wrap {
    position: absolute;
    left: 0; right: 0; bottom: 0;
    transform: translateY(50%);
    z-index: 4;
    padding: 0 1rem;
}
.hero__search-wrap .hero-search { margin-left: auto; margin-right: auto; }
/* La sección siguiente baja para dejar aire bajo el buscador que sobresale */
.hero + section { padding-top: 8rem; }

/* Buscador — tarjeta flotante premium (efecto vidrio) */
.hero-search {
    display: flex;
    align-items: stretch;
    background: #fff;
    border: 1px solid rgba(255, 255, 255, .6);
    border-radius: 0;
    box-shadow: 0 24px 60px rgba(15, 24, 42, .34);
    overflow: visible;               /* el menú del dropdown puede desbordar */
    max-width: 960px;
}
.hero-search__field {
    position: relative;
    flex: 1 1 0;
    min-width: 0;
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: .7rem 1.25rem;
    border-right: 1px solid var(--line);
    transition: background .15s ease;
}
.hero-search__field:focus-within { background: rgba(198, 161, 91, .08); }
.hero-search__label {
    font-size: .66rem;
    font-weight: 700;
    letter-spacing: .09em;
    text-transform: uppercase;
    color: var(--muted);
    margin-bottom: .1rem;
    pointer-events: none;
}

/* Dropdown personalizado (control total de estilo del menú) */
.hs-select { position: relative; }
.hs-select__trigger {
    width: 100%;
    border: 0;
    background: transparent;
    padding: 0;
    font-size: 1.02rem;
    font-weight: 600;
    color: var(--navy);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .6rem;
    cursor: pointer;
    text-align: left;
}
.hs-select__value { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hs-select__chevron { flex: 0 0 auto; color: var(--accent-600); font-size: .8rem; transition: transform .18s ease; }
.hs-select.is-open .hs-select__chevron { transform: rotate(180deg); }
.hs-select__list {
    position: absolute;
    top: calc(100% + .75rem);
    left: -1.25rem;
    min-width: calc(100% + 2.5rem);
    z-index: 60;
    margin: 0;
    padding: .4rem 0;
    list-style: none;
    background: #fff;
    border: 1px solid var(--line);
    box-shadow: 0 18px 44px rgba(15, 24, 42, .24);
    display: none;
}
.hs-select.is-open .hs-select__list { display: block; }
.hs-select__list--scroll { max-height: 320px; overflow-y: auto; }
.hs-select__opt {
    padding: .6rem 1.15rem;
    cursor: pointer;
    color: var(--navy);
    font-weight: 500;
    white-space: nowrap;
    transition: background .12s ease;
}
.hs-select__opt:hover { background: rgba(198, 161, 91, .14); }
.hs-select__opt.is-selected { background: rgba(21, 34, 56, .06); font-weight: 700; }
.hs-select__group {
    padding: .55rem 1.15rem .25rem;
    font-size: .7rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .05em;
    color: var(--muted);
}
.hero-search__btn {
    flex: 0 0 auto;
    border: 0;
    background: linear-gradient(135deg, var(--accent) 0%, var(--accent-600) 100%);
    color: #fff;
    font-weight: 700;
    font-size: 1.02rem;
    padding: 0 2.15rem;
    display: inline-flex;
    align-items: center;
    gap: .55rem;
    cursor: pointer;
    white-space: nowrap;
    transition: filter .15s ease;
}
.hero-search__btn:hover, .hero-search__btn:focus { filter: brightness(1.07); color: #fff; }

/* Tablet: hero más alto y protagonista */
@media (min-width: 768px) and (max-width: 991.98px) {
    .hero__slide { min-height: 70vh; }
}

@media (max-width: 767.98px) {
    /* Móvil: hero alto (svh descuenta la barra del navegador; el vh
       previo queda de fallback para navegadores antiguos) */
    .hero__slide { min-height: 68vh; min-height: 68svh; }
    .hero__text { padding-bottom: 3.5rem; }
    .hero__carousel .carousel-indicators { bottom: 4.5rem; }
    /* En móvil el buscador va en flujo (apilado es alto), un poco más arriba.
       position: relative (NO static) para que, al solaparse con el carrusel
       por el margin-top negativo, se pinte POR ENCIMA (respeta el z-index). */
    .hero__search-wrap {
        position: relative;
        transform: none;
        margin-top: -4.5rem;
    }
    .hero + section { padding-top: 4rem; }
    .hero-search { flex-direction: column; }
    /* más aire dentro de cada campo (se veía apretado) */
    .hero-search__field { border-right: 0; border-bottom: 1px solid var(--line); padding: 1.05rem 1.4rem; }
    .hero-search__label { margin-bottom: .25rem; }
    .hero-search__btn { padding: 1.05rem; justify-content: center; }
}

/* ------------------------ Secciones ------------------------ */
.section { padding: 3.5rem 0; }
.section--muted { background: #fff; border-block: 1px solid var(--line); }
/* Fondo arena suave (mismo tono que la 1ª franja de testimonios) */
.section--soft { background: #fbf7f0; border-block: 1px solid var(--line); }
.section__head { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; margin-bottom: 1.75rem; }
.section__title { font-size: clamp(1.4rem, 2.5vw, 1.9rem); margin: 0; }
.section__link { color: var(--accent-600); font-weight: 600; white-space: nowrap; }
.section__link:hover { color: var(--accent); }

/* --------------------- Tarjeta propiedad ------------------- */
@keyframes star-pulse {
    0%, 100% { transform: scale(1); }
    50%       { transform: scale(1.2); }
}

.property-card {
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    overflow: hidden;
    display: flex;
    flex-direction: column;
    transition: transform .18s ease, box-shadow .18s ease;
}
.property-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); }

.property-card__media {
    position: relative;
    display: block;
    aspect-ratio: 4 / 3;
    background: #eceae5;
    overflow: hidden;
}
.property-card__media img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .45s ease-out; }
.property-card:hover .property-card__media img { transform: scale(1.08); }
.property-card__placeholder { position: absolute; inset: 0; display: grid; place-items: center; color: #b9b4aa; font-size: 2rem; }

.property-card__overlay {
    position: absolute;
    bottom: 0; left: 0; right: 0;
    padding: 2.5rem 1rem .9rem;
    background: linear-gradient(to top, rgba(12,18,28,.75) 0%, transparent 100%);
    color: #fff;
    font-size: .88rem;
    font-weight: 600;
    letter-spacing: .02em;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .3rem;
    opacity: 0;
    transform: translateY(6px);
    transition: opacity .3s ease, transform .3s ease;
    pointer-events: none;
}
.property-card:hover .property-card__overlay {
    opacity: 1;
    transform: translateY(0);
}

.badge-op {
    position: absolute;
    top: .7rem; left: .7rem;
    font-size: .72rem;
    font-weight: 700;
    padding: .28rem .6rem;
    border-radius: 999px;
    color: #fff;
    text-transform: uppercase;
    letter-spacing: .03em;
}
.badge-op--venta { background: var(--navy); }
.badge-op--arriendo { background: var(--accent-600); }
.property-card__featured {
    position: absolute;
    top: .7rem; right: .7rem;
    font-size: .72rem;
    font-weight: 700;
    padding: .28rem .55rem;
    border-radius: 999px;
    background: rgba(255,255,255,.94);
    color: var(--accent-600);
}
.property-card__featured .bi-star-fill {
    display: inline-block;
    animation: star-pulse 2.4s ease-in-out infinite;
}

.property-card__body { padding: 1rem 1.1rem 1.15rem; display: flex; flex-direction: column; gap: .35rem; }
.property-card__price { color: var(--navy); font-weight: 800; font-size: 1.28rem; transition: color .2s ease; }
.property-card:hover .property-card__price { color: var(--accent-600); }
.property-card__title { font-size: 1.02rem; font-weight: 600; margin: 0; line-height: 1.3; }
.property-card__title a { color: var(--ink); }
.property-card__title a:hover { color: var(--accent-600); }
.property-card__location { color: var(--muted); font-size: .9rem; margin: 0; }
.property-card__location .bi { color: var(--accent-600); }

.property-card__specs {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: .5rem .9rem;
    margin: .55rem 0 0;
    padding: .65rem 0 0;
    border-top: 1px solid var(--line);
    font-size: .84rem;
    color: var(--muted);
}
.property-card__specs li { display: inline-flex; align-items: center; gap: .3rem; }
.property-card__specs .bi { color: var(--navy-500); }

/* --------------------- Tarjeta categoría ------------------- */
.category-card {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: .35rem;
    padding: 1.5rem 1rem;
    background: var(--cream);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    color: var(--ink);
    height: 100%;
    transition: transform .16s ease, border-color .16s ease, background .16s ease;
}
.category-card:hover { transform: translateY(-3px); border-color: var(--accent); background: #fff; }
.category-card__icon { font-size: 1.9rem; color: var(--accent-600); }
.category-card__name { font-weight: 700; color: var(--navy); }
.category-card__count { font-size: .82rem; color: var(--muted); }

/* --------------------- Estado vacío ------------------------ */
.empty-state { text-align: center; padding: 3rem 1rem; color: var(--muted); }
.empty-state .bi { font-size: 2.5rem; display: block; margin-bottom: .5rem; color: #c3bdb1; }

/* ------------------------ CTA band ------------------------- */
.cta-band {
    background: var(--navy);
    color: #fff;
    padding: 5rem 0;
    display: flex;
    align-items: center;
    position: relative;
    overflow: hidden;
}
/* Contenedor de slides (absoluto, cubre toda la banda) */
.cta-slides {
    position: absolute; inset: 0;
    z-index: 0;
}
/* Overlay oscuro sobre las imágenes para legibilidad */
.cta-slides::after {
    content: '';
    position: absolute; inset: 0;
    background: rgba(21,34,56,.60);
    z-index: 1;
}
/* Cada slide: invisible por defecto, transición suave */
.cta-slide {
    position: absolute; inset: 0;
    background-size: cover;
    background-position: center;
    opacity: 0;
    transition: opacity 1.4s ease;
    z-index: 0;
}
.cta-slide.is-active { opacity: 1; animation: hero-zoom 7s ease-out forwards; }
.cta-slide:not(.is-active) { animation: none; }
/* El contenido siempre encima del overlay */
.cta-band .container { position: relative; z-index: 2; }
.cta-band__title { color: #fff; font-size: clamp(1.5rem, 3vw, 2rem); }
.cta-band__text { color: rgba(255,255,255,.82); margin-bottom: 1.5rem; }

/* ------------------------- Contacto ------------------------ */
.contact-hero {
    background: linear-gradient(135deg, var(--navy) 0%, var(--navy-500) 100%);
    background-size: cover;
    background-position: center;
    display: flex;
    align-items: center;
    text-align: center;
    position: relative;
    overflow: hidden;
}
.contact-hero--image::before {
    content: '';
    position: absolute; inset: 0;
    background-image: var(--bhero);
    background-size: cover;
    background-position: center;
    animation: hero-fade 1.1s ease-out;
    z-index: 0;
}
.contact-hero--image::after {
    content: '';
    position: absolute; inset: 0;
    /* Intensidad configurable en el panel (--hero-overlay, 0 a .9) */
    background: rgba(21, 34, 56, var(--hero-overlay, .6));
    z-index: 1;
}
.contact-hero .container { position: relative; z-index: 2; }
.contact-hero h1,
.contact-hero p { color: #fff; }
.contact-hero h1 { text-shadow: 0 2px 8px rgba(0,0,0,.35); }
.contact-hero p  { opacity: .88; margin: 0; }

.contact-info-card {
    background: #fff;
    border: 1px solid #e8edf3;
    border-radius: 14px;
    padding: 2rem;
    box-shadow: 0 4px 24px rgba(21,34,56,.07);
    position: sticky;
    top: 80px;
}
.contact-icon-wrap {
    width: 44px; height: 44px; flex-shrink: 0;
    background: rgba(21,34,56,.07);
    color: var(--navy);
    border-radius: 10px;
    display: flex; align-items: center; justify-content: center;
    font-size: 1.1rem;
}
.contact-icon-wrap--wa { background: rgba(37,211,102,.12); color: #25d366; }
.contact-info-label {
    font-size: .7rem;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: #94a3b8;
    margin-bottom: .15rem;
}
.contact-info-value {
    color: var(--navy);
    font-weight: 600;
    text-decoration: none;
    font-size: .95rem;
    word-break: break-word;
}
.contact-info-value:hover { color: var(--accent); }
.contact-divider { border-color: #e8edf3; margin: 1.5rem 0 1.25rem; }
.contact-social-btn {
    display: inline-flex; align-items: center; justify-content: center;
    width: 40px; height: 40px; border-radius: 10px;
    background: #f1f5f9;
    color: var(--navy);
    font-size: 1.1rem;
    text-decoration: none;
    transition: background .2s, color .2s, transform .2s;
}
.contact-social-btn:hover {
    background: var(--navy);
    color: #fff;
    transform: translateY(-2px);
}

/* -------------------------- Footer ------------------------- */
.site-footer { background: var(--navy); color: rgba(255,255,255,.82); padding: 3rem 0 1.75rem; }
.site-footer h2, .site-footer h3 { color: #fff; }
.footer-title { color: rgba(255,255,255,.55); letter-spacing: .06em; font-size: .78rem; margin-bottom: .9rem; }
.footer-muted { color: rgba(255,255,255,.6); }
.footer-links { display: flex; flex-direction: column; gap: .5rem; margin: 0; }
.footer-links a { color: rgba(255,255,255,.82); }
.footer-links a:hover { color: var(--accent); }
.footer-divider { border-color: rgba(255,255,255,.14); margin: 2rem 0 1.25rem; }
.social-link {
    display: inline-grid; place-items: center;
    width: 38px; height: 38px;
    border-radius: 50%;
    background: rgba(255,255,255,.08);
    color: #fff;
    transition: background .15s ease, color .15s ease;
}
.social-link:hover { background: var(--accent); color: #fff; }

/* ======================= RESULTADOS ======================== */
.results-hero {
    background: var(--navy);
    background-size: cover;
    background-position: center;
    color: #fff;
    display: flex;
    align-items: center;
    padding: 2rem 0;
    position: relative;
    overflow: hidden;
}
.results-hero--image::before {
    content: '';
    position: absolute; inset: 0;
    background-image: var(--bhero);
    background-size: cover;
    background-position: center;
    animation: hero-fade 1.1s ease-out;
    z-index: 0;
}
.results-hero--image::after {
    content: '';
    position: absolute; inset: 0;
    background: rgba(21, 34, 56, var(--hero-overlay, .6));
    z-index: 1;
}
.results-hero .container { position: relative; z-index: 2; }
.results-breadcrumb { --bs-breadcrumb-divider-color: rgba(255,255,255,.4); margin-bottom: .5rem; }
.results-breadcrumb a { color: rgba(255,255,255,.75); }
.results-breadcrumb .active { color: #fff; }
.results-title { color: #fff; font-size: clamp(1.4rem, 3vw, 2rem); margin: 0; }
.results-count { color: rgba(255,255,255,.75); margin: .25rem 0 0; }

.results-layout { display: grid; grid-template-columns: 1fr; gap: 1.75rem; padding-block: 2rem; }
@media (min-width: 992px) { .results-layout { grid-template-columns: 300px 1fr; align-items: start; } }

.filters-card { background: #fff; border: 1px solid var(--line); border-radius: var(--radius); padding: 1.25rem; box-shadow: var(--shadow); }
@media (min-width: 992px) { .filters-card { position: sticky; top: 90px; } }
.filters-title { font-size: 1.05rem; margin-bottom: 1rem; }
.filters-card .form-label { font-size: .82rem; font-weight: 600; color: var(--navy); margin-bottom: .2rem; }
.filters-card fieldset legend { float: none; }
.filters-card .form-select:focus, .filters-card .form-control:focus { border-color: var(--accent); box-shadow: 0 0 0 .2rem rgba(198,161,91,.2); }

/* Barra superior de resultados: contador + selector de orden */
.results-toolbar {
    display: flex; align-items: center; justify-content: space-between;
    flex-wrap: wrap; gap: .75rem;
    margin-bottom: 1.25rem;
}
.results-toolbar__count { color: var(--muted); }
.results-toolbar__count strong { color: var(--navy); font-weight: 800; }
.results-sort { display: inline-flex; align-items: center; gap: .5rem; margin: 0; }
.results-sort__label { font-size: .85rem; font-weight: 600; color: var(--navy); white-space: nowrap; }
.results-sort .form-select { min-width: 160px; }
.results-sort .form-select:focus { border-color: var(--accent); box-shadow: 0 0 0 .2rem rgba(198,161,91,.2); }

/* Filtrado instantáneo: la región se atenúa mientras carga */
.results-main.is-loading { opacity: .5; pointer-events: none; transition: opacity .15s ease; }

.empty-state--card { background: #fff; border: 1px dashed var(--line); border-radius: var(--radius); }
.empty-state--card h1, .empty-state--card h2 { color: var(--navy); }

/* ==================== FICHA PROPIEDAD ======================= */
.property-page { padding-block: 1.5rem 3rem; }
.property-breadcrumb, .results-breadcrumb.property-breadcrumb { font-size: .88rem; }

/* Estado sin fotos */
.property-gallery { border-radius: var(--radius); overflow: hidden; background: #eceae5; position: relative; box-shadow: var(--shadow); }
.property-gallery--empty { aspect-ratio: 16/9; display: grid; place-items: center; color: #b9b4aa; font-size: 3rem; }

/* Galería estilo portal: foto grande a la izquierda + grilla 2x2 a la derecha */
.property-gallery-grid {
    --pg-gap: 8px;
    --pg-h: clamp(300px, 33vw, 420px);
    /* Lado del thumb = alto de una fila → miniaturas cuadradas.
       La foto principal ocupa el resto del ancho (1fr) = rectángulo horizontal. */
    --pg-thumb: calc((var(--pg-h) - var(--pg-gap)) / 2);
    display: grid;
    grid-template-columns: 1fr var(--pg-thumb) var(--pg-thumb);
    grid-template-rows: 1fr 1fr;
    gap: var(--pg-gap);
    height: var(--pg-h);
    border-radius: var(--radius);
    overflow: hidden;
    box-shadow: var(--shadow);
    background: #eceae5;
}
.pg-item { position: relative; display: block; padding: 0; border: 0; margin: 0; overflow: hidden; background: #eceae5; cursor: pointer; }
.pg-item img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .45s ease; }
.pg-item:hover img { transform: scale(1.05); }
.pg-main { grid-column: 1; grid-row: 1 / 3; }

/* Badges sobre la foto principal */
.pg-op { position: absolute; top: 1rem; left: 1rem; z-index: 2; }
.pg-count-badge {
    position: absolute; left: 1rem; bottom: 1rem; z-index: 2;
    display: inline-flex; align-items: center; gap: .4rem;
    background: rgba(0, 0, 0, .62); color: #fff;
    font-size: .82rem; font-weight: 600;
    padding: .4rem .75rem; border-radius: 6px;
}
/* Overlay "+N fotos" en la última miniatura visible */
.pg-more {
    position: absolute; inset: 0;
    display: grid; place-items: center;
    background: rgba(15, 24, 42, .55); color: #fff;
    font-weight: 700; font-size: 1.05rem; letter-spacing: .3px;
}

/* Ajustes según cantidad de fotos */
.pg-count-1 .pg-main { grid-column: 1 / -1; grid-row: 1 / -1; }
.pg-count-2 { grid-template-columns: 1fr 1fr; }
.pg-count-2 .pg-main { grid-column: 1; grid-row: 1 / 3; }
.pg-count-2 .pg-thumb { grid-column: 2; grid-row: 1 / 3; }

/* 3 fotos: foto grande + 2 miniaturas apiladas a la derecha (sin celdas vacías). */
.pg-count-3 { grid-template-columns: 1fr var(--pg-thumb); }
.pg-count-3 .pg-main { grid-column: 1; grid-row: 1 / 3; }
.pg-count-3 .pg-thumb { grid-column: 2; }

/* 4 fotos: foto grande + una miniatura alta al centro + 2 apiladas a la derecha. */
.pg-count-4 .pg-main { grid-column: 1; grid-row: 1 / 3; }
.pg-count-4 .pg-thumb:nth-child(2) { grid-column: 2; grid-row: 1 / 3; }

/* Móvil: solo la foto grande (el resto se ve en el lightbox al tocar) */
@media (max-width: 767.98px) {
    .property-gallery-grid { grid-template-columns: 1fr; grid-template-rows: 1fr; height: auto; aspect-ratio: 4 / 3; }
    .property-gallery-grid .pg-thumb { display: none; }
    .pg-main { grid-column: 1; grid-row: 1; }
}

/* ------------------- Página "Vende tu propiedad" ------------------- */
.sell-hero {
    position: relative;
    overflow: hidden;
    background: var(--navy);
    background-size: cover;
    background-position: center;
    color: #fff;
    display: flex;
    align-items: center;
    padding: 3rem 0;
    text-align: center;
}
.sell-hero--image::before {
    content: '';
    position: absolute; inset: 0;
    background-image: var(--bhero);
    background-size: cover;
    background-position: center;
    animation: hero-fade 1.1s ease-out;
    z-index: 0;
}
.sell-hero--image::after {
    content: '';
    position: absolute; inset: 0;
    background: rgba(21, 34, 56, var(--hero-overlay, .6));
    z-index: 1;
}
.sell-hero .container { position: relative; z-index: 2; }
.sell-hero__eyebrow {
    display: inline-block;
    text-transform: uppercase;
    letter-spacing: .12em;
    font-size: .78rem;
    font-weight: 700;
    color: var(--accent);
    margin-bottom: .5rem;
}
.sell-hero__title { color: #fff; font-size: clamp(1.8rem, 4vw, 2.6rem); margin: 0 0 .75rem; }
.sell-hero__text { max-width: 620px; margin: 0 auto; color: rgba(255, 255, 255, .85); }

.sell-page { margin-top: -2.5rem; margin-bottom: 4rem; position: relative; z-index: 2; }
.sell-card { border: 0; border-radius: var(--radius); }
.sell-form__legend {
    font-size: .82rem; font-weight: 700; text-transform: uppercase;
    letter-spacing: .06em; color: var(--navy); margin-bottom: .85rem;
}
.sell-page .form-label { font-size: .85rem; font-weight: 600; color: var(--navy); margin-bottom: .2rem; }
.sell-page .form-control:focus, .sell-page .form-select:focus {
    border-color: var(--accent); box-shadow: 0 0 0 .2rem rgba(254, 103, 0, .18);
}

.property-title { font-size: clamp(1.4rem, 3vw, 2rem); margin: 0 0 .35rem; }
.property-location { color: var(--muted); margin: 0 0 .5rem; }
.property-location .bi { color: var(--accent-600); }
.property-price { font-size: 1.8rem; font-weight: 800; color: var(--accent); }
.property-price__total { font-size: .95rem; font-weight: 600; color: var(--navy); margin-top: .1rem; }

.property-specs {
    list-style: none; margin: 1.25rem 0 0; padding: 1rem 0;
    display: flex; flex-wrap: wrap; gap: 1.5rem;
    border-block: 1px solid var(--line);
}
.property-specs li { display: flex; align-items: center; gap: .4rem; color: var(--ink); }
.property-specs .bi { color: var(--accent); font-size: 1.15rem; }
.property-specs .spec-value { font-weight: 700; }
.property-specs .spec-label { color: var(--muted); font-size: .9rem; }

.property-section { margin-top: 2rem; }
.property-section__title { font-size: 1.2rem; margin-bottom: .9rem; padding-bottom: .4rem; border-bottom: 2px solid var(--accent); display: inline-block; }
.property-deslindes { color: #35404f; line-height: 1.7; display: flex; align-items: baseline; gap: .5rem; margin: 0; }
.property-deslindes .bi { color: var(--accent); flex: 0 0 auto; }
.property-description { color: #35404f; line-height: 1.75; text-align: justify; }
/* En móvil se mantiene justificado, con guionado automático para evitar
   huecos feos entre palabras en pantallas angostas. */
@media (max-width: 575.98px) { .property-description { text-align: justify; -webkit-hyphens: auto; hyphens: auto; } }
/* La negrita/cursiva de la descripción (editor WYSIWYG) se muestra
   explícita: no depende del "bolder" de Bootstrap, que según el peso
   del font del tema podía no verse distinto. */
.property-description strong, .property-description b { font-weight: 700; }
.property-description em, .property-description i { font-style: italic; }

.feature-group__title {
    font-size: .8rem; font-weight: 700; text-transform: uppercase;
    letter-spacing: .06em; color: var(--accent);
    margin: 1.6rem 0 .85rem;
}
.feature-group__title:first-of-type { margin-top: 0; }
/* Características como CHIPS: fluyen juntas (sin huecos de grilla),
   cada una con su ícono en un círculo del color de acento suave. */
.feature-list {
    list-style: none; margin: 0 0 .6rem; padding: 0;
    display: flex; flex-wrap: wrap; gap: .8rem .65rem;
}
.feature-list li {
    display: inline-flex; align-items: center; gap: .55rem;
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: 999px;
    padding: .38rem 1rem .38rem .42rem;
    font-weight: 600; font-size: .92rem; color: var(--ink);
}
.feature-list li i {
    width: 28px; height: 28px; border-radius: 50%;
    display: inline-flex; align-items: center; justify-content: center;
    font-size: .95rem;
    color: var(--accent);
    flex: 0 0 auto;
    /* Tinte del acento: fallback fijo y color-mix theme-aware si existe */
    background: #ffeede;
    background: color-mix(in srgb, var(--accent) 13%, #fff);
}

.property-map { height: 340px; border-radius: var(--radius); border: 1px solid var(--line); z-index: 0; }
.property-map__address { display: flex; align-items: baseline; gap: .4rem; margin: 0 0 .75rem; font-weight: 600; color: var(--navy); }
.property-map__address i { color: var(--accent); }
.property-video { border-radius: var(--radius); overflow: hidden; border: 1px solid var(--line); background: #000; }

/* Caja de contacto (sidebar) */
.contact-box { background: #fff; border: 1px solid var(--line); border-radius: var(--radius); padding: 1.4rem; box-shadow: var(--shadow); position: sticky; top: 90px; }
.contact-box__price { font-size: 1.6rem; font-weight: 800; color: var(--navy); }
.contact-box__total { font-size: .9rem; font-weight: 600; color: var(--accent-600); margin-top: .1rem; }
.contact-box .form-label { font-size: .82rem; font-weight: 600; color: var(--navy); margin-bottom: .15rem; }
.contact-box .form-control:focus { border-color: var(--accent); box-shadow: 0 0 0 .2rem rgba(198,161,91,.2); }

.btn-whatsapp { background: var(--navy); border: 1px solid var(--navy); color: #fff; font-weight: 600; padding: .6rem 1rem; }
.btn-whatsapp:hover { background: var(--accent); border-color: var(--accent); color: #fff; }

/* Honeypot: fuera de pantalla, invisible para humanos */
.hp-field { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* Lightbox: marco UNIFORME 16:9 lo MÁS GRANDE posible. Se ve hasta 1920x1080
   en pantallas HD (fotos grandes y nítidas) y baja proporcional en laptops y
   celulares, sin salirse nunca de la pantalla: el min() elige el menor entre
   el ancho ideal (1920px), el ancho disponible (95vw) y el que cabe según el
   alto de la ventana (descontando el header del modal). object-fit:contain ->
   la foto se ve COMPLETA, sin recortar; lo que sobra queda en negro (invisible
   sobre el fondo oscuro del modal). Las fotos 16:9 llenan el marco exacto. */
.lightbox-frame {
    position: relative;
    width: min(1920px, 95vw, calc((100vh - 130px) * 16 / 9));
    aspect-ratio: 16 / 9;
    margin: 0 auto;
}
.lightbox-img {
    width: 100%;
    height: 100%;
    display: block;
    object-fit: contain;
    background: #000;
}

/* Marca de agua (logo blanco) SOLO en la galería de la ficha: se dibuja ENCIMA
   con CSS, NO modifica los archivos de las fotos → totalmente reversible (basta
   borrar este bloque). Aparece en la foto grande (.pg-main) y en el lightbox. */
.pg-main::after,
.lightbox-frame::after {
    content: "";
    position: absolute;
    right: 3.5%;
    bottom: 4.5%;
    width: 16%;
    max-width: 150px;
    aspect-ratio: 1600 / 427;              /* proporción del logo blanco.png */
    background: url('../img/blanco.png') no-repeat right bottom / contain;
    opacity: .5;
    pointer-events: none;                  /* no estorba clics en la foto */
    z-index: 4;
}

/* Flechas del lightbox: botón circular, bien visibles y tocables (sobre todo
   en móvil; Bootstrap las pone blancas y chicas en los bordes). El swipe táctil
   igual funciona. */
#lightboxCarousel .carousel-control-prev,
#lightboxCarousel .carousel-control-next { width: auto; opacity: 1; z-index: 5; }
#lightboxCarousel .carousel-control-prev { left: .4rem; }
#lightboxCarousel .carousel-control-next { right: .4rem; }
#lightboxCarousel .carousel-control-prev-icon,
#lightboxCarousel .carousel-control-next-icon {
    width: 2.9rem; height: 2.9rem;
    background-color: rgba(0, 0, 0, .55);
    border-radius: 50%;
    background-size: 1.2rem;
    box-shadow: 0 2px 10px rgba(0, 0, 0, .45);
}
#lightboxCarousel .carousel-control-prev:hover .carousel-control-prev-icon,
#lightboxCarousel .carousel-control-next:hover .carousel-control-next-icon {
    background-color: var(--accent);
}

/* ================= BOTÓN FLOTANTE WHATSAPP ================= */
.wa-float {
    position: fixed;
    right: 22px;
    bottom: 22px;
    z-index: 1040;                 /* bajo los modales de Bootstrap (1050+) */
    display: inline-flex;
    align-items: center;
    gap: 10px;
    text-decoration: none;
}
/* Versión con selector (2 contactos): el wrapper es un div con un botón */
.wa-float__toggle {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    background: none;
    border: 0;
    padding: 0;
    cursor: pointer;
}
.wa-float__menu {
    /* sin `display` explícito: así el atributo [hidden] sigue funcionando */
    position: absolute;
    right: 0;
    bottom: calc(100% + 14px);
    min-width: 250px;
    background: #fff;
    border: 1px solid var(--line);
    border-radius: 14px;
    box-shadow: 0 12px 34px rgba(0, 0, 0, .22);
    padding: .5rem;
    animation: wa-menu-in .18s ease-out;
}
@keyframes wa-menu-in {
    from { opacity: 0; transform: translateY(8px); }
    to   { opacity: 1; transform: translateY(0); }
}
.wa-float__menu-title {
    font-size: .78rem; font-weight: 700; color: var(--muted);
    text-transform: uppercase; letter-spacing: .04em;
    padding: .35rem .6rem .45rem;
}
.wa-float__menu a {
    display: flex; align-items: center; gap: .7rem;
    padding: .55rem .6rem;
    border-radius: 10px;
    text-decoration: none;
    color: var(--ink);
}
.wa-float__menu a:hover { background: #f0f7f2; }
.wa-float__menu a .bi-whatsapp { color: #25d366; font-size: 1.35rem; flex: 0 0 auto; }
.wa-float__menu a span { display: flex; flex-direction: column; line-height: 1.25; }
.wa-float__menu a strong { font-weight: 700; color: var(--navy); }
.wa-float__menu a small { color: var(--muted); font-size: .8rem; }
.wa-float__btn {
    position: relative;
    width: 60px;
    height: 60px;
    border-radius: 50%;
    background: #25d366;
    color: #fff;
    display: grid;
    place-items: center;
    font-size: 2rem;
    box-shadow: 0 8px 24px rgba(37, 211, 102, .45);
    transition: transform .2s ease, box-shadow .2s ease, background .2s ease;
    flex: 0 0 auto;
}
.wa-float__btn::before {          /* anillo de pulso */
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 50%;
    background: #25d366;
    z-index: -1;
    animation: wa-pulse 2.2s ease-out infinite;
}
@keyframes wa-pulse {
    0%   { transform: scale(1);   opacity: .55; }
    70%  { transform: scale(1.7); opacity: 0; }
    100% { transform: scale(1.7); opacity: 0; }
}
.wa-float:hover .wa-float__btn { transform: scale(1.08); background: var(--accent); box-shadow: 0 10px 30px rgba(0, 0, 0, .28); }
.wa-float:hover .wa-float__btn::before { background: var(--accent); }

.wa-float__label {
    background: #fff;
    color: var(--navy);
    font-weight: 600;
    font-size: .9rem;
    padding: .5rem .85rem;
    border-radius: 999px;
    box-shadow: var(--shadow);
    white-space: nowrap;
    max-width: 0;
    overflow: hidden;
    opacity: 0;
    padding-inline: 0;
    transition: max-width .28s ease, opacity .28s ease, padding .28s ease;
    order: -1;                     /* etiqueta a la izquierda del botón */
}
.wa-float:hover .wa-float__label,
.wa-float:focus-visible .wa-float__label {
    max-width: 240px;
    opacity: 1;
    padding-inline: .85rem;
}

/* En móvil: botón un poco más chico y sin etiqueta (se muestra al tocar es molesto) */
@media (max-width: 575.98px) {
    .wa-float { right: 16px; bottom: 16px; }
    .wa-float__btn { width: 54px; height: 54px; font-size: 1.75rem; }
    .wa-float__label { display: none; }
}

/* Respeta usuarios que prefieren menos movimiento */
@media (prefers-reduced-motion: reduce) {
    .wa-float__btn::before { animation: none; }
}

/* ================= BOTÓN VOLVER ARRIBA ================= */
/* Naranjo del tema con ícono blanco, sobre el botón de WhatsApp. */
.back-top {
    position: fixed;
    right: 33px;
    bottom: 104px;                 /* justo encima del botón de WhatsApp */
    z-index: 1040;                 /* mismo nivel que wa-float, bajo modales */
    width: 38px;
    height: 38px;
    border: 0;
    border-radius: 50%;
    background: var(--accent);
    color: #fff;
    display: grid;
    place-items: center;
    font-size: 1.1rem;
    line-height: 1;
    cursor: pointer;
    box-shadow: 0 8px 22px rgba(0, 0, 0, .22);
    opacity: 0;
    visibility: hidden;
    transform: translateY(12px);
    transition: opacity .25s ease, transform .25s ease, background .2s ease, box-shadow .2s ease, visibility .25s;
}
.back-top.is-visible { opacity: 1; visibility: visible; transform: translateY(0); }
.back-top:hover {
    background: var(--navy);
    transform: translateY(-3px);
    box-shadow: 0 12px 28px rgba(0, 0, 0, .28);
}
.back-top:focus-visible { outline: 3px solid rgba(254, 103, 0, .4); outline-offset: 2px; }

@media (max-width: 575.98px) {
    .back-top { right: 26px; bottom: 88px; width: 36px; height: 36px; font-size: 1rem; }
}

@media (prefers-reduced-motion: reduce) {
    .back-top { transition: opacity .2s ease, visibility .2s; }
    .back-top:hover { transform: none; }
}

/* ============ Animaciones de entrada (reveal) — elegantes ============ */
/* El estado inicial (oculto) SOLO aplica si el JS activó .has-reveal. Si el
   JS falla o el usuario prefiere menos movimiento, todo se ve normal. */

/* Textos: aparecen con un deslizamiento suave hacia arriba + fundido. */
.has-reveal :is(.hero__eyebrow, .hero__title, .hero__subtitle,
                .section__title, .cta-band__title, .cta-band__text,
                .results-title, .property-title, .property-section__title) {
    opacity: 0;
    transform: translateY(26px);
    transition: opacity .85s cubic-bezier(.22, .61, .36, 1),
                transform .85s cubic-bezier(.22, .61, .36, 1);
}

/* Botones y barra de búsqueda: fundido (conservando sus transiciones de hover). */
.has-reveal :is(.hero-search, .section__link, .cta-band .btn) {
    opacity: 0;
    transition: opacity .7s ease,
                transform .15s ease, background-color .15s ease,
                border-color .15s ease, filter .15s ease;
}

/* Tarjetas: se anima su COLUMNA (no la tarjeta, para no chocar con el hover).
   :has() aplica el estado inicial antes de pintar; si el navegador no lo
   soporta, las tarjetas se ven normal (sin animación). */
.has-reveal .row > [class*="col-"]:has(> .property-card, > .category-card, > .service-card) {
    opacity: 0;
    transform: translateY(28px);
    transition: opacity .7s cubic-bezier(.22, .61, .36, 1),
                transform .7s cubic-bezier(.22, .61, .36, 1);
}

/* ---- Servicios y Testimonios: entrada "de lujo" ---- */
/* Textos de heros/franjas: mismo deslizamiento suave hacia arriba. */
.has-reveal :is(.services-hero__eyebrow, .services-hero__title, .services-hero__text,
                .testimonials-band__title, .testimonials-band__text,
                .services-cta__title, .services-cta__text) {
    opacity: 0;
    transform: translateY(26px);
    transition: opacity .85s cubic-bezier(.22, .61, .36, 1),
                transform .85s cubic-bezier(.22, .61, .36, 1);
}
/* Cascada dentro de cada bloque */
.has-reveal .services-hero__title,
.has-reveal .testimonials-band__text,
.has-reveal .services-cta__text { transition-delay: .12s; }
.has-reveal .services-hero__text { transition-delay: .24s; }

/* Fotos: entran deslizándose desde SU lado. Servicios (foto derecha)
   y franjas invertidas de testimonios: desde la derecha; franjas
   normales de testimonios (foto izquierda): desde la izquierda. */
.has-reveal .service-row__media {
    opacity: 0;
    transform: translateX(56px);
    transition: opacity .9s cubic-bezier(.22, .61, .36, 1),
                transform .9s cubic-bezier(.22, .61, .36, 1);
}
.has-reveal .testimonial-row .row:not(.flex-lg-row-reverse) .service-row__media {
    transform: translateX(-56px);
}
/* Móvil/tablet: las columnas van apiladas, así que la foto entra
   subiendo (translateY) en vez de lateral — evita cualquier
   desborde horizontal y se ve más natural. */
@media (max-width: 991.98px) {
    .has-reveal .service-row__media,
    .has-reveal .testimonial-row .row:not(.flex-lg-row-reverse) .service-row__media {
        transform: translateY(28px);
    }
}
/* El texto acompaña con un leve retraso (cascada foto -> texto) */
.has-reveal .service-row__body {
    opacity: 0;
    transform: translateY(24px);
    transition: opacity .85s cubic-bezier(.22, .61, .36, 1) .15s,
                transform .85s cubic-bezier(.22, .61, .36, 1) .15s;
}

/* Banner de testimonios: fundido lento (foto grande, entrada elegante) */
.has-reveal .testimonials-banner {
    opacity: 0;
    transition: opacity 1.1s ease;
}

/* Banner de testimonios del home: cascada texto -> lado del número */
.has-reveal :is(.sold-banner__eyebrow, .sold-banner__title, .sold-banner__text) {
    opacity: 0;
    transform: translateY(26px);
    transition: opacity .85s cubic-bezier(.22, .61, .36, 1),
                transform .85s cubic-bezier(.22, .61, .36, 1);
}
.has-reveal .sold-banner__title { transition-delay: .12s; }
.has-reveal .sold-banner__text  { transition-delay: .24s; }
.has-reveal .sold-banner__side {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity .85s cubic-bezier(.22, .61, .36, 1) .3s,
                transform .85s cubic-bezier(.22, .61, .36, 1) .3s;
}

/* Heros de Contacto, Propiedades y "Vende tu propiedad": misma cascada */
.has-reveal :is(.sell-hero__eyebrow, .sell-hero__title, .sell-hero__text,
                .contact-hero h1, .contact-hero p, .results-count) {
    opacity: 0;
    transform: translateY(26px);
    transition: opacity .85s cubic-bezier(.22, .61, .36, 1),
                transform .85s cubic-bezier(.22, .61, .36, 1);
}
.has-reveal .sell-hero__title,
.has-reveal .contact-hero p,
.has-reveal .results-count { transition-delay: .14s; }
.has-reveal .sell-hero__text { transition-delay: .28s; }

/* Tarjetas del CTA: se anima su CONTENEDOR (no la tarjeta) para no
   chocar con el translateY del hover — mismo truco que las property
   cards. */
.has-reveal :is(.services-cta__contacts, .services-cta__single) {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity .8s cubic-bezier(.22, .61, .36, 1) .2s,
                transform .8s cubic-bezier(.22, .61, .36, 1) .2s;
}

.has-reveal .is-visible { opacity: 1 !important; transform: none !important; }

/* Cascada elegante del hero al cargar la página */
.has-reveal .hero__eyebrow  { transition-delay: .05s; }
.has-reveal .hero__title    { transition-delay: .16s; }
.has-reveal .hero__subtitle { transition-delay: .30s; }
.has-reveal .hero-search    { transition-delay: .44s; }

@media (prefers-reduced-motion: reduce) {
    .has-reveal :is(.hero__eyebrow, .hero__title, .hero__subtitle, .section__title,
                    .cta-band__title, .cta-band__text, .results-title, .property-title,
                    .property-section__title, .hero-search, .section__link, .cta-band .btn,
                    .services-hero__eyebrow, .services-hero__title, .services-hero__text,
                    .service-row__media, .service-row__body,
                    .services-cta__title, .services-cta__text, .services-cta__contacts, .services-cta__single,
                    .testimonials-banner, .testimonials-band__title, .testimonials-band__text,
                    .sell-hero__eyebrow, .sell-hero__title, .sell-hero__text, .results-count,
                    .sold-banner__eyebrow, .sold-banner__title, .sold-banner__text, .sold-banner__side) {
        opacity: 1 !important; transform: none !important; transition: none !important;
    }
    .has-reveal .contact-hero :is(h1, p) {
        opacity: 1 !important; transform: none !important; transition: none !important;
    }
    .hero__slide[style*="--hero-img"]::before,
    .sell-hero--image::before,
    .contact-hero--image::before,
    .results-hero--image::before,
    .services-hero--image::before,
    .cta-slide { animation: none !important; }
    .property-card__featured .bi-star-fill { animation: none !important; }
    .property-card__media img { transition: none !important; }
    .property-card { transition: box-shadow .18s ease !important; }
    .property-card:hover { transform: none !important; }
    .property-card:hover .property-card__overlay { opacity: 0 !important; }
}

/* ------------------------ Responsive ----------------------- */
@media (max-width: 991.98px) {
    .section { padding: 2.5rem 0; }
    .contact-box { position: static; margin-top: 1rem; }
}

/* ==================== PÁGINA DE SERVICIOS ==================== */
.services-hero {
    background: linear-gradient(160deg, var(--navy) 0%, #1d2f4e 100%);
    color: #fff;
    padding: 2.5rem 0;
    display: flex;
    align-items: center;
    position: relative;
    overflow: hidden;
}
/* Con imagen configurada (--bhero): foto de fondo + overlay oscuro
   para que el texto siga legible (mismo patrón que .contact-hero). */
.services-hero--image::before {
    content: '';
    position: absolute; inset: 0;
    background-image: var(--bhero);
    background-size: cover;
    background-position: center;
    animation: hero-fade 1.1s ease-out;
    z-index: 0;
}
.services-hero--image::after {
    content: '';
    position: absolute; inset: 0;
    background: rgba(21, 34, 56, var(--hero-overlay, .6));
    z-index: 1;
}
.services-hero .container { position: relative; z-index: 2; }
.services-hero__eyebrow {
    text-transform: uppercase;
    letter-spacing: .14em;
    font-size: .78rem;
    font-weight: 700;
    color: var(--accent);
    margin-bottom: .5rem;
}
.services-hero__title { color: #fff; font-size: clamp(1.7rem, 4vw, 2.4rem); margin: 0 0 .6rem; }
.services-hero__text { max-width: 640px; margin: 0 auto; color: rgba(255, 255, 255, .85); }

.services-page { padding: 2.5rem 0 4rem; }

/* Fila de servicio: texto a la izquierda (7 col), foto a la derecha
   (5 col, más pequeña). Sin líneas divisorias: el espaciado ordena. */
.service-row { padding: 1.75rem 0; scroll-margin-top: 90px; }
/* Al llegar con ancla desde el home (#servicio-N): resalte suave */
.service-row:target { animation: service-target 1.8s ease; }
@keyframes service-target {
    0%   { background: #fff3ea; box-shadow: inset 3px 0 0 var(--accent); }
    100% { background: transparent; box-shadow: none; }
}

.service-row__number {
    display: block;
    font-size: .85rem;
    font-weight: 800;
    letter-spacing: .12em;
    color: var(--accent);
    margin-bottom: .4rem;
}
.service-row__title {
    font-size: clamp(1.3rem, 2.6vw, 1.7rem);
    margin: 0 0 1rem;
    padding-bottom: .55rem;
    position: relative;
}
.service-row__title::after {
    content: "";
    position: absolute;
    left: 0; bottom: 0;
    width: 56px; height: 3px;
    background: var(--accent);
    border-radius: 2px;
}
.service-row__text { color: #35404f; line-height: 1.8; text-align: justify; }
.service-row__text strong { font-weight: 700; }

/* Cierre de la página: UN solo llamado a la acción (no un botón por
   servicio, que se veía repetitivo) */
.services-cta {
    /* Naranjo del tema con un degradado sutil (brillo arriba-izquierda,
       sombra abajo-derecha) para darle profundidad sin fijar el color. */
    background: linear-gradient(160deg, rgba(255, 255, 255, .14) 0%, rgba(0, 0, 0, .14) 100%), var(--accent);
    color: #fff;
    padding: 3.5rem 0;
}
.services-cta__title { color: #fff; font-size: clamp(1.35rem, 3vw, 1.8rem); margin-bottom: .5rem; }
.services-cta__text { color: rgba(255, 255, 255, .9); max-width: 560px; margin: 0 auto 1.5rem; }
/* Tarjetas de contacto del CTA: si hay dos personas configuradas se
   muestran ambas con su rubro; con una, la tarjeta única. */
.services-cta__contacts {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 1rem;
}
.services-cta__contact {
    display: inline-flex;
    align-items: center;
    gap: .85rem;
    background: #fff;
    color: var(--navy);
    text-decoration: none;
    padding: .8rem 1.25rem;
    min-width: 280px;
    text-align: left;
    box-shadow: 0 8px 22px rgba(0, 0, 0, .18);
    transition: transform .18s ease, box-shadow .18s ease;
}
.services-cta__contact:hover {
    color: var(--navy);
    transform: translateY(-3px);
    box-shadow: 0 14px 30px rgba(0, 0, 0, .24);
}
.services-cta__contact-icon {
    width: 46px; height: 46px;
    border-radius: 50%;
    background: #25d366;
    color: #fff;
    display: grid;
    place-items: center;
    font-size: 1.5rem;
    flex: 0 0 auto;
}
.services-cta__contact-text { display: flex; flex-direction: column; line-height: 1.3; }
.services-cta__contact-text strong { font-weight: 700; }
.services-cta__contact-text small { color: var(--muted); font-size: .82rem; }
.services-cta__contact-arrow {
    margin-left: auto;
    color: var(--accent);
    font-size: 1.2rem;
    transition: transform .18s ease;
}
.services-cta__contact:hover .services-cta__contact-arrow { transform: translateX(4px); }

@media (max-width: 575.98px) {
    .services-cta__contact { width: 100%; min-width: 0; }
}

.service-row__media {
    border-radius: var(--radius);
    overflow: hidden;
    box-shadow: 0 10px 28px rgba(15, 24, 42, .12);
    aspect-ratio: 4 / 3;
    background: #eceae5;
    max-width: 400px;
    margin-inline: auto;
}
.service-row__media img {
    width: 100%; height: 100%;
    object-fit: cover;
    display: block;
    transition: transform .6s ease;
}
.service-row:hover .service-row__media img { transform: scale(1.04); }
.service-row__media--empty {
    display: grid;
    place-items: center;
    color: #b9b4aa;
    font-size: 3.2rem;
}

/* Móvil: la foto pasa arriba del texto (más atractivo al scrollear) */
@media (max-width: 991.98px) {
    .service-row { padding: 1.5rem 0; }
    .service-row__body { order: 2; }
    .service-row__text { text-align: justify; -webkit-hyphens: auto; hyphens: auto; }
    .service-row__media { max-width: 340px; }
}

/* ========= BANNER TESTIMONIOS / VENDIDAS (home) ========= */
/* ---- Inicio: banner de aliado (publicidad, fondo blanco) ----
   Franja entre las propiedades y la de testimonios. Imagen a la izquierda
   + título/texto/botón a la derecha. En móvil se apila y se centra. */
.partner-banner { background: #fff; }
.partner-banner__box {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: clamp(1.25rem, 4vw, 3rem);
    flex-wrap: wrap;
    padding: clamp(1.25rem, 3vw, 2.25rem);
    border: 1px solid #ececec;
    border-radius: var(--radius);
    box-shadow: var(--shadow);
    background: #fff;
}
.partner-banner__media {
    flex: 0 0 auto;
    width: clamp(150px, 26vw, 230px);
}
.partner-banner__media img {
    display: block;
    width: 100%;
    height: auto;
    max-height: 140px;
    object-fit: contain;
}
.partner-banner__body { flex: 0 1 560px; }
.partner-banner__title { margin: 0 0 .4rem; font-size: clamp(1.25rem, 2.4vw, 1.7rem); }
.partner-banner__text { margin: 0 0 1.1rem; color: #6b6b6b; }
.partner-banner__btn {
    align-self: flex-start;
    background: #fff;
    color: #454545;
    border: 2px solid #454545;
}
.partner-banner__btn:hover, .partner-banner__btn:focus {
    background: #454545;
    color: #fff;
    border-color: #454545;
}
@media (max-width: 575.98px) {
    .partner-banner__box { flex-direction: column; text-align: center; }
    .partner-banner__btn { align-self: center; }
}

.sold-banner {
    position: relative;
    overflow: hidden;
    background: linear-gradient(135deg, var(--navy) 0%, var(--navy-500) 100%);
    color: #fff;
    padding: 4rem 0;
}
/* Con foto configurada: fondo con parallax (solo escritorio) y velo
   oscuro degradado de izquierda a derecha para legibilidad. */
.sold-banner--image::before {
    content: '';
    position: absolute; inset: 0;
    background-image: var(--bhero);
    background-size: cover;
    background-position: center;
    z-index: 0;
}
.sold-banner--image::after {
    content: '';
    position: absolute; inset: 0;
    background: linear-gradient(90deg, rgba(18, 20, 26, .88) 0%, rgba(18, 20, 26, .45) 100%);
    z-index: 1;
}
.sold-banner .container { position: relative; z-index: 2; }
.sold-banner__eyebrow {
    text-transform: uppercase;
    letter-spacing: .14em;
    font-size: .78rem;
    font-weight: 700;
    color: var(--accent);
    margin-bottom: .5rem;
}
.sold-banner__title { color: #fff; font-size: clamp(1.5rem, 3.2vw, 2.2rem); margin: 0 0 .75rem; }
.sold-banner__text { color: rgba(255, 255, 255, .85); max-width: 560px; margin: 0; }
.sold-banner__side { display: flex; flex-direction: column; align-items: flex-start; gap: 1.25rem; }
@media (min-width: 992px) {
    .sold-banner__side { align-items: flex-end; text-align: right; }
}
.sold-banner__number {
    display: block;
    font-size: clamp(2.8rem, 6vw, 4.2rem);
    font-weight: 800;
    line-height: 1;
    color: var(--accent);
}
.sold-banner__label { color: rgba(255, 255, 255, .88); font-weight: 600; letter-spacing: .02em; }
.sold-banner__btn {
    background: #fff;
    border-color: #fff;
    color: var(--navy);
    font-weight: 700;
    padding: .75rem 1.6rem;
}
.sold-banner__btn:hover { background: var(--accent); border-color: var(--accent); color: #fff; }
.sold-banner__btn .bi { transition: transform .2s ease; }
.sold-banner__btn:hover .bi { transform: translateX(4px); }

/* ============== TARJETAS DE SERVICIOS EN EL HOME ============== */
/* 3 columnas; cada tarjeta enlaza con ancla a su detalle en /servicios */
.service-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    overflow: hidden;
    text-decoration: none;
    color: var(--ink);
    transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
}
.service-card:hover {
    color: var(--ink);
    transform: translateY(-4px);
    box-shadow: var(--shadow-lg);
    border-color: var(--accent);
}
.service-card__media {
    aspect-ratio: 4 / 3;
    background: #eceae5;
    overflow: hidden;
}
.service-card__media img {
    width: 100%; height: 100%;
    object-fit: cover; display: block;
    transition: transform .45s ease;
}
.service-card:hover .service-card__media img { transform: scale(1.05); }
.service-card__media--empty { display: grid; place-items: center; color: #b9b4aa; font-size: 2.6rem; }
.service-card__body { display: flex; flex-direction: column; gap: .5rem; padding: 1.15rem 1.25rem 1.3rem; flex: 1; }
.service-card__title { font-size: 1.08rem; margin: 0; color: var(--navy); }
.service-card__text { color: var(--muted); font-size: .93rem; line-height: 1.65; margin: 0; }
.service-card__more {
    margin-top: auto;
    color: var(--accent);
    font-weight: 700;
    font-size: .9rem;
    display: inline-flex; align-items: center; gap: .35rem;
}
.service-card:hover .service-card__more .bi { transform: translateX(4px); }
.service-card__more .bi { transition: transform .2s ease; }

/* ==================== PÁGINA DE TESTIMONIOS ==================== */
/* Banner estilo referencia: foto ancha limpia + franja de dos columnas
   (título | narrativa). El listado reutiliza .service-row. */
.testimonials-banner {
    background-size: cover;
    background-position: center;
}
.testimonials-band {
    background: linear-gradient(160deg, var(--navy) 0%, #1d2f4e 100%);
    color: #fff;
    padding: 3rem 0;
}
.testimonials-band__title {
    color: rgba(255, 255, 255, .92);
    font-size: clamp(1.3rem, 2.6vw, 1.75rem);
    text-transform: uppercase;
    letter-spacing: .06em;
    line-height: 1.35;
    margin: 0;
}
.testimonials-band__text {
    color: rgba(255, 255, 255, .85);
    line-height: 1.85;
    margin: 0;
}
@media (max-width: 991.98px) {
    .testimonials-band { padding: 2.25rem 0; }
    .testimonials-band__title { font-size: 1.2rem; }
}

.testimonial-location { color: var(--muted); margin: -.5rem 0 .75rem; }
.testimonial-location .bi { color: var(--accent); }

.testimonial-specs {
    list-style: none; margin: 0 0 1rem; padding: 0;
    display: flex; flex-wrap: wrap; gap: .5rem 1.5rem;
}
.testimonial-specs li { display: flex; align-items: center; gap: .45rem; color: var(--ink); }
.testimonial-specs .bi { color: var(--accent); font-size: 1.05rem; }

/* Detalles adicionales (desgloses de superficie u otros datos) */
.testimonial-extra {
    list-style: none; margin: -.35rem 0 1rem; padding: 0;
    display: flex; flex-direction: column; gap: .3rem;
}
.testimonial-extra li { display: flex; align-items: baseline; gap: .45rem; color: var(--ink); font-size: .95rem; }
.testimonial-extra .bi { color: var(--accent-600); }

/* Cada propiedad vendida es una FRANJA de ancho completo con fondo
   ultra suave rotativo, una tras otra sin separación. Dirección
   alternada (impar foto izq., par foto der. vía flex-lg-row-reverse). */
.testimonials-list { padding-bottom: 0; }
.testimonial-row { padding: 3.25rem 0; }
.t-bg-0 { background: #fbf7f0; }   /* arena */
.t-bg-1 { background: #f1f6fa; }   /* celeste grisáceo */
.t-bg-2 { background: #f3f8f3; }   /* salvia */
.t-bg-3 { background: #faf3f0; }   /* durazno */

/* Foto grande estilo referencia: ocupa toda su columna, puntas
   cuadradas y sin sombra (plana, como lacasadejuana). */
.testimonial-row .service-row__media {
    max-width: none;
    border-radius: 0;
    box-shadow: none;
    aspect-ratio: 3 / 2;
}
.testimonial-row .service-row__text { text-align: left; }

@media (max-width: 991.98px) {
    .testimonial-row { padding: 2rem 0; }
}

/* Carrusel dentro del recuadro de media (mismo marco que servicios) */
.testimonial-media { position: relative; }
.testimonial-media .carousel-item img {
    width: 100%; height: 100%;
    object-fit: cover; display: block;
}
.testimonial-badge {
    position: absolute; top: 14px; left: 14px; z-index: 3;
    background: var(--accent); color: #fff;
    font-size: .78rem; font-weight: 700;
    text-transform: uppercase; letter-spacing: .06em;
    padding: .35rem .75rem;   /* puntas cuadradas, como los botones */
    box-shadow: 0 4px 12px rgba(0, 0, 0, .25);
}

/* ============ Compartir / Imprimir (ficha de propiedad) ============ */
/* En escritorio van a la DERECHA del precio (misma fila); en móvil
   bajan debajo con un poco más de aire. */
.property-actions { display: flex; gap: .5rem; flex-shrink: 0; }
@media (max-width: 575.98px) {
    .property-actions { margin-top: .65rem; }
}
.btn-action {
    display: inline-flex; align-items: center; gap: .45rem;
    background: #fff; border: 1px solid var(--line); color: var(--navy);
    font-weight: 600; font-size: .88rem;
    padding: .5rem .9rem;
}
/* Hover en el naranjo del sitio */
.btn-action:hover { background: var(--accent); border-color: var(--accent); color: #fff; }
.btn-action .bi { font-size: 1rem; }

.share-menu { min-width: 210px; box-shadow: var(--shadow); border-color: var(--line); }
.share-menu .dropdown-item { display: flex; align-items: center; gap: .6rem; font-size: .92rem; padding-block: .45rem; }
.share-menu .bi { font-size: 1.05rem; color: var(--navy); }
.share-menu .bi-whatsapp { color: #25d366; }
.share-menu .bi-facebook { color: #1877f2; }
.share-menu #copyLinkBtn.is-copied,
.share-menu #copyLinkBtn.is-copied .bi { color: #198754; font-weight: 600; }

/* Elementos que SOLO existen en la versión impresa */
.print-only { display: none; }

/* ======================= IMPRESIÓN ======================= */
/* Ficha detallada en papel: membrete + fotos + datos + descripción +
   características + tabla completa. Se oculta la navegación, el
   formulario de contacto, el mapa interactivo y todo lo no imprimible. */
@media print {
    @page { margin: 12mm; }

    .site-header, .site-footer, .wa-float, .modal-backdrop,
    .property-map, .modal, .property-video { display: none !important; }

    .print-only { display: block; }

    /* Neutraliza las animaciones de entrada: lo aún no "revelado"
       quedaría invisible (opacity 0) en el papel. */
    .has-reveal :is(.property-title, .property-section__title) {
        opacity: 1 !important; transform: none !important; transition: none !important;
    }

    body { background: #fff; color: #000; }
    .property-page { max-width: 100%; }
    .property-page .col-lg-8 { width: 100%; max-width: 100%; flex: 0 0 100%; }

    /* Membrete de la inmobiliaria */
    .print-brand {
        display: flex; justify-content: space-between; align-items: baseline;
        gap: 1rem; flex-wrap: wrap;
        border-bottom: 2px solid #000; padding-bottom: .5rem; margin-bottom: 1rem;
    }
    .print-brand__name { font-size: 1.3rem; font-weight: 800; }
    .print-brand__meta { font-size: .85rem; color: #333; }
    .print-brand__meta span + span::before { content: " · "; }

    /* Galería: solo la foto principal, tamaño controlado, sin badges */
    .property-gallery-grid {
        display: block; height: auto; box-shadow: none; border-radius: 0;
        break-inside: avoid;
    }
    .property-gallery-grid .pg-thumb,
    .pg-count-badge, .pg-more { display: none !important; }
    .pg-main { width: 100%; }
    .pg-main img { width: 100%; height: auto; max-height: 10cm; object-fit: cover; }

    .property-price { color: #000; }
    /* "i" genérico: cubre también los íconos FontAwesome de las características */
    .property-specs .bi, .property-location .bi, .feature-list i { color: #000; }
    .property-section { margin-top: 1.2rem; }
    .property-section__title { border-bottom-color: #000; }
    .property-header, .property-specs, .print-details, .feature-list { break-inside: avoid; }

    /* Tabla de la ficha detallada */
    .print-details__table { width: 100%; border-collapse: collapse; font-size: .9rem; }
    .print-details__table th, .print-details__table td {
        border: 1px solid #999; padding: .35rem .6rem; text-align: left; vertical-align: top;
    }
    .print-details__table th {
        width: 38%; background: #f0f0f0; font-weight: 700;
        /* Sin esto los navegadores omiten el fondo al imprimir */
        -webkit-print-color-adjust: exact; print-color-adjust: exact;
    }

    /* Datos de contacto de la empresa */
    .print-contact {
        margin-top: 1.5rem; padding: .8rem 1rem;
        border: 2px solid #000; break-inside: avoid;
    }
    .print-contact__title { font-size: .8rem; text-transform: uppercase; letter-spacing: .05em; color: #333; }
    .print-contact__name { font-size: 1.15rem; font-weight: 800; margin: .15rem 0 .4rem; }
    .print-contact__list { list-style: none; margin: 0; padding: 0; font-size: .92rem; }
    .print-contact__list li { margin-bottom: .15rem; }

    /* Pie con el enlace a la publicación */
    .print-foot {
        margin-top: 1.5rem; padding-top: .5rem; border-top: 1px solid #999;
        font-size: .8rem; color: #333; word-break: break-all;
    }
}
