/* ══════════════════════════════════════════════════════
   CCP · SISTEMA DEL SITIO
   Piezas que viven en más de una página: header de interior,
   barra de redes, galería, equipo, blog, formularios, y los
   pilares 3 y 6 del brief.
   Carga siempre DESPUÉS de base.css.
   ══════════════════════════════════════════════════════ */

/* El header de una interior nace sólido y ocupa lugar: sin hero
   que lo sostenga, no puede flotar encima del texto. */
.hd.nace-solido{position:sticky;transition:none}
.hd-nav a.es,.hd.solid .hd-nav a.es{color:var(--rojo)}
.hd-nav a.es::after{width:100%;background:var(--rojo)}

/* ══ BARRA DE REDES ══
   Rescatada de ccparquitectura.cl/nuevo/. Pastilla vertical al
   borde derecho; el nombre no se desliza, se descubre con clip. */
.redes{
  position:fixed;right:14px;top:50%;transform:translateY(-50%);z-index:70;
  display:flex;flex-direction:column;gap:2px;
  background:rgba(255,255,255,.84);backdrop-filter:blur(10px);
  border:1px solid var(--linea);border-radius:999px;padding:9px 7px;
  box-shadow:0 4px 24px rgba(20,20,20,.07);
}
.redes a{
  width:37px;height:37px;border-radius:50%;position:relative;
  display:grid;place-items:center;color:var(--gris);
  transition:color .25s var(--e),background .25s var(--e);
}
.redes a svg{width:19px;height:19px;fill:currentColor}
.redes a:hover{color:var(--rojo);background:rgba(227,6,19,.07)}
.redes a+a::before{
  content:"";position:absolute;top:-1px;left:50%;transform:translateX(-50%);
  width:14px;height:1px;background:var(--linea);
}
.redes .nom{
  position:absolute;right:calc(100% + 8px);top:50%;transform:translateY(-50%);
  font-family:"DM Sans",sans-serif;font-size:10.5px;letter-spacing:.14em;
  text-transform:uppercase;color:#fff;white-space:nowrap;
  background:var(--tinta);border-radius:999px;padding:6px 12px;pointer-events:none;
  clip-path:inset(0 0 0 100%);opacity:0;
  transition:clip-path .34s cubic-bezier(.2,.85,.25,1),opacity .2s;
}
.redes a:hover .nom,.redes a:focus-visible .nom{clip-path:inset(0 0 0 0);opacity:1}
@media (max-width:900px){
  .redes{right:8px;padding:6px 4px}
  .redes a{width:33px;height:33px}
  .redes a svg{width:17px;height:17px}
  .redes .nom{display:none}
}

/* ══ CABECERA DE PÁGINA INTERIOR ══ */
.cab{padding:clamp(48px,8vh,88px) 0 clamp(26px,4vh,44px);border-bottom:1px solid var(--linea)}
.cab .display{margin-bottom:14px}
.cab .lede{max-width:56ch}
.cab-fila{display:flex;align-items:baseline;justify-content:space-between;gap:24px;flex-wrap:wrap}
.seccion{padding:clamp(56px,9vh,110px) 0}
.seccion--hueso{background:var(--hueso)}

/* ══ GALERÍA DE OBRAS ══
   🔴 UNA FILA = UNA OBRA. Las dos fotos de cada casa viajan juntas:
   la 01 y la 02, en ese orden. Esa regla manda sobre todo lo demas.

   🔴 COMPOSICION MEDIDA EN amasr.com.ar/villas (19-09-2026):
   dentro de la fila las dos NO son simetricas — una ANCHA 2:1 y una
   CUADRADA 1:1, y el lado de la ancha SE INVIERTE fila a fila. Ahi
   son 843px + 417px con 8px de separacion sobre 1354 de ancho; aca
   es lo mismo en proporcion: grilla de 3 columnas, la ancha toma 2.

   La diferencia con la referencia: alla cada fila son DOS proyectos
   distintos, aca la fila entera es UNA obra. Por eso la alternancia
   va por fila completa, nunca partiendo una pareja.

   El margen blanco entre fotos es parte de la composicion: separa sin
   despegar, y es lo que hace que se lean como galeria y no como una
   tira continua. */
.gal{
  display:grid;
  /* 🔴 TRES columnas iguales: la ancha ocupa dos, la cuadrada una.
     Con `2fr 1fr` la proporcion quedaba atada al lado y al invertir
     la fila la ancha caia en la columna estrecha y se deformaba. */
  grid-template-columns:repeat(3,1fr);
  /* 🔴 `dense`: en las filas invertidas la cuadrada va en la col 1,
     a la IZQUIERDA de la ancha que el DOM coloco antes. Sin `dense`
     la grilla no retrocede y la manda una fila mas abajo, partiendo
     la pareja. Con `dense` rellena ese hueco y quedan juntas. */
  grid-auto-flow:row dense;
  gap:var(--gap-gal,10px);
}
.ob{position:relative;overflow:hidden;background:var(--hueso);display:block}

/* ── LA COMPOSICION ALTERNADA ──
   🔴 El lado lo decide `data-lado` en el HTML, NO un :nth-child.
   Probadas y descartadas cuatro variantes de CSS puro: `nth-child`
   con grid-column partia la fila en dos alturas, `direction:rtl` no
   afecta la colocacion de la grilla, y `order` reordena la galeria
   entera y separa las parejas. Con el atributo, cada obra dice donde
   va su foto ancha y la grilla no tiene que adivinar nada.

   `grid-column` explicito en AMBAS celdas: dar columna a una sola
   dejaba a la otra buscando hueco y la mandaba una fila abajo. */
.ob[data-lado="izq"][data-pos="a"]{grid-column:1 / span 2;aspect-ratio:2/1}
.ob[data-lado="izq"][data-pos="b"]{grid-column:3 / span 1;aspect-ratio:1/1}
.ob[data-lado="der"][data-pos="a"]{grid-column:2 / span 2;aspect-ratio:2/1}
.ob[data-lado="der"][data-pos="b"]{grid-column:1 / span 1;aspect-ratio:1/1}

.ob img{width:100%;height:100%;object-fit:cover;transition:transform 1.1s var(--e)}
.ob::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,transparent 45%,rgba(0,0,0,.64));
  opacity:0;transition:opacity .42s var(--e);
}
.ob-txt{
  position:absolute;left:22px;bottom:18px;z-index:2;color:#fff;
  opacity:0;transform:translateY(10px);
  transition:opacity .42s var(--e),transform .42s var(--e);
}
.ob-txt .cat{
  font-family:"DM Sans",sans-serif;font-size:10px;letter-spacing:.2em;
  text-transform:uppercase;opacity:.86;display:block;margin-bottom:5px;
}
.ob-txt .nom{font-family:"Aboreto",serif;font-size:clamp(17px,2vw,24px);display:block}
.ob:hover img{transform:scale(1.04)}
.ob:hover::after,.ob:hover .ob-txt{opacity:1;transform:none}
.ob:active{transform:scale(.99)}
.ob[hidden]{display:none}

/* píldoras de filtro, flotantes sobre la galería */
/* Van ARRIBA de la galeria: flotando abajo tapaban la obra, que es
   justo lo que la pagina viene a mostrar. */
.filtros{
  display:flex;gap:9px;justify-content:center;flex-wrap:wrap;
  padding:0 0 clamp(22px,3.5vh,36px);
}
.fl{
  font-family:"DM Sans",sans-serif;font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;padding:11px 20px;border-radius:999px;
  background:rgba(255,255,255,.92);backdrop-filter:blur(10px);
  border:1px solid var(--linea);cursor:pointer;color:var(--gris);
  box-shadow:0 3px 16px rgba(20,20,20,.09);
}
.fl:hover{color:var(--tinta);border-color:var(--tinta)}
.fl.on{background:var(--tinta);color:#fff;border-color:var(--tinta)}
.fl:active{transform:scale(.95)}

/* ══ LOS 3 SERVICIOS ══ */
.srv{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(18px,2.6vw,38px)}
.srv-i{padding-top:26px;border-top:1px solid var(--tinta)}
.srv-i .n{
  font-family:"DM Sans",sans-serif;font-size:11px;letter-spacing:.2em;
  color:var(--rojo);display:block;margin-bottom:14px;
}
.srv-i h3{font-family:"Aboreto",serif;font-size:clamp(18px,2.1vw,25px);line-height:1.25;margin-bottom:12px}
.srv-i p{font-size:14.5px;color:var(--gris);margin:0}

/* ══ EQUIPO Y COLABORADORES ══ */
.equipo{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(18px,3vw,42px)}
.per figure{margin:0;overflow:hidden;aspect-ratio:3/4;background:var(--hueso)}
.per img{width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.05);transition:filter .6s var(--e),transform 1.1s var(--e)}
.per:hover img{filter:grayscale(0);transform:scale(1.03)}
.per h3{font-family:"Aboreto",serif;font-size:clamp(16px,1.8vw,20px);margin:16px 0 4px}
.per p{font-size:13px;color:var(--gris);margin:0}
.per .vacio{
  width:100%;height:100%;display:grid;place-items:center;
  color:var(--gris);font-family:"DM Sans",sans-serif;font-size:10.5px;
  letter-spacing:.18em;text-transform:uppercase;text-align:center;
  padding:20px;border:1px dashed var(--linea);line-height:1.9;
}

/* ══ BLOG ══ */
.notas{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(22px,3.4vw,46px)}
.nota{display:block;border-bottom:1px solid var(--linea);padding-bottom:26px}
.nota figure{margin:0 0 18px;overflow:hidden;aspect-ratio:16/10;background:var(--hueso)}
.nota img{width:100%;height:100%;object-fit:cover;transition:transform 1.1s var(--e)}
.nota:hover img{transform:scale(1.04)}
.nota .meta{
  font-family:"DM Sans",sans-serif;font-size:10.5px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gris);display:flex;gap:12px;margin-bottom:10px;
}
.nota h3{font-family:"Aboreto",serif;font-size:clamp(17px,2vw,23px);line-height:1.28;margin-bottom:10px}
.nota p{font-size:14.5px;color:var(--gris);margin:0 0 14px}

