holygrail5 1.0.21 → 1.0.23

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 (42) hide show
  1. package/README.md +72 -0
  2. package/config.json +85 -18
  3. package/dist/assets/fonts/SuisseIntlMono-Bold-WebS.woff +0 -0
  4. package/dist/assets/fonts/SuisseIntlMono-Bold-WebS.woff2 +0 -0
  5. package/dist/assets/fonts/SuisseIntlMono-Regular-WebS.woff +0 -0
  6. package/dist/assets/fonts/SuisseIntlMono-Regular-WebS.woff2 +0 -0
  7. package/dist/assets/fonts/suisse-intl-thin.woff +0 -0
  8. package/dist/assets/fonts/suisse-intl-thin.woff2 +0 -0
  9. package/dist/componentes.html +1 -8
  10. package/dist/developer-guide.md +4 -0
  11. package/dist/guide-styles.css +85 -56
  12. package/dist/index.html +2727 -2690
  13. package/dist/output.css +123 -70
  14. package/dist/skills.html +17 -5
  15. package/dist/themes/dutti-demo.html +76 -39
  16. package/dist/themes/dutti.css +10 -6
  17. package/dist/themes/limited-demo.html +55 -18
  18. package/dist/themes/limited.css +8 -6
  19. package/package.json +2 -2
  20. package/src/.data/.previous-values.json +69 -20
  21. package/src/assets/fonts/SuisseIntlMono-Bold-WebS.woff +0 -0
  22. package/src/assets/fonts/SuisseIntlMono-Bold-WebS.woff2 +0 -0
  23. package/src/assets/fonts/SuisseIntlMono-Regular-WebS.woff +0 -0
  24. package/src/assets/fonts/SuisseIntlMono-Regular-WebS.woff2 +0 -0
  25. package/src/assets/fonts/suisse-intl-thin.woff +0 -0
  26. package/src/assets/fonts/suisse-intl-thin.woff2 +0 -0
  27. package/src/build/asset-manager.js +8 -0
  28. package/src/build/components-generator.js +1 -8
  29. package/src/build/skills-generator.js +12 -4
  30. package/src/build/theme-transformer.js +10 -3
  31. package/src/dev-server.js +28 -13
  32. package/src/docs-generator/guide-styles.css +85 -56
  33. package/src/docs-generator/html-generator.js +188 -183
  34. package/src/docs-generator/sections/colors-section.js +15 -5
  35. package/src/generators/typo-generator.js +1 -2
  36. package/src/generators/utils.js +15 -0
  37. package/themes/_base/_radios.css +7 -6
  38. package/themes/dutti/README.md +17 -0
  39. package/themes/dutti/_variables.css +3 -0
  40. package/themes/dutti/theme.json +2 -1
  41. package/themes/limited/_variables.css +1 -0
  42. package/themes/limited/theme.json +2 -1
