/* ══════════════════════════════════════════════════════════════════
   Evamar · landing pública
   ------------------------------------------------------------------
   Dirección: lujo contenido. La foto manda, el tipo respira y el color
   se guarda para dos cosas — el teal de la marca y un dorado que sólo
   aparece donde hay que tocar. Nada de sombras de plantilla, nada de
   degradados decorativos: la única profundidad viene de la fotografía.

   El teal (#035350) y el dorado (#CBB74D) están tomados del CSS vivo de
   evamar.mx: es la marca del cliente, no una aproximación nuestra.
   ══════════════════════════════════════════════════════════════════ */

:root{
  --tinta:#0A1614;          /* teal tan oscuro que lee como negro */
  --teal:#035350;
  --teal-hondo:#023A38;
  --teal-claro:#0E7A73;
  --oro:#CBB74D;
  --oro-suave:#E4D79A;
  --hueso:#F7F4ED;          /* papel cálido, no blanco de pantalla */
  --arena:#E6DCCB;
  --gris:#6B7672;
  --linea:rgba(10,22,20,.12);
  --linea-clara:rgba(255,255,255,.18);

  --display:'Fraunces',ui-serif,Georgia,'Times New Roman',serif;
  --texto:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;

  --borde:2px;
  --transicion:.6s cubic-bezier(.16,1,.3,1);
  --ancho:1280px;
  --gutter:clamp(1.25rem,5vw,5rem);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:5rem}
body{
  margin:0;background:var(--hueso);color:var(--tinta);
  font-family:var(--texto);font-size:clamp(1rem,.96rem + .2vw,1.075rem);
  line-height:1.65;font-weight:400;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
img{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit}
h1,h2,h3,h4{margin:0;font-family:var(--display);font-weight:400;line-height:1.06;
  letter-spacing:-.015em;font-optical-sizing:auto}
p{margin:0 0 1.1em}
:focus-visible{outline:2px solid var(--oro);outline-offset:3px}

/* Selección con la marca. El azul de sistema sobre una foto a pantalla
   completa se ve como un error de la página, no como una selección. */
::selection{background:var(--oro-suave);color:var(--tinta)}

.saltar{position:absolute;left:-9999px;top:0;background:var(--teal);color:#fff;
  padding:.75rem 1.25rem;z-index:1000}
.saltar:focus{left:.5rem;top:.5rem}

/* ── Retícula ───────────────────────────────────────────────────── */
.env{width:100%;max-width:var(--ancho);margin-inline:auto;padding-inline:var(--gutter)}
.seccion{padding-block:clamp(4.5rem,10vw,9rem)}
.seccion--hueso{background:var(--hueso)}
.seccion--arena{background:var(--arena)}
.seccion--tinta{background:var(--tinta);color:var(--hueso)}
.seccion--teal{background:var(--teal-hondo);color:var(--hueso)}

/* Etiqueta versalita: la firma tipográfica de la página. */
.kicker{
  font-family:var(--texto);font-size:.7rem;font-weight:500;
  letter-spacing:.22em;text-transform:uppercase;color:var(--teal);
  margin:0 0 1.25rem;display:flex;align-items:center;gap:.75rem;
}
.kicker::before{content:"";width:2rem;height:1px;background:currentColor;opacity:.5}
.seccion--tinta .kicker,.seccion--teal .kicker{color:var(--oro)}

.titulo-x{font-size:clamp(2.1rem,1.1rem + 4.2vw,4.25rem);white-space:pre-line}
.titulo-m{font-size:clamp(1.75rem,1.1rem + 2.6vw,3rem)}
.titulo-s{font-size:clamp(1.3rem,1.05rem + 1.1vw,1.85rem)}
.plomo{font-size:clamp(1.05rem,1rem + .35vw,1.28rem);line-height:1.6;
  color:var(--gris);max-width:62ch}
.seccion--tinta .plomo,.seccion--teal .plomo{color:rgba(247,244,237,.72)}

/* ── Botones ────────────────────────────────────────────────────── */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.6rem;
  padding:.95rem 1.9rem;border:1px solid transparent;border-radius:999px;
  font-size:.82rem;font-weight:500;letter-spacing:.09em;text-transform:uppercase;
  cursor:pointer;transition:background var(--transicion),color var(--transicion),
    border-color var(--transicion),transform .3s ease;
  text-align:center;
}
.btn:hover{transform:translateY(-1px)}
.btn-oro{background:var(--oro);color:var(--tinta);border-color:var(--oro)}
.btn-oro:hover{background:var(--oro-suave);border-color:var(--oro-suave)}
.btn-linea{border-color:currentColor;color:inherit;background:transparent}
.btn-linea:hover{background:currentColor;color:var(--teal-hondo)}
.btn-teal{background:var(--teal);color:#fff;border-color:var(--teal)}
.btn-teal:hover{background:var(--teal-hondo);border-color:var(--teal-hondo)}
.btn[disabled]{opacity:.55;cursor:not-allowed;transform:none}

/* Enlace subrayado que crece — el gesto de "seguir leyendo". */
.enlace{
  display:inline-flex;align-items:center;gap:.5rem;font-size:.8rem;font-weight:500;
  letter-spacing:.12em;text-transform:uppercase;padding-bottom:.35rem;
  border-bottom:1px solid currentColor;
}
.enlace svg{transition:transform var(--transicion)}
.enlace:hover svg{transform:translateX(4px)}

/* ── Cabecera ───────────────────────────────────────────────────── */
.cab{
  position:fixed;inset:0 0 auto;z-index:100;
  transition:background var(--transicion),box-shadow var(--transicion),transform var(--transicion);
}
.cab-in{
  max-width:var(--ancho);margin-inline:auto;padding:1.25rem var(--gutter);
  display:flex;align-items:center;gap:2rem;
}
.cab-logo{flex:0 0 auto;display:block;line-height:0}
.cab-logo img{width:clamp(104px,10vw,132px);height:auto}
.logo-t{display:none}
.cab-nav{display:flex;gap:2rem;margin-inline:auto;font-size:.78rem;font-weight:500;
  letter-spacing:.13em;text-transform:uppercase;color:#fff}
.cab-nav a{position:relative;padding-block:.25rem;opacity:.88}
.cab-nav a::after{content:"";position:absolute;left:0;bottom:0;width:0;height:1px;
  background:currentColor;transition:width var(--transicion)}
.cab-nav a:hover{opacity:1}
.cab-nav a:hover::after{width:100%}
.cab-fin{display:flex;align-items:center;gap:1rem;margin-left:auto}
.cab-idioma{font-size:.72rem;font-weight:600;letter-spacing:.14em;color:#fff;
  opacity:.8;border:1px solid var(--linea-clara);border-radius:999px;padding:.4rem .7rem}
.cab-idioma:hover{opacity:1}
.cab-cta{padding:.7rem 1.35rem;font-size:.72rem}
.cab-menu{display:none;background:none;border:0;padding:.5rem;cursor:pointer}
.cab-menu span{display:block;width:22px;height:1.5px;background:#fff;margin:5px 0;
  transition:transform var(--transicion),opacity var(--transicion)}

/* Al hacer scroll el fondo entra y todo lo blanco se vuelve tinta. */
.cab.solida{background:var(--hueso);box-shadow:0 1px 0 var(--linea)}
.cab.solida .cab-nav,.cab.solida .cab-idioma{color:var(--tinta)}
.cab.solida .cab-idioma{border-color:var(--linea)}
.cab.solida .logo-b{display:none}
.cab.solida .logo-t{display:block}
.cab.solida .cab-menu span{background:var(--tinta)}
.cab.oculta{transform:translateY(-100%)}

/* Páginas SIN hero oscuro (el FAQ). La cabecera nace transparente con texto
   blanco porque arriba siempre hay una foto — y en una página que empieza en
   papel, el menú entero quedaba blanco sobre hueso: invisible hasta que el
   visitante hiciera scroll. No se puede resolver poniendo `solida` desde el
   servidor porque el JS la quita al volver arriba; tiene que ser CSS. */
body.sin-hero .cab{background:var(--hueso);box-shadow:0 1px 0 var(--linea)}
body.sin-hero .cab-nav,body.sin-hero .cab-idioma{color:var(--tinta)}
body.sin-hero .cab-idioma{border-color:var(--linea)}
body.sin-hero .logo-b{display:none}
body.sin-hero .logo-t{display:block}
body.sin-hero .cab-menu span{background:var(--tinta)}

.menu-movil{display:none;flex-direction:column;gap:.25rem;padding:1rem var(--gutter) 2rem;
  background:var(--hueso);border-top:1px solid var(--linea)}
.menu-movil a{padding:.85rem 0;border-bottom:1px solid var(--linea);
  font-size:.9rem;letter-spacing:.08em;text-transform:uppercase}

/* ── Hero ───────────────────────────────────────────────────────── */
.hero{position:relative;min-height:100svh;display:flex;align-items:flex-end;
  color:#fff;overflow:hidden;isolation:isolate}
.hero-foto{position:absolute;inset:0;z-index:-2}
.hero-foto img{width:100%;height:100%;object-fit:cover;
  animation:deriva 26s ease-in-out infinite alternate}
@keyframes deriva{from{transform:scale(1.04) translate3d(0,0,0)}
  to{transform:scale(1.12) translate3d(-1.5%,-1%,0)}}
.hero::after{
  content:"";position:absolute;inset:0;z-index:-1;
  /* Dos capas: una vertical que asegura el contraste del titular abajo y de
     la cabecera arriba, y una lateral que asienta el texto sobre el lado
     izquierdo. Los valores están calculados para que el párrafo pase AA sobre
     la foto más clara del catálogo (la de la alberca a mediodía) — con una
     capa más suave el texto se leía bien en un monitor y se perdía en otro. */
  background:
    linear-gradient(180deg,rgba(10,22,20,.58) 0%,rgba(10,22,20,.14) 30%,rgba(10,22,20,.22) 50%,rgba(10,22,20,.88) 100%),
    linear-gradient(90deg,rgba(2,58,56,.52) 0%,rgba(2,58,56,.06) 58%,rgba(2,58,56,0) 100%);
}
.hero-in{width:100%;max-width:var(--ancho);margin-inline:auto;
  padding:0 var(--gutter) clamp(2.5rem,7vh,5rem)}
.hero .kicker{color:var(--oro-suave)}
.hero h1{font-size:clamp(2.6rem,1rem + 7vw,6.5rem);font-weight:300;
  letter-spacing:-.03em;white-space:pre-line;max-width:16ch;
  text-shadow:0 2px 40px rgba(0,0,0,.28)}
.hero-bajada{max-width:46ch;margin:1.6rem 0 2.4rem;font-size:clamp(1rem,.95rem + .4vw,1.2rem);
  color:rgba(255,255,255,.9);line-height:1.65}
.hero-acciones{display:flex;flex-wrap:wrap;gap:.85rem}
.hero-abajo{position:absolute;right:var(--gutter);bottom:clamp(2.5rem,7vh,5rem);
  display:flex;align-items:center;gap:.75rem;font-size:.68rem;letter-spacing:.2em;
  text-transform:uppercase;opacity:.7;writing-mode:vertical-rl}
.hero-abajo::after{content:"";width:1px;height:3rem;background:currentColor;
  animation:baja 2.4s ease-in-out infinite}
@keyframes baja{0%,100%{transform:scaleY(.35);transform-origin:top}
  50%{transform:scaleY(1);transform-origin:top}}

/* ── Buscador de disponibilidad ─────────────────────────────────── */
.buscador{position:relative;z-index:5;margin-top:-3.5rem}
.buscador-caja{
  background:var(--hueso);border:1px solid var(--linea);
  box-shadow:0 24px 60px -30px rgba(10,22,20,.4);
  padding:clamp(1.5rem,3vw,2.25rem);
}
.buscador-cab{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem 1.25rem;
  margin-bottom:1.5rem}
.buscador-cab h2{font-size:clamp(1.2rem,1rem + .8vw,1.6rem)}
.buscador-cab p{margin:0;font-size:.82rem;color:var(--gris)}
.buscador-campos{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;align-items:end}
.campo{display:flex;flex-direction:column;gap:.4rem}
.campo label{font-size:.68rem;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gris)}
.campo input,.campo select,.campo textarea{
  width:100%;padding:.85rem .9rem;border:1px solid var(--linea);border-radius:0;
  background:#fff;font:inherit;font-size:.95rem;color:var(--tinta);
  transition:border-color var(--transicion);
}
.campo input:focus,.campo select:focus,.campo textarea:focus{
  border-color:var(--teal);outline:none}
.campo textarea{resize:vertical;min-height:5.5rem}

.resultados{margin-top:1.75rem;display:none}
.resultados.visible{display:block}
.resultados-lista{display:grid;gap:.6rem}
.res{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem 1rem;
  padding:.9rem 1rem;background:#fff;border:1px solid var(--linea)}
.res-nombre{font-family:var(--display);font-size:1.05rem;flex:1 1 14rem}
.res-meta{font-size:.8rem;color:var(--gris)}
.res-precio{font-family:var(--display);font-size:1.15rem;color:var(--teal);
  white-space:nowrap;text-align:right;line-height:1.25}
.res-precio small{display:block;font-family:var(--texto);font-size:.68rem;
  color:var(--gris);letter-spacing:.08em;text-transform:uppercase}
.res-agotado{font-size:.78rem;color:#9a5b4c;letter-spacing:.06em;text-transform:uppercase}
.res-nota{margin-top:.9rem;font-size:.78rem;color:var(--gris)}
.cargando{font-size:.85rem;color:var(--gris);letter-spacing:.08em}

/* ── Intro editorial ────────────────────────────────────────────── */
.dos-col{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);
  gap:clamp(2rem,6vw,6rem);align-items:start}
.dos-col--sticky > :first-child{position:sticky;top:7rem}
.intro-texto p{font-size:clamp(1.05rem,1rem + .4vw,1.22rem);line-height:1.72}
.intro-texto p:first-of-type::first-letter{
  font-family:var(--display);font-size:3.6em;line-height:.8;float:left;
  padding:.08em .12em 0 0;color:var(--teal)}
.cifras{display:grid;grid-template-columns:repeat(auto-fit,minmax(7rem,1fr));
  gap:1.5rem;margin-top:3rem;padding-top:2rem;border-top:1px solid var(--linea)}
.cifra b{display:block;font-family:var(--display);font-size:clamp(1.9rem,1.4rem + 1.6vw,2.9rem);
  font-weight:300;color:var(--teal);line-height:1}
.cifra span{font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gris)}

/* ── Departamentos ──────────────────────────────────────────────── */
.depas{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,20rem),1fr));
  gap:clamp(1.5rem,3vw,2.75rem);margin-top:clamp(2.5rem,5vw,4rem)}
