/* Full-screen photo viewer shared by the three gallery options. */
.gv { position: fixed; inset: 0; z-index: 90; display: grid; grid-template-rows: auto 1fr auto; background: rgba(7, 11, 18, .97); color: var(--white); opacity: 0; visibility: hidden; transition: opacity .45s var(--ease), visibility .45s; }
.gv.is-open { opacity: 1; visibility: visible; }
.gv__top { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 18px var(--pad); }
.gv__count { font: 600 12px/1 var(--sans); letter-spacing: .2em; text-transform: uppercase; color: rgba(255, 253, 248, .6); }
.gv__count b { color: var(--lamp); font-weight: 600; }
.gv__close { width: 48px; height: 48px; border-radius: 50%; border: 1.5px solid rgba(255, 255, 255, .35); background: none; color: var(--white); font-size: 22px; line-height: 1; transition: background .3s, color .3s; }
.gv__close:hover { background: var(--white); color: var(--ink); }
.gv__stage { position: relative; display: grid; place-items: center; min-height: 0; padding: 0 clamp(16px, 7vw, 110px); touch-action: pan-y; }
.gv__stage img { grid-area: 1 / 1; max-width: 100%; max-height: 100%; object-fit: contain; box-shadow: 0 40px 90px -30px rgba(0, 0, 0, .9); transition: opacity .5s var(--ease), transform .7s var(--ease); }
.gv__stage img.is-out { opacity: 0; transform: scale(.97); }
.gv__stage img.is-in { animation: gv-in .7s var(--ease) both; }
@keyframes gv-in { from { opacity: 0; transform: scale(1.03); } }
.gv__nav { position: absolute; top: 50%; width: 56px; height: 56px; margin-top: -28px; border-radius: 50%; border: 0; background: rgba(255, 255, 255, .08); color: var(--white); font-size: 22px; transition: background .3s, color .3s; }
.gv__nav:hover { background: var(--lamp); color: var(--ink); }
.gv__prev { left: clamp(8px, 2vw, 30px); }
.gv__next { right: clamp(8px, 2vw, 30px); }
.gv__cap { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px 24px; padding: 18px var(--pad) 24px; }
.gv__cap p { margin: 0; font: italic 500 clamp(19px, 2vw, 26px)/1.25 var(--serif); }
.gv__cap span { font: 600 11px/1 var(--sans); letter-spacing: .2em; text-transform: uppercase; color: var(--lamp); }
body.gv-lock { overflow: hidden; }
@media (max-width: 700px) { .gv__nav { display: none; } .gv__stage { padding: 0 8px; } }
