Fix: ajustes de accesibilidad, seguridad y UX en auth, dashboard y navegación
Resumen
Ajustes sobre autenticación, dashboard y navegación (sidebar, TopBar, Footer), a partir de una revisión de accesibilidad, seguridad, UI y UX.
Qué incluye
Estructura
- El dashboard pasa de
/inicioa/. Antes/redirigía a/inicioo a/loginsegún hubiera sesión, y ambos pasos consultabanGET /auth/me; ahora la consulta es una sola./loginredirige a/si ya hay sesión válida.
Diseño
- Sidebar rediseñado (paleta zinc, "Inicio" como un ítem más, drawer mobile con foco y logo). TopBar y Footer en
zinc-700. - Tarjetas del dashboard con el mismo lenguaje visual que el resto de la app, y espaciado uniforme.
-
SetPasswordScreenySessionUnavailablereusanAuthLayout, como el 404, y el texto queda unificado ("inicio de sesión").
Accesibilidad
- "Cerrar sesión" ahora se alcanza con teclado. Menú de usuario con Escape,
aria-expandedy nombre accesible. - Sidebar dentro de un
<nav>, conaria-currenty sinh6sueltos. Títulos de tarjetas con la jerarquía correcta. - Contrastes por debajo de 4.5:1,
<main>faltante,<title>del 404, autofill cortado por el botón del ojito. - El foco ya no se pierde al pasar del login al formulario de contraseña nueva.
Seguridad
- Headers en
next.config.ts: CSP (solo el propio origen y Google Identity Services), anti-framing,nosniff,Referrer-PolicyyPermissions-Policy./reset-passwordsale conno-referrerporque su URL lleva el token. El CSP no se aplica a/api, para no romper la vista de los informes en PDF. - Se quitan los redirects viejos
/olvide-contraseniay/restablecer-contrasenia.
UX
- Modal bloqueante cuando la sesión expira con la página abierta, que antes redirigía sin explicación.
- Los errores del backend sin
message(HTML de la plataforma, cuerpo vacío, 400 del firewall) muestran un texto en español según el estado en vez de "Error 500". - "Nueva contraseña" muestra el mínimo de 8 caracteres desde el principio.
- Solo la primera foto de fondo del login se precarga; las otras dos, de forma diferida.