Dr. Hassan Kanso

My Projects

A collection of my work in computational biology, laboratory automation, and bioengineering tools.

if (e.target.closest('a') || e.target.closest('.overlay-btn')) return; openModal(p); }); // Keyboard support card.addEventListener('keydown', e => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); openModal(p); } }); projectGrid.appendChild(card); }); } // --- Modal Logic --- const modal = document.getElementById('projectModal'); const closeBtn = modal.querySelector('.modal-close'); const img = modal.querySelector('.modal-img'); const title = modal.querySelector('.modal-title'); const tags = modal.querySelector('.modal-tags'); const desc = modal.querySelector('.modal-desc'); const links = modal.querySelector('.modal-links'); function openModal(project) { img.src = project.img; img.alt = project.title; title.textContent = project.title; tags.innerHTML = project.tags.map(t => `${t}`).join(''); desc.textContent = project.desc; links.innerHTML = project.links.map(l => `${l.icon} ${l.label}` ).join(''); modal.style.display = 'flex'; modal.focus(); document.body.style.overflow = 'hidden'; } function closeModal() { modal.style.display = 'none'; document.body.style.overflow = ''; } closeBtn.onclick = closeModal; modal.addEventListener('click', e => { if (e.target === modal) closeModal(); }); window.addEventListener('keydown', e => { if (e.key === 'Escape') closeModal(); }); // --- Init --- renderFilters(); renderProjects();