.image-library-block {
  border-top: 1px solid var(--line);
}

.gallery-shell {
  margin-top: 2.4rem;
  padding: clamp(1.2rem, 3vw, 2rem);
  border: 1px solid var(--line);
  background: var(--panel);
  box-shadow: var(--shadow);
}

.gallery-boundary {
  max-width: 52rem;
  margin: 0;
  padding: .85rem 1rem;
  border-left: 3px solid var(--accent);
  background: var(--soft);
  color: var(--muted);
  font-size: .78rem;
}

.gallery-boundary strong {
  color: var(--ink);
}

.gallery-status {
  margin: 1.2rem 0 0;
  color: var(--muted);
  font-size: .76rem;
}

.time-scrubber { margin-top: 1.4rem; padding: 1rem 1.1rem .8rem; border: 1px solid var(--line); background: var(--soft); }
.time-scrubber-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; color: var(--muted); font-size: .72rem; }
.time-scrubber-heading strong { color: var(--ink); font-size: .82rem; }
.time-scrubber-svg { display: block; width: 100%; height: 3.5rem; overflow: visible; }
.time-scrubber-svg line { stroke: var(--line); stroke-width: 2; }
.time-tick { fill: var(--accent); stroke: var(--panel); stroke-width: 2; }
.time-scrubber-range { display: block; width: 100%; margin: -1.15rem 0 0; accent-color: var(--accent); }
.time-scrubber-scale { display: flex; justify-content: space-between; color: var(--muted); font-size: .63rem; }

.gallery-timeline-controls {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  margin-top: 1.4rem;
}

.timeline-button {
  padding: .55rem .75rem;
  border: 1px solid var(--line);
  background: var(--panel);
  color: var(--ink);
  font: inherit;
  font-size: .72rem;
  cursor: pointer;
}

.timeline-button:hover { border-color: var(--accent); color: var(--accent); }
.timeline-hint { margin: 0; color: var(--muted); font-size: .72rem; }

.gallery-grid {
  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scrollbar-width: thin;
  gap: 1rem;
  margin-top: 1.2rem;
  padding: 0 0 .8rem;
}

.gallery-grid:empty {
  display: none;
}

.gallery-card {
  flex: 0 0 min(22rem, 78vw);
  min-width: 0;
  scroll-snap-align: start;
  overflow: hidden;
  border: 1px solid var(--line);
  background: var(--paper);
}

.gallery-card-figure {
  margin: 0;
}

.gallery-card-image-link {
  display: block;
  background: var(--soft);
}

.gallery-card img {
  display: block;
  width: 100%;
  aspect-ratio: 3 / 4;
  object-fit: contain;
  background: var(--paper);
}

.gallery-card figcaption {
  padding: 1rem 1rem 1.1rem;
}

.gallery-card h3 {
  margin: 0;
  font-size: 1.05rem;
}

.gallery-card-post-link { display: inline-block; margin-top: .45rem; font-size: .74rem; font-weight: 700; }

.gallery-card-caption,
.gallery-card-meta,
.gallery-card-note {
  color: var(--muted);
  font-size: .74rem;
}

.gallery-card-caption {
  margin: .5rem 0 0;
}

.gallery-card-meta {
  display: flex;
  flex-wrap: wrap;
  gap: .35rem .65rem;
  margin: .8rem 0 0;
}

.gallery-card-meta span {
  padding: .2rem .45rem;
  border: 1px solid var(--line);
}

.gallery-card-note {
  margin: .8rem 0 0;
  padding-top: .7rem;
  border-top: 1px solid var(--line);
}

.gallery-empty {
  max-width: 42rem;
  margin-top: 1.2rem;
  padding: clamp(1.2rem, 3vw, 1.8rem);
  border: 1px dashed var(--line);
  background: var(--soft);
}

.gallery-empty[hidden] {
  display: none;
}

.gallery-empty .card-topline {
  margin-bottom: 1rem;
}

.gallery-empty h3 {
  margin-bottom: .6rem;
}

.gallery-empty p:not(.card-topline) {
  color: var(--muted);
  font-size: .82rem;
}

.gallery-placeholder-art {
  max-width: 42rem;
  margin: 1.35rem 0 1.2rem;
  padding: .55rem;
  border: 1px solid var(--line);
  background: var(--panel);
}

.gallery-placeholder-art img {
  display: block;
  width: 100%;
  height: auto;
}

.gallery-placeholder-art figcaption {
  margin: .65rem .35rem .15rem;
  color: var(--muted);
  font-size: .68rem;
}

@media (max-width: 52rem) {
  .gallery-card { flex-basis: min(20rem, 82vw); }
}

@media (max-width: 35rem) {
  .gallery-shell {
    padding: 1rem;
  }

  .gallery-card { flex-basis: 88vw; }
  .timeline-button span { display: none; }
}
