Accesibilidad y modo oscuro
Corrección del modo oscuro y verificación de accesibilidad en el flujo de Registro.
11.1 Decisiones de accesibilidad
El modo oscuro no es un simple invertido del claro: Theme.kt define un DarkColorScheme y un LightColorScheme independientes, cada uno con su propio fondo, color de tarjetas (surfaceVariant) y variante de azul (AzulOscuroPrincipal / AzulOscuroSecundario), para mantener el contraste de la marca en vez de degradarlo. La app sigue automáticamente el tema del sistema con isSystemInDarkTheme(); no hay selector manual dentro de la app, coherente con P-4 (nada bloquea el arranque). El color dinámico de Material You (dynamicColor) está deshabilitado a propósito: la paleta de marca (azul #053394, verde #0EAF70, rojo #C42830) se mantiene fija sin importar el fondo de pantalla del dispositivo.
| Decisión | Dónde se implementa |
|---|---|
| Lectores de pantalla (TalkBack) | Los íconos con función propia declaran contentDescription (p. ej. "Volver", "Borrar", la etiqueta de cada destino de la barra inferior); los decorativos —logos, íconos de fondo— usan contentDescription = null a propósito para que TalkBack no los anuncie dos veces. |
| Teclado numérico propio | TecladoNumerico.kt anuncia cada tecla con Modifier.semantics { contentDescription = descripcion }, ya que al no ser el teclado del sistema no trae su propia semántica accesible. |
| Área táctil mínima | 56 dp en las acciones del flujo de registro (definido en la tabla 4.3 de wireframes, ítem A-1). |
| Texto mínimo legible | 20 sp para las cifras de la pantalla principal, para que se lean a un metro de distancia (principio P-3, §3.1). |
| Contraste de color | Verde/rojo para ingresos y gastos se refuerzan siempre con texto ("+"/"−" y la etiqueta), nunca dependen solo del color. |
11.2 Capturas: claro y oscuro
Las mismas pantallas en la paleta clara y en la paleta oscura de DarkColorScheme, como evidencia visual de que el modo oscuro usa colores propios (fondo, tarjetas y acentos) y no un simple invertido del claro.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |







