Documento 01 · Sistema de Color

Un indigo firma. Un emerald confirma.

Este es el sistema oficial. Primary, accent, semánticos, neutrales, tags categóricos, gradientes y colores PDF — todo lo que aparece en cualquier deliverable de Psicometrikas vive dentro de este documento. Nada afuera del sistema debe llegar a producción.

Primary#6366f1 · indigo
Accent#10b981 · emerald
Tags cat.7 pairs
Gradientes4 oficiales
01 · Primarios

Indigo es la firma.

Este indigo aparece en el logo, en los CTAs principales y en los headers de reportes. Si alguien no ve nada más de Psicometrikas, ve este color.

Primary · Base
#6366f1
--primary
Botones principales, brand marks, links
Primary dark
#4f46e5
--primary-dark
Hover states, énfasis
Primary light
#eef2ff
--primary-light
Backgrounds suaves de cards
La regla del primary
El indigo es la marca. Todo lo demás lo respalda.

Cuando algo dice "esto es Psicometrikas" (logo, CTA principal, header de reporte, marca en la sidebar), va en #6366f1. Cuando hay hover o énfasis, sube a #4f46e5. Cuando hay que suavizar sin perder la marca (background de card destacada), baja a #eef2ff. Todos los primary con blanco cumplen mínimo AA-Large; para texto pequeño usar siempre primary-dark.

02 · Acento

Emerald para estados positivos.

El acento es emerald #10b981. Se reserva para estados de éxito, tareas completadas, scores altos y confirmación de acciones. Nunca compite con el primary — lo complementa.

Accent · Base
#10b981
--accent
Éxito, completado, scores altos
Accent dark
#059669
--accent-dark
Hover en acentos, texto sobre light
Accent light
#ecfdf5
--accent-light
Backgrounds suaves de éxito
Regla de contraste
Accent solo en fills. Nunca en texto sobre blanco.

#10b981 sobre blanco solo tiene 2.54:1 — falla WCAG completo. Para texto verde sobre blanco (badges, labels de "completado", etc.) usar siempre --accent-dark (#059669) o combinar con background --accent-light. El accent base sirve para fills grandes (botones de éxito, iconos ≥24px, badges).

03 · Semánticos

Tres colores con significado fijo.

Danger (rojo), warning (ámbar) e info (azul) tienen roles no negociables. Cada aparición debe cargar el significado que le corresponde — nunca decorativo.

Danger
#ef4444
--danger
Errores críticos, red flags, alertas rojas
Warning
#f59e0b
--warning
Warnings ámbar, pendientes, revisar
Info
#3b82f6
--info
Info states, "en progreso"
Danger light
#fef2f2
--danger-light
Warning light
#fffbeb
--warning-light
Info light
#eff6ff
--info-light
Regla semántica
Un color, un significado.

Rojo solo para errores críticos y red flags. Ámbar solo para pendientes / atención blanda. Azul solo para info y estados "en progreso" (nunca confundir con primary indigo — el indigo es marca, el azul info es sistema). Todos los semánticos base fallan AA sobre blanco → usar solo como fill o combinar con su light-bg correspondiente.

04 · Neutrales

Grises con roles fijos.

La escala neutral es donde vive el 80% del producto. Ocho niveles, cada uno con función definida.

Text
#111827
--text
Texto principal, títulos
Text secondary
#4b5563
--text-secondary
Subtítulos, labels de campos
Muted
#9ca3af
--muted
Timestamps, hints, placeholders
Line
#e6e9ef
--line
Bordes de cards, dividers
Line light
#f0f2f5
--line-light
Bordes suaves internos
Background
#f8f9fb
--bg
Background de página
Card
#ffffff
--card
Fondos de cards, contenedores
Card hover
#fafbfc
--card-hover
Card en hover state
05 · Tags categóricos

Siete colores para taxonomías.

Para etiquetar categorías de tests, competencias o cualquier taxonomía. Cada tag combina un background suave con texto oscuro del mismo tono. Nunca inventar un color nuevo: si aparece una categoría nueva, se le asigna uno de estos siete.

Purple
Cognitivo, razonamientoHabilidad, lógica, matrices
#eef2ff · #4338ca
Teal
Bienestar, resilienciaAutocuidado, estrés, IE
#ecfdf5 · #047857
Orange
Liderazgo, acciónToma de decisión, comercial
#fff7ed · #c2410c
Pink
Valores, emocionalCultura, integridad, valores
#fdf2f8 · #be185d
Blue
Comunicación, socialServicio al cliente, empatía
#eff6ff · #1d4ed8
Amber
Alertas levesWarnings suaves, revisiones
#fffbeb · #b45309
Gray
Neutro, sin categoríaDefault, categoría desconocida
#f3f4f6 · #4b5563
Regla de asignación
Los siete cubren todo. Si necesitás un octavo, revisa el sistema.

