@crtobiasdelsud/portal-ui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/README.md +829 -0
  3. package/package.json +43 -0
  4. package/src/adapters/AdaptersContext.jsx +28 -0
  5. package/src/components/ArticleHero/ArticleHero.jsx +73 -0
  6. package/src/components/ArticleHero/ArticleHero.module.scss +89 -0
  7. package/src/components/ArticleHero/variants/V0/V0.jsx +29 -0
  8. package/src/components/ArticleHero/variants/V0/V0.module.scss +51 -0
  9. package/src/components/ArticleHero/variants/V0Desktop/V0Desktop.jsx +29 -0
  10. package/src/components/ArticleHero/variants/V0Desktop/V0Desktop.module.scss +54 -0
  11. package/src/components/ArticleHero/variants/V0Tablet/V0Tablet.jsx +29 -0
  12. package/src/components/ArticleHero/variants/V0Tablet/V0Tablet.module.scss +49 -0
  13. package/src/components/ArticleHero/variants/V1/V1.jsx +29 -0
  14. package/src/components/ArticleHero/variants/V1/V1.module.scss +40 -0
  15. package/src/components/ArticleHero/variants/V2/V2.jsx +29 -0
  16. package/src/components/ArticleHero/variants/V2/V2.module.scss +44 -0
  17. package/src/components/ArticleHero/variants/V3/V3.jsx +25 -0
  18. package/src/components/ArticleHero/variants/V3/V3.module.scss +41 -0
  19. package/src/components/ArticleHero/variants/V4/V4.jsx +25 -0
  20. package/src/components/ArticleHero/variants/V4/V4.module.scss +36 -0
  21. package/src/components/ArticleHero/variants/V5/V5.jsx +25 -0
  22. package/src/components/ArticleHero/variants/V5/V5.module.scss +33 -0
  23. package/src/components/ArticleHeroFull/ArticleHeroFull.jsx +38 -0
  24. package/src/components/ArticleHeroFull/ArticleHeroFull.module.scss +116 -0
  25. package/src/components/ArticleSidebar/ArticleSidebar.jsx +28 -0
  26. package/src/components/ArticleSidebar/ArticleSidebar.module.scss +41 -0
  27. package/src/components/AuthorBlock/AuthorBlock.jsx +67 -0
  28. package/src/components/AuthorBlock/AuthorBlock.module.scss +35 -0
  29. package/src/components/AuthorBlock/variants/V1/V1.jsx +38 -0
  30. package/src/components/AuthorBlock/variants/V1/V1.module.scss +25 -0
  31. package/src/components/AuthorBlock/variants/V2/V2.jsx +38 -0
  32. package/src/components/AuthorBlock/variants/V2/V2.module.scss +10 -0
  33. package/src/components/AuthorBlock/variants/V3/V3.jsx +30 -0
  34. package/src/components/AuthorBlock/variants/V3/V3.module.scss +10 -0
  35. package/src/components/AuthorBlock/variants/V4/V4.jsx +30 -0
  36. package/src/components/AuthorBlock/variants/V4/V4.module.scss +10 -0
  37. package/src/components/Banner/Banner.module.scss +70 -0
  38. package/src/components/Banner/BannerDisplay.jsx +118 -0
  39. package/src/components/Banner/BannerView.jsx +35 -0
  40. package/src/components/Blocks/BlockColumns/BlockColumns.jsx +37 -0
  41. package/src/components/Blocks/BlockColumns/BlockColumns.module.scss +64 -0
  42. package/src/components/Blocks/BlockColumnsBajada/BlockColumnsBajada.jsx +38 -0
  43. package/src/components/Blocks/BlockColumnsBajada/BlockColumnsBajada.module.scss +64 -0
  44. package/src/components/Blocks/BlockMain/BlockMain.jsx +18 -0
  45. package/src/components/Blocks/BlockMain/BlockMain.module.scss +9 -0
  46. package/src/components/Blocks/BlockMainNarrow/BlockMainNarrow.jsx +18 -0
  47. package/src/components/Blocks/BlockMainNarrow/BlockMainNarrow.module.scss +9 -0
  48. package/src/components/Blocks/BlockMainSidebar/BlockMainSidebar.jsx +33 -0
  49. package/src/components/Blocks/BlockMainSidebar/BlockMainSidebar.module.scss +44 -0
  50. package/src/components/Blocks/BlockStack/BlockStack.jsx +8 -0
  51. package/src/components/Blocks/BlockStack/BlockStack.module.scss +18 -0
  52. package/src/components/Blocks/WidgetErrorBoundary.jsx +43 -0
  53. package/src/components/Breadcrumb/Breadcrumb.jsx +24 -0
  54. package/src/components/Breadcrumb/Breadcrumb.module.scss +33 -0
  55. package/src/components/Breadcrumb/variants/V1/V1.jsx +39 -0
  56. package/src/components/Breadcrumb/variants/V1/V1.module.scss +3 -0
  57. package/src/components/Breadcrumb/variants/V2/V2.jsx +28 -0
  58. package/src/components/Breadcrumb/variants/V2/V2.module.scss +3 -0
  59. package/src/components/Breadcrumb/variants/V3/V3.jsx +28 -0
  60. package/src/components/Breadcrumb/variants/V3/V3.module.scss +3 -0
  61. package/src/components/Breadcrumb/variants/V4/V4.jsx +28 -0
  62. package/src/components/Breadcrumb/variants/V4/V4.module.scss +3 -0
  63. package/src/components/Breadcrumb/variants/V5/V5.jsx +28 -0
  64. package/src/components/Breadcrumb/variants/V5/V5.module.scss +4 -0
  65. package/src/components/Cabezal/Cabezal.module.scss +82 -0
  66. package/src/components/Cabezal/CabezalView.jsx +87 -0
  67. package/src/components/Cabezal/CardCabezal/CardCabezal.module.scss +403 -0
  68. package/src/components/Cabezal/CardCabezal/index.jsx +25 -0
  69. package/src/components/Cabezal/CardCabezal/variants/Amp/Amp.jsx +20 -0
  70. package/src/components/Cabezal/CardCabezal/variants/Carrusel/Carrusel.jsx +39 -0
  71. package/src/components/Cabezal/CardCabezal/variants/Carrusel/Carrusel.module.scss +87 -0
  72. package/src/components/Cabezal/CardCabezal/variants/Compact/Compact.jsx +36 -0
  73. package/src/components/Cabezal/CardCabezal/variants/Default/Default.jsx +35 -0
  74. package/src/components/Cabezal/CardCabezal/variants/Featured/Featured.jsx +36 -0
  75. package/src/components/Cabezal/CardCabezal/variants/FeaturedDuo/FeaturedDuo.jsx +36 -0
  76. package/src/components/Cabezal/CardCabezal/variants/FeaturedHorizontal/FeaturedHorizontal.jsx +36 -0
  77. package/src/components/Cabezal/CardCabezal/variants/Medium/Medium.jsx +35 -0
  78. package/src/components/Cabezal/CardCabezal/variants/Ranked/Ranked.jsx +36 -0
  79. package/src/components/Cabezal/variants/Carrusel/Carrusel.jsx +167 -0
  80. package/src/components/Cabezal/variants/Carrusel/Carrusel.module.scss +145 -0
  81. package/src/components/Cabezal/variants/Categoria/Categoria.jsx +29 -0
  82. package/src/components/Cabezal/variants/Categoria/Categoria.module.scss +82 -0
  83. package/src/components/Cabezal/variants/CategoriaDos/CategoriaDos.jsx +29 -0
  84. package/src/components/Cabezal/variants/CategoriaDos/CategoriaDos.module.scss +99 -0
  85. package/src/components/Cabezal/variants/Compact/Compact.jsx +24 -0
  86. package/src/components/Cabezal/variants/Compact/Compact.module.scss +73 -0
  87. package/src/components/Cabezal/variants/Default/Default.jsx +24 -0
  88. package/src/components/Cabezal/variants/Default/Default.module.scss +71 -0
  89. package/src/components/Cabezal/variants/Desktop/Desktop.jsx +45 -0
  90. package/src/components/Cabezal/variants/Desktop/Desktop.module.scss +113 -0
  91. package/src/components/Cabezal/variants/Duo/Duo.jsx +24 -0
  92. package/src/components/Cabezal/variants/Duo/Duo.module.scss +72 -0
  93. package/src/components/Cabezal/variants/DuoSinCopete/DuoSinCopete.jsx +24 -0
  94. package/src/components/Cabezal/variants/DuoSinCopete/DuoSinCopete.module.scss +72 -0
  95. package/src/components/Cabezal/variants/Horizontal/Horizontal.jsx +24 -0
  96. package/src/components/Cabezal/variants/Horizontal/Horizontal.module.scss +64 -0
  97. package/src/components/Cabezal/variants/LeeAdemas/LeeAdemas.jsx +53 -0
  98. package/src/components/Cabezal/variants/LeeAdemas/LeeAdemas.module.scss +103 -0
  99. package/src/components/Cabezal/variants/LoQueSeLee/LoQueSeLee.jsx +48 -0
  100. package/src/components/Cabezal/variants/LoQueSeLee/LoQueSeLee.module.scss +103 -0
  101. package/src/components/Cabezal/variants/LoQueSeLee/LoQueSeLeeSkeleton.jsx +21 -0
  102. package/src/components/Cabezal/variants/LoQueSeLee/LoQueSeLeeSkeleton.module.scss +34 -0
  103. package/src/components/Cabezal/variants/Medium/Medium.jsx +24 -0
  104. package/src/components/Cabezal/variants/Medium/Medium.module.scss +78 -0
  105. package/src/components/Cabezal/variants/Mobile/Mobile.jsx +48 -0
  106. package/src/components/Cabezal/variants/Mobile/Mobile.module.scss +64 -0
  107. package/src/components/Cabezal/variants/Ranking/Ranking.jsx +24 -0
  108. package/src/components/Cabezal/variants/Ranking/Ranking.module.scss +79 -0
  109. package/src/components/Cabezal/variants/SeguiLeyendo/SeguiLeyendo.jsx +38 -0
  110. package/src/components/Cabezal/variants/SeguiLeyendo/SeguiLeyendo.module.scss +52 -0
  111. package/src/components/Cabezal/variants/Tablet/Tablet.jsx +45 -0
  112. package/src/components/Cabezal/variants/Tablet/Tablet.module.scss +113 -0
  113. package/src/components/Cabezal/variants/Tres/Tres.jsx +24 -0
  114. package/src/components/Cabezal/variants/Tres/Tres.module.scss +74 -0
  115. package/src/components/Cabezal/variants/UnaDetallada/UnaDetallada.jsx +29 -0
  116. package/src/components/Cabezal/variants/UnaDetallada/UnaDetallada.module.scss +86 -0
  117. package/src/components/Cards/ArticleBody/ArticleBody.module.scss +9 -0
  118. package/src/components/Cards/ArticleBody/ArticleBodyView.jsx +23 -0
  119. package/src/components/Cards/ArticleCard/ArticleCard.jsx +111 -0
  120. package/src/components/Cards/ArticleCard/ArticleCard.module.scss +129 -0
  121. package/src/components/Cards/Bajada/Bajada.jsx +41 -0
  122. package/src/components/Cards/Bajada/Bajada.module.scss +113 -0
  123. package/src/components/Cards/Bajada/variants/V1/V1.jsx +20 -0
  124. package/src/components/Cards/Bajada/variants/V1/V1.module.scss +2 -0
  125. package/src/components/Cards/Bajada/variants/V2/V2.jsx +20 -0
  126. package/src/components/Cards/Bajada/variants/V2/V2.module.scss +2 -0
  127. package/src/components/Clima/Clima.module.scss +93 -0
  128. package/src/components/Clima/ClimaView.jsx +45 -0
  129. package/src/components/DateTime/DateTime.jsx +26 -0
  130. package/src/components/DateTime/DateTime.module.scss +29 -0
  131. package/src/components/DolarTicker/DolarTicker.jsx +137 -0
  132. package/src/components/DolarTicker/DolarTicker.module.scss +249 -0
  133. package/src/components/DolarTicker/arrow_back_ios_black.svg +3 -0
  134. package/src/components/DolarTicker/arrow_back_ios_white.svg +3 -0
  135. package/src/components/DolarTicker/arrow_downward.svg +3 -0
  136. package/src/components/DolarTicker/arrow_upward.svg +3 -0
  137. package/src/components/DolarTickerOriginal/DolarTickerOriginal.jsx +137 -0
  138. package/src/components/DolarTickerOriginal/DolarTickerOriginal.module.scss +235 -0
  139. package/src/components/DolarTickerOriginal/arrow_back_ios_black.svg +3 -0
  140. package/src/components/DolarTickerOriginal/arrow_back_ios_white.svg +3 -0
  141. package/src/components/DolarTickerOriginal/arrow_downward.svg +3 -0
  142. package/src/components/DolarTickerOriginal/arrow_upward.svg +3 -0
  143. package/src/components/EditorOutput/EditorOutput.jsx +303 -0
  144. package/src/components/EditorOutput/EditorOutput.module.scss +310 -0
  145. package/src/components/EditorOutputFull/EditorOutputFull.jsx +303 -0
  146. package/src/components/EditorOutputFull/EditorOutputFull.module.scss +317 -0
  147. package/src/components/Feed/Feed.module.scss +77 -0
  148. package/src/components/Feed/FeedView.jsx +25 -0
  149. package/src/components/Feed/variants/V1/V1.jsx +34 -0
  150. package/src/components/Feed/variants/V1/V1.module.scss +39 -0
  151. package/src/components/Feed/variants/V2/V2.jsx +36 -0
  152. package/src/components/Feed/variants/V2/V2.module.scss +72 -0
  153. package/src/components/Footers/FooterSimple/FooterSimple.jsx +170 -0
  154. package/src/components/Footers/FooterSimple/FooterSimple.module.scss +256 -0
  155. package/src/components/Headers/HeaderSimple/CategoriesBar/CategoriesBar.jsx +104 -0
  156. package/src/components/Headers/HeaderSimple/CategoriesBar/CategoriesBar.module.scss +112 -0
  157. package/src/components/Headers/HeaderSimple/DrawerContext/DrawerContext.jsx +44 -0
  158. package/src/components/Headers/HeaderSimple/HeaderSimpleAmp/HeaderSimpleAmp.jsx +95 -0
  159. package/src/components/Headers/HeaderSimple/HeaderSimpleAmp/HeaderSimpleAmp.module.scss +2 -0
  160. package/src/components/Headers/HeaderSimple/HeaderSimpleDesktop/HeaderSimpleDesktop.jsx +93 -0
  161. package/src/components/Headers/HeaderSimple/HeaderSimpleDesktop/HeaderSimpleDesktop.module.scss +121 -0
  162. package/src/components/Headers/HeaderSimple/HeaderSimpleDesktopCompact/HeaderSimpleDesktopCompact.jsx +96 -0
  163. package/src/components/Headers/HeaderSimple/HeaderSimpleDesktopCompact/HeaderSimpleDesktopCompact.module.scss +137 -0
  164. package/src/components/Headers/HeaderSimple/HeaderSimpleDesktopCompact/SearchTrigger.jsx +17 -0
  165. package/src/components/Headers/HeaderSimple/HeaderSimpleMobile/HeaderSimpleMobile.jsx +89 -0
  166. package/src/components/Headers/HeaderSimple/HeaderSimpleMobile/HeaderSimpleMobile.module.scss +76 -0
  167. package/src/components/Headers/HeaderSimple/HeaderSimpleSwitch/HeaderSimpleSwitch.jsx +47 -0
  168. package/src/components/Headers/HeaderSimple/HeaderSimpleSwitch/HeaderSwitch.jsx +32 -0
  169. package/src/components/Headers/HeaderSimple/HeaderSimpleSwitch/HeaderSwitch.module.scss +46 -0
  170. package/src/components/Headers/HeaderSimple/LiveBanner/LiveBanner.jsx +79 -0
  171. package/src/components/Headers/HeaderSimple/LiveBanner/LiveBanner.module.scss +102 -0
  172. package/src/components/Headers/HeaderSimple/MenuDrawer/MenuDrawer.jsx +217 -0
  173. package/src/components/Headers/HeaderSimple/MenuDrawer/MenuDrawer.module.scss +243 -0
  174. package/src/components/Headers/HeaderSimple/_headerUtils.js +48 -0
  175. package/src/components/Headers/HeaderSimple/_logos/mendoza-claro.svg +43 -0
  176. package/src/components/Headers/HeaderSimple/_logos/mendoza-oscuro.svg +43 -0
  177. package/src/components/Hero/Hero.module.scss +131 -0
  178. package/src/components/Hero/HeroView.jsx +48 -0
  179. package/src/components/Recommended/Recommended.module.scss +119 -0
  180. package/src/components/Recommended/RecommendedView.jsx +23 -0
  181. package/src/components/ShareBlock/ShareBlock.jsx +75 -0
  182. package/src/components/ShareBlock/ShareBlock.module.scss +60 -0
  183. package/src/components/ShareBlock/variants/V1/V1.jsx +27 -0
  184. package/src/components/ShareBlock/variants/V1/V1.module.scss +2 -0
  185. package/src/components/ShareBlock/variants/V2/V2.jsx +27 -0
  186. package/src/components/ShareBlock/variants/V2/V2.module.scss +3 -0
  187. package/src/components/SpeechButton/SpeechButton.jsx +60 -0
  188. package/src/components/SpeechButton/SpeechButton.module.scss +49 -0
  189. package/src/components/SpeechPlayerBar/SpeechPlayerBar.jsx +92 -0
  190. package/src/components/SpeechPlayerBar/SpeechPlayerBar.module.scss +180 -0
  191. package/src/components/SpeechProviderWrapper/SpeechProviderWrapper.jsx +13 -0
  192. package/src/components/TextWrap/TextWrap.module.scss +72 -0
  193. package/src/components/TextWrap/TextWrapView.jsx +23 -0
  194. package/src/components/UI/AspectImage/AspectImage.jsx +53 -0
  195. package/src/components/UI/FocalImage/FocalImage.jsx +36 -0
  196. package/src/components/UI/Icon/Icon.jsx +40 -0
  197. package/src/components/UI/Icon/Icon.module.scss +82 -0
  198. package/src/components/UI/IconSmall/IconSmall.jsx +40 -0
  199. package/src/components/UI/IconSmall/IconSmall.module.scss +82 -0
  200. package/src/components/UI/PageWrapper/PageWrapper.jsx +9 -0
  201. package/src/components/UI/PageWrapper/PageWrapper.module.scss +5 -0
  202. package/src/components/UI/ToolTip/ToolTip.jsx +49 -0
  203. package/src/components/UI/ToolTip/ToolTip.module.scss +26 -0
  204. package/src/components/UI/index.js +6 -0
  205. package/src/constants/imageSizes.js +10 -0
  206. package/src/context/SiteConfigContext.jsx +79 -0
  207. package/src/context/SpeechContext.jsx +138 -0
  208. package/src/data/ArticlePoolContext.jsx +83 -0
  209. package/src/data/index.js +7 -0
  210. package/src/data/useArticles.js +67 -0
  211. package/src/index.js +101 -0
  212. package/src/styles/index.scss +3 -0
  213. package/src/styles/mixins/_helpers.scss +6 -0
  214. package/src/styles/mixins/_media.scss +30 -0
  215. package/src/styles/variables/_breakpoint.scss +4 -0
  216. package/src/styles/variables/_colors.scss +4 -0
  217. package/src/styles/variables/_spacing.scss +0 -0
  218. package/src/utils/colorContrast.js +64 -0
  219. package/src/utils/fechaHora.js +26 -0
