filteredRoms = result; renderGrid(filteredRoms); romCountSpan.innerText = filteredRoms.length; if (romsList.length > 0) document.getElementById('statsPanel').innerHTML = `📦 ROMs loaded: <span>$romsList.length</span> else 📁 ZIP archive`;
// drag & drop uploadZone.addEventListener('dragover', (e) => e.preventDefault(); uploadZone.style.borderColor = '#FFB347'; uploadZone.style.background = '#1e253faa'; ); uploadZone.addEventListener('dragleave', () => uploadZone.style.borderColor = '#3b4b66'; uploadZone.style.background = '#0f121cd9'; ); uploadZone.addEventListener('drop', (e) => e.preventDefault(); uploadZone.style.borderColor = '#3b4b66'; uploadZone.style.background = '#0f121cd9'; const files = e.dataTransfer.files; if (files.length && files[0].name.endsWith('.zip')) handleZipFile(files[0]); else fileStatusSpan.innerHTML = ⚠️ Drag & drop only .zip archives containing GBA ROMs. ;
const sortVal = sortSelect.value; if (sortVal === 'name-asc') result.sort((a,b) => a.name.localeCompare(b.name)); else if (sortVal === 'name-desc') result.sort((a,b) => b.name.localeCompare(a.name)); else if (sortVal === 'size-asc') result.sort((a,b) => a.size - b.size); else if (sortVal === 'size-desc') result.sort((a,b) => b.size - a.size);