:root{
  --tinta:#16151e; --tinta-2:#26242f; --oro:#b08d57; --oro-claro:#c9ac7d;
  --oro-texto:#7b6239;  /* mismo tono y saturación que --oro, bajado a L36% para
                           llegar a 4.5:1 sobre marfil y sobre marfil-2: el oro del manual da 2.74:1
                           y es acento gráfico, no color de texto pequeño */
  --arena:#d6cdc0; --marfil:#f5f1e8; --marfil-2:#efe9dd;
  --texto:#3a3742; --texto-2:#67626e;  /* mismo tono; a #6f6a76 el texto secundario daba 4.34:1
                        sobre --marfil-2 y no llegaba al mínimo AA */
  --linea:#e2dbcd; --linea-osc:rgba(245,241,232,.14);
  --display:'Cormorant Garamond',Garamond,serif; --sans:'Montserrat',system-ui,sans-serif;
  --t:.42s cubic-bezier(.32,.72,0,1); --t-r:.26s cubic-bezier(.32,.72,0,1); --t-lento:.62s cubic-bezier(.32,.72,0,1);
}
*{box-sizing:border-box;margin:0;padding:0}
/* `scroll-behavior:smooth` en <html> anima TODO desplazamiento del documento
   y en una página larga se siente como si la rueda arrastrara: el gesto no
   responde de inmediato. Se quita de aquí y el suavizado queda solo para los
   saltos de ancla, que es para lo que sirve (lo hace gretta.js). */
html{color-scheme:light;overflow-x:clip}
body{background:var(--marfil);color:var(--texto);font-family:var(--sans);font-weight:400;font-size:17.5px;line-height:1.7;-webkit-font-smoothing:antialiased;overflow-x:clip}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
/* Toque: sin el retardo de 300ms del doble tap y con el destello de Android
   puesto a propósito (el azul del sistema no pertenece a la paleta). */
a,button,summary,input,label,.filtro,.op,.talla{touch-action:manipulation;-webkit-tap-highlight-color:rgba(176,141,87,.18)}
button{font-family:inherit;cursor:pointer;border:0;background:none;color:inherit}
:focus-visible{outline:2px solid var(--oro);outline-offset:3px;border-radius:2px}
.wrap{max-width:1320px;margin:0 auto;
  padding-inline:max(clamp(20px,4vw,60px),env(safe-area-inset-left),env(safe-area-inset-right))}
h1,h2,h3{font-family:var(--display);font-weight:700;color:var(--tinta);text-wrap:balance;letter-spacing:0}
/* La serif del manual encabeza; la sans en Light sostiene los subtítulos. */
.obra h3,.visor h3,.marca .g,.cita-marca p,.p404 .num{font-family:var(--display)}
.kicker,.med-h p,.col-h p,.serv p.sub,.esp-h p,.testi-h p,.rel p.sub,.muro-h p,.fmt-t{font-weight:300}
section[id]{scroll-margin-top:92px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.skip{position:absolute;left:-9999px;background:var(--tinta);color:var(--marfil);padding:12px 22px;z-index:200}
.skip:focus{left:12px;top:12px}
.kicker{display:inline-flex;align-items:center;gap:14px;font-size:11px;letter-spacing:.3em;text-transform:uppercase;color:var(--oro-texto);font-weight:600}
.kicker::before{content:"";width:28px;height:1px;background:var(--oro)}
.kicker.solo::before{display:none}

/* ═══════ NAV — portal: dos columnas que enmarcan ═══════ */
/* La barra baja con el lector y, al despegarse del borde, se encoge y se
   vuelve translúcida — el mismo recurso de nausocieta.com, en la paleta de
   la casa. Todo lo que se anima aquí (top, width, radio, fondo) transiciona
   con la misma cadencia para que no se vea por partes. */
.nav{position:fixed;top:0;left:50%;transform:translateX(-50%);width:100%;z-index:100;
  border:1px solid transparent;padding:8px 0;
  transition:top .45s ease,width .45s ease,border-radius .45s ease,padding .45s ease,
             background var(--t),border-color var(--t),box-shadow var(--t)}
.nav.pegada{top:12px;width:min(94%,1200px);border-radius:3px;padding:0;
  background:rgba(245,241,232,.82);backdrop-filter:blur(18px) saturate(1.2);
  -webkit-backdrop-filter:blur(18px) saturate(1.2);
  border-color:var(--linea);box-shadow:0 12px 34px rgba(22,21,30,.12)}
.nav .in{display:flex;align-items:center;justify-content:space-between;gap:24px;
  padding-block:14px;transition:padding-block .45s ease;
  padding-inline:max(clamp(20px,4vw,60px),env(safe-area-inset-left),env(safe-area-inset-right))}
.nav.pegada .in{padding-block:9px;padding-inline:clamp(18px,2.4vw,30px)}
@media(max-width:760px){
  /* en pantalla estrecha la píldora no cabe: vuelve a barra a sangre */
  .nav.pegada{top:0;width:100%;border-radius:0;box-shadow:none;
    border-color:transparent;border-bottom-color:var(--linea)}
}
.marca{display:flex;align-items:baseline;gap:12px}
/* Un solo logotipo en todo el sitio: el lockup GRETTA + BY LLAMAS.
   El bloque completo mide 2.35:1, no 3.86:1 como el wordmark suelto que
   había antes, así que la barra se dimensiona para él: por debajo de 34px
   de alto la bajada deja de leerse y el logo se vuelve una mancha. */
.marca img{height:clamp(34px,3.6vw,46px);width:auto;display:block;transition:opacity var(--t-r)}
@media(max-width:600px){.marca img{height:31px}}
.marca:hover img{opacity:.68}
.marca .g{font-family:var(--display);font-size:26px;letter-spacing:.3em;color:var(--tinta);font-weight:400;text-indent:.3em}
.marca .b{font-size:9.5px;letter-spacing:.3em;text-transform:uppercase;color:var(--texto-2)}
.nav ul{display:flex;gap:clamp(18px,2.4vw,36px);list-style:none}
.nav ul a{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--texto-2);font-weight:500;position:relative;padding-bottom:3px;transition:color var(--t-r)}
.nav ul a::after{content:"";position:absolute;left:0;right:100%;bottom:0;height:1px;background:var(--oro);transition:right var(--t)}
.nav ul a:hover{color:var(--tinta)}
.nav ul a:hover::after{right:0}
/* la página en la que estás, marcada también visualmente */
.nav ul a[aria-current="page"]{color:var(--tinta)}
.nav ul a[aria-current="page"]::after{right:0}
.nav.n-oscuro:not(.pegada) ul a[aria-current="page"]{color:var(--marfil)}
.nav-wa{display:inline-flex;flex:0 0 auto;align-items:center;gap:9px;border:1px solid var(--tinta);padding:11px 22px;font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;font-weight:600;transition:background var(--t-r),color var(--t-r)}
.nav-wa:hover{background:var(--tinta);color:var(--marfil)}
.nav-wa svg{width:14px;height:14px;fill:currentColor}
/* En móvil el menú no se esconde: se pasa a una segunda línea deslizable.
   Antes se ocultaba con display:none y no había forma de llegar a Colección,
   Acerca, Preguntas ni Contacto desde el teléfono. */
@media(max-width:900px){
  .marca .b{display:none}
  .nav .in{flex-wrap:wrap;row-gap:9px;padding-top:11px;padding-bottom:9px;column-gap:14px}
  /* el hijo directo del flex es <nav>, no <ul>: el orden se aplica ahí */
  .nav .in > nav{order:3;width:100%;min-width:0}
  .nav ul{gap:22px;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none;
    padding-bottom:2px;-webkit-overflow-scrolling:touch}
  .nav ul::-webkit-scrollbar{display:none}
  .nav ul li{flex:0 0 auto}
  .nav ul a{font-size:11.5px}
  .nav-wa{padding:9px 16px;font-size:10.5px}
}

/* ═══════ HERO — el marco como portal ═══════ */
.hero{padding:clamp(120px,16vh,180px) 0 clamp(60px,9vh,110px);position:relative;overflow:hidden}
/* minmax(0,1fr): sin esto, una columna "auto" adopta el ancho máximo del texto y desborda en móvil */
.hero .in{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(34px,5vw,80px);align-items:center}
@media(min-width:980px){.hero .in{grid-template-columns:1.02fr .98fr}}
.hero h1{font-size:clamp(43px,6.2vw,96px);line-height:1.06;margin:clamp(25px,3.6vh,43px) 0;font-weight:700;letter-spacing:0}
.hero h1 em{font-style:normal;color:var(--oro-texto)}
.hero .bajada{max-width:min(44ch,100%);color:var(--texto-2);font-size:clamp(16px,1.3vw,18.5px)}
.hero .acciones{display:flex;flex-wrap:wrap;gap:14px;margin-top:clamp(28px,4vh,44px)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;background:var(--tinta);color:var(--marfil);padding:17px 36px;font-size:12px;letter-spacing:.16em;text-transform:uppercase;font-weight:600;transition:background var(--t-r),transform var(--t-r)}
.btn:hover{background:var(--oro);transform:translateY(-2px)}
.btn.linea{background:rgba(250,247,240,.86);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:var(--tinta);border:1px solid var(--arena)}
.btn.linea:hover{background:var(--marfil-2);border-color:var(--tinta);color:var(--tinta)}
/* variantes para fondo tinta (hero) */
.btn.claro{background:var(--marfil);color:var(--tinta)}
.btn.claro:hover{background:var(--oro-claro);color:var(--tinta)}
.btn.linea-clara{background:transparent;color:var(--marfil);border:1px solid rgba(245,241,232,.4)}
.btn.linea-clara:hover{background:rgba(245,241,232,.1);border-color:var(--marfil);color:var(--marfil)}

