const grid = document.getElementById('downloadGrid'); const cards = [...document.querySelectorAll('.download-card')]; const search = document.getElementById('searchInput'); const filters = [...document.querySelectorAll('.filter-btn')]; const sortSelect = document.getElementById('sortSelect'); const resultCount = document.getElementById('resultCount'); let activePlatform = 'all'; function refresh() { const query = (search.value || '').trim().toLowerCase(); const sort = sortSelect.value; const visible = cards.filter(card => { const matchesSearch = card.dataset.name.includes(query); const matchesPlatform = activePlatform === 'all' || card.dataset.platform === activePlatform; const show = matchesSearch && matchesPlatform; card.hidden = !show; return show; }); visible.sort((a, b) => { if (sort === 'oldest') return Number(a.dataset.modified) - Number(b.dataset.modified); if (sort === 'name') return a.dataset.title.localeCompare(b.dataset.title); if (sort === 'size') return Number(b.dataset.bytes) - Number(a.dataset.bytes); return Number(b.dataset.modified) - Number(a.dataset.modified); }).forEach(card => grid.appendChild(card)); resultCount.textContent = `${visible.length} file${visible.length === 1 ? '' : 's'}`; } search.addEventListener('input', refresh); sortSelect.addEventListener('change', refresh); filters.forEach(button => button.addEventListener('click', () => { filters.forEach(btn => btn.classList.remove('active')); button.classList.add('active'); activePlatform = button.dataset.filter; refresh(); }));