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.
- package/README.md +72 -0
- package/config.json +85 -18
- package/dist/assets/fonts/SuisseIntlMono-Bold-WebS.woff +0 -0
- package/dist/assets/fonts/SuisseIntlMono-Bold-WebS.woff2 +0 -0
- package/dist/assets/fonts/SuisseIntlMono-Regular-WebS.woff +0 -0
- package/dist/assets/fonts/SuisseIntlMono-Regular-WebS.woff2 +0 -0
- package/dist/assets/fonts/suisse-intl-thin.woff +0 -0
- package/dist/assets/fonts/suisse-intl-thin.woff2 +0 -0
- package/dist/componentes.html +1 -8
- package/dist/developer-guide.md +4 -0
- package/dist/guide-styles.css +85 -56
- package/dist/index.html +2727 -2690
- package/dist/output.css +123 -70
- package/dist/skills.html +17 -5
- package/dist/themes/dutti-demo.html +76 -39
- package/dist/themes/dutti.css +10 -6
- package/dist/themes/limited-demo.html +55 -18
- package/dist/themes/limited.css +8 -6
- package/package.json +2 -2
- package/src/.data/.previous-values.json +69 -20
- package/src/assets/fonts/SuisseIntlMono-Bold-WebS.woff +0 -0
- package/src/assets/fonts/SuisseIntlMono-Bold-WebS.woff2 +0 -0
- package/src/assets/fonts/SuisseIntlMono-Regular-WebS.woff +0 -0
- package/src/assets/fonts/SuisseIntlMono-Regular-WebS.woff2 +0 -0
- package/src/assets/fonts/suisse-intl-thin.woff +0 -0
- package/src/assets/fonts/suisse-intl-thin.woff2 +0 -0
- package/src/build/asset-manager.js +8 -0
- package/src/build/components-generator.js +1 -8
- package/src/build/skills-generator.js +12 -4
- package/src/build/theme-transformer.js +10 -3
- package/src/dev-server.js +28 -13
- package/src/docs-generator/guide-styles.css +85 -56
- package/src/docs-generator/html-generator.js +188 -183
- package/src/docs-generator/sections/colors-section.js +15 -5
- package/src/generators/typo-generator.js +1 -2
- package/src/generators/utils.js +15 -0
- package/themes/_base/_radios.css +7 -6
- package/themes/dutti/README.md +17 -0
- package/themes/dutti/_variables.css +3 -0
- package/themes/dutti/theme.json +2 -1
- package/themes/limited/_variables.css +1 -0
- 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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/componentes.html
CHANGED
|
@@ -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;
|
package/dist/developer-guide.md
CHANGED
|
@@ -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
|
package/dist/guide-styles.css
CHANGED
|
@@ -10,16 +10,24 @@
|
|
|
10
10
|
antiguos.
|
|
11
11
|
============================================ */
|
|
12
12
|
@font-face {
|
|
13
|
-
font-family: "suisse-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
121
|
+
padding-bottom: 4rem;
|
|
100
122
|
max-width: 100%;
|
|
101
123
|
}
|
|
102
124
|
|
|
103
125
|
.guide-main-content h2 {
|
|
104
|
-
font-size:
|
|
105
|
-
padding-bottom:
|
|
106
|
-
margin-bottom:
|
|
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:
|
|
118
|
-
margin:
|
|
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:
|
|
124
|
-
padding-bottom:
|
|
125
|
-
margin-bottom:
|
|
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:
|
|
132
|
-
line-height:
|
|
133
|
-
margin:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
174
|
-
|
|
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:
|
|
180
|
-
font-size:
|
|
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:
|
|
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.
|
|
582
|
-
min-height:
|
|
583
|
-
font-size: 1.
|
|
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:
|
|
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
|
-
|
|
1305
|
-
margin-left:
|
|
1306
|
-
margin-bottom:
|
|
1333
|
+
width: 100%;
|
|
1334
|
+
margin-left: 0;
|
|
1335
|
+
margin-bottom: 2rem;
|
|
1307
1336
|
}
|
|
1308
1337
|
}
|
|
1309
1338
|
|