holygrail5 1.0.19 → 1.0.21

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.
Files changed (77) hide show
  1. package/README.md +88 -18
  2. package/config.json +205 -77
  3. package/dist/assets/fonts/suisse-intl-light.woff +0 -0
  4. package/dist/assets/fonts/suisse-intl-light.woff2 +0 -0
  5. package/dist/assets/fonts/suisse-intl-medium.woff +0 -0
  6. package/dist/assets/fonts/suisse-intl-medium.woff2 +0 -0
  7. package/dist/assets/fonts/suisse-intl-regular.woff +0 -0
  8. package/dist/assets/fonts/suisse-intl-regular.woff2 +0 -0
  9. package/dist/assets/fonts/suisse-intl-semibold.woff +0 -0
  10. package/dist/assets/fonts/suisse-intl-semibold.woff2 +0 -0
  11. package/dist/assets/fonts/suisse-works-bold.woff +0 -0
  12. package/dist/assets/fonts/suisse-works-bold.woff2 +0 -0
  13. package/dist/assets/fonts/suisse-works-medium.woff +0 -0
  14. package/dist/assets/fonts/suisse-works-medium.woff2 +0 -0
  15. package/dist/assets/fonts/suisse-works-regular.woff +0 -0
  16. package/dist/assets/fonts/suisse-works-regular.woff2 +0 -0
  17. package/dist/componentes.html +429 -0
  18. package/dist/developer-guide.md +7 -7
  19. package/dist/guide-styles.css +197 -25
  20. package/dist/index.html +807 -689
  21. package/dist/output.css +217 -114
  22. package/dist/skills.html +14 -8
  23. package/dist/themes/dutti-demo.html +713 -19
  24. package/dist/themes/dutti.css +67 -16
  25. package/dist/themes/limited-demo.html +1121 -0
  26. package/dist/themes/limited.css +2493 -0
  27. package/package.json +1 -1
  28. package/src/.data/.previous-values.json +151 -84
  29. package/src/assets/fonts/suisse-intl-light.woff +0 -0
  30. package/src/assets/fonts/suisse-intl-light.woff2 +0 -0
  31. package/src/assets/fonts/suisse-intl-medium.woff +0 -0
  32. package/src/assets/fonts/suisse-intl-medium.woff2 +0 -0
  33. package/src/assets/fonts/suisse-intl-regular.woff +0 -0
  34. package/src/assets/fonts/suisse-intl-regular.woff2 +0 -0
  35. package/src/assets/fonts/suisse-intl-semibold.woff +0 -0
  36. package/src/assets/fonts/suisse-intl-semibold.woff2 +0 -0
  37. package/src/assets/fonts/suisse-works-bold.woff +0 -0
  38. package/src/assets/fonts/suisse-works-bold.woff2 +0 -0
  39. package/src/assets/fonts/suisse-works-medium.woff +0 -0
  40. package/src/assets/fonts/suisse-works-medium.woff2 +0 -0
  41. package/src/assets/fonts/suisse-works-regular.woff +0 -0
  42. package/src/assets/fonts/suisse-works-regular.woff2 +0 -0
  43. package/src/build/asset-manager.js +94 -3
  44. package/src/build/build-orchestrator.js +74 -12
  45. package/src/build/components-generator.js +584 -0
  46. package/src/build/skills-generator.js +43 -5
  47. package/src/build/theme-config-loader.js +58 -0
  48. package/src/build/theme-transformer.js +109 -16
  49. package/src/build/theme-vars-table-generator.js +349 -0
  50. package/src/build/typo-table-generator.js +154 -0
  51. package/src/docs-generator/guide-styles.css +197 -24
  52. package/src/docs-generator/html-generator.js +92 -246
  53. package/src/docs-generator/sections/colors-section.js +109 -0
  54. package/src/docs-generator/value-tracker.js +154 -0
  55. package/src/generators/typo-generator.js +2 -1
  56. package/src/generators/utils.js +90 -1
  57. package/src/skills.html +1 -0
  58. package/src/watch-config.js +99 -32
  59. package/themes/{dutti → _base}/_buttons.css +2 -2
  60. package/themes/{dutti → _base}/_checkboxes.css +1 -1
  61. package/themes/{dutti → _base}/_forms.css +1 -1
  62. package/themes/{dutti → _base}/_inputs.css +55 -10
  63. package/themes/{dutti → _base}/_labels.css +1 -1
  64. package/themes/dutti/README.md +67 -21
  65. package/themes/dutti/_variables.css +7 -1
  66. package/themes/dutti/demo.html +18 -14
  67. package/themes/dutti/theme.css +22 -44
  68. package/themes/dutti/theme.json +86 -0
  69. package/themes/limited/_variables.css +123 -0
  70. package/themes/limited/demo.html +296 -0
  71. package/themes/limited/theme.css +32 -0
  72. package/themes/limited/theme.json +105 -0
  73. /package/themes/{dutti → _base}/_containers.css +0 -0
  74. /package/themes/{dutti → _base}/_radios.css +0 -0
  75. /package/themes/{dutti → _base}/_switches.css +0 -0
  76. /package/themes/{dutti → _base}/components/_icons.css +0 -0
  77. /package/themes/{dutti → _base}/objects/_grid.css +0 -0
