.photo-gallery { min-width: 0; width: 100%; }
.photo-gallery__viewport { overflow-x: auto; scroll-snap-type: x mandatory; }
.photo-gallery__container { display: flex; touch-action: pan-y pinch-zoom; }
.photo-gallery__slide { flex: 0 0 100%; min-width: 0; scroll-snap-align: start; background: var(--paper); }
.photo-gallery__slide img { display: block; width: 100%; height: auto; aspect-ratio: 1; object-fit: contain; }
.photo-gallery__thumbs { overflow-x: auto; margin-top: .75rem; }
.photo-gallery__thumb-container { display: flex; gap: .65rem; touch-action: pan-y pinch-zoom; }
.photo-gallery__thumb { display: block; flex: 0 0 calc((100% - 1.95rem) / 4); min-width: 0; border: 2px solid transparent; padding: 3px; opacity: .7; }
.photo-gallery__thumb img { display: block; width: 100%; height: auto; aspect-ratio: 1; object-fit: cover; }
.photo-gallery__thumb:hover, .photo-gallery__thumb[aria-pressed="true"] { opacity: 1; border-color: var(--ink); }
.photo-gallery__footer { display: flex; align-items: center; justify-content: flex-end; gap: 1rem; margin-top: .75rem; }
.photo-gallery__status { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
.photo-gallery__controls { display: flex; gap: .5rem; }
.photo-gallery__controls[hidden] { display: none; }
.photo-gallery__controls button { width: 48px; height: 48px; border: 1px solid var(--ink); color: var(--ink); background: var(--paper); font: inherit; cursor: pointer; }
.photo-gallery__controls button:hover:not(:disabled) { color: var(--paper); background: var(--ink); }
.photo-gallery__controls button:disabled { opacity: .35; cursor: default; }
.photo-gallery a:focus-visible, .photo-gallery button:focus-visible, .photo-gallery__viewport:focus-visible { outline: 3px solid var(--ink); outline-offset: -3px; }
.photo-gallery.is-enhanced .photo-gallery__viewport, .photo-gallery.is-enhanced .photo-gallery__thumbs { overflow: hidden; scroll-snap-type: none; }
.photo-gallery.is-enhanced .photo-gallery__slide { scroll-snap-align: none; }
