/* ============================================================
   ÍNDICE DE OBRA — solo lo propio de esta página.

   Hereda la paleta, la tipografía y las utilidades de ../assets/d.css y
   reutiliza la cabecera fija de obra.css (.ob-bar). No redefine ni un color
   ni una fuente: un segundo :root es la vía rápida a que dos páginas del
   mismo sitio dejen de parecerse.
   ============================================================ */

/* El max-width vive en el PÁRRAFO, no en la sección: con él arriba, el titular
   se estrangulaba a 74ch y cada línea partía en dos. El texto de lectura sí
   quiere medida corta; el titular quiere todo el ancho. */
.ix-head{
  padding:clamp(96px,13vh,150px) var(--gut) clamp(28px,4vh,44px);
}
.ix-head .p{ max-width:74ch }

/* --- una línea de servicio --- */
.ix-line{ padding:0 var(--gut) clamp(34px,5vh,58px) }
.ix-line-head{
  display:flex; align-items:baseline; gap:clamp(10px,1.6vw,20px);
  flex-wrap:wrap; padding:clamp(16px,2.4vh,26px) 0 clamp(14px,2vh,22px);
  border-top:1px solid color-mix(in oklab, var(--ink) 18%, transparent);
}
.ix-code{ color:var(--acc) }
.ix-name{ margin:0 }
.ix-meta{ margin:0; color:var(--ink-2); margin-left:auto; text-align:right }

.ix-rows{ display:grid; gap:2px }

/* Una fila es una plancha + su ficha. En móvil se apila; en cuanto hay ancho,
   la plancha va a la izquierda con ancho fijo para que todas las fichas
   arranquen en la misma vertical: una lista se lee por su columna de texto. */
.ix-row{
  position:relative;
  display:grid; gap:clamp(12px,2vw,26px);
  transition:background .24s var(--ease-s), border-color .24s var(--ease-s);
  background:color-mix(in oklab, var(--deep) 86%, transparent);
  padding:clamp(12px,1.6vw,18px);
  border:1px solid color-mix(in oklab, var(--ink) 10%, transparent);
}
@media (min-width:760px){
  /* La columna del plano es FIJA y el plano se centra dentro. Con la columna a
     `auto` cada fila arrancaba su texto en una vertical distinta según la forma
     de la pieza, y una lista se lee por su columna de texto: quedaba dentada. */
  .ix-row{ grid-template-columns:240px minmax(0,1fr); align-items:start }
}

/* CAJA UNIFORME 4:5, y las caras se salvan con el punto focal calculado, no con la
   forma de la caja. Se probó dejar que cada miniatura tomara su proporción real y
   se veía peor: un 16:9 quedaba como una tira apaisada diminuta al lado de un 9:16
   alto, y la lista perdía el ritmo. Con caja uniforme la página se lee, y lo que
   evita el recorte de cabezas es `focalY()` en indice.js, que limita cuánto se
   puede comer por arriba (ver el porqué allí).

   Los apaisados son la excepción: entran en `contain` en vez de `cover`, porque un
   16:9 recortado a 4:5 pierde el 55 % del ancho y en Glass Bottle eso se come la
   tipografía, que ES la pieza (MARCA.md §11.2). */
.ix-shot{
  position:relative; margin:0; overflow:hidden; background:var(--deep);
  width:100%; aspect-ratio:4/5;
}
.ix-shot[data-land="1"] img, .ix-shot[data-land="1"] video{ object-fit:cover }
/* `contain` dejaba el apaisado como una tira en medio de dos bandas vacías y la
   etiqueta flotando en el hueco: uniforme pero pobre. Se recorta centrado, que en
   estas tres piezas —lata, frasco, cartel— deja el sujeto entero. La excepción va
   por dato: `fit: 'contain'` en works.js para la pieza cuyo contenido llega a los
   bordes, no por nombre en el CSS. */