@@ -14,27 +14,56 @@ Sistema de componentes UI basado en las variables CSS de **HolyGrail5**. Todos l
14
14
  <link rel="stylesheet" href="themes/dutti/theme.css">
15
15
  ```
16
16
 
17
- **Nota**: El archivo `theme.css` importa automáticamente todos los módulos. Si solo necesitas ciertos componentes, puedes importar los archivos individuales:
17
+ **Nota**: El archivo `theme.css` importa automáticamente todos los módulos. Los componentes (botones, inputs, checkboxes, radios, switches, labels, forms, containers, grid, icons) **no viven dentro de `themes/dutti/`**: se comparten desde `themes/_base/` y el `theme.css` hace `@import url('../_base/_buttons.css')` para cada uno. Si solo necesitas ciertos componentes, puedes importarlos directamente desde `_base/`:
18
18
 
19
19
  ```html
20
- <!-- Solo variables y botones -->
20
+ <!-- Solo variables del tema y botones compartidos -->
21
21
  <link rel="stylesheet" href="themes/dutti/_variables.css">
22
- <link rel="stylesheet" href="themes/dutti/_buttons.css">
22
+ <link rel="stylesheet" href="themes/_base/_buttons.css">
23
23
  ```
24
24
 
25
25
  ## 📁 Estructura de Archivos
26
26
 
27
- El sistema está dividido en módulos para facilitar el mantenimiento:
27
+ La carpeta del tema solo contiene **lo que hace distinto a Dutti** — el resto se hereda de `themes/_base/`:
28
28
 
29
- - **`theme.css`** - Archivo principal que importa todos los módulos
30
- - **`_variables.css`** - Variables del tema (colores, espaciados, tipografía)
31
- - **`_buttons.css`** - Estilos de botones
32
- - **`_inputs.css`** - Estilos de inputs, selects y textareas
33
- - **`_labels.css`** - Estilos de labels
34
- - **`_checkboxes.css`** - Estilos de checkboxes
35
- - **`_radios.css`** - Estilos de radios
36
- - **`_switches.css`** - Estilos de switches/toggles
37
- - **`_forms.css`** - Form groups, form rows y helper text
29
+ ```
30
+ themes/
31
+ ├── _base/ # Componentes compartidos (fuente única de verdad)
32
+ │ ├── _buttons.css
33
+ │ ├── _inputs.css
34
+ │ ├── _labels.css
35
+ │ ├── _checkboxes.css
36
+ │ ├── _radios.css
37
+ │ ├── _switches.css
38
+ │ ├── _forms.css
39
+ │ ├── _containers.css
40
+ │ ├── objects/_grid.css
41
+ │ └── components/_icons.css
42
+
43
+ └── dutti/
44
+ ├── theme.json # Meta + tokenOverrides + componentVars + design
45
+ ├── _variables.css # Overrides de --hg-color-* y mapeo de componentVars (--btn-*, --input-*, …)
46
+ ├── theme.css # @import de _variables.css + @import de ../_base/*.css
47
+ └── demo.html # Demo interactiva (usa placeholders HG_THEME_BLOCK y HG_TYPO_TABLE)
48
+ ```
49
+
50
+ Los componentes apuntan a los componentVars (`var(--btn-primary-bg)`, `var(--input-border-focus)`, …) y esos componentVars se mapean en `_variables.css` a los tokens base `--hg-color-*`. Como todos los temas comparten `_base/`, cambiar la paleta en `_variables.css` repinta automáticamente todos los componentes sin duplicar CSS.
51
+
52
+ ### Sobrescribir un componente SOLO en Dutti
53
+
54
+ Si Dutti necesita un componente distinto al de `_base/`:
55
+
56
+ 1. Copia, p. ej., `themes/_base/_inputs.css` → `themes/dutti/_inputs.css` y modifícalo.
57
+ 2. En `themes/dutti/theme.css` cambia el `@import` correspondiente:
58
+
59
+ ```css
60
+ /* antes */
61
+ @import url('../_base/_inputs.css');
62
+ /* después */
63
+ @import url('_inputs.css');
64
+ ```
65
+
66
+ El resto de componentes sigue heredando de `_base/`.
38
67
 
39
68
  ## 🎨 Componentes Disponibles
40
69
 
@@ -234,7 +263,12 @@ Mensajes de ayuda, error, éxito o advertencia:
234
263
 
235
264
  ## 🎨 Personalización
236
265
 
237
- Todos los componentes utilizan variables CSS de HolyGrail5. Puedes personalizar el tema editando el archivo `config.json` de HolyGrail5 y regenerando el CSS.
266
+ Todos los componentes utilizan variables CSS de HolyGrail5. Hay **dos niveles** de personalización:
267
+
268
+ 1. **Globales** — edita `config.json` de HolyGrail5 (colores base, spacing, tipografías). Afecta a todos los temas.
269
+ 2. **Por tema** — edita `themes/dutti/theme.json` o `themes/dutti/_variables.css` para overridear los tokens solo para Dutti. Esto es lo que usa, por ejemplo, el tema `limited` para cambiar toda su paleta y tipografía sin tocar `config.json`.
270
+
271
+ En ambos casos, después regenera con `npm run build`.
238
272
 
239
273
  ### Variables principales
240
274
 
@@ -256,14 +290,14 @@ El sistema de theming Dutti utiliza estas variables de HolyGrail5:
256
290
  - `--hg-spacing-4`, `--hg-spacing-8`, `--hg-spacing-12`, `--hg-spacing-16`, etc.
257
291
 
258
292
  #### Tipografía
259
- - `--hg-typo-font-family-primary`: Fuente principal
293
+ - `--hg-typo-font-family-primary-regular`: Fuente principal
260
294
  - `--hg-typo-font-size-*`: Tamaños de fuente
261
295
  - `--hg-typo-font-weight-*`: Pesos de fuente
262
296
  - `--hg-typo-line-height-*`: Alturas de línea
263
297
 
264
- ### Personalizar el tema
298
+ ### Personalizar globalmente (todos los temas)
265
299
 
266
- Para cambiar los colores, edita `config.json`:
300
+ Para cambiar los colores base compartidos, edita `config.json`:
267
301
 
268
302
  ```json
