(() => { const overlay = document.getElementById('photo-lightbox'); const lightboxImg = document.getElementById('lightbox-img'); const closeBtn = document.getElementById('lightbox-close'); const prevBtn = document.getElementById('lightbox-prev'); const nextBtn = document.getElementById('lightbox-next'); const dotsContainer = document.getElementById('lightbox-dots'); const triggers = Array.from(document.querySelectorAll('[data-lightbox-images]')); if (!overlay || triggers.length === 0) { return; } const images = JSON.parse(triggers[0].dataset.lightboxImages || '[]'); if (images.length === 0) { return; } let current = 0; let isNavigating = false; const imageCache = new Map(); const preloadImage = (url) => { if (!url) { return Promise.reject(new Error('Missing image URL')); } if (imageCache.has(url)) { return imageCache.get(url); } const request = new Promise((resolve, reject) => { const img = new Image(); img.onload = () => resolve(url); img.onerror = reject; img.src = url; }); imageCache.set(url, request); return request; }; const preloadNearby = (index) => { if (images.length < 2) { return; } [ index, (index + 1) % images.length, (index - 1 + images.length) % images.length, ].forEach((targetIndex) => { const targetUrl = images[targetIndex]?.url; if (targetUrl) { preloadImage(targetUrl).catch(() => {}); } }); };