diff --git a/static/css/style.css b/static/css/style.css
index e317880..418308d 100644
--- a/static/css/style.css
+++ b/static/css/style.css
@@ -72,8 +72,35 @@ h2 {
align-items: center;
gap: .5rem;
margin-bottom: .75rem;
+ cursor: pointer;
+ user-select: none;
}
.card-header strong { color: var(--text); font-size: .95rem; }
+.card.collapsed .card-header { margin-bottom: 0; }
+
+.card-count {
+ font-size: .72rem;
+ color: var(--text-muted);
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: 20px;
+ padding: .1rem .5rem;
+}
+.card-chevron {
+ margin-left: auto;
+ font-size: .8rem;
+ color: var(--text-muted);
+ transition: transform .25s ease;
+ line-height: 1;
+}
+.card.collapsed .card-chevron { transform: rotate(-90deg); }
+
+.prod-list {
+ overflow: hidden;
+ max-height: 9999px;
+ transition: max-height .35s ease;
+}
+.card.collapsed .prod-list { max-height: 0; }
/* ---- Badges ---- */
.badge {
diff --git a/templates/index.html b/templates/index.html
index 098b420..cfaf5d6 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -25,6 +25,7 @@
+
@@ -136,20 +137,41 @@
{ titulo: 'Compra mensual', badge: 'badge-verde', label: 'cada 2-4 semanas', items: predicciones.filter(p => p.frecuencia_dias > 16 && p.frecuencia_dias <= 35) },
{ titulo: 'Compra esporadica', badge: 'badge-gris', label: 'mas de un mes', items: predicciones.filter(p => p.frecuencia_dias > 35) },
];
- grupos.forEach(grupo => {
+ grupos.forEach((grupo, idx) => {
if (!grupo.items.length) return;
const card = document.createElement('div');
- card.className = 'card';
+ card.className = 'card' + (idx >= 2 ? ' collapsed' : '');
card.innerHTML =
- '' +
+ '' +
'
';
+ card.querySelector('.card-header').addEventListener('click', () => {
+ card.classList.toggle('collapsed');
+ actualizarBotonToggle();
+ });
contenedor.appendChild(card);
const lista = card.querySelector('.prod-list');
grupo.items.forEach(prod => lista.appendChild(crearItem(prod)));
});
}
+ function toggleTodos() {
+ const cards = [...document.querySelectorAll('#columnaProductos .card')];
+ const todosCollapsed = cards.every(c => c.classList.contains('collapsed'));
+ cards.forEach(c => c.classList.toggle('collapsed', !todosCollapsed));
+ actualizarBotonToggle();
+ }
+
+ function actualizarBotonToggle() {
+ const cards = [...document.querySelectorAll('#columnaProductos .card')];
+ const todosCollapsed = cards.length > 0 && cards.every(c => c.classList.contains('collapsed'));
+ document.getElementById('btnToggle').textContent = todosCollapsed ? 'Desplegar todo' : 'Plegar todo';
+ }
+
function crearItem(prod) {
const li = document.createElement('div');
li.className = 'prod-item';