/* ══ MODELO 3D · acceso con clave ══ */
.acceso{
  max-width:430px;margin:0 auto;padding:clamp(30px,5vh,48px);
  border:1px solid var(--linea);background:var(--hueso);
}
.campo{margin-bottom:20px}
.campo label{
  display:block;font-family:"DM Sans",sans-serif;font-size:10.5px;
  letter-spacing:.18em;text-transform:uppercase;color:var(--gris);margin-bottom:8px;
}
.campo input,.campo textarea,.campo select{
  width:100%;padding:13px 0;border:0;border-bottom:1px solid var(--linea);
  background:none;font:inherit;font-size:15px;color:var(--tinta);
  transition:border-color .3s var(--e);
}
.campo textarea{resize:vertical;min-height:110px}
.campo input:focus,.campo textarea:focus,.campo select:focus{outline:none;border-color:var(--tinta)}
.aviso{
  margin-top:20px;padding:14px 16px;font-size:13.5px;line-height:1.6;
  background:rgba(227,6,19,.055);border-left:2px solid var(--rojo);color:var(--tinta);
}

/* ══ FORMULARIO ══ */
.form-grid{display:grid;grid-template-columns:1.25fr 1fr;gap:clamp(24px,5vw,80px);align-items:start}
.dos{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.datos p{font-size:14.5px;color:var(--gris);margin:0 0 10px;line-height:1.7}
.datos a{color:var(--gris);transition:color .3s var(--e)}
.datos a:hover{color:var(--rojo)}

/* ══════════════════════════════════════════════════════
   PILARES DEL BRIEF · 3 letras vivas · 6 feedback háptico
   ══════════════════════════════════════════════════════ */
.viva{display:inline-block}
.viva .ch{
  display:inline-block;
  transform:translate3d(0,var(--dy,0),0) scale(var(--sc,1));
  transition:transform .5s var(--e);
  will-change:transform;
}
.viva.entra .ch{opacity:0;animation:chIn .72s var(--e) forwards;animation-delay:calc(var(--i) * 24ms)}
@keyframes chIn{
  from{opacity:0;transform:translate3d(0,.45em,0)}
  to{opacity:1;transform:translate3d(0,0,0)}
}

.btn,.card,.ms,.ob,.fl,.nota{
  transition:transform .42s cubic-bezier(.34,1.56,.64,1),background .35s var(--e),
             color .35s var(--e),border-color .35s var(--e);
}
.btn:active{transform:scale(.955)}
.card:active,.ms:active{transform:scale(.988)}
.btn{position:relative;overflow:hidden;isolation:isolate}
.btn::after{
  content:"";position:absolute;z-index:-1;
  left:var(--mx,50%);top:var(--my,50%);width:0;height:0;
  border-radius:50%;background:rgba(255,255,255,.26);
  transform:translate(-50%,-50%);
  transition:width .55s var(--e),height .55s var(--e),opacity .55s var(--e);
}
.btn-s::after{background:rgba(20,20,20,.1)}
.btn:hover::after{width:300px;height:300px}
.btn:active::after{width:360px;height:360px;opacity:.5;transition-duration:.18s}

.card{perspective:900px}
.card .card-img{
  transform:rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));
  transition:transform .5s var(--e);will-change:transform;
}
.card:hover .card-img{transition-duration:.16s}

@media (prefers-reduced-motion:reduce){
  .viva .ch{transition:none!important;animation:none!important;transform:none!important;opacity:1!important}
  .card .card-img{transform:none!important}
  .btn::after{display:none}
}
@media (hover:none){.card .card-img{transform:none!important}}

/* ══ RESPONSIVE ══ */
@media (max-width:900px){
  .srv,.equipo{grid-template-columns:1fr;gap:30px}
  .notas{grid-template-columns:1fr}
  .form-grid{grid-template-columns:1fr;gap:38px}
  /* Tablet: se mantiene la composicion alternada, pero la fila entera
     baja de altura para que la ancha no domine tanto la pantalla. */
  .gal{--gap-gal:8px}
}
@media (max-width:620px){
  /* 🔴 En telefono la composicion alternada NO cabe: la cuadrada
     quedaria de 100px. La pareja se apila, primero la 01 y debajo la
     02, ambas en 3:2 — se mantiene el orden, que es lo que cuenta la
     obra. Se anulan las columnas del escritorio con !important porque
     las reglas de `data-lado` son mas especificas. */
  .gal{grid-template-columns:1fr;--gap-gal:8px}
  .ob[data-lado][data-pos]{grid-column:1 / -1!important;aspect-ratio:3/2}
  .dos{grid-template-columns:1fr}
  .cab-fila{flex-direction:column;gap:10px}
}

/* la palabra es indivisible: el salto cae entre palabras */
.viva .pal{display:inline-block;white-space:nowrap}

/* ══════════════════════════════════════════════════════
   HERO DE PÁGINA INTERIOR · banda de foto a ancho completo
   Del lenguaje de amasr: la imagen dice el rubro antes que
   el texto. Título abajo-izquierda, etiqueta debajo.
   ══════════════════════════════════════════════════════ */
