Sistema de diseño TAV

Las piezas con las que está construido el prototipo del cliente y con las que se construirán los perfiles de Operador y Administrador. Todos los ratios de contraste de esta página fueron calculados, no estimados.

Marca 01

El isotipo es un hexágono de nodos con una planta al centro: red y crecimiento. En la app se usa completo solo en splash y bienvenida; dentro de la aplicación basta el hexágono o el monograma.

TAV
CAMBIO · REMESAS · CONFIANZA
TAV
Área de respiro mínima alrededor del isotipo: la mitad de su altura.
Tamaño mínimo del isotipo en pantalla: 24 px de alto.
No recolorear la planta ni el hexágono con los colores de estado (verde de éxito, rojo de error).
No poner el isotipo azul sobre fondos azules o de bajo contraste; sobre claro va la versión navy.

Color 02

El blanco y el gris son los fondos. El azul se reserva para acciones, el navy para superficies de dinero, y el verde, ámbar y rojo son exclusivamente semánticos: nunca decorativos. Cada muestra indica su ratio de contraste real y si cumple WCAG AA (4.5:1 para texto normal, 3:1 para gráficos y texto grande).

Superficies y texto

surface
Superficie
#FFFFFF
Tarjetas, campos, barras de navegación.
bg
Fondo
#F4F5F7
Fondo de todas las pantallas. Nunca blanco puro de fondo: quita jerarquía a las tarjetas.
line
Borde
#E5E8EC
Bordes de 1px. Divisores internos usan #EFF1F4.
ink
Tinta
#101828
Títulos y cifras.
17.75:1 AAA
ink-2
Tinta 2
#475467
Cuerpo de texto, etiquetas de campo.
7.69:1 AAA
ink-3
Tinta 3
#667085
Texto secundario, metadatos, placeholders.
4.97:1 AA
ink-4
Tinta 4
#98A2B3
Nunca para texto. Solo chevrons, iconos decorativos y estados vacíos.
2.58:1 falla

Marca y acción

navy
Navy
#0B1B33
Tarjetas de saldo y deuda, avatares, splash. Es el color del dinero en la app.
blanco 17.23:1
blue
Azul acción
#1F6FEB
Botón primario, links, estado activo, foco.
blanco 4.63:1 AA
blue-600
Azul texto
#1558C7
Texto azul sobre fondos claros y chips informativos.
5.73:1 sobre blue-50
blue-50
Azul tinte
#EAF2FE
Fondo de iconos, chips y anillo de foco.

Semánticos

green
Verde relleno
#4CAF50
Solo relleno gráfico de 24 px o más: círculo de éxito, barra de progreso, punto de semáforo.
blanco 2.78:1
green-600
Verde acción
#2E7D32
Botón de abono, montos a favor, texto de éxito.
blanco 5.13:1 AA
gold
Ámbar relleno
#D9A441
Solo relleno. Barra de deuda por vencer, luz ámbar del semáforo.
blanco 2.25:1
gold-700
Ámbar texto
#8A6010
Texto y chips de advertencia sobre gold-50.
5.06:1 sobre gold-50
red
Rojo relleno
#E5484D
Punto de notificación, luz roja, borde de error.
blanco 3.91:1 · solo gráficos
red-700
Rojo texto
#B42318
Mensajes de error, cargos, deuda vencida.
5.76:1 sobre red-50
El verde significa a favor del cliente: abonos, operación completada, semáforo al día.
El rojo significa en contra: cargos, deuda vencida, errores. En una app de dinero esto no se negocia.
No usar verde para un botón de acción neutra ni azul para confirmar un pago recibido.
No poner texto sobre green, gold o red puros: usar su variante 600/700.

Semáforo de crédito 03

Es el componente propio de TAV y la razón de ser de la app: toda operación sale a crédito y el negocio se juega en cuántos días lleva un cliente sin pagar. El umbral es de 7 días, tomado directo de la operación actual.

EstadoDíasRellenoChipQué pasa
Al día0 – 3#4CAF50 Al díaSin avisos.
Por vencer4 – 6#D9A441 Por vencerRecordatorio al cliente en la app y por WhatsApp.
Vencida7 o más#E5484D VencidaAlerta al cobrador de la zona y bloqueo de nuevas operaciones a crédito.
Saldo pendiente ● 4 días
$1.240,00
≈ Bs 353.896,00
Día 4 de 7Vence el 6 ago
4 días transcurridos
Por vencer
0 díasLímite: 7 días

El color nunca viaja solo: siempre acompañado del número de días y de una etiqueta escrita. Un cliente con daltonismo debe poder leer su situación sin ver el color.

