Aplica el mismo patrón de viewport offset usado en TextRenderer
al renderizado del fondo de notificaciones para consistencia completa.
## Cambios
**notifier.cpp - renderBackground():**
- Obtener viewport ANTES de deshabilitar presentación lógica
- Aplicar offset del viewport a coordenadas del rectángulo:
- `bg_rect.x = x + viewport.x`
- `bg_rect.y = y + viewport.y`
## Resultado
✅ Fondo de notificaciones respeta offset de viewport
✅ Consistencia completa entre texto y fondo en modo letterbox
✅ Compatible con F3 (letterbox), F4 (stretch), y ventana normal
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Cambio de comportamiento:
- ANTES: Notificaciones en cola FIFO esperaban turno secuencialmente
- AHORA: Solo se muestra la última notificación inmediatamente
Implementación:
- show() destruye notificación actual con current_notification_.reset()
- Vacía cola completa descartando notificaciones pendientes
- Activa nueva notificación inmediatamente sin esperar en cola
Resultado:
- ✅ Usuario pulsa 5 teclas rápido → Solo ve la 5ª notificación
- ✅ Feedback inmediato → Nueva reemplaza vieja instantáneamente
- ✅ Sin esperas → Siempre información actualizada
- ✅ UX mejorada → Respuesta inmediata a última acción del usuario
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Problema resuelto:
1. Color del tema saliente: Notificaciones mostraban color del tema ANTIGUO
2. Sin transiciones LERP: Notificaciones no participaban en transiciones suaves
Cambios implementados:
- Arquitectura cambiada de estática a dinámica
- Notifier ahora consulta ThemeManager cada frame en render()
- Eliminados colores estáticos de struct Notification
- Notifier::init() recibe puntero a ThemeManager
- Notifier::show() ya no recibe parámetros de color
- Simplificado showNotificationForAction() (-23 líneas)
Fix crítico de inicialización:
- ThemeManager ahora se inicializa ANTES de updatePhysicalWindowSize()
- Previene nullptr en notifier_.init() que causaba que no se mostraran
Resultado:
- ✅ Notificaciones usan color del tema DESTINO (no origen)
- ✅ Transiciones LERP suaves automáticas durante cambios de tema
- ✅ Código más limpio y centralizado en ThemeManager
- ✅ -50 líneas de código duplicado eliminadas
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>