.depa{display:flex;flex-direction:column;background:transparent;position:relative}
.depa-foto{position:relative;overflow:hidden;aspect-ratio:4/5;background:var(--arena)}
.depa-foto img{width:100%;height:100%;object-fit:cover;
  transition:transform 1.1s cubic-bezier(.16,1,.3,1)}
.depa:hover .depa-foto img{transform:scale(1.05)}
.depa-etiqueta{position:absolute;left:1rem;top:1rem;background:rgba(247,244,237,.94);
  padding:.35rem .7rem;font-size:.64rem;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--teal)}
.depa-cuerpo{padding-top:1.25rem;display:flex;flex-direction:column;flex:1}
.depa h3{font-size:clamp(1.15rem,1.05rem + .45vw,1.45rem);margin-bottom:.5rem}
.depa h3 a::after{content:"";position:absolute;inset:0}
.depa-meta{display:flex;flex-wrap:wrap;gap:.35rem .9rem;font-size:.78rem;
  color:var(--gris);margin-bottom:.9rem}
.depa-meta span{display:inline-flex;align-items:center;gap:.35rem}
.depa-resumen{font-size:.92rem;color:var(--gris);line-height:1.6;margin-bottom:1.1rem;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.depa-pie{margin-top:auto;display:flex;align-items:baseline;justify-content:space-between;
  gap:1rem;padding-top:.9rem;border-top:1px solid var(--linea)}
.depa-precio{font-family:var(--display);font-size:1.05rem;color:var(--teal)}
.depa-precio small{font-family:var(--texto);font-size:.68rem;color:var(--gris);
  letter-spacing:.1em;text-transform:uppercase;display:block}
.depa-ver{font-size:.72rem;font-weight:500;letter-spacing:.14em;text-transform:uppercase;
  color:var(--teal)}

/* ── Amenidades ─────────────────────────────────────────────────── */
.amen{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,13rem),1fr));
  gap:0;margin-top:clamp(2rem,4vw,3.5rem);border-top:1px solid var(--linea-clara)}
.amen li{list-style:none;display:flex;align-items:center;gap:.85rem;
  padding:1.15rem .5rem;border-bottom:1px solid var(--linea-clara);font-size:.92rem}
.amen svg{flex:0 0 auto;color:var(--oro);opacity:.9}

/* ── Fraccional ─────────────────────────────────────────────────── */
.pasos{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,15rem),1fr));
  gap:clamp(1.5rem,3vw,3rem);margin-top:clamp(2.5rem,5vw,4rem)}
.paso{border-top:1px solid var(--linea-clara);padding-top:1.5rem}
.paso b{display:block;font-family:var(--display);font-size:2.4rem;font-weight:300;
  color:var(--oro);line-height:1;margin-bottom:.9rem}
.paso h3{font-size:1.1rem;margin-bottom:.6rem}
.paso p{font-size:.92rem;color:rgba(247,244,237,.72);margin:0}
.aviso{margin-top:clamp(2.5rem,5vw,3.5rem);padding:1.25rem 1.5rem;
  border-left:2px solid var(--oro);background:rgba(255,255,255,.05);
  font-size:.88rem;color:rgba(247,244,237,.82);max-width:70ch}
.aviso strong{color:var(--oro-suave);font-weight:500}

/* ── Destino ────────────────────────────────────────────────────── */
.destino{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,17rem),1fr));
  gap:clamp(1.5rem,3vw,2.5rem);margin-top:clamp(2.5rem,5vw,4rem)}
.destino article{padding-top:1.4rem;border-top:1px solid var(--linea)}
.destino h3{font-size:1.15rem;margin-bottom:.6rem}
.destino p{font-size:.92rem;color:var(--gris);margin:0}
.tabla-llegar{width:100%;border-collapse:collapse;margin-top:2.5rem;font-size:.9rem}
.tabla-llegar th,.tabla-llegar td{text-align:left;padding:.85rem 1rem .85rem 0;
  border-bottom:1px solid var(--linea)}
.tabla-llegar th{font-size:.68rem;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gris)}
.tabla-llegar td:not(:first-child){color:var(--gris);white-space:nowrap}

/* ── FAQ ────────────────────────────────────────────────────────── */
.faq{max-width:56rem;margin-top:clamp(2rem,4vw,3rem)}
.faq details{border-bottom:1px solid var(--linea)}
.faq summary{
  display:flex;align-items:center;justify-content:space-between;gap:1.5rem;
  padding:1.4rem 0;cursor:pointer;list-style:none;
  font-family:var(--display);font-size:clamp(1.02rem,1rem + .3vw,1.25rem);
}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"";flex:0 0 auto;width:.7rem;height:.7rem;
  border-right:1px solid var(--teal);border-bottom:1px solid var(--teal);
  transform:rotate(45deg);transition:transform var(--transicion);margin-bottom:.3rem}
.faq details[open] summary::after{transform:rotate(-135deg);margin-bottom:-.2rem}
.faq-r{padding:0 3rem 1.6rem 0;color:var(--gris);font-size:.98rem;max-width:64ch}

/* ── Contacto / formulario ──────────────────────────────────────── */
.contacto{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);
  gap:clamp(2rem,5vw,5rem);align-items:start}
/* El `color` NO es decorativo: la caja se pinta clara pero vive dentro de
   secciones oscuras (.seccion--tinta / --teal), que heredan texto hueso. Sin
   este reset, el único texto sin color propio del formulario —la etiqueta del
   check "Quiero agendar una visita"— quedaba hueso sobre hueso: invisible, y
   con él el acceso a agendar la cita. Ningún test lo habría visto. */
.form-caja{background:var(--hueso);color:var(--tinta);
  padding:clamp(1.5rem,3vw,2.5rem);border:1px solid var(--linea)}
.form-rejilla{display:grid;grid-template-columns:1fr 1fr;gap:1.1rem}
.form-rejilla .ancho{grid-column:1/-1}
.opciones{display:flex;gap:.6rem;flex-wrap:wrap}
.opcion{flex:1 1 10rem;position:relative}
.opcion input{position:absolute;opacity:0;inset:0;cursor:pointer}
.opcion span{display:block;padding:.85rem 1rem;border:1px solid var(--linea);
  text-align:center;font-size:.88rem;transition:all var(--transicion);cursor:pointer}
