holygrail5 1.0.7 → 1.0.9

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/README.md CHANGED
@@ -3,1046 +3,186 @@
3
3
  [![npm version](https://img.shields.io/npm/v/holygrail5.svg)](https://www.npmjs.com/package/holygrail5)
4
4
  [![npm downloads](https://img.shields.io/npm/dm/holygrail5.svg)](https://www.npmjs.com/package/holygrail5)
5
5
 
6
- Framework CSS generator con Node.js que genera CSS optimizado con variables CSS compartidas desde un archivo JSON de configuración.
6
+ Generador de CSS + guía HTML pensado para design systems ligeros: declaras tu `config.json`, HolyGrail5 crea variables compartidas, helpers responsive, tipografías y documentación navegable en `dist/` sin depender de SASS ni toolchains complejos.
7
7
 
8
- ## 📦 Instalación
8
+ ---
9
+
10
+ ## Índice
11
+ 1. [Instalación](#1-instalación)
12
+ 2. [Flujo rápido](#2-flujo-rápido)
13
+ 3. [Scripts disponibles](#3-scripts-disponibles)
14
+ 4. [¿Qué se genera?](#4-qué-se-genera)
15
+ 5. [Configurar `config.json`](#5-configurar-configjson)
16
+ 6. [CLI y argumentos](#6-cli-y-argumentos)
17
+ 7. [Guía HTML interactiva](#7-guía-html-interactiva)
18
+ 8. [Gestión de variables históricas](#8-gestión-de-variables-históricas)
19
+ 9. [Tema Dutti y demos](#9-tema-dutti-y-demos)
20
+ 10. [Flujo de desarrollo](#10-flujo-de-desarrollo)
21
+ 11. [Tests y calidad](#11-tests-y-calidad)
22
+ 12. [Documentos complementarios](#12-documentos-complementarios)
23
+ 13. [Recursos y soporte](#13-recursos-y-soporte)
24
+ 14. [Licencia](#14-licencia)
9
25
 
26
+ ---
27
+
28
+ ## 1. Instalación
10
29
  ```bash
11
30
  # Instalación global
12
31
  npm install -g holygrail5
13
32
 
14
- # Instalación local
15
- npm install holygrail5
33
+ # Instalación local (recomendada)
34
+ npm install holygrail5 --save-dev
16
35
  ```
36
+ > Requiere Node.js >= 12 (probado hasta v20).
17
37
 
18
- ## 🚀 Inicio Rápido
19
-
38
+ ## 2. Flujo rápido
20
39
  ```bash
21
- # 1. Generar CSS y HTML
40
+ # 1) Genera CSS + guía
22
41
  npx holygrail5
23
42
 
24
- # 2. Ver la guía interactiva
43
+ # 2) Sirve dist/ en local
25
44
  npm run serve
26
- # Abre http://localhost:3000/index.html
27
- ```
28
-
29
- ## ✨ Características Principales
30
-
31
- - 🎨 **CSS optimizado** con variables CSS compartidas (mínimas y eficientes)
32
- - 📱 **Soporte responsive** con breakpoints personalizables (mobile/desktop)
33
- - 🔧 **Configuración simple** mediante JSON
34
- - 📊 **Guía HTML interactiva** generada automáticamente con detección de cambios
35
- - 🛠️ **Helpers de spacing** estilo Tailwind con propiedades lógicas (RTL)
36
- - 🎨 **Sistema de colores** con variables CSS
37
- - 📐 **Helpers de layout** (display, flexbox, alignment, gap)
38
- - 👀 **Modo watch** para desarrollo con regeneración automática
39
- - 🔍 **Gestión de variables CSS** con historial persistente
40
-
41
- ## ⚖️ ¿Por qué HolyGrail5?
42
-
43
- | Aspecto | Solo Tailwind | HolyGrail5 (Híbrido) |
44
- |--------------------------|-------------------------------------------------------------------------------|---------------------------------------------------------------------|
45
- | Velocidad de desarrollo | 🔥 Muy alta | 🔥 Alta |
46
- | Consistencia visual | ⚠️ Difícil mantener si hay muchas utilidades | ✅ Mantienes branding y coherencia |
47
- | Escalabilidad | ⚠️ Costoso en proyectos grandes | ✅ Fácil de mantener |
48
- | Curva de aprendizaje | Media | Baja si ya vienes de BEM/SCSS |
49
- | Control sobre design system | ❌ Limitado | ✅ Total |
50
- | Performance CSS final | ✅ Muy buena | ✅ Muy buena |
51
-
52
- ## 📖 Uso
53
-
54
- ### CLI
55
-
56
- ```bash
57
- # Uso básico (genera en dist/)
58
- npx holygrail5
59
- # o
60
- npm run generate
61
-
62
- # Con argumentos personalizados
63
- npx holygrail5 --config=./config.json --output=./dist/output.css --html=./dist/index.html
64
- ```
65
-
66
- ### Módulo Node.js
67
-
68
- ```javascript
69
- const { generateCSS, generateHTML } = require('holygrail5');
70
- const config = require('./config.json');
45
+ # http://localhost:3000/index.html
71
46
 
72
- const css = generateCSS(config);
73
- const html = generateHTML(config);
74
- ```
75
-
76
- ### Scripts de Desarrollo
77
-
78
- ```bash
79
- # Modo watch (regenera automáticamente al cambiar config.json)
80
- npm run watch
81
-
82
- # Desarrollo completo (watch + servidor HTTP en localhost:3000)
83
- npm run dev
47
+ # 3) Trabaja en caliente
48
+ npm run watch # regenera al guardar config.json
49
+ npm run dev # watch + servidor
84
50
 
85
- # Solo servidor HTTP (sirve desde dist/ como raíz)
86
- npm run serve
87
-
88
- # Generar y abrir servidor
89
- npm run start
51
+ # 4) Empaqueta tema Dutti y demo
52
+ npm run build # corre generate-css.js + copy-theme-html.js
90
53
  ```
91
54
 
92
- > **Nota:** El servidor sirve desde `dist/` como raíz, así que la URL será `http://localhost:3000/index.html` (sin mostrar "dist" en la URL).
93
-
94
- ## ⚙️ Configuración
95
-
96
- ### Estructura del `config.json`
97
-
98
- ```json
55
+ ## 3. Scripts disponibles
56
+ | Script | Descripción |
57
+ | ------ | ----------- |
58
+ | `npm run build` | Ejecuta `generate-css.js` y copia la demo del tema. |
59
+ | `npm run watch` | Observa `config.json` y regenera CSS/HTML. |
60
+ | `npm run serve` | Abre el navegador y sirve `dist/` en el puerto 3000. |
61
+ | `npm run dev` | Alias práctico: `watch` + `serve`. |
62
+ | `npm run test` | Corre los tests de `tests/run-all.js`. |
63
+ | `npm run vars:report` | Informe completo de variables CSS. |
64
+ | `npm run vars:remove-unused` | Limpia variables históricas no usadas. |
65
+
66
+ ## 4. ¿Qué se genera?
67
+ - `dist/output.css` → Reset, variables compartidas, helpers de spacing, helpers de layout, grid opcional y tipografías mobile/desktop.
68
+ - `dist/index.html` → Guía interactiva con navegación sticky, buscador y diffs visuales.
69
+ - `dist/themes/dutti.css` + `dist/themes/dutti-demo.html` cuando `theme.enabled` es `true` (ver [Tema Dutti](#9-tema-dutti-y-demos)).
70
+
71
+ ## 5. Configurar `config.json`
72
+ ### 5.1 Ejemplo mínimo
73
+ ```jsonc
99
74
  {
100
75
  "prefix": "hg",
101
- "category": "typo",
102
76
  "baseFontSize": 16,
77
+ "breakpoints": { "mobile": "1px", "desktop": "992px" },
103
78
  "fontFamilyMap": {
104
79
  "primary": "arial, sans-serif",
105
80
  "secondary": "\"ms-serif\", serif"
106
81
  },
107
- "breakpoints": {
108
- "mobile": "0px",
109
- "desktop": "992px"
110
- },
111
- "spacingMap": {
112
- "0": "0",
113
- "4": "4px",
114
- "8": "8px",
115
- "16": "16px",
116
- "24": "24px"
117
- },
82
+ "colors": { "white": "#fff", "black": "#000" },
83
+ "spacingMap": { "0": "0", "16": "16px", "100-percent": "100%" },
118
84
  "spacingImportant": ["0"],
119
- "colors": {
120
- "white": "#ffffff",
121
- "black": "#000000",
122
- "primary": "#000000",
123
- "error": "#b40016"
124
- },
125
85
  "helpers": {
126
- "display": {
127
- "property": "display",
128
- "class": "d",
129
- "responsive": true,
130
- "description": "Tipo de caja de renderizado",
131
- "values": ["flex", "block", "none"]
132
- }
86
+ "display": { "property": "display", "class": "d", "responsive": true, "values": ["flex", "block", "none"] }
133
87
  },
134
- "classes": {
88
+ "grid": { "enabled": true, "gutter": "8px", "breakpoints": { "md": { "minWidth": "992px", "columns": 12 } } },
89
+ "typo": {
135
90
  "h2": {
136
91
  "fontFamily": "arial, sans-serif",
137
92
  "fontWeight": "900",
138
- "letterSpacing": "0rem",
139
- "textTransform": "none",
140
- "mobile": {
141
- "fontSize": "18px",
142
- "lineHeight": "1.2"
143
- },
144
- "desktop": {
145
- "fontSize": "24px",
146
- "lineHeight": "1.2"
147
- }
148
- }
149
- }
150
- }
151
- ```
152
-
153
- ### Propiedades Globales
154
-
155
- | Propiedad | Tipo | Default | Descripción |
156
- |-----------|------|---------|-------------|
157
- | `prefix` | string | `"hg"` | Prefijo para variables CSS (ej: `--hg-typo-...`) |
158
- | `category` | string | `"typo"` | Categoría para variables CSS |
159
- | `baseFontSize` | number | `16` | Tamaño base para conversión px→rem |
160
- | `fontFamilyMap` | object | - | Mapeo de nombres a fuentes CSS |
161
- | `breakpoints` | object | **Requerido** | Breakpoints mobile/desktop |
162
- | `spacingMap` | object | - | Valores de spacing para helpers (px o %) |
163
- | `spacingImportant` | array | - | Valores de spacing que usan `!important` |
164
- | `colors` | object | - | Paleta de colores (nombre → hex) |
165
- | `helpers` | object | - | Helpers de layout (display, flexbox, etc.) |
166
- | `classes` | object | **Requerido** | Clases CSS de tipografía a generar |
167
-
168
- ### Propiedades de Clases
169
-
170
- **Base (aplicadas a todos los breakpoints):**
171
-
172
- - `fontFamily`: Familia de fuente
173
- - `fontWeight`: Peso de fuente (100, 400, 700, 900)
174
- - `letterSpacing`: Espaciado entre letras (ej: "0rem")
175
- - `textTransform`: Transformación (none, uppercase, lowercase)
176
-
177
- **Responsive (por breakpoint):**
178
-
179
- - `mobile`: `{ fontSize: "18px", lineHeight: "1.2" }`
180
- - `desktop`: `{ fontSize: "24px", lineHeight: "1.5" }`
181
-
182
- ## 🎯 Helpers de Spacing
183
-
184
- Genera clases estilo Tailwind para padding y margin con **propiedades lógicas** para soporte RTL automático:
185
-
186
- ```css
187
- /* Mobile - Propiedades lógicas */
188
- .p-4 { padding: var(--hg-spacing-4); }
189
- .pr-4 { padding-inline-end: var(--hg-spacing-4); }
190
- .pl-4 { padding-inline-start: var(--hg-spacing-4); }
191
- .m-8 { margin: var(--hg-spacing-8); }
192
- .mr-8 { margin-inline-end: var(--hg-spacing-8); }
193
- .ml-8 { margin-inline-start: var(--hg-spacing-8); }
194
-
195
- /* Desktop (md:) - Con media query */
196
- @media (min-width: 62rem) {
197
- .md\:p-4 { padding: var(--hg-spacing-4); }
198
- .md\:pr-8 { padding-inline-end: var(--hg-spacing-8); }
199
- }
200
- ```
201
-
202
- > **Nota:** Las propiedades `pr`/`pl` y `mr`/`ml` usan `padding-inline-end/start` y `margin-inline-end/start` para soporte RTL automático.
203
-
204
- ## 🎨 Sistema de Colores
205
-
206
- Define colores en `config.json` y se generan como variables CSS:
207
-
208
- ```json
209
- {
210
- "colors": {
211
- "white": "#ffffff",
212
- "black": "#000000",
213
- "primary": "#000000",
214
- "error": "#b40016",
215
- "success": "#76ae4a"
216
- }
217
- }
218
- ```
219
-
220
- **CSS generado:**
221
-
222
- ```css
223
- :root {
224
- --hg-color-white: #ffffff;
225
- --hg-color-black: #000000;
226
- --hg-color-primary: #000000;
227
- --hg-color-error: #b40016;
228
- --hg-color-success: #76ae4a;
229
- }
230
- ```
231
-
232
- **Uso:**
233
-
234
- ```css
235
- .my-element {
236
- background-color: var(--hg-color-primary);
237
- color: var(--hg-color-white);
238
- }
239
- ```
240
-
241
- ## 📐 Helpers de Layout
242
-
243
- Genera helpers para display, flexbox, alignment y gap:
244
-
245
- ```json
246
- {
247
- "helpers": {
248
- "display": {
249
- "property": "display",
250
- "class": "d",
251
- "responsive": true,
252
- "description": "Tipo de caja de renderizado",
253
- "values": ["flex", "block", "none"]
254
- },
255
- "flex-direction": {
256
- "property": "flex-direction",
257
- "class": "flex",
258
- "responsive": true,
259
- "description": "Dirección del eje principal",
260
- "values": {
261
- "row": "row",
262
- "column": "column"
263
- }
93
+ "mobile": { "fontSize": "18px", "lineHeight": "1.2" },
94
+ "desktop": { "fontSize": "24px", "lineHeight": "1.2" }
264
95
  }
265
96
  }
266
97
  }
267
98
  ```
268
99
 
269
- **CSS generado:**
270
-
271
- ```css
272
- .hg-d-flex { display: flex; }
273
- .hg-d-block { display: block; }
274
- .hg-flex-row { flex-direction: row; }
275
- .hg-flex-column { flex-direction: column; }
276
-
277
- @media (min-width: 992px) {
278
- .md\:hg-d-flex { display: flex; }
279
- .md\:hg-flex-row { flex-direction: row; }
280
- }
281
- ```
282
-
283
- ## 📄 Archivos Generados
284
-
285
- ### `dist/output.css`
286
-
287
- CSS generado con estructura organizada:
288
-
289
- 1. **Reset CSS Mínimo** - Normalización básica
290
- 2. **Variables CSS Compartidas** (`:root`) - Variables para:
291
- - Font families, font sizes, line heights
292
- - Font weights, letter spacing, text transform
293
- - Spacing values, colors
294
- 3. **Helpers de Spacing (Mobile)** - Padding y margin con propiedades lógicas
295
- 4. **Helpers de Spacing (Desktop)** - Versiones `md:` con media queries
296
- 5. **Layout Helpers** - Display, flexbox, alignment, gap
297
- 6. **Tipografías (Mobile)** - Clases responsive para mobile
298
- 7. **Tipografías (Desktop)** - Clases responsive para desktop
299
-
300
- ### `dist/index.html`
301
-
302
- Guía HTML interactiva generada automáticamente con:
303
-
304
- - 🎨 **Grid de colores** - Visualización de la paleta de colores con preview
305
- - 🔤 **Font Families** - Tabla con preview de fuentes
306
- - 📝 **Clases de Tipografía** - Tabla completa con preview y valores responsive
307
- - 🔗 **Variables CSS Compartidas** - Todas las variables generadas
308
- - 📏 **Helpers de Spacing** - Tabla con clases y variables
309
- - 📐 **Helpers de Layout** - Tabla con clases base y responsive (`md:`)
310
- - 📱 **Breakpoints** - Configuración de breakpoints
311
- - 🔍 **Búsqueda en tiempo real** - Filtra y resalta contenido
312
- - 🎯 **Detección de cambios** - Valores modificados se resaltan en verde
313
- - 📌 **Header sticky** - Navegación siempre visible
314
- - 📋 **Menú lateral** - Navegación rápida con scroll suave
315
- - 📊 **Metadata** - Último commit y versión del package
316
-
317
- ## 🔍 Gestión de Variables CSS
318
-
319
- El generador mantiene un historial de todas las variables CSS generadas en `.data/.historical-variables.json` para que nunca se eliminen automáticamente, incluso si se borran las clases que las usaban.
320
-
321
- ### Comandos Disponibles
322
-
100
+ ### 5.2 Propiedades globales
101
+ | Campo | Tipo | Descripción |
102
+ | ----- | ---- | ----------- |
103
+ | `prefix` | string | Prefijo usado en todas las variables (`--hg-color-*`). |
104
+ | `baseFontSize` | number | Conversión automática px → rem (default `16`). |
105
+ | `breakpoints.mobile` / `.desktop` | string | Valores usados en media queries (`992px`, etc.). |
106
+ | `fontFamilyMap` | object | Alias legibles para las fuentes declaradas en tipografías. |
107
+ | `colors` | object | Paleta exportada como `--hg-color-*`. |
108
+ | `spacingMap` | object | Escala lógica de spacing (px o %). |
109
+ | `spacingImportant` | string[] | Keys de spacing con `!important`. |
110
+ | `helpers` | object | Helpers de layout. Permite arrays simples o mapas clave → valor. |
111
+ | `grid` | object | Define breakpoints, columnas y gutter por tamaño. |
112
+ | `typo` | object | Clases de tipografía (obligatorio al menos un breakpoint). |
113
+ | `theme` | object | `{ name, enabled }` para combinar temas desde `themes/<name>`. |
114
+
115
+ ### 5.3 Helpers y grid
116
+ - `src/generators/helpers-generator.js` crea clases del tipo `.hg-d-flex`, `.md\:hg-justify-center`, `.hg-gap-16`, etc.
117
+ - Puedes mezclar helpers basados en `values` y helpers que reutilizan `spacingMap` con `useSpacing: true` (gap, row-gap, column-gap...).
118
+ - El grid (`grid.enabled=true`) genera utilidades `.row`, `.col-md-6`, offsets, contenedores fluidos y variantes por breakpoint.
119
+
120
+ ### 5.4 Tipografías
121
+ - El generador (`src/generators/typo-generator.js`) deduplica valores y crea variables compartidas (`--hg-typo-font-size-24`).
122
+ - Cada clase admite propiedades base (`fontFamily`, `fontWeight`, `letterSpacing`, `textTransform`) y propiedades por breakpoint (`fontSize`, `lineHeight`).
123
+ - Los valores px se convierten automáticamente a rem respetando `baseFontSize`.
124
+
125
+ ## 6. CLI y argumentos
126
+ `generate-css.js` puede ejecutarse como binario (`holygrail5`) o mediante `node generate-css.js`.
127
+
128
+ Argumentos soportados:
323
129
  ```bash
324
- # Listar variables no usadas
325
- npm run vars:list
326
-
327
- # Ver reporte completo de variables
328
- npm run vars:report
329
-
330
- # Eliminar una variable específica del historial
331
- npm run vars:remove -- --hg-typo-font-size-18
332
-
333
- # Eliminar todas las variables no usadas del historial
334
- npm run vars:remove-all-unused
335
-
336
- # Mostrar todas las variables históricas almacenadas
337
- npm run vars:show-all
130
+ npx holygrail5 \
131
+ --config=./config.personal.json \
132
+ --output=./dist/custom.css \
133
+ --html=./dist/guia.html
338
134
  ```
135
+ - Todos los parámetros son opcionales. Si omites alguno, se usan las rutas por defecto (`config.json` y `dist/*`).
136
+ - El script ajusta automáticamente el `href="output.css"` del HTML si CSS y HTML viven en carpetas distintas.
339
137
 
340
- ### Ejemplo de Uso
341
-
342
- ```bash
343
- # 1. Generar CSS
344
- npm run generate
345
-
346
- # 2. Ver qué variables no se están usando
347
- npm run vars:list
348
-
349
- # 3. Eliminar variables no usadas
350
- npm run vars:remove-all-unused
138
+ ## 7. Guía HTML interactiva
139
+ El módulo `src/docs-generator/html-generator.js` produce `dist/index.html` con:
140
+ - Resumen visual de colores, tipografías y spacing.
141
+ - Detección de cambios: los valores modificados respecto a `.data/.previous-values.json` se resaltan.
142
+ - Buscador instantáneo y navegación lateral fija.
143
+ - Información de metadata (versión del paquete y último commit disponible).
351
144
 
352
- # 4. Regenerar CSS sin las variables eliminadas
353
- npm run generate
354
- ```
355
-
356
- ### Opciones Avanzadas
145
+ ## 8. Gestión de variables históricas
146
+ El binario `src/docs-generator/variables-cli.js` + el módulo `variables-tracker` guardan un historial en `.data/.historical-variables.json` para que ninguna variable desaparezca sin que lo decidas.
357
147
 
148
+ Comandos útiles:
358
149
  ```bash
359
- # Especificar ruta personalizada del CSS
360
- node src/cli-variables.js report --css=./dist/output.css
361
-
362
- # Especificar ruta personalizada del historial
363
- node src/cli-variables.js list --history=./.data/.custom-variables.json
364
- ```
365
-
366
- ## 🔧 Scripts NPM
367
-
368
- | Script | Descripción |
369
- |--------|-------------|
370
- | `npm run generate` | Genera CSS y HTML en `dist/` |
371
- | `npm run watch` | Modo watch (regenera al cambiar config.json) |
372
- | `npm run dev` | Watch + servidor HTTP en localhost:3000 |
373
- | `npm run serve` | Solo servidor HTTP (sirve desde dist/) |
374
- | `npm run start` | Genera y abre servidor HTTP |
375
- | `npm run test` | Ejecuta la suite de tests |
376
- | `npm run vars:list` | Lista variables CSS no usadas |
377
- | `npm run vars:report` | Reporte completo de variables |
378
- | `npm run vars:remove` | Elimina una variable del historial |
379
- | `npm run vars:remove-all-unused` | Elimina todas las variables no usadas |
380
- | `npm run vars:show-all` | Muestra todas las variables históricas |
381
-
382
- ## 🔑 Características Técnicas
383
-
384
- ### Variables Compartidas
385
-
386
- Las variables se generan basándose en **valores únicos**, no en clases:
387
-
388
- - Múltiples clases con `fontWeight: "900"` una sola variable `--hg-typo-font-weight-900`
389
- - Optimiza el CSS eliminando duplicados
390
- - Historial persistente en `.data/.historical-variables.json`
391
-
392
- ### Conversión px → rem
393
-
394
- - `fontSize` en JSON: `"18px"` CSS: `1.125rem` (usando `baseFontSize: 16`)
395
- - Nombre de variable mantiene el valor original: `--hg-typo-font-size-18`
396
- - Conversión automática para todos los valores en píxeles
397
-
398
- ### Nombres de Variables
399
-
400
- Patrón: `--{prefix}-{category}-{propiedad}-{valor}`
401
-
402
- Ejemplos:
403
-
404
- - `--hg-typo-font-family-primary`
405
- - `--hg-typo-font-size-18`
406
- - `--hg-spacing-4`
407
- - `--hg-color-white`
408
-
409
- ### Propiedades Lógicas (RTL)
410
-
411
- Los helpers de spacing usan propiedades lógicas para soporte RTL automático:
412
-
413
- - `pr-4` → `padding-inline-end` (no `padding-right`)
414
- - `pl-4` → `padding-inline-start` (no `padding-left`)
415
- - `mr-8` → `margin-inline-end` (no `margin-right`)
416
- - `ml-8` → `margin-inline-start` (no `margin-left`)
417
-
418
- ## 🎨 Ejemplo de CSS Generado
419
-
420
- ```css
421
- /* Reset CSS Mínimo */
422
- html {
423
- box-sizing: border-box;
424
- font-size: 16px;
425
- }
426
-
427
- /* Variables CSS Compartidas */
428
- :root {
429
- --hg-typo-font-family-primary: arial, sans-serif;
430
- --hg-typo-font-size-18: 1.125rem;
431
- --hg-typo-font-size-24: 1.5rem;
432
- --hg-typo-line-height-1-2: 1.2;
433
- --hg-spacing-4: 0.25rem;
434
- --hg-spacing-8: 0.5rem;
435
- --hg-color-white: #ffffff;
436
- --hg-color-primary: #000000;
437
- }
438
-
439
- /* Helpers de Spacing - Mobile */
440
- .p-4 { padding: var(--hg-spacing-4); }
441
- .pr-4 { padding-inline-end: var(--hg-spacing-4); }
442
- .pl-4 { padding-inline-start: var(--hg-spacing-4); }
443
- .m-8 { margin: var(--hg-spacing-8); }
444
-
445
- /* Helpers de Spacing - Desktop (md:) */
446
- @media (min-width: 62rem) {
447
- .md\:p-4 { padding: var(--hg-spacing-4); }
448
- .md\:pr-8 { padding-inline-end: var(--hg-spacing-8); }
449
- }
450
-
451
- /* Layout Helpers */
452
- .hg-d-flex { display: flex; }
453
- .hg-flex-row { flex-direction: row; }
454
- .hg-justify-center { justify-content: center; }
455
- .hg-items-center { align-items: center; }
456
- .hg-gap-16 { gap: 1rem; }
457
-
458
- @media (min-width: 992px) {
459
- .md\:hg-d-flex { display: flex; }
460
- .md\:hg-flex-row { flex-direction: row; }
461
- }
462
-
463
- /* Tipografías - Mobile */
464
- @media (min-width: 0rem) {
465
- .h2 {
466
- font-family: var(--hg-typo-font-family-primary);
467
- font-size: var(--hg-typo-font-size-18);
468
- line-height: var(--hg-typo-line-height-1-2);
469
- }
470
- }
471
-
472
- /* Tipografías - Desktop */
473
- @media (min-width: 62rem) {
474
- .h2 {
475
- font-size: var(--hg-typo-font-size-24);
476
- }
477
- }
478
- ```
479
-
480
- ## 🏗️ Estructura del Proyecto
481
-
482
- ```
483
- holygrail5/
484
- ├── generator.js # Orquestador principal
485
- ├── config.json # Configuración del proyecto
486
- ├── package.json # Dependencias y scripts
487
- ├── README.md # Este archivo
488
- ├── .data/ # Archivos de estado (gitignored)
489
- │ ├── .previous-values.json # Valores previos para detección de cambios
490
- │ └── .historical-variables.json # Historial de variables CSS
491
- ├── dist/ # Archivos generados (gitignored)
492
- │ ├── output.css # CSS generado
493
- │ └── index.html # Guía HTML interactiva
494
- ├── src/
495
- │ ├── config.js # Carga y validación de configuración
496
- │ ├── parser.js # Generación de CSS desde JSON
497
- │ ├── guide.js # Generación de guía HTML interactiva
498
- │ ├── utils.js # Utilidades compartidas (px→rem, etc.)
499
- │ ├── variables-manager.js # Gestión de variables CSS históricas
500
- │ ├── cli-variables.js # CLI para gestión de variables
501
- │ ├── watch.js # Modo watch para desarrollo
502
- │ └── dev.js # Script de desarrollo (watch + servidor)
503
- └── tests/
504
- ├── run-all.js # Ejecutor de todos los tests
505
- ├── config.test.js # Tests de configuración
506
- ├── parser.test.js # Tests del parseador
507
- ├── guide.test.js # Tests de la guía HTML
508
- └── utils.test.js # Tests de utilidades
509
- ```
510
-
511
- ## 🐛 Solución de Problemas
512
-
513
- **Error: "Archivo de configuración no encontrado"**
514
-
515
- ```bash
516
- npx holygrail5 --config=./ruta/config.json
517
- ```
518
-
519
- **Error: "La configuración debe tener un objeto 'classes'"**
520
-
521
- Verifica que `config.json` tenga la propiedad `classes` con al menos una clase.
522
-
523
- **Error: "La clase debe tener al menos un breakpoint"**
524
-
525
- Cada clase debe tener al menos `mobile` o `desktop`.
526
-
527
- **El servidor no muestra los cambios**
528
-
529
- - Recarga con `Cmd+Shift+R` (Mac) o `Ctrl+Shift+R` (Windows/Linux)
530
- - Verifica que el modo watch esté activo si usas `npm run dev`
531
-
532
- **Variables no se detectan como no usadas**
533
-
534
- Ejecuta `npm run generate` primero para actualizar el historial de variables.
535
-
536
- ## 🌐 GitHub Pages
537
-
538
- Para desplegar en GitHub Pages, puedes:
539
-
540
- 1. Configurar GitHub Pages para usar la carpeta `dist/` como fuente
541
- 2. O crear un workflow de GitHub Actions que genere los archivos en `docs/` automáticamente
542
-
543
- **Opción 1 - Usar dist/ directamente:**
544
-
545
- - En Settings → Pages, selecciona la rama y carpeta `dist/`
546
-
547
- **Opción 2 - Workflow automático:**
548
-
549
- - Crea `.github/workflows/deploy.yml` que ejecute `npm run generate` y copie archivos a `docs/`
550
-
551
- ## 📚 Recursos
552
-
553
- - **Repositorio**: [GitHub](https://github.com/holygrailcss/holygrail5.git)
554
- - **npm**: [holygrail5](https://www.npmjs.com/package/holygrail5)
555
- - **Licencia**: MIT
556
- - **Node.js**: Requiere >=12.0.0
557
-
558
- ## 🤝 Contribuir
559
-
560
- 1. Fork el repositorio
561
- 2. Crea una rama (`git checkout -b feature/AmazingFeature`)
562
- 3. Commit tus cambios (`git commit -m 'Add AmazingFeature'`)
563
- 4. Push a la rama (`git push origin feature/AmazingFeature`)
564
- 5. Abre un Pull Request
565
-
566
- ## 📝 Changelog
567
-
568
- ### v1.0.2
569
-
570
- - ✅ Sistema de colores con variables CSS
571
- - ✅ Helpers de layout (display, flexbox, alignment, gap)
572
- - ✅ Propiedades lógicas para soporte RTL
573
- - ✅ Guía HTML mejorada con grid de colores
574
- - ✅ Búsqueda interactiva en la guía
575
- - ✅ Header sticky y menú lateral
576
- - ✅ Reorganización del proyecto (`.data/` para archivos de estado)
577
- - ✅ Archivos generados en `dist/`
578
-
579
- ---
580
-
581
- ## 🚀 ¿Por qué HolyGrail5? Evolución desde HolyGrail CSS (SASS)
582
-
583
- ### El Problema con SASS
584
-
585
- HolyGrail CSS original se basaba en **SASS/SCSS**, lo que presentaba varios desafíos:
586
-
587
- #### Limitaciones de SASS
588
-
589
- 1. **Dependencia de compilación**: Requiere herramientas de build (Gulp, Webpack, etc.) y procesos de compilación
590
- 2. **Curva de aprendizaje**: Necesitas conocer SASS/SCSS para personalizar
591
- 3. **Configuración compleja**: Variables SASS dispersas en múltiples archivos
592
- 4. **Sin documentación automática**: No genera guías visuales de las clases disponibles
593
- 5. **Mantenimiento manual**: Cambios en variables requieren editar código SASS directamente
594
- 6. **Sin historial**: No hay gestión automática de variables no usadas
595
- 7. **Menos portable**: Depende del ecosistema SASS y sus herramientas
596
-
597
- ### La Solución: HolyGrail5
598
-
599
- HolyGrail5 nace de la necesidad de **simplificar, modernizar y potenciar** el framework original.
600
-
601
- #### Ventajas Clave de HolyGrail5
602
-
603
- ##### 1. **Configuración Declarativa con JSON**
604
-
605
- **Antes (SASS):**
606
- ```scss
607
- // Variables dispersas en múltiples archivos
608
- $font-size-mobile: 18px;
609
- $font-size-desktop: 24px;
610
- $spacing-16: 16px;
611
- // ... más variables en diferentes archivos
612
- ```
613
-
614
- **Ahora (JSON):**
615
- ```json
616
- {
617
- "classes": {
618
- "h2": {
619
- "mobile": { "fontSize": "18px" },
620
- "desktop": { "fontSize": "24px" }
621
- }
622
- },
623
- "spacingMap": { "16": "16px" }
624
- }
625
- ```
626
-
627
- ✅ **Ventaja**: Todo en un solo archivo, fácil de entender y modificar
628
-
629
- ##### 2. **Sin Dependencias de Build Complejas**
630
-
631
- **Antes (SASS):**
632
- - Requiere Gulp/Webpack/Grunt
633
- - Configuración de compilación
634
- - Dependencias de Node.js específicas
635
- - Procesos de build complejos
636
-
637
- **Ahora (HolyGrail5):**
638
- ```bash
639
- npm run generate
640
- # ¡Listo! CSS generado
641
- ```
642
-
643
- ✅ **Ventaja**: Un solo comando, sin configuración de build
644
-
645
- ##### 3. **Guía Interactiva Automática**
646
-
647
- **Antes (SASS):**
648
- - Documentación manual
649
- - Sin preview visual
650
- - Difícil saber qué clases están disponibles
651
-
652
- **Ahora (HolyGrail5):**
653
- - Guía HTML generada automáticamente
654
- - Preview visual de todas las clases
655
- - Búsqueda en tiempo real
656
- - Detección de cambios
657
-
658
- ✅ **Ventaja**: Documentación siempre actualizada y visual
659
-
660
- ##### 4. **Gestión Inteligente de Variables**
661
-
662
- **Antes (SASS):**
663
- - Variables se eliminan si no se usan
664
- - Puede romper CSS personalizado
665
- - Sin historial
666
-
667
- **Ahora (HolyGrail5):**
668
- - Historial persistente de variables
669
- - Nunca se eliminan automáticamente
670
- - Comandos para gestionar variables no usadas
671
- - Protege tu CSS personalizado
672
-
673
- ✅ **Ventaja**: Seguridad y control total sobre las variables
674
-
675
- ##### 5. **Variables CSS Nativas (No SASS)**
676
-
677
- **Antes (SASS):**
678
- ```scss
679
- // Variables SASS (solo en compilación)
680
- $primary-color: #000000;
681
- .my-class {
682
- color: $primary-color; // Compilado a CSS estático
683
- }
684
- ```
685
-
686
- **Ahora (HolyGrail5):**
687
- ```css
688
- /* Variables CSS nativas (runtime) */
689
- :root {
690
- --hg-color-primary: #000000;
691
- }
692
- .my-class {
693
- color: var(--hg-color-primary); // Cambiable en runtime
694
- }
695
- ```
696
-
697
- ✅ **Ventaja**: Variables CSS nativas, modificables en runtime, mejor rendimiento
698
-
699
- ##### 6. **Optimización Automática**
700
-
701
- **Antes (SASS):**
702
- - Duplicación de valores en múltiples lugares
703
- - CSS más pesado
704
- - Sin deduplicación automática
705
-
706
- **Ahora (HolyGrail5):**
707
- - Variables compartidas automáticamente
708
- - Un valor único → una variable CSS
709
- - CSS más pequeño y eficiente
710
-
711
- ✅ **Ventaja**: CSS optimizado automáticamente, menos código
712
-
713
- ##### 7. **Modo Watch Integrado**
714
-
715
- **Antes (SASS):**
716
- - Requiere configurar watch en Gulp/Webpack
717
- - Configuración adicional necesaria
718
-
719
- **Ahora (HolyGrail5):**
720
- ```bash
721
- npm run watch
722
- # Regenera automáticamente al cambiar config.json
723
- ```
724
-
725
- ✅ **Ventaja**: Watch listo para usar, sin configuración
726
-
727
- ##### 8. **Portabilidad y Simplicidad**
728
-
729
- **Antes (SASS):**
730
- - Múltiples archivos SASS
731
- - Estructura compleja
732
- - Dependencias de herramientas de build
733
-
734
- **Ahora (HolyGrail5):**
735
- - Un solo archivo JSON de configuración
736
- - Estructura simple y clara
737
- - Solo Node.js (sin SASS, Gulp, etc.)
738
-
739
- ✅ **Ventaja**: Más fácil de entender, mantener y compartir
740
-
741
- ##### 9. **Mejor para Equipos**
742
-
743
- **Antes (SASS):**
744
- - Solo desarrolladores que conocen SASS pueden modificar
745
- - Cambios requieren conocimiento técnico
746
-
747
- **Ahora (HolyGrail5):**
748
- - Cualquiera puede editar JSON
749
- - Cambios visibles inmediatamente
750
- - Menos barrera de entrada
751
-
752
- ✅ **Ventaja**: Colaboración más fácil, menos dependencia de desarrolladores
753
-
754
- ##### 10. **Ecosistema Moderno**
755
-
756
- **Antes (SASS):**
757
- - Tecnología más antigua
758
- - Menos integración con herramientas modernas
759
- - Ecosistema SASS en declive
760
-
761
- **Ahora (HolyGrail5):**
762
- - Tecnología moderna (Node.js, JSON, CSS Variables)
763
- - Mejor integración con herramientas actuales
764
- - Alineado con estándares web modernos
765
-
766
- ✅ **Ventaja**: Framework preparado para el futuro
767
-
768
- ##### 11. **Separación de Componentes y Flexibilidad**
769
-
770
- **Antes (HolyGrail CSS con Angular):**
771
- - Framework acoplado a Angular
772
- - Componentes incluidos (botones, cards, etc.) que aumentaban el peso
773
- - CSS pesado con estilos de componentes que no siempre se usaban
774
- - Difícil integrar otras librerías de componentes
775
- - Dependencia de Angular y sus componentes
776
-
777
- **Ahora (HolyGrail5):**
778
- - **Solo CSS puro**: Sin dependencias de frameworks
779
- - **Sin componentes incluidos**: Solo clases de utilidad y layout
780
- - **CSS ligero**: Solo lo esencial (tipografía, spacing, layout, grid)
781
- - **Integración flexible**: Puedes usar cualquier librería de componentes
782
- - **Compatible con MDS de Inditex**: Diseñado para trabajar junto con sistemas de componentes externos
783
-
784
- ✅ **Ventaja**: Framework ligero, flexible y compatible con cualquier librería de componentes
785
-
786
- ##### 12. **Maquetación con IA**
787
-
788
- **Antes (SASS + Angular):**
789
- - Estructura compleja difícil de entender para IA
790
- - Código SASS disperso
791
- - Componentes acoplados
792
- - Difícil generar código automáticamente
793
-
794
- **Ahora (HolyGrail5):**
795
- - **Configuración JSON clara**: Fácil de entender y generar por IA
796
- - **Clases semánticas**: Nomenclatura clara y predecible
797
- - **Superprompt disponible**: Guía completa para que IA genere código correcto
798
- - **Estructura simple**: Patrones claros y repetibles
799
-
800
- ✅ **Ventaja**: Perfecto para maquetación asistida por IA, generación automática de código
801
-
802
- ### Separación de Responsabilidades
803
-
804
- HolyGrail5 adopta una **filosofía de separación de responsabilidades**:
805
-
806
- #### Lo que INCLUYE HolyGrail5:
807
- - ✅ Sistema de tipografía
808
- - ✅ Helpers de spacing (padding, margin)
809
- - ✅ Helpers de layout (flexbox, grid)
810
- - ✅ Sistema de grid responsive
811
- - ✅ Variables CSS para colores
812
- - ✅ Reset CSS mínimo
813
-
814
- #### Lo que NO incluye (y por qué es mejor):
815
- - ❌ Componentes UI (botones, cards, modales, etc.)
816
- - ❌ Estilos de formularios
817
- - ❌ Estilos de navegación
818
- - ❌ Estilos específicos de Angular/React/Vue
819
-
820
- **Razón**: Esto permite:
821
- 1. **Usar MDS de Inditex** u otras librerías de componentes sin conflictos
822
- 2. **CSS más ligero**: Solo lo esencial
823
- 3. **Flexibilidad total**: Eliges tus propios componentes
824
- 4. **Mejor mantenimiento**: Cada cosa en su lugar
825
-
826
- ### Integración con MDS de Inditex
827
-
828
- HolyGrail5 está diseñado para trabajar **perfectamente** junto con MDS (Massimo Dutti System) de Inditex:
829
-
830
- ```html
831
- <!-- Usa HolyGrail5 para layout y spacing -->
832
- <div class="row">
833
- <div class="col-xs-12 col-md-6">
834
- <!-- Usa componentes MDS para UI -->
835
- <mds-button variant="primary">Botón MDS</mds-button>
836
- </div>
837
- </div>
838
- ```
839
-
840
- **Ventajas de esta combinación:**
841
- - ✅ HolyGrail5 maneja el layout y estructura
842
- - ✅ MDS proporciona los componentes UI
843
- - ✅ Sin conflictos de estilos
844
- - ✅ Mejor de ambos mundos
845
-
846
- ### Maquetación con IA
847
-
848
- HolyGrail5 es **ideal para maquetación asistida por IA** gracias a:
849
-
850
- 1. **Superprompt disponible**: Guía completa (`SUPERPROMPT.md`) que permite a la IA entender el sistema
851
- 2. **Nomenclatura clara**: Clases predecibles y semánticas
852
- 3. **Patrones simples**: Estructura fácil de seguir
853
- 4. **Configuración JSON**: Fácil de generar y modificar automáticamente
854
-
855
- **Ejemplo de uso con IA:**
856
- ```
857
- Prompt: "Crea una página de restaurante con header, hero, menú de platos y footer usando HolyGrail5"
858
-
859
- La IA puede:
860
- - Consultar SUPERPROMPT.md para entender las clases
861
- - Generar HTML con las clases correctas
862
- - Usar el grid system apropiado
863
- - Aplicar spacing y layout helpers correctamente
864
- ```
865
-
866
- ✅ **Ventaja**: Acelera el desarrollo con generación automática de código
867
-
868
- ### Comparación Directa
869
-
870
- | Característica | HolyGrail CSS (SASS) | HolyGrail5 | ¿Por qué HolyGrail5 es mejor? |
871
- |----------------|----------------------|------------|------------------------------|
872
- | **Configuración** | Múltiples archivos SASS dispersos | Un solo archivo JSON (`config.json`) | ✅ **Simplicidad**: Todo en un lugar, fácil de entender y modificar |
873
- | **Compilación** | Requiere Gulp/Webpack y configuración compleja | `npm run generate` (comando simple) | ✅ **Sin complejidad**: No necesitas configurar build tools |
874
- | **Variables** | Variables SASS (compiladas, estáticas) | Variables CSS nativas (runtime, dinámicas) | ✅ **Flexibilidad**: Puedes cambiar valores en runtime con JavaScript |
875
- | **Documentación** | Manual, requiere mantenimiento | Automática (HTML interactivo generado) | ✅ **Siempre actualizada**: Se genera automáticamente desde la configuración |
876
- | **Gestión de variables** | Manual, propenso a errores | Automática con historial y herramientas CLI | ✅ **Seguridad**: Herramientas para detectar y eliminar variables no usadas |
877
- | **Curva de aprendizaje** | Media-Alta (requiere conocer SASS) | Baja (solo JSON, fácil de entender) | ✅ **Accesibilidad**: Cualquiera puede editar sin conocimientos técnicos avanzados |
878
- | **Portabilidad** | Media (depende de SASS y build tools) | Alta (solo Node.js, sin dependencias complejas) | ✅ **Fácil de mover**: Menos dependencias, más portable |
879
- | **Optimización** | Manual (debes optimizar tú mismo) | Automática (elimina código no usado) | ✅ **Rendimiento**: CSS más pequeño automáticamente |
880
- | **Watch mode** | Requiere configuración en Gulp/Webpack | Integrado (`npm run watch`) | ✅ **Desarrollo rápido**: Watch mode listo para usar |
881
- | **Accesibilidad** | Solo desarrolladores con conocimientos SASS | Cualquiera puede editar (diseñadores, PMs, etc.) | ✅ **Colaboración**: Más personas pueden contribuir |
882
- | **Componentes** | Incluidos (botones, cards, modales, etc.) | Separados (solo utilidades) | ✅ **Ligereza**: No incluye código que no uses |
883
- | **Peso CSS** | Pesado (cientos de clases de componentes) | Ligero (solo utilidades esenciales) | ✅ **Rendimiento**: CSS más pequeño = páginas más rápidas |
884
- | **Integración** | Acoplado a Angular | Compatible con cualquier librería | ✅ **Flexibilidad**: Puedes usar MDS, Material, Bootstrap, etc. |
885
- | **Maquetación IA** | Difícil (estructura compleja) | Optimizado (JSON claro, superprompt) | ✅ **Futuro**: Perfecto para generación automática de código |
886
-
887
- ### Casos de Uso Ideales para HolyGrail5
888
-
889
- ✅ **Perfecto para:**
890
- - Proyectos que buscan simplicidad
891
- - Equipos con diferentes niveles técnicos
892
- - Proyectos que necesitan documentación automática
893
- - Aplicaciones que requieren variables CSS en runtime
894
- - Proyectos que quieren evitar dependencias de build complejas
895
- - Design systems que necesitan mantenimiento fácil
896
- - **Proyectos que usan MDS de Inditex u otras librerías de componentes**
897
- - **Maquetación asistida por IA**
898
- - **Proyectos que necesitan CSS ligero sin componentes incluidos**
899
-
900
- ### Migración desde HolyGrail CSS (SASS)
901
-
902
- Si vienes de HolyGrail CSS (SASS), la migración es sencilla:
903
-
904
- 1. **Extrae tus variables SASS** → Conviértelas a `config.json`
905
- 2. **Mantén tus clases HTML** → Son compatibles
906
- 3. **Regenera el CSS** → `npm run generate`
907
- 4. **Disfruta de las nuevas características** → Guía interactiva, watch mode, etc.
908
-
909
- ### Arquitectura Ligera y Flexible
910
-
911
- #### El Problema del Framework Anterior
912
-
913
- El framework original (HolyGrail CSS) incluía:
914
- - **Componentes de Angular**: Botones, cards, modales, etc.
915
- - **CSS pesado**: Estilos de componentes que no siempre se necesitaban
916
- - **Acoplamiento**: Dependencia de Angular y sus componentes
917
- - **Poco flexible**: Difícil usar otras librerías de componentes
918
-
919
- **Ejemplos de clases incluidas en el framework antiguo (que aumentaban el peso):**
920
- ```css
921
- /* Formularios acoplados a Angular */
922
- .form-input-label-2
923
- .form-input-label-2.has-ico-pre
924
- .form-input-label-2.has-ico-post
925
- .validation-error-messages
926
-
927
- /* Botones y links específicos */
928
- .btn
929
- .link-line
930
- .link-svg-pre
931
- .link-svg-post
932
-
933
- /* Componentes de navegación */
934
- .header-account-back
935
- .mn-mainmenu
936
- .mn-mainbar
937
- .tabs-mini
938
-
939
- /* Componentes UI */
940
- .tooltip-sm
941
- .toast
942
- .md-accordion
943
- .md-toggle
944
- .bottom-sheet
945
- .tag-product
946
- .list-state
947
-
948
- /* Soporte RTL específico */
949
- .is-rtl .form-input-label-2
950
- .is-rtl .btn
951
- .is-rtl .tooltip-sm
952
- /* ... y cientos más */
953
- ```
954
-
955
- **Problema**: Estas clases ocupaban espacio en el CSS final aunque no se usaran, y creaban conflictos al intentar usar otras librerías de componentes como MDS.
956
-
957
- #### La Solución: Separación de Responsabilidades
958
-
959
- HolyGrail5 adopta el principio de **"hacer una cosa y hacerla bien"**:
960
-
961
- **HolyGrail5 se enfoca en:**
962
- - Layout y estructura (grid, flexbox)
963
- - Spacing y tipografía
964
- - Variables CSS compartidas
965
- - Helpers de utilidad
966
-
967
- **NO incluye:**
968
- - Componentes UI (botones, cards, etc.)
969
- - Estilos de formularios
970
- - Estilos específicos de frameworks
971
-
972
- **Resultado:**
973
- - ✅ CSS más ligero (solo lo esencial)
974
- - ✅ Compatible con MDS de Inditex
975
- - ✅ Compatible con cualquier librería de componentes
976
- - ✅ Flexibilidad total para elegir tus componentes
977
-
978
- ### Integración con MDS de Inditex
979
-
980
- HolyGrail5 está diseñado específicamente para trabajar junto con **MDS (Massimo Dutti System)** de Inditex:
981
-
982
- ```html
983
- <!-- Layout con HolyGrail5 -->
984
- <div class="row">
985
- <div class="col-xs-12 col-md-6 p-16">
986
- <!-- Componentes de MDS -->
987
- <mds-button variant="primary">Reservar Mesa</mds-button>
988
- <mds-card>
989
- <mds-card-header>Título</mds-card-header>
990
- <mds-card-content>Contenido</mds-card-content>
991
- </mds-card>
992
- </div>
993
- </div>
994
- ```
995
-
996
- **Ventajas:**
997
- - ✅ Sin conflictos de estilos
998
- - ✅ HolyGrail5 maneja layout, MDS maneja componentes
999
- - ✅ Mejor de ambos mundos
1000
- - ✅ CSS optimizado y ligero
1001
-
1002
- ### Maquetación con IA
1003
-
1004
- HolyGrail5 es **perfecto para maquetación asistida por IA**:
1005
-
1006
- #### ¿Por qué funciona tan bien con IA?
1007
-
1008
- 1. **Superprompt disponible**: `SUPERPROMPT.md` contiene toda la información necesaria
1009
- 2. **Nomenclatura clara**: Clases predecibles y semánticas
1010
- 3. **Patrones simples**: Estructura fácil de seguir
1011
- 4. **Configuración JSON**: Fácil de generar automáticamente
1012
- 5. **Sin complejidad**: No hay componentes acoplados que confundan a la IA
1013
-
1014
- #### Ejemplo de Uso con IA
1015
-
1016
- ```
1017
- Prompt para IA:
1018
- "Crea una página de restaurante con header sticky, hero section,
1019
- grid de 6 platos destacados, sección sobre nosotros y footer,
1020
- usando HolyGrail5 según SUPERPROMPT.md"
1021
-
1022
- La IA puede:
1023
- ✅ Generar HTML con las clases correctas
1024
- ✅ Usar el grid system apropiado
1025
- ✅ Aplicar spacing helpers correctamente
1026
- ✅ Crear layouts responsive
1027
- ✅ Integrar con componentes MDS si es necesario
1028
- ```
1029
-
1030
- **Resultado**: Desarrollo más rápido y código consistente generado automáticamente.
1031
-
1032
- ### Conclusión
1033
-
1034
- HolyGrail5 representa la **evolución natural** del framework original, eliminando las complejidades de SASS, separando los componentes pesados de Angular, y aprovechando las capacidades modernas de CSS y JavaScript.
1035
-
1036
- **Es más simple, más ligero, más potente y más accesible**, manteniendo la filosofía de diseño que hizo grande a HolyGrail CSS, pero adaptado a las necesidades actuales:
1037
-
1038
- - ✅ **Sin dependencias pesadas**: No incluye componentes Angular
1039
- - ✅ **CSS ligero**: Solo utilidades esenciales
1040
- - ✅ **Flexible**: Compatible con MDS de Inditex y cualquier librería
1041
- - ✅ **IA-friendly**: Optimizado para maquetación asistida por IA
1042
- - ✅ **Moderno**: Variables CSS nativas, JSON, Node.js
1043
-
1044
- **En resumen**: HolyGrail5 es HolyGrail CSS **mejorado, simplificado, modernizado y optimizado** para el desarrollo web actual, con especial atención a la flexibilidad, ligereza y compatibilidad con sistemas de componentes externos.
1045
-
1046
- ---
1047
-
1048
- **Hecho con ❤️ por HolyGrail CSS**
150
+ npm run vars:report # Estadísticas y listado completo
151
+ npm run vars:remove-unused # Limpia todas las variables no utilizadas
152
+ node src/docs-generator/variables-cli.js list --css=./dist/output.css
153
+ node src/docs-generator/variables-cli.js remove -- --hg-typo-font-size-18
154
+ ```
155
+ > Después de borrar variables históricas conviene volver a ejecutar `npm run build` para regenerar el CSS sin referencias huérfanas.
156
+
157
+ ## 9. Tema Dutti y demos
158
+ - El directorio `themes/dutti/` contiene CSS modular (_variables, _buttons, etc.) y un `demo.html` de referencia.
159
+ - `copy-theme-html.js` combina el tema en `dist/themes/dutti.css`, arregla las rutas del demo y añade una sidebar con accesos rápidos.
160
+ - Para crear tu propio tema copia la carpeta `themes/dutti`, ajusta los ficheros y actualiza `config.json → theme.name`.
161
+
162
+ ## 10. Flujo de desarrollo
163
+ 1. `npm run watch` genera `dist/output.css` e `index.html` cada vez que cambias `config.json`.
164
+ 2. En paralelo, `npm run serve` levanta un servidor estático sobre `dist/` (puedes usar `npm run dev` para lanzar ambos).
165
+ 3. Si trabajas con un tema, modifica los `.css` del tema y vuelve a ejecutar `npm run build` para regenerar el bundle y la demo.
166
+ 4. Para trabajar con otros repos o guías, aprovecha los documentos de `docs/` (ver siguiente sección).
167
+
168
+ ## 11. Tests y calidad
169
+ - `tests/run-all.js` ejecuta los tests unitarios (`config-loader`, `css-generator`, helpers, html generator...).
170
+ - Los tests imprimen resultados en consola para facilitar su lectura sin necesidad de frameworks pesados.
171
+ - Puedes integrar ESLint u otras herramientas externas, pero el repo provee funciones puras fáciles de testear en aislamiento.
172
+
173
+ ## 12. Documentos complementarios
174
+ | Archivo | Contenido |
175
+ | ------- | --------- |
176
+ | `docs/SUPERPROMPT.md` | Prompt detallado para asistentes/IA que necesiten generar HTML usando HolyGrail5. |
177
+ | `docs/COMPARACION.md` | Comparativa HolyGrail5 vs alternativas (Tailwind, frameworks legacy, etc.). |
178
+ | `docs/GUIA-USO-OTRO-PROYECTO.md` | Pasos para integrar HolyGrail5 en proyectos existentes. |
179
+ | `docs/` + `dist/index.html` | Puedes publicar la guía como doc estática (GitHub Pages, Netlify, etc.). |
180
+
181
+ ## 13. Recursos y soporte
182
+ - Repositorio: [github.com/holygrailcss/holygrail5](https://github.com/holygrailcss/holygrail5)
183
+ - npm: [holygrail5](https://www.npmjs.com/package/holygrail5)
184
+ - Issues y PRs son bienvenidos. Sigue el flujo clásico: fork → rama → PR.
185
+ - Si solo necesitas copiar la guía, ejecuta `npm run build` y publica `dist/` en el hosting de tu preferencia.
186
+
187
+ ## 14. Licencia
188
+ MIT © HolyGrail CSS. Usa, adapta y comparte libremente mientras conserves la atribución.