.ix-shot[data-fit="contain"] img, .ix-shot[data-fit="contain"] video{ object-fit:contain }
@media (max-width:759px){
  .ix-shot{ width:min(100%, 300px); justify-self:center }
}
.ix-shot img, .ix-shot video{
  position:absolute; inset:0; width:100%; height:100%; object-fit:cover; display:block;
}
.ix-shot video{ z-index:2; background:#000 }

/* LA CAJA ENTERA ES EL BOTÓN. Antes había un play de 44 px abajo a la izquierda
   y el vídeo se reproducía dentro de la miniatura de 290 px: para un estudio
   audiovisual, lo contrario de enseñar. Ahora el <button> es la plancha, el
   disparador va centrado y grande, y al pasar por encima la pieza ya se mueve —
   así no hay que averiguar nada. */
.ix-shot--go{
  border:0; padding:0; display:block;
  cursor:var(--cur-p, pointer); color:inherit; font:inherit; text-align:left;
}
/* La pista de que la miniatura se abre. Pequeña, en la esquina de abajo y con la
   misma familia y tamaño que la etiqueta de sonido que ya vivía arriba: no tapa el
   plano, que era la queja. Se enciende en acento cuando la fila se resalta. */
.ix-cue{
  position:absolute; inset:auto auto 10px 10px; z-index:3; pointer-events:none;
  background:color-mix(in oklab, var(--deep) 78%, transparent);
  padding:.24em .5em; color:var(--ink-2); opacity:.82;
  transition:background .22s var(--ease-s), color .22s var(--ease-s),
             opacity .22s var(--ease-s);
}
.ix-row[data-go="1"]:hover .ix-cue, .ix-shot--go:focus-visible .ix-cue{
  background:var(--acc); color:var(--deep); opacity:1;
}
/* El resalte lo dispara LA FILA, no la miniatura: quien pasa el cursor lo pasa
   por el nombre de la marca, y que no ocurriera nada ahí hacía la página muda. */
.ix-row[data-go="1"]{ cursor:var(--cur-p, pointer) }
.ix-row[data-go="1"]:hover, .ix-row[data-go="1"]:focus-within{
  background:color-mix(in oklab, var(--raise) 62%, transparent);
  border-color:color-mix(in oklab, var(--acc) 52%, transparent);
}
/* el filete de acento entra desde la izquierda: es el gesto de la casa —una barra
   que se rellena— y no un borde que se enciende de golpe */
.ix-row[data-go="1"]::before{
  content:""; position:absolute; inset:0 auto 0 0; width:2px; z-index:4;
  background:var(--acc); transform:scaleY(0); transform-origin:top;
  transition:transform .3s var(--ease-s);
}
.ix-row[data-go="1"]:hover::before, .ix-row[data-go="1"]:focus-within::before{ transform:scaleY(1) }

.ix-row[data-go="1"]:hover .ix-brand{ color:var(--acc) }
.ix-shot--go:focus-visible{ outline:2px solid var(--acc); outline-offset:3px }
.ix-row[data-go="1"]:hover img{ transform:scale(1.03) }
.ix-shot img{ transition:transform .5s var(--ease-s) }
.ix-brand{ transition:color .22s var(--ease-s) }
.ix-sound{
  position:absolute; inset:10px 10px auto auto; z-index:3;
  background:color-mix(in oklab, var(--deep) 82%, transparent);
  padding:.24em .5em; color:var(--ink);
}

.ix-brand{ margin:0 }
.ix-brand small{
  display:block; font-family:var(--text); font-weight:400; text-transform:none;
  letter-spacing:0; font-size:.92rem; color:var(--ink-2); margin-top:.35em;
}
.ix-sector{ margin:.7em 0 0; color:var(--acc) }
.ix-blurb{ margin:.85em 0 0; max-width:64ch }

/* La ficha técnica: cifra grande, etiqueta debajo. Es la voz del estudio —la
   especificación es el argumento— y de paso hace la fila escaneable. */
.ix-spec{
  display:flex; flex-wrap:wrap; gap:clamp(14px,2.4vw,30px);
  margin:clamp(14px,2vh,20px) 0 0;
}
.ix-spec div{ margin:0 }
.ix-spec dd{
  margin:0; font-family:var(--display); font-variation-settings:"wdth" 76,"wght" 760;
  font-size:1.15rem; line-height:1;
}
.ix-spec dt{
  font-family:var(--mono); font-size:.66rem; letter-spacing:.1em;
  text-transform:uppercase; color:var(--ink-2); margin-top:.4em;
}

.ix-link{ margin:clamp(14px,2vh,20px) 0 0 }
.ix-more{
  font-family:var(--mono); font-size:.76rem; letter-spacing:.06em;
  text-transform:uppercase; color:var(--acc); text-decoration:none;
  border-bottom:1px solid color-mix(in oklab, var(--acc) 45%, transparent);
  padding-bottom:2px;
}
.ix-more:hover{ border-bottom-color:var(--acc) }

/* --- cierre --- */
.ix-end{
  padding:clamp(30px,5vh,54px) var(--gut) clamp(60px,9vh,110px);
  border-top:1px solid color-mix(in oklab, var(--ink) 18%, transparent);
  display:grid; gap:clamp(16px,2.6vh,26px); max-width:78ch;
}




/* ============================================================
   LA BARRA DE LÍNEAS
   Pegada bajo la cabecera fija, cuya altura la MIDE el JS (--ix-barh): escrita
   a mano se descuadra en cuanto la cabecera cambia de alto. En móvil se
   desplaza en horizontal en vez de apilarse — apilada ocupaba media pantalla.
   ============================================================ */
.ix-nav{
  position:sticky; top:var(--ix-barh, 76px); z-index:20;
  display:flex; align-items:center; gap:clamp(10px,1.6vw,18px);
  margin:0 0 clamp(14px,2.4vh,26px); padding:10px var(--gut);
  background:color-mix(in oklab, var(--deep) 92%, transparent);
  border-top:1px solid color-mix(in oklab, var(--ink) 14%, transparent);
  border-bottom:1px solid color-mix(in oklab, var(--ink) 14%, transparent);
  backdrop-filter:blur(14px) saturate(1.25);
}
.ix-nav-t{ color:var(--ink-2); white-space:nowrap; flex:0 0 auto }
@media (max-width:700px){ .ix-nav-t{ display:none } }

.ix-nav-list{
  display:flex; gap:6px; overflow-x:auto; overflow-y:hidden;
  scrollbar-width:none; -ms-overflow-style:none;
  padding:2px 0; flex:1 1 auto;
}
.ix-nav-list::-webkit-scrollbar{ display:none }

.ix-nav-a{
  display:inline-flex; align-items:center; gap:.5em; flex:0 0 auto;
  font-family:var(--mono); font-size:.72rem; letter-spacing:.06em;
  text-transform:uppercase; text-decoration:none; white-space:nowrap;
  color:var(--ink-2); padding:.5em .78em;
  border:1px solid color-mix(in oklab, var(--ink) 16%, transparent);
  transition:color .2s var(--ease-s), border-color .2s var(--ease-s),
             background .2s var(--ease-s);
}
.ix-nav-a:hover{ color:var(--ink); border-color:color-mix(in oklab, var(--ink) 42%, transparent) }
.ix-nav-a[aria-current="true"]{
  color:var(--deep); background:var(--acc); border-color:var(--acc);
}
.ix-nav-c{
  font-size:.66rem; opacity:.72;
  padding-left:.5em; border-left:1px solid currentColor;
}

/* el salto no puede dejar el titular debajo de la cabecera + la barra */
.ix-line{ scroll-margin-top:calc(var(--ix-barh, 76px) + 62px) }

/* ============================================================
   EL TITULAR ANIMADO
   Cada glifo en su caja, medida sobre la letra real. Sin caja fija, un glifo
   ancho al azar re-parte la línea y el bloque entero salta.
   ============================================================ */
/* Las dos líneas del titular. La segunda va en acento en los dos estados: en el
   manifiesto es el remate y en el nombre es «Approved.» — el naranja carga
   siempre la mitad que cierra, igual que en el hero. */
.ix-h{
  margin:.28em 0 .5em;
  /* El suelo del cuerpo vive AQUÍ, no en el JS: es la hoja la que manda el tamaño
     y ajusta() solo lo lee. Coincide con el mínimo del clamp de .d--xl. */
  --ix-h-min:2.1rem;
  /* Y el contenido se alinea ABAJO. Si un estado no cabe en una línea y parte, el
     hueco que sobra queda ARRIBA, contra el aire de la cabecera, en vez de abrirse
     entre el titular y el párrafo — que es donde se veía como un agujero. */
  display:flex; flex-direction:column; justify-content:flex-end;
}
.ix-ln{ display:block }
.ix-h i{ font-style:normal }
.ix-h em{ font-style:normal; color:var(--acc) }

.ix-gw{ display:inline-block; white-space:nowrap }
.ix-gc{ display:inline-block; text-align:center }

/* ============================================================
   LA PIEZA EN GRANDE
   ============================================================ */
.ix-over{
  position:fixed; inset:0; z-index:60;
  display:grid; place-items:center; padding:clamp(14px,3vw,40px);
  background:color-mix(in oklab, var(--deep) 88%, transparent);
  backdrop-filter:blur(10px);
}
.ix-over[hidden]{ display:none }

.ix-over-in{ display:grid; gap:14px; justify-items:center; max-width:100% }

/* La caja toma la proporción del film y se limita por ancho Y por alto: así un
   9:16 no se sale por arriba y un 16:9 no se queda diminuto (regla 8). */
.ix-over-box{
  --ar:0.5625;
  width:min(92vw, calc((88vh - 60px) * var(--ar)));
  aspect-ratio:var(--ar);
  background:#000; position:relative; overflow:hidden;
  box-shadow:0 30px 90px -20px rgb(0 0 0 / .8);
}
.ix-over-box video{
  position:absolute; inset:0; width:100%; height:100%; display:block;
  object-fit:contain; background:#000;
}
.ix-over-cap{
  margin:0; display:flex; gap:.7em; align-items:baseline; flex-wrap:wrap;
  justify-content:center; text-align:center; color:var(--ink-2);
}
.ix-over-cap b{
  font-family:var(--display); font-variation-settings:"wdth" 92,"wght" 780;
  text-transform:uppercase; letter-spacing:-.01em; color:var(--ink);
  font-size:1.05rem;
}
.ix-over-snd{ color:var(--acc) }

/* El aviso no es letra pequeña escondida: se lee. Con un filete de acento
   delante para que se distinga del pie y no parezca un descargo legal. */
.ix-over-disc{
  margin:0; max-width:62ch; text-align:center;
  color:var(--ink-2); font-size:.7rem; letter-spacing:.04em; line-height:1.6;
  text-transform:none; padding-top:10px;
  border-top:1px solid color-mix(in oklab, var(--acc) 40%, transparent);
}

.ix-over-x{
  position:absolute; inset:clamp(12px,2vw,22px) clamp(12px,2vw,22px) auto auto;
  z-index:2; width:44px; height:44px; border:1px solid color-mix(in oklab, var(--ink) 30%, transparent);
  background:color-mix(in oklab, var(--deep) 70%, transparent); color:var(--ink);
  cursor:var(--cur-p, pointer); display:grid; place-items:center; font-size:.95rem;
  transition:background .2s var(--ease-s), border-color .2s var(--ease-s);
}
.ix-over-x:hover{ background:var(--acc); border-color:var(--acc); color:var(--deep) }

@media (prefers-reduced-motion: reduce){
  .ix-cue, .ix-nav-a, .ix-over-x, .ix-shot img, .ix-row, .ix-brand{ transition:none }
  .ix-row[data-go="1"]::before{ transition:none; transform:scaleY(1); opacity:0 }
  .ix-row[data-go="1"]:hover::before{ opacity:1 }
  .ix-row[data-go="1"]:hover img{ transform:none }
}


/* ============================================================
   EL CARRUSEL DE BODEGÓN
   Un still life son seis o doce planos del mismo producto: lo que hay que
   enseñar es la serie, y un vídeo ahí no existe. El disparador lleva el
   NÚMERO de planos en vez de un glifo — un círculo con un 6 dentro dice
   «hay seis cosas que ver» sin que haya que aprender un icono.
   ============================================================ */

/* la foto que pasa al hover: cruce corto, sin parpadeo */
.ix-shot[data-cyc="1"] img{ transition:opacity .18s linear, transform .5s var(--ease-s) }

/* --- el visor en modo serie --- */
.ix-over-box.is-gal{ background:var(--deep) }
.ix-over-box.is-gal img{
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:contain; display:block;
}
/* PEGADAS AL VISOR, NO A LA IMAGEN. Estaban dentro de .ix-over-box, que cambia de
   tamaño con la proporción de cada foto: al pasar de plano la flecha se movía
   debajo del cursor y el clic siguiente caía fuera. Ahora están a una distancia
   fija del borde de la pantalla y a media altura, así que se puede pasar la serie
   entera sin mover el ratón un píxel.
   Y son grandes: 56 px de lado, muy por encima del mínimo de 44 px que necesita
   un objetivo táctil para acertarse con el pulgar. */
.ix-gal-nav{
  position:fixed; top:50%; transform:translateY(-50%); z-index:64;
  width:clamp(48px,4vw,60px); aspect-ratio:1; border:0;
  background:color-mix(in oklab, var(--deep) 74%, transparent);
  color:var(--ink); font-size:1.7rem; line-height:1;
  display:grid; place-items:center; cursor:var(--cur-p, pointer);
  backdrop-filter:blur(6px);
  border:1px solid color-mix(in oklab, var(--ink) 24%, transparent);
  transition:background .2s var(--ease-s), color .2s var(--ease-s),
             border-color .2s var(--ease-s);
}
.ix-gal-nav[hidden]{ display:none }
.ix-gal-nav:hover, .ix-gal-nav:focus-visible{
  background:var(--acc); color:var(--deep); border-color:var(--acc);
}
.ix-gal-prev{ left:clamp(8px,2vw,26px) }
.ix-gal-next{ right:clamp(8px,2vw,26px) }
.ix-gal-n{
  font-family:var(--mono); color:var(--acc); letter-spacing:.08em;
  font-variant-numeric:tabular-nums;
}

@media (prefers-reduced-motion: reduce){
  .ix-gal-nav{ transition:none }
  .ix-shot[data-cyc="1"] img{ transition:none }
}
