preloadNearby(0); triggers.forEach((trigger) => { const startIndex = Number(trigger.dataset.lightboxIndex || 0); trigger.style.cursor = 'pointer'; trigger.addEventListener('click', () => open(Number.isFinite(startIndex) ? startIndex : 0)); }); closeBtn.addEventListener('click', close); prevBtn.addEventListener('click', () => navigate(-1)); nextBtn.addEventListener('click', () => navigate(1)); overlay.addEventListener('click', (e) => { if (e.target === overlay) close(); }); document.addEventListener('keydown', (e) => { if (!overlay.classList.contains('is-open')) return; if (e.key === 'Escape') close(); if (e.key === 'ArrowLeft' && images.length > 1) navigate(-1); if (e.key === 'ArrowRight' && images.length > 1) navigate(1); }); let touchStartX = 0; overlay.addEventListener('touchstart', (e) => { touchStartX = e.touches[0].clientX; }, { passive: true }); overlay.addEventListener('touchend', (e) => { const delta = touchStartX - e.changedTouches[0].clientX; if (Math.abs(delta) > 50 && images.length > 1) navigate(delta > 0 ? 1 : -1); }); })();