Enjambre Discografia -

init();

if (filteredData.length === 0) { gridContainer.innerHTML = `<div class="no-results"><i class="fas fa-dove" style="font-size: 2rem; opacity: 0.6;"></i><br/>No encontramos lanzamientos con esos criterios. <br> 🎧 ¡Prueba con "Manía" o "2020"!</div>`; return; } enjambre discografia

/* custom scroll */ ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: #ddd2c4; } ::-webkit-scrollbar-thumb { background: #aa7e5a; border-radius: 8px; } init(); if (filteredData

// construcción de cards let html = ''; for (let album of filteredData) { // tipo legible let typeLabel = ''; let typeIcon = ''; if (album.type === 'estudio') { typeLabel = 'Álbum de estudio'; typeIcon = '🎙️'; } else if (album.type === 'ep') { typeLabel = 'EP / Extended Play'; typeIcon = '💿'; } else if (album.type === 'live') { typeLabel = 'En vivo / Concierto'; typeIcon = '🎤'; } i class="fas fa-dove" style="font-size: 2rem

// evento de búsqueda con debounce suave let debounceTimer; function onSearchInput() { clearTimeout(debounceTimer); debounceTimer = setTimeout(() => { currentSearch = searchInput.value; render(); }, 280); }

<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> <title>Enjambre · Discografía Esencial</title> <link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,300;14..32,400;14..32,600;14..32,700&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"> <style> * { margin: 0; padding: 0; box-sizing: border-box; }

// pequeño helper para evitar XSS function escapeHtml(str) { return str.replace(/[&<>]/g, function(m) { if (m === '&') return '&'; if (m === '<') return '<'; if (m === '>') return '>'; return m; }).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function(c) { return c; }); }