/* Secciones de la landing */

/* Portada: fondo marfil, foto a la derecha difuminada hacia la izquierda y hacia abajo */
.hero {
  --hero-fondo: #faf9f6;
  --hero-texto: #252229;
  --hero-taupe: #7b7165;
  position: relative;
  isolation: isolate;
  min-height: 100svh;
  padding-top: var(--header);
  overflow: hidden;
  background: var(--hero-fondo);
  color: var(--hero-texto);
}

.hero__media {
  position: absolute;
  top: var(--header);
  right: 0;
  bottom: 0;
  z-index: -1;
  width: 65%;
  /* Dos máscaras suaves combinadas: se funde hacia la izquierda y hacia abajo */
  -webkit-mask-image:
    linear-gradient(to right, transparent 0%, rgb(0 0 0 / 35%) 18%, rgb(0 0 0 / 80%) 34%, #000 48%),
    linear-gradient(to bottom, #000 0%, #000 42%, rgb(0 0 0 / 55%) 66%, transparent 92%);
  -webkit-mask-composite: source-in;
  mask-image:
    linear-gradient(to right, transparent 0%, rgb(0 0 0 / 35%) 18%, rgb(0 0 0 / 80%) 34%, #000 48%),
    linear-gradient(to bottom, #000 0%, #000 42%, rgb(0 0 0 / 55%) 66%, transparent 92%);
  mask-composite: intersect;
}

.hero__slide {
  position: absolute;
  inset: 0;
  opacity: 0;
  transition: opacity 1s var(--ease-inout);
}

.hero__slide.is-active { opacity: 1; }

.hero__slide img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: var(--pos, 50% 50%);
  filter: brightness(1.03) contrast(1.02);
}

.hero__content {
  display: grid;
  grid-template-rows: 1fr auto;
  min-height: calc(100svh - var(--header));
  width: min(1440px, calc(100% - var(--gutter) * 2));
  margin-inline: auto;
  padding-block: clamp(2.5rem, 8vh, 6rem) clamp(4.5rem, 10vh, 6.5rem);
}

.hero__texto {
  align-self: center;
  max-width: 1000px;
}

.hero__titulo {
  margin: 0;
  color: var(--hero-texto);
  font-family: var(--font-display);
  font-size: clamp(2.5rem, 5.1vw, 5rem);
  font-weight: 800;
  line-height: 1.07;
  letter-spacing: 0;
  text-transform: none;
}

.hero__titulo .line-mask { white-space: nowrap; }

.hero__sub {
  margin: clamp(1rem, 1.4vw, 1.4rem) 0 0;
  max-width: 34ch;
  color: var(--hero-texto);
  font-family: var(--font-body);
  font-size: clamp(1.15rem, 2vw, 2rem);
  font-weight: 400;
  line-height: 1.3;
}

@media (min-width: 1200px) {
  .hero__sub { max-width: none; }
}

.hero__stats {
  display: grid;
  grid-template-columns: repeat(3, auto);
  justify-content: start;
  align-items: start;
  gap: clamp(1.5rem, 3.6vw, 3.75rem);
  margin: 0;
  padding: 0;
  list-style: none;
}

.hero__stats li { min-width: 0; }

.hero__stats b {
  display: block;
  color: var(--hero-taupe);
  font-family: var(--font-display);
  font-size: clamp(3.75rem, 10vw, 10rem);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.01em;
  font-variant-numeric: tabular-nums;
}

.hero__stats span {
  display: block;
  margin-top: clamp(0.4rem, 0.7vw, 0.7rem);
  color: var(--hero-texto);
  font-family: var(--font-body);
  font-size: clamp(0.9rem, 1.7vw, 1.65rem);
  font-weight: 400;
  line-height: 1.25;
}

.hero__dots {
  position: absolute;
  left: 50%;
  bottom: clamp(1.2rem, 3vh, 1.8rem);
  display: flex;
  gap: 10px;
  transform: translateX(-50%);
}

.hero__dot {
  width: 11px;
  height: 11px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: #d0ccc7;
  cursor: pointer;
  transition: background 0.4s var(--ease), transform 0.4s var(--ease);
}

.hero__dot:hover { transform: scale(1.2); }
.hero__dot[aria-current="true"] { background: #918477; }

/* Celular: la foto pasa arriba a todo el ancho y el texto queda debajo, sobre la parte difuminada */
@media (max-width: 720px) {
  .hero { min-height: 0; }

  .hero__media {
    inset: var(--header) 0 auto 0;
    width: 100%;
    height: min(58vh, 460px);
    -webkit-mask-image: linear-gradient(to bottom, #000 0%, #000 38%, rgb(0 0 0 / 38%) 64%, rgb(0 0 0 / 10%) 82%, transparent 96%);
    mask-image: linear-gradient(to bottom, #000 0%, #000 38%, rgb(0 0 0 / 38%) 64%, rgb(0 0 0 / 10%) 82%, transparent 96%);
  }

  .hero__slide img { object-position: var(--pos-m, var(--pos, 50% 50%)); }

  .hero__content {
    min-height: 0;
    padding-block: calc(min(58vh, 460px) - 5rem) 4.5rem;
    gap: 2.2rem;
  }

  .hero__titulo { font-size: clamp(2.5rem, 11.2vw, 2.875rem); }
  .hero__titulo .line-mask { white-space: normal; }

  .hero__sub { font-size: clamp(1.125rem, 4.8vw, 1.25rem); }

  .hero__stats { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; }
  .hero__stats b { font-size: clamp(3.4rem, 17vw, 4.75rem); }
  .hero__stats span { font-size: clamp(0.875rem, 3.8vw, 1rem); }

  .hero__dots { bottom: 1.4rem; }
}

@media (max-width: 340px) {
  .hero__stats { grid-template-columns: 1fr 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  .hero__slide { transition: none; }
}

.strip {
  background: var(--papel);
  border-block: 1px solid var(--linea);
  padding-block: 1.1rem;
}

.section__head {
  display: grid;
  gap: 1.25rem;
  margin-bottom: clamp(2rem, 5vw, 3.5rem);
}

@media (min-width: 900px) {
  .section__head {
    grid-template-columns: 1.1fr 0.9fr;
    align-items: end;
  }

}

/* La empresa: composición editorial sobre marfil. Colores pedidos por CRIVIFA para esta sección. */
#empresa {
  --emp-fondo: #faf9f6;
  --emp-titulo: #252229;
  --emp-texto: #343139;
  --emp-azul: var(--corporativo);
  --emp-arena: #f0ebe3;
  --emp-linea: #d7d2cb;
  padding-block: clamp(4.5rem, 7vw, 6rem) 0;
  background: var(--emp-fondo);
  color: var(--emp-texto);
}

.empresa__wrap {
  width: min(1320px, calc(100% - var(--gutter) * 2));
  margin-inline: auto;
}

.empresa__grid,
.empresa-cvf__grid {
  display: grid;
  grid-template-columns: minmax(0, 36fr) minmax(0, 64fr);
  column-gap: 64px;
}

.empresa__rotulo {
  margin: 0;
  color: var(--emp-azul);
  font-family: var(--font-body);
  font-size: 0.97rem;
  font-weight: 700;
  letter-spacing: 2px;
  text-transform: uppercase;
}

.empresa__titulo {
  margin: 24px 0 0;
  color: var(--emp-titulo);
  font-family: var(--font-display);
  font-size: clamp(3.4rem, 5.2vw, 4.75rem);
  font-weight: 800;
  line-height: 1.02;
}

.empresa__titulo span { display: block; }

.empresa__texto {
  display: grid;
  gap: clamp(24px, 2.2vw, 32px);
  padding-top: 0.2rem;
}

.empresa__texto p {
  margin: 0;
  max-width: 62ch;
  font-size: clamp(1.18rem, 1.45vw, 1.375rem);
  font-weight: 400;
  line-height: 1.5;
  text-align: left;
}

.empresa__texto strong,
.empresa-cvf strong {
  color: var(--emp-titulo);
  font-weight: 700;
}

.empresa__divisor {
  height: 1px;
  margin-top: clamp(4.5rem, 6.5vw, 6rem);
  background: var(--emp-linea);
  transform-origin: left center;
}

.empresa-cvf {
  margin-top: clamp(2.5rem, 4vw, 3.5rem);
  padding-block: clamp(40px, 3.4vw, 48px);
  background: var(--emp-arena);
}

.empresa-cvf__grid { align-items: center; }

.empresa-cvf h3 {
  margin: 0;
  color: var(--emp-titulo);
  font-family: var(--font-display);
  font-size: clamp(2.375rem, 3.1vw, 2.75rem);
  font-weight: 700;
  line-height: 1;
}

.empresa-cvf__id {
  margin: 0.55rem 0 0;
  font-size: clamp(1.125rem, 1.3vw, 1.25rem);
}

.empresa-cvf__desc {
  position: relative;
  margin: 0;
  max-width: 62ch;
  font-size: clamp(1.125rem, 1.3vw, 1.25rem);
  line-height: 1.5;
}

/* Línea vertical centrada en el espacio entre columnas */
.empresa-cvf__desc::before {
  content: "";
  position: absolute;
  left: -32px;
  top: 0.15em;
  bottom: 0.15em;
  width: 1px;
  background: var(--emp-linea);
  transform-origin: top center;
}

/* Aparición por bloques (js/empresa.js) */
.empresa-anim [data-aparece] {
  opacity: 0;
  transform: translateY(14px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
  transition-delay: calc(var(--d, 0) * 0.08s);
}

.empresa-anim [data-aparece].is-visible { opacity: 1; transform: none; }

.empresa-anim .empresa__divisor { transform: scaleX(0); transition: transform 1.1s var(--ease); }
.empresa-anim .empresa__divisor.is-visible { transform: scaleX(1); }

.empresa-anim .empresa-cvf__desc::before { transform: scaleY(0); transition: transform 0.9s var(--ease) 0.2s; }
.empresa-anim .empresa-cvf__desc.is-visible::before { transform: scaleY(1); }

@media (max-width: 900px) {
  #empresa { padding-top: clamp(3.5rem, 12vw, 4.5rem); }

  .empresa__wrap { width: calc(100% - 44px); }

  .empresa__grid,
  .empresa-cvf__grid { grid-template-columns: 1fr; }

  .empresa__titulo { font-size: clamp(2.6rem, 11.5vw, 3rem); }

  .empresa__texto { margin-top: 2rem; gap: 24px; }

  .empresa__texto p,
  .empresa-cvf__desc,
  .empresa-cvf__id { font-size: 1.0625rem; line-height: 1.5; }

  .empresa__divisor { margin-top: 3.5rem; }

  .empresa-cvf { margin-top: 2.5rem; }

  .empresa-cvf__desc { margin-top: 1.5rem; }
  .empresa-cvf__desc::before { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .empresa-anim [data-aparece],
  .empresa-anim .empresa__divisor,
  .empresa-anim .empresa-cvf__desc::before { opacity: 1; transform: none; transition: none; }
}

.statement {
  font-family: var(--font-display);
  font-weight: 800;
  text-transform: uppercase;
  line-height: 0.92;
  letter-spacing: 0.01em;
  font-size: clamp(2rem, 4.6vw, 4.2rem);
  color: var(--corporativo);
  max-width: 16ch;
}

.pillars {
  display: grid;
  gap: 1px;
  background: var(--linea);
  border: 1px solid var(--linea);
  margin-block: 2.5rem;
}

@media (min-width: 800px) {
  .pillars { grid-template-columns: repeat(4, 1fr); }
}

.pillar {
  background: var(--papel);
  padding: 1.25rem 1.1rem 1.4rem;
  min-height: 140px;
}

.pillar b {
  display: block;
  font-family: var(--font-display);
  font-size: 1.7rem;
  letter-spacing: 0.08em;
  color: var(--azul-medio);
  margin-bottom: 0.65rem;
}

.pillar span {
  font-weight: 700;
  font-size: 1.02rem;
}

.creds {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-bottom: 2.5rem;
}

.media {
  position: relative;
  overflow: hidden;
  border-radius: var(--radius);
  background: var(--noche);
  min-height: 280px;
}

.media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  aspect-ratio: 3 / 4;
}

.media--duo::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--corporativo);
  mix-blend-mode: multiply;
  opacity: 0.35;
  transition: opacity 0.6s var(--ease);
  pointer-events: none;
}

/* Nuestros servicios: fondo arena, cuatro columnas separadas por líneas y panel claro de gestión */
#servicios {
  --svc-fondo: #f0ebe3;
  --svc-titulo: #252229;
  --svc-texto: #4a4650;
  --svc-num: #9a8f80;
  --svc-linea: #d7d2cb;
  padding-block: clamp(4.5rem, 7vw, 6.5rem);
  background:
    radial-gradient(rgb(37 34 41 / 3.5%) 1px, transparent 1px) 0 0 / 4px 4px,
    var(--svc-fondo);
  color: var(--svc-titulo);
}

.servicios__wrap {
  width: min(1440px, calc(100% - var(--gutter) * 2));
  margin-inline: auto;
}

.servicios__titulo {
  margin: 0;
  color: var(--svc-titulo);
  font-family: var(--font-display);
  font-size: clamp(3rem, 6.4vw, 6rem);
  font-weight: 800;
  line-height: 1;
}

.svc-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  margin-top: clamp(2.2rem, 4vw, 3.2rem);
}

.svc {
  display: flex;
  flex-direction: column;
  padding: 0 clamp(1.2rem, 2.2vw, 2.2rem);
  border-left: 1px solid var(--svc-linea);
}

.svc:first-child { padding-left: 0; border-left: 0; }
.svc:last-child { padding-right: 0; }

.svc__num {
  color: var(--svc-num);
  font-family: var(--font-display);
  font-size: 1.45rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  line-height: 1;
  transition: color 0.35s var(--ease);
}

.svc__icon {
  width: auto;
  height: clamp(72px, 6.4vw, 92px);
  margin: 0.9rem 0 0 clamp(0.4rem, 1.4vw, 2rem);
  object-fit: contain;
  object-position: left center;
  transition: transform 0.45s var(--ease);
}

.svc h3 {
  min-height: 2.1em;
  margin: clamp(1.4rem, 2.4vw, 2rem) 0 0;
  color: var(--svc-titulo);
  font-family: var(--font-display);
  font-size: clamp(1.45rem, 1.7vw, 1.9rem);
  font-weight: 700;
  line-height: 1.05;
  text-wrap: balance;
}

.svc > p {
  min-height: 4.5em;
  margin: 1rem 0 0;
  color: var(--svc-texto);
  font-size: clamp(1rem, 1.15vw, 1.15rem);
  line-height: 1.45;
}

.svc__list {
  display: grid;
  gap: 0.6rem;
  margin: 1.4rem 0 0;
  padding: 0;
  list-style: none;
}

.svc__list li {
  position: relative;
  padding-left: 1.6rem;
  color: var(--svc-texto);
  font-size: 0.98rem;
  line-height: 1.35;
}

.svc__list li::before {
  content: "";
  position: absolute;
  left: 0.15rem;
  top: 0.38em;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--corporativo);
}

/* Panel de gestión */
.panel {
  margin-top: clamp(2.6rem, 4.5vw, 3.6rem);
  padding: clamp(1.5rem, 2.6vw, 2.2rem) clamp(1.4rem, 2.4vw, 2.2rem);
  border-radius: 10px;
  background: #faf9f6;
  box-shadow: 0 1px 0 rgb(37 34 41 / 4%);
}

.panel h3 {
  margin: 0;
  color: var(--svc-titulo);
  font-family: var(--font-display);
  font-size: clamp(1.9rem, 3vw, 2.6rem);
  font-weight: 700;
  line-height: 1;
}

.panel > p {
  max-width: none;
  margin: 0.5rem 0 0;
  color: var(--corporativo);
  font-size: clamp(1.02rem, 1.3vw, 1.25rem);
}

.panel__grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  margin-top: clamp(1.4rem, 2.4vw, 2rem);
}

.panel__item {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 1.1rem;
  align-items: start;
  padding: 0.2rem clamp(1rem, 2vw, 1.8rem);
  border-left: 1px solid var(--svc-linea);
}

.panel__item:first-child { padding-left: 0; border-left: 0; }

.panel__item img {
  width: 52px;
  height: 52px;
  object-fit: contain;
  transition: transform 0.45s var(--ease);
}

.panel__item strong {
  display: block;
  color: var(--svc-titulo);
  font-family: var(--font-display);
  font-size: 1.2rem;
  font-weight: 700;
  line-height: 1.1;
}

.panel__item p {
  margin: 0.3rem 0 0;
  color: var(--svc-texto);
  font-size: 0.98rem;
  line-height: 1.4;
}

@media (hover: hover) and (pointer: fine) {
  .svc:hover .svc__num { color: var(--corporativo); }
  .svc:hover .svc__icon { transform: translateY(-4px); }
  .panel__item:hover img { transform: rotate(-6deg) scale(1.06); }
}

/* Aparición por bloques (js/empresa.js) */
.servicios-anim [data-aparece] {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
  transition-delay: calc(var(--d, 0) * 0.09s);
}

.servicios-anim [data-aparece].is-visible { opacity: 1; transform: none; }

@media (max-width: 1100px) {
  .svc-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 3rem; }
  .svc:nth-child(3) { padding-left: 0; border-left: 0; }
  .svc:nth-child(2) { padding-right: 0; }
  .panel__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 1.6rem; }
  .panel__item:nth-child(3) { padding-left: 0; border-left: 0; }
}

