CULTIVA IA · BRANDING & DISEÑO

Claymorfismo
Guía de Sistema de Diseño

Un sistema visual moderno, accesible y distintivo para la suite SaaS de CULTIVA IA — construido sobre el lenguaje visual del clay 3D suave y colorido.

v1.0.0
WCAG 2.2 AA
React + Tailwind
Poppins + Inter

CULTIVA IA adopta el claymorfismo para transmitir tecnología accesible y resultados concretos: interfaces con volumen tridimensional suave, paleta verde-azul viva, y componentes que invitan a interactuar — sin sacrificar un ápice de legibilidad ni accesibilidad WCAG 2.2 AA.

Formas redondeadas 3D Sombras multicapa Brillo interno (inset highlight) Gradientes suaves Paleta saturada Alto contraste Movimiento suave Tactilidad digital
Fundaciones del Sistema

Todos los componentes derivan de estos tokens. Nunca usar valores raw directamente en componentes — siempre referenciar el token.

Paleta de Color
Primary --color-primary #16A34A
Accent --color-accent #3B82F6
Secondary --color-secondary #A855F7
Warning --color-warning #D97706
Danger --color-danger #DC2626
Surface --color-surface #F0FDF4
Token CSSValorUso
--color-primary#16A34ACTAs, éxito, primarios
--color-accent#3B82F6Links, focus, secundarios
--color-text#14532DTexto principal
--color-danger#DC2626Errores, destructivo
Espaciado
--space-1 = 4px
--space-2 = 8px
--space-3 = 12px
--space-4 = 16px
--space-6 = 24px
--space-8 = 32px
Sombras Clay (multi-layer)
--shadow-sm
0 4px 16px rgba(primary,0.12), inset highlight
--shadow-md
0 8px 32px rgba(primary,0.18) + offset + inset
--shadow-lg (hover)
0 16px 48px rgba(primary,0.22) — estado hover
Tipografía
Display XL
Poppins 900 · 32px · --text-display-xl
Heading L
Poppins 800 · 22px · --text-heading-l
Heading M
Poppins 700 · 17px · --text-heading-m
Body Regular — Texto del dashboard
Inter 500 · 15px · --text-body
Caption — Metadatos y labels
Inter 400 · 13px · --text-caption
code snippet · mono
JetBrains Mono 400 · 13px · --text-code
Border Radius
--radius-sm
8px
--radius-md
16px
--radius-xl
24px
--radius-2xl
32px
--radius-full
9999px
Anatomía, Variantes y Estados

Cada componente debe implementar todos los estados listados. El brillo inset superior (highlight) es obligatorio en elementos interactivos.

Button
Botón principal de acción — elemento más tactil del sistema
Variantes
Estados
/* Anatomía CSS */ .btn-clay { background: linear-gradient(145deg, light, dark); border-radius: var(--radius-full); box-shadow: 0 6px 20px rgba(primary, 0.4), /* drop */ 0 2px 6px rgba(primary, 0.2), /* base */ inset 0 1px 0 rgba(255,255,255, 0.3); /* highlight */ }
Badge
Indicadores de estado, categoría o conteo — siempre con gradiente y sombra
Semántica de color
✓ Activo ⚡ IA en curso ⚠ Pendiente ✗ Error ★ Pro Borrador
Reglas de uso
ReglaRequisito
Mín. contraste sobre superficiemust 4.5:1
Label máximoshould 20 caracteres
Ícono prefijoshould aria-hidden="true"
Gradiente obligatoriomust Siempre
Inset highlightmust Siempre
Card
Contenedor de información — muestra métricas, agentes, resultados
AI
Agente SEO Orgánico
CULTIVA IA · Campaña Cafés Aroma
✓ Activo
Análisis de 47 keywords long-tail completado. Posicionamiento estimado en top 10 para 12 términos en 60 días.
border-radius: var(--radius-xl) · box-shadow: --shadow-md · ::before top border 3px gradient
Input / Form
Campos de formulario con estados de validación y focus clay
✗ Introduce un número válido (ej. 1500)
default: border #D1FAE5 · focus: glow ring rgba(primary,0.15) · error: border #DC2626
Estados de Interacción — Todos los Componentes
Cada componente interactivo MUST implementar estos estados. Sin excepción.
EstadoCSS/BehaviorRequisitoNotas de Implementación
Default box-shadow: --shadow-md must Gradiente 145deg, inset highlight obligatorio
Hover translateY(-4px) + --shadow-lg must transition: 0.15–0.2s ease. No usar cubic-bezier extraño
Focus-visible outline: 3px solid --color-accent; offset: 3px must NUNCA outline:none sin alternativa visible
Active/Pressed translateY(2px) + --shadow-sm must Simula presión física — clave para tactilidad clay
Disabled opacity: 0.7 + cursor: not-allowed must No eliminar gradiente, solo desaturar levemente
Loading spinner + aria-busy="true" should Spinner en color contrastante, botón deshabilitado
Error border: --color-danger + ring rgba(danger) must Mensaje de error visible, role="alert" en el texto
WCAG 2.2 AA — Criterios Testables