269
303
  {
@@ -277,13 +311,25 @@ Para cambiar los colores, edita `config.json`:
277
311
  }
278
312
  ```
279
313
 
280
- Luego regenera el CSS:
314
+ ### Personalizar solo Dutti
281
315
 
282
- ```bash
283
- npm run generate
316
+ Para cambiar la paleta o la tipografía únicamente del tema Dutti, edita `themes/dutti/_variables.css` y añade overrides sobre los tokens base:
317
+
318
+ ```css
319
+ :root {
320
+ --hg-color-primary: #111;
321
+ --hg-color-feel: #fb9962;
322
+ --hg-typo-font-family-primary-regular: "Inter", sans-serif;
323
+ }
284
324
  ```
285
325
 
286
- Los cambios se reflejarán automáticamente en todos los componentes del tema Dutti.
326
+ Los componentes de `themes/_base/` consumen estas variables a través del mapeo en `componentVars`, así que se repintan automáticamente sin duplicar CSS.
327
+
328
+ Luego regenera:
329
+
330
+ ```bash
331
+ npm run build
332
+ ```
287
333
 
288
334
  ## 📱 Responsive
289
335
 
@@ -66,7 +66,13 @@
66
66
 
67
67
  --form-group-gap: var(--hg-spacing-16);
68
68
 
