/*
  Galerías: grilla justificada (Fotografía, años del portafolio y
  colecciones) y, en años y colecciones, la vista "carrusel" tipo mazo
  de cartas (galeria.js).
*/

/*
  ---------- Grilla justificada ----------
  Cada foto crece en proporción a su formato (--r = ancho/alto), así
  las filas quedan parejas sin recortar ninguna foto. El ::after
  absorbe el espacio de la última fila para que no se estire.
*/
.photo-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  padding: 0 var(--space-3) var(--space-5);
  max-width: var(--max-width);
  margin: 0 auto;
}

.photo-grid::after {
  content: "";
  flex-grow: 1000;
}

.photo-grid a {
  /* calc(): --r viene como "ancho/alto" y flex-grow necesita un número */
  flex-grow: calc(var(--r));
  flex-basis: calc(var(--r) * 15rem);
  display: block;
  cursor: zoom-in;
  background: var(--c-line);
}

.photo-grid img {
  width: 100%;
  height: auto;
  aspect-ratio: var(--r);
}

/* hover: la foto sube apenas */
@media (hover: hover) {
  .photo-grid img {
    transition: transform 0.6s cubic-bezier(0.22, 0.61, 0.36, 1);
  }

  .photo-grid a:hover img,
  .photo-grid a:focus-visible img {
    transform: translateY(-6px);
  }
}

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

@media (max-width: 640px) {
  .photo-grid {
    padding-left: var(--space-2);
    padding-right: var(--space-2);
  }

  /* dos fotos horizontales por fila en celular */
  .photo-grid a {
    flex-basis: calc(var(--r) * 7rem);
  }

  /* la última fila también llena el ancho, así no queda corrida a la izquierda */
  .photo-grid::after {
    content: none;
  }
}

/* ---------- Selector de vista ---------- */
.gallery-views {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem 1.25rem;
  max-width: var(--max-width);
  margin: 0 auto;
  padding: 0 var(--space-3) var(--space-3);
}

.gallery-views button {
  background: none;
  border: none;
  padding: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1rem;
  color: var(--c-fg-muted);
  cursor: pointer;
}

.gallery-views button[aria-pressed="true"] {
  color: var(--c-fg);
  text-decoration: underline;
  text-decoration-thickness: from-font;
  text-underline-offset: 0.15em;
}

.gallery-empty {
  max-width: var(--max-width);
  margin: 0 auto;
  padding: 0 var(--space-3) var(--space-5);
  font-style: italic;
  color: var(--c-fg-muted);
}

/*
  ---------- Carrusel: mazo de cartas ----------
  galeria.js ubica cada carta con transform (y --d = distancia a la del
  frente). La del frente, nítida; las de atrás, abanicadas hacia la
  derecha como naipes, con vidrio esmerilado (blur + velo blanco).
*/
.gallery.is-carousel .photo-grid {
  position: relative;
  display: block;
  height: var(--stage-h, min(72vh, 720px));
  padding: 0;
  max-width: none;
  overflow: hidden;
  touch-action: pan-y;
}

.gallery.is-carousel .photo-grid::after {
  content: none;
}

.gallery.is-carousel .photo-grid a {
  position: absolute;
  left: 0;
  top: 0;
  background: none;
  transform-origin: 50% 50%;
  will-change: transform, opacity, filter;
  cursor: pointer;
}

.gallery.is-carousel .photo-grid a.is-front {
  cursor: zoom-in;
}

/* el mazo se arrastra con mouse o dedo (sin arrastre nativo de imagen ni selección) */
.gallery.is-carousel .photo-grid {
  cursor: grab;
  -webkit-user-select: none;
  user-select: none;
}

.gallery.is-carousel .photo-grid a,
.gallery.is-carousel .photo-grid img {
  -webkit-user-drag: none;
}

.gallery.is-dragging .photo-grid,
.gallery.is-dragging .photo-grid a {
  cursor: grabbing;
}

/* mientras se arrastra, todo sigue al puntero sin retraso */
.gallery.is-dragging .photo-grid a,
.gallery.is-dragging .photo-grid a::after {
  transition: none;
}

.gallery.is-carousel .photo-grid img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  transform: none;
}

/* velo de vidrio esmerilado sobre las cartas de atrás */
.gallery.is-carousel .photo-grid a::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--c-bg);
  opacity: var(--veil, 0);
  transition: opacity 0.7s cubic-bezier(0.22, 0.61, 0.36, 1);
  pointer-events: none;
}

/* transiciones activas solo cuando galeria.js lo indica (no durante el FLIP inicial) */
.gallery.is-animating .photo-grid a {
  transition:
    transform 0.8s cubic-bezier(0.22, 0.61, 0.36, 1),
    opacity 0.8s cubic-bezier(0.22, 0.61, 0.36, 1),
    filter 0.8s cubic-bezier(0.22, 0.61, 0.36, 1);
}

/* la carta que sale hacia la izquierda se desvanece recién a mitad de camino,
   así se la ve irse (y al volver, aparece enseguida) */
.gallery.is-animating .photo-grid a.is-gone {
  transition:
    transform 0.8s cubic-bezier(0.22, 0.61, 0.36, 1),
    opacity 0.45s ease 0.3s,
    filter 0.8s cubic-bezier(0.22, 0.61, 0.36, 1);
}

.gallery-carousel-ui {
  display: none;
  max-width: var(--max-width);
  margin: 0 auto;
  padding: var(--space-2) var(--space-3) var(--space-5);
  align-items: center;
  gap: var(--space-2);
}

.gallery.is-carousel .gallery-carousel-ui {
  display: flex;
}

/* mismos controles que la rockola y el lightbox */
.gallery-carousel-ui button {
  background: none;
  border: 1px solid var(--c-line);
  color: var(--c-fg);
  width: 2.5rem;
  height: 2.5rem;
  font-size: 1.1rem;
  cursor: pointer;
  flex: none;
}

.gallery-carousel-ui button:disabled {
  opacity: 0.3;
  cursor: default;
}

.gallery-count {
  color: var(--c-fg-muted);
  font-size: 0.85rem;
  font-family: var(--font-display);
  font-variant-numeric: tabular-nums;
  min-width: 4.5ch;
  flex: none;
}

/* ficha de la obra del frente: nombre, fecha, técnica */
.gallery-ficha {
  margin: 0 0 0 auto;
  text-align: right;
  font-family: var(--font-serif);
  color: var(--c-fg-muted);
  font-size: 0.95rem;
}

.gallery-ficha .gallery-ficha-title {
  color: var(--c-fg);
  font-style: italic;
}

@media (max-width: 640px) {
  .gallery {
    --stage-h: 62vh;
  }

  .gallery-views,
  .gallery-empty,
  .gallery-carousel-ui {
    padding-left: var(--space-2);
    padding-right: var(--space-2);
  }

  .gallery-carousel-ui {
    flex-wrap: wrap;
  }

  .gallery-ficha {
    flex-basis: 100%;
    text-align: left;
    margin: 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .gallery.is-animating .photo-grid a {
    transition: none;
  }
}