package/README.md CHANGED
@@ -45,6 +45,16 @@ Generador de CSS + guía HTML pensado para design systems ligeros: declaras tu `
45
45
  - [Contribuir](#contribuir)
46
46
  - [15. Licencia](#15-licencia)
47
47
  - [Changelog](#changelog)
48
+ - [v1.0.22 - Junio 2026](#v1022---junio-2026)
49
+ - [v1.0.21 - Mayo 2026](#v1021---mayo-2026)
50
+ - [v1.0.20 - Abril 2026](#v1020---abril-2026)
51
+ - [v1.0.19 - Abril 2026](#v1019---abril-2026)
52
+ - [v1.0.18 - Abril 2026](#v1018---abril-2026)
53
+ - [v1.0.17 - Febrero 2026](#v1017---febrero-2026)
54
+ - [v1.0.16 - Febrero 2026](#v1016---febrero-2026)
55
+ - [v1.0.15 - Febrero 2026](#v1015---febrero-2026)
56
+ - [v1.0.14 - Febrero 2026](#v1014---febrero-2026)
57
+ - [v1.0.13 - Febrero 2026](#v1013---febrero-2026)
48
58
  - [v1.0.12 - Diciembre 2024](#v1012---diciembre-2024)
49
59
 
50
60
  ---
@@ -547,6 +557,68 @@ Usa, adapta y comparte libremente mientras conserves la atribución.
547
557
 
548
558
  ## Changelog
549
559
 
560
+ ### v1.0.22 - Junio 2026
561
+
562
+ - **Seguridad (guía y demos):** se escapan todos los valores del `config.json` al volcarse en la documentación generada (colores, tipografía, font families, variables CSS, helpers, aspect ratios, breakpoints, grid y containers). Evita inyección de HTML/JS al construir con un config no confiable y publicar `dist/index.html`. Nuevo `escapeHtml` centralizado en `src/generators/utils.js`.
563
+ - **Seguridad (dev-server):** `src/dev-server.js` ahora captura URLs malformadas (ya no cae el proceso con `GET /%`), corrige el filtro de path traversal por prefijo y escucha solo en `127.0.0.1`.
564
+ - **Fix:** los reemplazos del `ThemeTransformer` usan replacer de función para no corromper la salida cuando el contenido inyectado contiene `$`.
565
+ - **Fix:** `getPackageVersion()` leía una ruta inexistente y la guía mostraba la versión como vacía; ahora muestra la versión real.
566
+ - **Tests:** nuevo `tests/escaping.test.js` de regresión anti-inyección (suite en 29 tests). El CSS generado (`dist/output.css`, `dist/themes/dutti.css`) no cambia.
567
+
568
+ ### v1.0.21 - Mayo 2026
569
+
570
+ - Ajustes en `typo-generator`: refinamiento de la generación de tablas tipográficas y casos límite del placeholder `HG_TYPO_TABLE`.
571
+
572
+ ### v1.0.20 - Abril 2026
573
+
574
+ - Actualización de labels en la guía y demos (etiquetas de utilidades y secciones).
575
+ - Nuevas clases tipográficas y sus estilos asociados (`config.json`, `typo-generator.js`, demo de Dutti).
576
+
577
+ ### v1.0.19 - Abril 2026
578
+
579
+ - Bump de versión y mantenimiento de `package.json`.
580
+
581
+ ### v1.0.18 - Abril 2026
582
+
583
+ - Refactor amplio bajo el commit "cambios hg5":
584
+ - Reorganización de skills (`.claude/skills`, `.cursor/skills/maquetar-holygrail5`) y `.cursorrules`.
585
+ - Fuentes Suisse Intl y Suisse Works incorporadas en `src/assets/fonts/`.
586
+ - Documentación nueva en `docs/`: `ANALISIS-ARQUITECTURA.md`, `ANALISIS-DESIGN-SYSTEM.md`, `CHANGELOG-MEJORAS.md`, `ESTRUCTURA-CSS.md`, `GUIA-USO-OTRO-PROYECTO.md`, `SUPERPROMPT.md`.
587
+ - Ajustes en `asset-manager.js`, `build-orchestrator.js`, `components-generator.js` y `guide-styles.css`.
588
+ - Nueva clase de botón **badge** y documentación asociada en el tema Dutti.
589
+ - Tarjeta de producto y ajustes de `margin-left` y configuración del grid.
590
+
591
+ ### v1.0.17 - Febrero 2026
592
+
593
+ - Nueva release con limpieza general y consolidación de cambios previos.
594
+
595
+ ### v1.0.16 - Febrero 2026
596
+
597
+ - Botón **badge** inicial (variantes y estilos personalizados).
598
+
599
+ ### v1.0.15 - Febrero 2026
600
+
601
+ - Nuevo botón con estilos personalizados (`themes/dutti/_buttons.css`, `dutti-demo.html`).
602
+
603
+ ### v1.0.14 - Febrero 2026
604
+
605
+ - Limpieza: eliminados estilos duplicados traspasados desde HG2.
606
+ - Mejoras en grids (`Grids`).
607
+ - Cambio del color verde y nuevo skill para estructura de archivos CSS.
608
+ - Ajuste de columnas (`cambios cols`).
609
+
610
+ ### v1.0.13 - Febrero 2026
611
+
612
+ - Refactor de la guía: ajustes de estilos y estructura (`guide-styles.css`, `html-generator.js`, demo de Dutti).
613
+ - Mejoras en `docs-generator`:
614
+ - Generación de la cuadrícula de colores con clasificación de primarios y semánticos.
615
+ - Margen lateral y columnas de gutter en la tabla HTML; configuración de grid actualizada.
616
+ - Conversión de `fontSize` a px y mejora de la tabla de clases.
617
+ - Nuevos helpers de espaciado con prefijo `hg-` para clases inline y block.
618
+ - **Soporte para ratios de aspecto** en `config.json`, generadores y guía HTML, con tests dedicados; nueva clase para imágenes/vídeos en ratios de aspecto y propiedad `display` en `hg-aspect-image`.
619
+ - Integración de la gestión de assets en el flujo de build (eliminada duplicación entre scripts).
620
+ - Documentación: índice y secciones del README, simplificación de `SUPERPROMPT.md`.
621
+
550
622
  ### v1.0.12 - Diciembre 2024
551
623
 
552
624
  **🎉 Refactorización arquitectural completa**
package/config.json CHANGED
@@ -36,6 +36,14 @@
36
36
  }
37
37
  ],
38
38
  "fonts": [
39
+ {
40
+ "source": "src/assets/fonts/suisse-intl-thin.woff2",
41
+ "dest": "dist/assets/fonts/suisse-intl-thin.woff2"
42
+ },
43
+ {
44
+ "source": "src/assets/fonts/suisse-intl-thin.woff",
45
+ "dest": "dist/assets/fonts/suisse-intl-thin.woff"
46
+ },
39
47
  {
40
48
  "source": "src/assets/fonts/suisse-intl-light.woff2",
41
49
  "dest": "dist/assets/fonts/suisse-intl-light.woff2"
@@ -68,6 +76,22 @@
68
76
  "source": "src/assets/fonts/suisse-intl-semibold.woff",
69
77
  "dest": "dist/assets/fonts/suisse-intl-semibold.woff"
70
78
  },
79
+ {
80
+ "source": "src/assets/fonts/SuisseIntlMono-Regular-WebS.woff2",
81
+ "dest": "dist/assets/fonts/SuisseIntlMono-Regular-WebS.woff2"
82
+ },
83
+ {
84
+ "source": "src/assets/fonts/SuisseIntlMono-Regular-WebS.woff",
85
+ "dest": "dist/assets/fonts/SuisseIntlMono-Regular-WebS.woff"
86
+ },
87
+ {
88
+ "source": "src/assets/fonts/SuisseIntlMono-Bold-WebS.woff2",
89
+ "dest": "dist/assets/fonts/SuisseIntlMono-Bold-WebS.woff2"
90
+ },
91
+ {
92
+ "source": "src/assets/fonts/SuisseIntlMono-Bold-WebS.woff",
93
+ "dest": "dist/assets/fonts/SuisseIntlMono-Bold-WebS.woff"
94
+ },
71
95
  {
72
96
  "source": "src/assets/fonts/suisse-works-regular.woff2",
73
97
  "dest": "dist/assets/fonts/suisse-works-regular.woff2"
@@ -117,10 +141,13 @@
117
141
  "bg-cream": "#f4f2ed"
118
142
  },
119
143
  "fontFamilyMap": {
144
+ "primary-thin": "\"suisse-thin\", Arial, Helvetica, sans-serif",
120
145
  "primary-light": "\"suisse-light\", Arial, Helvetica, sans-serif",
121
146
  "primary-regular": "\"suisse-regular\", Arial, Helvetica, sans-serif",
122
147
  "primary-bold": "\"suisse-semibold\", Arial, Helvetica, sans-serif",
123
- "secondary": "\"suisse-medium\", Arial, Helvetica, sans-serif"
148
+ "secondary": "\"suisse-medium\", Arial, Helvetica, sans-serif",
149
+ "mono-regular": "\"suisse-mono-regular\", ui-monospace, monospace",
150
+ "mono-bold": "\"suisse-mono-bold\", ui-monospace, monospace"
124
151
  },
125
152
  "spacingMap": {
126
153
  "0": "0",
@@ -680,9 +707,21 @@
680
707
  }
681
708
  },
682
709
  "typo": {
710
+ "title-thin": {
711
+ "fontFamily": "\"suisse-thin\", Arial, Helvetica, sans-serif",
712
+ "fontWeight": "100",
713
+ "mobile": {
714
+ "fontSize": "24px",
715
+ "lineHeight": "1"
716
+ },
717
+ "desktop": {
718
+ "fontSize": "24px",
719
+ "lineHeight": "1"
720
+ }
721
+ },
683
722
  "title-xxl": {
684
723
  "fontFamily": "\"suisse-regular\", Arial, Helvetica, sans-serif",
685
- "fontWeight": "300",
724
+ "fontWeight": "400",
686
725
  "mobile": {
687
726
  "fontSize": "24px",
688
727
  "lineHeight": "1"
@@ -708,7 +747,7 @@
708
747
  },
709
748
  "title-l-b": {
710
749
  "fontFamily": "\"suisse-regular\", Arial, Helvetica, sans-serif",
711
- "fontWeight": "300",
750
+ "fontWeight": "400",
712
751
  "mobile": {
713
752
  "fontSize": "12px",
714
753
  "lineHeight": "1.4"
@@ -720,7 +759,7 @@
720
759
  },
721
760
  "title-l": {
722
761
  "fontFamily": "\"suisse-light\", Arial, Helvetica, sans-serif",
723
- "fontWeight": "100",
762
+ "fontWeight": "300",
724
763
  "letterSpacing": "0.16em",
725
764
  "textTransform": "uppercase",
726
765
  "mobile": {
@@ -734,7 +773,7 @@
734
773
  },
735
774
  "title-m": {
736
775
  "fontFamily": "\"suisse-light\", Arial, Helvetica, sans-serif",
737
- "fontWeight": "100",
776
+ "fontWeight": "300",
738
777
  "letterSpacing": "0.16em",
739
778
  "mobile": {
740
779
  "fontSize": "12px",
@@ -747,7 +786,7 @@
747
786
  },
748
787
  "title-s-b": {
749
788
  "fontFamily": "\"suisse-regular\", Arial, Helvetica, sans-serif",
750
- "fontWeight": "300",
789
+ "fontWeight": "400",
751
790
  "letterSpacing": "0.16em",
752
791
  "mobile": {
753
792
  "fontSize": "10px",
@@ -760,7 +799,7 @@
760
799
  },
761
800
  "title-s": {
762
801
  "fontFamily": "\"suisse-light\", Arial, Helvetica, sans-serif",
763
- "fontWeight": "100",
802
+ "fontWeight": "300",
764
803
  "letterSpacing": "0.16em",
765
804
  "textTransform": "uppercase",
766
805
  "mobile": {
@@ -774,7 +813,7 @@
774
813
  },
775
814
  "text-l": {
776
815
  "fontFamily": "\"suisse-light\", Arial, Helvetica, sans-serif",
777
- "fontWeight": "100",
816
+ "fontWeight": "300",
778
817
  "letterSpacing": "0.04em",
779
818
  "mobile": {
780
819
  "fontSize": "13px",
@@ -787,7 +826,7 @@
787
826
  },
788
827
  "text-m": {
789
828
  "fontFamily": "\"suisse-light\", Arial, Helvetica, sans-serif",
790
- "fontWeight": "100",
829
+ "fontWeight": "300",
791
830
  "letterSpacing": "0.04em",
792
831
  "mobile": {
793
832
  "fontSize": "12px",
@@ -800,7 +839,7 @@
800
839
  },
801
840
  "p-tag": {
802
841
  "fontFamily": "\"suisse-light\", Arial, Helvetica, sans-serif",
803
- "fontWeight": "100",
842
+ "fontWeight": "300",
804
843
  "letterSpacing": "0.16em",
805
844
  "mobile": {
806
845
  "fontSize": "9px",
@@ -813,7 +852,7 @@
813
852
  },
814
853
  "hg-body-l": {
815
854
  "fontFamily": "\"suisse-light\", Arial, Helvetica, sans-serif",
816
- "fontWeight": "100",
855
+ "fontWeight": "300",
817
856
  "letterSpacing": "0.04em",
818
857
  "mobile": {
819
858
  "fontSize": "12px",
@@ -826,7 +865,7 @@
826
865
  },
827
866
  "hg-body-l-b": {
828
867
  "fontFamily": "\"suisse-regular\", Arial, Helvetica, sans-serif",
829
- "fontWeight": "300",
868
+ "fontWeight": "400",
830
869
  "letterSpacing": "0.04em",
831
870
  "mobile": {
832
871
  "fontSize": "12px",
@@ -839,7 +878,7 @@
839
878
  },
840
879
  "hg-body-m": {
841
880
  "fontFamily": "\"suisse-light\", Arial, Helvetica, sans-serif",
842
- "fontWeight": "100",
881
+ "fontWeight": "300",
843
882
  "letterSpacing": "0.04em",
844
883
  "mobile": {
845
884
  "fontSize": "12px",
@@ -852,7 +891,7 @@
852
891
  },
853
892
  "hg-body-m-b": {
854
893
  "fontFamily": "\"suisse-regular\", Arial, Helvetica, sans-serif",
855
- "fontWeight": "300",
894
+ "fontWeight": "400",
856
895
  "letterSpacing": "0.04em",
857
896
  "mobile": {
858
897
  "fontSize": "12px",
@@ -865,7 +904,7 @@
865
904
  },
866
905
  "label-m": {
867
906
  "fontFamily": "\"suisse-light\", Arial, Helvetica, sans-serif",
868
- "fontWeight": "100",
907
+ "fontWeight": "300",
869
908
  "letterSpacing": "0.16em",
870
909
  "textTransform": "uppercase",
871
910
  "mobile": {
@@ -879,7 +918,7 @@
879
918
  },
880
919
  "label-m-b": {
881
920
  "fontFamily": "\"suisse-regular\", Arial, Helvetica, sans-serif",
882
- "fontWeight": "300",
921
+ "fontWeight": "400",
883
922
  "letterSpacing": "0.16em",
884
923
  "textTransform": "uppercase",
885
924
  "mobile": {
@@ -893,7 +932,7 @@
893
932
  },
894
933
  "label-s": {
895
934
  "fontFamily": "\"suisse-light\", Arial, Helvetica, sans-serif",
896
- "fontWeight": "100",
935
+ "fontWeight": "300",
897
936
  "letterSpacing": "0.06em",
898
937
  "textTransform": "uppercase",
899
938
  "mobile": {
@@ -907,7 +946,7 @@
907
946
  },
908
947
  "label-s-b": {
909
948
  "fontFamily": "\"suisse-regular\", Arial, Helvetica, sans-serif",
910
- "fontWeight": "300",
949
+ "fontWeight": "400",
911
950
  "letterSpacing": "0.06em",
912
951
  "textTransform": "uppercase",
913
952
  "mobile": {
@@ -918,6 +957,34 @@
918
957
  "fontSize": "10px",
919
958
  "lineHeight": "1"
920
959
  }
960
+ },
961
+ "label-mono": {
962
+ "fontFamily": "\"suisse-mono-regular\", ui-monospace, monospace",
963
+ "fontWeight": "400",
964
+ "letterSpacing": "0.06em",
965
+ "textTransform": "uppercase",
966
+ "mobile": {
967
+ "fontSize": "10px",
968
+ "lineHeight": "1.2"
969
+ },
970
+ "desktop": {
971
+ "fontSize": "10px",
972
+ "lineHeight": "1.2"
973
+ }
974
+ },
975
+ "label-mono-b": {
976
+ "fontFamily": "\"suisse-mono-bold\", ui-monospace, monospace",
977
+ "fontWeight": "700",
978
+ "letterSpacing": "0.06em",
979
+ "textTransform": "uppercase",
980
+ "mobile": {
981
+ "fontSize": "10px",
982
+ "lineHeight": "1.2"
983
+ },
984
+ "desktop": {
985
+ "fontSize": "10px",
986
+ "lineHeight": "1.2"
987
+ }
921
988
  }
922
989
  }
923
990
  }
@@ -4,20 +4,13 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>HolyGrail5 — Componentes base</title>
7
- <link rel="preconnect" href="https://fonts.googleapis.com">
8
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Instrument+Sans:regular,100,500,600,700">
10
7
  <!-- Framework base -->
11
8
  <link rel="stylesheet" href="output.css">
12
9
  <!-- Tema base genérico: dutti (variables + componentes) -->
13
10
  <link rel="stylesheet" href="themes/dutti.css">
14
- <!-- Estilos compartidos de guía (header, sidebar, demo-*) -->
11
+ <!-- Estilos compartidos de guía (header, sidebar, demo-*; incluye @font-face Suisse y la regla body en Suisse) -->
15
12
  <link rel="stylesheet" href="guide-styles.css">
16
13
  <style>
17
- body {
18
- font-family: 'Instrument Sans', sans-serif !important;
19
- }
20
-
21
14
  /* Descripción de cada sección (debajo del título) */
22
15
  .cmp-desc {
23
16
  font-size: 14px;
@@ -384,6 +384,10 @@ Las clases tipográficas se generan desde `config.typo`. Cada clase se aplica di
384
384
  <!-- Body variants -->
385
385
  <p class="hg-hg-body-m">Body medium (12→13px)</p>
386
386
  <p class="hg-hg-body-m-b">Body medium bold (weight 400)</p>
387
+
388
+ <!-- Labels mono (Suisse Intl Mono, 10px / 120%) -->
389
+ <span class="label-mono">Label mono regular</span>
390
+ <span class="label-mono-b">Label mono bold</span>
387
391
  ```
