(function () { var grid = document.getElementById('portfolio-grid'); if (!grid) return; var items = Array.from(grid.children); if (!items.length) return; var lb = document.createElement('div'); lb.id = 'lightbox'; lb.innerHTML = '' + '' + '' + ''; document.body.appendChild(lb); var lbImg = lb.querySelector('img'); var current = -1; function open(idx) { current = idx; var img = items[current].querySelector('img'); lbImg.removeAttribute('src'); lbImg.alt = ''; lb.classList.add('open'); lbImg.src = img.src; lbImg.alt = img.alt; } function close() { lb.classList.remove('open'); current = -1; } function prev() { if (current < 0) return; open((current - 1 + items.length) % items.length); } function next() { if (current < 0) return; open((current + 1) % items.length); } items.forEach(function (item, i) { item.addEventListener('click', function () { open(i); }); }); lb.querySelector('#lb-close').addEventListener('click', close); lb.querySelector('#lb-prev').addEventListener('click', function (e) { e.stopPropagation(); prev(); }); lb.querySelector('#lb-next').addEventListener('click', function (e) { e.stopPropagation(); next(); }); document.addEventListener('keydown', function (e) { if (!lb.classList.contains('open')) return; if (e.key === 'Escape') { close(); e.preventDefault(); } if (e.key === 'ArrowLeft') { prev(); e.preventDefault(); } if (e.key === 'ArrowRight') { next(); e.preventDefault(); } }); lb.addEventListener('click', function (e) { if (e.target === lb) close(); }); })();