Enjambre Discografia Direct

// Helper: normalizar texto function normalizeText(txt) { return txt.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""); }

html += ` <div class="card"> <div class="card-img" style="background: ${bgGradient}; display: flex; flex-direction: column; justify-content: center; align-items: center;"> <i class="${album.icon}" style="font-size: 4rem; color: rgba(255,245,225,0.9); text-shadow: 2px 2px 0px rgba(0,0,0,0.2);"></i> <span style="margin-top: 10px; font-size: 0.7rem; font-weight: 600; background: rgba(0,0,0,0.4); padding: 0.2rem 1rem; border-radius: 20px; backdrop-filter: blur(2px); color: white;">${album.year}</span> </div> <div class="card-content"> <div class="album-year"> <span>${album.year}</span> <span><i class="far fa-calendar-alt"></i></span> </div> <div class="album-title">${escapeHtml(album.title)}</div> <div class="album-type"><i class="${typeIcon === '🎙️' ? 'fas fa-microphone' : (typeIcon === '💿' ? 'fas fa-cd' : 'fas fa-head-side-vr')}" style="margin-right: 5px;"></i> ${typeLabel}</div> <div class="tracklist"> <h4><i class="fas fa-list-ul"></i> Canciones destacadas</h4> <ul> ${trackListItems} ${moreTracks} </ul> </div> </div> </div> `; } gridContainer.innerHTML = html; } enjambre discografia

return filtered; }

// 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 = '🎤'; } } html += ` &lt