/* Cabecera sobre el hero oscuro: mientras no se pega, va en hueso.
   Se cambia de archivo (no de filtro) porque currentColor no cruza a un <img>. */
.marca .mk-hueso{display:none}
.nav.n-oscuro:not(.pegada) .marca .mk-tinta{display:none}
.nav.n-oscuro:not(.pegada) .marca .mk-hueso{display:block}
.nav.n-oscuro:not(.pegada) ul a{color:rgba(245,241,232,.72)}
.nav.n-oscuro:not(.pegada) ul a:hover{color:var(--marfil)}
.nav.n-oscuro:not(.pegada) .nav-wa{border-color:rgba(245,241,232,.42);color:var(--marfil)}
.nav.n-oscuro:not(.pegada) .nav-wa:hover{background:var(--marfil);color:var(--tinta)}
/* el portal: marco de línea con la obra dentro */
.portal{position:relative;padding:22px}
.portal::before{content:"";position:absolute;inset:0;border:1px solid var(--arena)}
.portal::after{content:"";position:absolute;inset:0;border-top:1px solid var(--oro);transform-origin:left;animation:trazo 1.6s cubic-bezier(.2,.7,.2,1) .3s both}
@keyframes trazo{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.portal img{width:100%;aspect-ratio:3/4;object-fit:cover;background:var(--marfil-2)}
.portal figcaption{position:absolute;left:22px;bottom:-30px;font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--texto-2)}

/* ═══════ FILETE de la casa ═══════ */
.filete{border-top:1px solid var(--linea);border-bottom:1px solid var(--linea)}
.filete .in{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--linea)}
@media(min-width:820px){.filete .in{grid-template-columns:repeat(4,1fr)}}
.dato{background:var(--marfil);padding:clamp(24px,3.2vw,40px) clamp(16px,2vw,28px)}
.dato b{display:block;font-family:var(--display);font-size:clamp(28px,3.2vw,42px);font-weight:500;line-height:1;font-variant-numeric:tabular-nums}
.dato span{display:block;margin-top:9px;font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--texto-2)}

/* ═══════ COLECCIÓN ═══════ */
.col{padding:clamp(78px,10.5vh,138px) 0}
.col-h{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:26px;margin-bottom:clamp(28px,4vh,44px)}
.col-h h2{font-size:clamp(52px,7.2vw,112px);line-height:1.02;font-weight:700;letter-spacing:0;margin-top:14px}
.col-h p{color:var(--texto-2);max-width:min(46ch,100%);margin-top:14px}
.filtros{display:flex;flex-wrap:wrap;gap:9px;margin-bottom:clamp(30px,4.4vh,50px)}
.filtro{border:1px solid var(--linea);padding:10px 20px;font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--texto-2);transition:border-color var(--t-r),color var(--t-r),background var(--t-r)}
.filtro:hover{border-color:var(--arena);color:var(--tinta)}
.filtro[aria-pressed="true"]{background:var(--tinta);border-color:var(--tinta);color:var(--marfil)}
/* ── Retícula alineada, tipo pared de galería ──
   Las obras vienen en dos proporciones (19 verticales, 11 apaisadas). La
   mampostería las empaquetaba bien pero dejaba los pies escalonados. Aquí
   la caja mide igual en todas y cada pieza se centra dentro a su tamaño
   real: quedan alineadas por arriba, por abajo y por su eje, y ninguna se
   recorta. Es como colgarlas todas a la misma altura de muro. */
.rejilla{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,244px),1fr));
  gap:clamp(26px,3vw,44px) clamp(18px,2.2vw,32px);align-items:start}
.obra{position:relative;display:grid;grid-template-rows:var(--caja) auto;width:100%;
  --caja:clamp(280px,26vw,376px);background:transparent;text-align:left;padding:0}
@media(max-width:700px){.obra{--caja:clamp(210px,44vw,280px)}}

.obra .marco{position:relative;display:grid;place-items:center;height:var(--caja);overflow:visible}
/* El límite va en píxeles, no en porcentaje: dentro de una celda de rejilla
   `max-height:100%` no resuelve y la obra se salía del marco. Así la pieza
   la limita su alto o su ancho —lo que toque—, conserva su proporción y la
   sombra cae sobre la obra, no sobre una caja vacía. */
.obra img{display:block;width:auto;height:auto;max-width:100%;max-height:var(--caja);
  box-shadow:0 10px 26px rgba(22,21,30,.14);
  transition:transform var(--t),box-shadow var(--t),filter var(--t)}
.obra:hover img{transform:translateY(-5px) scale(1.012);box-shadow:0 20px 44px rgba(22,21,30,.24)}
.obra .pie{display:block;padding:18px 2px 0}
/* el nombre de obra es una de las reservas de la serif del manual */
.obra h3{font-family:var(--display);font-size:21px;line-height:1.24;font-weight:500;letter-spacing:.004em;color:var(--tinta)}
.obra .tema{display:block;margin-top:6px;font-size:10.5px;letter-spacing:.17em;text-transform:uppercase;color:var(--oro-texto);font-weight:600}
.obra.oculta{display:none}

/* ── Entrada escalonada ──
   Las cuatro piezas de una fila no aparecen a la vez: entran de izquierda a
   derecha con 70 ms de diferencia. El retardo lo escribe el JS en --i. */
.obra.rv{transition-delay:calc(var(--i,0) * 70ms)}

/* ── Al pasar el scroll ──
   Cada pieza llega desde abajo, se asienta al cruzar el centro de la
   pantalla y se retira al salir: el mismo gesto de recorrer una pared y
   detenerse frente a un cuadro. Va en el marco, no en la imagen, para no
   pelearse con el hover. */
@media(prefers-reduced-motion:no-preference){
  @supports (animation-timeline:view()){
    .obra .marco{animation:pasa-obra linear both;animation-timeline:view();
      animation-range:cover 0% cover 100%;will-change:transform}
    @keyframes pasa-obra{
      0%   {transform:translateY(30px) scale(.965)}
      46%  {transform:none}
      62%  {transform:none}
      100% {transform:translateY(-18px) scale(.978)}
    }
  }
}
.col .vacio{padding:60px 0;text-align:center;color:var(--texto-2)}

/* ═══════ MEDIDAS ═══════ */
.med{background:var(--marfil-2);padding:clamp(76px,10vh,130px) 0}
.med-h{text-align:center;max-width:620px;margin:0 auto clamp(38px,5.5vh,64px)}
.med-h h2{font-size:clamp(43px,5.8vw,83px);line-height:1.06;font-weight:700;letter-spacing:0;margin-top:14px}
.med-h p{color:var(--texto-2);margin-top:16px;font-size:clamp(17px,1.5vw,20px)}
.fmt-grupo{margin-top:clamp(46px,6vh,74px)}
.fmt-grupo:first-of-type{margin-top:0}
.fmt-t{font-family:var(--sans);font-weight:300;font-size:13px;letter-spacing:.24em;text-transform:uppercase;
  color:var(--texto-2);text-align:center;margin-bottom:clamp(28px,3.6vh,42px)}
.fmt-fila{list-style:none;display:grid;gap:clamp(22px,2.8vw,38px);
  grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr));align-items:end;justify-items:center}
.fmt{text-align:center}
/* Todo el bloque en Montserrat Light: el dato se lee por tamaño, no por peso
   ni por adornos. Sin línea divisoria, sin versalitas, sin rótulo repetido. */
.fmt i{display:block;font-style:normal;font-family:var(--sans);font-size:13px;font-weight:300;
  letter-spacing:.2em;color:var(--texto-2);margin-bottom:18px;font-variant-numeric:lining-nums tabular-nums}
.fmt .caja{display:block;margin:0 auto 20px;border:1px solid var(--tinta);background:var(--marfil)}
.fmt b{display:block;font-family:var(--sans);font-size:clamp(21px,1.7vw,25px);font-weight:300;
  letter-spacing:.01em;font-variant-numeric:lining-nums tabular-nums;line-height:1.2;color:var(--tinta)}
.fmt .cm{display:none}
.fmt .pul{display:block;font-size:14px;color:var(--texto-2);font-weight:300;margin-top:6px}
.med .nota{text-align:center;margin-top:clamp(30px,4vh,48px);font-size:15px;color:var(--texto-2)}

/* ═══════ SERVICIOS (personalizados / negocios) ═══════ */
.serv{padding:clamp(78px,10.5vh,138px) 0}
.serv .par{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(30px,4.4vw,70px);align-items:center;justify-items:stretch}
@media(min-width:940px){.serv .par{grid-template-columns:1fr 1fr}}
.serv .par + .par{margin-top:clamp(60px,9vh,120px)}
.serv .par.inv .txt{order:2}
.serv h2{font-size:clamp(40px,5.3vw,76px);line-height:1.08;font-weight:700;letter-spacing:0;margin:16px 0 20px}
.serv p{color:var(--texto-2);max-width:min(50ch,100%)}
.serv .marco-foto{position:relative;padding:18px;align-self:center}

