1. Contexto y Objetivos
Design intent · Principios rectores
Intención de diseño
Una plataforma, no una web
La interfaz de CULTIVA IA debe sentirse como explorar una instalación digital interactiva — no como navegar un dashboard genérico de SaaS. El fondo continuo verde oscuro (#00592B) actúa como canvas de exhibición permanente; las tarjetas blancas con sombras duras emergen sobre él como objetos físicos en una galería. Los botones inclinados, las tipografías condensadas en mayúsculas y los bloques geométricos crean tensión visual que evoca arcade y cartel gráfico.
Canvas único — fondo #00592B en toda la página, sin alternar colores de sección.
Contraste extremo — cards blancas sobre verde, texto negro sobre blanco, sombras duras negras.
Tipografía como elemento — Oswald bold/caps comunica la marca; el cuerpo también usa Oswald.
2. Tokens de Diseño
Color · Tipografía · Espaciado · Sombras
2.1 — Paleta de color/* tokens/colors.css */
:root {
/* Canvas */
--color-primary: #00592B; /* canvas, nav bg */
--color-secondary: #0023D1; /* accent blocks, links */
--color-highlight: #FF2D7E; /* CTAs, activos, hover underlines */
/* Semantic */
--color-surface: #FFFFFF; /* card backgrounds */
--color-text: #111827; /* text on white, borders */
--color-text-inv: #FFFFFF; /* text on canvas/dark */
--color-muted: #6B7280; /* subtext, metadata */
/* Status */
--color-success: #16A34A;
--color-warning: #D97706;
--color-danger: #DC2626;
/* Shadows — hard offset, no blur */
--shadow-card: 6px 6px 0px #111827;
--shadow-btn: 4px 4px 0px #111827;
--shadow-btn-hover: 6px 6px 0px #111827;
}
--space-1--space-2--space-3--space-4--space-6--space-83. Componentes
Anatomía · Estados · Variantes · Comportamiento
3.1 — Card de SkillAutomatización
Email Sequences
Genera secuencias de email de onboarding y nurturing con IA, personalizadas por segmento de cliente.
Contenido
Social Content
Crea calendarios editoriales y posts para LinkedIn, Instagram y Twitter adaptados a la voz de marca.
Datos
Analytics Report
Interpreta datos de GA4 y genera informes ejecutivos con insights accionables en minutos.
| Elemento | Token | Regla |
|---|---|---|
| card-bg | --color-surface (#FFF) | Siempre blanco sobre canvas verde. No usar variantes grises. |
| card-border | --border (2px #111827) | Borde negro 2px en todos los lados. Obligatorio. |
| card-shadow | --shadow-card (6px 6px 0) | Shadow dura sin blur. Offset fijo; no usar box-shadow con blur. |
| accent-bar | --color-secondary / highlight | Franja superior 4px indica categoría. Azul=default, Pink=popular, Verde=nuevo. |
| card-title | text-xl Oswald 700 uppercase | Siempre en mayúsculas. Max 3 palabras. |
| card-body | text-sm Oswald 300 | Max 2 líneas en desktop. Truncar con ellipsis si excede. |
| hover | translate(-2px,-2px) + shadow 8px | Animación 0.12s ease. Sin escala; sólo desplazamiento. |
| Estado | Transformación | Shadow | Regla |
|---|---|---|---|
| default | skewX(-2deg) | 4px 4px 0 #111827 | Base. Inclinación del botón es obligatoria en Primary y Secondary. |
| hover | skewX(-2deg) translate(-2,-2) | 6px 6px 0 #111827 | Simula "levantar" el botón. Transición 0.1s ease. |
| focus-visible | skewX(-2deg) | shadow-btn + outline | outline 3px solid #FF2D7E + offset 3px. WCAG 2.4.11 obligatorio. |
| active | skewX(-2deg) translate(2,2) | 2px 2px 0 #111827 | Simula "presionar". No usar scale(). |
| disabled | skewX(-2deg) | 2px 2px 0 #111827 | opacity 0.4. pointer-events:none. aria-disabled="true". |
| Variante | Uso semántico | Token de color |
|---|---|---|
| badge-blue | Categoría de servicio / tipo | --color-secondary |
| badge-pink | Destacado / popular / trending | --color-highlight |
| badge-green | Estado activo / nuevo / éxito | --color-success |
| badge-warning | Beta / experimental / precaución | --color-warning |
| badge-danger | Deprecado / error / bloqueado | --color-danger |
| badge-white | Neutral / sobre canvas verde | --color-surface |
| badge-outline | Precio gratuito / info secundaria | rgba(fff,0.6) border |
| Elemento | Especificación | Estado |
|---|---|---|
| nav-bg | --color-primary, border-bottom 2px #111827 | Sticky. z-index 100. |
| nav-logo | Oswald 700 20px uppercase. Span accent en --color-highlight. | Siempre visible. No truncar. |
| nav-link | JetBrains Mono 12px 700 uppercase. opacity 0.7 → 1 on hover. | Hover: border-bottom 2px #FF2D7E. Active: border permanente. |
| nav-badge | Versión del sistema. JetBrains Mono, bg #FF2D7E, shadow-badge. | Sólo lectura. No interactivo. |
| focus-visible | nav-link debe recibir outline 3px #FF2D7E al recibir foco. | WCAG 2.4.7 obligatorio. |
| responsive | En mobile (<768px): hamburger menu. Links colapsan en drawer. | Drawer en canvas verde con border derecho 2px. |
4. Accesibilidad
WCAG 2.2 AA · Keyboard-first · Criterios verificables
Contraste de color
- Texto negro (#111827) sobre blanco (#FFF): ratio 16.1:1 — PASA AA y AAA.
- Texto blanco (#FFF) sobre verde (#00592B): ratio 5.8:1 — PASA AA para texto normal.
- Badge pink (#FF2D7E) con texto blanco: ratio 3.6:1 — PASA AA para texto grande y UI.
- Texto muted (#6B7280) sobre blanco: ratio 4.6:1 — PASA AA texto normal.
- PROHIBIDO: texto blanco sobre warning (#D97706) sin verificar ratio.
Teclado e Interacción
- Todos los botones, links y cards interactivos deben ser alcanzables con Tab.
- Orden de foco debe seguir el flujo visual (izquierda-derecha, arriba-abajo).
- focus-visible obligatorio: outline 3px #FF2D7E, offset 3px. No usar outline:none sin alternativa.
- Cards interactivas deben implementar role="button" y keydown Enter/Space.
- Modales y drawers deben atrapar el foco y liberarlo al cerrar (focus trap).
Semántica HTML
- Usar etiquetas semánticas: nav, main, section, header, footer, article.
- Cada sección de contenido debe tener un heading de nivel apropiado (h1 → h6).
- Imágenes decorativas: alt="" vacío. Imágenes informativas: alt descriptivo.
- Botones con sólo icono deben tener aria-label descriptivo.
- Badges de estado deben tener role="status" o ser anunciados por aria-live.
Movimiento y Animación
- Implementar prefers-reduced-motion: desactivar translate y skew transitions si el usuario lo solicita.
- No usar animaciones de más de 5 segundos sin control de pausa.
- El efecto hover de cards (translate) debe ser opcional; la interacción no debe depender de él.
- Flashes: verificar que ningún elemento parpadea más de 3 veces/segundo (WCAG 2.3.1).
5. Anti-patrones
Implementaciones prohibidas y migraciones
Background alternado. Usar secciones con fondo blanco, gris o diferente al canvas verde. El lienzo DEBE ser verde continuo (#00592B) en toda la página.
Canvas único. Toda la página usa background:#00592B. Las cards son los únicos elementos con fondo blanco. Los separadores son bordes, no cambios de color.
Sombras con blur. box-shadow:0 4px 12px rgba(0,0,0,0.3). Las sombras difusas destruyen la estética de exhibit. PROHIBIDO en cards y botones.
Hard shadows. box-shadow: 6px 6px 0px #111827. Offset fijo, sin blur (tercer valor =0). Siempre color negro sólido.
Tipografía blanda. Usar Inter, Roboto o system-font para headings. Oswald condensado es la identidad visual; no se puede sustituir por conveniencia.
Oswald siempre. Headers y body en Oswald. Fallback: sans-serif. JetBrains Mono exclusivamente para labels técnicos, código y metadata.
Botones sin inclinación. Buttons rectangulares planos sin skewX. La inclinación (-2deg) en Primary y Secondary es parte de la identidad del sistema.
Skew consistente. transform:skewX(-2deg) en .btn-primary y .btn-secondary. Ghost buttons pueden ser rectos si el contexto lo requiere.
outline:none sin reemplazo. Eliminar el outline de foco sin implementar alternativa. Esto viola WCAG 2.4.7 y hace la interfaz inaccessible para usuarios de teclado.
focus-visible obligatorio. Siempre: outline:3px solid #FF2D7E + outline-offset:3px en :focus-visible. Se puede ocultar en :focus (no focus-visible).
Notas de migración
Componentes pre-sistema
Si existen componentes anteriores al Sistema de Diseño Inmersivo v1.0: (1) Inventariar en Notion con screenshot. (2) Mapear tokens actuales vs tokens del sistema. (3) Migrar uno por uno siguiendo la tabla de anti-patrones. (4) No mezclar estilos antiguos y nuevos en la misma vista.
6. Contenido y Tono
Voice & Tone · Etiquetas · Microcopy
| Contexto | Tono | Ejemplo correcto | Evitar |
|---|---|---|---|
| CTA botones | Acción directa, imperativo corto | "Explorar Skills" / "Activar Ahora" | "Haz click aquí" / "Ver más información" |
| Card titles | Sustantivo + verbo implícito, mayúsculas | "EMAIL SEQUENCE" / "SOCIAL CONTENT" | "Generador de secuencias de email marketing" |
| Card body | Beneficio concreto, voz activa, max 2 líneas | "Genera secuencias de nurturing listas para enviar en minutos." | "Esta herramienta puede ser usada para generar..." |
| Badges | Una o dos palabras, adjetivo/estado | "Activo" / "Beta" / "Popular" | "Actualmente en fase de pruebas beta" |
| Labels técnicos | Uppercase, monospace, conciso | "NIVEL: AVANZADO" / "v2.1.0" | "Nivel de dificultad: Avanzado para expertos" |
| Estados de error | Concreto y accionable, no culpabilizador | "No se pudo guardar. Inténtalo de nuevo." | "Error 500: Internal server error" |
7. QA Checklist
Code review · Verificación por componente
- Background de página es exclusivamente #00592B (--color-primary). Sin secciones de otro color.
- Cards usan background:#FFF, border:2px solid #111827, box-shadow:6px 6px 0 #111827.
- Botones Primary/Secondary tienen transform:skewX(-2deg) aplicado.
- Sombras NO tienen blur (3er valor del box-shadow = 0px).
- Tipografía de headings es Oswald. Labels técnicos son JetBrains Mono.
- Badges tienen border:2px solid #111827 y box-shadow:2px 2px 0 #111827.
- Espaciado respeta la escala 4/8/12/16/24/32. Sin valores arbitrarios (ej: 15px, 22px).
- Textos en cards usan Oswald weight 300 para body y 700 para títulos.
- Todos los botones tienen :focus-visible con outline 3px solid #FF2D7E + offset 3px.
- Ratio de contraste verificado con herramienta (WebAIM Contrast Checker o axe).
- Cards interactivas tienen role="button" tabindex="0" y manejan keydown Enter/Space.
- Botones disabled tienen aria-disabled="true" además de atributo HTML disabled.
- Nav header tiene role="navigation" y aria-label descriptivo.
- Imágenes tienen atributo alt (vacío si decorativas, descriptivo si informativas).
- @media (prefers-reduced-motion:reduce) desactiva transitions de cards y botones.
- Tab order es lógico y sigue el flujo visual del layout.
# Axe-core via CLI (accesibilidad)
npx @axe-core/cli http://localhost:3000 --exit
# Lighthouse (performance + a11y)
npx lighthouse http://localhost:3000 --only-categories=accessibility
# Verificar tokens CSS no sobreescritos
grep -rn "box-shadow" src/components --include="*.tsx" | grep -v "shadow-none"
# Buscar uso de outline:none sin alternativa
grep -rn "outline: none\|outline:none" src/ --include="*.css"