diff --git a/views/tramites.html b/views/tramites.html
index 8ec25f0..3809a34 100644
--- a/views/tramites.html
+++ b/views/tramites.html
@@ -381,13 +381,28 @@ const filterState = {
lit: { search:'', status:'', abog:'', esfera:'' },
};
+// Concatena todos los campos visibles de la fila (excepto abogado y estatus,
+// que tienen su propio dropdown). Incluye involucrados (name+email) e
+// instrucciones para que la búsqueda encuentre lo mismo que el usuario ve.
+function rowHaystack(dept, r){
+ const parts = [
+ r.id, r.codigo, r.cliente, r.nombre, r.instrucciones,
+ r.fechaSolicitud, r.fecha_solicitud,
+ ];
+ if (dept === 'adm') parts.push(r.institucion);
+ if (dept === 'corp') parts.push(r.tipoDocumento);
+ if (dept === 'mig') parts.push(r.tipoTramite, r.docCompleta, r.permisoTrabajo, r.dependientes, r.fechaVencimiento);
+ if (dept === 'lit') parts.push(r.tipoProceso, r.juzgado, r.circuito, r.esfera, r.instancia, r.docCompleta, r.incidentes, r.amparo, r.fechaTermino);
+ (r.involucrados || []).forEach(u => parts.push(u.name, u.email));
+ return parts.filter(Boolean).join(' ').toLowerCase();
+}
+
function computeFiltered(dept){
const rows = data[dept];
const f = filterState[dept];
const q = f.search.toLowerCase();
const filtered = rows.filter(r => {
- const txt = ((r.nombre||r.tipoTramite||r.tipoProceso||'')+(r.cliente||'')+(r.abogado||'')+(r.id||'')).toLowerCase();
- if (q && !txt.includes(q)) return false;
+ if (q && !rowHaystack(dept, r).includes(q)) return false;
if (f.status && r.estatus !== f.status) return false;
if (f.abog && r.abogado !== f.abog) return false;
if (dept === 'lit' && f.esfera && r.esfera !== f.esfera) return false;