.serv .marco-foto img{display:block;width:100%;height:auto;aspect-ratio:4/3;object-fit:cover;background:var(--arena)}
.serv ul{list-style:none;margin-top:24px;display:grid;gap:0;border-top:1px solid var(--linea)}
.serv li{display:flex;gap:14px;align-items:baseline;padding:13px 0;border-bottom:1px solid var(--linea);font-size:15.5px}
.serv li::before{content:"";width:16px;height:1px;background:var(--oro);flex:0 0 16px;transform:translateY(-5px)}
.serv .btn{margin-top:28px}

/* ═══════ PROCESO ═══════ */
.proc{background:var(--tinta);color:var(--marfil);padding:clamp(78px,10.5vh,138px) 0}
.proc h2{color:var(--marfil);font-size:clamp(43px,5.8vw,83px);line-height:1.06;font-weight:700;letter-spacing:0;margin-top:14px}
.proc .cab{max-width:620px;margin-bottom:clamp(40px,6vh,70px)}
.proc .cab p{color:#a9a3ae;margin-top:16px}
.pasos{display:grid;gap:clamp(20px,2.6vw,40px);grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr))}
.paso{padding-top:26px;border-top:1px solid var(--linea-osc)}
.paso b{font-family:var(--sans);font-size:14px;letter-spacing:.18em;color:var(--oro);font-weight:600;display:block;margin-bottom:14px;font-variant-numeric:lining-nums tabular-nums}
.paso h3{color:var(--marfil);font-size:27px;font-weight:700;margin-bottom:12px}
.paso p{color:#a9a3ae;font-size:15px}

/* ═══════ CIERRE ═══════ */
.fin{padding:clamp(90px,14vh,170px) 0;text-align:center}
.fin h2{font-size:clamp(52px,7.6vw,119px);line-height:1.02;font-weight:700;letter-spacing:0;margin:18px 0 22px}
.fin h2 em{font-style:normal;color:var(--oro-texto)}
.fin p{color:var(--texto-2);max-width:44ch;margin:0 auto 36px}
footer{border-top:1px solid var(--linea);padding:44px 0 60px}
footer .in{display:flex;flex-wrap:wrap;gap:22px;justify-content:space-between;align-items:center;font-size:12px;letter-spacing:.1em;color:var(--texto-2)}
footer .rs{display:flex;gap:18px}

/* ═══════ VISOR (lightbox) ═══════ */
.visor{position:fixed;inset:0;z-index:300;background:rgba(22,21,30,.94);backdrop-filter:blur(6px);display:none;overflow-y:auto;overscroll-behavior:contain}
.visor.abierto{display:block}
.visor .caja{min-height:100%;display:grid;place-items:center;padding:clamp(56px,7vh,80px) clamp(16px,4vw,48px)}
.visor .panel{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(24px,3.4vw,52px);max-width:1080px;width:100%;align-items:center}
@media(min-width:860px){.visor .panel{grid-template-columns:1.05fr .95fr}}
.visor .lienzo{padding:16px;border:1px solid rgba(214,205,192,.3)}
.visor .lienzo img{width:100%;max-height:66vh;object-fit:contain;background:#1c1b24}
.visor h3{color:var(--marfil);font-size:clamp(34px,3.8vw,54px);line-height:1.08;font-weight:700;margin:12px 0 8px}
.visor .tema{font-size:10.5px;letter-spacing:.28em;text-transform:uppercase;color:var(--oro)}
.visor .desc{color:#a9a3ae;font-size:15px;margin-top:14px;max-width:min(46ch,100%)}
.visor .lbl{display:block;margin:26px 0 12px;font-size:10.5px;letter-spacing:.24em;text-transform:uppercase;color:#a9a3ae}
.tallas{display:flex;flex-wrap:wrap;gap:9px}
.talla{border:1px solid rgba(214,205,192,.32);color:var(--marfil);padding:11px 16px;font-size:12.5px;transition:border-color var(--t-r),background var(--t-r),color var(--t-r)}
.talla:hover{border-color:var(--oro)}
.talla[aria-pressed="true"]{background:var(--marfil);border-color:var(--marfil);color:var(--tinta)}
.visor .comprar{display:inline-flex;align-items:center;justify-content:center;gap:11px;width:100%;margin-top:26px;background:var(--oro);color:var(--tinta);padding:18px 30px;font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;transition:background var(--t-r)}
.visor .comprar:hover{background:var(--oro-claro)}
.visor .comprar svg{width:16px;height:16px;fill:currentColor}
.visor .micro{margin-top:14px;font-size:12px;color:#8d8895}
.visor .x{position:fixed;top:18px;right:18px;width:44px;height:44px;border:1px solid rgba(214,205,192,.3);border-radius:50%;color:var(--marfil);display:grid;place-items:center;font-size:20px;line-height:1;transition:background var(--t-r),border-color var(--t-r)}
.visor .x:hover{background:rgba(245,241,232,.1);border-color:var(--marfil)}
.visor .nav-o{position:fixed;top:50%;transform:translateY(-50%);width:46px;height:46px;border:1px solid rgba(214,205,192,.26);border-radius:50%;color:var(--marfil);display:grid;place-items:center;transition:background var(--t-r),border-color var(--t-r)}
.visor .nav-o:hover{background:rgba(245,241,232,.1);border-color:var(--marfil)}
.visor .ant{left:14px}.visor .sig{right:14px}
.visor .nav-o svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.5}
@media(max-width:860px){.visor .nav-o{top:auto;bottom:14px;transform:none}}

/* ═══════ ENTRADA premium: opacidad + ascenso + foco ═══════ */
/* Entrada según HIG: distancia corta, curva con salida rápida, sin rebote.
   El desenfoque resuelve antes que el movimiento para que el texto se lea cuanto antes. */
.rv{opacity:0;transform:translateY(22px);filter:blur(6px);transition:opacity .5s cubic-bezier(.32,.72,0,1),transform .55s cubic-bezier(.32,.72,0,1),filter .4s ease-out}
.rv.dentro{opacity:1;transform:none;filter:none}

/* Entrada en cascada: el contenedor no se mueve, entran sus hijos uno tras
   otro. Un bloque que aparece entero de golpe no se percibe como animación;
   escalonado sí se lee como que la sección "va apareciendo". */
.rv.cascada{opacity:1;transform:none;filter:none}
.rv.cascada > *{opacity:0;transform:translateY(20px);filter:blur(5px);
  transition:opacity .55s cubic-bezier(.32,.72,0,1),transform .6s cubic-bezier(.32,.72,0,1),filter .45s ease-out}
.rv.cascada.dentro > *{opacity:1;transform:none;filter:none}
.rv.cascada.dentro > *:nth-child(1){transition-delay:0s}
.rv.cascada.dentro > *:nth-child(2){transition-delay:.09s}
.rv.cascada.dentro > *:nth-child(3){transition-delay:.18s}
.rv.cascada.dentro > *:nth-child(4){transition-delay:.27s}
.rv.cascada.dentro > *:nth-child(5){transition-delay:.36s}
.rv.cascada.dentro > *:nth-child(6){transition-delay:.45s}
.rv.cascada.dentro > *:nth-child(7){transition-delay:.54s}
.rv.cascada.dentro > *:nth-child(8){transition-delay:.63s}
@media(prefers-reduced-motion:reduce){
  .rv.cascada > *{opacity:1;transform:none;filter:none;transition:none}
}
@media(prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  .rv{opacity:1;transform:none;filter:none}
  .portal::after{animation:none;transform:none}
}

/* ═══════════════════════════════════════════════════════════
   AÑADIDOS MULTIPÁGINA — carrusel, acerca, contacto, 404
   ═══════════════════════════════════════════════════════════ */

/* ── Cabecera de página interior ── */
/* Encabezado de página: texto sobre tinta y fotografía al lado — nunca
   encima. Mismo registro que el hero, en menor escala. */
.cab-pag{background:var(--tinta);color:var(--marfil);position:relative;overflow:clip;
  padding:clamp(112px,15vh,168px) 0 clamp(52px,7vh,86px)}

.cab-in{position:relative;z-index:2;max-width:1320px;margin:0 auto;padding:0 clamp(20px,4vw,60px);
  display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(34px,4.6vw,64px);align-items:center}
@media(min-width:940px){.cab-in{grid-template-columns:1.08fr .92fr}}
/* Cabecera centrada (colección): una sola columna, igual que el hero. */
.cab-centro .cab-in{grid-template-columns:minmax(0,1fr)!important;justify-items:center;text-align:center}
.cab-centro .cab-txt{max-width:min(62ch,100%)}
.cab-centro .cab-pag p,.cab-centro p{margin-inline:auto}
.cab-centro h1{font-size:clamp(52px,7vw,104px)}
.cab-pag .kicker{color:var(--oro-claro)}
.cab-pag h1{color:var(--marfil);font-size:clamp(45px,5.8vw,90px);line-height:1.03;font-weight:700;letter-spacing:0;margin-top:15px}
.cab-pag p{color:rgba(245,241,232,.74);max-width:min(50ch,100%);margin-top:18px;font-size:clamp(16px,1.3vw,18.5px)}

.cab-foto{margin:0;perspective:1500px}
.cab-foto > div{position:relative;transform-origin:50% 100%;will-change:transform;background:var(--tinta-2);
  box-shadow:0 24px 52px rgba(0,0,0,.42)}
.cab-foto img{width:100%;height:auto;object-fit:cover;display:block}
.cab-foto.cf-obra > div{background:var(--marfil);padding:clamp(11px,1.1vw,16px)}

.cab-foto.cf-obra img{aspect-ratio:5/6}
.cab-foto.cf-esp img{aspect-ratio:4/3}
.cab-foto figcaption{display:flex;flex-wrap:wrap;align-items:baseline;gap:5px 13px;margin-top:15px}
.cf-t{font-family:var(--display);font-size:clamp(18px,1.6vw,22px);color:var(--marfil);font-weight:400}
.cf-s{font-size:10px;letter-spacing:.17em;text-transform:uppercase;color:var(--oro-claro);font-weight:600}
/* La foto del encabezado se acota para que quepa entera dentro de la banda:
   una obra 5/6 al ancho de la columna mediría ~700px y se cortaría. */
@media(min-width:940px){
  .cab-foto{margin-inline-start:auto}
  .cab-foto.cf-obra{max-width:330px}
  .cab-foto.cf-esp{max-width:470px}
}
@media(max-width:939px){.cab-foto{max-width:420px}}

/* ── Acerca ── */
.rel{padding:clamp(76px,10vh,130px) 0}
.rel .par{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(30px,4.4vw,72px);align-items:center}
@media(min-width:940px){.rel .par{grid-template-columns:1fr 1fr}}
.rel .par + .par{margin-top:clamp(60px,9vh,120px)}
.rel .par.inv .txt{order:2}
.rel h2{font-size:clamp(38px,5vw,72px);line-height:1.1;font-weight:700;letter-spacing:0;margin:14px 0 20px}
.rel p{color:var(--texto-2);max-width:min(52ch,100%)}
.rel p + p{margin-top:16px}
.rel .marco-foto{position:relative;padding:18px}

.rel .marco-foto img{display:block;width:100%;height:auto;aspect-ratio:5/6;object-fit:cover}
.cita-marca{background:var(--tinta);color:var(--marfil);padding:clamp(64px,10vh,120px) 0;text-align:center}
.cita-marca p{font-family:var(--display);font-size:clamp(26px,4vw,54px);line-height:1.3;max-width:22ch;margin:0 auto;color:var(--marfil);font-weight:500}
.cita-marca em{font-style:normal;color:var(--oro)}

/* ── Configurador de pedido (adaptado del cotizador de Nau) ── */
.cfg{padding:clamp(76px,10vh,130px) 0}
.cfg-rejilla{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(28px,3.4vw,56px);align-items:start}
@media(min-width:940px){.cfg-rejilla{grid-template-columns:1.05fr .95fr}}
.cfg-form > div + div{margin-top:clamp(30px,4vh,44px)}
.cfg-form h3{font-size:20px;font-weight:400;margin-bottom:16px;display:flex;align-items:baseline;gap:10px}
.cfg-form h3 em{font-style:normal;font-family:var(--sans);font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--oro-texto);font-weight:500}
.slider{-webkit-appearance:none;appearance:none;width:100%;height:2px;background:var(--arena);outline:0;margin:10px 0}
.slider::-webkit-slider-thumb{-webkit-appearance:none;width:20px;height:20px;border-radius:50%;background:var(--tinta);cursor:pointer;transition:background var(--t-r)}
.slider::-webkit-slider-thumb:hover{background:var(--oro)}
.slider::-moz-range-thumb{width:20px;height:20px;border:0;border-radius:50%;background:var(--tinta);cursor:pointer}
.limites{display:flex;justify-content:space-between;font-size:11.5px;color:var(--texto-2);letter-spacing:.1em}
.ops{display:flex;flex-wrap:wrap;gap:9px}
.op{border:1px solid var(--linea);padding:12px 18px;font-size:13.5px;color:var(--texto-2);display:inline-flex;align-items:center;gap:10px;transition:border-color var(--t-r),color var(--t-r),background var(--t-r)}
.op:hover{border-color:var(--arena);color:var(--tinta)}
.op[aria-checked="true"]{background:var(--tinta);border-color:var(--tinta);color:var(--marfil)}
.op .marca-op{width:14px;height:14px;border:1px solid currentColor;border-radius:50%;display:grid;place-items:center;font-size:9px}
.op[aria-checked="true"] .marca-op{background:var(--oro);border-color:var(--oro);color:var(--tinta)}
.cfg-res{background:var(--marfil-2);border:1px solid var(--linea);padding:clamp(26px,3vw,40px);position:sticky;top:100px}
.cfg-res h3{font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--oro-texto);font-weight:500;margin-bottom:20px}
.res-fila{display:flex;justify-content:space-between;gap:16px;padding:13px 0;border-bottom:1px solid var(--linea);font-size:14.5px}
.res-fila span:first-child{color:var(--texto-2)}
.res-fila b{font-weight:500;text-align:right}
.cfg-res .nota-precio{margin-top:20px;font-size:13px;color:var(--texto-2);line-height:1.6}
.cfg-res .btn{width:100%;margin-top:22px}

/* ── Contacto ── */
.datos{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(20px,2.6vw,36px);margin-top:clamp(34px,5vh,54px)}
@media(min-width:760px){.datos{grid-template-columns:repeat(3,1fr)}}
.dato-c{border-top:1px solid var(--linea);padding-top:22px}
.dato-c b{display:block;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--oro-texto);font-weight:500;margin-bottom:9px}
.dato-c p{color:var(--texto-2);font-size:15px}
.dato-c a{border-bottom:1px solid var(--arena);transition:border-color var(--t-r)}
.dato-c a:hover{border-color:var(--tinta)}

/* ── 404 ── */
.p404{min-height:100svh;display:grid;place-items:center;text-align:center;padding:120px 20px 80px}
.p404 .num{font-family:var(--display);font-size:clamp(96px,22vw,260px);line-height:.86;color:var(--tinta);font-weight:500}
.p404 h1{font-size:clamp(29px,3.6vw,49px);margin:18px 0 16px;font-weight:700}
.p404 p{color:var(--texto-2);max-width:44ch;margin:0 auto 34px}
.p404 .acciones{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}

/* ═══════ HERO DE MARCA — el logotipo como protagonista ═══════
   Sin vitrina: manda el wordmark, sostenido por las notas de la casa.
   Registro de galería (referencia: Galería Venegas). */
/* Fotografía de arquitectura en blanco y negro al fondo: el único color del
   hero lo ponen las obras del corredor, que avanzan por encima. */
.hm-fondo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0;opacity:.9}
.hm{background:var(--tinta);color:var(--marfil);position:relative;overflow:clip;
  padding:clamp(126px,15vh,180px) 0 clamp(40px,6vh,72px);container-type:inline-size}