Tipografía 04

Una sola familia: Inter (o la del sistema como respaldo). Las cifras de dinero usan font-feature-settings: 'tnum' para que las columnas de montos queden alineadas.

Display · 34/1.15 · 700$1.240,00
H1 · 23/1.25 · 650¿Cuánto vas a enviar?
H2 · 17/1.3 · 650Estado de cuenta
Body · 15/1.5 · 400Tu beneficiario recibe bolívares.
Body-2 · 13.5/1.55 · 400La tasa se congela por 15 minutos al confirmar.
Label · 12.5/1.3 · 600Número de cuenta
Caption · 11.5/1.5 · 400Actualizada hace 12 minutos
Overline · 12/1.2 · 700Movimientos
Mono · 12.5 · 400TQm4vP...8jK2xL9d
Direcciones de wallet, números de cuenta y hashes siempre en monoespaciada.
Tamaño mínimo de texto en la app: 11.5 px. Por debajo no se lee al sol, y esta gente opera en la calle.
No usar más de dos pesos por pantalla. En TAV: 400 y 650.

Espaciado y radios 05

Escala base de 4 px. El margen lateral de pantalla es siempre 20 px; nada toca el borde.

Escala

4 · xs
8 · sm
12 · md
16 · lg
20 · xl
24 · 2xl
32 · 3xl

Radios

10 · chip
12 · campo
14 · tarjeta
20 · hoja
full · píldora

Reglas de toque

Área mínima táctil de 44 × 44 px, aunque el icono se vea de 20 px.
Altura de botón principal: 52 px. Campos: 50 px. Filas de lista: 68 px.

Elevación 06

Dos niveles y nada más. La sombra es sutil y azulada, nunca gris neutro.

Nivel 0 — plano
Solo borde 1px. Listas dentro de una tarjeta.
Nivel 1 — tarjeta
0 1px 2px rgba(16,24,40,.05),
0 8px 24px rgba(16,24,40,.06)
Nivel 2 — flotante
Botón flotante, hojas modales y toasts.

Iconografía 07

Trazo de 1.8 px sobre grilla de 24 px, extremos y uniones redondeadas, sin relleno. Tamaños: 16 px en línea, 20 px estándar, 26 px destacado.

home
list
wallet
user
users
bell
plus
check
clock
alert
coin
cash
up
down
doc
copy
lock
shield
chat
refresh

Los iconos de significado (coin, cash, up, down, alert) van dentro de un cuadrado de 42 px con radio 12 y fondo tintado del color semántico correspondiente.

Botones 08

Un solo botón primario por pantalla. Si hay dos acciones que compiten, la segunda va como contorno o texto.

VarianteUsoFondoTexto
PrimarioLa acción principal de la pantalla#1F6FEB#FFFFFF
ÉxitoSolo para abonar o pagar deuda#2E7D32#FFFFFF
ContornoAcción secundaria#FFFFFF + borde#101828
TextoTerciaria, escapes ("cambiar número")#1F6FEB
DeshabilitadoFormulario incompleto. Visible, no oculto#DDE2E8#9AA5B2
OscuroSobre superficies claras cuando el azul compite#0B1B33#FFFFFF

Campos 09

Altura 50 px, radio 12, etiqueta encima siempre visible. El anillo de foco son 3 px del tinte del color.

Reposo
0000 0000 0000 0000
Con foco
0134 0912 4500
Con error
0134 09
La cuenta debe tener 20 dígitos.
Selector segmentado
Transferencia
Pago móvil
El error aparece debajo del campo y en texto, nunca solo con el borde rojo.
Teclado numérico automático en montos, cédulas, cuentas y teléfonos.
No usar placeholder como etiqueta: al escribir se pierde el contexto.

Chips y estados 10

Cada estado de una operación tiene un color fijo en toda la app. El operador y el cliente ven exactamente el mismo código.

En verificación En proceso Completada Observada Rechazada Borrador ✓ Cliente verificado ↑ 0,8%
EstadoSignificado para el clienteColor
En verificaciónSubió el comprobante, la caja aún no lo validablue
En procesoPago validado, el dinero va en camino al beneficiarioblue
CompletadaEl beneficiario ya recibiógreen
ObservadaFalta algo: monto que no cuadra, comprobante ilegiblegold
RechazadaNo se pudo procesar, requiere contacto con soportered

Listas y tarjetas 11

La fila de lista es el componente más repetido de la app: operaciones, movimientos, beneficiarios y notificaciones son todos la misma pieza con distinto contenido.