388
392
 
389
393
  ### Cómo funciona
@@ -10,16 +10,24 @@
10
10
  antiguos.
11
11
  ============================================ */
12
12
  @font-face {
13
- font-family: "suisse-light";
13
+ font-family: "suisse-thin";
14
14
  font-weight: 100;
15
15
  font-display: swap;
16
+ src: local("SuisseIntl-Thin"),
17
+ url('assets/fonts/suisse-intl-thin.woff2') format('woff2'),
18
+ url('assets/fonts/suisse-intl-thin.woff') format('woff');
19
+ }
20
+ @font-face {
21
+ font-family: "suisse-light";
22
+ font-weight: 300;
23
+ font-display: swap;
16
24
  src: local("SuisseIntl-Light"),
17
25
  url('assets/fonts/suisse-intl-light.woff2') format('woff2'),
18
26
  url('assets/fonts/suisse-intl-light.woff') format('woff');
19
27
  }
20
28
  @font-face {
21
29
  font-family: "suisse-regular";
22
- font-weight: 300;
30
+ font-weight: 400;
23
31
  font-display: swap;
24
32
  src: local("SuisseIntl-Regular"),
25
33
  url('assets/fonts/suisse-intl-regular.woff2') format('woff2'),
@@ -27,7 +35,7 @@
27
35
  }
