sdd-es 2.0.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +21 -45
- package/LICENSE +21 -0
- package/README.md +51 -21
- package/agents/architecture-designer.md +174 -0
- package/agents/arquitecto.md +16 -1
- package/agents/asesor-datos.md +15 -1
- package/agents/critico.md +37 -1
- package/agents/desarrollador-backend.md +3 -1
- package/agents/desarrollador-frontend.md +3 -1
- package/agents/disenador-api.md +13 -1
- package/agents/documentador.md +3 -1
- package/agents/investigador.md +3 -1
- package/agents/operaciones.md +3 -1
- package/agents/product-designer.md +232 -0
- package/agents/revisor.md +25 -1
- package/agents/seguridad.md +5 -1
- package/agents/tester.md +3 -1
- package/claude-hooks/agent-memory.js +154 -0
- package/cli/index.js +1 -2
- package/commands/sdd.analizar.md +23 -2
- package/commands/sdd.compliance.md +516 -0
- package/commands/sdd.configurar.md +33 -0
- package/commands/sdd.constitucion.md +198 -23
- package/commands/sdd.construir.md +210 -0
- package/commands/sdd.dise/303/261ar.md +188 -0
- package/commands/sdd.estado.md +68 -1
- package/commands/sdd.exportar.md +344 -0
- package/commands/sdd.implementar.md +203 -23
- package/commands/sdd.interpretar.md +239 -0
- package/commands/sdd.md +70 -1
- package/commands/sdd.optimizar.md +164 -0
- package/commands/sdd.planificar.md +64 -0
- package/commands/sdd.verificar.md +10 -0
- package/craft/accessibility-baseline.md +216 -0
- package/craft/anti-ai-slop.md +158 -0
- package/craft/color.md +160 -0
- package/craft/typography.md +121 -0
- package/design-systems/bold-brutalist/DESIGN.md +239 -0
- package/design-systems/editorial-minimal/DESIGN.md +205 -0
- package/design-systems/neutral-modern/DESIGN.md +227 -0
- package/design-systems/vibrant-consumer/DESIGN.md +257 -0
- package/design-systems/warm-editorial/DESIGN.md +221 -0
- package/docs/AGENTES.md +4 -1
- package/docs/FABRICA.md +164 -115
- package/docs/MEMORIA-Y-OBSERVABILIDAD.md +237 -0
- package/docs/MODELOS.md +3 -0
- package/docs/QUE-PASA-SI-FALLA.md +404 -0
- package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
- package/package.json +5 -3
- package/skills/cache-audit/SKILL.md +163 -0
- package/skills/critica-diseno/SKILL.md +193 -0
- package/skills/descubrir-idea/SKILL.md +133 -0
- package/skills/effort-router/SKILL.md +128 -0
- package/skills/elegir-direccion/SKILL.md +184 -0
- package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
- package/skills/github-connect/INDEX.md +223 -0
- package/skills/github-connect/INTEGRATION.md +361 -0
- package/skills/github-connect/QUICK-START.md +168 -0
- package/skills/github-connect/README.md +414 -0
- package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
- package/skills/github-connect/SKILL.md +343 -0
- package/skills/github-connect/STRUCTURE.txt +252 -0
- package/skills/github-connect/example-config.yaml +41 -0
- package/skills/github-connect/github-connect.sh +419 -0
- package/skills/interpretar-idea/SKILL.md +254 -0
- package/skills/memory-compactor/SKILL.md +114 -0
- package/skills/modo-guiado/SKILL.md +12 -2
- package/skills/observabilidad-consumo/SKILL.md +164 -0
- package/skills/token-budget/SKILL.md +154 -0
- package/skills/vercel-deploy/00-START-HERE.txt +364 -0
- package/skills/vercel-deploy/CHECKLIST.md +205 -0
- package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
- package/skills/vercel-deploy/FLOW.txt +334 -0
- package/skills/vercel-deploy/INDEX.md +276 -0
- package/skills/vercel-deploy/INTEGRATION.md +328 -0
- package/skills/vercel-deploy/MANIFEST.md +310 -0
- package/skills/vercel-deploy/README.md +65 -0
- package/skills/vercel-deploy/SKILL.md +356 -0
- package/skills/vercel-deploy/deploy.sh +298 -0
- package/skills/vercel-deploy/estado.json.example +205 -0
- package/skills/vercel-deploy/skill.yaml +323 -0
- package/skills/vercel-deploy/vercel-deploy.sh +216 -0
- package/skills/wireframe-mvp/SKILL.md +157 -0
- package/.claude-plugin/marketplace.json +0 -31
- package/.claude-plugin/plugin.json +0 -97
- package/docs/EJEMPLO-PRACTICA.md +0 -383
- package/docs/EJEMPLOS.md +0 -212
- /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
- /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
- /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
- /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
- /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
- /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
- /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
- /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Editorial Minimal — DESIGN.md
|
|
2
|
+
|
|
3
|
+
**Tagline**: Silencio tipográfico. El diseño que se quita de en medio.
|
|
4
|
+
|
|
5
|
+
Un sistema austero donde solo existe lo necesario. Más espacio en blanco que contenido visible. Cada elemento justifica su presencia.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Visual Theme & Atmosphere
|
|
10
|
+
|
|
11
|
+
Editorial Minimal es la reducción máxima. Sin color de acento visible en el estado de reposo. La tipografía es el único ornamento. Inspirado en la arquitectura japonesa (ma — el valor del espacio vacío) y en las mejores publicaciones tipográficas europeas.
|
|
12
|
+
|
|
13
|
+
**Sensación**: quietud, autoridad, precisión.
|
|
14
|
+
**Anti-sensación**: caos, ruido, urgencia.
|
|
15
|
+
|
|
16
|
+
Productos ideales: firmas de abogados, consultoras de alto nivel, estudios de fotografía, galerías, portfolios de diseño, plataformas editoriales premium.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 2. Color Palette & Roles
|
|
21
|
+
|
|
22
|
+
```css
|
|
23
|
+
:root {
|
|
24
|
+
/* Fondos */
|
|
25
|
+
--bg-base: #FFFFFF;
|
|
26
|
+
--bg-surface: #FAFAFA;
|
|
27
|
+
--bg-surface2: #F5F5F5;
|
|
28
|
+
|
|
29
|
+
/* Texto */
|
|
30
|
+
--text-primary: #0A0A0A;
|
|
31
|
+
--text-secondary:#2A2A2A;
|
|
32
|
+
--text-muted: #767676;
|
|
33
|
+
--text-inverse: #FFFFFF;
|
|
34
|
+
|
|
35
|
+
/* Acento — solo aparece en acciones, no en decoración */
|
|
36
|
+
--accent: #0A0A0A;
|
|
37
|
+
--accent-hover: #2A2A2A;
|
|
38
|
+
--accent-subtle: #F0F0F0;
|
|
39
|
+
|
|
40
|
+
/* Bordes */
|
|
41
|
+
--border: #E0E0E0;
|
|
42
|
+
--border-strong: #0A0A0A;
|
|
43
|
+
|
|
44
|
+
/* Semánticos */
|
|
45
|
+
--error: #CC0000;
|
|
46
|
+
--success: #006600;
|
|
47
|
+
--warning: #AA6600;
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Regla de color**: casi monocromático. El "acento" es negro sobre blanco. El único color permitido es uno de semántica (error/success), y solo cuando hay un mensaje que mostrar.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 3. Typography Rules
|
|
56
|
+
|
|
57
|
+
**Display**: Freight Display Pro (si disponible) o **Cormorant Garamond** (Google Fonts) — `font-weight: 300, 600`
|
|
58
|
+
**Body**: **IBM Plex Serif** o **Lora** (Google Fonts) — `font-weight: 400`
|
|
59
|
+
**UI labels**: **IBM Plex Sans** — `font-weight: 400, 500`
|
|
60
|
+
**Code**: IBM Plex Mono
|
|
61
|
+
|
|
62
|
+
```html
|
|
63
|
+
<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@300;600&family=Lora:wght@400&family=IBM+Plex+Sans:wght@400;500&display=swap" rel="stylesheet">
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```css
|
|
67
|
+
:root {
|
|
68
|
+
--font-display: 'Cormorant Garamond', Georgia, serif;
|
|
69
|
+
--font-body: 'Lora', Georgia, serif;
|
|
70
|
+
--font-ui: 'IBM Plex Sans', system-ui, sans-serif;
|
|
71
|
+
--font-mono: 'IBM Plex Mono', monospace;
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Escala**:
|
|
76
|
+
- Hero h1: `clamp(48px, 8vw, 96px)`, weight 300, letter-spacing -0.02em
|
|
77
|
+
- Section h2: 32px, weight 600
|
|
78
|
+
- Body: 17px, line-height 1.75
|
|
79
|
+
- UI labels: 13px, weight 500, letter-spacing 0.04em, UPPERCASE
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 4. Component Stylings
|
|
84
|
+
|
|
85
|
+
### Botones
|
|
86
|
+
```css
|
|
87
|
+
.btn-primary {
|
|
88
|
+
background: var(--accent);
|
|
89
|
+
color: var(--text-inverse);
|
|
90
|
+
padding: 12px 32px;
|
|
91
|
+
border: 1px solid var(--accent);
|
|
92
|
+
border-radius: 0; /* sin border-radius */
|
|
93
|
+
font-family: var(--font-ui);
|
|
94
|
+
font-size: 12px;
|
|
95
|
+
font-weight: 500;
|
|
96
|
+
letter-spacing: 0.1em;
|
|
97
|
+
text-transform: uppercase;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.btn-secondary {
|
|
101
|
+
background: transparent;
|
|
102
|
+
color: var(--text-primary);
|
|
103
|
+
border: 1px solid var(--border-strong);
|
|
104
|
+
/* mismas propiedades de tipografía */
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Cards
|
|
109
|
+
```css
|
|
110
|
+
.card {
|
|
111
|
+
background: var(--bg-surface);
|
|
112
|
+
border: 1px solid var(--border);
|
|
113
|
+
border-radius: 0;
|
|
114
|
+
padding: 40px;
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Inputs
|
|
119
|
+
```css
|
|
120
|
+
input, textarea {
|
|
121
|
+
border: none;
|
|
122
|
+
border-bottom: 1px solid var(--border-strong);
|
|
123
|
+
border-radius: 0;
|
|
124
|
+
padding: 12px 0;
|
|
125
|
+
background: transparent;
|
|
126
|
+
font-family: var(--font-ui);
|
|
127
|
+
font-size: 15px;
|
|
128
|
+
}
|
|
129
|
+
input:focus { border-bottom-color: var(--accent); outline: none; }
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Divisores
|
|
133
|
+
```css
|
|
134
|
+
hr { border: none; border-top: 1px solid var(--border); margin: 64px 0; }
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 5. Layout Principles
|
|
140
|
+
|
|
141
|
+
- **Máximo ancho de contenido**: 720px (texto), 1100px (layout completo)
|
|
142
|
+
- **Grid**: 12 columnas con gutter de 32px
|
|
143
|
+
- **Espaciado**: múltiplos de 8px (8, 16, 24, 32, 48, 64, 96, 128)
|
|
144
|
+
- **Margen vertical entre secciones**: mínimo 96px — el espacio es parte del diseño
|
|
145
|
+
- El espacio vacío no es "espacio perdido" — es el diseño
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 6. Depth & Elevation
|
|
150
|
+
|
|
151
|
+
Sin sombras. La elevación se comunica con bordes y diferencia de color de fondo.
|
|
152
|
+
|
|
153
|
+
```css
|
|
154
|
+
/* Sin box-shadow — usar separación cromática */
|
|
155
|
+
.elevated { background: var(--bg-surface); border: 1px solid var(--border); }
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## 7. Do's and Don'ts
|
|
161
|
+
|
|
162
|
+
**Do**:
|
|
163
|
+
- Usa el espacio vacío como elemento de diseño activo
|
|
164
|
+
- Un elemento centrado, mucho espacio alrededor — máxima elegancia
|
|
165
|
+
- Tipografía de display condensada y ligera para títulos grandes
|
|
166
|
+
- Líneas horizontales finas como únicos separadores decorativos
|
|
167
|
+
- Texto en mayúsculas solo para labels de 1–3 palabras
|
|
168
|
+
|
|
169
|
+
**Don't**:
|
|
170
|
+
- Colores de fondo en secciones (no alternar gris/blanco en secciones)
|
|
171
|
+
- Sombras de ningún tipo
|
|
172
|
+
- Más de 2 familias tipográficas
|
|
173
|
+
- Botones con border-radius redondeado
|
|
174
|
+
- Emojis o iconos decorativos de ningún tipo
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 8. Responsive Behavior
|
|
179
|
+
|
|
180
|
+
```css
|
|
181
|
+
/* Mobile first */
|
|
182
|
+
body { font-size: 16px; padding: 24px; }
|
|
183
|
+
h1 { font-size: clamp(32px, 7vw, 96px); }
|
|
184
|
+
.container { max-width: 720px; margin: 0 auto; padding: 0 24px; }
|
|
185
|
+
|
|
186
|
+
@media (min-width: 768px) {
|
|
187
|
+
body { padding: 40px; }
|
|
188
|
+
.container { padding: 0 40px; }
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## 9. Agent Prompt Guide
|
|
195
|
+
|
|
196
|
+
Cuando generes wireframes con Editorial Minimal:
|
|
197
|
+
|
|
198
|
+
- **Espacio blanco**: la pantalla debe tener más espacio vacío que contenido — si parece "llena", elimina elementos
|
|
199
|
+
- **Tipografía como jerarquía**: el título principal debe ser grande (≥ 48px), ligero (weight 300), y tener mucho espacio alrededor
|
|
200
|
+
- **Sin color de acento visible**: el negro es el acento. No añadir color decorativo
|
|
201
|
+
- **Inputs underline**: los campos de formulario solo tienen borde inferior, sin caja
|
|
202
|
+
- **Botones con borde cuadrado**: `border-radius: 0`, tipografía en mayúsculas pequeñas
|
|
203
|
+
- **Sin sombras**: la elevación es con borde y fondo diferenciado
|
|
204
|
+
- **Centrar con propósito**: elementos importantes centrados en página, no en columna lateral
|
|
205
|
+
- **La regla de oro**: si puedes eliminar un elemento y la pantalla mejora, elimínalo
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# DESIGN SYSTEM: Neutral Modern
|
|
2
|
+
|
|
3
|
+
> **Dirección**: Minimal, funcional, sobrio. Confiable sin ser frío. El diseño no compite con el contenido.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Visual Theme & Atmosphere
|
|
8
|
+
|
|
9
|
+
Calm, functional, quietly confident. Espacios amplios. Tipografía clara. Acciones obvias.
|
|
10
|
+
El producto desaparece — solo queda la tarea del usuario.
|
|
11
|
+
|
|
12
|
+
**Palabras clave**: limpio · espacioso · legible · confiable · sin adornos
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 2. Color Palette & Roles
|
|
17
|
+
|
|
18
|
+
```css
|
|
19
|
+
/* Fondos */
|
|
20
|
+
--bg-base: #FAFAFA; /* fondo principal */
|
|
21
|
+
--bg-surface: #FFFFFF; /* tarjetas, modales */
|
|
22
|
+
--bg-subtle: #F4F4F5; /* inputs, secciones alternadas */
|
|
23
|
+
--bg-emphasis: #E4E4E7; /* hover states */
|
|
24
|
+
|
|
25
|
+
/* Texto */
|
|
26
|
+
--text-primary: #111111; /* texto principal */
|
|
27
|
+
--text-secondary:#52525B; /* texto de soporte, labels */
|
|
28
|
+
--text-muted: #A1A1AA; /* placeholders, deshabilitados */
|
|
29
|
+
--text-inverse: #FFFFFF; /* texto sobre fondos oscuros */
|
|
30
|
+
|
|
31
|
+
/* Acento */
|
|
32
|
+
--accent: #2563EB; /* acciones primarias, links, focus */
|
|
33
|
+
--accent-hover: #1D4ED8; /* hover del acento */
|
|
34
|
+
--accent-subtle: #EFF6FF; /* fondos de chips, badges de acento */
|
|
35
|
+
|
|
36
|
+
/* Estado */
|
|
37
|
+
--success: #16A34A;
|
|
38
|
+
--warning: #D97706;
|
|
39
|
+
--error: #DC2626;
|
|
40
|
+
--info: #0284C7;
|
|
41
|
+
|
|
42
|
+
/* Bordes */
|
|
43
|
+
--border: #E4E4E7; /* separadores, inputs */
|
|
44
|
+
--border-strong: #A1A1AA; /* bordes con más énfasis */
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Regla de uso**: El acento aparece máximo en 2 elementos por pantalla. Nunca decorativo — solo en acciones.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 3. Typography Rules
|
|
52
|
+
|
|
53
|
+
```css
|
|
54
|
+
/* Fuentes */
|
|
55
|
+
--font-display: 'Inter', system-ui, sans-serif;
|
|
56
|
+
--font-body: 'Inter', system-ui, sans-serif;
|
|
57
|
+
--font-mono: 'JetBrains Mono', 'Fira Code', monospace;
|
|
58
|
+
|
|
59
|
+
/* Escala (8 pasos) */
|
|
60
|
+
--text-xs: 12px / 1.4;
|
|
61
|
+
--text-sm: 14px / 1.5;
|
|
62
|
+
--text-base: 16px / 1.6; /* body default */
|
|
63
|
+
--text-lg: 18px / 1.5;
|
|
64
|
+
--text-xl: 20px / 1.4;
|
|
65
|
+
--text-2xl: 24px / 1.3;
|
|
66
|
+
--text-3xl: 30px / 1.2;
|
|
67
|
+
--text-4xl: 36px / 1.1;
|
|
68
|
+
|
|
69
|
+
/* Pesos */
|
|
70
|
+
--weight-normal: 400;
|
|
71
|
+
--weight-medium: 500;
|
|
72
|
+
--weight-semibold: 600;
|
|
73
|
+
--weight-bold: 700;
|
|
74
|
+
|
|
75
|
+
/* Tracking */
|
|
76
|
+
--tracking-tight: -0.02em; /* headings grandes */
|
|
77
|
+
--tracking-normal: 0em;
|
|
78
|
+
--tracking-wide: 0.05em; /* labels, caps pequeñas */
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Reglas**:
|
|
82
|
+
- H1: 30–36px, weight 700, tracking -0.02em
|
|
83
|
+
- H2: 24px, weight 600
|
|
84
|
+
- Body: 16px, weight 400, line-height 1.6
|
|
85
|
+
- Labels: 12–14px, weight 500, UPPERCASE solo para etiquetas de categoría
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 4. Component Stylings
|
|
90
|
+
|
|
91
|
+
### Botones
|
|
92
|
+
```css
|
|
93
|
+
/* Primario */
|
|
94
|
+
.btn-primary {
|
|
95
|
+
background: var(--accent);
|
|
96
|
+
color: white;
|
|
97
|
+
padding: 10px 20px;
|
|
98
|
+
border-radius: 6px;
|
|
99
|
+
font-weight: 500;
|
|
100
|
+
font-size: 14px;
|
|
101
|
+
}
|
|
102
|
+
.btn-primary:hover { background: var(--accent-hover); }
|
|
103
|
+
|
|
104
|
+
/* Secundario */
|
|
105
|
+
.btn-secondary {
|
|
106
|
+
background: transparent;
|
|
107
|
+
border: 1px solid var(--border-strong);
|
|
108
|
+
color: var(--text-primary);
|
|
109
|
+
padding: 10px 20px;
|
|
110
|
+
border-radius: 6px;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* Ghost */
|
|
114
|
+
.btn-ghost {
|
|
115
|
+
background: transparent;
|
|
116
|
+
color: var(--text-secondary);
|
|
117
|
+
padding: 8px 16px;
|
|
118
|
+
}
|
|
119
|
+
.btn-ghost:hover { background: var(--bg-subtle); }
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Cards
|
|
123
|
+
```css
|
|
124
|
+
.card {
|
|
125
|
+
background: var(--bg-surface);
|
|
126
|
+
border: 1px solid var(--border);
|
|
127
|
+
border-radius: 8px;
|
|
128
|
+
padding: 20px 24px;
|
|
129
|
+
box-shadow: 0 1px 3px rgba(0,0,0,0.06);
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Inputs
|
|
134
|
+
```css
|
|
135
|
+
.input {
|
|
136
|
+
background: var(--bg-surface);
|
|
137
|
+
border: 1px solid var(--border);
|
|
138
|
+
border-radius: 6px;
|
|
139
|
+
padding: 10px 14px;
|
|
140
|
+
font-size: 14px;
|
|
141
|
+
color: var(--text-primary);
|
|
142
|
+
}
|
|
143
|
+
.input:focus {
|
|
144
|
+
border-color: var(--accent);
|
|
145
|
+
outline: 2px solid var(--accent-subtle);
|
|
146
|
+
outline-offset: 0;
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Badges / Tags
|
|
151
|
+
```css
|
|
152
|
+
.badge {
|
|
153
|
+
display: inline-flex;
|
|
154
|
+
padding: 2px 8px;
|
|
155
|
+
border-radius: 4px;
|
|
156
|
+
font-size: 12px;
|
|
157
|
+
font-weight: 500;
|
|
158
|
+
background: var(--bg-subtle);
|
|
159
|
+
color: var(--text-secondary);
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 5. Layout Principles
|
|
166
|
+
|
|
167
|
+
- **Grid**: 12 columnas, gutter 24px, max-width 1200px
|
|
168
|
+
- **Contenedor principal**: `max-width: 1200px; margin: 0 auto; padding: 0 24px`
|
|
169
|
+
- **Sidebar**: 240–280px fijo, contenido: el resto
|
|
170
|
+
- **Espaciado base**: múltiplos de 4px (4, 8, 12, 16, 24, 32, 48, 64, 96)
|
|
171
|
+
- **Sección vertical**: `padding-top: 64px; padding-bottom: 64px`
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 6. Depth & Elevation
|
|
176
|
+
|
|
177
|
+
Solo 2 niveles:
|
|
178
|
+
```css
|
|
179
|
+
--shadow-sm: 0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04); /* cards */
|
|
180
|
+
--shadow-md: 0 4px 12px rgba(0,0,0,0.08), 0 2px 4px rgba(0,0,0,0.04); /* modales, dropdowns */
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Sin `box-shadow` de colores. Sin sombras de 4+ capas. La elevación se comunica con el color de fondo, no con sombras.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 7. Do's and Don'ts
|
|
188
|
+
|
|
189
|
+
**✅ Hacer:**
|
|
190
|
+
- Espacios amplios entre secciones (mínimo 48px)
|
|
191
|
+
- Labels cortos y directos
|
|
192
|
+
- Un CTA primario por pantalla
|
|
193
|
+
- Alineación consistente (izquierda para texto, centro para CTAs standalone)
|
|
194
|
+
- Feedback visual claro (loading, success, error)
|
|
195
|
+
|
|
196
|
+
**❌ No hacer:**
|
|
197
|
+
- Gradientes en botones o fondos de hero
|
|
198
|
+
- Más de 2 colores de acento en la misma pantalla
|
|
199
|
+
- Bordes redondeados > 12px (excepto avatares/círculos)
|
|
200
|
+
- Texto en mayúsculas excepto labels de categoría ≤ 12px
|
|
201
|
+
- Iconos decorativos sin función
|
|
202
|
+
- Métricas inventadas ("10x más rápido")
|
|
203
|
+
- Lorem ipsum o copy de relleno
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## 8. Responsive Behavior
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
Desktop (≥1024px): 12 columnas, sidebar visible, navbar horizontal
|
|
211
|
+
Tablet (640–1023px): 8 columnas, sidebar colapsable, navbar comprimido
|
|
212
|
+
Mobile (<640px): 4 columnas (1 col layout), navegación bottom bar o hamburger
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Breakpoints**:
|
|
216
|
+
```css
|
|
217
|
+
@media (max-width: 1023px) { /* tablet */ }
|
|
218
|
+
@media (max-width: 639px) { /* mobile */ }
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 9. Agent Prompt Guide
|
|
224
|
+
|
|
225
|
+
Cuando un agente genere UI con este sistema:
|
|
226
|
+
|
|
227
|
+
> Usa el sistema Neutral Modern: fondos claros (#FAFAFA, #FFFFFF), texto oscuro (#111111), acento azul (#2563EB) solo en acciones primarias. Inter para todo el texto. Bordes sutiles (#E4E4E7), sombras mínimas. Espaciado generoso (mínimo 24px entre secciones). Sin gradientes. Sin emojis como iconos. Un solo CTA primario por pantalla. Cuando en duda, quita elementos en lugar de agregar.
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# Vibrant Consumer — DESIGN.md
|
|
2
|
+
|
|
3
|
+
**Tagline**: Energía en cada píxel. Para productos que quieren ser amados.
|
|
4
|
+
|
|
5
|
+
Un sistema de diseño de alta energía para productos B2C que compiten por atención. Color saturado, tipografía expresiva, interacciones que se sienten vivas.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Visual Theme & Atmosphere
|
|
10
|
+
|
|
11
|
+
Vibrant Consumer lleva el color al máximo sin cruzar la línea hacia lo ruidoso. Inspirado en apps como Duolingo, Notion, Linear y los mejores productos de consumo actuales. El color no es decoración — es el lenguaje.
|
|
12
|
+
|
|
13
|
+
**Sensación**: energía, accesibilidad, diversión, momentum.
|
|
14
|
+
**Anti-sensación**: aburrimiento, austeridad, frialdad.
|
|
15
|
+
|
|
16
|
+
Productos ideales: apps de fitness, educación, marketplace B2C, redes sociales, fintech para consumidores, apps de entretenimiento, onboarding de herramientas.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 2. Color Palette & Roles
|
|
21
|
+
|
|
22
|
+
```css
|
|
23
|
+
:root {
|
|
24
|
+
/* Fondos */
|
|
25
|
+
--bg-base: #F8F7FF; /* blanco con tinte violeta muy sutil */
|
|
26
|
+
--bg-surface: #FFFFFF;
|
|
27
|
+
--bg-surface2: #F0EEFF;
|
|
28
|
+
|
|
29
|
+
/* Texto */
|
|
30
|
+
--text-primary: #1A1535; /* casi negro con tinte violeta */
|
|
31
|
+
--text-secondary:#3D3660;
|
|
32
|
+
--text-muted: #7B74A8;
|
|
33
|
+
--text-inverse: #FFFFFF;
|
|
34
|
+
|
|
35
|
+
/* Acento principal — violeta vibrante */
|
|
36
|
+
--accent: #6C3FF5;
|
|
37
|
+
--accent-hover: #5A32D0;
|
|
38
|
+
--accent-subtle: #EDE8FF;
|
|
39
|
+
|
|
40
|
+
/* Acento secundario — coral/naranja para CTAs secundarios */
|
|
41
|
+
--accent2: #FF6B35;
|
|
42
|
+
--accent2-hover: #E55A24;
|
|
43
|
+
--accent2-subtle:#FFF0EB;
|
|
44
|
+
|
|
45
|
+
/* Bordes */
|
|
46
|
+
--border: #E2DCFF;
|
|
47
|
+
--border-strong: #6C3FF5;
|
|
48
|
+
|
|
49
|
+
/* Semánticos */
|
|
50
|
+
--error: #E53E3E;
|
|
51
|
+
--success: #38A169;
|
|
52
|
+
--warning: #DD6B20;
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Regla de color**: dos acentos (primario + secundario) usados con intención. El primario para acciones principales y navegación, el secundario para urgencia/promoción. Nunca mezclarlos en el mismo componente.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 3. Typography Rules
|
|
61
|
+
|
|
62
|
+
**Display**: **Nunito** (Google Fonts) — `font-weight: 800, 900` — redondeada, amigable
|
|
63
|
+
**Body**: Nunito — `font-weight: 400, 600`
|
|
64
|
+
**UI alternativa**: **Plus Jakarta Sans** — más neutra para dashboards
|
|
65
|
+
|
|
66
|
+
```html
|
|
67
|
+
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;800;900&display=swap" rel="stylesheet">
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```css
|
|
71
|
+
:root {
|
|
72
|
+
--font-display: 'Nunito', system-ui, sans-serif;
|
|
73
|
+
--font-body: 'Nunito', system-ui, sans-serif;
|
|
74
|
+
--font-mono: 'Fira Code', monospace;
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Escala**:
|
|
79
|
+
- Hero h1: 48–64px, weight 900, letter-spacing -0.02em
|
|
80
|
+
- Section h2: 28px, weight 800
|
|
81
|
+
- Body: 15px, line-height 1.65
|
|
82
|
+
- Labels: 13px, weight 600
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 4. Component Stylings
|
|
87
|
+
|
|
88
|
+
### Botones
|
|
89
|
+
```css
|
|
90
|
+
.btn-primary {
|
|
91
|
+
background: var(--accent);
|
|
92
|
+
color: var(--text-inverse);
|
|
93
|
+
padding: 14px 28px;
|
|
94
|
+
border-radius: 12px;
|
|
95
|
+
font-family: var(--font-body);
|
|
96
|
+
font-size: 15px;
|
|
97
|
+
font-weight: 700;
|
|
98
|
+
box-shadow: 0 4px 14px rgba(108, 63, 245, 0.35);
|
|
99
|
+
transition: all 0.15s;
|
|
100
|
+
}
|
|
101
|
+
.btn-primary:hover {
|
|
102
|
+
background: var(--accent-hover);
|
|
103
|
+
transform: translateY(-1px);
|
|
104
|
+
box-shadow: 0 6px 20px rgba(108, 63, 245, 0.45);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.btn-secondary {
|
|
108
|
+
background: var(--accent-subtle);
|
|
109
|
+
color: var(--accent);
|
|
110
|
+
border: none;
|
|
111
|
+
padding: 14px 28px;
|
|
112
|
+
border-radius: 12px;
|
|
113
|
+
font-weight: 700;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.btn-cta { /* para CTAs de conversión urgente */
|
|
117
|
+
background: var(--accent2);
|
|
118
|
+
color: var(--text-inverse);
|
|
119
|
+
border-radius: 12px;
|
|
120
|
+
font-weight: 800;
|
|
121
|
+
box-shadow: 0 4px 14px rgba(255, 107, 53, 0.35);
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Cards
|
|
126
|
+
```css
|
|
127
|
+
.card {
|
|
128
|
+
background: var(--bg-surface);
|
|
129
|
+
border: 1.5px solid var(--border);
|
|
130
|
+
border-radius: 16px;
|
|
131
|
+
padding: 24px;
|
|
132
|
+
box-shadow: 0 2px 8px rgba(108, 63, 245, 0.06);
|
|
133
|
+
}
|
|
134
|
+
.card:hover {
|
|
135
|
+
border-color: var(--border-strong);
|
|
136
|
+
box-shadow: 0 4px 16px rgba(108, 63, 245, 0.12);
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Inputs
|
|
141
|
+
```css
|
|
142
|
+
input, textarea, select {
|
|
143
|
+
background: var(--bg-surface);
|
|
144
|
+
border: 1.5px solid var(--border);
|
|
145
|
+
border-radius: 10px;
|
|
146
|
+
padding: 12px 16px;
|
|
147
|
+
font-family: var(--font-body);
|
|
148
|
+
font-size: 15px;
|
|
149
|
+
transition: border-color 0.15s;
|
|
150
|
+
}
|
|
151
|
+
input:focus {
|
|
152
|
+
border-color: var(--accent);
|
|
153
|
+
box-shadow: 0 0 0 3px var(--accent-subtle);
|
|
154
|
+
outline: none;
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Badges / Pills
|
|
159
|
+
```css
|
|
160
|
+
.badge {
|
|
161
|
+
display: inline-flex;
|
|
162
|
+
padding: 4px 12px;
|
|
163
|
+
border-radius: 20px;
|
|
164
|
+
font-size: 12px;
|
|
165
|
+
font-weight: 700;
|
|
166
|
+
background: var(--accent-subtle);
|
|
167
|
+
color: var(--accent);
|
|
168
|
+
}
|
|
169
|
+
.badge-success { background: #E6FFEE; color: #38A169; }
|
|
170
|
+
.badge-warning { background: #FFFBE6; color: #DD6B20; }
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Progress bars
|
|
174
|
+
```css
|
|
175
|
+
.progress { height: 8px; background: var(--border); border-radius: 4px; overflow: hidden; }
|
|
176
|
+
.progress-fill { height: 100%; background: var(--accent); border-radius: 4px; transition: width 0.5s; }
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 5. Layout Principles
|
|
182
|
+
|
|
183
|
+
- **Máximo ancho**: 1200px con padding lateral de 24px en mobile, 48px en desktop
|
|
184
|
+
- **Grid**: 12 columnas, gutter 24px
|
|
185
|
+
- **Spacing**: escala de 4px: 4, 8, 12, 16, 24, 32, 48, 64, 96
|
|
186
|
+
- **Cards en grid**: 2–3 columnas en desktop, 1 en mobile
|
|
187
|
+
- **Secciones con fondo alternado**: usar `--bg-surface2` (violeta muy claro) para secciones importantes
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## 6. Depth & Elevation
|
|
192
|
+
|
|
193
|
+
```css
|
|
194
|
+
/* Nivel 1 — base elevation */
|
|
195
|
+
.shadow-sm { box-shadow: 0 1px 4px rgba(108,63,245,0.06); }
|
|
196
|
+
|
|
197
|
+
/* Nivel 2 — cards interactivas */
|
|
198
|
+
.shadow-md { box-shadow: 0 4px 16px rgba(108,63,245,0.10); }
|
|
199
|
+
|
|
200
|
+
/* Nivel 3 — modales, dropdowns */
|
|
201
|
+
.shadow-lg { box-shadow: 0 8px 32px rgba(108,63,245,0.16); }
|
|
202
|
+
|
|
203
|
+
/* Botones CTA — sombra de color */
|
|
204
|
+
.shadow-accent { box-shadow: 0 4px 14px rgba(108,63,245,0.35); }
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 7. Do's and Don'ts
|
|
210
|
+
|
|
211
|
+
**Do**:
|
|
212
|
+
- Usa el color de acento en las acciones principales — que sea obvio qué hacer
|
|
213
|
+
- Gradientes sutiles en elementos de display (de `--accent` a `--accent-hover` horizontal — nunca diagonal)
|
|
214
|
+
- Micro-animaciones en hover de botones (`transform: translateY(-1px)`)
|
|
215
|
+
- Emojis solo en onboarding o estados vacíos (no como iconos de feature)
|
|
216
|
+
- `border-radius: 12–16px` en cards y botones — redondeado pero no excesivo
|
|
217
|
+
|
|
218
|
+
**Don't**:
|
|
219
|
+
- Gradiente en diagonal sobre el hero (regla P0 de anti-ai-slop)
|
|
220
|
+
- Usar los dos acentos juntos en el mismo componente
|
|
221
|
+
- Texto blanco sobre color claro (verificar contraste siempre)
|
|
222
|
+
- Más de 3 colores diferentes en la misma pantalla
|
|
223
|
+
- Sombras de color negro — en este sistema las sombras son del color del acento
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## 8. Responsive Behavior
|
|
228
|
+
|
|
229
|
+
```css
|
|
230
|
+
body { font-size: 15px; background: var(--bg-base); }
|
|
231
|
+
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
|
|
232
|
+
|
|
233
|
+
@media (min-width: 768px) {
|
|
234
|
+
.container { padding: 0 48px; }
|
|
235
|
+
.grid-cards { grid-template-columns: repeat(2, 1fr); }
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
@media (min-width: 1024px) {
|
|
239
|
+
.grid-cards { grid-template-columns: repeat(3, 1fr); }
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## 9. Agent Prompt Guide
|
|
246
|
+
|
|
247
|
+
Cuando generes wireframes con Vibrant Consumer:
|
|
248
|
+
|
|
249
|
+
- **El color es protagonista**: el acento violeta `#6C3FF5` en botones, links, indicadores activos — que sea visible desde lejos
|
|
250
|
+
- **Botones con sombra de color**: `box-shadow: 0 4px 14px rgba(108,63,245,0.35)` en el botón primario
|
|
251
|
+
- **Emojis permitidos** (solo en): estados vacíos, ilustraciones de onboarding, celebraciones de logro
|
|
252
|
+
- **Cards con border-radius 16px**: redondeadas pero no burbujas
|
|
253
|
+
- **Sin iconos de emoji para features** — los features usan SVG o texto, no 🚀📊✨
|
|
254
|
+
- **CTA secundario con color 2** (`--accent2`): coral/naranja para urgencia (ofertas, límites de tiempo)
|
|
255
|
+
- **Progress y gamificación**: este sistema es el adecuado para streaks, puntos, barras de progreso
|
|
256
|
+
- **Hover animado**: los botones suben 1px al hacer hover — `transform: translateY(-1px)`
|
|
257
|
+
- **Gradiente permitido** (solo): de `--accent` a `--accent-hover` en dirección horizontal, solo en elementos de display grande, nunca en el hero completo
|