Ana RodríguezUSDT → Bs · 31 jul
$420,00Completada
Luis PérezUSDT → Bs · 30 jul
$820,00En proceso
Cargo · #TAV-2482Hoy 9:38 a.m.
+$515,00Saldo $1.240
Abono recibido1 ago · Efectivo
−$600,00Saldo $725
Tasa de hoy · USDT → Bs
285,40 Bs
↑ 0,8%
Comisión TAV (3%)15,00 USDT
Total a pagar515,00 USDT

En una fila de movimiento, el signo y el color siempre coinciden: + es lo que el cliente debe, es lo que ya pagó. El saldo resultante va debajo del monto, en gris.

Números y moneda 13

Formato venezolano: punto para miles, coma para decimales. Esto no es un detalle estético — un monto mal formateado en una app de dinero destruye la confianza.

ConceptoFormatoEjemplo
Dólares / USDT$#.###,00$1.240,00
BolívaresBs #.###,00Bs 353.896,00
Tasa###,00285,40
USDT en cripto###,00 USDT515,00 USDT
Operación#TAV-#####TAV-2482
Cuenta enmascaradaBanco ••••####Banesco ••••4471
Fecha cortad MMM31 jul
Fecha completad MMM yyyy · h:mm a3 ago 2026 · 9:38 a.m.
Los montos en dólares siempre con dos decimales, incluso si son cero.
Los bolívares se muestran como equivalencia informativa, con delante.
Nunca abreviar montos ("1,2K"). En dinero se escribe la cifra completa.

Tono de voz 14

Directo, sin tecnicismos financieros y sin adornos. El cliente de TAV opera hoy por WhatsApp: la app debe sonar igual de humana, pero más precisa.

Así sí

"¿Cuánto vas a enviar?"
"Tu beneficiario recibe Bs 142.700,00"
"Llevas 4 días con saldo pendiente"
"Enviar por otra red puede causar la pérdida de los fondos"

Así no

"Ingrese el monto de la transacción a procesar"
"Monto acreditado al beneficiario final"
"Usted presenta obligaciones vencidas"
"Error 402: transacción no válida"

Regla práctica: si la frase no se la dirías por WhatsApp a un cliente que conoces, no va en la app.

Notas para Flutter 15

Los tokens de esta página trasladados a ThemeData. La idea es que nadie escriba un color en línea dentro de un widget.

// lib/theme/tav_colors.dart
class TavColors {
  static const navy      = Color(0xFF0B1B33);
  static const blue      = Color(0xFF1F6FEB); // acción
  static const blue600   = Color(0xFF1558C7); // texto azul
  static const blue50    = Color(0xFFEAF2FE);
  static const green     = Color(0xFF4CAF50); // solo relleno
  static const green600  = Color(0xFF2E7D32); // texto y botón
  static const green50   = Color(0xFFEAF7EB);
  static const gold      = Color(0xFFD9A441);
  static const gold700   = Color(0xFF8A6010);
  static const gold50    = Color(0xFFFBF3E3);
  static const red       = Color(0xFFE5484D);
  static const red700    = Color(0xFFB42318);
  static const red50     = Color(0xFFFDECEC);
  static const bg        = Color(0xFFF4F5F7);
  static const surface   = Color(0xFFFFFFFF);
  static const line      = Color(0xFFE5E8EC);
  static const ink       = Color(0xFF101828);
  static const ink2      = Color(0xFF475467);
  static const ink3      = Color(0xFF667085);
  static const ink4      = Color(0xFF98A2B3); // nunca texto
}

// Radios y espaciado
class TavRadius { static const chip=10.0, field=12.0, card=14.0, sheet=20.0; }
class TavSpace  { static const xs=4.0, sm=8.0, md=12.0, lg=16.0, xl=20.0, xxl=24.0; }

// Sombra nivel 1
const tavCardShadow = [
  BoxShadow(color: Color(0x0D101828), blurRadius: 2, offset: Offset(0, 1)),
  BoxShadow(color: Color(0x0F101828), blurRadius: 24, offset: Offset(0, 8)),
];

Paquetes sugeridos

NecesidadPaquete
Formato de moneda es-VEintl · NumberFormat.currency(locale: 'es_VE')
Tipografía Intergoogle_fonts
PIN y biometríalocal_auth + flutter_secure_storage
Subir comprobanteimage_picker
Exportar estado de cuentapdf + printing
Notificacionesfirebase_messaging
Los tres roles comparten estos tokens y componentes. El Admin cambia el layout (tablero de escritorio), no el lenguaje visual.
Montos siempre en int de centavos o Decimal, nunca double. Un error de redondeo en una casa de cambio es dinero real perdido.
TAV · Sistema de diseño v1.1 ← Volver a la entrega