28
36
  @font-face {
29
37
  font-family: "suisse-medium";
30
- font-weight: 400;
38
+ font-weight: 500;
31
39
  font-display: swap;
32
40
  src: local("SuisseIntl-Medium"),
33
41
  url('assets/fonts/suisse-intl-medium.woff2') format('woff2'),
@@ -35,12 +43,28 @@
35
43
  }
36
44
  @font-face {
37
45
  font-family: "suisse-semibold";
38
- font-weight: 500;
46
+ font-weight: 600;
39
47
  font-display: swap;
40
48
  src: local("SuisseIntl-SemiBold"),
41
49
  url('assets/fonts/suisse-intl-semibold.woff2') format('woff2'),
42
50
  url('assets/fonts/suisse-intl-semibold.woff') format('woff');
43
51
  }
52
+ @font-face {
53
+ font-family: "suisse-mono-regular";
54
+ font-weight: 400;
55
+ font-display: swap;
56
+ src: local("SuisseIntlMono-Regular"),
57
+ url('assets/fonts/SuisseIntlMono-Regular-WebS.woff2') format('woff2'),
58
+ url('assets/fonts/SuisseIntlMono-Regular-WebS.woff') format('woff');
59
+ }
60
+ @font-face {
61
+ font-family: "suisse-mono-bold";
62
+ font-weight: 700;
63
+ font-display: swap;
64
+ src: local("SuisseIntlMono-Bold"),
65
+ url('assets/fonts/SuisseIntlMono-Bold-WebS.woff2') format('woff2'),
66
+ url('assets/fonts/SuisseIntlMono-Bold-WebS.woff') format('woff');
67
+ }
44
68
  /* Suisse Works (serif) — reservado para el tema Limited */
