feat(ti/proyectos): agrupa Roadmap por semáforo (verde → amarillo → rojo)
- RoadmapQuarters: nuevo memo sortedData con orden por grupo de semáforo (verde → amarillo → rojo → sin definir) y, dentro de cada grupo, por fecha_fin asc (más cercanos a vencer primero).
- Inserta línea divisora horizontal de 1px entre grupos de color.
- Tooltip y cálculo de rango usan sortedData para mantener consistencia.
- Modal "Roadmap completo" (drill-down) aplica el mismo orden por semáforo + fecha_fin_estimada asc en la tabla.
- semaforoKey: firma relajada a
string | null | undefinedpara alinear con el tipo de DashboardStats.timeline (la lógica interna ya manejaba null en runtime).