.heroP{
  position:relative;min-height:clamp(320px,46vh,460px);
  display:flex;align-items:flex-end;overflow:hidden;background:var(--carbon);
}
.heroP-img{position:absolute;inset:0}
.heroP-img img{width:100%;height:100%;object-fit:cover}
.heroP::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(0,0,0,.46) 0%,rgba(0,0,0,.16) 38%,rgba(0,0,0,.66) 100%);
}
.heroP .wrap{position:relative;z-index:2;padding-block:clamp(30px,5vh,54px)}
.heroP h1{color:#fff}
.heroP .tag{color:rgba(255,255,255,.88);margin:14px 0 0}
.heroP .tag::before{color:#fff}
.heroP .lede{color:rgba(255,255,255,.9);margin-top:12px}

/* ══ BLOG · el orden de PuroPlano ══ */

/* filtros con contador, en píldora */
.cats{display:flex;gap:9px;flex-wrap:wrap;padding:clamp(26px,4vh,40px) 0 clamp(18px,3vh,30px)}
.cat-b{
  display:inline-flex;align-items:center;gap:9px;
  font-family:"DM Sans",sans-serif;font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;padding:10px 17px;border-radius:999px;
  background:#fff;border:1px solid var(--linea);cursor:pointer;color:var(--gris);
}
.cat-b .n{
  font-size:9.5px;letter-spacing:0;padding:2px 7px;border-radius:999px;
  background:var(--hueso);color:var(--gris);
}
.cat-b:hover{color:var(--tinta);border-color:var(--tinta)}
.cat-b.on{background:var(--tinta);color:#fff;border-color:var(--tinta)}
.cat-b.on .n{background:rgba(255,255,255,.2);color:#fff}
.cat-b:active{transform:scale(.96)}

/* la grilla: destacada a 2/3 arriba, el resto de a 3 */
.blogrid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(14px,1.8vw,26px)}
.art{
  display:flex;flex-direction:column;
  border:1px solid var(--linea);background:#fff;overflow:hidden;
}
.art figure{margin:0;overflow:hidden;aspect-ratio:16/10;background:var(--hueso)}
.art img{width:100%;height:100%;object-fit:cover;transition:transform 1.1s var(--e)}
.art:hover img{transform:scale(1.045)}
.art-txt{padding:clamp(16px,2vw,22px);display:flex;flex-direction:column;flex:1}
.art .meta{
  font-family:"DM Sans",sans-serif;font-size:9.5px;letter-spacing:.17em;
  text-transform:uppercase;color:var(--gris);
  display:flex;align-items:center;gap:10px;margin-bottom:11px;
}
.art .meta .c{color:var(--rojo)}
.art .meta .sep{width:1px;height:10px;background:var(--linea)}
.art h3{
  font-family:"Aboreto",serif;font-size:clamp(15.5px,1.5vw,19px);
  line-height:1.32;margin-bottom:10px;
}
.art p{font-size:13.5px;color:var(--gris);line-height:1.65;margin:0 0 16px}
.art .leer{
  margin-top:auto;font-family:"DM Sans",sans-serif;font-size:11px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--tinta);
  border-bottom:1px solid var(--tinta);align-self:flex-start;padding-bottom:3px;
  transition:color .3s var(--e),border-color .3s var(--e);
}
.art:hover .leer{color:var(--rojo);border-color:var(--rojo)}

/* destacada: ocupa 2 columnas y se parte en foto | texto */
.art--dest{grid-column:span 2;flex-direction:row}
.art--dest figure{flex:0 0 46%;aspect-ratio:auto}
.art--dest .art-txt{padding:clamp(22px,2.6vw,34px);justify-content:center}
.art--dest h3{font-size:clamp(19px,2.3vw,27px)}
.art--dest p{font-size:14.5px}
.art--dest .sello{
  position:absolute;top:14px;left:14px;z-index:3;
  font-family:"DM Sans",sans-serif;font-size:9.5px;letter-spacing:.18em;
  text-transform:uppercase;background:var(--tinta);color:#fff;padding:7px 13px;
}
.art--dest{position:relative}
.art[hidden]{display:none}

@media (max-width:980px){
  .blogrid{grid-template-columns:repeat(2,1fr)}
  .art--dest{grid-column:span 2}
}
@media (max-width:700px){
  .blogrid{grid-template-columns:1fr}
  .art--dest{grid-column:span 1;flex-direction:column}
  .art--dest figure{flex:none;aspect-ratio:16/10}
}

/* ══════════════════════════════════════════════════════
   MODELO 3D · visor de fondo + popup de acceso encima
   ══════════════════════════════════════════════════════ */
.visor{
  position:relative;height:calc(100svh - 74px);min-height:520px;
  overflow:hidden;background:var(--carbon);
}
.visor-fondo{position:absolute;inset:0}
.visor-fondo img,.visor-fondo iframe,.visor-fondo canvas{
  width:100%;height:100%;object-fit:cover;border:0;display:block;
}
.visor::after{
  content:"";position:absolute;inset:0;
  background:radial-gradient(ellipse at center,rgba(10,10,10,.28) 0%,rgba(10,10,10,.74) 100%);
}
/* leyenda abajo, para que el fondo se entienda como demostración */
.visor-pie{
  position:absolute;left:0;right:0;bottom:0;z-index:3;
  padding:0 var(--pad) clamp(20px,3vh,32px);color:#fff;
}
.visor-pie .tag{color:rgba(255,255,255,.82);margin:0}
.visor-pie .tag::before{color:#fff}

/* el popup */
.pop{
  position:absolute;inset:0;z-index:4;
  display:grid;place-items:center;padding:var(--pad);
}
.pop-caja{
  width:100%;max-width:412px;background:rgba(255,255,255,.97);
  backdrop-filter:blur(16px);padding:clamp(28px,4vh,40px);
  box-shadow:0 24px 70px rgba(0,0,0,.34);
  animation:popIn .6s var(--e) both;
}
@keyframes popIn{
  from{opacity:0;transform:translateY(16px) scale(.98)}
  to{opacity:1;transform:none}
}
.pop-caja h2{
  font-family:"Aboreto",serif;font-size:clamp(20px,2.4vw,27px);
  line-height:1.22;margin:10px 0 8px;
}
.pop-caja .sub{font-size:14px;color:var(--gris);margin:0 0 26px;line-height:1.6}
.pop-caja .btn{width:100%;text-align:center;justify-content:center}
.pop-pie{
  margin:20px 0 0;font-size:12.5px;color:var(--gris);line-height:1.7;text-align:center;
}
.pop-pie a{border-bottom:1px solid var(--linea)}
.pop-pie a:hover{color:var(--rojo);border-color:var(--rojo)}
@media (prefers-reduced-motion:reduce){.pop-caja{animation:none}}
@media (max-width:620px){
  .visor{height:auto;min-height:0}
  .visor-fondo{position:relative;height:42vh;min-height:250px}
  .pop{position:relative;inset:auto;padding:clamp(26px,5vh,40px) var(--pad)}
  .visor::after{display:none}
  .visor-pie{display:none}
  .pop-caja{box-shadow:none;border:1px solid var(--linea);background:#fff}
}

/* ══════════════════════════════════════════════════════
   BARRIDO DE ENTRADA DE LA GALERÍA
   Medido en amasr/villas: no es un fade ni un deslizamiento.
   Es un clip-path que se corre de izquierda a derecha, como
   una cortina que descubre la foto:
     inset(-1px 100% -100px -1px)  →  inset(-1px -1px -100px)
   Los -1px y -100px evitan que se vea el borde del recorte.
   Dentro de la fila los dos items entran ESCALONADOS, no
   juntos: el segundo arranca ~0,22s después del primero.
   ══════════════════════════════════════════════════════ */
/* 🔴 El clip-path va en la IMAGEN, no en el <a>.
   Recortar el propio .ob a cero de ancho lo deja sin área visible y
   el IntersectionObserver lo da por fuera de pantalla: nunca
   disparaba y las filas de abajo se quedaban sin barrer. El enlace
   conserva su caja; lo que se descubre es la foto de adentro. */
.ob img{
  clip-path:inset(-1px 100% -100px -1px);
  transform:scale(1.06);
  transition:clip-path 1.15s cubic-bezier(.33,.06,.16,1) var(--d,0s),
             transform 1.5s cubic-bezier(.22,.61,.36,1) var(--d,0s);
}
.ob.entro img{clip-path:inset(-1px -1px -100px);transform:scale(1)}
.ob.entro:hover img{transform:scale(1.04)}

@media (prefers-reduced-motion:reduce){
  .ob img{clip-path:none!important;transform:none!important;transition:none!important}
}

/* ══════════════════════════════════════════════════════
   INTRO DE BIENVENIDA
   Fondo oscuro + la animación del logo + "BIENVENIDO A".
   Al terminar, el fondo se disuelve y el logo de la animación
   queda EXACTAMENTE donde está el del hero: el logo no se
   mueve, se mueve todo lo demás.

   La medida sale del video (frame a los 4,0 s): el logo queda
   centrado al 50%/50% ocupando el 41% del ancho. Por eso el
   hero usa ese mismo ancho y centro, y el video se escala con
   el mismo criterio.
   ══════════════════════════════════════════════════════ */
.intro-v{
  position:fixed;inset:0;z-index:200;background:#000;
  display:grid;place-items:center;overflow:hidden;
}

/* 🔴 EL TAMAÑO LO MANDA EL LOGO DEL HERO, no el video.
   El logo ocupa el 41% del ancho del frame (medido en el fotograma
   de los 4,0 s). Para que en pantalla quede del mismo porte que
   .hero-mark —min(190px,34vw)— el video se dibuja a 190/0.41 =
   463px de ancho. Por eso NO va a pantalla completa con cover:
   va chico y centrado sobre el fondo negro. */
.intro-v video{
  width:min(463px, 83vw);
  height:auto;
  display:block;
  /* ⚠️ MEDIDO con el saludo oculto, que es la única forma de leer
     el logo solo: a 463px de ancho su centro cae en cy=500 y el del
     hero está en 450, así que se sube 1px. El factor es proporcional
     al ancho para que el calce se mantenga en cualquier pantalla. */
  transform:translateY(calc(min(463px, 83vw) * 0.0021));
  /* El negro del video no es exactamente #000 y se recorta contra el
     fondo. screen funde el cuadro: lo negro desaparece y solo queda
     el trazo blanco del logo. */
  mix-blend-mode:screen;
}

/* el cierre: el fondo se va, el logo se queda */
.intro-v.cierra{
  animation:introFuera .95s cubic-bezier(.4,0,.2,1) forwards;
}
@keyframes introFuera{
  to{opacity:0;visibility:hidden}
}

/* mientras la intro corre, el fondo no se puede scrollear */
body.intro-activa{overflow:hidden}

/* El logo del hero: SIN el movimiento de entrada cuando viene de la
   intro — tiene que parecer que ya estaba ahí. */
.hero-mark.fijo{animation:none;opacity:1;transform:translate(-50%,-50%)}

@media (prefers-reduced-motion:reduce){
  .intro-v{animation:none!important}
  .intro-v{display:none}
}

/* ══ PÁGINAS LEGALES ══
   Texto largo de lectura seria. Medida de línea acotada a 74ch: más
   ancho que eso y el ojo pierde el renglón al volver. */
.legal{max-width:74ch;margin:0 auto;font-size:16px;line-height:1.75;color:var(--tinta)}
.legal h2{
  font-family:"Aboreto",serif;font-size:clamp(18px,2.1vw,23px);
  font-weight:400;line-height:1.3;
  margin:clamp(34px,4.6vh,52px) 0 12px;
  padding-top:clamp(20px,2.6vh,28px);border-top:1px solid var(--linea);
}
.legal h2:first-of-type{border-top:0;padding-top:0;margin-top:clamp(18px,2.4vh,26px)}
.legal p{margin:0 0 15px;color:var(--gris)}
.legal p > em{
  font-family:"DM Sans",sans-serif;font-style:normal;
  font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--gris);
}
.legal strong{color:var(--tinta);font-weight:600}
.legal ul{margin:0 0 17px;padding-left:20px;color:var(--gris)}
.legal li{margin-bottom:9px}
.legal li::marker{color:var(--rojo)}
.legal a{color:var(--tinta);text-decoration:underline;text-underline-offset:3px}
.legal a:hover{color:var(--rojo)}

/* ══ TEXTO DE LA SECCIÓN "CCP ARQUITECTURA" EN MÓVIL ══
   🔴 La barra flotante de redes ocupa desde x=339 de 390. Achicar la
   tipografia NO sirve: al reflujar, la palabra que queda al final
   cambia y siempre hay alguna bajo la barra. Lo que corresponde es
   reservarle el carril: 54px de margen derecho al texto, y ninguna
   linea llega nunca a pisarla. */
@media (max-width:620px){
  .intro-txt .display,
  .intro-txt .lede{padding-right:54px}
}


/* ══ VISOR 3D EMBEBIDO EN LA PORTADA ══
   🔴 El visor manda en esta seccion: ocupa MEDIA PORTADA de alto
   (60vh, con techo de 620px) y se lleva la columna ancha de la grilla.
   Antes iba en 4:3 dentro de media columna y la casa salia diminuta:
   no se distinguian los materiales, que es justo lo que viene a
   mostrar.

   Sin borde, sin sombra, sin radio: el visor ya tiene fondo blanco y
   debe leerse como parte del papel de la pagina, no como una caja.
   Lo que parecia "el cuadrado" era el recorte del iframe cortando el
   modelo, no un borde: se arregla dandole aire, no quitando bordes. */
/* Se declaran las dos formas: `:has()` para el caso general y una
   clase propia como respaldo, porque `:has()` no existe en navegadores
   algo viejos y ahi la seccion volveria a 1fr 1fr. */
.intro-grid--visor,
.intro-grid:has(.intro-visor){grid-template-columns:0.85fr 1.15fr}
.intro-visor{
  position:relative;
  height:clamp(400px,60vh,620px);
  width:100%;
}
.intro-visor iframe{
  position:absolute;inset:0;width:100%;height:100%;
  border:0;display:block;background:transparent;
}

@media (max-width:900px){
  /* Apilado: el visor pasa a ancho completo y gana altura, porque ya
     no compite con el texto por el espacio horizontal. */
  .intro-grid--visor,
  .intro-grid:has(.intro-visor){grid-template-columns:1fr}
  .intro-visor{height:clamp(360px,52vh,520px)}
}
@media (max-width:620px){
  .intro-visor{height:min(66vh,440px)}
}

/* ══════════════════════════════════════════════════════════════
   FICHA DE OBRA  (obra-<slug>.html)
   🔴 TODO en una fila: nombre a la izquierda, datos a la derecha.
   🔴 La galeria es UNA sola seccion blanca — renders y planos juntos,
      en la misma grilla del resto del sitio (ancha + cuadrada,
      alternando), dentro del .wrap con su margen a los costados.
   Dos intentos anteriores fallaron: uno invento dos columnas con la
   memoria al lado, otro separo los planos en su propia banda. Esto
   replica la referencia y el lenguaje que ya tiene el sitio.
   ══════════════════════════════════════════════════════════════ */
.obra-cab{padding:clamp(96px,13vh,150px) 0 clamp(14px,2vh,22px)}
/* 🔴 La galeria arranca pegada a la cabecera: entre la memoria cerrada
   y la primera foto habia 117px de blanco (36 del cierre de cabecera +
   81 del padding de seccion) y la pagina se leia rota en dos. */
.obra-cab + .seccion{padding-top:clamp(20px,3vh,34px)}

.obra-tit{
  display:flex;align-items:baseline;justify-content:space-between;
  gap:clamp(12px,2.4vw,32px);flex-wrap:wrap;
  padding-bottom:clamp(13px,1.8vh,18px);
}
.obra-tit h1{margin:0;font-size:clamp(24px,3.2vw,42px);line-height:1.1}

.obra-datos{
  display:flex;flex-wrap:wrap;align-items:center;
  font-family:"DM Sans",sans-serif;font-size:11px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gris);margin:0;
}
.obra-datos > span{
  display:inline-flex;align-items:center;gap:5px;
  padding:0 clamp(8px,1vw,13px);white-space:nowrap;
}
.obra-datos > span + span{border-left:1px solid var(--linea)}

/* 🔴 12px: el icono acompaña al texto, no lo reemplaza. A 21px eran
   bloques y a 14 seguian pesando mas que el dato. Se alinean con la
   mayuscula, no con la linea base. */
.obra-datos .esp svg{
  width:12px;height:12px;flex:0 0 12px;
  fill:var(--rojo);position:relative;top:-.5px;
}

/* ── Memoria desplegable ── */
.memoria{border-top:1px solid var(--linea);padding-top:clamp(13px,1.8vh,17px)}
.memoria summary{
  list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:9px;
  font-family:"DM Sans",sans-serif;font-size:10.5px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--gris);transition:color .2s var(--e);
}
.memoria summary::-webkit-details-marker{display:none}
.memoria summary::before{content:"→";color:var(--rojo);font-size:12px;line-height:1}
.memoria[open] summary::before{content:"—"}
.memoria summary:hover{color:var(--tinta)}

.memoria-txt{padding:clamp(16px,2.2vh,22px) 0 0;max-width:76ch}
.memoria-txt p{margin:0 0 14px;color:var(--gris);line-height:1.85;font-size:15px}
.memoria-txt p:first-child{color:var(--tinta)}

@media (max-width:620px){
  .obra-tit{flex-direction:column;align-items:flex-start;gap:11px}
  /* La fila se reparte en varias lineas: la primera de cada una no
     debe arrastrar el separador. */
  .obra-datos > span{padding:0 9px 0 0}
  .obra-datos > span + span{padding-left:9px}
  .memoria-txt p{font-size:14.5px}
}

/* ── Las tarjetas de servicio, en VIDEO ──
   🔴 La caja se adapta al VIDEO, no al reves (Claudio, 21-09-2026).
   Las animaciones son 16:9 y la tarjeta era 3:4 vertical: con
   `object-fit:cover` se recortaba el 60% de la animacion y la
   seccion se rompia. Medido: caja 367x489 (0.75) contra video
   1280x720 (1.78).

   Los videos van sobre FONDO BLANCO, lineas negras y grises con
   acentos dorados, para que se fundan con la pagina en vez de ser
   tres bloques oscuros. */
/* 🔴 23-09-2026 · Se quitaron las reglas de los videos: la seccion
   "Que hacemos" volvio a IMAGENES 3/4 en blanco y negro (Claudio).
   Solo queda el titulo que reacciona en rojo junto con la imagen. */
.card h3{transition:color .28s var(--e)}
.card:hover h3{color:var(--rojo)}



/* ── El modelo 3D al entrar a una obra (22-09-2026) ──
   🔴 Claudio: al abrir una ficha lo PRIMERO es el modelo. Los planos
   ya no se publican (se recrean con IA); el visor se mira y no se
   descarga. Es el mismo visor de la portada con ?modelo=.
   Va a ancho de .wrap y en 16:9, que es el encuadre con que el visor
   fija su camara; en telefono se estira a 4:3 para que la casa no
   quede como una franja. */
.obra-visor-sec{padding:0 0 clamp(20px,3vh,34px)}
.obra-visor{
  position:relative;aspect-ratio:16/9;width:100%;
  background:var(--hueso,#f4f2ef);overflow:hidden;
}
.obra-visor iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}
@media (max-width:760px){ .obra-visor{aspect-ratio:4/3} }


/* ═══ "QUÉ HACEMOS": la seccion de las 3 imagenes (23-09-2026) ═══
   🔴 El traslape con "Ves tu casa antes de que exista" tenia DOS
   causas encadenadas:
   1. `.serv` no tenia padding superior (con los videos, bajos, no se
      notaba; con las imagenes 3/4 si).
   2. La fila de la grilla se fijaba en 270px —la suma del texto— sin
      contar la imagen: los hijos median 420+37+25=482 y la caja 270,
      asi que todo se desbordaba encima de la seccion siguiente.
      Medido con getComputedStyle, no a ojo.
   La cura: FLEX en vez de grid. Flex mide el alto real de sus hijos;
   la grilla, con la imagen en position:relative, no lo hacia. */
.serv{padding-top:clamp(72px,11vh,132px)}

.serv-grid{
  display:flex;
  gap:clamp(14px,2vw,26px);
  align-items:flex-start;
}
.serv-grid > .card{
  flex:1 1 0;
  min-width:0;          /* sin esto, flex no deja encoger y se desborda */
  display:block;
  height:auto;
}
.card .card-img{
  width:100%;
  height:clamp(300px,30vw,430px);   /* 3/4 sobre el ancho de columna */
  aspect-ratio:auto;
  padding-top:0;
  position:relative;
  overflow:hidden;
}
.card .card-img img{
  position:absolute;inset:0;
  width:100%;height:100%;object-fit:cover;
}

@media (max-width:860px){
  .serv-grid{flex-direction:column}
  .card .card-img{height:clamp(260px,52vw,380px)}
}


/* ═══════════════════════════════════════════════════════════════
   CUERPO DE ARTICULO DEL BLOG  (movido aca el 23-09-2026)
   Vivia en el <head> de cada .html del v2. Al pasar el blog a
   WordPress ese <style> se perdio y las notas salieron sin
   margenes y con los CTA-pregunta como texto plano.
   Ahora vive en el sistema: sirve a TODAS las notas, las que hay
   y las que vengan.
   ═══════════════════════════════════════════════════════════════ */
/* ── Cuerpo de artículo. Vive sobre base.css + sistema.css:
     no redefine tokens, tipografías ni header. ── */
/* El encuadre del hero sube 200px: la mesa con el plano y la tablet
   son el asunto, y centrada quedaba baja. Solo para esta nota. */
/* (23-09) Acotado a la nota de Revit: global, cortaba el hero de las demás. */
.postid-2331 .heroP-img img{object-position:center calc(50% - 200px)}
/* (23-09) Gemelo digital: FRANJA CLARA. La imagen (modelo federado, 940 px)
   no alcanza para estirarse a todo el ancho: con object-fit:cover se amplía
   2-3x y se pixela. Acá se muestra ENTERA sobre blanco, a la derecha, y solo
   se ACHICA (contain). El título pasa a tinta, a la izquierda.
   Regla general: una imagen de hero se estira solo si mide >= 1920 px. */
.postid-2332 .heroP{background:#fff;min-height:clamp(380px,56vh,540px);border-bottom:1px solid var(--linea)}
.postid-2332 .heroP::after{display:none}
.postid-2332 .heroP-img{left:auto;right:var(--pad);top:84px;bottom:20px;width:min(56%,860px)}
.postid-2332 .heroP-img img{object-fit:contain;object-position:right center}
.postid-2332 .heroP h1{color:var(--tinta);max-width:min(44%,560px)}
.postid-2332 .heroP .tag{color:var(--gris)}
.postid-2332 .heroP .tag::before{color:var(--rojo)}
@media (max-width:760px){
  .postid-2332 .heroP{display:block;min-height:0;padding-top:66px}
  .postid-2332 .heroP-img{position:relative;inset:auto;width:auto;height:auto;margin:14px var(--pad) 0}
  .postid-2332 .heroP-img img{height:auto;max-width:100%}
  .postid-2332 .heroP h1{max-width:none}
}
/* El titulo cae sobre el plano: se refuerza el velo en la franja baja
   para que el blanco sobre dibujo claro siga legible. */
.heroP::after{background:linear-gradient(180deg,rgba(0,0,0,.34) 0%,rgba(0,0,0,.20) 34%,rgba(0,0,0,.72) 100%)}
.art-wrap{max-width:720px;margin:0 auto;padding-inline:var(--pad)}
.nota-meta{
  font-family:"DM Sans",sans-serif;font-size:10.5px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gris);
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  padding-bottom:26px;border-bottom:1px solid var(--linea);margin-bottom:34px;
}
.nota-meta .c{color:var(--rojo)}
.nota-meta .sep{width:1px;height:10px;background:var(--linea)}
.cuerpo p{font-size:16.5px;line-height:1.8;margin:0 0 1.15em}
.cuerpo h2{
  font-family:"Aboreto",serif;font-size:clamp(21px,2.5vw,29px);
  line-height:1.28;margin:clamp(42px,6vh,64px) 0 18px;
}
.cuerpo strong{font-weight:600;color:var(--tinta)}
.entrada{
  font-size:clamp(16px,1.6vw,18.5px);line-height:1.75;color:var(--gris);
  border-left:2px solid var(--rojo);padding-left:22px;margin:0 0 38px;
}
/* ══ CTA-PREGUNTA ══  (rediseño 23-09-2026)
   Claudio: "no tiene fuerza, es como parte del texto y si no pasas el
   cursor no se nota que es interactivo". La pregunta es el CTA del tramo
   y SIEMPRE lleva a algún lado (sección, formulario o WhatsApp).
   Se mantiene el idioma del sitio —líneas, no cajas de color— pero ahora
   se anuncia en reposo: número de tramo, ícono del destino, botón de
   contorno con flecha. Al pasar el mouse: una regla
   roja barre de izquierda a derecha, el bloque avanza, la flecha corre,
   y el botón se invierte.
   (El "?" de fondo se sacó el 23-09: se superponía a las frases.) */
.diag{
  position:relative;display:block;overflow:hidden;
  margin:clamp(44px,6vh,68px) 0;padding:30px 26px 30px 26px;
  border-top:1px solid var(--tinta);border-bottom:1px solid var(--linea);
  border-left:3px solid var(--rojo);
  transition:padding-left .35s var(--e),background .35s var(--e);
}
.diag:has(.dn){padding-left:clamp(76px,11%,104px)}
.diag::after{
  content:"";position:absolute;left:0;bottom:-1px;height:2px;width:0;
  background:var(--rojo);transition:width .6s var(--e);
}
a.diag:hover{background:linear-gradient(90deg,rgba(227,6,19,.035),transparent 70%)}
a.diag:hover::after{width:100%}
a.diag:hover:has(.dn){padding-left:clamp(82px,12%,112px)}
.diag .dn{
  position:absolute;left:26px;top:26px;
  font-family:"Aboreto",serif;font-size:clamp(30px,3.6vw,44px);line-height:1;color:var(--rojo);
}
.diag .et{
  display:flex;align-items:center;gap:8px;
  font-family:"DM Sans",sans-serif;font-size:10px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--rojo);margin-bottom:12px;position:relative;
}
.diag .et svg{width:13px;height:13px;flex:0 0 13px;stroke:currentColor;fill:none;stroke-width:1.6}
.diag p{
  position:relative;font-family:"Aboreto",serif;font-size:clamp(18px,2.3vw,25px);
  line-height:1.38;margin:0;color:var(--tinta);transition:color .3s var(--e);
}
a.diag:hover p{color:var(--rojo)}
.diag .ir{
  position:relative;display:inline-flex;align-items:center;gap:12px;margin-top:20px;
  padding:12px 18px 12px 20px;border:1px solid var(--tinta);
  font-family:"DM Sans",sans-serif;font-size:11.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--tinta);background:#fff;
  transition:background .3s var(--e),color .3s var(--e),border-color .3s var(--e);
}
.diag .ir i{font-style:normal;display:inline-block;transition:transform .35s var(--e)}
a.diag:hover .ir{background:var(--tinta);color:#fff}
a.diag:hover .ir i{transform:translateX(6px)}
a.diag:hover .ir i.baja{transform:translateY(4px)}
a.diag:focus-visible{outline:2px solid var(--rojo);outline-offset:4px}
@media (max-width:760px){
  .diag{padding:26px 20px 26px 20px}
  .diag:has(.dn),a.diag:hover:has(.dn){padding-left:20px}
  .diag .dn{position:static;display:block;font-size:30px;margin-bottom:10px}
    }
/* En pantallas táctiles no hay "hover": el botón se muestra ya invertido
   para que se note que es un botón. */
@media (hover:none){ .diag .ir{background:var(--tinta);color:#fff} }

/* ══ AUTOEVALUACIÓN · los 6 frentes del diagnóstico de CCP ══ */
.test{border:1px solid var(--tinta);margin:clamp(40px,6vh,64px) 0;padding:clamp(24px,3.4vw,38px)}
.test .et{
  font-family:"DM Sans",sans-serif;font-size:10px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--rojo);display:block;margin-bottom:10px;
}
.test h3{font-family:"Aboreto",serif;font-size:clamp(19px,2.3vw,26px);line-height:1.3;margin:0 0 8px}
.test .sub{font-size:14.5px;color:var(--gris);margin:0 0 24px;line-height:1.7}
/* Opciones en VERTICAL (Claudio, 23-09-2026): en fila sobrepasaban el marco
   del recuadro cuando las respuestas son frases. Se leen como radios. */
.tq{border-top:1px solid var(--linea);padding:18px 0}
.tq .tt{font-size:14.5px;line-height:1.55;margin:0 0 12px}
.tq .tt b{font-family:"DM Sans",sans-serif;font-size:10px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--gris);display:block;margin-bottom:5px;font-weight:400}
.ops{display:flex;flex-direction:column;gap:6px;max-width:100%}
.op{
  position:relative;width:100%;text-align:left;
  font-family:"Nunito Sans",sans-serif;font-size:14px;line-height:1.4;
  padding:11px 16px 11px 44px;border:1px solid var(--linea);
  background:#fff;color:var(--gris);cursor:pointer;
  transition:border-color .2s var(--e),color .2s var(--e),background .2s var(--e);
}
.op::before{
  content:"";position:absolute;left:16px;top:50%;width:13px;height:13px;
  border:1px solid var(--gris);border-radius:50%;transform:translateY(-50%);
  transition:all .2s var(--e);
}
.op:hover{border-color:var(--tinta);color:var(--tinta)}
.op:hover::before{border-color:var(--tinta)}
.op.on{background:var(--tinta);border-color:var(--tinta);color:#fff}
.op.on::before{border-color:#fff;background:var(--rojo);box-shadow:inset 0 0 0 2px var(--tinta)}
.op:active{transform:scale(.99)}
.op:focus-visible{outline:2px solid var(--rojo);outline-offset:2px}
.res{margin-top:26px;padding-top:24px;border-top:1px solid var(--tinta)}
.res[hidden]{display:none}
.res .nivel{font-family:"Aboreto",serif;font-size:clamp(22px,3vw,32px);line-height:1.2;margin:0 0 6px}
.res .nk{font-family:"DM Sans",sans-serif;font-size:10.5px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--rojo);display:block;margin-bottom:12px}
.res .rd{font-size:15px;color:var(--gris);line-height:1.75;margin:0 0 18px}
.esc{display:grid;grid-template-columns:repeat(4,1fr);gap:3px;margin:20px 0 22px}
.ei{border-top:3px solid var(--linea);padding-top:10px;transition:border-color .3s var(--e)}
.ei .en{font-family:"DM Sans",sans-serif;font-size:9.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--gris);display:block}
.ei.aqui{border-top-color:var(--rojo)}
.ei.aqui .en{color:var(--rojo)}
.res .pend{margin:0 0 20px;padding-left:20px;font-size:14.5px;color:var(--gris);line-height:1.7}
.res .pend li{margin-bottom:7px}
.res .pend li::marker{color:var(--rojo)}
/* Cifras: tres columnas con línea superior, igual que .srv-i */
.datos{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(16px,2.4vw,34px);margin:34px 0}
.dato{padding-top:20px;border-top:1px solid var(--tinta)}
.dato .n{font-family:"Aboreto",serif;font-size:clamp(28px,3.6vw,42px);line-height:1;display:block;margin-bottom:10px}
.dato .n.ac{color:var(--rojo)}
.dato .d{font-family:"DM Sans",sans-serif;font-size:11.5px;letter-spacing:.06em;color:var(--gris);line-height:1.5}
/* Barras de la encuesta */
.barras{margin:34px 0}
.bf{margin-bottom:20px}
.bf-et{
  display:flex;justify-content:space-between;align-items:baseline;gap:16px;
  font-family:"DM Sans",sans-serif;font-size:12.5px;letter-spacing:.04em;margin-bottom:8px;
}
.bf-et .v{font-family:"Aboreto",serif;font-size:17px}
.bf-p{height:3px;background:var(--linea);position:relative}
.bf-r{position:absolute;inset:0 auto 0 0;background:var(--tinta)}
.bf-r.ac{background:var(--rojo)}
.bf-n{font-size:12.5px;color:var(--gris);margin-top:8px;line-height:1.5}
/* Tabla comparativa (rediseño 23-09-2026). Claudio: "somos personas y
   necesitamos guías para leer: tipo Excel pero elegante, sutil, para una
   página de arquitectura". Grilla fina, encabezado en hueso, filas
   alternadas casi imperceptibles, primera columna como rótulo (fija al
   desplazar en móvil), fila resaltada bajo el mouse, y la columna que el
   artículo quiere destacar con un filete rojo arriba (th.ac). */
.tabla-wrap{overflow-x:auto;margin:34px 0;max-width:100%;border:1px solid var(--linea);
  -webkit-overflow-scrolling:touch}
.comp{width:100%;min-width:560px;border-collapse:separate;border-spacing:0;font-size:14.5px}
.comp th{
  background:var(--hueso);color:var(--tinta);
  font-family:"DM Sans",sans-serif;font-size:10px;letter-spacing:.2em;
  text-transform:uppercase;font-weight:500;text-align:left;
  padding:14px 18px;border-bottom:1px solid var(--tinta);border-right:1px solid var(--linea);
}
.comp th.ac{box-shadow:inset 0 2px 0 var(--rojo);color:var(--rojo)}
.comp td{
  padding:15px 18px;border-bottom:1px solid var(--linea);border-right:1px solid var(--linea);
  vertical-align:top;line-height:1.6;background:#fff;transition:background .2s var(--e);
}
.comp th:last-child,.comp td:last-child{border-right:0}
.comp tr:last-child td{border-bottom:0}
.comp tr:nth-child(odd) td{background:#FCFBF9}
.comp td:first-child{
  font-family:"DM Sans",sans-serif;font-size:12.5px;letter-spacing:.03em;
  color:var(--tinta);background:#FAF8F4;width:26%;
}
.comp th:first-child,.comp td:first-child{position:sticky;left:0;z-index:1}
.comp tr:hover td{background:#F5F0E9}
.comp tr:hover td:first-child{box-shadow:inset 2px 0 0 var(--rojo)}
.comp .a{color:var(--gris)}
.comp .b{color:var(--tinta)}
.tabla-nota{font-family:"DM Sans",sans-serif;font-size:11px;letter-spacing:.06em;color:var(--gris);margin:-24px 0 34px}
/* Pasos numerados */
.pasos{margin:34px 0;counter-reset:p}
.paso{display:flex;gap:20px;padding:22px 0;border-bottom:1px solid var(--linea)}
.paso:first-child{border-top:1px solid var(--linea)}
.paso .np{
  font-family:"DM Sans",sans-serif;font-size:11px;letter-spacing:.16em;
  color:var(--rojo);flex:0 0 32px;padding-top:4px;
}
.paso h3{font-family:"Aboreto",serif;font-size:clamp(16px,1.8vw,20px);line-height:1.3;margin:0 0 8px}
.paso p{font-size:14.5px;color:var(--gris);line-height:1.7;margin:0}
/* Apunte al margen */
.apunte{border-left:2px solid var(--linea);padding-left:22px;margin:34px 0}
.apunte .et{
  font-family:"DM Sans",sans-serif;font-size:10px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--gris);display:block;margin-bottom:10px;
}
.apunte p{font-size:15px;line-height:1.75;margin:0}
/* Cierre */
.cierre{border-top:1px solid var(--tinta);margin-top:clamp(48px,7vh,76px);padding-top:clamp(32px,4.5vh,48px)}
.cierre h2{font-family:"Aboreto",serif;font-size:clamp(20px,2.4vw,28px);line-height:1.3;margin:0 0 14px}
.cierre p{font-size:15.5px;color:var(--gris);line-height:1.75;max-width:54ch}
.cierre .acciones{display:flex;gap:26px;flex-wrap:wrap;margin-top:24px}
.fuentes{
  margin-top:clamp(44px,6vh,68px);padding-top:24px;border-top:1px solid var(--linea);
  font-size:13px;color:var(--gris);line-height:1.75;
}
.fuentes .et{
  font-family:"DM Sans",sans-serif;font-size:10px;letter-spacing:.22em;
  text-transform:uppercase;display:block;margin-bottom:12px;color:var(--tinta);
}
@media (max-width:760px){
  .datos{grid-template-columns:1fr;gap:0}
  .dato{padding:18px 0;border-top:1px solid var(--linea)}
  .dato:first-child{border-top:1px solid var(--tinta)}
}

/* ══ VIDEO CON CAPÍTULOS + CITAS (23-09-2026) ══
   Un video de dos horas no se mira entero: se ofrece por capítulos y cada
   botón salta al minuto exacto. Las citas llevan su minuto y abren ahí. */
.video{margin:clamp(40px,6vh,64px) 0;padding-top:24px;border-top:1px solid var(--tinta)}
.video .et{font-family:"DM Sans",sans-serif;font-size:10px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--rojo);display:block;margin-bottom:10px}
.video h3{font-family:"Aboreto",serif;font-size:clamp(19px,2.3vw,26px);line-height:1.3;margin:0 0 8px}
.video .sub{font-size:14.5px;color:var(--gris);line-height:1.7;margin:0 0 20px}
.video .marco{position:relative;width:100%;height:0;padding-bottom:56.25%;background:var(--neg)}
.video .marco iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.caps{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border-left:1px solid var(--linea)}
.cap{
  display:flex;gap:14px;align-items:baseline;text-align:left;width:100%;
  padding:13px 16px;border:0;border-right:1px solid var(--linea);border-bottom:1px solid var(--linea);
  background:#fff;cursor:pointer;font-family:"Nunito Sans",sans-serif;font-size:13.5px;line-height:1.45;
  color:var(--tinta);transition:background .2s var(--e),color .2s var(--e);
}
.cap .t{font-family:"DM Sans",sans-serif;font-size:11px;letter-spacing:.1em;color:var(--rojo);flex:0 0 52px}
.cap:hover{background:var(--hueso)}
.cap.on{background:var(--tinta);color:#fff}
.cap.on .t{color:#fff}
.cap:focus-visible{outline:2px solid var(--rojo);outline-offset:-2px}
.video .panel{font-family:"DM Sans",sans-serif;font-size:11px;letter-spacing:.08em;color:var(--gris);margin:14px 0 0;line-height:1.7}
.cita{position:relative;margin:30px 0;padding:4px 0 4px 26px;border-left:2px solid var(--rojo)}
.cita blockquote{margin:0;font-family:"Aboreto",serif;font-size:clamp(17px,2vw,21px);line-height:1.45;color:var(--tinta)}
.cita .quien{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:12px;
  font-family:"DM Sans",sans-serif;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--gris)}
.cita .quien button{font:inherit;letter-spacing:inherit;text-transform:inherit;color:var(--rojo);
  background:none;border:0;border-bottom:1px solid currentColor;padding:0 0 2px;cursor:pointer}
.cita .quien button:hover{color:var(--tinta)}
@media (max-width:760px){ .caps{grid-template-columns:1fr} }

/* El cierre de la nota también es CTA: botones de contorno con flecha,
   el principal ya invertido. Mismo lenguaje que .diag .ir. */
.cierre .acciones .bt{
  display:inline-flex;align-items:center;gap:12px;padding:13px 20px;border:1px solid var(--tinta);
  font-family:"DM Sans",sans-serif;font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--tinta);background:#fff;transition:background .3s var(--e),color .3s var(--e),border-color .3s var(--e);
}
.cierre .acciones .bt i{font-style:normal;transition:transform .35s var(--e)}
.cierre .acciones .bt.pri{background:var(--tinta);color:#fff}
.cierre .acciones .bt:hover{background:var(--rojo);border-color:var(--rojo);color:#fff}
.cierre .acciones .bt:hover i{transform:translateX(6px)}
.cita .quien a{color:var(--rojo);border-bottom:1px solid currentColor;padding-bottom:2px}
.video{scroll-margin-top:96px}

/* La tabla de 560px vive en su propio scroll: la página NO debe arrastrarse
   en móvil. overflow-x del body no alcanza (el <html> sigue desplazándose);
   clip no rompe los position:sticky, a diferencia de hidden. */
html{overflow-x:clip}

/* ══ TESTIMONIOS · PORTADA (23-09-2026) ══
   Solo videos, entre Obras y Qué hacemos. La mecánica es la del carrusel
   de PuroPlano (Swiper coverflow + miniaturas); la gráfica es la de CCP:
   banda oscura, esquinas rectas, líneas finas y el rojo como único acento.
   Al ancho de las secciones (.wrap), como Obras (Claudio, 23-09). */
.testi{background:var(--neg);color:#fff;padding:clamp(72px,11vh,132px) 0}
.testi .tag{color:rgba(255,255,255,.62)}
.testi .display{color:#fff;margin-bottom:clamp(28px,4vh,44px)}
.testi-ancho{overflow:hidden} /* al ancho de las secciones (.wrap), como Obras: da aire y no estira las miniaturas de YouTube */
.testi-player{width:100%;padding-bottom:6px}
.testi-slide{position:relative;aspect-ratio:16/9;overflow:hidden;background:#000}
.testi-slide>img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s var(--e),filter .6s var(--e)}
.testi-slide:not(.swiper-slide-active)>img{filter:grayscale(1) brightness(.55)}
.testi-slide.swiper-slide-active:hover>img{transform:scale(1.03)}
.testi-slide::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(to top,rgba(20,20,20,.82) 0%,rgba(20,20,20,0) 42%)}
.testi-pie{position:absolute;left:clamp(16px,2.4vw,32px);right:clamp(16px,2.4vw,32px);bottom:clamp(14px,2.2vw,28px);
  z-index:2;display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;pointer-events:none}
.testi-pie .n{font-family:"DM Sans",sans-serif;font-size:11px;letter-spacing:.2em;color:var(--rojo)}
.testi-pie .nom{font-family:"Aboreto",serif;font-size:clamp(16px,2vw,24px);line-height:1.2}
.testi-pie .cat{font-family:"DM Sans",sans-serif;font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;
  color:rgba(255,255,255,.7);padding-left:14px;border-left:1px solid rgba(255,255,255,.35)}
.testi-play{position:absolute;top:50%;left:50%;z-index:3;transform:translate(-50%,-50%);
  width:clamp(58px,6vw,82px);height:clamp(58px,6vw,82px);border-radius:50%;
  border:1px solid rgba(255,255,255,.85);background:rgba(20,20,20,.28);
  display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;
  transition:background .3s var(--e),border-color .3s var(--e),transform .3s var(--e)}
.testi-play svg{width:34%;height:34%;margin-left:6%;fill:#fff;pointer-events:none}
.testi-play::before{content:"";position:absolute;inset:-9px;border-radius:50%;border:1px solid rgba(255,255,255,.28);
  transition:inset .4s var(--e),opacity .4s var(--e)}
.testi-slide:hover .testi-play,.testi-play:focus-visible{background:var(--rojo);border-color:var(--rojo);transform:translate(-50%,-50%) scale(1.06)}
.testi-slide:hover .testi-play::before{inset:-16px;opacity:0}
.testi-play:focus-visible{outline:2px solid #fff;outline-offset:4px}
.testi-slide:not(.swiper-slide-active) .testi-play,
.testi-slide:not(.swiper-slide-active) .testi-pie{opacity:0}
.testi-play,.testi-pie{transition:opacity .4s var(--e),background .3s var(--e),border-color .3s var(--e),transform .3s var(--e)}
.testi-frame{position:absolute;inset:0;z-index:4;background:#000}
.testi-frame iframe{width:100%;height:100%;border:0;display:block}
.testi-flecha{position:absolute;top:50%;z-index:5;transform:translateY(-50%);
  width:52px;height:52px;border:1px solid rgba(255,255,255,.5);background:rgba(20,20,20,.35);
  display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;
  transition:background .3s var(--e),border-color .3s var(--e)}
.testi-flecha svg{width:20px;height:20px;fill:none;stroke:#fff;stroke-width:1.4}
.testi-flecha:hover{background:var(--rojo);border-color:var(--rojo)}
.testi-flecha:focus-visible{outline:2px solid #fff;outline-offset:3px}
.testi-flecha.prev{left:clamp(8px,2vw,28px)}
.testi-flecha.next{right:clamp(8px,2vw,28px)}
.testi-thumbs{width:100%;margin-top:clamp(18px,2.6vh,28px)}
.testi-thumbs .swiper-wrapper{display:grid!important;grid-template-columns:repeat(7,minmax(0,1fr));gap:12px;transform:none!important;width:100%!important}
.testi-thumbs .swiper-slide{width:100%!important;height:auto!important;cursor:pointer;opacity:.45;
  padding-bottom:10px;border-bottom:1px solid rgba(255,255,255,.18);
  transition:opacity .3s var(--e),border-color .3s var(--e)}
.testi-thumbs .swiper-slide img{width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;filter:grayscale(1);transition:filter .4s var(--e)}
.testi-thumbs .swiper-slide span{display:block;margin-top:9px;font-family:"DM Sans",sans-serif;font-size:10.5px;
  letter-spacing:.14em;text-transform:uppercase;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.testi-thumbs .swiper-slide:hover{opacity:.8}
.testi-thumbs .swiper-slide:hover img{filter:none}
.testi-thumbs .swiper-slide-thumb-active{opacity:1;border-bottom:2px solid var(--rojo)}
.testi-thumbs .swiper-slide-thumb-active img{filter:none}
@media (max-width:760px){
  .testi-flecha{display:none} /* en táctil se desliza con el dedo; la barra de redes flotante tapaba la derecha */
  .testi-thumbs .swiper-wrapper{display:flex!important;gap:0;overflow-x:auto;scrollbar-width:none}
  .testi-thumbs .swiper-wrapper::-webkit-scrollbar{display:none}
  .testi-thumbs .swiper-slide{flex:0 0 150px;width:150px!important;margin-right:10px}
  .testi-pie .cat{display:none}
}
@media (hover:none){ .testi-slide.swiper-slide-active:hover>img{transform:none} }

/* ══ FICHA DE OBRA · lo que se sumó el 23-09-2026 ══
   Claudio: Bariloche es la página tipo; cada obra se compone igual.
   Se agregó SIN cambiar el orden ni el lenguaje del molde:
   · la ficha del expediente dentro de la memoria (dato duro),
   · las láminas SIN COTAS en el marco del visor cuando no hay FBX,
   · la voz del propietario cuando existe su video,
   · el paso a la obra anterior y siguiente. */
.obra-ficha{display:flex;flex-wrap:wrap;margin:22px 0 4px;border-top:1px solid var(--linea)}
.obra-ficha > div{padding:13px clamp(14px,2vw,26px) 0 0;margin-right:clamp(14px,2vw,26px)}
.obra-ficha > div + div{padding-left:clamp(14px,2vw,26px);border-left:1px solid var(--linea)}
.obra-ficha dt{font-family:"DM Sans",sans-serif;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--gris);margin:0 0 4px}
.obra-ficha dd{margin:0;font-size:14.5px;color:var(--tinta)}

/* Láminas: el mismo marco del visor, papel blanco, dibujo entero. */
.obra-lams{background:#fff;border:1px solid var(--linea)}
.obra-lams .lam{position:absolute;inset:0;margin:0;padding:clamp(14px,2.4vw,34px) clamp(14px,2.4vw,34px) 64px;
  opacity:0;visibility:hidden;transition:opacity .45s var(--e),visibility 0s linear .45s}
.obra-lams .lam.on{opacity:1;visibility:visible;transition:opacity .45s var(--e)}
.obra-lams .lam img{width:100%;height:100%;object-fit:contain}
.lam-rot{position:absolute;left:clamp(12px,1.6vw,20px);bottom:18px;margin:0;
  font-family:"DM Sans",sans-serif;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--gris)}
.lam-rot::before{content:"• ";color:var(--rojo)}
.lam-tabs{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);display:flex;
  border:1px solid var(--linea);background:#fff}
.lam-tabs button{font-family:"DM Sans",sans-serif;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gris);background:none;border:0;padding:9px 16px;cursor:pointer;transition:color .2s var(--e),background .2s var(--e)}
.lam-tabs button + button{border-left:1px solid var(--linea)}
.lam-tabs button:hover{color:var(--tinta)}
.lam-tabs button.on{background:var(--tinta);color:#fff}
.lam-tabs button:focus-visible{outline:2px solid var(--rojo);outline-offset:-2px}
@media (max-width:760px){
  .obra-lams .lam{padding:10px 10px 88px}
  .lam-rot{bottom:62px;left:12px}
  .lam-tabs{left:12px;right:12px;transform:none;bottom:12px}
  .lam-tabs button{flex:1;padding:9px 6px;font-size:9.5px;letter-spacing:.1em}
}

/* La voz del propietario: texto a la izquierda, video a la derecha. */
.obra-voz{padding:clamp(56px,9vh,104px) 0;background:var(--hueso)}
.obra-voz-in{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.7fr);gap:clamp(24px,4vw,64px);align-items:center}
.obra-voz .display{font-size:clamp(24px,3vw,38px);margin:0 0 14px}
.obra-voz-vid{position:relative;aspect-ratio:16/9;background:#000;overflow:hidden}
.obra-voz-vid img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s var(--e)}
.obra-voz-vid:hover img{transform:scale(1.03)}
.obra-voz-vid iframe{position:absolute;inset:0;width:100%;height:100%;border:0;z-index:3}
.obra-voz-play{position:absolute;top:50%;left:50%;z-index:2;transform:translate(-50%,-50%);
  width:clamp(58px,6vw,78px);height:clamp(58px,6vw,78px);border-radius:50%;padding:0;cursor:pointer;
  border:1px solid rgba(255,255,255,.85);background:rgba(20,20,20,.28);display:flex;align-items:center;justify-content:center;
  transition:background .3s var(--e),border-color .3s var(--e),transform .3s var(--e)}
.obra-voz-play svg{width:34%;height:34%;margin-left:6%;fill:#fff}
.obra-voz-vid:hover .obra-voz-play,.obra-voz-play:focus-visible{background:var(--rojo);border-color:var(--rojo);transform:translate(-50%,-50%) scale(1.06)}
@media (max-width:760px){ .obra-voz-in{grid-template-columns:1fr} }

/* Anterior / siguiente: una línea fina, los nombres en Aboreto. */
.obra-nav{border-top:1px solid var(--linea);border-bottom:1px solid var(--linea)}
.obra-nav-in{display:flex;justify-content:space-between;gap:20px}
.obra-nav a{display:flex;flex-direction:column;gap:6px;padding:clamp(22px,3.4vh,34px) 0;min-width:0}
.obra-nav .sig{text-align:right;align-items:flex-end}
.obra-nav .k{font-family:"DM Sans",sans-serif;font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--gris);transition:color .2s var(--e)}
.obra-nav .n{font-family:"Aboreto",serif;font-size:clamp(17px,2vw,24px);line-height:1.2;transition:color .2s var(--e)}
.obra-nav a:hover .n,.obra-nav a:hover .k{color:var(--rojo)}

/* Estado de la obra en la fila de datos: el rojo solo marca lo que aún no existe. */
.obra-datos .est-proyecto,.obra-datos .est-en-construccion{color:var(--rojo)}

/* ══ EL ESCENARIO DE LA OBRA (propuesta, 23-09-2026) ══
   Claudio: todo en una misma pantalla, que se transmuta con una botonera a la
   IZQUIERDA (a la derecha flotan las redes). Motion: el indicador rojo viaja
   al botón activo, el panel entrante se revela con un barrido, la imagen del
   carrusel entra desde el lado hacia donde se avanza y un cursor-flecha sigue
   al mouse. En teléfono la botonera se vuelve una barra horizontal. */
.esc-sec{padding:clamp(18px,2.6vh,30px) 0 clamp(48px,7vh,80px)}
.esc{display:grid;grid-template-columns:clamp(150px,15vw,200px) minmax(0,1fr);gap:clamp(12px,1.6vw,22px);align-items:stretch}

/* ── la botonera ── */
.esc-rail{position:relative;display:flex;flex-direction:column;border-left:1px solid var(--linea)}
.esc-ind{position:absolute;left:-1px;top:0;width:2px;height:0;background:var(--rojo);
  transition:transform .55s var(--e),height .55s var(--e),width .55s var(--e)}
.esc-bt{position:relative;display:grid;grid-template-columns:auto 18px 1fr;align-items:center;gap:10px;
  width:100%;padding:15px 10px 15px 16px;border:0;border-bottom:1px solid var(--linea);background:none;cursor:pointer;text-align:left;
  font-family:"DM Sans",sans-serif;color:var(--gris);transition:color .25s var(--e),background .25s var(--e)}
.esc-bt .n{font-size:10px;letter-spacing:.14em;color:var(--linea);transition:color .25s var(--e)}
.esc-bt svg{width:18px;height:18px;fill:currentColor;transition:transform .35s var(--e)}
.esc-bt .l{font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;line-height:1.35;transition:transform .35s var(--e)}
.esc-bt .l i{font-style:normal;color:var(--rojo);letter-spacing:.08em;margin-left:2px}
.esc-bt:hover{color:var(--tinta);background:var(--hueso)}
.esc-bt:hover .l{transform:translateX(4px)}
.esc-bt:hover svg{transform:scale(1.12)}
.esc-bt.on{color:var(--tinta)}
.esc-bt.on .n{color:var(--rojo)}
.esc-bt.on svg{fill:var(--rojo)}
.esc-bt.pronto .l i{color:var(--gris);border:1px solid var(--linea);padding:1px 5px;font-size:9px;letter-spacing:.12em}
.esc-bt:focus-visible{outline:2px solid var(--rojo);outline-offset:-2px}

/* ── el escenario ── */
.esc-stage{position:relative;width:100%;aspect-ratio:16/10;min-height:420px;max-height:min(78vh,calc(100vh - 350px));background:var(--hueso);overflow:hidden}
.esc-p{position:absolute;inset:0;visibility:hidden;opacity:0;clip-path:inset(0 0 0 100%);
  transition:opacity .5s var(--e),clip-path .8s var(--e),visibility 0s linear .8s}
.esc-p.on{visibility:visible;opacity:1;clip-path:inset(0 0 0 0);transition:opacity .5s var(--e),clip-path .8s var(--e)}
.esc:not(.listo) .esc-p{transition:none}
.esc-p iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}
.esc-oscuro{background:var(--neg);color:#fff}
.esc-rot{position:absolute;right:16px;top:14px;z-index:6;margin:0;pointer-events:none;
  font-family:"DM Sans",sans-serif;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--gris)}
.esc-rot b{font-weight:500;color:var(--rojo)}
.esc-stage:has(.esc-oscuro.on) .esc-rot{color:rgba(255,255,255,.6)}

/* ── carrusel: la imagen ENTERA, sin recortar ── */
.car{position:absolute;inset:0;display:grid;grid-template-rows:minmax(0,1fr) auto;outline:none}
.car-pista{position:relative;min-height:0}
.car-f{position:absolute;inset:0;margin:0;padding:clamp(10px,2vw,28px) clamp(10px,2vw,28px) 6px;opacity:0;visibility:hidden;
  transition:opacity .6s var(--e),visibility 0s linear .6s}
.car-f.on{opacity:1;visibility:visible;transition:opacity .6s var(--e)}
.car-f.on.de-der{animation:carDer .9s var(--e)}
.car-f.on.de-izq{animation:carIzq .9s var(--e)}
@keyframes carDer{from{transform:translateX(3%) scale(1.015)}to{transform:none}}
@keyframes carIzq{from{transform:translateX(-3%) scale(1.015)}to{transform:none}}
.car-f img{width:100%;height:100%;object-fit:contain}
.esc-p[data-p="planos"]{background:#fff}
.car-z{position:absolute;top:0;bottom:0;width:50%;z-index:3;border:0;background:none;padding:0;cursor:none}
.car-z-ant{left:0}.car-z-sig{right:0}
.car-cursor{position:absolute;left:-28px;top:-28px;z-index:4;width:56px;height:56px;border-radius:50%;pointer-events:none;
  background:var(--rojo);display:flex;align-items:center;justify-content:center;opacity:0;scale:.4;
  transition:opacity .25s var(--e),scale .35s var(--e)}
.car-cursor.vis{opacity:1;scale:1}
.car-cursor svg{width:22px;height:22px;fill:none;stroke:#fff;stroke-width:1.6;transition:transform .3s var(--e)}
.car-cursor.izq svg{transform:rotate(180deg)}
.car-pie{position:relative;z-index:5;display:flex;align-items:center;gap:16px;padding:10px clamp(10px,2vw,28px) 12px;min-width:0}
.car-n{font-family:"DM Sans",sans-serif;font-size:11px;letter-spacing:.16em;opacity:.75;white-space:nowrap}
.car-n b{font-weight:500;color:var(--rojo)}
.car-t{font-family:"DM Sans",sans-serif;font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;white-space:nowrap}
.car-mins{display:flex;gap:6px;margin-left:auto;overflow-x:auto;scrollbar-width:none;max-width:70%;padding:3px}
.car-mins::-webkit-scrollbar{display:none}
.car-mins button{flex:0 0 auto;width:52px;height:34px;padding:0;border:0;cursor:pointer;opacity:.45;background:none;
  outline:1px solid transparent;outline-offset:2px;transition:opacity .25s var(--e),outline-color .25s var(--e)}
.car-mins button img{width:100%;height:100%;object-fit:cover}
.car-mins button:hover{opacity:.85}
.car-mins button.on{opacity:1;outline-color:var(--rojo)}
.esc-p[data-p="planos"] .car-mins button img{object-fit:contain;background:#fff}

/* ── testimonio y video ── */
.esc-voz{position:absolute;inset:0}
.esc-voz > img{width:100%;height:100%;object-fit:cover;opacity:.72;transition:opacity .5s var(--e),transform 1.4s var(--e)}
.esc-voz:hover > img{opacity:.85;transform:scale(1.02)}
.esc-voz::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,rgba(20,20,20,.86) 0%,rgba(20,20,20,.1) 62%)}
.esc-voz-txt{position:absolute;left:clamp(18px,3vw,44px);bottom:clamp(18px,3.4vw,46px);z-index:2;max-width:38ch}
.esc-voz-txt .tag{color:rgba(255,255,255,.65);margin-bottom:10px}
.esc-voz-txt h2{font-family:"Aboreto",serif;font-size:clamp(22px,2.8vw,36px);line-height:1.15;margin:0 0 10px}
.esc-voz-txt p:last-child{margin:0;font-size:14.5px;line-height:1.7;color:rgba(255,255,255,.8)}
.esc-play{position:absolute;top:50%;left:62%;z-index:3;transform:translate(-50%,-50%);
  width:clamp(62px,6.4vw,84px);height:clamp(62px,6.4vw,84px);border-radius:50%;padding:0;cursor:pointer;
  border:1px solid rgba(255,255,255,.85);background:rgba(20,20,20,.25);display:flex;align-items:center;justify-content:center;
  transition:background .3s var(--e),border-color .3s var(--e),transform .3s var(--e)}
.esc-play::before{content:"";position:absolute;inset:-10px;border-radius:50%;border:1px solid rgba(255,255,255,.3);animation:latido 2.4s var(--e) infinite}
@keyframes latido{0%{transform:scale(.9);opacity:.9}100%{transform:scale(1.35);opacity:0}}
.esc-play svg{width:34%;height:34%;margin-left:6%;fill:#fff}
.esc-voz:hover .esc-play,.esc-play:focus-visible{background:var(--rojo);border-color:var(--rojo);transform:translate(-50%,-50%) scale(1.06)}
.esc-voz iframe{z-index:7}
.esc-pronto{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;padding:0 clamp(24px,5vw,72px)}
.esc-pronto .tag{color:rgba(255,255,255,.6)}
.esc-pronto h2{font-family:"Aboreto",serif;font-size:clamp(26px,3.4vw,46px);margin:0 0 10px}
.esc-pronto p:last-child{margin:0;color:rgba(255,255,255,.7);font-size:15px}
.esc-pronto-l{position:absolute;left:0;right:0;bottom:0;height:2px;background:linear-gradient(90deg,transparent,var(--rojo),transparent);
  background-size:40% 100%;background-repeat:no-repeat;animation:barre 2.8s linear infinite}
@keyframes barre{from{background-position:-40% 0}to{background-position:140% 0}}
@media (prefers-reduced-motion:reduce){ .esc-p,.car-f,.esc-ind{transition:none!important;animation:none!important} .esc-play::before,.esc-pronto-l{animation:none} }

/* ── teléfono: la botonera arriba, horizontal; el escenario vertical ── */
@media (max-width:760px){
  .esc{grid-template-columns:1fr;gap:0}
  .esc-rail{flex-direction:row;border-left:0;border-bottom:1px solid var(--linea);overflow-x:auto;scrollbar-width:none;margin:0 calc(var(--pad) * -1);padding:0 var(--pad)}
  .esc-rail::-webkit-scrollbar{display:none}
  .esc-ind{top:auto;bottom:-1px;left:0;height:2px!important;width:0}
  .esc-bt{flex:0 0 auto;width:auto;grid-template-columns:18px auto;gap:7px;padding:14px 13px;border-bottom:0}
  .esc-bt .n{display:none}
  .esc-bt:hover{background:none}
  .esc-bt:hover .l{transform:none}
  .esc-bt .l{white-space:nowrap}
  .esc-stage{aspect-ratio:4/5;min-height:0;max-height:none;margin-top:12px}
  .esc-rot{display:none}
  .car-pie{flex-wrap:wrap;gap:8px 14px}
  .car-mins{max-width:100%;width:100%;margin-left:0;order:3}
  .car-mins button{width:58px;height:40px}
  .car-z{cursor:pointer}
  .esc-voz::after{background:linear-gradient(0deg,rgba(20,20,20,.9) 0%,rgba(20,20,20,.1) 70%)}
  .esc-play{left:50%;top:38%}
  .esc-voz-txt{right:18px}
}

/* Ajustes tras mirarlo (23-09-2026) */
.esc-ayuda{margin:auto 0 0;padding:14px 10px 0 16px;font-size:12px;line-height:1.6;color:var(--gris)}
/* Testimonio: el texto en su panel, el video al lado — no encima de sus subtítulos */
.esc-voz-2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.75fr)}
.esc-voz-2::after{display:none}
.esc-voz-2 .esc-voz-txt{position:relative;left:auto;bottom:auto;order:-1;align-self:end;padding:0 clamp(18px,2.4vw,36px) clamp(22px,3vw,40px)}
.esc-voz-vid{position:relative;overflow:hidden;background:#000}
.esc-voz-vid > img{width:100%;height:100%;object-fit:cover;opacity:.85;transition:opacity .5s var(--e),transform 1.4s var(--e)}
.esc-voz-vid:hover > img{opacity:1;transform:scale(1.02)}
.esc-voz-vid .esc-play{left:50%}
.esc-voz-vid:hover .esc-play{background:var(--rojo);border-color:var(--rojo);transform:translate(-50%,-50%) scale(1.06)}
.esc-voz-vid iframe{position:absolute;inset:0;width:100%;height:100%;border:0;z-index:7}
.esc-voz-dur{display:inline-block;margin-top:18px;font-family:"DM Sans",sans-serif;font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:rgba(255,255,255,.55)}
@media (max-width:760px){
  .esc-ayuda{display:none}
  .esc-voz-2{grid-template-columns:1fr;grid-template-rows:minmax(0,1.15fr) auto}
  .esc-voz-2 .esc-voz-txt{order:0;align-self:start;padding:18px 18px 20px}
  .esc-voz-vid .esc-play{top:50%}
  .esc-voz-dur{display:none}
  /* la botonera avisa que sigue: un degradé en el borde derecho */
  .esc-rail.hay-mas{-webkit-mask-image:linear-gradient(90deg,#000 80%,transparent);mask-image:linear-gradient(90deg,#000 80%,transparent)}
  /* las redes se apartan mientras se mira el escenario */
  .redes{transition:opacity .35s var(--e),transform .35s var(--e)}
  body.esc-a-la-vista .redes{opacity:0;transform:translateX(24px);pointer-events:none}
}
/* Video vertical (de teléfono): se presenta como tal, con su texto al lado,
   no como un panorámico con franjas negras (Claudio, 23-09-2026). */
.esc-mp4{position:absolute;inset:0;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;
  gap:clamp(20px,4vw,56px);padding:clamp(16px,2.4vw,30px) clamp(20px,4vw,56px);background:var(--neg)}
.esc-mp4-txt .tag{color:rgba(255,255,255,.6)}
.esc-mp4-txt h2{font-family:"Aboreto",serif;font-size:clamp(24px,3vw,40px);line-height:1.15;margin:0 0 12px;color:#fff}
.esc-mp4-txt p:last-child{margin:0;max-width:34ch;color:rgba(255,255,255,.72);font-size:14.5px;line-height:1.7}
.esc-mp4-tel{height:100%;aspect-ratio:9/16;max-height:100%;background:#000;border:1px solid rgba(255,255,255,.18)}
.esc-mp4-tel video{width:100%;height:100%;object-fit:cover;display:block}
@media (max-width:760px){
  .esc-mp4{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) auto;justify-items:center;gap:12px;padding:12px}
  .esc-mp4-txt{order:2;text-align:center}
  .esc-mp4-txt p:last-child{display:none}
  .esc-mp4-txt h2{font-size:20px;margin:0}
}

/* ══ GALERÍA DE OBRAS: UN CUADRO = UNA OBRA (23-09-2026) ══
   Hasta 3 imágenes apiladas; se funden al pasar el mouse. Las rayitas
   de arriba cuentan en cuál va y se llenan de rojo mientras corre. */
.gal-obras .ob img{position:absolute;inset:0}
.gal-obras .ob-f{opacity:0;transition:opacity .9s var(--e),clip-path 1.15s cubic-bezier(.33,.06,.16,1) var(--d,0s),transform 1.5s cubic-bezier(.22,.61,.36,1) var(--d,0s)}
.gal-obras .ob-f.on{opacity:1}
.gal-obras .ob.corre .ob-f.on{transform:scale(1.045);transition:opacity .9s var(--e),transform 3s linear}
.ob-pasos{position:absolute;top:14px;right:14px;z-index:3;display:flex;gap:5px;opacity:0;transition:opacity .35s var(--e)}
.ob-pasos i{display:block;width:22px;height:2px;background:rgba(255,255,255,.45);position:relative;overflow:hidden}
.ob-pasos i::after{content:"";position:absolute;inset:0;background:var(--rojo);transform:scaleX(0);transform-origin:left}
.ob-pasos i.hecho::after{transform:scaleX(1)}
.ob.corre .ob-pasos i.on::after{transform:scaleX(1);transition:transform 1.4s linear}
.ob:hover .ob-pasos,.ob.corre .ob-pasos,.ob:focus-visible .ob-pasos{opacity:1}
.gal-obras .ob.sola{grid-column:1 / -1!important;aspect-ratio:3/1}
@media (hover:none){ .ob.corre .ob-pasos i.on::after{transition-duration:2.4s} }
@media (max-width:620px){ .gal-obras .ob.sola{aspect-ratio:3/2} }
