v1.0.0 — Perspective Design System

DepthSaaS
Design System

Directrices de sistema de diseño con estética Perspective — profundidad espacial isométrica, para plataforma B2B de analítica de marketing.

Poppins + Oswald Tipografía primaria + display
#00BD7D Color primario
WCAG 2.2 AA Nivel de accesibilidad
5 componentes Documentados
01. Tokens de Color
/* Design intent: high-contrast depth palette con profundidad visual isométrica */
Primary
--color-primary · #00BD7D
Primary Dark
--color-primary-dark · #009B67
Success
--color-success · #16A34A
Warning
--color-warning · #D97706
Danger
--color-danger · #DC2626
Background
--color-bg · #0F1923
Surface Card
--color-bg-card · #162030
Text
--color-text · #111827
Regla de uso: Usar siempre semantic tokens. Nunca hardcodear valores hex directamente en componentes. Los tokens de perspectiva (--shadow-iso, --shadow-btn) se aplican en capas para crear profundidad.
02. Tipografía
/* scale: 12/14/16/20/24/32 | fonts: Poppins, Oswald, JetBrains Mono */
Análisis de Campaña Q4 — Display Heading
Oswald 700 · 32px · uppercase · letter-spacing: 0.04em · token: --text-2xl
Rendimiento de Canales Digitales
Oswald 600 · 24px · token: --text-xl
Métricas de Conversión del Dashboard
Poppins 600 · 20px · token: --text-lg
El rendimiento de la campaña de paid media mostró un incremento del 23% en CTR durante la semana 3, con una reducción del CPA de 18€ a 14€. Los canales orgánicos mantuvieron estabilidad.
Poppins 400 · 16px · line-height: 1.6 · token: --text-base
Actualizado hace 5 min · Fuente: Google Analytics 4 + Meta Ads
Poppins 400 · 14px · color: --color-text-muted · token: --text-sm
const ctr = (clicks / impressions) * 100; // 3.42%
JetBrains Mono 400 · 12px · token: --text-xs · para: código, tokens, métricas
03. Botones
/* Perspective shadow crea profundidad en todos los estados interactivos */
Primary · sm / md / lg
Secondary · Ghost · Danger · Disabled
Estado
Descripción
Token aplicado
Default
Background + shadow-btn-primary
--shadow-btn-primary
Hover
translate(-1px,-1px) + shadow amplificado
transform + box-shadow
Focus
Ring verde 3px, visible en keyboard
--shadow-focus
Disabled
opacity: 0.5, cursor: not-allowed
opacity + cursor
04. KPI Cards
/* Efecto isométrico en hover: translate(-2,-3) + shadow depth */
📊
▲ +23.4%
€42,180
Revenue MRR
🎯
▲ +8.1%
3.42%
CTR promedio
▼ -4.2%
€14.80
CPA medio
📉
▼ -12.3%
68.4%
Tasa de retención
Anatomía: icon (40×40px, border-radius-md) · trend badge (mono font) · value (Oswald 700, 36px) · label (Poppins 14px, muted) · progress bar (4px, color por variante)
Variantes: kpi-primary · kpi-success · kpi-warning · kpi-danger — heredan el color del border y del bar-fill
05. Badges de Estado
/* Siempre JetBrains Mono · dot animado en live · uppercase + letter-spacing */
Live Atención Error Inactivo Nuevo
Regla must: El dot de badge-live debe incluir animación pulse-green para comunicar estado en tiempo real. El texto debe ser ≤ 2 palabras. No usar emojis como sustituto de badges de estado.
06. Inputs de Formulario
/* Focus ring = --shadow-focus · Error state = border-color danger + ring */
🔍
Default state — hover: border-opacity 0.15
📅
Populated state — valor formateado legible
⚠ Introduce un valor numérico válido (ej: 5000)
✓ Nombre disponible
Estado
Border
Ring / Shadow
Default
--color-border (8% white)
none
Focus
--color-border-focus (#00BD7D)
--shadow-focus (3px green ring)
Error
--color-danger (#DC2626)
ring rgba(220,38,38,0.2)
07. Navegación Lateral
/* Active indicator: 3px left border + subtle background */
Reglas de componente:
• Active: left-border 3px + background primary-subtle + color primary
• Hover: background rgba(255,255,255,0.04) + color surface
• Nav badges: Poppins 700, 10px, bg primary, color black
• Section labels: Mono 10px, uppercase, letter-spacing 0.1em
• Items: 9px vertical padding, height natural (no forzar 48px)

Responsive:
• Mobile (<768px): sidebar colapsa a bottom nav o hamburger
• Solo iconos en ancho <64px (modo colapsado)
• Tooltip en hover sobre iconos cuando colapsado
08. Elementos de Perspectiva
/* Técnicas de profundidad visual propias del Perspective Design */
📦
Hover para ver efecto perspectiva
perspective(800px) rotateX(-4deg)
Depth layers — box-shadow stack
--shadow-iso · --shadow-card
Spacing scale — 4px base grid
--space-1 4px
--space-2 8px
--space-4 16px
--space-6 24px
--space-8 32px
09. Accesibilidad — WCAG 2.2 AA
/* Ratio mínimo: 4.5:1 texto normal · 3:1 texto grande · 3:1 componentes UI */
#Aa
Primary (#00BD7D) sobre Background (#0F1923)
7.3:1
AAA
#Aa
Texto blanco (#FFF) sobre Surface Card (#162030)
15.1:1
AAA
#Aa
Warning (#D97706) sobre Background — texto grande
4.8:1
AA
#Aa
Muted text (#6B7280) sobre Background — solo decorativo, no info
3.1:1
DECORATIVO
Criterios testables:
[ ] Todos los botones accesibles por teclado (Tab, Enter, Space)
[ ] Focus ring visible en todos los elementos interactivos (--shadow-focus)
[ ] Los badges no transmiten info solo por color → siempre incluir texto o dot
[ ] Inputs de error tienen aria-invalid="true" y aria-describedby apuntando al mensaje
[ ] Sidebar tiene role="navigation" y aria-label="Navegación principal"
10. Anti-Patrones
/* Prohibiciones concretas para mantener coherencia del sistema */
✗ Dont
color: #009B67 — Hardcoded hex en componente

Botón con padding inconsistente: padding: 11px 22px (fuera del scale)
✓ Do
color: var(--color-primary-dark) — Semantic token

Padding correcto: padding: var(--space-3) var(--space-6)
✗ Dont
Badge que transmite estado solo con color (sin texto ni icono). El usuario daltónico no puede diferenciarlo.
✓ Do
Badge con dot + texto: Live — Color Y texto comunican estado.
✗ Dont
KPI card sin variante de color = pérdida de contexto semántico. Todas las cards iguales dificultan el escaneo visual rápido del dashboard.
✓ Do
Asignar variante según tipo de métrica: ingresos → primary, conversión → success, coste → warning, retención crítica → danger.
11. QA Checklist — Code Review
/* Ejecutar en cada PR que toque componentes del design system */
¿Todos los colores usan semantic tokens (var(--color-*))?
¿El spacing sigue el scale 4/8/12/16/24/32 (ningún valor intermedio sin justificación)?
¿Los botones tienen los 4 estados: default, hover, focus-visible, disabled?
¿El focus ring es visible y usa --shadow-focus? ¿Se puede navegar por teclado?
¿Las KPI cards usan la variante de color semánticamente correcta para la métrica?
¿Los efectos de perspectiva (hover transforms) tienen transition definido?
¿Los inputs de error incluyen aria-invalid="true" y mensaje de error vinculado?
¿La tipografía sigue: display → Oswald, cuerpo → Poppins, código/datos → JetBrains Mono?
¿Contraste mínimo verificado con herramienta (4.5:1 texto normal, 3:1 texto grande)?
¿Los badges transmiten información por texto, no solo por color?