/* ── Corredor de obras: la animación de la casa. Dos rieles de piezas que
   avanzan desde el punto de fuga. La profundidad se escribe como TAMAÑO
   APARENTE geométrico, así dos piezas seguidas guardan siempre la misma
   razón y la cinta no se desgarra al frente. Los keyframes los genera JS. ── */
.corredor .rieles{position:absolute;inset:0;pointer-events:none;perspective:30cqw;perspective-origin:64% 68%}
.corredor .escena{position:absolute;inset:0;transform-style:preserve-3d}
.corredor .pieza{position:absolute;left:64%;top:68%;width:13cqw;height:18cqw;margin-left:-6.5cqw;margin-top:-9cqw;
  overflow:hidden;backface-visibility:hidden;box-shadow:0 1.4cqw 3.4cqw rgba(0,0,0,.5)}
.corredor .pieza img{width:100%;height:100%;object-fit:cover;display:block}
/* Un solo velo, no tres: sobre tinta basta oscurecer el centro para que el
   wordmark tenga contraste. Menos capas, menos ruido. */
.velo-hm{position:absolute;inset:0;pointer-events:none;background:
  radial-gradient(ellipse 78% 62% at 50% 44%,rgba(22,21,30,.82) 0%,rgba(22,21,30,.66) 48%,rgba(22,21,30,.46) 100%),
  linear-gradient(rgba(22,21,30,.8) 0%,rgba(22,21,30,.24) 24%,rgba(22,21,30,.3) 54%,rgba(22,21,30,.78) 82%,rgba(22,21,30,.95) 100%)}
.velo-hm{z-index:1}
.corredor .rieles{z-index:1}
@media(prefers-reduced-motion:reduce){.corredor .pieza{animation-play-state:paused!important}}

.hm-in{position:relative;z-index:2;max-width:1320px;margin:0 auto;padding:0 clamp(20px,4vw,60px);
  display:grid;grid-template-columns:minmax(0,1fr);justify-items:center;text-align:center}