.opcion input:checked + span{border-color:var(--teal);background:var(--teal);color:#fff}
.opcion input:focus-visible + span{outline:2px solid var(--oro);outline-offset:2px}
.check{display:flex;align-items:center;gap:.7rem;font-size:.92rem;cursor:pointer;
  padding:.9rem 0;border-top:1px solid var(--linea);margin-top:.3rem}
.check input{width:1.05rem;height:1.05rem;accent-color:var(--teal);cursor:pointer}
.cita-campos{display:none;grid-template-columns:1fr 1fr;gap:1.1rem}
.cita-campos.visible{display:grid}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.form-legal{font-size:.75rem;color:var(--gris);margin:1.1rem 0 0}
.form-msj{margin-top:1rem;padding:.9rem 1.1rem;font-size:.9rem;display:none}
.form-msj.error{display:block;background:#fdf0ec;border-left:2px solid #b4573f;color:#8c3f2c}
/* La confirmación hereda la MISMA caja del formulario. Antes era un bloque
   suelto: al ocultar el form la columna se encogía a la altura del texto, el
   layout daba un salto y el mensaje acababa detrás de la cabecera fija —
   justo el momento en que el visitante necesita leer que su cita quedó. */
.form-ok{display:none;text-align:center;background:var(--hueso);color:var(--tinta);
  border:1px solid var(--linea);padding:clamp(2.5rem,6vw,4rem) 1.5rem;
  min-height:22rem;place-content:center}
.form-ok.visible{display:grid}
.form-ok h3{font-size:clamp(1.5rem,1.2rem + 1.2vw,2.1rem);margin-bottom:.75rem;color:var(--teal)}
.form-ok p{color:var(--gris);max-width:34ch;margin-inline:auto}
.form-ok .marca-ok{width:3rem;height:3rem;margin:0 auto 1.5rem;border-radius:999px;
  border:1px solid var(--teal);display:grid;place-items:center;color:var(--teal)}

.contacto-lado h2{margin-bottom:1.25rem}
.contacto-datos{margin-top:2.5rem;padding-top:2rem;border-top:1px solid var(--linea-clara);
  display:grid;gap:1.25rem}
.contacto-datos div{display:grid;gap:.2rem}
.contacto-datos dt{font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--oro)}
.contacto-datos dd{margin:0;font-size:.98rem}
/* Tarjeta de ubicación. Antes aquí había un mapa embebido de OpenStreetMap y
   se cambió a propósito: un iframe de un tercero puede tardar, fallar o ser
   bloqueado, y un recuadro vacío en la sección de contacto se lee como una
   página rota. Esto siempre se pinta, pesa cero y además deja las
   coordenadas en TEXTO — que es justo lo que un modelo de lenguaje puede
   citar cuando alguien le pregunta dónde está el desarrollo. */
.ubica{margin-top:2rem;border:1px solid var(--linea-clara);padding:1.5rem}
.ubica-coord{font-family:var(--texto);font-size:.78rem;letter-spacing:.06em;
  color:var(--oro);margin:0 0 .35rem}
.ubica-dir{font-size:.95rem;line-height:1.7;margin:0 0 1.25rem}
.ubica-btns{display:flex;flex-wrap:wrap;gap:.6rem}
.ubica-btns a{display:inline-flex;align-items:center;gap:.45rem;
  padding:.6rem 1.1rem;border:1px solid var(--linea-clara);border-radius:999px;
  font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;
  transition:background var(--transicion),border-color var(--transicion)}
.ubica-btns a:hover{background:var(--oro);border-color:var(--oro);color:var(--tinta)}
.mapa{margin-top:.75rem;aspect-ratio:16/9;border:1px solid var(--linea-clara);
  filter:grayscale(.4) contrast(.95);transition:filter var(--transicion)}
.mapa:hover{filter:none}
.mapa iframe{width:100%;height:100%;border:0;display:block}

/* ── Ficha de departamento ──────────────────────────────────────── */
.ficha-hero{position:relative;min-height:70svh;display:flex;align-items:flex-end;
  color:#fff;overflow:hidden;isolation:isolate}
.ficha-hero img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2}
.ficha-hero::after{content:"";position:absolute;inset:0;z-index:-1;
  background:linear-gradient(180deg,rgba(10,22,20,.5),rgba(10,22,20,.15) 40%,rgba(10,22,20,.8))}
.ficha-hero-in{width:100%;max-width:var(--ancho);margin-inline:auto;
  padding:0 var(--gutter) clamp(2rem,5vh,3.5rem)}
.ficha-hero h1{font-size:clamp(2rem,1.2rem + 3.2vw,3.6rem);font-weight:300;max-width:20ch}
.migas{font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;
  opacity:.8;margin-bottom:1rem}
.migas a:hover{text-decoration:underline}
.ficha-datos{display:flex;flex-wrap:wrap;gap:1.5rem 2.5rem;margin-top:1.5rem;
  padding-top:1.5rem;border-top:1px solid var(--linea-clara)}
.ficha-datos div{display:grid;gap:.15rem}
.ficha-datos dt{font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;opacity:.7}
.ficha-datos dd{margin:0;font-family:var(--display);font-size:1.3rem}
/* `user-select:none` en lo que sólo se PULSA ────────────────────────
   Un doble clic —o un arrastre de dos píxeles al hacer clic— selecciona el
   <img>, y el navegador pinta de azul su CAJA COMPLETA: en el visor a
   pantalla completa eso son dos bandas azules a los lados de la foto y toda
   la imagen lavada. Se ve como un fallo de render, y es sólo una selección.
   `-webkit-user-drag:none` en las fotos evita además que arrastrarlas inicie
   el drag del archivo. */
.galeria,.visor,.cal,.res-dlg,.puertas,.visor-tira{
  -webkit-user-select:none;user-select:none}
.galeria img,.visor img,.puerta img{-webkit-user-drag:none;user-drag:none}
/* En el diálogo de reserva el texto de los campos SÍ se selecciona: es un
   formulario, no un lienzo. */
.res-dlg input,.res-dlg textarea{-webkit-user-select:text;user-select:text}

/* ── Mosaico de fotos ───────────────────────────────────────────────
   Rejilla de celdas CUADRADAS con una foto grande de 2×2 cada nueve.
   Antes la primera ocupaba `span 2` con la misma proporción 3/2 que las
   demás: al ser el doble de ancha era más alta que sus vecinas, el grid
   no tenía con qué rellenar y quedaba un hueco blanco enorme a su
   derecha. Con celdas cuadradas, `grid-row: span 2` en la grande y
   `auto-flow: dense`, el bloque de nueve encaja exacto en 4, 3 y 2
   columnas — sin huecos en ningún ancho.                              */
.galeria{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem;
  grid-auto-flow:dense;margin-top:clamp(2rem,4vw,3rem)}
.galeria a{display:block;position:relative;overflow:hidden;aspect-ratio:1;
  background:var(--arena);cursor:zoom-in}
.galeria img{width:100%;height:100%;object-fit:cover;
  transition:transform 1.2s cubic-bezier(.16,1,.3,1),filter var(--transicion)}
.galeria a:hover img{transform:scale(1.05)}
/* Una destacada cada nueve: 4 celdas de la grande + 8 pequeñas = 12, que
   son 3 filas de 4, 4 de 3 y 6 de 2. Sin restos.
   ⚠ Mantiene `aspect-ratio:1`. Con `auto` la altura la fijaba la proporción
   natural de la foto (3:2), la grande medía 450×300 donde le tocaban 450×450,
   las filas se descuadraban y volvía el hueco. Cuadrada, su alto es
   exactamente 2 filas + el gap, porque el ancho de fila = ancho de columna. */
.galeria a:nth-child(9n+1){grid-column:span 2;grid-row:span 2}
/* La lupa: dice que la foto se abre, sin tapar la foto. */
.galeria a::after{
  content:"";position:absolute;right:.6rem;bottom:.6rem;width:1.9rem;height:1.9rem;
  border-radius:999px;background:rgba(10,22,20,.55) center/0.85rem no-repeat;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='1.6' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-4.5-4.5M11 8v6M8 11h6'/%3E%3C/svg%3E");
  opacity:0;transform:translateY(4px);
  transition:opacity var(--transicion),transform var(--transicion);
}
.galeria a:hover::after,.galeria a:focus-visible::after{opacity:1;transform:none}
@media (max-width:1024px){ .galeria{grid-template-columns:repeat(3,1fr)} }
@media (max-width:640px){ .galeria{grid-template-columns:repeat(2,1fr);gap:.35rem} }
.reglas{display:grid;gap:1.5rem;margin-top:2rem}
.reglas h3{font-size:1.05rem;margin-bottom:.5rem}
.reglas p{font-size:.92rem;color:var(--gris);margin:0}
.otras{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,15rem),1fr));
  gap:1.5rem;margin-top:2.5rem}

/* ── Pie ────────────────────────────────────────────────────────── */
.pie{background:var(--tinta);color:rgba(247,244,237,.78);
  padding:clamp(3.5rem,7vw,6rem) 0 0}
.pie-in{max-width:var(--ancho);margin-inline:auto;padding-inline:var(--gutter);
  display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:clamp(2rem,4vw,4rem)}
.pie h3{font-size:.7rem;font-weight:600;letter-spacing:.18em;text-transform:uppercase;
  color:var(--oro);font-family:var(--texto);margin-bottom:1.1rem}
.pie a:hover{color:var(--hueso)}
.pie ul{list-style:none;margin:0;padding:0;display:grid;gap:.6rem;font-size:.9rem}
.pie address{font-style:normal;font-size:.9rem;line-height:1.9}
.pie-lema{font-family:var(--display);font-size:1.15rem;color:rgba(247,244,237,.9);
  margin:1.5rem 0 1rem;max-width:22ch}
.pie-reti{font-size:.82rem}
.pie-reti a{color:var(--oro)}
.pie-wa{display:inline-block;margin-top:1rem;font-size:.72rem;letter-spacing:.14em;
  text-transform:uppercase;border-bottom:1px solid var(--oro);padding-bottom:.25rem;color:var(--oro)}
.pie-datos{color:rgba(247,244,237,.6);font-size:.85rem}
.pie-redes{display:flex;flex-wrap:wrap;gap:.9rem;margin-top:1.25rem;font-size:.8rem}
.pie-legal{max-width:var(--ancho);margin:clamp(3rem,6vw,5rem) auto 0;
  padding:1.5rem var(--gutter);border-top:1px solid rgba(247,244,237,.12);
  display:flex;flex-wrap:wrap;gap:.5rem 2rem;justify-content:space-between;
  font-size:.76rem;color:rgba(247,244,237,.5)}

/* ── Reveal al hacer scroll ─────────────────────────────────────────
   Ojo con el `.js`: es lo que evita el modo de fallo más caro de esta
   técnica. Si el `opacity:0` viviera en `.rev` a secas, cualquier cosa
   que impida al script marcar los elementos —un error de JS, un
   bloqueador, una pestaña en segundo plano que congela los callbacks—
   dejaría la página EN BLANCO para una persona, con todo el contenido
   presente en el HTML. La clase la pone un script inline en el <head>,
   así que sin JS nada se esconde nunca.                              */
.js .rev{opacity:0;transform:translateY(22px);
  transition:opacity .9s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1)}
.js .rev.dentro{opacity:1;transform:none}

/* ── Responsive ─────────────────────────────────────────────────── */
@media (max-width:1024px){
  .pie-in{grid-template-columns:1fr 1fr}
  .contacto,.dos-col{grid-template-columns:1fr}
  .dos-col--sticky > :first-child{position:static}
  .buscador-campos{grid-template-columns:1fr 1fr}
  .buscador-campos > :last-child{grid-column:1/-1}
}
@media (max-width:820px){
  .cab-nav{display:none}
  .cab-menu{display:block}
  .cab-in{gap:1rem}
  .menu-movil{display:none}
  .menu-movil.abierto{display:flex}
  .hero-abajo{display:none}
}
@media (max-width:600px){
  /* En una columna, el retrato 4/5 da tarjetas de 560 px de alto: seis
     departamentos son cuatro pantallas de scroll para comparar. En apaisado
     entran dos por pantalla, que es lo que hace falta para elegir. */
  .depa-foto{aspect-ratio:4/3}
  .buscador{margin-top:-2rem}
  .buscador-campos,.form-rejilla,.cita-campos.visible{grid-template-columns:1fr}
  .pie-in{grid-template-columns:1fr}
  .cab-cta{display:none}
  .hero h1{max-width:100%}
  .btn{width:100%}
  .hero-acciones{flex-direction:column}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important;scroll-behavior:auto!important}
  .js .rev{opacity:1;transform:none}
  .hero-foto img{animation:none}
}

