/* ==========================================================================
   Photo Gallery page
   ========================================================================== */

.gallery-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  margin-bottom: var(--space-md);
}
.gallery-count {
  font-size: 0.85rem;
  color: var(--gray-500);
}

.photo-mosaic {
  columns: 2;
  column-gap: 0.8rem;
}
@media (min-width: 640px) { .photo-mosaic { columns: 3; } }
@media (min-width: 1000px) { .photo-mosaic { columns: 4; } }

.mosaic-item {
  display: block;
  width: 100%;
  break-inside: avoid;
  margin-bottom: 0.8rem;
  border-radius: var(--radius-sm);
  overflow: hidden;
  position: relative;
  cursor: zoom-in;
  background: var(--charcoal);
  border: 1px solid rgba(0,0,0,0.06);
  opacity: 0;
  animation: card-in 560ms var(--ease-out) both;
}
.mosaic-item img {
  width: 100%;
  height: auto;
  display: block;
  transition: transform var(--dur-med) var(--ease-out);
}
.mosaic-item:focus-visible img { transform: scale(1.05); }
.mosaic-item::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(0deg, rgba(0,0,0,0.55), transparent 45%);
  opacity: 0;
  transition: opacity var(--dur-fast);
}
.mosaic-item:focus-visible::after { opacity: 1; }
.mosaic-item .mosaic-zoom {
  position: absolute;
  right: 0.6rem; bottom: 0.6rem;
  width: 30px; height: 30px;
  border-radius: 50%;
  background: rgba(0,0,0,0.55);
  color: #fff;
  display: flex; align-items: center; justify-content: center;
  opacity: 0;
  transform: translateY(6px);
  transition: opacity var(--dur-fast), transform var(--dur-fast);
}
.mosaic-item:focus-visible .mosaic-zoom { opacity: 1; transform: none; }
@media (hover: hover) and (pointer: fine) {
  .mosaic-item:hover img { transform: scale(1.05); }
  .mosaic-item:hover::after { opacity: 1; }
  .mosaic-item:hover .mosaic-zoom { opacity: 1; transform: none; }
}

/* ---------- Skeleton loading state ---------- */
.mosaic-skeleton {
  columns: 2;
  column-gap: 0.8rem;
}
@media (min-width: 640px) { .mosaic-skeleton { columns: 3; } }
@media (min-width: 1000px) { .mosaic-skeleton { columns: 4; } }
.skeleton-tile {
  break-inside: avoid;
  margin-bottom: 0.8rem;
  border-radius: var(--radius-sm);
  background: linear-gradient(100deg, var(--gray-300) 30%, #ececec 50%, var(--gray-300) 70%);
  background-size: 300% 100%;
  animation: skeleton-shimmer 1.6s ease-in-out infinite;
}
@keyframes skeleton-shimmer { to { background-position: -300% 0; } }

/* ---------- Empty / error state ---------- */
.gallery-state {
  display: none;
  text-align: center;
  padding: var(--space-xl) var(--space-sm);
  color: var(--gray-500);
  border: 1px dashed var(--gray-300);
  border-radius: var(--radius-lg);
}
.gallery-state.is-active { display: block; }
.gallery-state svg { margin-inline: auto; margin-bottom: 1rem; color: var(--neon-magenta); }