Cada criterio debe verificarse automáticamente en CI (axe-core) y manualmente en code review. "Testable" significa medible, no subjetivo.

C
Contraste de Color
Texto normal: mínimo 4.5:1 sobre surface
Texto grande (>18px bold): mínimo 3:1
Bordes de componentes interactivos: 3:1 vs adyacente
Iconos decorativos: aria-hidden="true"
Texto en verde #16A34A
✓ 4.7:1 · PASA AA
Texto claro
✗ 1.2:1 · FALLA
K
Teclado & Focus
Todos los interactivos alcanzables con Tab
Focus-visible nunca removido (WCAG 2.4.11)
Orden lógico DOM = orden visual
Escape cierra modals/dropdowns
Atrapas de foco en diálogos (focus trap)
Skip-link al inicio de páginas largas
S
Semántica & ARIA
Landmarks: main, nav, header, footer obligatorios
Botones: role="button" o tag <button> nativo
Badges de estado: aria-label descriptivo
Errores: aria-live="polite" en mensajes
Loading: aria-busy="true" + aria-label
M
Movimiento & Reducción
prefers-reduced-motion: desactivar translateY hover
Animaciones < 5s o con opción de pausa
No parallax sin control de usuario
Transiciones: máx. 0.3s para UI funcional
@media (prefers-reduced-motion: reduce) { .btn-clay, .clay-card { transition: none; transform: none !important; } }
Prohibido en CULTIVA IA

Estas implementaciones rompen la coherencia visual o la accesibilidad. Todo PR que las contenga debe ser rechazado en code review.

✗ Prohibido
Glassmorfismo mezclado con Clay
No usar backdrop-filter: blur() junto con box-shadow de clay. Las dos metáforas visuales (cristal vs. barro) se contradicen y generan incoherencia perceptual.
← Este componente viola el sistema
✓ Correcto
Clay puro con inset highlight
Usar exclusivamente box-shadow multicapa con inset superior blanco. El brillo debe venir del inset, nunca de backdrop-filter.
← Este componente es clay correcto
✗ Prohibido
Text bajo contraste sobre superficie clay
Texto #6B7280 sobre fondo #F0FDF4 tiene ratio 3.2:1 — FALLA WCAG AA para texto normal. Siempre usar --color-text (#14532D) o --color-text-muted (#166534).
✗ Texto gris 400 sobre superficie verde
✓ Texto --color-text sobre superficie verde
✗ Prohibido
Múltiples metáforas visuales
No mezclar flat design, neomorfismo, y clay en la misma pantalla. Elegir un único lenguaje visual por producto. Variaciones permitidas solo en categorías de producto distintas.
Adaptación por Breakpoint

El sistema es desktop-first pero degrada de forma elegante. Los efectos clay se reducen en móvil para mejorar rendimiento.

🖥️
Desktop ≥1024px
Sombras completas multicapa. Hover translateY(-4px). Cards con padding 32px. Grid 3 columnas.
📱
Tablet 768–1023px
Sombras reducidas 50%. Hover translateY(-2px). Cards padding 24px. Grid 2 columnas.
📲
Móvil <768px
Solo shadow-sm. Sin translateY hover. Cards padding 16px. Grid 1 columna. Botones full-width.
Ejecutar en Cada Code Review

Cada punto debe verificarse antes de aprobar un PR. Los items marcados con herramienta son automatizables en CI.

Visual · Clay Fidelity
Todos los componentes tienen inset highlight (0 1px 0 rgba(255,255,255,0.X))
Border-radius usa tokens (--radius-sm/md/xl/2xl/full)
Gradientes van de light (top) a dark (bottom) — 135–145deg
box-shadow tiene mínimo 2 capas (drop + base)
No hay backdrop-filter ni glassmorfismo
No hay flat design sin sombra en elementos interactivos
Accesibilidad · a11y
axe-core 0 errores críticos y 0 serios en Storybook
Contraste mínimo 4.5:1 verificado con Colour Contrast Analyser
Navegación completa con Tab sin ratón
Focus-visible visible (nunca outline:none sin alternativa)
@media prefers-reduced-motion implementado
NVDA/VoiceOver: labels correctos en interactivos
Tokens · Consistencia
0 valores raw de color (#hex) en componentes — solo tokens
Espaciado en múltiplos de 4px (4/8/12/16/24/32)
Tipografía solo Poppins / Inter / JetBrains Mono
Transiciones usan ease o ease-out (no linear)
Duraciones: 0.15s (micro), 0.2s (hover), 0.3s (entrada)
Estados · Interacción
Default → Hover → Active → Focus → Disabled implementados
Estado error con mensaje y aria-live
Loading con aria-busy y spinner accesible
Hover no funcional en táctil (pointer:coarse)
Botones destructivos requieren confirmación