45
69
  @font-face {
46
70
  font-family: "suisse-works-regular";
@@ -70,9 +94,7 @@
70
94
  /* ============================================
71
95
  RESET Y BASE
72
96
  ============================================ */
73
- * {
74
- scroll-behavior: smooth;
75
- }
97
+ /* Scroll nativo (sin suavizado): los saltos de ancla son instantáneos. */
76
98
 
77
99
  body {
78
100
  margin: 0;
@@ -96,14 +118,14 @@ h2 {
96
118
  margin-left: 0;
97
119
  flex: 1;
98
120
  padding: 0;
99
- padding-bottom: 10rem;
121
+ padding-bottom: 4rem;
100
122
  max-width: 100%;
101
123
  }
102
124
 
103
125
  .guide-main-content h2 {
104
- font-size: 50px;
105
- padding-bottom: 40px;
106
- margin-bottom: 40px;
126
+ font-size: 34px;
127
+ padding-bottom: 12px;
128
+ margin-bottom: 8px;
107
129
  font-weight: 500;
108
130
  color: #000;
109
131
  font-family: var(--hg-typo-font-family-primary-bold);
@@ -114,27 +136,27 @@ h2 {
114
136
  font-family: var(--hg-typo-font-family-primary-regular);
115
137
  color: #000;
116
138
  font-size: 16px;
117
- line-height: 28px;
118
- margin: 80px 0 12px;
139
+ line-height: 1.4;
140
+ margin: 2rem 0 0.75rem;
119
141
  }
120
142
 
121
143
  @media (min-width: 768px) {
122
144
  .guide-main-content h2 {
123
- font-size: 64px;
124
- padding-bottom: 40px;
125
- margin-bottom: 10px;
145
+ font-size: 44px;
146
+ padding-bottom: 12px;
147
+ margin-bottom: 8px;
126
148
  }
127
149
 
128
150
  .guide-main-content h3 {
129
151
  font-family: var(--hg-typo-font-family-primary-regular);
130
152
  color: #000;
131
- font-size: 20px;
132
- line-height: 28px;
133
- margin: 80px 0 12px;
153
+ font-size: 18px;
154
+ line-height: 1.4;
155
+ margin: 2rem 0 0.75rem;
134
156
  }
135
-
157
+
136
158
  .guide-section-description {
137
- font-size: 28px;
159
+ font-size: 18px;
138
160
  }
139
161
  }
140
162
 
@@ -147,20 +169,40 @@ h2 {
147
169
  border-radius: 8px;
148
170
  }
149
171
 
172
+ /* Compactación / unificación del ritmo vertical de la guía.
173
+ Las cabeceras de sección usan `.row.mb-120` (120px) como separador;
174
+ aquí lo reducimos a un valor coherente y mucho más pegado. También
175
+ homogeneizamos el espacio entre secciones y el del separador <hr>. */
176
+ .guide-section .row.mb-120,
177
+ .guide-section--highlighted .row.mb-120 {
178
+ margin-bottom: 1.5rem;
179
+ }
180
+ .guide-section + .guide-section,
181
+ .guide-section--highlighted + .guide-section,
182
+ .guide-section + .guide-section--highlighted {
183
+ margin-top: 2.5rem;
184
+ }
185
+ .guide-section .row.mb-120 hr,
186
+ .guide-section hr {
187
+ margin: 0.5rem 0 0;
188
+ border: 0;
189
+ border-top: 1px solid #e9e9e9;
190
+ }
191
+
150
192
  .guide-section.guide-section--highlighted {
151
193
  background: #fff;
152
- padding: 5rem 0 2rem 0;
194
+ padding: 2rem 0 1rem 0;
153
195
  }
154
196
  @media (min-width: 768px) {
155
197
  .guide-section.guide-section--highlighted {
156
- padding: 5rem 0;
198
+ padding: 2.5rem 0 1.5rem 0;
157
199
  }
158
200
  }
159
201
 
160
202
  .guide-section-title {
161
203
  font-size: 1.5rem;
162
204
  font-weight: 500;
163
- padding-bottom: 2rem;
205
+ padding-bottom: 1rem;
164
206
  line-height: 1.2;
165
207
  display: flex;
166
208
  justify-content: space-between;
@@ -170,34 +212,19 @@ h2 {
170
212
 
171
213
  @media (min-width: 768px) {
172
214
  .guide-section-title {
173
- margin-top: 3rem;
174
- flex-direction: row;
215
+ margin-top: 1.25rem;
216
+ /* Se mantiene en columna: el contenido (cajas explicativas) queda
217
+ debajo del titular y alineado a la izquierda, no en la mitad derecha. */
175
218
  }
176
219
  }
177
220
 
178
221
  .guide-section-description {
179
- margin-top: 1rem;
180
- font-size: 28px;
181
- color: #000000;
182
- font-family: var(--hg-typo-font-family-primary-light);
183
- margin-bottom: 20px;
184
-
185
- line-height: 1.2;
186
- width: 100%;
187
- margin-left: 0;
188
- display: flex;
189
- flex-direction: column;
190
- justify-content: flex-end;
191
- }
192
-
193
- .guide-section-description {
194
- margin-top: 1rem;
195
- font-size: 28px;
222
+ margin-top: 0.5rem;
223
+ font-size: 18px;
196
224
  color: #000000;
197
225
  font-family: var(--hg-typo-font-family-primary-light);
198
- margin-bottom: 20px;
199
-
200
- line-height: 1.2;
226
+ margin-bottom: 8px;
227
+ line-height: 1.35;
201
228
  width: 100%;
202
229
  margin-left: 0;
203
230
  display: flex;
@@ -543,14 +570,14 @@ h2 {
543
570
  color: #919191;
544
571
  letter-spacing: 0.05em;
545
572
  border-bottom: 1px solid #ddd;
546
- padding: 0.75rem;
573
+ padding: 0.5rem 0.75rem;
547
574
  padding-left: 0;
548
575
  text-align: left;
549
576
  z-index: 10;
550
577
  }
551
578
 
552
579
  .guide-table td {
553
- padding: 0.75rem;
580
+ padding: 0.38rem 0.75rem;
554
581
  padding-left: 0;
555
582
  border-bottom: 1px solid #efefef;
556
583
  vertical-align: middle;
@@ -578,9 +605,9 @@ h2 {
578
605
 
579
606
  .guide-table .guide-font-family-preview {
580
607
  min-width: 100px;
581
- padding: 0.75rem;
582
- min-height: 50px;
583
- font-size: 1.5rem;
608
+ padding: 0.4rem;
609
+ min-height: 34px;
610
+ font-size: 1.25rem;
584
611
  /* Dejamos que cada font-family muestre su peso natural. En
585
612
  esta convención (una familia por peso) cada @font-face
586
613
  declara un único font-weight, así que forzar un weight
@@ -677,7 +704,6 @@ h2 {
677
704
  .guide-text-bold,
678
705
  .guide-table .guide-table-name,
679
706
  .guide-layout-class-name {
680
- font-weight: 600;
681
707
  color: #000000;
682
708
  font-family: var(--hg-typo-font-family-primary-regular);
683
709
  }
@@ -1295,15 +1321,18 @@ h2 {
1295
1321
  gap: var(--hg-spacing-24);
1296
1322
  max-width: 100%;
1297
1323
  margin-left: 0;
1298
- margin-bottom: 10rem;
1324
+ margin-bottom: 2rem;
1299
1325
  }
1300
1326
 
1327
+ /* Las cajas explicativas van debajo del titular + línea, alineadas a la
1328
+ IZQUIERDA (antes: max-width 50% + margin-left 50% las empujaba a la
1329
+ mitad derecha de la página). */
1301
1330
  @media (min-width: 768px) {
1302
1331
  .demo-section-2 {
1303
1332
  grid-template-columns: repeat(2, 1fr);
1304
- max-width: 50%;
1305
- margin-left: 50%;
1306
- margin-bottom: 10rem;
1333
+ width: 100%;
1334
+ margin-left: 0;
1335
+ margin-bottom: 2rem;
1307
1336
  }
1308
1337
  }
1309
1338