@media print{
  .cab,.chat,.hero-abajo,.buscador{display:none}
  body{background:#fff}
}

/* ══════════════════════════════════════════════════════════════════
   Calendario propio
   ------------------------------------------------------------------
   Sustituye a `<input type="date">`. Los nativos no se pueden
   maquillar (el panel lo pinta el sistema operativo, no la página),
   no saben nada de disponibilidad y en escritorio obligan a abrir un
   selector distinto para cada campo — con lo que elegir un rango de
   fechas son dos viajes y ninguna vista del rango completo.

   Este pinta dos meses, marca en TACHADO las noches sin inventario
   (dato real de `/api/landing/calendario`) y lee la selección como un
   rango: primer clic = llegada, segundo = salida.
   ══════════════════════════════════════════════════════════════════ */

/* El campo visible: mismo aspecto que un input, pero es un botón. */
.f-fecha{
  width:100%;display:flex;align-items:center;justify-content:space-between;gap:.75rem;
  height:3.25rem;padding:0 .9rem;border:1px solid var(--linea);background:#fff;
  font:inherit;font-size:.95rem;color:var(--tinta);text-align:left;cursor:pointer;
  transition:border-color var(--transicion);
}
.f-fecha:hover{border-color:var(--teal-claro)}
.f-fecha[aria-expanded="true"]{border-color:var(--teal)}
.f-fecha svg{flex:0 0 auto;color:var(--gris)}
.f-fecha .f-vacio{color:var(--gris)}

/* Todos los controles del buscador a la MISMA altura. El grid es
   `align-items:end`, y como el input de fecha, el select y el botón traen
   alturas nativas distintas, sus etiquetas quedaban a tres alturas: se veía
   chueco aunque el grid estuviera bien. */
.buscador-campos .campo input,
.buscador-campos .campo select,
.buscador-campos .btn{height:3.25rem}
.buscador-campos .campo select{padding-block:0}

.cal-ancla{position:relative}

.cal{
  position:absolute;z-index:60;top:calc(100% + .5rem);left:0;
  background:var(--hueso);border:1px solid var(--linea);
  box-shadow:0 30px 70px -35px rgba(10,22,20,.5);
  padding:1.25rem;display:none;
}
.cal.abierto{display:block}
/* En pantallas donde el panel no cabe a la derecha, se ancla al borde
   opuesto: un calendario que se sale de la pantalla no se puede usar. */
.cal.derecha{left:auto;right:0}
.cal-meses{display:flex;gap:2rem}
.cal-mes{min-width:16.5rem}
.cal-cab{display:flex;align-items:center;justify-content:space-between;
  margin-bottom:.9rem;min-height:2rem}
.cal-titulo{font-family:var(--display);font-size:1.05rem;text-transform:capitalize;
  letter-spacing:-.01em}
.cal-nav{width:2rem;height:2rem;display:grid;place-items:center;border:1px solid var(--linea);
  border-radius:999px;background:#fff;cursor:pointer;color:var(--teal);
  transition:background var(--transicion),border-color var(--transicion)}
.cal-nav:hover:not(:disabled){background:var(--teal);border-color:var(--teal);color:#fff}
.cal-nav:disabled{opacity:.3;cursor:not-allowed}
.cal-sem,.cal-dias{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cal-sem{margin-bottom:.35rem}
.cal-sem span{text-align:center;font-size:.62rem;font-weight:600;letter-spacing:.1em;
  text-transform:uppercase;color:var(--gris)}

.cal-dia{
  position:relative;aspect-ratio:1;display:grid;place-items:center;
  border:0;background:transparent;font:inherit;font-size:.9rem;
  color:var(--tinta);cursor:pointer;border-radius:0;
  transition:background .18s ease,color .18s ease;
}
.cal-dia:hover:not(:disabled){background:var(--arena)}
.cal-dia:disabled{color:rgba(10,22,20,.22);cursor:not-allowed}
.cal-dia.vacio{visibility:hidden}
/* Sin inventario esa noche: tachado, no sólo gris. El gris se confunde con
   "fuera del mes"; una diagonal dice "no se puede" sin leer la leyenda. */
.cal-dia.ocupado{color:rgba(10,22,20,.28);cursor:not-allowed;text-decoration:line-through;
  text-decoration-thickness:1px}
.cal-dia.hoy::after{content:"";position:absolute;bottom:.28rem;width:3px;height:3px;
  border-radius:999px;background:var(--oro)}
.cal-dia.rango{background:rgba(3,83,80,.10)}
.cal-dia.punta{background:var(--teal);color:#fff;font-weight:500}
.cal-dia.punta.hoy::after{background:var(--oro-suave)}
.cal-dia.pre{background:rgba(3,83,80,.06)}

.cal-pie{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1rem;
  margin-top:1.1rem;padding-top:.9rem;border-top:1px solid var(--linea)}
.cal-resumen{font-size:.82rem;color:var(--gris);margin-right:auto}
.cal-resumen b{font-family:var(--display);font-size:1rem;color:var(--teal);font-weight:400}
.cal-leyenda{display:flex;align-items:center;gap:.4rem;font-size:.68rem;color:var(--gris);
  letter-spacing:.04em}
.cal-leyenda i{width:.85rem;height:1px;background:var(--gris);display:inline-block;
  transform:rotate(-12deg)}
.cal-btn{padding:.55rem 1.1rem;border:1px solid var(--linea);background:#fff;
  font-size:.7rem;font-weight:500;letter-spacing:.12em;text-transform:uppercase;
  cursor:pointer;border-radius:999px;transition:all var(--transicion)}
.cal-btn:hover{border-color:var(--teal);color:var(--teal)}
.cal-btn.principal{background:var(--teal);border-color:var(--teal);color:#fff}
.cal-btn.principal:hover{background:var(--teal-hondo);border-color:var(--teal-hondo);color:#fff}

@media (max-width:900px){
  .cal-meses{gap:1.25rem}
  .cal-mes:nth-child(2){display:none}
}
@media (max-width:600px){
  /* A pantalla completa: un panel flotante de 300 px en un móvil deja los
     días en 38 px y se elige el 14 queriendo el 15. */
  /* z-index sobre la cabecera (100) y el chat (95/110): en móvil el panel
     ocupa el ancho completo y cualquiera de los dos lo cruzaría. */
  .cal{position:fixed;inset:auto 0 0 0;top:auto;z-index:120;max-height:88vh;overflow:auto;
    border-left:0;border-right:0;border-bottom:0;padding:1.25rem 1rem 1.5rem;
    box-shadow:0 -20px 60px -20px rgba(10,22,20,.5)}
  .cal-mes{min-width:0;width:100%}
  .cal-dia{font-size:1rem}
  /* El resumen en su propia línea y los dos botones repartidos: apilados
     dejaban «Listo» solo al final y parecía otra sección. */
  .cal-resumen{flex:1 1 100%;margin-right:0}
  .cal-leyenda{flex:1 1 100%;order:3}
  .cal-btn{flex:1 1 0;text-align:center}
}

@media (max-width:900px) and (min-width:601px){
  /* Con un solo mes el panel mide ~300 px: la leyenda y los dos botones no
     caben en la misma línea, así que el resumen se lleva su propio renglón. */
  .cal-resumen{flex:1 1 100%;margin-right:0}
}

/* ══════════════════════════════════════════════════════════════════
   Vistas separadas
   ------------------------------------------------------------------
   La portada dejó de contener todo. Estos son los tres patrones que
   aparecieron al partirla: el repartidor de la portada (`.puertas`),
   las amenidades agrupadas y el índice de la galería.
   ══════════════════════════════════════════════════════════════════ */

/* Página actual en el menú: una línea, no un color — el nav vive sobre
   fotos y un color no siempre contrasta. */
.cab-nav a.actual{opacity:1}
.cab-nav a.actual::after{width:100%}

/* ── Repartidor de la portada ───────────────────────────────────── */
.puertas{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,15rem),1fr));
  gap:clamp(1rem,2vw,1.5rem);margin-top:clamp(2rem,4vw,3rem)}
.puerta{position:relative;display:block;overflow:hidden;aspect-ratio:4/5;
  background:var(--teal-hondo)}
.puerta img{width:100%;height:100%;object-fit:cover;opacity:.62;
  transition:transform 1.1s cubic-bezier(.16,1,.3,1),opacity var(--transicion)}
.puerta:hover img{transform:scale(1.06);opacity:.75}
.puerta::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(10,22,20,.1) 40%,rgba(10,22,20,.9) 100%)}
.puerta-txt{position:absolute;inset:auto 0 0 0;z-index:2;padding:1.5rem 1.25rem;
  display:grid;gap:.4rem;color:#fff}
.puerta-txt b{font-family:var(--display);font-size:1.2rem;font-weight:400;line-height:1.15}
.puerta-txt em{font-style:normal;font-size:.82rem;color:rgba(255,255,255,.72);line-height:1.45}
@media (max-width:600px){
  /* En una columna, 4/5 da tarjetas de 560 px: cuatro puertas son un scroll de
     dos pantallas y media para lo que es un índice. Se aplanan. */
  .puerta{aspect-ratio:16/10}
  .puerta-txt{padding:1.15rem 1rem}
  .puerta-txt b{font-size:1.05rem}
}

/* ── Amenidades agrupadas ───────────────────────────────────────── */
.amen-grupo{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);
  gap:clamp(1.5rem,4vw,4rem);align-items:start;
  padding-block:clamp(2rem,4vw,3rem);border-top:1px solid var(--linea)}
.amen-grupo:first-child{border-top:0;padding-top:0}
.amen-grupo .amen{margin-top:0;border-top:0}
/* Sobre papel las líneas claras no se ven: se usan las oscuras. */
.amen--claro{border-top:1px solid var(--linea)!important}
.amen--claro li{border-bottom-color:var(--linea)}
.amen--claro svg{color:var(--teal)}
@media (max-width:820px){
  .amen-grupo{grid-template-columns:1fr}
}

/* ── Índice de la galería ───────────────────────────────────────── */
.galeria-idx{position:sticky;top:0;z-index:50;background:var(--hueso);
  border-bottom:1px solid var(--linea)}
.galeria-idx-in{display:flex;gap:1.5rem;overflow-x:auto;padding-block:.9rem;
  scrollbar-width:none}
.galeria-idx-in::-webkit-scrollbar{display:none}
.galeria-idx a{white-space:nowrap;font-size:.74rem;font-weight:500;letter-spacing:.1em;
  text-transform:uppercase;color:var(--gris);padding-bottom:.2rem;
  border-bottom:1px solid transparent;transition:all var(--transicion)}
.galeria-idx a:hover{color:var(--teal);border-bottom-color:var(--teal)}
/* La cabecera fija mide ~5rem: sin este desplazamiento, saltar a un ancla
   deja el título del departamento debajo del menú. */
[id^="g-"]{scroll-margin-top:7.5rem}

/* ══════════════════════════════════════════════════════════════════
   Solicitud de reserva
   ------------------------------------------------------------------
   El resultado del buscador se puede pedir. Diálogo nativo <dialog>:
   trae foco atrapado, Escape y fondo inerte sin código propio.

   ⚠ El copy dice «solicitar», no «reservar»: STAYS_READ_ONLY sigue en
   true y la cuenta del PMS no se toca. La reserva la cierra un asesor.
   ══════════════════════════════════════════════════════════════════ */

.res-btn{
  flex:0 0 auto;padding:.6rem 1.15rem;border:1px solid var(--teal);
  border-radius:999px;background:var(--teal);color:#fff;cursor:pointer;
  font-size:.7rem;font-weight:500;letter-spacing:.11em;text-transform:uppercase;
  transition:background var(--transicion),border-color var(--transicion);
}
.res-btn:hover{background:var(--teal-hondo);border-color:var(--teal-hondo)}
/* La fila de resultado pasa a tener cuatro cosas: nombre, meta, precio y
   botón. El precio deja de estirarse para que el botón no salte de línea. */
.res{gap:.6rem 1rem}
.res .res-nombre{flex:1 1 12rem}

.res-dlg{
  border:0;padding:0;max-width:min(30rem,calc(100vw - 2rem));width:100%;
  background:var(--hueso);color:var(--tinta);
  box-shadow:0 40px 90px -40px rgba(10,22,20,.6);
}
.res-dlg::backdrop{background:rgba(10,22,20,.72)}
.res-dlg-in{padding:clamp(1.5rem,4vw,2.25rem)}
.res-dlg h2{font-size:clamp(1.3rem,1.1rem + .8vw,1.7rem);margin-bottom:1.1rem}
.res-dlg-x{position:absolute;top:.5rem;right:.5rem;margin:0}
.res-dlg-x button{width:2.25rem;height:2.25rem;border:0;background:transparent;
  font-size:1.6rem;line-height:1;color:var(--gris);cursor:pointer;border-radius:999px}
.res-dlg-x button:hover{background:var(--arena);color:var(--tinta)}

/* El resumen de lo que se pidió. Va ARRIBA del formulario a propósito: lo
   primero que el visitante confirma es que es esto lo que quiere. */
.res-resumen{border:1px solid var(--linea);padding:1rem 1.1rem;margin-bottom:1.1rem}
.res-resumen-tipo{font-family:var(--display);font-size:1.05rem;margin:0 0 .75rem;
  line-height:1.25}
.res-resumen dl{display:grid;grid-template-columns:1fr 1fr;gap:.75rem 1rem;margin:0}
.res-resumen dt{font-size:.62rem;font-weight:600;letter-spacing:.14em;
  text-transform:uppercase;color:var(--gris);margin-bottom:.15rem}
.res-resumen dd{margin:0;font-size:.94rem}
.res-resumen-total{font-family:var(--display);font-size:1.15rem;color:var(--teal)}
.res-resumen-total small{font-family:var(--texto);font-size:.66rem;color:var(--gris);
  letter-spacing:.08em;text-transform:uppercase;display:block}
.res-dlg-nota{font-size:.82rem;color:var(--gris);margin:0 0 1.25rem}
.res-dlg .campo{margin-bottom:.9rem}

.res-ok{display:none;text-align:center;padding:1rem 0}
.res-ok.visible{display:block}
.res-ok h3{font-size:clamp(1.25rem,1.1rem + .7vw,1.6rem);color:var(--teal);
  margin-bottom:.6rem}
.res-ok p{color:var(--gris);margin:0}

@media (max-width:600px){
  /* Pegado abajo y a ancho completo: un diálogo centrado con teclado abierto
     deja los campos debajo del teclado. */
  .res-dlg{max-width:100%;margin:auto 0 0;border-radius:0}
  .res-resumen dl{grid-template-columns:1fr}
  .res{align-items:flex-start}
  .res-btn{width:100%;margin-top:.35rem}
}

/* ══════════════════════════════════════════════════════════════════
   Visor de fotos
   ------------------------------------------------------------------
   Antes, pulsar una foto abría el JPG crudo de Stays en otra pestaña:
   el visitante salía del sitio, veía un archivo suelto sobre fondo
   blanco del navegador y para volver tenía que cerrar la pestaña. Se
   perdía la sesión de navegación y cualquier idea de marca.

   Esto es un <dialog> a pantalla completa: la foto entera sobre casi
   negro, flechas, teclado, swipe, contador, leyenda y una tira de
   miniaturas. El foco atrapado, Escape y el fondo inerte los da el
   propio <dialog> — sin código de accesibilidad propio que mantener.
   ══════════════════════════════════════════════════════════════════ */

.visor{
  /* `inset:0` con `margin:0` en vez de `100vw/100vh`: un <dialog> modal ya es
     `position:fixed`, así que se estira al viewport exacto. `100vw` incluye la
     barra de desplazamiento y desplaza el contenido unos píxeles a la
     izquierda en escritorio — invisible por el `overflow-x:hidden` del body,
     y por eso peor: se corrige sin que nadie sepa que estaba mal. */
  border:0;padding:0;margin:0;inset:0;width:auto;height:auto;
  max-width:none;max-height:none;
  background:#070E0D;color:var(--hueso);overflow:hidden;
}
.visor::backdrop{background:#070E0D}
.visor-in{
  /* `minmax(0, …)` en la fila Y en la columna, no `1fr` a secas.
     Un track `1fr` es en realidad `minmax(auto, 1fr)`, y ese `auto` vale el
     tamaño del CONTENIDO: la foto a tamaño natural y la tira de 24 miniaturas
     (1,491 px de ancho) estiraban el contenedor a 1,523 px dentro de un
     viewport de 500. Resultado: la foto se salía por la derecha, la flecha
     «siguiente» quedaba fuera de la pantalla y el `max-height:100%` de la
     imagen se resolvía contra una altura ya crecida, así que no limitaba
     nada. Con `minmax(0, …)` el contenedor manda sobre el contenido. */
  position:relative;width:100%;height:100%;display:grid;
  grid-template-rows:auto minmax(0,1fr) auto;
  grid-template-columns:minmax(0,1fr);
}

/* Barra superior: contador a la izquierda, cerrar a la derecha. */
.visor-cab{display:flex;align-items:center;justify-content:space-between;gap:1rem;
  padding:1rem clamp(1rem,3vw,2rem);z-index:3}
.visor-num{font-family:var(--display);font-size:1rem;letter-spacing:.02em;
  color:rgba(247,244,237,.85)}
.visor-num b{font-weight:400}
.visor-num span{color:rgba(247,244,237,.45)}
.visor-x{width:2.75rem;height:2.75rem;border-radius:999px;border:1px solid rgba(247,244,237,.22);
  background:transparent;color:var(--hueso);cursor:pointer;font-size:1.5rem;line-height:1;
  display:grid;place-items:center;transition:all var(--transicion)}
.visor-x:hover{background:var(--hueso);color:var(--tinta);border-color:var(--hueso)}

/* El escenario. `contain` y no `cover`: en un visor se ve la foto
   completa, no un recorte — es la diferencia entre mirar y adivinar. */
/* SIN `place-items:center`. Con `center` el <img> no se estira a la celda, y
   entonces su `height:100%` no tiene contra qué resolverse: cae a `auto` y la
   imagen toma su proporción natural (853 px de alto donde caben 700), se sale
   por abajo y tapa el pie. Con el reparto por defecto del grid (`stretch`) la
   imagen ocupa la celda exacta y `object-fit:contain` la centra dentro sin
   recortarla — que es lo que se quería del `center`, pero sin el efecto
   secundario. */
.visor-foto{position:relative;display:grid;overflow:hidden;
  min-width:0;min-height:0;padding:0 clamp(.5rem,4vw,4.5rem)}
.visor-foto img{width:100%;height:100%;min-width:0;min-height:0;
  align-self:stretch;justify-self:stretch;object-fit:contain;
  opacity:0;transform:scale(.985);
  transition:opacity .5s ease,transform .7s cubic-bezier(.16,1,.3,1)}
.visor-foto img.lista{opacity:1;transform:none}

.visor-flecha{
  position:absolute;top:50%;transform:translateY(-50%);z-index:3;
  width:3.25rem;height:3.25rem;border-radius:999px;
  border:1px solid rgba(247,244,237,.22);background:rgba(7,14,13,.45);
  color:var(--hueso);cursor:pointer;display:grid;place-items:center;
  transition:background var(--transicion),border-color var(--transicion),opacity var(--transicion);
}
.visor-flecha:hover{background:var(--hueso);color:var(--tinta);border-color:var(--hueso)}
.visor-flecha[disabled]{opacity:.25;cursor:default;pointer-events:none}
.visor-prev{left:clamp(.5rem,2vw,1.5rem)}
.visor-next{right:clamp(.5rem,2vw,1.5rem)}

/* Pie: leyenda + miniaturas. */
.visor-pie{padding:.75rem clamp(1rem,3vw,2rem) 1.1rem;z-index:3}
.visor-leyenda{font-size:.85rem;color:rgba(247,244,237,.6);margin:0 0 .75rem;
  display:flex;flex-wrap:wrap;gap:.25rem .75rem;align-items:baseline}
.visor-leyenda b{font-family:var(--display);font-size:1rem;font-weight:400;
  color:rgba(247,244,237,.92)}
.visor-tira{display:flex;gap:.4rem;overflow-x:auto;padding-bottom:.25rem;
  /* `min-width:0`: sin él, el ancho mínimo de un contenedor con `overflow` es
     el de su contenido, y las 24 miniaturas estiraban el visor entero. */
  min-width:0;scrollbar-width:none;scroll-behavior:smooth}
.visor-tira::-webkit-scrollbar{display:none}
/* Un degradado a la derecha insinúa que la tira sigue: sin él, con 24 fotos
   parece que sólo hay las siete que se ven. */
.visor-pie{position:relative}
.visor-pie::after{content:"";position:absolute;right:0;bottom:1.1rem;
  width:clamp(1.5rem,4vw,3rem);height:3.25rem;pointer-events:none;
  background:linear-gradient(90deg,rgba(7,14,13,0),#070E0D)}
.visor-tira button{flex:0 0 auto;width:4.5rem;height:3.25rem;padding:0;border:0;
  /* Fondo propio: si una miniatura tarda, se ve el hueco de la celda y la
     tira se lee como una tira, no como un vacío. */
  background:#16211F;cursor:pointer;overflow:hidden;position:relative;
  opacity:.45;transition:opacity var(--transicion)}
.visor-tira button:hover{opacity:.8}
.visor-tira button[aria-current="true"]{opacity:1;outline:1px solid var(--oro);
  outline-offset:-1px}
.visor-tira img{width:100%;height:100%;object-fit:cover}

@media (max-width:640px){
  .visor-flecha{width:2.75rem;height:2.75rem}
  .visor-foto{padding:0 .35rem}
  .visor-tira button{width:3.5rem;height:2.5rem}
  .visor-leyenda{font-size:.78rem}
}
@media (prefers-reduced-motion:reduce){
  .visor-foto img{transition:none;opacity:1;transform:none}
}

/* ══════════════════════════════════════════════════════════════════
   Diseño del cliente (oct-2026) — maquetas «01-Home» y «02-Propiedad-
   Fraccional». Sans en negritas, verde de botón, café arena para los
   títulos de sección y fondo crema. Va al final para ganar la cascada sin
   tocar las reglas de las vistas que la maqueta todavía no cubre.
   ══════════════════════════════════════════════════════════════════ */
:root{
  --verde:#0D7D69;
  --verde-hondo:#035350;
  --cafe:#B98E5A;
  --crema:#EEEAE4;
  --display:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
}
h1,h2,h3,h4{font-weight:700;letter-spacing:-.01em;line-height:1.15}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* Marca «pendiente»: lo que el cliente todavía no nos manda. */
.pend{display:inline-block;font-style:normal;font-size:.62rem;font-weight:600;
  letter-spacing:.1em;text-transform:uppercase;color:#8a5a00;background:#FFF1C7;
  border:1px dashed #D9A400;border-radius:4px;padding:.1rem .4rem;vertical-align:middle}
.pend--flota{position:absolute;top:.75rem;left:.75rem}
.falta{opacity:.85}

/* ── Botones de la maqueta ── */
.btn{border-radius:4px;letter-spacing:.02em;text-transform:none;font-weight:600;font-size:.9rem;padding:.85rem 1.6rem}
.btn-verde{background:var(--verde);color:#fff;border-color:var(--verde)}
.btn-verde:hover{background:var(--verde-hondo);border-color:var(--verde-hondo)}
.btn-hondo{background:var(--verde-hondo);color:#fff;border-color:var(--verde-hondo)}
.btn-hondo:hover{background:var(--verde)}
.btn-claro{background:rgba(255,255,255,.92);color:var(--verde-hondo);border-color:#fff}
.btn-claro:hover{background:#fff}
.btn-borde{border:1.5px solid var(--verde);color:var(--verde);background:transparent}
.btn-borde:hover{background:var(--verde);color:#fff}
.btn-cafe{background:#8C6A3F;color:#fff;border-color:#8C6A3F}
.btn-cafe:hover{background:#6f5331}
.btn-blanco{background:#fff;color:var(--verde-hondo);border-color:#fff}
.btn-blanco-borde{border:1.5px solid #fff;color:#fff;background:transparent}
.btn-blanco-borde:hover{background:#fff;color:var(--verde-hondo)}

/* ── Cabecera blanca y fija arriba (la maqueta no la monta sobre la foto) ── */
.cab{position:sticky;top:0;background:#fff;box-shadow:0 1px 0 var(--linea)}
.cab-in{padding-block:.9rem}
.cab-nav{color:#3c4a47;text-transform:none;letter-spacing:0;font-size:.88rem;font-weight:600;gap:1.75rem}
.cab-nav a.actual{color:var(--verde-hondo)}
.cab-idioma{color:var(--tinta);border-color:var(--linea)}
.cab-menu span{background:var(--tinta)}
.cab-cta{padding:.75rem 1.4rem;font-size:.85rem}
.menu-movil{background:#fff}
/* El hero de las vistas viejas ya no corre bajo la cabecera. */
.hero{min-height:calc(100svh - 4.5rem)}

/* ── Utilidades de sección ── */
.dz-sec{padding-block:clamp(3rem,6vw,5rem);background:#fff}
.dz-sec--crema{background:var(--crema)}
.dz-sec--corta{padding-block:clamp(2.5rem,4vw,3.5rem)}
.dz-sec--caja .env{background:#fff;border:1px solid var(--linea);padding-block:clamp(1.5rem,3vw,2.5rem)}
.dz-sec--caja{background:var(--crema);padding-block:clamp(1rem,2vw,1.5rem)}
.dz-kicker{font-size:.7rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:#4d5a57;margin:0 0 .6rem}
.dz-kicker--claro{color:rgba(255,255,255,.88)}
.dz-kicker--oro{color:#E3C27E}
.dz-titulo{font-size:clamp(1.5rem,1.1rem + 1.6vw,2.25rem);color:var(--verde);margin-bottom:1rem}
.dz-titulo--cafe{color:var(--cafe)}
.dz-bajada{color:var(--gris);margin:0}
.dz-cabecera{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1.5rem}
.dz-cabecera .dz-titulo{margin-bottom:.35rem}
.dz-link{color:var(--verde);text-decoration:underline;font-weight:600}

/* ── Hero con carrusel ── */
.dz-hero{position:relative;min-height:min(78svh,44rem);display:flex;align-items:center;color:#fff;overflow:hidden;isolation:isolate}
.dz-hero--media{min-height:min(60svh,34rem)}
.dz-hero-fotos{position:absolute;inset:0;z-index:-2}
.dz-hero-fotos img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity 1.2s ease}
.dz-hero-fotos img.activa{opacity:1}
.dz-hero::after{content:"";position:absolute;inset:0;z-index:-1;
  background:linear-gradient(90deg,rgba(3,40,38,.62) 0%,rgba(3,40,38,.25) 55%,rgba(3,40,38,.05) 100%)}
.dz-hero-in{width:100%;max-width:var(--ancho);margin-inline:auto;padding:4rem var(--gutter)}
.dz-hero h1{font-size:clamp(2.2rem,1.2rem + 3.6vw,3.6rem);white-space:pre-line;max-width:18ch;text-shadow:0 2px 24px rgba(0,0,0,.25)}
.dz-hero-bajada{max-width:44ch;margin:1rem 0 1.8rem;color:rgba(255,255,255,.92)}
.dz-acciones{display:flex;flex-wrap:wrap;gap:.75rem}
.dz-puntos{position:absolute;left:50%;bottom:1.5rem;transform:translateX(-50%);display:flex;gap:.55rem}
.dz-puntos button{width:.6rem;height:.6rem;border-radius:50%;border:0;background:rgba(255,255,255,.5);cursor:pointer;padding:0}
.dz-puntos button.activo{background:#fff;transform:scale(1.25)}

/* ── Buscador en barra ── */
.buscador--barra{margin-top:0;background:var(--crema);padding-block:1.75rem}
.buscador--barra .buscador-caja{background:#fff;box-shadow:none;border:1px solid var(--linea);padding:1.25rem 1.5rem}
.buscador--barra .buscador-campos{grid-template-columns:1fr 1fr 1fr auto}
.buscador--barra .btn-teal{background:var(--verde-hondo);border-color:var(--verde-hondo);border-radius:4px}

/* ── Por qué ── */
.dz-porque{display:grid;grid-template-columns:repeat(4,1fr);gap:2rem;margin-top:1.75rem}
.dz-porque h3{font-size:1rem;margin:.75rem 0 .35rem;color:var(--tinta)}
.dz-porque p{font-size:.9rem;color:var(--gris);margin:0}
.dz-ico{color:var(--verde);display:inline-flex}

/* ── Rejillas de tarjetas ── */
.dz-cuatro{display:grid;grid-template-columns:repeat(4,1fr);gap:1.25rem}
.dz-tres{display:grid;grid-template-columns:repeat(3,1fr);gap:1.25rem}
.dz-act{margin:0}
.dz-act img{width:100%;aspect-ratio:3/2;object-fit:cover}
.dz-act figcaption{font-weight:600;font-size:.92rem;margin-top:.6rem}
.dz-depa{display:block;border:1px solid var(--linea);background:#fff;transition:box-shadow .3s}
.dz-depa:hover{box-shadow:0 14px 30px -18px rgba(10,22,20,.45)}
.dz-depa img{width:100%;aspect-ratio:3/2;object-fit:cover}
.dz-depa-cuerpo{padding:1rem 1.1rem 1.2rem}
.dz-depa h3{font-size:1rem;margin-bottom:.3rem}
.dz-depa p{margin:0;font-size:.86rem;color:var(--gris)}
.dz-precio{margin-top:.65rem!important;color:var(--verde)!important;font-weight:600}

/* ── Banners ── */
.dz-banner{background:var(--verde-hondo) var(--fondo) center/cover;color:#fff;text-align:center;position:relative;isolation:isolate;padding-block:clamp(4rem,9vw,7rem)}
.dz-banner::before{content:"";position:absolute;inset:0;background:rgba(2,40,38,.45);z-index:-1}
.dz-banner h2{font-size:clamp(1.6rem,1.2rem + 1.6vw,2.4rem);margin-bottom:.8rem}
.dz-banner p{max-width:44ch;margin:0 auto 1.6rem;color:rgba(255,255,255,.9)}
.dz-banner-link{font-weight:700;border-bottom:1.5px solid #fff;padding-bottom:.15rem}
.dz-banda{background:var(--cafe);color:#fff;padding-block:2rem}
.dz-banda .env{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1.25rem}
.dz-banda h2{font-size:clamp(1.2rem,1rem + .9vw,1.6rem)}
.dz-banda p{margin:.3rem 0 0;color:rgba(255,255,255,.88);font-size:.92rem}

/* ── Testimonios ── */
.dz-cita{margin:0;background:var(--verde);color:#fff;padding:1.5rem 1.5rem 1.25rem;border-radius:4px;position:relative}
.dz-comillas{font-size:3.5rem;line-height:.6;display:block;height:1.5rem;font-weight:700}
.dz-cita p{font-weight:700;font-size:1.05rem;line-height:1.35;margin:0 0 .9rem}
.dz-cita footer{font-size:.85rem;opacity:.85}

/* ── San Carlos + video ── */
.dz-sc{display:grid;grid-template-columns:1fr 1.2fr;gap:clamp(2rem,5vw,4rem);align-items:center;margin-top:clamp(3rem,6vw,4.5rem)}
.dz-remate{color:var(--verde);font-weight:700}
.dz-video{margin:0;position:relative;background:#fff;padding:.6rem .6rem .5rem;border-radius:8px;box-shadow:0 18px 40px -24px rgba(10,22,20,.5)}
.dz-video img,.dz-video video{width:100%;border-radius:4px;display:block}
.dz-video figcaption{font-size:.78rem;font-weight:600;margin-top:.45rem}

/* ── Blog ── */
.dz-blog{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.4rem;min-height:9rem;border:1px dashed var(--linea);text-align:center;color:var(--gris)}
.dz-blog b{font-size:1.4rem;color:var(--tinta)}

/* ── Tira de experiencia ── */
.dz-tira-caja{position:relative}
.dz-tira{display:flex;gap:.6rem;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}
.dz-tira::-webkit-scrollbar{display:none}
.dz-tira img{flex:0 0 calc((100% - 2.4rem)/5);aspect-ratio:4/5;object-fit:cover;scroll-snap-align:start;min-width:12rem}
.dz-flecha{position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:2.4rem;height:2.4rem;border-radius:50%;border:0;background:var(--verde);color:#fff;font-size:1.5rem;line-height:1;cursor:pointer}
.dz-flecha--izq{left:-1rem}.dz-flecha--der{right:-1rem}

/* ── Contacto ── */
.dz-contacto{display:grid;grid-template-columns:1.4fr 1fr;gap:1.5rem;align-items:start}
.dz-form-caja{background:#fff;border:1px solid var(--linea);padding:1.5rem;position:relative}
.dz-form{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
.dz-ancho{grid-column:1/-1}
.dz-form .campo input,.dz-form .campo select,.dz-form .campo textarea{border-color:#B9C7C3;border-radius:3px}
.dz-sedes{display:grid;gap:1rem}
.dz-sede{display:flex;gap:.9rem;background:var(--verde);color:#fff;padding:1.2rem 1.25rem;border-radius:4px}
.dz-sede b{display:block;margin-bottom:.3rem}
.dz-sede p{margin:0 0 .25rem;font-size:.85rem;color:rgba(255,255,255,.88)}
.dz-sede a{text-decoration:underline}
.dz-sede-llegar{font-size:.8rem;font-weight:600}
.dz-sede-ico{opacity:.85;flex:0 0 auto}
.dz-mapa{margin-top:1.5rem;border:1px solid var(--linea);line-height:0}
.dz-mapa iframe{width:100%;height:320px;border:0}

/* ── Políticas + FAQ ── */
.dz-pol{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,5vw,4rem);border-top:1px solid var(--cafe);padding-top:1.75rem}
.dz-pol h3{font-size:1.05rem;color:var(--verde);margin-bottom:.75rem}
.dz-pol p{font-size:.9rem;color:#4d5a57;margin:0 0 .4rem}
.dz-faq{margin-top:0}
.dz-faq summary{font-size:.95rem}

/* ── Pie de la maqueta ── */
.pie{background:var(--verde-hondo);color:rgba(255,255,255,.85);padding-top:clamp(2.5rem,5vw,3.5rem)}
.pie-in{grid-template-columns:repeat(5,1fr);gap:2rem}
.pie h3{color:#fff;letter-spacing:0;text-transform:none;font-size:.95rem;font-weight:700;margin-bottom:.8rem}
.pie-lema{font-family:var(--texto);font-size:.88rem;margin:0;color:rgba(255,255,255,.8)}
.pie ul{gap:.35rem;font-size:.86rem}
.pie .pend{color:#8a5a00}
.pie-legal{margin-top:2.5rem;border-top-color:rgba(255,255,255,.2);color:rgba(255,255,255,.75);align-items:center}
.pie-reti{letter-spacing:.08em;font-size:.72rem}
.pie-reti a{color:#fff;font-weight:700;letter-spacing:0;font-size:.9rem}

/* ══ Fraccional ══ */
.dz-dos{display:grid;grid-template-columns:1fr 1.05fr;gap:clamp(2rem,5vw,4rem);align-items:center}
.dz-lista{list-style:none;padding:0;margin:1.25rem 0 0;display:grid;gap:.55rem;font-size:.92rem;color:#4d5a57}
.dz-lista li{display:flex;gap:.6rem;align-items:flex-start}
.dz-lista svg{color:var(--verde);flex:0 0 auto;margin-top:.25rem}
.dz-tabla-caja{position:relative;overflow-x:auto;border:1px solid var(--cafe)}
.dz-tabla{width:100%;border-collapse:collapse;min-width:40rem;font-size:.9rem}
.dz-tabla thead th{background:var(--verde);color:#fff;font-weight:700;text-align:center;padding:.8rem 1rem}
.dz-tabla thead th:first-child,.dz-tabla tbody th{text-align:left}
.dz-tabla tbody th{font-weight:500;padding:.8rem 1rem}
.dz-tabla td{text-align:center;padding:.8rem 1rem}
.dz-tabla tbody tr{border-top:1px solid var(--cafe)}
.dz-si{color:var(--verde);display:inline-flex}
.dz-no{color:#9aa5a2}
.dz-aviso{font-size:.8rem;color:var(--gris);margin-top:1rem;max-width:70ch}
.dz-mitades{display:grid;grid-template-columns:1fr 1fr;height:clamp(20rem,30vw,26rem)}
.dz-mitades > img{width:100%;height:100%;object-fit:cover;min-height:0}
.dz-mitad{display:flex;flex-direction:column;justify-content:center;padding:clamp(2rem,6vw,5rem)}
.dz-mitad p:last-child{margin:0;max-width:42ch}
.dz-mitad--crema{background:var(--crema)}
.dz-mitad--cafe{background:var(--cafe);color:#fff}
.dz-mitad--cafe .dz-titulo{color:#fff}
.dz-cierre{background:var(--verde-hondo) var(--fondo) center/cover;color:#fff;position:relative;isolation:isolate}
.dz-cierre::before{content:"";position:absolute;inset:0;background:rgba(2,40,38,.55);z-index:-1}
.dz-cierre-in{display:grid;grid-template-columns:1fr 1fr;gap:2rem;align-items:center;padding-block:clamp(2.5rem,5vw,3.5rem)}
.dz-cierre h2{font-size:1.35rem;margin-bottom:.5rem}
.dz-cierre p{font-size:.92rem;color:rgba(255,255,255,.88);margin-bottom:1.2rem}
.dz-cierre-inv{background:var(--verde);padding:1.75rem;display:flex;gap:1.5rem;align-items:center;justify-content:space-between}
.dz-cierre-inv p{margin:0}
.dz-cierre .falta{display:inline-flex;align-items:center;gap:.5rem;border:1.5px dashed rgba(255,255,255,.6);padding:.7rem 1.2rem;border-radius:4px;font-weight:600}

@media (max-width:1024px){
  .dz-porque,.dz-cuatro{grid-template-columns:1fr 1fr}
  .pie-in{grid-template-columns:1fr 1fr 1fr}
  .dz-contacto,.dz-sc,.dz-dos,.dz-cierre-in{grid-template-columns:1fr}
}
@media (max-width:720px){
  .dz-tres,.dz-pol,.dz-mitades{grid-template-columns:1fr}
  .dz-mitades{height:auto}
  .dz-mitades > img{height:16rem}
  .dz-hero::after{background:rgba(3,40,38,.55)}
  .dz-mitades--inv > img{order:-1}
  .buscador--barra .buscador-campos{grid-template-columns:1fr 1fr}
  .dz-form{grid-template-columns:1fr}
  .pie-in{grid-template-columns:1fr 1fr}
  .dz-tira img{flex-basis:70%}
  .dz-flecha--izq{left:.25rem}.dz-flecha--der{right:.25rem}
  .dz-cierre-inv{flex-direction:column;align-items:flex-start}
}
@media (max-width:420px){ .dz-porque,.dz-cuatro{grid-template-columns:1fr} }

/* ── Ajuste fino contra la maqueta (27-oct, «igual que sus PDF») ── */
:root{--verde-hondo:#035250}
.pend{display:none}
.cab-logo img{width:clamp(120px,11vw,150px)}
.cab-nav a::after{display:none}
.cab-nav a.actual{color:var(--verde)}
.dz-hero-bajada b{font-weight:700}
.dz-sede{font:inherit;text-align:left;border:0;cursor:pointer;width:100%;outline-offset:3px}
.dz-sede.activa{box-shadow:inset 0 0 0 2px rgba(255,255,255,.55)}
.dz-blog{min-height:11rem;border:0}
.dz-blog b{font-size:1.6rem}
.pie-reti{display:inline-flex;align-items:center;gap:.75rem}
.pie-reti img{height:42px;width:auto}

/* Medidas de la maqueta (1440 px de ancho): contenido casi a todo lo ancho,
   tipos más chicos y secciones más compactas. */
.cab-in,.pie-in,.pie-legal{max-width:none;padding-inline:clamp(1rem,2.65vw,2.4rem)}
.dz-sec .env,.dz-banda .env,.dz-hero-in,.buscador--barra .env,.dz-cierre .env{max-width:none;padding-inline:clamp(1rem,2.65vw,2.4rem)}
.dz-sec--caja .env{max-width:none;margin-inline:0;border-left:0;border-right:0}
.dz-sec--caja{padding-inline:0}
.dz-sec{padding-block:clamp(2rem,3.5vw,3rem)}
.dz-hero{min-height:clamp(26rem,38.5vw,36rem)}
.dz-hero--media{min-height:clamp(20rem,27vw,26rem)}
.dz-hero h1{font-size:clamp(2rem,1.2rem + 2vw,2.85rem)}
.dz-hero-bajada{font-size:.95rem;margin:.6rem 0 1.6rem}
.dz-titulo{font-size:clamp(1.3rem,1rem + .9vw,1.7rem);margin-bottom:.6rem}
.dz-porque{gap:1.5rem}
.dz-porque h3{color:var(--verde);font-size:.95rem}
.dz-porque p{font-size:.82rem}
.dz-ico svg{width:34px;height:34px;stroke-width:1.6}
.dz-act img,.dz-depa img{aspect-ratio:16/9}
.dz-depa img{aspect-ratio:2/1}
.dz-banner{padding-block:clamp(3.5rem,7vw,6rem)}
.dz-banner-link{border-bottom:0}
.dz-tira img{flex:0 0 calc((100% - 1.8rem)/4);aspect-ratio:5/6}
.dz-flecha{width:3rem;height:3rem;font-size:1.9rem;border:3px solid #fff}
.dz-flecha--izq{left:12%}.dz-flecha--der{right:-1.5rem}
.dz-form .campo label{color:var(--verde)}
.dz-sede{position:relative;overflow:hidden;min-height:7.5rem}
.dz-sede-ico{position:absolute;left:-1.2rem;top:-.4rem;opacity:.12}
.dz-sede-ico svg{width:7.5rem;height:7.5rem;stroke-width:1.5}
.dz-sede > div{padding-left:3.2rem}
.dz-sede > div::before{content:"";position:absolute;left:4.1rem;top:1.35rem;width:.9rem;height:.9rem;border-radius:50% 50% 50% 0;transform:rotate(-45deg);background:#E3C27E}
.dz-mapa iframe{height:280px}
.dz-mitades{height:clamp(16rem,23vw,21rem)}
.dz-banda h2{font-size:clamp(1.05rem,.9rem + .6vw,1.35rem)}
@media (max-width:720px){
  .dz-tira img{flex-basis:70%}
  .dz-flecha--izq{left:.25rem}.dz-flecha--der{right:.25rem}
  .dz-mitades{height:auto}
}
/* Las cajas de «Actividades», «Hospedaje» y «Comunidad viva» van pegadas,
   separadas sólo por su filete, como en la maqueta. */
.dz-sec--caja{padding-block:0;background:#fff}
.dz-sec--caja .env{border:0;border-top:1px solid var(--linea);border-bottom:1px solid var(--linea)}
.dz-hero-bajada{max-width:62ch}
.dz-flecha--izq{left:-1.5rem}
.cab.solida{background:#fff}
.dz-sede > div::before{left:2.75rem}

/* ══ Vistas interiores con el sistema de las maquetas (27-oct) ══ */
.dz-etiqueta{display:inline-block;font-size:.66rem!important;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--cafe)!important;margin:0 0 .25rem!important}
.dz-nota{font-size:.82rem;color:var(--gris);margin-top:1rem;max-width:72ch}
.dz-dos--arriba{align-items:start}
.dz-texto p{color:#3c4a47;font-size:.95rem}
.dz-ficha{background:#fff;border:1px solid var(--linea);padding:1.5rem;position:sticky;top:6rem}
.dz-ficha h3{font-size:1rem;color:var(--verde);margin-bottom:1rem}
.dz-ficha dl{margin:0 0 1rem;display:grid;gap:.1rem}
.dz-ficha dl div{display:flex;justify-content:space-between;gap:1rem;padding:.6rem 0;border-bottom:1px solid var(--linea);font-size:.9rem}
.dz-ficha dt{display:flex;align-items:center;gap:.55rem;color:#4d5a57}
.dz-ficha dt svg{color:var(--verde)}
.dz-ficha dd{margin:0;font-weight:600;text-align:right}
.dz-ficha .dz-precio{font-size:1.05rem;margin:0 0 1rem!important}
.dz-amen{list-style:none;padding:0;margin:1.5rem 0 0;display:grid;grid-template-columns:repeat(4,1fr);gap:1.25rem 1.5rem}
.dz-amen li{display:flex;align-items:center;gap:.75rem;font-weight:600;font-size:.92rem}
.dz-bloques{display:grid;grid-template-columns:repeat(3,1fr);gap:1.25rem;margin-top:1.25rem}
.dz-bloques > div{background:#fff;border:1px solid var(--linea);padding:1.25rem 1.35rem}
.dz-bloques--uno{grid-template-columns:1fr}
.dz-bloques h3{font-size:.98rem;color:var(--verde);margin-bottom:.5rem}
.dz-bloques p{font-size:.88rem;color:#4d5a57;margin:0}
.dz-tarjeta{background:var(--verde);color:#fff;padding:1.4rem 1.5rem;border-radius:4px}
.dz-tarjeta h3{font-size:1.05rem;margin-bottom:.5rem}
.dz-tarjeta p{font-size:.88rem;color:rgba(255,255,255,.9);margin:0}
.dz-tres--tarjetas{margin-top:1.25rem}
.dz-idx{position:sticky;top:4.6rem;z-index:20;background:#fff;border-bottom:1px solid var(--linea)}
.dz-idx .galeria-idx-in{max-width:none;padding-inline:clamp(1rem,2.65vw,2.4rem);display:flex;gap:.5rem;overflow-x:auto;padding-block:.75rem;scrollbar-width:none}
.dz-idx a{flex:0 0 auto;font-size:.82rem;font-weight:600;color:var(--verde);border:1.5px solid var(--verde);border-radius:4px;padding:.45rem .9rem;white-space:nowrap}
.dz-idx a:hover{background:var(--verde);color:#fff}
.dz-sec .galeria{margin-top:1.25rem}
.dz-depa h3{font-size:1rem}
@media (max-width:1024px){
  .dz-amen{grid-template-columns:1fr 1fr}
  .dz-bloques{grid-template-columns:1fr 1fr}
  .dz-ficha{position:static}
}
@media (max-width:720px){
  .dz-amen,.dz-bloques{grid-template-columns:1fr}
}

/* ── Blog (migr 256): lo que Marketing publica desde el ERP ── */
.bl-tarjetas{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:clamp(1.25rem,2.5vw,2rem);text-align:left}
.bl-tarjeta{display:flex;flex-direction:column;background:#fff;border-radius:6px;overflow:hidden;box-shadow:0 1px 2px rgba(10,22,20,.06),0 8px 24px -16px rgba(10,22,20,.25)}
.bl-tarjeta-foto{display:block;aspect-ratio:16/10;background:var(--arena);overflow:hidden}
.bl-tarjeta-foto img{width:100%;height:100%;object-fit:cover;transition:transform .5s ease}
.bl-tarjeta:hover .bl-tarjeta-foto img{transform:scale(1.03)}
.bl-tarjeta-cuerpo{display:flex;flex:1;flex-direction:column;gap:.45rem;padding:1.1rem 1.25rem 1.3rem}
.bl-tarjeta h3{font-size:1.3rem;line-height:1.2}
.bl-tarjeta h3 a{color:var(--tinta);text-decoration:none}
.bl-tarjeta h3 a:hover{color:var(--verde)}
.bl-cat{margin:0;font-size:.72rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--verde)}
.bl-extracto{margin:0;color:var(--gris);font-size:.95rem;line-height:1.5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.bl-meta{margin:auto 0 0;padding-top:.35rem;font-size:.8rem;color:var(--gris)}
.bl-ver-todo{margin:2rem 0 0;text-align:center}
.dz-blog span{font-size:.95rem}

.bl-art{padding-block:clamp(2.5rem,6vw,4.5rem) 0}
.bl-cab{max-width:760px;text-align:center}
.bl-migas{font-size:.82rem;color:var(--gris);margin-bottom:1.25rem}
.bl-migas a{color:inherit}
.bl-cab h1{font-size:clamp(2rem,1.4rem + 2.6vw,3.2rem);margin:.4rem 0 .8rem}
.bl-sub{font-size:clamp(1.05rem,1rem + .4vw,1.3rem);color:var(--gris);margin:0 auto 1rem;max-width:620px;line-height:1.5}
.bl-cab .bl-meta{padding:0}
.bl-portada{margin:clamp(1.75rem,4vw,2.75rem) auto 0;max-width:1100px}
.bl-portada img{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:6px}
.bl-cuerpo{max-width:720px;margin:0 auto;padding:clamp(2rem,5vw,3rem) var(--gutter) 1rem;font-size:clamp(1.02rem,1rem + .15vw,1.12rem);line-height:1.75}
.bl-texto p{margin:0 0 1.15em}
.bl-texto ul,.bl-texto ol{margin:0 0 1.15em;padding-left:1.4em}
.bl-texto li{margin-bottom:.35em}
.bl-texto a{color:var(--verde);text-decoration:underline;text-underline-offset:2px}
.bl-texto blockquote{margin:1.4em 0;padding-left:1.1em;border-left:3px solid var(--oro);color:var(--gris)}
.bl-h2{font-size:clamp(1.55rem,1.3rem + 1vw,2rem);margin:1.9em 0 .6em}
.bl-h3{font-size:clamp(1.25rem,1.15rem + .5vw,1.5rem);margin:1.6em 0 .5em}
.bl-fig{margin:2em 0}
.bl-fig img{width:100%;border-radius:6px}
.bl-fig--medio{max-width:62%;margin-inline:auto}
.bl-fig figcaption,.bl-galeria figcaption{margin-top:.55rem;font-size:.85rem;color:var(--gris);text-align:center;line-height:1.45}
.bl-galeria{margin:2em 0}
.bl-galeria figure{margin:0}
.bl-galeria img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:6px}
.bl-galeria--cuadricula{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,160px),1fr));gap:.75rem}
.bl-galeria--carrusel{display:grid;grid-auto-flow:column;grid-auto-columns:min(80%,420px);gap:.75rem;overflow-x:auto;scroll-snap-type:x mandatory;padding-bottom:.5rem;margin-inline:calc(var(--gutter) * -1);padding-inline:var(--gutter)}
.bl-galeria--carrusel figure{scroll-snap-align:start}
.bl-cita{margin:2.2em 0;padding:1.4em 1.6em;background:var(--arena);border-radius:6px;font-family:var(--display);font-size:clamp(1.2rem,1.1rem + .5vw,1.45rem);line-height:1.45}
.bl-cita p{margin:0}
.bl-cita cite{display:block;margin-top:.7rem;font-family:var(--texto);font-size:.88rem;font-style:normal;color:var(--gris)}
.bl-video{position:relative;margin:2em 0;aspect-ratio:16/9;border-radius:6px;overflow:hidden;background:var(--tinta)}
.bl-video iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.bl-sep{margin:2.5em auto;width:4rem;border:0;border-top:2px solid var(--oro)}
.bl-cierre{max-width:720px;margin:1.5rem auto clamp(2.5rem,6vw,4rem);padding:1.6rem;border-top:1px solid var(--linea);text-align:center}
.bl-cierre p{margin:0 0 1rem;font-family:var(--display);font-size:1.25rem}
.bl-cierre-btns{display:flex;flex-wrap:wrap;justify-content:center;gap:.75rem}
.bl-cierre .btn-linea{color:var(--verde)}
.bl-cierre .btn-linea:hover{background:var(--verde);border-color:var(--verde);color:#fff}
@media (max-width:640px){.bl-fig--medio{max-width:100%}}
.bl-corto{margin:0 0 2.2em;padding:1.15rem 1.35rem;border-left:3px solid var(--verde);background:#fff;border-radius:0 6px 6px 0}
.bl-corto-t{margin:0 0 .35rem;font-size:.72rem;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--verde)}
.bl-corto p:last-child{margin:0}
.bl-faq{margin-top:2.5em}
.bl-faq details{border-bottom:1px solid var(--linea);padding:.95rem 0}
.bl-faq summary{cursor:pointer;font-weight:600;list-style:none;display:flex;justify-content:space-between;gap:1rem}
.bl-faq summary::-webkit-details-marker{display:none}
.bl-faq summary::after{content:'+';color:var(--verde);font-weight:400;font-size:1.3rem;line-height:1}
.bl-faq details[open] summary::after{content:'–'}
.bl-faq details p{margin:.6rem 0 0;color:var(--gris)}
.bl-faq--pagina{max-width:820px}
.bl-faq--pagina .dz-titulo{margin-bottom:1rem}
.bl-faq-mas{margin:1.25rem 0 0}
.bl-faq-mas a{color:var(--verde);font-weight:600}


/* ── Página única (7-nov-2026) ────────────────────────────────────
   La portada lleva todas las secciones; el menú baja a cada una. */
.dz-depa{display:flex;flex-direction:column}
.dz-depa-fotos{position:relative;cursor:zoom-in}
.dz-depa-fotos a{display:block}
/* `display:block` le gana al `hidden` del navegador: las demás fotos del modelo
   sólo existen para el visor. */
.dz-depa-fotos a[hidden]{display:none}
.dz-depa-fotos img{width:100%;aspect-ratio:3/2;object-fit:cover;display:block}
.dz-depa-n{position:absolute;right:.6rem;bottom:.6rem;background:rgba(10,22,20,.62);
  color:#fff;font-size:.75rem;font-weight:600;padding:.25rem .6rem;border-radius:999px;pointer-events:none}
.dz-depa-cuerpo{flex:1;display:flex;flex-direction:column}
.dz-depa-modelo{font-size:.72rem!important;letter-spacing:.14em;text-transform:uppercase;
  color:var(--oro,#CBB74D)!important;font-weight:700;margin-bottom:.2rem!important}
.dz-depa-ir{margin-top:auto;padding-top:.8rem;font-weight:700;font-size:.88rem;color:var(--verde,#035350)}
.dz-depa-ir:hover{text-decoration:underline}

.dz-amen-fotos{display:grid;grid-template-columns:repeat(4,1fr);gap:.6rem;margin-top:1.75rem}
.dz-amen-fotos a{position:relative;display:block;overflow:hidden;aspect-ratio:4/3;background:var(--arena);cursor:zoom-in}
/* La primera, grande (2×2). La foto va en absoluto para que su proporción
   (hay verticales) no estire la fila: el alto lo fijan las celdas 4:3. */
.dz-amen-fotos a:first-child{grid-column:span 2;grid-row:span 2;aspect-ratio:auto}
.dz-amen-fotos img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform 1.2s cubic-bezier(.16,1,.3,1)}
.dz-amen-fotos a:hover img{transform:scale(1.05)}
.dz-amen-fotos span{position:absolute;left:0;right:0;bottom:0;padding:1.6rem .8rem .6rem;
  color:#fff;font-weight:600;font-size:.86rem;background:linear-gradient(transparent,rgba(10,22,20,.72))}
.dz-amen-grupos{display:grid;grid-template-columns:repeat(3,1fr);gap:2rem 2.5rem;margin-top:1.5rem}
.dz-amen-grupos h3{font-size:1.02rem;margin-bottom:.35rem}
.dz-amen-nota{font-size:.85rem;color:var(--gris);margin:0 0 .5rem}
.dz-amen--col{grid-template-columns:1fr!important;gap:.65rem!important;margin-top:.75rem!important}

.dz-acts .dz-act h3{font-size:1rem;margin:.7rem 0 .2rem}
.dz-act-cuando{font-size:.8rem;font-weight:700;color:var(--verde,#035350);margin:0 0 .3rem}
.dz-act-texto{font-size:.86rem;color:var(--gris);margin:0}
.dz-frac-cab{padding-bottom:clamp(1.5rem,3vw,2.5rem)}

@media (max-width:1024px){
  .dz-amen-fotos{grid-template-columns:repeat(3,1fr)}
  .dz-amen-grupos{grid-template-columns:1fr 1fr}
}
@media (max-width:640px){
  .dz-amen-fotos{grid-template-columns:1fr 1fr;gap:.4rem}
  /* A dos columnas la grande ocupa sola su fila: nadie le da alto. */
  .dz-amen-fotos a:first-child{grid-row:auto;aspect-ratio:16/10}
  .dz-amen-grupos{grid-template-columns:1fr}
}

/* ══ Chat de la página (migr 266) ════════════════════════════════════
   Burbuja abajo a la derecha y un panel que en el teléfono ocupa la pantalla.
   Capas: cabecera 100 · burbuja 95 · panel 110 · calendario móvil 120 (el
   calendario manda: mientras está abierto, el chat se esconde). */
.chat{--chat-sombra:0 24px 60px -24px rgba(10,22,20,.55)}
.chat-burbuja{position:fixed;right:1.25rem;bottom:1.25rem;z-index:95;
  display:inline-flex;align-items:center;gap:.6rem;padding:.85rem 1.25rem .85rem 1rem;
  border:0;border-radius:999px;background:var(--teal);color:#fff;cursor:pointer;
  font:500 .8rem/1 var(--texto);letter-spacing:.08em;text-transform:uppercase;
  box-shadow:var(--chat-sombra);transition:transform .3s ease,background var(--transicion)}
.chat-burbuja:hover{background:var(--teal-hondo);transform:translateY(-2px)}
.chat-burbuja:focus-visible,.chat-x:focus-visible,.chat-enviar:focus-visible,
.chat-atajo:focus-visible{outline:2px solid var(--oro);outline-offset:3px}
.chat-burbuja svg{stroke-width:1.6}
.chat-punto{position:absolute;top:.35rem;right:.45rem;width:.7rem;height:.7rem;
  border-radius:50%;background:var(--oro);box-shadow:0 0 0 2px var(--teal)}
.chat-punto[hidden]{display:none}
.chat.abierto .chat-burbuja{background:var(--teal-hondo)}

.chat-panel{position:fixed;right:1.25rem;bottom:5.25rem;z-index:110;
  width:min(380px,calc(100vw - 2rem));height:min(560px,calc(100vh - 7.5rem));
  display:flex;flex-direction:column;background:var(--hueso);color:var(--tinta);
  border:1px solid var(--linea);border-radius:18px;overflow:hidden;box-shadow:var(--chat-sombra)}
.chat-panel[hidden]{display:none}

.chat-cab{display:flex;align-items:center;gap:.8rem;padding:.9rem 1rem;
  background:var(--teal);color:#fff}
.chat-avatar{flex:none;width:2.4rem;height:2.4rem;border-radius:50%;display:grid;place-items:center;
  background:var(--oro);color:var(--tinta);font:600 1.1rem/1 var(--display)}
.chat-cab-txt{flex:1;min-width:0}
.chat-cab h2{margin:0;font:500 1.15rem/1.2 var(--display);color:#fff}
.chat-cab p{margin:.15rem 0 0;font-size:.75rem;line-height:1.3;color:rgba(255,255,255,.75)}
.chat-x{flex:none;width:2.2rem;height:2.2rem;border:0;border-radius:50%;background:transparent;
  color:#fff;display:grid;place-items:center;cursor:pointer}
.chat-x:hover{background:rgba(255,255,255,.12)}

.chat-log{flex:1;overflow-y:auto;padding:1rem;display:flex;flex-direction:column;gap:.55rem;
  overscroll-behavior:contain}
.chat-msj{max-width:85%;padding:.6rem .85rem;border-radius:14px;font-size:.92rem;line-height:1.45;
  white-space:pre-wrap;overflow-wrap:anywhere}
.chat-msj a{color:inherit;text-decoration:underline;text-underline-offset:2px}
.chat-msj img{display:block;max-width:100%;max-height:220px;border-radius:10px;margin:.1rem 0 .35rem}
.chat-msj--marea{align-self:flex-start;background:#fff;border:1px solid var(--linea);
  border-bottom-left-radius:4px}
.chat-msj--asesor{align-self:flex-start;background:var(--arena);border-bottom-left-radius:4px}
.chat-msj--visitante{align-self:flex-end;background:var(--teal);color:#fff;border-bottom-right-radius:4px}
.chat-msj--visitante[data-temp]{opacity:.75}
.chat-msj--error{background:#9B2C2C;cursor:pointer}
.chat-quien{display:block;margin-bottom:.15rem;font-size:.68rem;font-weight:600;
  letter-spacing:.08em;text-transform:uppercase;color:var(--teal)}
.chat-sistema{align-self:center;max-width:92%;text-align:center;font-size:.8rem;color:var(--gris);
  display:flex;flex-direction:column;align-items:center;gap:.5rem}
.chat-wa{display:inline-flex;padding:.55rem 1rem;border-radius:999px;background:var(--verde,#0D7D69);
  color:#fff;font-weight:500;text-decoration:none}

.chat-atajos{display:flex;flex-wrap:wrap;gap:.4rem;padding:0 1rem .6rem}
.chat-atajos[hidden]{display:none}
.chat-atajo{padding:.45rem .8rem;border:1px solid var(--teal);border-radius:999px;background:transparent;
  color:var(--teal);font:500 .78rem/1.2 var(--texto);cursor:pointer}
.chat-atajo:hover{background:var(--teal);color:#fff}

.chat-escribiendo{display:flex;align-items:center;gap:.5rem;padding:0 1rem .5rem;
  font-size:.75rem;color:var(--gris)}
.chat-escribiendo[hidden]{display:none}
.chat-puntos{display:inline-flex;gap:3px}
.chat-puntos i{width:5px;height:5px;border-radius:50%;background:var(--teal);opacity:.35;
  animation:chat-punto 1.2s infinite ease-in-out}
.chat-puntos i:nth-child(2){animation-delay:.15s}
.chat-puntos i:nth-child(3){animation-delay:.3s}
@keyframes chat-punto{0%,80%,100%{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}

.chat-form{display:flex;align-items:flex-end;gap:.5rem;padding:.7rem .8rem;
  border-top:1px solid var(--linea);background:#fff}
.chat-form[hidden]{display:none}
.chat-form textarea{flex:1;resize:none;min-height:2.6rem;max-height:120px;padding:.65rem .9rem;
  border:1px solid var(--linea);border-radius:20px;background:var(--hueso);color:var(--tinta);
  font:400 .95rem/1.35 var(--texto)}
.chat-form textarea:focus{outline:none;border-color:var(--teal)}
.chat-enviar{flex:none;width:2.6rem;height:2.6rem;border:0;border-radius:50%;background:var(--oro);
  color:var(--tinta);display:grid;place-items:center;cursor:pointer}
.chat-enviar:hover{background:var(--oro-suave)}
.chat-enviar[disabled]{opacity:.5;cursor:default}
.chat-aviso{margin:0;padding:.35rem 1rem .6rem;background:#fff;font-size:.68rem;line-height:1.35;
  color:var(--gris);text-align:center}

.btn-chat{border-color:var(--teal);color:var(--teal);background:transparent}
.btn-chat:hover{background:var(--teal);color:#fff}

@media (max-width:600px){
  .chat-burbuja{right:1rem;bottom:1rem;padding:.95rem}
  .chat-burbuja-txt{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .chat-panel{inset:0;width:100%;height:100%;height:100dvh;border:0;border-radius:0}
  .chat.abierto .chat-burbuja{display:none}
  body:has(.cal.abierto) .chat{display:none}
}
@media (prefers-reduced-motion: reduce){
  .chat-puntos i{animation:none;opacity:.6}
  .chat-burbuja{transition:none}
}
