- Header: búsqueda móvil con panel deslizable (fixed bajo la topbar), comparte la lógica AJAX con desktop via initSearchWidget()
- ChatController: index muestra solo amigos; show pasa isFriend y friendship a la vista; send valida amistad con abort_unless
- chat/index: muestra amigos con @forelse y mensaje vacío si no tiene
- chat/show: si no son amigos muestra banner de bloqueo con botón contextual (enviar solicitud / cancelar / aceptar según estado)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- HeaderComposer ahora muestra conversaciones donde el último mensaje
es del otro usuario (pendiente de respuesta), no solo mensajes no leídos
- El badge refleja el conteo de conversaciones pendientes
- Al responder desde el chat, se dispara chat:replied para quitar
la conversación del dropdown en tiempo real
- El badge en tiempo real solo incrementa si es una conversación nueva
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>