.festival-photo-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:22px; position:relative; }
.festival-photo { display:block; position:relative; overflow:hidden; border:1px solid rgba(100,218,255,.23); border-radius:12px; background:#0b1020; color:#f2f6ff; text-decoration:none; transition:border-color .2s,box-shadow .2s; }
.festival-photo img { display:block; width:100%; height:auto; aspect-ratio:4/3; object-fit:cover; transition:transform .3s; }
.festival-photo-caption { display:flex; flex-direction:column; gap:7px; padding:19px 45px 19px 18px; position:relative; }
.festival-photo-caption > span:first-child { color:#78dcee; font:600 .75rem var(--font-body); letter-spacing:.13em; }
.festival-photo-caption strong { font:600 1.3rem var(--font-body); }
.festival-photo-open { position:absolute; right:18px; top:27px; color:#9a8cff; font-size:1.4rem; }
.festival-photo:hover,.festival-photo:focus-visible { border-color:#7cecff; box-shadow:0 0 24px rgba(90,199,255,.15); }
.festival-photo:hover img { transform:scale(1.025); }
.festival-photo:focus-visible { outline:2px solid #7cecff; outline-offset:4px; }
@media(max-width:1000px) { .festival-photo-grid { grid-template-columns:repeat(2,minmax(0,1fr));gap:16px; } }
@media(max-width:600px) { .festival-photo-grid { grid-template-columns:minmax(0,1fr); } }
@media(prefers-reduced-motion:reduce) { .festival-photo,.festival-photo img { transition:none; } .festival-photo:hover img { transform:none; } }
/* Keep every photo reachable by touch, keyboard, and the rotation controls. */
.festival-photo-grid { display:flex; gap:22px; overflow-x:auto; scroll-snap-type:x mandatory; scrollbar-width:none; padding:4px 2px 12px; }
.festival-photo-grid::-webkit-scrollbar { display:none; }
.festival-photo { flex:0 0 calc((100% - 44px)/3); scroll-snap-align:start; }
.gallery-controls { display:flex; align-items:center; justify-content:flex-end; gap:12px; margin-top:20px; }
.gallery-controls button { border:1px solid rgba(100,218,255,.35); border-radius:8px; background:#0b1020; color:#b8edf9; padding:12px 16px; min-height:46px; font:600 .95rem var(--font-body); cursor:pointer; }
.gallery-controls button:hover,.gallery-controls button:focus-visible { border-color:#7cecff; color:white; outline:2px solid #7cecff; outline-offset:3px; }
.gallery-progress { margin-right:auto; color:#91a7bb; font:500 .9rem var(--font-body); letter-spacing:.1em; }
@media(max-width:1000px) { .festival-photo-grid { gap:16px; } .festival-photo { flex-basis:calc((100% - 16px)/2); } }
@media(max-width:600px) { .festival-photo { flex-basis:88%; } .gallery-controls { gap:8px; } .gallery-controls button { padding:10px 12px; } }

.festival-photo-caption { padding-right:18px; }