.hm-sello{font-size:11px;letter-spacing:.3em;text-transform:uppercase;color:var(--oro-claro);font-weight:600;margin-bottom:clamp(22px,3.2vh,34px)}
.hm-texto{display:flex;flex-direction:column;align-items:center;width:100%}
.hm-word{margin:0}
.hm-logo{width:min(100%,680px);height:auto;display:block;margin:0 auto}
.hm-lema{margin:clamp(26px,3.6vh,40px) auto 0;max-width:34ch;font-size:clamp(19px,1.75vw,25px);
  color:rgba(245,241,232,.88);font-weight:300;line-height:1.55}
.hm-lema em{font-style:normal;color:var(--oro-claro);font-weight:300}
.hm-acciones{display:flex;flex-wrap:wrap;justify-content:center;gap:13px;margin-top:clamp(26px,3.6vh,40px)}


/* notas de la casa: hechos verificables, no adornos */
.hm-notas{position:relative;z-index:2;list-style:none;max-width:1320px;margin:clamp(46px,6vh,80px) auto 0;
  padding:clamp(26px,3.4vh,38px) clamp(20px,4vw,60px) 0;
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(20px,2.4vw,30px);
  border-top:1px solid rgba(245,241,232,.14)}
@media(min-width:640px){.hm-notas{grid-template-columns:repeat(4,minmax(0,1fr))}}
.hm-notas b{display:block;font-size:clamp(26px,2.6vw,34px);font-weight:500;line-height:1;
  color:var(--marfil);font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.hm-notas b i{font-style:normal;font-size:.46em;letter-spacing:.06em;margin-left:.14em;color:var(--oro-claro)}
.hm-notas span{display:block;margin-top:9px;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;
  color:rgba(245,241,232,.58);line-height:1.6;font-weight:600}
@media(max-width:999px){.hm-lema{max-width:30ch}}

/* ═══════════════════════════════════════════════════════════
   ENDEREZADO AL SCROLL — port a vanilla del recurso
   container-scroll-animation (React + Framer Motion).
   Se conserva la mecánica (una superficie llega inclinada y se
   endereza frente al lector) y se descarta el disfraz de laptop
   —marco gris, fondo #222, radio 30px— que es lenguaje de SaaS.
   El ángulo baja de 20° a 9°: por encima de eso la obra se lee
   deformada, y deformar el cuadro contradice lo que se vende.
   ═══════════════════════════════════════════════════════════ */
@media(prefers-reduced-motion:no-preference){
  @supports (animation-timeline:view()){
    .enderezar{animation:enderezar linear both;animation-timeline:view();animation-range:entry 4% cover 42%}
    @keyframes enderezar{
      from{transform:perspective(1500px) rotateX(9deg) scale(.955);opacity:.62}
      to{transform:perspective(1500px) rotateX(0deg) scale(1);opacity:1}
    }
  }
  /* respaldo para navegadores sin timeline de scroll (lo mueve gretta.js) */
  html.sin-timeline .enderezar{opacity:.62;transform:perspective(1500px) rotateX(9deg) scale(.955)}

  /* Lo que ya está en pantalla al cargar no puede animarse con el scroll:
     su rango se completa antes del primer gesto. Ahí el mismo movimiento
     se hace una sola vez, al entrar en la página. */
  .entra-marco{animation:enderezar .92s cubic-bezier(.32,.72,0,1) both;animation-delay:.12s}
}

/* ═══════════════════════════════════════════════════════════
   TIRA DE OBRAS — port de `hero-carousel`
   Todas las medidas vienen del JS en variables (--l-alto, --l-ancho…),
   calculadas como fracción del escenario, igual que en el original.
   ═══════════════════════════════════════════════════════════ */
.tira{position:relative;height:clamp(420px,56svh,560px);overflow:hidden;background:var(--tinta);
  color:var(--marfil);isolation:isolate;outline:none;touch-action:pan-y}
.tira:focus-visible{outline:1px solid rgba(245,241,232,.45);outline-offset:-3px}

/* Fondo: la obra en foco, ampliada y desenfocada. El original la reteñía con
   un acento; aquí manda la propia pieza, que es la única dueña del color. */
.tira-fondos,.tira-velo,.tira-grano{position:absolute;inset:0;pointer-events:none}
.tira-f{position:absolute;inset:0;opacity:0;transition:opacity .62s cubic-bezier(.32,.72,0,1)}
.tira-f.visible{opacity:1}
.tira-f img{width:100%;height:100%;object-fit:cover;transform:scale(1.22);filter:blur(34px) saturate(.5) brightness(.72)}
@media(prefers-reduced-motion:no-preference){
  .tira-f.visible img{animation:tira-deriva 14s ease-out both}
  @keyframes tira-deriva{from{transform:scale(1.34)}to{transform:scale(1.22)}}
}
.tira-velo{background:
  linear-gradient(rgba(22,21,30,.86) 0%,rgba(22,21,30,.66) 32%,rgba(22,21,30,.74) 66%,rgba(22,21,30,.95) 100%),
  radial-gradient(ellipse 78% 58% at 50% 46%,rgba(22,21,30,.42),rgba(22,21,30,.82) 100%)}
/* grano de película, en SVG embebido: la pieza no arrastra archivos */
.tira-grano{opacity:.2;mix-blend-mode:overlay;background-size:180px 180px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}

/* Titular: ocupa la mitad superior y se apoya en el borde de la tira */
.tira-cabeza{position:absolute;inset:0 0 auto;height:var(--t-borde,50%);z-index:2;
  display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:14px 5vw;
  padding:0 var(--t-margen,26px) clamp(20px,3vh,34px)}
.tira-cabeza h2{color:var(--marfil);font-size:var(--t-titular,44px);line-height:.9;
  font-weight:600;letter-spacing:-.032em;margin:0}
.tira-cabeza .tl{display:block;overflow:hidden}
.tira-cabeza .tl b{display:block;font-weight:inherit}
@media(prefers-reduced-motion:no-preference){
  .tira-cabeza .tl b{animation:tira-sube .62s cubic-bezier(.22,1,.36,1) both;animation-delay:calc(var(--r,0)*70ms)}
  @keyframes tira-sube{from{transform:translateY(110%)}to{transform:none}}
}
.tira-credito{margin-top:14px;font-size:var(--t-etiqueta,13px);letter-spacing:.16em;
  text-transform:uppercase;color:var(--oro-claro);font-weight:600}
.tira-datos{display:flex;align-items:flex-end;gap:clamp(16px,3.4vw,44px);padding-bottom:2px}
.tira-datos span{font-size:var(--t-etiqueta,13px);letter-spacing:.16em;text-transform:uppercase;
  color:rgba(245,241,232,.76);font-weight:600;white-space:nowrap}
@media(prefers-reduced-motion:no-preference){
  .tira-datos span{animation:tira-asoma .45s ease-out both;animation-delay:calc(.12s + var(--r,0)*60ms)}
  @keyframes tira-asoma{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
}

/* La tira: un solo borde superior compartido; la enfocada mide el doble */
.tira-carril{position:absolute;inset:var(--t-borde,50%) 0 auto;height:var(--l-alto,240px);z-index:2;
  cursor:grab;touch-action:pan-y}
.tira.arrastrando .tira-carril{cursor:grabbing}
.tira-pista{display:flex;align-items:flex-start;gap:var(--l-hueco,8px);will-change:transform}
/* Todas las láminas miden lo mismo y ocupan siempre el mismo sitio: la que
   no está enfocada se RECORTA por abajo. Antes se les cambiaba la altura en
   píxeles desde JS, y ese cambio rehacía el layout de la pista justo mientras
   corría la transición del desplazamiento — de ahí el tirón al cambiar de
   pieza. El recorte se compone sin tocar el layout. */
.tira-l{position:relative;flex:0 0 auto;width:var(--l-ancho,180px);height:var(--l-alto,240px);
  overflow:hidden;padding:0;background:rgba(245,241,232,.06);
  clip-path:inset(0 0 50% 0);
  box-shadow:inset 0 0 0 1px rgba(176,141,87,0);
  transition:clip-path .62s cubic-bezier(.32,.72,0,1),box-shadow .62s cubic-bezier(.32,.72,0,1)}
.tira-l.activa{clip-path:inset(0 0 0 0);box-shadow:inset 0 0 0 1px rgba(176,141,87,.55)}
.tira-l img{width:100%;height:100%;object-fit:cover;object-position:50% 26%;display:block}
/* las no enfocadas se retiran un punto, sin volverse grises */
.tira-sombra{position:absolute;inset:0;background:var(--tinta);opacity:.16;transition:opacity .62s cubic-bezier(.32,.72,0,1)}
.tira-l.activa .tira-sombra{opacity:0}
.tira-l:focus-visible{outline:2px solid var(--oro-claro);outline-offset:2px}

/* Riel de posición */
.tira-riel{position:absolute;left:var(--t-margen,26px);bottom:clamp(16px,2.4vh,28px);width:min(220px,26vw);z-index:3}
.tira-cuenta{display:flex;justify-content:space-between;font-size:var(--t-etiqueta,11px);
  font-variant-numeric:tabular-nums;letter-spacing:.14em;color:rgba(245,241,232,.8);font-weight:600}
.tira-barra{position:relative;margin-top:9px;height:1px;background:rgba(245,241,232,.26)}
.tira-marca{position:absolute;inset:0 auto;height:1px;background:var(--marfil);
  transition:left .62s cubic-bezier(.32,.72,0,1)}

.tira-mandos{position:absolute;right:var(--t-margen,26px);bottom:clamp(16px,2.4vh,28px);z-index:3;display:flex;gap:9px}
.tira-b{width:42px;height:42px;display:grid;place-items:center;border:1px solid rgba(245,241,232,.32);
  color:var(--marfil);transition:background var(--t-r),border-color var(--t-r)}
.tira-b:hover{background:rgba(245,241,232,.12);border-color:var(--marfil)}
.tira-b svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}

@media(max-width:700px){
  .tira{height:clamp(440px,70svh,600px)}
  .tira-cabeza{align-content:flex-end}
  .tira-datos{width:100%;gap:18px}
  .tira-mandos{display:none}
}

/* ═══════ EL MURO — banda de ambiente sobre tinta ═══════
   La foto llega a sangre y se endereza al entrar. El texto va ARRIBA,
   nunca encima de la imagen: el manual prohíbe encimar elementos. */
.muro{background:var(--tinta);color:var(--marfil);padding:clamp(76px,10vh,130px) 0 clamp(44px,6vh,78px);overflow:clip}
.muro-h{max-width:760px;margin-bottom:clamp(34px,5vh,58px)}
.muro-h .kicker{color:var(--oro-claro)}
.muro-h h2{color:var(--marfil);font-size:clamp(36px,4.6vw,67px);line-height:1.1;font-weight:700;margin:14px 0 18px}
.muro-h p{color:rgba(245,241,232,.72);max-width:min(56ch,100%)}
.muro-foto{margin:0;perspective:1600px}
.muro-foto > div{transform-origin:50% 100%;will-change:transform;background:var(--tinta-2)}
.muro-foto img{width:100%;height:auto;aspect-ratio:16/7;object-fit:cover;
  box-shadow:0 30px 70px rgba(0,0,0,.45)}
@media(max-width:760px){.muro-foto img{aspect-ratio:4/3}}
.muro-foto figcaption{margin-top:16px;padding:0 clamp(20px,4vw,60px);font-size:10.5px;letter-spacing:.17em;
  text-transform:uppercase;color:rgba(245,241,232,.5);font-weight:600}

/* ═══════ EN TU ESPACIO ═══════ */
.espacios{padding:clamp(76px,10vh,130px) 0;background:var(--marfil-2)}
.esp-h{max-width:620px;margin-bottom:clamp(34px,5vh,56px)}
/* En pantalla ancha el bloque de entrada se abre a dos columnas: el titular
   manda a la izquierda y la bajada se apoya en su línea base a la derecha.
   Antes la mitad derecha quedaba vacía sin que eso significara nada. */
@media(min-width:900px){
  .esp-h{max-width:none;display:grid;grid-template-columns:1.08fr .92fr;column-gap:clamp(32px,5vw,86px);align-items:end}
  .esp-h .kicker{grid-column:1;grid-row:1}
  .esp-h h2{grid-column:1;grid-row:2;margin-top:14px}
  .esp-h p{grid-column:2;grid-row:2;margin-top:0;align-self:end;padding-bottom:.55em;max-width:44ch}
}
.esp-h h2{font-size:clamp(36px,5.6vw,72px);line-height:1.06;margin-top:14px;font-weight:500;letter-spacing:-.004em}
.esp-h p{color:var(--texto-2);margin-top:16px;max-width:min(52ch,100%)}
.esp-rejilla{display:grid;gap:clamp(12px,1.6vw,22px);grid-template-columns:repeat(2,minmax(0,1fr))}
@media(min-width:900px){.esp-rejilla{grid-template-columns:repeat(4,minmax(0,1fr))}}
.esp{position:relative;overflow:hidden;background:var(--arena);margin:0}
.esp img{width:100%;height:100%;object-fit:cover;transition:transform var(--t-lento)}
.esp:hover img{transform:scale(1.035)}
.esp figcaption{position:absolute;left:0;right:0;bottom:0;padding:26px 18px 15px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#fff;font-weight:600;text-shadow:0 1px 3px rgba(22,21,30,.55);background:linear-gradient(transparent,rgba(22,21,30,.30) 38%,rgba(22,21,30,.78))}
.esp{aspect-ratio:4/3}
@media(min-width:900px){
  /* Sin celdas de doble alto: todas las fotos de ambiente son apaisadas y
     una celda 1:2 las recortaba a una franja que ya no dice nada. La
     jerarquía la da la celda ancha, no una vertical forzada. */
  .esp-rejilla{grid-auto-rows:clamp(196px,21vw,272px)}
  .esp{aspect-ratio:auto}
  .esp-alta{grid-column:span 2}
  .esp-ancha{grid-column:span 3}
}

/* ═══════ TESTIMONIOS — muro en perspectiva (port del recurso 3) ═══════ */
.testi{position:relative;background:var(--tinta);color:var(--marfil);overflow:hidden;
  padding:clamp(76px,11vh,132px) 0 clamp(56px,8vh,92px)}
/* El tratamiento del fondo va horneado en el archivo, no en un filtro CSS. */
.testi-fondo{position:absolute;inset:0;z-index:0}
.testi-fondo img{width:100%;height:100%;object-fit:cover;object-position:center}
.testi-fondo::after{content:"";position:absolute;inset:0;
  background:linear-gradient(rgba(22,21,30,.82),rgba(22,21,30,.62) 42%,rgba(22,21,30,.86))}
.testi > .wrap,.testi-escena,.testi-nota{position:relative;z-index:1}

.testi-h{max-width:640px;margin-bottom:clamp(34px,5vh,58px)}
.testi-h .kicker{color:var(--oro-claro)}
.testi-h h2{color:var(--marfil);font-size:clamp(42px,5.8vw,84px);line-height:1.06;margin-top:14px;
  font-weight:700;letter-spacing:0}

/* De costado a costado: dos carriles horizontales en sentidos opuestos. */
.testi-escena{position:relative;display:flex;flex-direction:column;gap:clamp(16px,2vw,24px)}
.testi-fila{overflow:hidden}
.testi-pista{display:flex;align-items:stretch;gap:clamp(16px,2vw,24px);width:max-content;
  animation:desfilaTesti var(--dur,64s) linear infinite;will-change:transform}
.testi-fila.rev .testi-pista{animation-direction:reverse}
@keyframes desfilaTesti{to{transform:translate3d(-50%,0,0)}}
.testi-escena:hover .testi-pista{animation-play-state:paused}

.tarj-t{flex:0 0 auto;width:clamp(300px,26vw,380px);
  background:rgba(245,241,232,.97);border:1px solid rgba(245,241,232,.2);
  padding:24px 26px;border-radius:2px}
.tarj-t .quien{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.tarj-t .ini{flex:0 0 42px;width:42px;height:42px;border-radius:50%;background:var(--arena);
  display:grid;place-items:center;font-family:var(--display);font-size:18px;font-weight:700;color:var(--tinta)}
.tarj-t .n{display:block;font-size:16px;font-weight:600;line-height:1.25;color:var(--tinta)}
.tarj-t .d{display:block;font-size:12px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--texto-2);margin-top:3px;font-weight:500}
.tarj-t p{font-size:16.5px;line-height:1.6;color:var(--texto)}

.testi-velo{position:absolute;top:0;bottom:0;z-index:3;pointer-events:none;width:clamp(60px,9vw,150px)}
.testi-velo.l{left:0;background:linear-gradient(90deg,var(--tinta),transparent)}
.testi-velo.r{right:0;background:linear-gradient(270deg,var(--tinta),transparent)}
.testi-nota{margin-top:clamp(26px,3.4vh,40px);font-size:12px;letter-spacing:.12em;
  text-transform:uppercase;color:rgba(245,241,232,.55);font-weight:500}
@media(prefers-reduced-motion:reduce){.testi-pista{animation:none}}


/* ═══════ MENSAJE DIRECTO (contacto) ═══════
   Sin servidor detrás: el formulario compone el mensaje y lo entrega por el
   canal que elija quien escribe — el correo del sistema o WhatsApp. La
   dirección vive en una sola constante de gretta.js (CORREO). */
.msj{padding:clamp(76px,11vh,132px) 0 clamp(60px,9vh,110px)}
.msj-rejilla{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(32px,4vw,64px);align-items:start}
@media(min-width:940px){.msj-rejilla{grid-template-columns:.85fr 1.15fr}}
.msj-txt h2{font-size:clamp(34px,4.4vw,58px);line-height:1.07;margin-top:14px;font-weight:700}
.msj-txt p{margin-top:18px;color:var(--texto-2);font-size:clamp(16px,1.35vw,18.5px)}
.msj-form{display:flex;flex-direction:column;gap:20px}
.campo{display:flex;flex-direction:column;gap:9px}
.campo label{font-size:12.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--oro-texto);font-weight:600}
.campo input,.campo textarea{
  font-family:inherit;font-size:17px;color:var(--texto);background:var(--marfil);
  border:1px solid var(--linea);border-radius:2px;padding:15px 16px;width:100%;
  transition:border-color var(--t-r),background var(--t-r)}
.campo textarea{resize:vertical;min-height:140px;line-height:1.6}
.campo input::placeholder,.campo textarea::placeholder{color:var(--texto-2);opacity:.7}
.campo input:focus,.campo textarea:focus{outline:none;border-color:var(--oro);background:#fff}
.campo input[aria-invalid="true"],.campo textarea[aria-invalid="true"]{border-color:#a2452f}
.msj-error{color:#a2452f;font-size:15px}
.msj-vias{display:flex;flex-wrap:wrap;gap:13px;margin-top:4px}
.btn.linea{background:none;color:var(--tinta);border:1px solid var(--tinta)}
.btn.linea:hover{background:var(--tinta);color:var(--marfil)}
.msj-nota{font-size:14px;color:var(--texto-2)}

/* ═══════ PREGUNTAS FRECUENTES ═══════
   Acordeón con <details>: abre y cierra sin JavaScript, es navegable con
   teclado y lector de pantalla de origen. La sección va sobre arena para
   dar el contraste de fondo que el manual pide (la tinta manda ~30%). */
.faq{padding:clamp(76px,10vh,130px) 0;background:var(--marfil-2);border-top:1px solid var(--linea)}
.faq-h{max-width:620px;margin-bottom:clamp(28px,4.4vh,48px)}
.faq-h h2{font-size:clamp(36px,5.6vw,72px);line-height:1.06;margin-top:14px;font-weight:500;letter-spacing:-.004em}
.faq-lista{border-top:1px solid var(--arena)}
.faq-i{border-bottom:1px solid var(--arena)}
.faq-i summary{
  list-style:none;cursor:pointer;padding:26px 52px 26px 0;position:relative;
  font-family:var(--display);font-size:clamp(20px,2.4vw,27px);font-weight:400;
  color:var(--tinta);line-height:1.3;transition:color var(--t-r);
}
.faq-i summary::-webkit-details-marker{display:none}
.faq-i summary:hover{color:var(--oro-texto)}
.faq-i summary::after{
  content:"";position:absolute;right:6px;top:50%;width:13px;height:13px;
  border-right:1px solid var(--tinta);border-bottom:1px solid var(--tinta);
  transform:translateY(-70%) rotate(45deg);transition:transform var(--t);
}
.faq-i[open] summary::after{transform:translateY(-30%) rotate(-135deg)}
.faq-r{padding:0 clamp(20px,6vw,120px) 28px 0}
.faq-r p{color:var(--texto-2);max-width:62ch}
.faq-r a{color:var(--tinta);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--arena)}
.faq-r a:hover{text-decoration-color:var(--oro)}
.faq-pie{margin-top:clamp(34px,5vh,54px);display:flex;flex-wrap:wrap;align-items:center;gap:18px 26px}
.faq-pie p{color:var(--texto-2)}
.faq-vias{display:flex;flex-wrap:wrap;align-items:center;gap:14px 22px}
.faq-mail{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--tinta);border-bottom:1px solid var(--arena);padding-bottom:3px;transition:border-color var(--t-r)}
.faq-mail:hover{border-color:var(--oro)}
@media(prefers-reduced-motion:reduce){.faq-i summary::after{transition:none}}

/* ── Holgura bajo el encabezado en móvil ─────────────────────────────
   Con el menú en dos filas la cabecera mide 114px. Va al final del
   archivo a propósito: la regla @media(max-width:999px) del hero es
   posterior a la zona de navegación y pisaba este ajuste. ── */
@media(max-width:900px){
  .hm{padding-top:172px}
  .cab-pag{padding-top:174px}
}

/* ═══════ Aviso de privacidad ═══════ */
.legal{padding:clamp(64px,9vh,110px) 0 clamp(80px,12vh,140px);max-width:760px}
.legal h2{font-size:clamp(21px,2.2vw,27px);font-weight:600;margin:clamp(34px,4.6vh,52px) 0 12px;letter-spacing:-.018em}
.legal h2:first-child{margin-top:0}
.legal p{color:var(--texto-2);margin-bottom:13px}
.legal strong{color:var(--tinta);font-weight:600}
.legal a{color:var(--tinta);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--arena)}
.legal a:hover{text-decoration-color:var(--oro)}
.legal ul{margin:0 0 13px 0;padding-left:0;list-style:none}
.legal li{color:var(--texto-2);padding:9px 0 9px 22px;border-bottom:1px solid var(--linea);position:relative}
.legal li::before{content:"";position:absolute;left:0;top:1.05em;width:12px;height:1px;background:var(--oro)}
.legal-pie{margin-top:clamp(34px,4.6vh,52px);padding-top:22px;border-top:1px solid var(--linea);
  font-size:13px;color:var(--texto-2)}

/* Filtros en una sola tira deslizable en móvil: en tres filas ocupaban
   media pantalla antes de que se viera la primera obra. Los tiradores del
   borde avisan de que hay más a la derecha. */
@media(max-width:700px){
  .filtros{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none;
    scroll-snap-type:x proximity;
    margin-inline:calc(-1 * clamp(20px,4vw,60px));
    padding-inline:clamp(20px,4vw,60px);
    -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 18px,#000 calc(100% - 22px),transparent 100%);
            mask-image:linear-gradient(90deg,transparent 0,#000 18px,#000 calc(100% - 22px),transparent 100%)}
  .filtros::-webkit-scrollbar{display:none}
  .filtro{flex:0 0 auto;scroll-snap-align:start}
}

/* ═══════════════════════════════════════════════════════════
   TITULAR ROTATIVO — port a vanilla de `animated-hero`
   (React + Framer Motion). El original anima `y` con un spring
   de stiffness 50 y damping por defecto; aquí la misma curva se
   escribe como cubic-bezier con rebote corto (.22,1.18,.36,1) y
   la palabra que sale se retira a ±150px, igual que el original.
   La caja se estrecha o ensancha hasta el ancho de la palabra en
   foco: en el componente de origen la línea ocupa el ancho
   completo y la frase queda partida; en una línea de texto
   corrida eso no sirve.
   ═══════════════════════════════════════════════════════════ */
.rot-frase{display:inline-flex;flex-wrap:wrap;justify-content:center;align-items:baseline;
  column-gap:.34em;row-gap:.1em}
.rot-fijo{white-space:nowrap}
/* Un inline-block con `overflow:hidden` toma como línea base su BORDE
   INFERIOR, no la del texto que contiene: por eso la palabra que rotaba
   quedaba más alta que el resto de la frase. Se recorta con clip-path —que
   no toca el cálculo de la línea base— y un espacio de ancho cero en flujo
   fija la línea base real de la caja. */
.rot-caja{position:relative;display:inline-block;vertical-align:baseline;
  height:1.32em;line-height:1.32em;clip-path:inset(0);
  width:var(--rot-w,7ch);
  transition:width .56s cubic-bezier(.32,.72,0,1)}
.rot-caja::before{content:"\200B"}
.rot-p{position:absolute;left:0;top:0;white-space:nowrap;
  font-family:var(--sans);font-style:normal;font-weight:300;
  font-size:1em;line-height:1.32em;color:var(--oro-claro);
  opacity:0;transform:translateY(150%);
  transition:transform .72s cubic-bezier(.22,1.18,.36,1),opacity .4s ease-out}
.rot-p.sale{transform:translateY(-150%);opacity:0}
.rot-p.entra{transform:translateY(0);opacity:1}
@media(prefers-reduced-motion:reduce){
  /* sin movimiento la palabra sigue rotando, pero por fundido:
     el dato cambia igual y nadie se marea */
  .rot-p{transition:opacity .5s ease-out;transform:none}
  .rot-p.sale{transform:none}
  .rot-caja{transition:none}
}

/* ═══════════════════════════════════════════════════════════
   EN TU ESPACIO — port a vanilla de `scroll-expansion-hero`
   Las medidas son las del original (300→1550 de ancho,
   400→800 de alto, techos de 95vw y 85vh, desplazamiento del
   titular de 150vw en escritorio y 180vw en teléfono); solo
   cambia de dónde sale el progreso: del scroll real de la
   página sobre un carril pegajoso, no de un contador propio
   alimentado a base de preventDefault.
   ═══════════════════════════════════════════════════════════ */
.exp{background:var(--tinta);color:var(--marfil);position:relative}
.exp-carril{height:220svh;position:relative}
.exp-pega{position:sticky;top:0;height:100svh;overflow:clip;
  display:grid;place-items:center;isolation:isolate}

.exp-fondo{position:absolute;inset:0;z-index:0;opacity:var(--exp-fondo,1);will-change:opacity}
/* El fondo va en blanco y negro, como la arquitectura del hero: en la casa
   el color lo ponen las obras y el espacio que se abre, nunca el decorado.
   El tratamiento viene HORNEADO en `pent-14-bn.jpg`: como la opacidad de
   esta capa cambia en cada cuadro, dejar el filtro en CSS obligaba a
   recomponer la imagen filtrada todo el rato. */
.exp-fondo img{width:100%;height:100%;object-fit:cover;object-position:center}
.exp-tinte{position:absolute;inset:0;background:rgba(22,21,30,.5)}

.exp-centro{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center}
/* Lámina y titular ocupan la MISMA celda: el titular va encima, como en el
   original, donde el media es absoluto y el texto se apila sobre él. */
.exp-centro,.exp-titulo{grid-area:1/1}
/* La lámina se queda SIEMPRE en su tamaño final y lo que crece es la
   ventana por la que se la ve: `clip-path` se compone en la GPU, mientras
   que animar width/height obliga al navegador a rehacer el layout en cada
   cuadro — que era lo que trababa el desplazamiento. Va sin sombra a
   propósito: box-shadow se recortaría con el elemento y un drop-shadow
   obligaría a repintar el filtro en cada cuadro, que es el coste que
   estamos quitando. Sobre el fondo apagado la lámina ya se despega sola. */
.exp-lamina{position:relative;margin:0;overflow:hidden;
  width:min(1550px,95vw);height:min(800px,85svh);
  clip-path:inset(var(--exp-iy,calc((100% - 400px)/2)) var(--exp-ix,calc((100% - 300px)/2)));
  will-change:clip-path}
.exp-lamina img{width:100%;height:100%;object-fit:cover;display:block}
/* El velo del original va de .7 a .4; aquí termina más limpio (.12) porque
   al final la fotografía ES la escena y no hay texto encima que proteger. */
.exp-velo{position:absolute;inset:0;background:rgba(22,21,30,1);opacity:var(--exp-velo,.5)}

.exp-pie{display:flex;justify-content:center;gap:clamp(18px,4vw,44px);
  margin-top:18px;font-size:11px;letter-spacing:.22em;text-transform:uppercase;
  font-weight:600;color:var(--oro-claro);text-align:center;flex-wrap:wrap}

.exp-titulo{position:relative;z-index:2;display:flex;flex-direction:column;
  align-items:center;gap:.02em;text-align:center;pointer-events:none;
  font-size:clamp(44px,8.4vw,116px);line-height:.94;font-weight:500;
  letter-spacing:-.03em;color:var(--marfil)}
.exp-titulo .exp-izq,.exp-titulo .exp-der{display:block}
.exp-izq{transform:translate3d(calc(var(--exp-x,0) * -1),0,0)}
.exp-der{transform:translate3d(var(--exp-x,0),0,0)}
.exp-pie .exp-izq,.exp-pie .exp-der{transform:none}
.exp-pie .exp-izq{transform:translate3d(calc(var(--exp-x,0) * -.62),0,0)}
.exp-pie .exp-der{transform:translate3d(calc(var(--exp-x,0) * .62),0,0)}

.exp-cuerpo{position:relative;z-index:3;background:var(--tinta);
  padding:clamp(60px,9vh,110px) 0 clamp(88px,13vh,168px);
  opacity:var(--exp-cuerpo,0);transition:opacity .7s ease-out}
.exp-cuerpo .esp-h h3{color:var(--marfil);font-size:clamp(30px,4.4vw,58px);
  line-height:1.08;font-weight:500;letter-spacing:-.02em;margin-top:15px}
.exp-cuerpo .esp-h p{color:rgba(245,241,232,.72);max-width:min(52ch,100%);margin-top:16px}
.exp-cuerpo .esp-h .kicker{color:var(--oro-claro)}
.exp-cuerpo .esp figcaption{color:rgba(245,241,232,.6)}

/* Sin scroll animado el efecto no tiene sentido: el carril se colapsa a una
   sola pantalla, la lámina se muestra ya abierta y el cuerpo, visible. */
@media(prefers-reduced-motion:reduce){
  .exp-carril{height:auto}
  .exp-pega{position:static;height:auto;padding:clamp(70px,10vh,120px) 0}
  .exp-lamina{width:min(1240px,92vw);height:min(66svh,620px);clip-path:none;will-change:auto}
  .exp-velo{opacity:.12}
  .exp-fondo{opacity:.18}
  .exp-titulo .exp-izq,.exp-titulo .exp-der,
  .exp-pie .exp-izq,.exp-pie .exp-der{transform:none}
  .exp-titulo{flex-direction:row;gap:.28em;flex-wrap:wrap;justify-content:center;
    margin-bottom:clamp(26px,4vh,44px)}
  .exp-cuerpo{opacity:1}
}

/* ═══════════════════════════════════════════════════════════
   LA COLECCIÓN EN UN GESTO — port a vanilla de
   `scroll-morph-hero`. Las posiciones las escribe el JS pieza a
   pieza (es geometría, no maquetación); aquí quedan la caja,
   el volteo en 3D y el orden de las capas.
   ═══════════════════════════════════════════════════════════ */
.morfo{background:var(--marfil);position:relative}
.morfo-carril{height:340svh;position:relative}
.morfo-pega{position:sticky;top:0;height:100svh;overflow:clip;
  display:grid;place-items:center;isolation:isolate}

/* Texto de apertura: se apaga cuando el círculo empieza a abrirse */
.morfo-intro{grid-area:1/1;text-align:center;z-index:0;pointer-events:none;
  opacity:var(--mf-intro,1);transition:opacity .5s ease-out}
.morfo-i1{font-family:var(--display);font-size:clamp(32px,4.6vw,64px);font-weight:700;line-height:1.06;
  line-height:1.2;color:var(--tinta);font-weight:500;letter-spacing:-.01em}
.morfo-i2{margin-top:22px;font-size:13px;letter-spacing:.28em;text-transform:uppercase;
  color:var(--texto-2);font-weight:600}

/* Rótulo del arco: entra cuando la cúpula ya está formada */
.morfo-titulo{grid-area:1/1;align-self:start;justify-self:center;text-align:center;
  z-index:3;max-width:min(56ch,88vw);pointer-events:none;
  padding-top:clamp(84px,13svh,124px);
  opacity:var(--mf-rotulo,0);transform:translateY(calc((1 - var(--mf-rotulo,0)) * 18px));
  transition:opacity .5s ease-out,transform .5s ease-out}
.morfo-titulo h2{font-size:clamp(38px,6vw,84px);line-height:1;font-weight:500;
  letter-spacing:-.02em;margin-top:12px}
.morfo-sub{margin-top:18px;color:var(--texto-2);font-size:17px;
  max-width:48ch;margin-inline:auto}
.morfo-titulo .ver{display:inline-block;margin-top:24px;font-size:13px;letter-spacing:.2em;
  text-transform:uppercase;border-bottom:1px solid var(--oro);padding-bottom:5px;
  transition:color var(--t-r);pointer-events:auto}
.morfo-titulo .ver:hover{color:var(--oro-texto)}

.morfo-plano{grid-area:1/1;position:relative;width:100%;height:100%;z-index:2}

/* Cada lámina: el JS escribe --x, --y, --g (giro) y --e (escala) */
.morfo-l{position:absolute;left:50%;top:50%;width:var(--mf-w,64px);height:var(--mf-h,96px);
  margin:calc(var(--mf-h,96px) / -2) 0 0 calc(var(--mf-w,64px) / -2);
  padding:0;perspective:900px;
  transform:translate3d(var(--x,0px),var(--y,0px),0) rotate(var(--g,0deg)) scale(var(--e,1));
  opacity:var(--o,1);
  transition:transform var(--mf-t,1.1s) cubic-bezier(.22,.72,.14,1),opacity .6s ease-out}
.morfo-cara{display:block;position:relative;width:100%;height:100%;transform-style:preserve-3d;
  transition:transform .62s cubic-bezier(.32,.72,0,1)}
.morfo-l:hover .morfo-cara,.morfo-l:focus-visible .morfo-cara{transform:rotateY(180deg)}
.morfo-a,.morfo-b{display:block;position:absolute;inset:0;overflow:hidden;backface-visibility:hidden;
  box-shadow:0 6px 20px rgba(22,21,30,.24)}
.morfo-a img{width:100%;height:100%;object-fit:cover;display:block}
.morfo-b{transform:rotateY(180deg);background:var(--tinta);color:var(--marfil);
  display:grid;align-content:center;justify-items:center;gap:5px;padding:8px;text-align:center}
.morfo-b .mb-t{display:block;font-family:var(--display);font-size:13px;line-height:1.15;font-weight:500}
.morfo-b .mb-v{display:block;font-size:7.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--oro-claro);font-weight:600}
.morfo-l:focus-visible{outline:2px solid var(--oro);outline-offset:4px;border-radius:2px}

/* Sin movimiento: nada de coreografía. Las piezas se muestran en una
   retícula quieta y el rótulo, visible desde el principio. */
@media(prefers-reduced-motion:reduce){
  .morfo-carril{height:auto}
  .morfo-pega{position:static;height:auto;padding:clamp(80px,12vh,140px) 0;display:block}
  .morfo-intro{display:none}
  .morfo-titulo{opacity:1;transform:none;padding-top:0;margin:0 auto clamp(34px,5vh,54px);max-width:none}
  .morfo-plano{height:auto;display:flex;flex-wrap:wrap;gap:14px;justify-content:center;
    max-width:1320px;margin:0 auto;padding-inline:clamp(20px,4vw,60px)}
  .morfo-l{position:static;margin:0;transform:none;opacity:1;
    width:clamp(96px,12vw,132px);height:auto;aspect-ratio:2/3}
  .morfo-l:hover .morfo-cara{transform:none}
  .morfo-b{display:none}
}

/* Modo revisión: sin transiciones ni animaciones, para que una captura
   automatizada retrate el estado final y no un fotograma del fundido.
   Solo se activa con ?qa=1 (lo pone gretta.js); la visita normal no lo ve. */
html.qa *,html.qa *::before,html.qa *::after{
  transition-duration:0s!important;animation-duration:0s!important;animation-delay:0s!important}