Todos los tag-pairs pasan AA sobre su bg soft (5.21:1 hasta 7.07:1). Cuando aparezca una categoría nueva de test, encajarla en uno de los siete existentes — no crear un octavo color. Si de verdad no encaja en ninguno, probablemente el sistema de categorías necesita revisión, no la paleta.

06 · Gradientes de marca

Cuatro gradientes, uso controlado.

Los gradientes existen para dar peso a los momentos importantes. Solo hero, CTA footer, texto destacado y sección de dolor. Nunca decorativos, nunca en cards de contenido regular.

Hero background
Hero linear-gradient(180deg, #f8f9fb 0%, white 50%, #f0f0ff 100%)
datos
Texto gradiente indigo linear-gradient(135deg, #6366f1, #818cf8, #a78bfa)
CTA footer linear-gradient(135deg, #312e81, #6366f1, #7c3aed)
Sección de dolor
Sección de dolor linear-gradient(180deg, #fff 0%, #fef2f2 100%)
Regla de moderación
Un gradiente por vista, máximo.

El hero abre con el gradient suave. Si esa misma vista tiene un CTA footer con gradient, ya se acumularon dos — cortar uno. Los gradientes existen para dar peso, no para decorar. Cards de contenido, backgrounds de sección, botones normales: siempre colores planos.

07 · Colores PDF · RGB normalizado

La paleta en 0.0 a 1.0.

Los PDFs usan valores RGB normalizados (0 a 1) mapeando 1:1 a los hex web. Esta tabla es la fuente para el builder de PDFs en apps/web/src/lib/pdf/builder.ts.

Constante PDF
RGB (0-1)
Uso
PRIMARY
[0.39, 0.40, 0.95]
Indigo principal
AI_PURPLE
[0.42, 0.27, 0.76]
Bloques IA
ACCENT
[0.06, 0.72, 0.51]
Verde de éxito
RED
[0.94, 0.27, 0.27]
Rojo alertas
AMBER
[0.96, 0.62, 0.04]
Ámbar warnings
TEXT
[0.07, 0.09, 0.15]
Texto principal
MUTED
[0.61, 0.63, 0.69]
Muted, secundario
LINE
[0.90, 0.91, 0.94]
Líneas y bordes
BG
[0.97, 0.98, 0.98]
Fondo suave
Nota técnica
Estos valores viven en el builder PDF, no en globals.css.

El builder de PDFs (700+ líneas hand-rolled) tiene su propia lista de constantes. Si algún color web cambia, actualizar también estas constantes RGB — no dejar solo una fuente al día.

08 · Accesibilidad · WCAG 2.1

Contrastes computados.

Los pares críticos del sistema con su ratio real. Los que fallan AA se marcan explícitamente para que quien los use sepa que solo sirven como fill decorativo (nunca texto pequeño sobre blanco).

Foreground
Background
Ratio
Nivel
Text
White
17.74:1
AAA
Text-sec.
White
7.56:1
AAA
Primary-dark
White
6.29:1
AA
Primary-dark
Primary-light
5.62:1
AA
Primary
White
4.47:1
AA large
Accent-dark
White
3.77:1
AA large
Accent
White
2.54:1
Fail
Danger
White
3.76:1
AA large
Warning
White
2.15:1
Fail
Info
White
3.68:1
AA large
Tag-Purple
#eef2ff
7.07:1
AAA
Tag-Blue
#eff6ff
6.16:1
AA
Tag-Pink
#fdf2f8
5.53:1
AA
Los tres FAIL
Accent, Warning y Muted no van en texto sobre blanco.

Accent (#10b981) 2.54:1 — solo para fills grandes. Para texto verde usar accent-dark (#059669) o combinar con accent-light bg. Warning (#f59e0b) 2.15:1 — nunca en texto sobre blanco. Muted (#9ca3af) 2.54:1 — sí funciona como placeholder o hint donde el fail está esperado por diseño (indica campo vacío / secundario), no se corrige.

09 · Do / Don't

Errores comunes que rompen el sistema.

Cinco pares de comparación con los errores más frecuentes cuando el sistema se relaja.

✓ Sí · CTA primario
Primary-dark con texto blanco.

Botones principales usan --primary-dark (#4f46e5). 6.29:1 pass AA. Lo lees sin esfuerzo.

background: var(--primary-dark);
color: white;
✗ No · Primary base con blanco pequeño
Solo pasa AA-Large.

--primary con blanco es 4.47:1 — falla texto pequeño. En botones densos con label ≤14px, muchos usuarios se van a esforzar.

background: var(--primary); /* AA-Large */
✓ Sí · Estado de éxito
Accent-dark sobre accent-light.

Badge "Completado" con background #ecfdf5 y texto #059669. 3.58:1 pass AA-Large + tag pattern.

background: var(--accent-light);
color: var(--accent-dark);
✗ No · Accent como texto
Verde emerald sobre blanco.

#10b981 en texto sobre blanco es 2.54:1 — FAIL. Se ve pálido y los usuarios con visión reducida no lo distinguen.

color: var(--accent); /* FAIL 2.54:1 */
✓ Sí · Tag con su par
Cada categoría usa su bg+text del sistema.

Tag "Personalidad" = purple pair (#eef2ff + #4338ca). Tag "Ventas" = orange (#fff7ed + #c2410c). Nunca mezclar.

.tag-cognitivo { bg:#eef2ff; color:#4338ca }
✗ No · Colores inventados para tags
"Este verde queda bien para ventas".

Usar un teal random para "ventas" rompe la asociación aprendida. Ventas es orange. Bienestar es teal. Cambiarlo confunde.

.tag-ventas { bg:#e0f5f0; color:#0e6b58 } /* wrong */
✓ Sí · Danger para red flag
Rojo solo cuando el usuario debe detenerse.

Alert de "respuestas sospechosas detectadas" con --danger. Validación de campo requerido vacío. Indicador de plaza vencida.

border-left: 4px solid var(--danger);
✗ No · Danger para énfasis
"Rojo llama la atención" no es razón.

Usar rojo en un CTA "Contratar ahora" porque queremos que llame la atención rompe el sistema. Rojo = peligro. Ese CTA es primary indigo.

bg:var(--danger) /* just for attention */
✓ Sí · Gradient hero solo en hero
Un gradient por vista, en el momento correcto.

La landing abre con gradient hero. La sección de dolor usa gradient pain. Cada uno una vez.

.hero { background: var(--grad-hero) }
✗ No · Gradient en cards de contenido
Gradients decorativos en cards normales.

Poner el gradient CTA-footer en cards de features "para dar variedad" satura el ojo. Cards normales van en color plano.

.feature-card { background: var(--grad-footer) }
10 · Tokens · CSS Variables

Todo el sistema en globals.css.

La fuente de verdad. Todos los valores viven en apps/web/src/app/globals.css. Nunca hardcodees hex — usá siempre las variables. Excepción: PDFs (que usan RGB normalizado) y assets estáticos.

globals.css · Psicometrikas v1.0
/* ═══════════════════════════════════════════════════
   Psicometrikas · Sistema de Color · v1.0
   Fuente: brand-book.md sección 2
   ═══════════════════════════════════════════════════ */

:root {
  /* ── Primarios ── */
  --primary:       #6366f1;   /* brand */
  --primary-dark:  #4f46e5;   /* hover, énfasis */
  --primary-light: #eef2ff;   /* soft bg */

  /* ── Acento ── */
  --accent:        #10b981;   /* emerald · éxito */
  --accent-dark:   #059669;
  --accent-light:  #ecfdf5;

  /* ── Semánticos ── */
  --danger:        #ef4444;
  --danger-light:  #fef2f2;
  --warning:       #f59e0b;
  --warning-light: #fffbeb;
  --info:          #3b82f6;
  --info-light:    #eff6ff;

  /* ── Neutrales ── */
  --text:          #111827;
  --text-secondary: #4b5563;
  --muted:         #9ca3af;
  --line:          #e6e9ef;
  --line-light:    #f0f2f5;
  --bg:            #f8f9fb;
  --card:          #ffffff;
  --card-hover:    #fafbfc;

  /* ── Gradientes ── */
  --grad-hero:   linear-gradient(180deg, #f8f9fb 0%, white 50%, #f0f0ff 100%);
  --grad-text:   linear-gradient(135deg, #6366f1, #818cf8, #a78bfa);
  --grad-footer: linear-gradient(135deg, #312e81, #6366f1, #7c3aed);
  --grad-pain:   linear-gradient(180deg, #fff 0%, #fef2f2 100%);
}

/* ── Tags categóricos (7 pares) ── */
.tag-purple { background:#eef2ff; color:#4338ca; }
.tag-teal   { background:#ecfdf5; color:#047857; }
.tag-orange { background:#fff7ed; color:#c2410c; }
.tag-pink   { background:#fdf2f8; color:#be185d; }
.tag-blue   { background:#eff6ff; color:#1d4ed8; }
.tag-amber  { background:#fffbeb; color:#b45309; }
.tag-gray   { background:#f3f4f6; color:#4b5563; }

/* ── Uso típico ── */
.pk-btn-primary {
  background: var(--primary-dark);
  color:      white;
}
.pk-body          { color: var(--text); }
.pk-text-sec      { color: var(--text-secondary); }
.pk-hint          { color: var(--muted); }
Fuente única de verdad
Si un color no está aquí, no forma parte del sistema.

Cuando alguien pida un color nuevo ("necesito un teal más claro para tal cosa"), o se agrega al brand-book.md oficial y se sincroniza acá, o se resuelve con los que ya existen. No hay colores "flotando" en components — todo pasa por CSS variables.

◼ Diseñado por

KOJ Consulting · Data-Driven Decisions

Este brandbook fue producido por KOJ Consulting a partir del brand-book.md oficial de Psicometrikas. Trabajamos con equipos que quieren interfaces que se sienten pensadas, no adivinadas.

Ver más trabajo KOJ