69
- /* Tipografía - se usan directamente las variables de HolyGrail5 */
69
+ /* Tipografía del tema Dutti Suisse Intl (sans) por peso.
70
+ Cada peso es una font-family propia (suisse-light/regular/
71
+ medium/semibold) declaradas en guide-styles.css. */
72
+ --hg-typo-font-family-primary-light: "suisse-light", Arial, Helvetica, sans-serif;
73
+ --hg-typo-font-family-primary-regular: "suisse-regular", Arial, Helvetica, sans-serif;
74
+ --hg-typo-font-family-primary-bold: "suisse-semibold", Arial, Helvetica, sans-serif;
75
+ --hg-typo-font-family-secondary: "suisse-medium", Arial, Helvetica, sans-serif;
70
76
 
71
77
  /* Bordes y radios */
72
78
  --border-radius: 0;
@@ -16,26 +16,30 @@
16
16
  <h2 class="demo-title">Dutti Theme</h2>
17
17
 
18
18
 
19
- <div class="demo-section-2" >
20
- <h3 > ¿Dónde se customiza el tema?</h3>
21
- <div> </div>
22
- <p >
23
- El tema Dutti se customiza en <strong>dos niveles</strong>:
19
+ <div class="demo-section-2">
20
+ <h3>¿Dónde se customiza el tema?</h3>
21
+ <p class="mb-16">
22
+ Dutti se construye en <strong>dos capas</strong> sobre HolyGrail5:
24
23
  </p>
25
- <div> </div>
26
24
 
27
- <div class="mb-24">
28
- <strong>Variables base (HolyGrail5) :</strong> <br> Edita <code>config.json</code> en la raíz del proyecto para cambiar colores, espaciados y tipografía base. Luego ejecuta <code>npm run build</code> para regenerar <code>dist/output.css</code>.
29
- </div>
30
- <div class="mb-24">
31
- <strong>Variables del tema (Dutti)</strong>: <br> Edita <code>themes/dutti/_variables.css</code> para mapear las variables de HolyGrail5 a las variables específicas del tema (ej: <code>--btn-primary-bg: var(--hg-color-primary)</code>).
32
- </div>
33
-
25
+ <div class="mb-16">
26
+ <strong>1. Tokens base</strong> <code>config.json</code> define la paleta, espaciados y tipografía compartidos. <code>npm run build</code> regenera <code>dist/output.css</code>.
27
+ </div>
28
+ <div class="mb-16">
29
+ <strong>2. Overrides del tema</strong> <code>themes/dutti/theme.json</code> declara los metadatos y overrides del tema. <code>themes/dutti/_variables.css</code> los materializa como CSS custom properties y mapea las variables de componente (ej. <code>--btn-primary-bg: var(--hg-color-primary)</code>).
30
+ </div>
31
+
34
32
  <p class="mb-24">
35
- <strong>Archivo principal:</strong> <br> <code>themes/dutti/theme.css</code> importa automáticamente todos los módulos CSS del tema. Los componentes individuales (<code>_buttons.css</code>, <code>_inputs.css</code>, etc.) usan las variables definidas en <code>_variables.css</code>.
33
+ <code>themes/dutti/theme.css</code> es el punto de entrada: importa todos los módulos (<code>_buttons.css</code>, <code>_inputs.css</code>, etc.) que consumen esas variables.
36
34
  </p>
37
35
  </div>
38
36
 
37
+ <!-- BLOQUE DEL TEMA (meta + variables) generado en build a partir de themes/<tema>/theme.json -->
38
+ <!-- HG_THEME_BLOCK -->
39
+
40
+ <!-- TIPOGRAFÍA (tabla generada en build a partir de config.json → typo) -->
41
+ <!-- HG_TYPO_TABLE -->
42
+
39
43
  <!-- BOTONES -->
40
44
  <section class="demo-section" id="buttons">
41
45
  <h2 class="demo-title">Botones</h2>
@@ -1,51 +1,29 @@
1
1
  /**
2
2
  * Sistema de Theming Dutti
3
3
  * Basado en HolyGrail5 CSS Variables
4
- *
5
- * Este archivo importa todos los módulos del sistema de theming.
6
- *
7
- * Componentes disponibles:
8
- * - Botones (primary, secondary, outline, ghost, disabled)
9
- * - Inputs (text, email, password, number, etc.)
10
- * - Checkboxes
11
- * - Radios
12
- * - Switches/Toggles
13
- * - Labels
14
- * - Form Groups
15
- * - Estados (error, success, warning, disabled)
4
+ *
5
+ * Los componentes (botones, inputs, checkboxes, radios, switches, labels,
6
+ * forms, containers, grid, icons) son compartidos desde `themes/_base/`.
7
+ * Para personalizar un componente SOLO en este tema, crea una copia
8
+ * local del fichero en `themes/dutti/` y cambia su @import aquí para
9
+ * que apunte a esa versión en vez de a `../_base/`.
16
10
  */