@media (max-width: 640px) {
  .svc-grid { grid-template-columns: 1fr; row-gap: 0; }
  .svc,
  .svc:nth-child(n) { padding: 2rem 0; border-left: 0; border-top: 1px solid var(--svc-linea); }
  .svc:first-child { border-top: 0; padding-top: 0; }
  .svc h3,
  .svc > p { min-height: 0; }
  .svc__icon { margin-left: 0; }
  .panel__grid { grid-template-columns: 1fr; }
  .panel__item,
  .panel__item:nth-child(n) { padding: 1rem 0; border-left: 0; border-top: 1px solid var(--svc-linea); }
  .panel__item:first-child { border-top: 0; padding-top: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .servicios-anim [data-aparece] { opacity: 1; transform: none; transition: none; }
}

.stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem 1.5rem;
  margin-top: 2rem;
}

@media (min-width: 800px) {
  .stats { grid-template-columns: repeat(4, 1fr); }
}

.stats b {
  display: block;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(2.4rem, 4vw, 3.6rem);
  line-height: 0.9;
  letter-spacing: 0.02em;
}

.stats span {
  display: block;
  margin-top: 0.35rem;
  color: var(--cielo);
  font-size: 0.85rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.destacados {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 0.85rem;
  margin-top: 2.2rem;
  padding-inline: var(--gutter);
}

.destacado {
  position: relative;
  grid-column: span 2;
  display: flex;
  flex-direction: column;
  min-width: 0;
  overflow: hidden;
  background: var(--blanco);
  color: var(--texto);
  text-decoration: none;
  border-radius: var(--radius);
}

.destacado:nth-child(4) { grid-column: 2 / span 2; }
.destacado:nth-child(5) { grid-column: 4 / span 2; }

.destacado__foto {
  position: relative;
  display: block;
  height: 16.5rem;
  overflow: hidden;
  background: var(--tinte);
}

.destacado__foto img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.destacado__foto-vacia {
  display: grid;
  place-items: center;
  height: 100%;
  color: var(--corporativo);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.destacado:focus-visible {
  outline: 2px solid var(--corporativo);
  outline-offset: 3px;
}

.destacado__indice {
  position: absolute;
  left: 0.45rem;
  bottom: 0.45rem;
  padding: 0.12rem 0.4rem;
  background: var(--blanco);
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 1.15rem;
  line-height: 1;
  color: var(--corporativo);
}

.destacado__cuerpo {
  display: grid;
  gap: 0.28rem;
  min-width: 0;
  padding: 0.95rem 1rem 0.35rem;
}

.destacado__tope {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem 0.85rem;
  color: var(--corporativo);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.destacado__titulo {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(1.45rem, 2vw, 2.15rem);
  line-height: 0.95;
  letter-spacing: 0.01em;
  text-transform: uppercase;
}

.destacado__lugar {
  color: var(--texto-2);
  font-size: 0.95rem;
}

.destacado__cifras {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.55rem;
  margin-top: 0.85rem;
  padding: 0.75rem 1rem 0.15rem;
  border-top: 1px solid var(--linea);
}

.destacado__cifras b {
  display: block;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(1.25rem, 1.6vw, 1.7rem);
  line-height: 1;
  color: var(--noche);
}

.destacado__cifras small {
  display: block;
  margin-top: 0.28rem;
  color: var(--texto-2);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.destacado__ir {
  margin-top: auto;
  padding: 0.85rem 1rem 1rem;
  color: var(--corporativo);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.destacado__ir::after { content: " →"; }

@media (hover: hover) and (pointer: fine) {
  .destacado:hover img { transform: scale(1.05); }
  .destacado:hover .destacado__ir { color: var(--profundo); }
}

.destacado__foto img { transition: transform 0.55s var(--ease); }

@media (max-width: 900px) {
  .destacados { grid-template-columns: 1fr 1fr; }
  .destacado,
  .destacado:nth-child(4),
  .destacado:nth-child(5) { grid-column: auto; }
}

@media (max-width: 640px) {
  .destacados { grid-template-columns: 1fr; }
  .destacado__foto { height: auto; aspect-ratio: 16 / 10; }
}

.obras-pin {
  margin-top: 2rem;
  overflow: hidden;
}

.obras-track {
  display: flex;
  gap: 1rem;
  width: max-content;
  padding-inline: var(--gutter);
  padding-bottom: 0.5rem;
}

.obra {
  flex: 0 0 min(86vw, 440px);
  scroll-snap-align: start;
  position: relative;
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--profundo);
  min-height: 68vh;
  color: var(--blanco);
  transform-style: preserve-3d;
}

.obra .media { min-height: 68vh; border-radius: 0; }
.obra .media img {
  aspect-ratio: auto;
  height: 68vh;
  transition: transform 0.8s var(--ease), filter 0.6s var(--ease);
}

.obra__data {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 1.2rem 1.1rem 1.15rem;
  background: linear-gradient(transparent, rgb(10 22 40 / 92%));
  transform: translateY(18%);
  transition: transform 0.5s var(--ease);
}

.obra__kicker {
  font-size: 0.72rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--cielo);
  font-weight: 700;
}

.obra h3 {
  font-family: var(--font-display);
  font-weight: 800;
  text-transform: uppercase;
  font-size: clamp(1.6rem, 2vw, 2.1rem);
  line-height: 0.95;
  margin: 0.3rem 0 0.45rem;
}

.obra p { font-size: 0.95rem; color: rgb(245 248 253 / 86%); }
.obra small { display: block; margin-top: 0.45rem; color: var(--cielo); letter-spacing: 0.04em; }

.clientes { padding-block: clamp(3.2rem, 7vw, 5.5rem); }

.clientes__head { margin-bottom: clamp(1.4rem, 3vw, 2.2rem); }

.clientes__title {
  max-width: none;
  margin: 0;
  color: var(--texto);
  font-family: var(--font-title);
  font-size: clamp(0.9rem, 3.15vw, 2.7rem);
  font-weight: 700;
  line-height: 1.15;
  white-space: nowrap;
}

.clientes .marquee { padding-block: 0.35rem; }

.logo-cintas {
  display: grid;
  gap: 0.75rem;
}

.logo-cinta { overflow: hidden; }

.logo-cinta__track {
  display: flex;
  width: max-content;
  animation: marquee linear infinite;
}

.logo-cinta ul {
  display: flex;
  align-items: center;
  gap: clamp(0.9rem, 1.6vw, 1.4rem);
  margin: 0;
  padding: 0.9rem clamp(0.9rem, 1.6vw, 1.4rem) 1.9rem 0;
  list-style: none;
}

/* Todas las placas tienen el mismo tamaño y el logo se ajusta adentro sin deformarse */
.logo-cinta li {
  --acento: var(--corporativo);
  position: relative;
  width: clamp(12rem, 17vw, 15.5rem);
  height: clamp(6rem, 8vw, 7.4rem);
  display: grid;
  place-items: center;
  padding: 1rem 1.4rem;
  overflow: visible;
  background: var(--blanco);
  border: 1px solid #e4e0da;
  border-radius: 10px;
  color: var(--corporativo);
  font-family: var(--font-title);
  font-size: 0.95rem;
  font-weight: 700;
  line-height: 1.25;
  text-align: center;
  transition: transform 0.45s var(--ease), box-shadow 0.45s var(--ease), border-color 0.45s var(--ease);
}

.logo-cinta li.is-oscuro { background: #252229; border-color: #252229; }

/* Línea de color de cada institución que se dibuja abajo al pasar el mouse */
.logo-cinta li::after {
  content: "";
  position: absolute;
  left: 1.2rem;
  right: 1.2rem;
  bottom: -1px;
  height: 3px;
  border-radius: 3px;
  background: var(--acento);
  transform: scaleX(0);
  transition: transform 0.45s var(--ease);
}

.logo-cinta img {
  display: block;
  width: 100%;
  height: 100%;
  max-height: 4.4rem;
  object-fit: contain;
  transition: transform 0.5s var(--ease), filter 0.5s var(--ease);
}

.logo-cinta__nombre {
  position: absolute;
  left: 50%;
  top: calc(100% + 0.45rem);
  color: var(--acento);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  white-space: nowrap;
  opacity: 0;
  transform: translate(-50%, -4px);
  transition: opacity 0.35s var(--ease), transform 0.35s var(--ease);
  pointer-events: none;
}

@media (hover: hover) and (pointer: fine) {
  .logo-cinta:hover .logo-cinta__track { animation-play-state: paused; }
  .logo-cinta li:hover {
    transform: translateY(-6px);
    border-color: color-mix(in srgb, var(--acento) 45%, #e4e0da);
    box-shadow: 0 18px 32px -20px color-mix(in srgb, var(--acento) 70%, transparent);
  }
  .logo-cinta li:hover::after { transform: scaleX(1); }
  .logo-cinta li:hover img { transform: scale(1.07); }
  .logo-cinta li:hover .logo-cinta__nombre { opacity: 1; transform: translate(-50%, 0); }
  /* El resto de los logos se atenúa para destacar el elegido */
  .logo-cinta:hover li:not(:hover) img { filter: grayscale(0.7) opacity(0.55); }
}

@media (prefers-reduced-motion: reduce) {
  .logo-cinta { overflow-x: auto; }
  .logo-cinta__track { animation: none; }
  .logo-cinta ul[aria-hidden="true"] { display: none; }
  .logo-cinta li, .logo-cinta img { transition: none; }
}

.proyectos { margin-top: clamp(2rem, 5vw, 3.2rem); }

.proyectos__title {
  margin: 0 0 1rem;
  color: var(--blanco);
  font-family: var(--font-title);
  font-size: clamp(1.35rem, 2.4vw, 1.8rem);
  font-weight: 700;
}

.proyectos > div { display: grid; gap: 0.85rem; }

.proy {
  display: grid;
  grid-template-columns: 6.6rem minmax(0, 1fr);
  gap: 0.35rem 1.15rem;
  align-items: center;
  padding: 1rem;
  border: 1px solid rgb(143 168 212 / 28%);
  border-radius: var(--radius);
  background: rgb(10 22 40 / 42%);
}

.proy__avance {
  width: 6.6rem;
  height: 6.6rem;
  margin: 0;
  display: grid;
  align-content: center;
  justify-items: center;
  gap: 0.2rem;
  background: var(--blanco);
  color: var(--texto);
  text-align: center;
}

.proy__avance b {
  font-family: var(--font-display);
  font-size: 2.15rem;
  font-weight: 800;
  line-height: 0.85;
  color: var(--corporativo);
}

.proy__avance b.is-texto {
  max-width: 5.2rem;
  font-size: 1.05rem;
  line-height: 0.95;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}

.proy__avance span {
  max-width: 5.4rem;
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  line-height: 1.15;
  text-transform: uppercase;
  color: var(--texto-2);
}

.proy__titulo {
  margin: 0;
  color: var(--blanco);
  font-family: var(--font-display);
  font-size: clamp(1.7rem, 2.6vw, 2.3rem);
  font-weight: 800;
  line-height: 0.95;
  text-transform: uppercase;
}

.proy__datos {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.85rem 1rem;
  margin: 0.35rem 0 0;
  padding-top: 0.85rem;
  border-top: 1px solid rgb(143 168 212 / 22%);
}

.proy__datos div { display: grid; gap: 0.15rem; }

.proy__datos dt {
  color: var(--cielo);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.proy__datos dd {
  margin: 0;
  color: var(--blanco);
  font-size: 1rem;
  line-height: 1.3;
}

.proy__datos dd.is-vacio { color: rgb(143 168 212 / 55%); }

@media (max-width: 720px) {
  .proy {
    grid-template-columns: 5.6rem minmax(0, 1fr);
    align-items: start;
  }

  .proy__avance {
    width: 5.6rem;
    height: 5.6rem;
    grid-row: auto;
  }

  .proy__avance b { font-size: 1.7rem; }

  .proy__titulo { font-size: 1.55rem; }

  .proy__datos { grid-template-columns: 1fr 1fr; }
}

.cvf-cols {
  display: flex;
  flex-direction: column;
  gap: 0.8rem;
  margin-top: 2rem;
}

@media (min-width: 900px) {
  .cvf-cols { flex-direction: row; align-items: stretch; }
}

.cvf-col {
  flex: 1;
  border: 1px solid rgb(143 168 212 / 28%);
  border-radius: var(--radius);
  padding: 1.3rem 1.15rem 1.4rem;
  background: rgb(13 41 128 / 35%);
  min-height: 180px;
  transition: flex-grow 0.55s var(--ease), opacity 0.55s var(--ease);
}

.cvf-col b {
  display: block;
  font-family: var(--font-display);
  font-weight: 800;
  text-transform: uppercase;
  font-size: clamp(1.6rem, 2.4vw, 2.2rem);
  line-height: 0.95;
  margin-bottom: 0.7rem;
}

.cvf-col p { color: rgb(143 168 212 / 88%); }

.cvf-how { margin-top: clamp(3rem, 7vw, 5rem); }

.timeline {
  position: relative;
  margin-top: 1.5rem;
  display: grid;
  gap: 0.2rem;
  max-width: 760px;
}

.timeline__line {
  position: absolute;
  left: 18px;
  top: 0;
  bottom: 0;
  width: 1px;
  background: rgb(143 168 212 / 25%);
}

.timeline__line span {
  display: block;
  width: 100%;
  height: 100%;
  background: var(--cielo);
  transform: scaleY(0);
  transform-origin: top;
}

.step {
  display: grid;
  grid-template-columns: 38px 1fr;
  gap: 0.8rem;
  align-items: start;
  padding-block: 0.85rem;
}

.step.is-on { opacity: 1; }

.step i {
  width: 36px;
  height: 36px;
  border: 1px solid var(--cielo);
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-family: var(--font-display);
  font-style: normal;
  font-weight: 700;
  color: var(--cielo);
  background: var(--noche);
  position: relative;
  z-index: 1;
}

.step strong {
  display: block;
  font-size: 1.15rem;
  padding-top: 0.35rem;
}

.cvf-note {
  margin-top: 2rem;
  max-width: 46ch;
  font-family: var(--font-display);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  font-size: clamp(1.5rem, 3vw, 2.3rem);
  line-height: 0.98;
}

.cvf-note + p { margin-top: 0.7rem; max-width: 52ch; }

.loop {
  margin-top: 2.5rem;
  display: grid;
  gap: 1rem;
  align-items: center;
}

@media (min-width: 860px) {
  .loop { grid-template-columns: 1fr auto 1fr; }
}

.loop article {
  border: 1px solid rgb(143 168 212 / 28%);
  border-radius: var(--radius);
  padding: 1.1rem;
}

.loop img { height: 64px; width: auto; margin-bottom: 0.8rem; }
.loop h3 {
  font-family: var(--font-display);
  font-weight: 800;
  letter-spacing: 0.08em;
  margin-bottom: 0.4rem;
}
.loop p { color: rgb(143 168 212 / 88%); font-size: 0.98rem; }

.loop__link {
  width: 72px;
  height: 1px;
  background: var(--cielo);
  justify-self: center;
}

/* Contacto: título sobre marfil y bloque carbón con formulario y datos */
#contacto.contacto {
  padding: 0;
  background: #faf9f6;
  color: #252229;
}

.contacto__wrap {
  width: min(1440px, calc(100% - var(--gutter) * 2));
  margin-inline: auto;
}

.contacto__titulo {
  margin: 0;
  padding-block: clamp(3.5rem, 6vw, 5rem) clamp(1.8rem, 3vw, 2.6rem);
  max-width: none;
  color: #252229;
  font-family: var(--font-display);
  font-size: clamp(3.4rem, 7vw, 6.6rem);
  font-weight: 800;
  line-height: 1;
}

.contacto__bloque {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  padding-block: clamp(3.2rem, 5.5vw, 4.8rem);
  background:
    radial-gradient(rgb(255 255 255 / 3%) 1px, transparent 1px) 0 0 / 4px 4px,
    #1f1e23;
  color: #f4f2ee;
}

/* Luz azul muy suave que acompaña al mouse */
.contacto__bloque::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: radial-gradient(520px circle at var(--mx, 75%) var(--my, 30%), rgb(26 63 170 / 22%), transparent 60%);
  transition: background 0.2s linear;
  pointer-events: none;
}

.contacto__grid {
  display: grid;
  grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr);
  gap: clamp(2.5rem, 7vw, 7.5rem);
}

.contacto__form h3 {
  margin: 0;
  color: #fff;
  font-family: var(--font-display);
  font-size: clamp(2rem, 3.2vw, 2.9rem);
  font-weight: 700;
  line-height: 1;
}

.contacto__form > p {
  margin: 0.6rem 0 0;
  color: #d9d6d0;
  font-size: clamp(1.02rem, 1.4vw, 1.3rem);
}

.contacto__campos {
  display: grid;
  gap: clamp(1.4rem, 2.4vw, 1.9rem);
  margin-top: clamp(1.8rem, 3vw, 2.4rem);
  max-width: 48rem;
}

/* Campo con etiqueta que sube al escribir */
.campo { position: relative; }

.campo input,
.campo textarea {
  width: 100%;
  padding: 1.35rem 0 0.55rem;
  border: 0;
  border-bottom: 1px solid #8f8b94;
  border-radius: 0;
  background: transparent;
  color: #fff;
  font-family: var(--font-body);
  font-size: clamp(1.05rem, 1.3vw, 1.2rem);
  outline: none;
  background-image: linear-gradient(var(--azul-medio), var(--azul-medio));
  background-repeat: no-repeat;
  background-position: 0 100%;
  background-size: 0 2px;
  transition: border-color 0.3s var(--ease), background-size 0.45s var(--ease);
}

/* Línea azul que se dibuja bajo el campo activo */
.campo input:focus { background-size: 100% 2px; }

.campo label {
  position: absolute;
  left: 0;
  top: 1.35rem;
  color: #d9d6d0;
  font-size: clamp(1.05rem, 1.3vw, 1.2rem);
  pointer-events: none;
  transform-origin: left top;
  transition: transform 0.3s var(--ease), color 0.3s var(--ease);
}

.campo input:focus + label,
.campo input:not(:placeholder-shown) + label,
.campo textarea:focus + label,
.campo textarea:not(:placeholder-shown) + label {
  color: var(--cielo);
  transform: translateY(-1.25rem) scale(0.78);
}

.campo--mensaje textarea {
  min-height: 7.5rem;
  margin-top: 0.4rem;
  padding: 2rem 0.9rem 0.8rem;
  border: 1px solid #8f8b94;
  border-radius: 4px;
  background-image: none;
  resize: vertical;
}

.campo--mensaje label { left: 0.9rem; top: 1.25rem; }
.campo--mensaje textarea:focus { border-color: var(--azul-medio); }
.campo--mensaje textarea:focus + label,
.campo--mensaje textarea:not(:placeholder-shown) + label { transform: translateY(-0.55rem) scale(0.78); }

.campo [aria-invalid="true"] { border-color: #e98b8b; }

.campo .error {
  margin: 0.4rem 0 0;
  color: #f0a9a9;
  font-size: 0.88rem;
}

.campo .error:empty { display: none; }

.contacto__pie {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem 1.5rem;
  margin-top: clamp(1.8rem, 3vw, 2.4rem);
}

.contacto__btn {
  position: relative;
  isolation: isolate;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.9rem;
  min-width: min(100%, 22rem);
  padding: 1.05rem 2rem;
  overflow: hidden;
  border: 0;
  border-radius: 6px;
  background: #0b47d4;
  color: #fff;
  font-family: var(--font-body);
  font-size: clamp(1.1rem, 1.4vw, 1.3rem);
  font-weight: 600;
  cursor: pointer;
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease);
}

.contacto__btn::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: var(--corporativo);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.5s var(--ease);
}

.contacto__btn svg { width: 1.35rem; height: 1.35rem; transition: transform 0.4s var(--ease); }

.contacto__btn:hover,
.contacto__btn:focus-visible { transform: translateY(-2px); box-shadow: 0 16px 32px -16px rgb(11 71 212 / 70%); }
.contacto__btn:hover::before,
.contacto__btn:focus-visible::before { transform: scaleX(1); }
.contacto__btn:hover svg,
.contacto__btn:focus-visible svg { transform: translateX(4px); }
.contacto__btn:focus-visible { outline: 2px solid var(--cielo); outline-offset: 4px; }

.contacto .form__status { margin: 0; color: var(--cielo); font-weight: 600; }

/* Datos de la empresa */
.contacto__datos h3 {
  margin: 0;
  color: #fff;
  font-family: var(--font-display);
  font-size: clamp(2.6rem, 4.6vw, 4.3rem);
  font-weight: 800;
  line-height: 1;
}

.contacto__datos > p {
  margin: 0.5rem 0 0;
  color: #d9d6d0;
  font-size: clamp(1.05rem, 1.5vw, 1.4rem);
}

.contacto__lista {
  display: grid;
  gap: clamp(1.4rem, 2.4vw, 2rem);
  margin: clamp(2rem, 3.4vw, 2.8rem) 0 0;
  padding: 0;
  list-style: none;
}

.contacto__lista li {
  display: grid;
  grid-template-columns: 3.2rem 1fr;
  align-items: center;
  gap: 1.1rem;
}

.contacto__lista svg {
  width: 2.6rem;
  height: 2.6rem;
  color: #8fb1ef;
  transition: transform 0.45s var(--ease), color 0.45s var(--ease);
}

.contacto__lista li:hover svg { transform: translateY(-3px) rotate(-6deg); color: #b8cdf6; }

.contacto__lista strong {
  display: block;
  color: #fff;
  font-size: clamp(1.05rem, 1.35vw, 1.25rem);
  font-weight: 700;
}

.contacto__lista a,
.contacto__lista span {
  display: inline-block;
  margin-top: 0.15rem;
  color: #e6e3de;
  font-size: clamp(1.02rem, 1.35vw, 1.25rem);
  background-image: linear-gradient(currentColor, currentColor);
  background-repeat: no-repeat;
  background-position: 0 100%;
  background-size: 0 1px;
  transition: background-size 0.4s var(--ease), color 0.3s var(--ease);
}

.contacto__lista a:hover { color: #fff; background-size: 100% 1px; }

.contacto__ciudad {
  margin: clamp(2rem, 3.4vw, 2.6rem) 0 0;
  color: #d9d6d0;
  font-size: 1.05rem;
}

.contacto__redes {
  display: flex;
  gap: 1.1rem;
  margin-top: 1rem;
}

.contacto__redes a {
  display: grid;
  place-items: center;
  width: 46px;
  height: 46px;
  border: 2px solid #8fb1ef;
  border-radius: 8px;
  color: #8fb1ef;
  transition: background 0.35s var(--ease), color 0.35s var(--ease), transform 0.35s var(--ease);
}

.contacto__redes a:hover { background: #8fb1ef; color: #1f1e23; transform: translateY(-3px); }
.contacto__redes svg { width: 22px; height: 22px; }
.contacto__redes:empty { display: none; }

/* Aparición por bloques (js/empresa.js) */
.contacto-anim [data-aparece] {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
  transition-delay: calc(var(--d, 0) * 0.09s);
}

.contacto-anim [data-aparece].is-visible { opacity: 1; transform: none; }

@media (max-width: 900px) {
  .contacto__grid { grid-template-columns: 1fr; }
  .contacto__btn { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .contacto-anim [data-aparece] { opacity: 1; transform: none; transition: none; }
  .campo label, .campo input, .contacto__btn, .contacto__btn::before { transition: none; }
}

.footer {
  position: relative;
  background: var(--noche);
  color: var(--blanco);
  padding: clamp(3rem, 7vw, 5rem) 0 calc(2rem + env(safe-area-inset-bottom));
  overflow: hidden;
}

.footer__word {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(4.2rem, 18vw, 16rem);
  line-height: 0.8;
  letter-spacing: -0.02em;
  text-transform: uppercase;
  display: flex;
  justify-content: space-between;
  width: min(1440px, calc(100% - var(--gutter) * 2));
  margin: 0 auto 1.5rem;
  color: var(--blanco);
}

.footer__word span {
  display: block;
  overflow: hidden;
  flex: 1;
  text-align: center;
}

.footer__word i { font-style: normal; display: block; }

.watermark {
  position: absolute;
  width: min(320px, 36vw);
  right: 2vw;
  top: 5.5rem;
  opacity: 0.08;
  pointer-events: none;
  z-index: 0;
}

#empresa .container,
#servicios .container,
#obras .container,
#cvf .container { position: relative; z-index: 1; }

.footer__bar {
  width: min(1440px, calc(100% - var(--gutter) * 2));
  margin-inline: auto;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 1rem 1.5rem;
  align-items: center;
  border-top: 2px solid var(--corporativo);
  padding-top: 1.5rem;
}

.footer__logos {
  display: flex;
  gap: 1.35rem;
  align-items: center;
  justify-self: start;
}

.footer__logos img:first-child { height: 40px; width: auto; }
.footer__logos img:last-child { height: 54px; width: auto; }

.footer nav {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  justify-self: center;
  gap: 0;
}

.footer nav a {
  padding: 0.2rem 0.72rem;
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--cielo);
}

.footer nav a + a { border-left: 1px solid rgb(143 168 212 / 35%); }

.footer__contact {
  display: flex;
  justify-content: flex-end;
  justify-self: end;
  gap: 1.5rem;
}

.footer__contact a {
  display: grid;
  justify-items: end;
  gap: 0.15rem;
  color: var(--blanco);
  font-weight: 700;
  line-height: 1.15;
}

.footer__contact span {
  color: var(--cielo);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.footer__legal {
  width: min(1440px, calc(100% - var(--gutter) * 2));
  margin: 1.15rem auto 0;
  padding-top: 0.9rem;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.55rem 1.5rem;
  border-top: 1px solid rgb(143 168 212 / 22%);
}

.footer small,
.footer__credit {
  margin: 0;
  color: rgb(143 168 212 / 78%);
  font-size: 0.82rem;
}

.footer__credit a {
  color: var(--blanco);
  font-weight: 700;
  border-bottom: 1px solid var(--corporativo);
}

@media (max-width: 980px) {
  .footer__bar { grid-template-columns: 1fr; justify-items: start; }
  .footer nav { justify-content: flex-start; justify-self: start; }
  .footer__contact { justify-content: flex-start; justify-self: start; }
  .footer__contact a { justify-items: start; }
}

@media (hover: hover) and (pointer: fine) {
  .footer nav a:hover { color: var(--blanco); }
  .footer__contact a:hover { color: var(--cielo); }
  .footer__credit a:hover { color: var(--cielo); }
}

@media (max-width: 1023px) {
  .obras-pin {
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
  }
  .obra__data { transform: none; }
}

@media (hover: hover) and (pointer: fine) {
  .obra:hover .media--duo::after { opacity: 0; }
  .obra:hover .media img { transform: scale(1.06); }
  .obra:hover .obra__data { transform: none; }

  @media (min-width: 900px) {
    .cvf-cols:hover .cvf-col { opacity: 0.45; }
    .cvf-cols .cvf-col:hover { opacity: 1; flex-grow: 1.65; }
  }
}

@keyframes redraw {
  from { stroke-dashoffset: 1; }
  to { stroke-dashoffset: 0; }
}

@media (min-width: 1024px) {
  .obra { flex-basis: clamp(380px, 34vw, 520px); min-height: 0; }
  .obras-pin {
    overflow: hidden;
    min-height: 100vh;
    display: flex;
    align-items: center;
  }
  .obra .media,
  .obra .media img { height: 72vh; min-height: 0; }
}

/* Mapa de obras realizadas (js/mapa.js) */
#mapa { background: #faf9f6; }

.mapa h2.mapa__titulo {
  margin: 0;
  max-width: none;
  color: #252229;
  font-family: var(--font-display);
  font-size: clamp(2.8rem, 6vw, 5.5rem);
  font-weight: 800;
  line-height: 1;
}

.mapa__chips {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  margin-top: clamp(1.2rem, 2.4vw, 1.8rem);
}

.mapa__chip {
  min-height: 46px;
  display: inline-flex;
  align-items: center;
  gap: 0.7rem;
  padding: 0.5rem 1.15rem;
  border: 1px solid #d7d2cb;
  border-radius: 6px;
  background: var(--blanco);
  color: #252229;
  font-family: var(--font-body);
  font-size: 1.02rem;
  font-weight: 400;
  cursor: pointer;
  transition: border-color 0.3s var(--ease), background 0.3s var(--ease), color 0.3s var(--ease), transform 0.3s var(--ease);
}

.mapa__chip:hover { border-color: var(--pin, var(--corporativo)); transform: translateY(-1px); }

.mapa__chip[aria-pressed="true"] {
  background: var(--pin, var(--corporativo));
  border-color: var(--pin, var(--corporativo));
  color: var(--blanco);
  font-weight: 600;
}

.mapa__dot {
  width: 14px;
  height: 14px;
  flex: 0 0 auto;
  border-radius: 50%;
  background: var(--pin, var(--blanco));
  box-shadow: inset 0 0 0 1px rgb(0 0 0 / 6%);
}

.mapa__chip:not([style]) .mapa__dot { background: var(--corporativo); }
.mapa__chip[aria-pressed="true"] .mapa__dot { background: var(--blanco); }

.mapa__canvas {
  position: relative;
  z-index: 0;
  isolation: isolate;
  height: clamp(440px, 68vh, 660px);
  margin-top: clamp(1.4rem, 2.6vw, 2rem);
  overflow: hidden;
  border: 1px solid #d7d2cb;
  border-radius: 8px;
  background: #f2efe9;
}

/* Fondo vectorial claro (Positron) con un toque cálido; el respaldo raster de OpenStreetMap va casi en gris */
.mapa__canvas .leaflet-tile-pane { filter: sepia(0.04); }
.mapa__canvas--raster .leaflet-tile-pane { filter: grayscale(0.82) brightness(1.07) contrast(0.9) sepia(0.06); }

.mapa__canvas .leaflet-control-zoom {
  border: 0;
  box-shadow: 0 2px 10px rgb(37 34 41 / 14%);
}

.mapa__canvas .leaflet-control-zoom a {
  width: 38px;
  height: 38px;
  line-height: 36px;
  color: #252229;
  font-size: 1.3rem;
}

.mapa__canvas .leaflet-control-attribution {
  font-size: 10px;
  background: rgb(250 249 246 / 85%);
}

.leaflet-div-icon.pin-wrap,
.pin-wrap {
  background: transparent;
  border: 0;
}

.pin {
  display: block;
  width: 16px;
  height: 16px;
  margin: 3px;
  border-radius: 50%;
  background: var(--pin, var(--corporativo));
  border: 2px solid var(--blanco);
  box-shadow: 0 1px 4px rgb(37 34 41 / 35%);
  cursor: pointer;
  transition: transform 0.25s var(--ease), box-shadow 0.25s var(--ease);
}

.pin-wrap:hover .pin { transform: scale(1.3); }

.pin-wrap.is-active .pin {
  transform: scale(1.35);
  box-shadow: 0 0 0 7px color-mix(in srgb, var(--pin) 28%, transparent), 0 0 0 14px color-mix(in srgb, var(--pin) 14%, transparent);
}

/* Nombres de barrios y ciudades sobre el mapa */
.lugar {
  width: auto !important;
  height: auto !important;
  margin: 0 !important;
  background: none;
  border: 0;
}

.lugar span {
  display: block;
  transform: translate(-50%, -50%);
  color: #5b5764;
  font-family: var(--font-body);
  font-size: 12.5px;
  font-weight: 400;
  line-height: 1.1;
  text-align: center;
  white-space: nowrap;
  text-shadow: 0 0 3px #fff, 0 0 3px #fff, 0 0 6px #fff;
}

.lugar--ciudad span {
  color: #3b3842;
  font-size: 17px;
  font-weight: 700;
}

.lugar--rio span {
  color: #5d93b8;
  font-size: 11px;
  font-style: italic;
  letter-spacing: 0.03em;
  transform: translate(-50%, -50%) rotate(-14deg);
}

.leaflet-pane.is-oculto,
.leaflet-pane.is-lejos .lugar--cerca { display: none; }

@media (max-width: 720px) {
  .lugar span { font-size: 11px; }
  .lugar--ciudad span { font-size: 15px; }
}

/* Recuadro de la obra */
.obra-pop .leaflet-popup-content-wrapper {
  padding: 0;
  border-radius: 8px;
  background: #faf9f6;
  box-shadow: 0 18px 40px -12px rgb(37 34 41 / 30%);
}

.obra-pop .leaflet-popup-content { margin: 0; }
.obra-pop .leaflet-popup-tip { background: #faf9f6; }

.obra-pop a.leaflet-popup-close-button {
  top: 12px;
  right: 12px;
  width: 28px;
  height: 28px;
  color: #5d5966;
  font: 400 24px/26px var(--font-body);
}

.obra-pop__cuerpo {
  padding: 1.15rem 3rem 1.25rem 1.3rem;
  color: #252229;
  animation: pop-in 0.35s var(--ease);
}

@keyframes pop-in { from { opacity: 0; transform: translateY(6px); } }

.obra-pop__cat {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin: 0 !important;
  color: #5d5966;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}

.obra-pop__cat::before {
  content: "";
  width: 14px;
  height: 14px;
  flex: none;
  border-radius: 50%;
  background: var(--pin);
}

.obra-pop__cuerpo h3 {
  margin: 0.6rem 0 0;
  font-family: var(--font-display);
  font-size: clamp(1.6rem, 2.4vw, 2.2rem);
  font-weight: 800;
  line-height: 1;
}

.obra-pop__lugar {
  margin: 0.4rem 0 0 !important;
  color: #4a5a78;
  font-family: var(--font-display);
  font-size: 1.25rem;
  font-weight: 700;
}

.obra-pop__detalle {
  margin: 0.6rem 0 0 !important;
  color: #343139;
  font-size: 0.95rem;
}

@media (max-width: 720px) {
  .mapa__chip { min-height: 40px; padding: 0.4rem 0.85rem; font-size: 0.92rem; gap: 0.5rem; }
  .mapa__dot { width: 11px; height: 11px; }
  .mapa__canvas { height: 460px; }
  .obra-pop__cuerpo { padding: 1rem 2.6rem 1.1rem 1.1rem; }
}

@media (prefers-reduced-motion: reduce) {
  .obra-pop__cuerpo { animation: none; }
  .pin, .mapa__chip { transition: none; }
}

.ficha-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  height: var(--header);
  padding-inline: var(--gutter);
  background: var(--blanco);
  border-bottom: 1px solid var(--linea);
}

.ficha-bar img {
  display: block;
  height: 34px;
  width: auto;
  max-width: none;
}

.ficha-bar__volver {
  color: var(--corporativo);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-decoration: none;
}

.ficha-hero {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(16rem, 0.9fr);
  gap: clamp(1.5rem, 4vw, 3.5rem);
  align-items: center;
  background: var(--noche);
  color: var(--blanco);
  padding: clamp(2.5rem, 6vw, 4.5rem) var(--gutter) clamp(4.5rem, 8vw, 6.5rem);
}

.ficha-portada {
  margin: 0;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  border-radius: var(--radius);
  background: var(--profundo);
}

.ficha-portada img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ficha-portada__vacia {
  display: grid;
  place-items: center;
  height: 100%;
  margin: 0;
  padding: 1.5rem;
  color: var(--cielo);
  font-size: 0.95rem;
  text-align: center;
}

.ficha-hero__indice {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 1.1rem;
  letter-spacing: 0.16em;
  color: var(--cielo);
}

.ficha-estado {
  display: inline-block;
  margin: 1rem 0 0;
  padding: 0.4rem 0.65rem;
  border: 1px solid var(--cielo);
  color: var(--cielo);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.ficha-hero h1 {
  max-width: 14ch;
  margin: 0.85rem 0 0;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(2.8rem, 7vw, 5.4rem);
  line-height: 0.9;
  letter-spacing: 0.01em;
  text-transform: uppercase;
}

.ficha-hero__lugar {
  margin: 0.9rem 0 0;
  color: rgb(143 168 212 / 88%);
  font-size: 1.05rem;
}

.ficha-datos {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  margin: -2.2rem var(--gutter) 0;
  background: var(--blanco);
  border-radius: var(--radius);
  position: relative;
}

.ficha-datos div {
  margin: 0;
  padding: 1.15rem 1.1rem 1.05rem;
  border-right: 1px solid var(--linea);
  border-bottom: 1px solid var(--linea);
}

.ficha-datos dd {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(1.35rem, 2vw, 1.9rem);
  line-height: 1;
  color: var(--noche);
}

.ficha-datos dd.is-vacio { color: var(--azul-medio); }

.ficha-datos dt {
  margin: 0.4rem 0 0;
  color: var(--texto-2);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.ficha-cuerpo {
  padding: clamp(2.5rem, 6vw, 4rem) var(--gutter) clamp(3rem, 8vw, 5rem);
}

.ficha-cuerpo h2 {
  margin: 2.2rem 0 0.7rem;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(1.8rem, 3vw, 2.4rem);
  letter-spacing: 0.02em;
  text-transform: uppercase;
}

.ficha-cuerpo h2:first-child { margin-top: 0; }

.ficha-cuerpo p {
  max-width: 68ch;
  margin: 0;
  color: var(--texto-2);
  font-size: 1.05rem;
  line-height: 1.55;
}

.ficha-fotos {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
  gap: 0.75rem;
  margin-top: 0.4rem;
}

.ficha-fotos img {
  width: 100%;
  height: 240px;
  object-fit: cover;
  border-radius: var(--radius);
  background: var(--tinte);
}

.ficha-fotos__vacio {
  margin: 0;
  padding: 2.4rem 1.4rem;
  background: var(--tinte);
  color: var(--texto-2);
  border-radius: var(--radius);
}

.ficha-cierre { margin-top: 2rem; }

.ficha-cta {
  display: inline-flex;
  align-items: center;
  min-height: 3rem;
  padding: 0 1.2rem;
  background: var(--corporativo);
  color: var(--blanco);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-decoration: none;
  border-radius: var(--radius);
}

.ficha-cta:hover { background: var(--profundo); }

.ficha-indice {
  padding: clamp(3rem, 8vw, 5rem) var(--gutter);
}

.ficha-indice h1 {
  margin: 0 0 1.2rem;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(2.2rem, 5vw, 3.6rem);
  text-transform: uppercase;
}

.ficha-indice ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

.ficha-indice a {
  display: inline-block;
  padding: 0.7rem 0;
  color: var(--corporativo);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.6rem;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  text-decoration: none;
}

@media (max-width: 800px) {
  .ficha-hero { grid-template-columns: 1fr; }
  .ficha-portada { aspect-ratio: 16 / 10; }
  .ficha-datos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Desarrollos residenciales (sección CVF de la landing) y Módulos, que usa la versión invertida */
.section.desarrollos {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  padding-block: clamp(4.5rem, 8vw, 7rem);
  background: #faf9f6;
  color: #252229;
}

/* Fondo en movimiento: cuadrícula de plano que se desplaza lento y un arco azul con parallax */
.desarrollos__fondo {
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background-image:
    linear-gradient(rgb(26 63 170 / 6%) 1px, transparent 1px),
    linear-gradient(90deg, rgb(26 63 170 / 6%) 1px, transparent 1px);
  background-size: 56px 56px;
  -webkit-mask-image: radial-gradient(ellipse 70% 80% at 20% 50%, #000 0%, transparent 75%);
  mask-image: radial-gradient(ellipse 70% 80% at 20% 50%, #000 0%, transparent 75%);
  animation: plano-deriva 40s linear infinite;
}

@keyframes plano-deriva { to { background-position: 56px 56px, 56px 56px; } }

.desarrollos__arco {
  position: absolute;
  left: -14rem;
  bottom: -18rem;
  z-index: -1;
  width: 38rem;
  height: 38rem;
  border: 1px solid rgb(26 63 170 / 16%);
  border-radius: 50%;
  box-shadow: 0 0 0 3.5rem rgb(26 63 170 / 3%), 0 0 0 7rem rgb(26 63 170 / 2%);
  pointer-events: none;
  translate: 0 var(--desplazo, 0px);
}

.desarrollos__grid {
  display: grid;
  grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.6fr);
  align-items: center;
  gap: clamp(2rem, 4vw, 3.6rem);
  padding-left: max(var(--gutter), calc((100vw - 1440px) / 2));
}

.desarrollos__texto { position: relative; padding-block: 1rem; }

/* Línea azul vertical que se dibuja al entrar */
.desarrollos__texto::before {
  content: "";
  position: absolute;
  left: calc(var(--gutter) * -0.55);
  top: 0;
  bottom: 0;
  width: 3px;
  border-radius: 3px;
  background: linear-gradient(var(--corporativo), var(--azul-medio));
  transform-origin: top;
  transform: scaleY(var(--linea, 1));
  transition: transform 1.2s var(--ease) 0.2s;
}

.desarrollos__rotulo {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin: 0;
  color: var(--corporativo);
  font-size: 0.97rem;
  font-weight: 700;
  letter-spacing: 2px;
  text-transform: uppercase;
}

.desarrollos__rotulo::before {
  content: "";
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--corporativo);
  box-shadow: 0 0 0 0 rgb(26 63 170 / 40%);
  animation: latido-azul 2.6s var(--ease-inout) infinite;
}

@keyframes latido-azul { 50% { box-shadow: 0 0 0 7px rgb(26 63 170 / 0%); } }

.desarrollos h2 {
  margin: 1.1rem 0 0;
  max-width: none;
  color: #252229;
  font-family: var(--font-display);
  font-size: clamp(3rem, 5.4vw, 5.25rem);
  font-weight: 800;
  line-height: 0.98;
}

.desarrollos h2 em { font-style: normal; color: var(--corporativo); }

.desarrollos__texto > p:not(.desarrollos__rotulo) {
  max-width: 34ch;
  margin: 1.5rem 0 0;
  color: #343139;
  font-size: clamp(1.1rem, 1.45vw, 1.4rem);
  line-height: 1.45;
}

/* Botón */
.desarrollos__btn {
  position: relative;
  isolation: isolate;
  display: inline-flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.4rem;
  min-width: min(100%, 22rem);
  margin-top: clamp(2rem, 3.4vw, 2.8rem);
  padding: 1.15rem 1.15rem 1.15rem 1.7rem;
  overflow: hidden;
  border-radius: 8px;
  background: var(--corporativo);
  color: var(--blanco);
  font-family: var(--font-display);
  font-size: clamp(1.4rem, 1.9vw, 1.75rem);
  font-weight: 700;
  line-height: 1;
  box-shadow: 0 14px 30px -18px rgb(13 41 128 / 70%);
  transition: box-shadow 0.45s var(--ease), transform 0.45s var(--ease);
}

.desarrollos__btn::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: var(--profundo);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.5s var(--ease);
}

.desarrollos__btn i {
  display: grid;
  place-items: center;
  width: 2.6rem;
  height: 2.6rem;
  flex: none;
  border-radius: 50%;
  background: rgb(255 255 255 / 14%);
  transition: background 0.45s var(--ease), color 0.45s var(--ease);
}

.desarrollos__btn svg { width: 1.2rem; height: 1.2rem; transition: transform 0.45s var(--ease); }

.desarrollos__btn:hover,
.desarrollos__btn:focus-visible { transform: translateY(-2px); box-shadow: 0 20px 36px -18px rgb(13 41 128 / 80%); }
.desarrollos__btn:hover::before,
.desarrollos__btn:focus-visible::before { transform: scaleX(1); }
.desarrollos__btn:hover i,
.desarrollos__btn:focus-visible i { background: var(--blanco); color: var(--corporativo); }
.desarrollos__btn:hover svg,
.desarrollos__btn:focus-visible svg { transform: translateX(3px); }
.desarrollos__btn:focus-visible { outline: 2px solid var(--azul-medio); outline-offset: 4px; }

/* Foto: llega al borde derecho, con esquinas azules y parallax */
.desarrollos__foto {
  position: relative;
  margin: 0;
  aspect-ratio: 1870 / 841;
  min-height: 320px;
  overflow: hidden;
}

/* El recorte va en <picture> y no en la figura: Chrome no avisa al IntersectionObserver
   que la figura entró en pantalla si está recortada por completo. */
.desarrollos__foto picture {
  display: block;
  height: 100%;
  clip-path: inset(0 0 0 var(--corte, 0%));
  transition: clip-path 1.3s var(--ease);
}

.desarrollos__foto img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  scale: 1.08;
  translate: 0 var(--desplazo, 0px);
  transition: scale 1.2s var(--ease);
}

.desarrollos__foto:hover img { scale: 1.12; }

.desarrollos__foto::before,
.desarrollos__foto::after {
  content: "";
  position: absolute;
  z-index: 1;
  width: 44px;
  height: 44px;
  border: 3px solid var(--corporativo);
  pointer-events: none;
  transition: width 0.5s var(--ease), height 0.5s var(--ease);
}

.desarrollos__foto::before { top: 16px; left: 16px; border-right: 0; border-bottom: 0; }
.desarrollos__foto::after { bottom: 16px; left: 16px; border-right: 0; border-top: 0; }
.desarrollos__foto:hover::before,
.desarrollos__foto:hover::after { width: 72px; height: 72px; }

.desarrollos__foto figcaption {
  position: absolute;
  right: clamp(1rem, 2vw, 1.6rem);
  bottom: clamp(1rem, 2vw, 1.6rem);
  z-index: 1;
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  padding: 0.5rem 0.85rem;
  border-radius: 999px;
  background: rgb(250 249 246 / 88%);
  backdrop-filter: blur(6px);
  color: #252229;
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.06em;
}

.desarrollos__foto figcaption::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--corporativo);
}

/* Sin foto todavía: recuadro de plano con el aviso */
.desarrollos__vacio {
  display: grid;
  place-items: center;
  height: 100%;
  background-color: #eef1f8;
  background-image:
    linear-gradient(rgb(26 63 170 / 9%) 1px, transparent 1px),
    linear-gradient(90deg, rgb(26 63 170 / 9%) 1px, transparent 1px);
  background-size: 40px 40px;
  clip-path: inset(0 var(--corte, 0%) 0 0);
  transition: clip-path 1.3s var(--ease);
}

.desarrollos__vacio span {
  color: var(--corporativo);
  font-size: 0.85rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}

/* Versión invertida: foto a la izquierda hasta el borde, texto a la derecha */
.desarrollos--inverso .desarrollos__fondo {
  -webkit-mask-image: radial-gradient(ellipse 70% 80% at 80% 50%, #000 0%, transparent 75%);
  mask-image: radial-gradient(ellipse 70% 80% at 80% 50%, #000 0%, transparent 75%);
}

.desarrollos--inverso .desarrollos__arco { left: auto; right: -14rem; }

.desarrollos--inverso .desarrollos__grid {
  grid-template-columns: minmax(0, 1.6fr) minmax(0, 0.92fr);
  padding-left: 0;
  padding-right: max(var(--gutter), calc((100vw - 1440px) / 2));
}

.desarrollos--inverso .desarrollos__foto picture { clip-path: inset(0 var(--corte, 0%) 0 0); }
.desarrollos--inverso .desarrollos__foto::before { left: auto; right: 16px; border-left: 0; border-right: 3px solid var(--corporativo); }
.desarrollos--inverso .desarrollos__foto::after { left: auto; right: 16px; border-left: 0; border-right: 3px solid var(--corporativo); }
.desarrollos--inverso .desarrollos__foto figcaption { right: auto; left: clamp(1rem, 2vw, 1.6rem); }

/* Aparición al entrar (js/empresa.js agrega .desarrollos-anim y .is-visible) */
.desarrollos-anim [data-aparece] {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
  transition-delay: calc(var(--d, 0) * 0.09s);
}

.desarrollos-anim [data-aparece].is-visible { opacity: 1; transform: none; }
.desarrollos-anim .desarrollos__texto { --linea: 0; }
.desarrollos-anim .desarrollos__texto.is-visible { --linea: 1; }
.desarrollos-anim .desarrollos__foto { --corte: 100%; }
.desarrollos-anim .desarrollos__foto.is-visible { --corte: 0%; }

@media (max-width: 860px) {
  .desarrollos__grid { grid-template-columns: 1fr; padding-left: 0; }
  .desarrollos__texto { margin-inline: var(--gutter); }
  .desarrollos__texto::before { left: -0.8rem; }
  .desarrollos h2 { font-size: clamp(2.6rem, 11vw, 3.4rem); }
  .desarrollos__btn { width: 100%; }
  .desarrollos__foto { min-height: 240px; aspect-ratio: 4 / 3; }
  .desarrollos--inverso .desarrollos__grid { grid-template-columns: 1fr; padding-right: 0; }
  .desarrollos--inverso .desarrollos__texto { order: -1; }
}

@media (prefers-reduced-motion: reduce) {
  .desarrollos__fondo,
  .desarrollos__rotulo::before { animation: none; }
  .desarrollos-anim [data-aparece],
  .desarrollos-anim .desarrollos__foto { opacity: 1; transform: none; transition: none; --corte: 0%; }
  .desarrollos-anim .desarrollos__texto { --linea: 1; }
}

.puerta {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
  gap: clamp(1.5rem, 4vw, 3rem);
  align-items: center;
  color: inherit;
  text-decoration: none;
}

.puerta:focus-visible {
  outline: 2px solid var(--cielo);
  outline-offset: 8px;
}

.puerta__texto img {
  display: block;
  height: 72px;
  width: auto;
  max-width: min(100%, 28rem);
  margin-bottom: 1.2rem;
}

.puerta__ir {
  display: inline-flex;
  margin-top: 1.5rem;
  padding: 0.85rem 1.15rem;
  background: var(--corporativo);
  color: var(--blanco);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.puerta:hover .puerta__ir,
.puerta:focus-visible .puerta__ir { background: var(--profundo); }

.puerta__fotos {
  display: grid;
  grid-template-columns: 1.15fr 0.85fr;
  gap: 0.7rem;
  min-height: 20rem;
}

.puerta__foto {
  display: grid;
  place-items: center;
  margin: 0;
  min-height: 20rem;
  padding: 1rem;
  border: 1px solid rgb(143 168 212 / 45%);
  border-radius: var(--radius);
  background: var(--noche);
  color: var(--cielo);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-align: center;
  text-transform: uppercase;
}

.section[data-theme="light"] .puerta__foto {
  border-color: var(--azul-medio);
  background: var(--blanco);
  color: var(--corporativo);
}

.puerta:hover .puerta__foto { border-color: var(--blanco); }
.section[data-theme="light"] .puerta:hover .puerta__foto { border-color: var(--corporativo); }

.puerta__fotos--tres {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  grid-template-rows: auto;
  min-height: 14rem;
}

.puerta__fotos--tres .puerta__foto {
  min-height: 14rem;
}

.tipo-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1rem;
  margin-top: clamp(2rem, 5vw, 3rem);
}

.tipo {
  overflow: hidden;
  border: 1px solid var(--linea);
  border-top: 3px solid var(--corporativo);
  border-radius: var(--radius);
  background: var(--blanco);
}

.tipo__foto {
  display: grid;
  place-items: center;
  aspect-ratio: 4 / 3;
  background: var(--tinte);
  color: var(--corporativo);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-align: center;
  text-transform: uppercase;
}

.tipo h2 {
  margin: 1rem 1rem 0.35rem;
  font-family: var(--font-display);
  font-size: 1.5rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.tipo p {
  margin: 0 1rem 1.2rem;
  color: var(--texto-2);
}

#modulos-pagina { padding-block: clamp(3rem, 8vw, 6rem); }

@media (max-width: 860px) {
  .puerta { grid-template-columns: 1fr; }
  .puerta__fotos,
  .puerta__fotos--tres { min-height: 0; }
  .puerta__fotos--tres .puerta__foto { min-height: 8.5rem; }
  .tipo-grid { grid-template-columns: 1fr; }
}