@@ -0,0 +1,403 @@
1
+ @use "../../../styles/index" as *;
2
+
3
+ .card {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: 12px;
7
+ position: relative;
8
+ padding: 10px 0;
9
+ }
10
+
11
+ .imgLink {
12
+ display: block;
13
+ text-decoration: none;
14
+ }
15
+
16
+ .imgLinkFill {
17
+ position: relative;
18
+ aspect-ratio: 16 / 9;
19
+ }
20
+
21
+ .imgWrap {
22
+ position: relative;
23
+ width: 100%;
24
+ aspect-ratio: 16 / 9;
25
+ overflow: hidden;
26
+ border-radius: 2px;
27
+
28
+ img {
29
+ object-fit: cover;
30
+ transition: transform 0.3s ease;
31
+ }
32
+
33
+ &:hover img {
34
+ transform: scale(1.03);
35
+ }
36
+ }
37
+
38
+ .body {
39
+ display: flex;
40
+ flex-direction: column;
41
+ gap: 12px;
42
+ flex: 1;
43
+ }
44
+
45
+ .header {
46
+ display: block;
47
+ font-weight: 500;
48
+ line-height: 150%;
49
+ letter-spacing: -2%;
50
+ }
51
+
52
+ .volanta {
53
+ display: inline;
54
+ color: var(--primary-color, #af0437);
55
+ line-height: 1.2;
56
+ margin-right: 4px;
57
+ font-family: var(--font-titulo, "Frank Ruhl Libre", serif);
58
+ font-weight: 700;
59
+ font-size: 20px;
60
+ }
61
+
62
+ .titulo {
63
+ display: inline;
64
+ font-family: var(--font-titulo, "Frank Ruhl Libre", serif);
65
+ font-weight: 500;
66
+ font-size: 20px;
67
+ line-height: 150%;
68
+ letter-spacing: -0.02em;
69
+ color: var(--text-color, #252523);
70
+ text-decoration: none;
71
+
72
+ &:hover {
73
+ text-decoration: underline;
74
+ }
75
+ }
76
+
77
+ .autor {
78
+ font-size: 12px;
79
+ color: var(--text-color, #252523);
80
+ font-weight: 300;
81
+ padding-top: 10px;
82
+ font-family: var(--font-inter, Inter, sans-serif);
83
+
84
+ }
85
+
86
+ .copete {
87
+ font-size: 0.78rem;
88
+ font-family: "Inter", "Helvetica", Arial, sans-serif;
89
+ color: var(--text-color, #252523);
90
+ opacity: 0.7;
91
+ line-height: 1.4;
92
+ margin: 0;
93
+ }
94
+
95
+ .rank {
96
+ font-size: 1.1rem;
97
+ font-weight: 700;
98
+ color: var(--primary-color, #af0437);
99
+ margin-top: 8px;
100
+ }
101
+
102
+ // ── Ranked: mobile = fila horizontal / tablet+ = columna con card ─────────────
103
+ .ranked {
104
+ flex-direction: row;
105
+ align-items: flex-start;
106
+ border-bottom: 1px solid #e2e2e2;
107
+
108
+ width: 100%;
109
+
110
+ padding: 0px;
111
+
112
+ .header {
113
+ letter-spacing: 0;
114
+
115
+ line-height: 0;
116
+ }
117
+
118
+ .imgLink {
119
+ flex: 1;
120
+ min-width: 0;
121
+ }
122
+
123
+ .body {
124
+ flex: 1;
125
+ gap: 4px;
126
+ min-width: 0;
127
+ padding-top: 15px;
128
+ padding-bottom: 15px;
129
+ }
130
+
131
+ .rank {
132
+ order: -1;
133
+ margin-top: 0;
134
+ }
135
+
136
+ .volanta {
137
+ font-size: 14px;
138
+ }
139
+
140
+ .titulo {
141
+ font-size: .875em;
142
+ font-weight: 700;
143
+ line-height: 1.3em;
144
+ letter-spacing: 0;
145
+ display: inline;
146
+
147
+ }
148
+
149
+
150
+ @include respond(tablet) {
151
+ flex-direction: column;
152
+ align-items: stretch;
153
+ gap: 0;
154
+ border: 1px solid rgba(0, 0, 0, 0.1);
155
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08);
156
+ min-height: 288px;
157
+ border-bottom: 0px solid #e2e2e2;
158
+
159
+
160
+ .imgLink {
161
+ flex: unset;
162
+ min-width: unset;
163
+ }
164
+
165
+ .body {
166
+ min-width: unset;
167
+ padding: 15px;
168
+ }
169
+
170
+ .rank {
171
+ font-size: 1rem;
172
+ position: absolute;
173
+ bottom: .9375rem;
174
+ left: .625rem;
175
+ font-size: 1.25em;
176
+ font-weight: 700;
177
+ line-height: 1;
178
+ margin-top: 0;
179
+ order: 0;
180
+ font-family: var(--font-inter, Inter, sans-serif);
181
+ }
182
+ }
183
+ }
184
+
185
+ // ── Variantes ranking 2–5 (solo visibles en Tablet/Desktop) ──────────────────
186
+
187
+ .ranking2 {
188
+ @include respond(tablet) {
189
+ border: none;
190
+ box-shadow: none;
191
+ background: rgba(59, 9, 9, 0.863);
192
+ }
193
+ }
194
+
195
+ .ranking3 {
196
+ @include respond(tablet) {
197
+ background: var(--secondary-color, #252523);
198
+ border-color: transparent;
199
+ box-shadow: none;
200
+
201
+ .volanta {
202
+ color: rgba(255, 255, 255, 0.65);
203
+ }
204
+
205
+ .titulo {
206
+ color: #fff;
207
+
208
+ &:hover {
209
+ color: #fff;
210
+ }
211
+ }
212
+
213
+ .rank {
214
+ color: rgba(255, 255, 255, 0.5);
215
+ }
216
+ }
217
+ }
218
+
219
+ .ranking4 {
220
+ @include respond(tablet) {
221
+ border: none;
222
+ border-left: 3px solid var(--primary-color, #af0437);
223
+ box-shadow: none;
224
+
225
+ .rank {
226
+ font-size: 1.4rem;
227
+ font-weight: 800;
228
+ }
229
+ }
230
+ }
231
+
232
+ .ranking5 {
233
+ @include respond(tablet) {
234
+ .rank {
235
+ font-size: 2rem;
236
+ font-weight: 800;
237
+ line-height: 1;
238
+ }
239
+ }
240
+ }
241
+
242
+ // ── Featured ──────────────────────────────────────────────────────────────────
243
+ .featured {
244
+ width: 100%;
245
+ display: flex;
246
+ flex-direction: column;
247
+
248
+ .copete {
249
+ display: block;
250
+ font-size: 0.9rem;
251
+ opacity: 0.75;
252
+ font-family: "Inter", "Helvetica", Arial, sans-serif;
253
+ line-height: 1.5;
254
+ margin: 0;
255
+ color: var(--text-color, #252523);
256
+ }
257
+
258
+ @include respond(tablet) {
259
+ height: 100%;
260
+
261
+ .titulo {
262
+ font-size: 26px;
263
+ }
264
+
265
+ .volanta {
266
+ font-size: 26px;
267
+ }
268
+
269
+ .imgLinkFill {
270
+ aspect-ratio: unset;
271
+ flex: 1;
272
+ min-height: 0;
273
+ }
274
+
275
+ .body {
276
+ flex: none;
277
+ }
278
+ }
279
+ }
280
+
281
+ .featuredLarge {
282
+ @include respond(tablet) {
283
+ .titulo {
284
+ font-weight: 700;
285
+ font-size: 2.125em;
286
+ }
287
+
288
+ .volanta {
289
+ font-weight: 700;
290
+ font-size: 2.125em;
291
+ }
292
+ }
293
+ }
294
+
295
+ // ── Compact ───────────────────────────────────────────────────────────────────
296
+ .compact {
297
+ display: flex;
298
+ flex-direction: column;
299
+
300
+ .body {
301
+ flex: none;
302
+ gap: 5px;
303
+ }
304
+
305
+ @include respond(tablet) {
306
+ height: 100%;
307
+
308
+ .imgLinkFill {
309
+ aspect-ratio: unset;
310
+ flex: 1;
311
+ min-height: 0;
312
+ }
313
+
314
+ .imgWrap {
315
+ flex: 1;
316
+ min-height: 0;
317
+ aspect-ratio: unset;
318
+ }
319
+ }
320
+ }
321
+
322
+
323
+ .mediumContainer {
324
+ width: 100%;
325
+ height: 300px;
326
+ padding: 0;
327
+ }
328
+
329
+ // ── FeaturedDuo (ambas cards en tipo duo — imagen 16:9 fija) ─────────────────
330
+ .featuredDuo {
331
+ .imgLink {
332
+ display: block;
333
+
334
+ // imagen fija 16:9 — misma altura en ambas cards
335
+ img,
336
+ >* {
337
+ aspect-ratio: 16 / 9;
338
+ }
339
+ }
340
+
341
+ .titulo {
342
+ font-size: 24px;
343
+ }
344
+
345
+ .volanta {
346
+ font-size: 20px;
347
+ }
348
+
349
+ .copete {
350
+ font-family: "Inter", "Helvetica", Arial, sans-serif;
351
+ display: block;
352
+ opacity: 1;
353
+ margin: 0;
354
+ color: var(--text-color, #252523);
355
+ font-size: .875em;
356
+ line-height: 1.25rem;
357
+
358
+ }
359
+ }
360
+
361
+ // ── FeaturedHorizontal (primer card en unaDetallada) ──────────────────────────
362
+ .featuredHorizontal {
363
+ .titulo {
364
+ display: block;
365
+ font-size: 26px;
366
+ }
367
+
368
+ .volanta {
369
+ display: block;
370
+ font-size: 20px;
371
+ margin-right: 0;
372
+ margin-bottom: 2px;
373
+ }
374
+
375
+ .copete {
376
+ display: block;
377
+ font-size: 0.9rem;
378
+ opacity: 0.75;
379
+ line-height: 1.5;
380
+ margin: 0;
381
+ }
382
+
383
+ @include respond(tablet) {
384
+ flex-direction: row;
385
+ align-items: flex-start;
386
+ gap: 20px;
387
+ padding: 0;
388
+
389
+ .imgLinkHoriz {
390
+ flex: 0 0 45%;
391
+ min-width: 0;
392
+ display: block;
393
+ text-decoration: none;
394
+ }
395
+
396
+ .body {
397
+ flex: 1;
398
+ min-width: 0;
399
+ padding: 6px 0;
400
+ gap: 10px;
401
+ }
402
+ }
403
+ }
@@ -0,0 +1,25 @@
1
+ import Amp from './variants/Amp/Amp'
2
+ import Default from './variants/Default/Default'
3
+ import Featured from './variants/Featured/Featured'
4
+ import FeaturedDuo from './variants/FeaturedDuo/FeaturedDuo'
5
+ import FeaturedHorizontal from './variants/FeaturedHorizontal/FeaturedHorizontal'
6
+ import Compact from './variants/Compact/Compact'
7
+ import Ranked from './variants/Ranked/Ranked'
8
+ import Medium from './variants/Medium/Medium'
9
+ import CarruselCard from './variants/Carrusel/Carrusel'
10
+
11
+ const RANKING_TYPES = ['ranking', 'ranking2', 'ranking3', 'ranking4', 'ranking5']
12
+ const FEATURED_TYPES = ['categoria', 'categoriaDos']
13
+
14
+ export default function CardCabezal({ article, rank, tipo = 'default', index = 0, isAmp = false }) {
15
+ if (isAmp) return <Amp article={article} rank={rank} />
16
+ if (tipo === 'unaDetallada' && index === 0) return <FeaturedHorizontal article={article} />
17
+ if (tipo === 'unaDetallada' && index > 0) return <Default article={article} />
18
+ if (tipo === 'duo') return <FeaturedDuo article={article} />
19
+ if (FEATURED_TYPES.includes(tipo) && index === 0) return <Featured article={article} large />
20
+ if (FEATURED_TYPES.includes(tipo) && index > 0) return <Compact article={article} />
21
+ if (tipo === 'medium') return <Medium article={article} />
22
+ if (tipo === 'carrusel') return <CarruselCard article={article} />
23
+ if (RANKING_TYPES.includes(tipo)) return <Ranked article={article} rank={rank} rankVariant={tipo} />
24
+ return <Default article={article} />
25
+ }
@@ -0,0 +1,20 @@
1
+ export default function Amp({ article, rank }) {
2
+ const { titulo, volanta, copete, imagen, slug } = article
3
+ const href = slug ? `/${slug}` : '#'
4
+
5
+ return (
6
+ <article className="card-cabezal">
7
+ {imagen?.url && (
8
+ <a href={href} className="card-cabezal__img-link">
9
+ <img src={imagen.url} alt={imagen.alt ?? titulo ?? ''} className="card-cabezal__img" />
10
+ </a>
11
+ )}
12
+ <div className="card-cabezal__body">
13
+ {volanta && <span className="card-cabezal__volanta">{volanta}.</span>}
14
+ {titulo && <a href={href} className="card-cabezal__titulo">{titulo}</a>}
15
+ {copete && <p className="card-cabezal__copete">{copete}</p>}
16
+ </div>
17
+ {rank != null && <span className="card-cabezal__rank">{rank}</span>}
18
+ </article>
19
+ )
20
+ }
@@ -0,0 +1,39 @@
1
+ import { useAdapters } from '../../../../../adapters/AdaptersContext.jsx'
2
+ import styles from './Carrusel.module.scss'
3
+ import Tooltip from '../../../../UI/ToolTip/ToolTip.jsx'
4
+
5
+ export default function CarruselCard({ article }) {
6
+
7
+ const { Link } = useAdapters()
8
+ const { titulo, imagen, slug, autor } = article
9
+ const href = slug ? `/${slug}` : '#'
10
+
11
+ return (
12
+ <Tooltip text={titulo}>
13
+ <article className={styles.card}>
14
+ {imagen?.url && (
15
+ <Link href={href} className={styles.imgLink}>
16
+ <img
17
+ src={imagen.url}
18
+ alt={imagen.alt ?? titulo ?? ''}
19
+ className={styles.img}
20
+ />
21
+ </Link>
22
+ )}
23
+ <div className={styles.body}>
24
+ {titulo && <Link href={href} className={styles.titulo}>{titulo}</Link>}
25
+ {autor?.nombre && <span className={styles.autor}>Por {autor.nombre}</span>}
26
+ </div>
27
+ {autor?.avatar && (
28
+ <div className={styles.authorAvatarWrap}>
29
+ <img
30
+ src={autor.avatar}
31
+ alt={autor.nombre ?? ''}
32
+ className={styles.authorAvatar}
33
+ />
34
+ </div>
35
+ )}
36
+ </article>
37
+ </Tooltip>
38
+ )
39
+ }
@@ -0,0 +1,87 @@
1
+ @use "../../../../../styles/index" as *;
2
+
3
+ .card {
4
+ background: var(--secondary-color, #252523);
5
+ color: #fff;
6
+ display: flex;
7
+ flex-direction: column;
8
+ width: 100%;
9
+ height: 344px;
10
+ overflow: hidden;
11
+ border-radius: 2px;
12
+ position: relative;
13
+ }
14
+
15
+ .authorAvatarWrap {
16
+ position: absolute;
17
+
18
+ top: 50%;
19
+ left: 50%;
20
+ transform: translate(-50%, -50%);
21
+ width: 100px;
22
+ height: 100px;
23
+ pointer-events: none;
24
+ z-index: 1;
25
+ }
26
+
27
+ .authorAvatar {
28
+ width: 100px;
29
+ height: 100px;
30
+ object-fit: cover;
31
+ display: block;
32
+ border: 0px;
33
+ border-radius: 3px;
34
+ }
35
+
36
+ .imgLink {
37
+ display: block;
38
+ text-decoration: none;
39
+ flex-shrink: 0;
40
+ overflow: hidden;
41
+ }
42
+
43
+ .img {
44
+ width: 100%;
45
+ height: 190px;
46
+ object-fit: cover;
47
+ display: block;
48
+ }
49
+
50
+ .body {
51
+ padding: 20px 20px 15px;
52
+ padding-top: 15%;
53
+ display: flex;
54
+ flex-direction: column;
55
+ gap: 8px;
56
+ flex: 1;
57
+ }
58
+
59
+ .titulo {
60
+ display: block;
61
+ color: #fff;
62
+ font-family: var(--font-titulo, "Frank Ruhl Libre", serif);
63
+ font-weight: 700;
64
+ text-decoration: none;
65
+ color: #fff;
66
+ font-size: 1rem;
67
+ line-height: 1.2rem;
68
+ text-align: left;
69
+ width: 100%;
70
+
71
+ &:hover {
72
+ text-decoration: underline;
73
+ }
74
+ }
75
+
76
+ .autor {
77
+
78
+ font-family: var(--font-inter), Inter, sans-serif;
79
+
80
+ color: #fff;
81
+ font-size: 12px;
82
+ font-weight: 900;
83
+ margin-right: auto;
84
+ margin-top: auto;
85
+ padding: .625rem 0;
86
+
87
+ }
@@ -0,0 +1,36 @@
1
+ import styles from '../../CardCabezal.module.scss'
2
+ import { useAdapters } from '../../../../../adapters/AdaptersContext.jsx'
3
+ import AspectImage from '../../../../UI/AspectImage/AspectImage.jsx'
4
+ import Tooltip from '../../../../UI/ToolTip/ToolTip.jsx'
5
+
6
+ export default function Compact({ article }) {
7
+
8
+ const { Link } = useAdapters()
9
+ const { titulo, volanta, imagen, slug, autor, focalPoint } = article
10
+ const href = slug ? `/${slug}` : '#'
11
+
12
+ return (
13
+ <Tooltip text={titulo}>
14
+ <article className={`${styles.card} ${styles.compact}`}>
15
+ {imagen?.url && (
16
+ <Link href={href} className={`${styles.imgLink} ${styles.imgLinkFill}`}>
17
+ <AspectImage
18
+ src={imagen.url}
19
+ alt={imagen.alt ?? titulo ?? ''}
20
+ aspect="16:9"
21
+ fill
22
+ focalPoint={focalPoint}
23
+ />
24
+ </Link>
25
+ )}
26
+ <div className={styles.body}>
27
+ <div className={styles.header}>
28
+ {volanta && <span className={styles.volanta}>{volanta}.</span>}
29
+ {titulo && <Link href={href} className={styles.titulo}>{titulo}</Link>}
30
+ </div>
31
+ {autor?.nombre && <span className={styles.autor}>Por {autor.nombre}</span>}
32
+ </div>
33
+ </article>
34
+ </Tooltip>
35
+ )
36
+ }
@@ -0,0 +1,35 @@
1
+ import styles from '../../CardCabezal.module.scss'
2
+ import { useAdapters } from '../../../../../adapters/AdaptersContext.jsx'
3
+ import AspectImage from '../../../../UI/AspectImage/AspectImage.jsx'
4
+ import Tooltip from '../../../../UI/ToolTip/ToolTip.jsx'
5
+
6
+ export default function Default({ article }) {
7
+
8
+ const { Link } = useAdapters()
9
+ const { titulo, volanta, imagen, slug, autor, focalPoint } = article
10
+ const href = slug ? `/${slug}` : '#'
11
+
12
+ return (
13
+ <Tooltip text={titulo}>
14
+ <article className={styles.card}>
15
+ {imagen?.url && (
16
+ <Link href={href} className={styles.imgLink}>
17
+ <AspectImage
18
+ src={imagen.url}
19
+ alt={imagen.alt ?? titulo ?? ''}
20
+ aspect="16:9"
21
+ focalPoint={focalPoint}
22
+ />
23
+ </Link>
24
+ )}
25
+ <div className={styles.body}>
26
+ <div className={styles.header}>
27
+ {volanta && <span className={styles.volanta}>{volanta}.</span>}
28
+ {titulo && <Link href={href} className={styles.titulo}>{titulo}</Link>}
29
+ </div>
30
+ {autor?.nombre && <span className={styles.autor}>Por {autor.nombre}</span>}
31
+ </div>
32
+ </article>
33
+ </Tooltip>
34
+ )
35
+ }
@@ -0,0 +1,36 @@
1
+ import styles from '../../CardCabezal.module.scss'
2
+ import { useAdapters } from '../../../../../adapters/AdaptersContext.jsx'
3
+ import AspectImage from '../../../../UI/AspectImage/AspectImage.jsx'
4
+ import Tooltip from '../../../../UI/ToolTip/ToolTip.jsx'
5
+
6
+ export default function Featured({ article, large }) {
7
+
8
+ const { Link } = useAdapters()
9
+ const { titulo, volanta, copete, imagen, slug, autor, focalPoint } = article
10
+ const href = slug ? `/${slug}` : '#'
11
+
12
+ return (
13
+ <Tooltip text={titulo}>
14
+ <article className={`${styles.card} ${styles.featured} ${large ? styles.featuredLarge : ''}`}>
15
+ {imagen?.url && (
16
+ <Link href={href} className={`${styles.imgLink} ${styles.imgLinkFill}`}>
17
+ <AspectImage
18
+ src={imagen.url}
19
+ alt={imagen.alt ?? titulo ?? ''}
20
+ aspect="16:9"
21
+ fill
22
+ focalPoint={focalPoint}
23
+ />
24
+ </Link>
25
+ )}
26
+ <div className={styles.body}>
27
+ <div className={styles.header}>
28
+ {volanta && <span className={styles.volanta}>{volanta}.</span>}
29
+ {titulo && <Link href={href} className={styles.titulo}>{titulo}</Link>}
30
+ </div>
31
+ {autor?.nombre && <span className={styles.autor}>Por {autor.nombre}</span>}
32
+ </div>
33
+ </article>
34
+ </Tooltip>
35
+ )
36
+ }