17
11
 
18
- /* Variables del tema */
12
+ /* Variables del tema (colores, tipografía y mapeo de componentVars) */
19
13
  @import url('_variables.css');
20
14
 
21
- /* Componentes */
22
- /* @import url('_buttons.css'); */
23
- /* @import url('_inputs.css'); */
24
- /* @import url('_labels.css'); */
25
- /* @import url('_checkboxes.css');*/
26
- /* @import url('_radios.css'); */
27
- /* @import url('_switches.css'); */
28
- /* @import url('_forms.css'); */
29
-
30
- /** ITCSS esctructurado
31
- * basado en HolyGrail5
32
- * para las nuevas necesidades
33
- * del tema Dutti
34
- */
35
-
36
- /* Settings - Variables y configuración */
37
-
38
- /* Tools - Mixins y funciones */
39
-
40
- /* Generic - Resets, normalize */
41
-
42
- /* Elements - Estilos de elementos HTML (h1, p, a) */
43
-
44
- /* Objects - Patrones de layout */
45
- @import url('./_containers.css');
46
- /* @import url('./objects/_grid.css');
47
-
48
- /* Components - Componentes de UI específicos */
49
- /* @import url('./components/_icons.css');
50
-
51
- /* Utilities - Helpers y utilidades */
15
+ /* Componentes compartidos ─ themes/_base/ */
16
+ @import url('../_base/_buttons.css');
17
+ @import url('../_base/_inputs.css');
18
+ @import url('../_base/_labels.css');
19
+ @import url('../_base/_checkboxes.css');
20
+ @import url('../_base/_radios.css');
21
+ @import url('../_base/_switches.css');
22
+ @import url('../_base/_forms.css');
23
+
24
+ /* Objects (layout) compartidos ─ themes/_base/ */
25
+ @import url('../_base/_containers.css');
26
+ @import url('../_base/objects/_grid.css');
27
+
28
+ /* Components (icons) compartidos ─ themes/_base/ */
29
+ @import url('../_base/components/_icons.css');
@@ -0,0 +1,86 @@
1
+ {
2
+ "meta": {
3
+ "name": "dutti",
4
+ "displayName": "Dutti",
5
+ "description": "Tema base que extiende HolyGrail5 con variables específicas para botones, inputs, formularios, switches y radios. Las variables del tema referencian los tokens de --hg-color-* y --hg-spacing-* para mantener coherencia con el design system global.",
6
+ "version": "1.0.0",
7
+ "author": "HolyGrail CSS"
8
+ },
9
+ "tokenOverrides": {
10
+ "color": {},
11
+ "spacing": {}
12
+ },
13
+ "componentVars": {
14
+ "btn": {
15
+ "primary-bg": "var(--hg-color-primary)",
16
+ "primary-color": "var(--hg-color-white)",
17
+ "primary-hover-bg": "var(--hg-color-dark-grey)",
18
+
19
+ "secondary-bg": "var(--hg-color-dark-grey)",
20
+ "secondary-color": "var(--hg-color-white)",
21
+ "secondary-hover-bg": "var(--hg-color-middle-grey)",
22
+
23
+ "outline-border": "var(--hg-color-primary)",
24
+ "outline-color": "var(--hg-color-primary)",
25
+ "outline-hover-bg": "var(--hg-color-primary)",
26
+ "outline-hover-color": "var(--hg-color-white)",
27
+
28
+ "ghost-color": "var(--hg-color-primary)",
29
+ "ghost-hover-bg": "var(--hg-color-light-grey)",
30
+
31
+ "feel-bg": "var(--hg-color-feel)",
32
+ "feel-color": "var(--hg-color-white)",
33
+ "feel-hover-bg": "var(--hg-color-feel-dark)",
34
+
35
+ "padding-x-sm": "var(--hg-spacing-12)",
36
+ "padding-y-sm": "var(--hg-spacing-8)",
37
+ "padding-x-md": "var(--hg-spacing-16)",
38
+ "padding-y-md": "var(--hg-spacing-12)",
39
+ "padding-x-lg": "var(--hg-spacing-24)",
40
+ "padding-y-lg": "var(--hg-spacing-16)"
41
+ },
42
+ "input": {
43
+ "border": "var(--hg-color-middle-grey)",
44
+ "border-focus": "var(--hg-color-primary)",
45
+ "bg": "var(--hg-color-white)",
46
+ "color": "var(--hg-color-primary)",
47
+ "placeholder": "var(--hg-color-middle-grey)",
48
+ "error-border": "var(--hg-color-error)",
49
+ "success-border": "var(--hg-color-success)",
50
+ "warning-border": "var(--hg-color-warning)",
51
+ "padding-x": "var(--hg-spacing-16)",
52
+ "padding-y": "var(--hg-spacing-12)",
53
+ "gap": "var(--hg-spacing-8)"
54
+ },
55
+ "label": {
56
+ "color": "var(--hg-color-primary)",
57
+ "required": "var(--hg-color-error)"
58
+ },
59
+ "checkbox": {
60
+ "bg": "var(--hg-color-white)",
61
+ "border": "var(--hg-color-middle-grey)",
62
+ "checked-bg": "var(--hg-color-primary)",
63
+ "checked-border": "var(--hg-color-primary)"
64
+ },
65
+ "radio": {
66
+ "bg": "var(--hg-color-white)",
67
+ "border": "var(--hg-color-middle-grey)",
68
+ "checked-bg": "var(--hg-color-primary)",
69
+ "checked-border": "var(--hg-color-primary)"
70
+ },
71
+ "switch": {
72
+ "bg": "var(--hg-color-middle-grey)",
73
+ "active-bg": "var(--hg-color-primary)",
74
+ "thumb": "var(--hg-color-white)"
75
+ },
76
+ "form-group": {
77
+ "gap": "var(--hg-spacing-16)"
78
+ }
79
+ },
80
+ "design": {
81
+ "border-radius": "0",
82
+ "border-width": "1px",
83
+ "border-style": "solid",
84
+ "transition": "all 0.2s ease"
85
+ }
86
+ }
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Variables del Tema Limited
3
+ * Paleta: lujo cálido (dorados, bronces y crema)
4
+ * Tipografía 100% serif: Suisse Works (titulares + texto corrido).
5
+ *
6
+ * Las @font-face de Suisse Works se declaran en guide-styles.css
7
+ * y se sirven desde dist/assets/fonts/ como woff2.
8
+ *
9
+ * Sobrescribe los tokens de color base de HolyGrail5 (--hg-color-*)
10
+ * y los tokens de tipografía (--hg-typo-font-family-*) para aplicar
11
+ * el look & feel del tema sin tocar config.json.
12
+ */
13
+
14
+ :root {
15
+ /* ─────────────────────────────────────────────
16
+ Overrides de tokens base HolyGrail5 (colores)
17
+ Estos valores prevalecen sobre config.json y
18
+ actualizan automáticamente los componentVars
19
+ que apuntan con var(--hg-color-*).
20
+ ───────────────────────────────────────────── */
21
+ --hg-color-primary: #1D1D1D;
22
+ --hg-color-feel: #A38A6B;
23
+ --hg-color-feel-dark: #7A6346;
24
+ --hg-color-error: #9B2A1E;
25
+ --hg-color-success: #7A8D5F;
26
+ --hg-color-warning: #D4A84B;
27
+ --hg-color-info: #5B7FA1;
28
+ --hg-color-bg-light: #F4F2ED;
29
+ --hg-color-bg-cream: #F4F2ED;
30
+
31
+ /* ─────────────────────────────────────────────
32
+ Overrides de tipografía del tema (100% serif)
33
+ Suisse Works → titulares y texto corrido
34
+ ───────────────────────────────────────────── */
35
+ --hg-typo-font-family-primary-light: "suisse-works-regular", Georgia, "Times New Roman", serif;
36
+ --hg-typo-font-family-primary-regular: "suisse-works-regular", Georgia, "Times New Roman", serif;
37
+ --hg-typo-font-family-primary-bold: "suisse-works-bold", Georgia, "Times New Roman", serif;
38
+ --hg-typo-font-family-secondary: "suisse-works-medium", Georgia, "Times New Roman", serif;
39
+
40
+ /* ─────────────────────────────────────────────
41
+ Variables del tema (mapeo a los tokens base)
42
+ ───────────────────────────────────────────── */
43
+ --btn-primary-bg: var(--hg-color-primary);
44
+ --btn-primary-color: var(--hg-color-white);
45
+ --btn-primary-hover-bg: var(--hg-color-feel-dark);
46
+
47
+ --btn-secondary-bg: var(--hg-color-feel);
48
+ --btn-secondary-color: var(--hg-color-white);
49
+ --btn-secondary-hover-bg: var(--hg-color-feel-dark);
50
+
51
+ --btn-outline-border: var(--hg-color-feel-dark);
52
+ --btn-outline-color: var(--hg-color-feel-dark);
53
+ --btn-outline-hover-bg: var(--hg-color-feel-dark);
54
+ --btn-outline-hover-color: var(--hg-color-white);
55
+
56
+ --btn-ghost-color: var(--hg-color-primary);
57
+ --btn-ghost-hover-bg: var(--hg-color-bg-cream);
58
+
59
+ --btn-feel-bg: var(--hg-color-feel);
60
+ --btn-feel-color: var(--hg-color-white);
61
+ --btn-feel-hover-bg: var(--hg-color-feel-dark);
62
+
63
+ --input-border: var(--hg-color-middle-grey);
64
+ --input-border-focus: var(--hg-color-feel-dark);
65
+ --input-bg: var(--hg-color-white);
66
+ --input-color: var(--hg-color-primary);
67
+ --input-placeholder: var(--hg-color-middle-grey);
68
+
69
+ --input-error-border: var(--hg-color-error);
70
+ --input-success-border: var(--hg-color-success);
71
+ --input-warning-border: var(--hg-color-warning);
72
+
73
+ --label-color: var(--hg-color-primary);
74
+ --label-required: var(--hg-color-error);
75
+
76
+ --checkbox-bg: var(--hg-color-white);
77
+ --checkbox-border: var(--hg-color-middle-grey);
78
+ --checkbox-checked-bg: var(--hg-color-feel-dark);
79
+ --checkbox-checked-border: var(--hg-color-feel-dark);
80
+
81
+ --radio-bg: var(--hg-color-white);
82
+ --radio-border: var(--hg-color-middle-grey);
83
+ --radio-checked-bg: var(--hg-color-feel-dark);
84
+ --radio-checked-border: var(--hg-color-feel-dark);
85
+
86
+ --switch-bg: var(--hg-color-middle-grey);
87
+ --switch-active-bg: var(--hg-color-feel);
88
+ --switch-thumb: var(--hg-color-white);
89
+
90
+ /* Espaciados - usando variables de HolyGrail5 */
91
+ --btn-padding-x-sm: var(--hg-spacing-12);
92
+ --btn-padding-y-sm: var(--hg-spacing-8);
93
+ --btn-padding-x-md: var(--hg-spacing-16);
94
+ --btn-padding-y-md: var(--hg-spacing-12);
95
+ --btn-padding-x-lg: var(--hg-spacing-24);
96
+ --btn-padding-y-lg: var(--hg-spacing-16);
97
+
98
+ --input-padding-x: var(--hg-spacing-16);
99
+ --input-padding-y: var(--hg-spacing-12);
100
+ --input-gap: var(--hg-spacing-8);
101
+
102
+ --form-group-gap: var(--hg-spacing-16);
103
+
104
+ /* Bordes y radios */
105
+ --border-radius: 0;
106
+ --border-width: 1px;
107
+ --border-style: solid;
108
+
109
+ /* Transiciones */
110
+ --transition: all 0.3s ease;
111
+ }
112
+
113
+ /* ─────────────────────────────────────────────
114
+ Refuerzo tipográfico: titulares en Suisse Works
115
+ ───────────────────────────────────────────── */
116
+ .demo-container h1,
117
+ .demo-container h2,
118
+ .demo-container .demo-title,
119
+ .demo-container .hg-vars-section__title {
120
+ font-family: var(--hg-typo-font-family-secondary);
121
+ font-weight: 600;
122
+ letter-spacing: 0.01em;
123
+ }