utn-cli 2.1.54 → 2.1.55

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 (40) hide show
  1. package/package.json +1 -1
  2. package/templates/backend/package.json +3 -3
  3. package/templates/backend/rutas/DatosMiscelaneos.js +50 -0
  4. package/templates/backend/rutas/misc.js +177 -5
  5. package/templates/backend/rutas/rutas.js +2 -0
  6. package/templates/backend/servicios/Nucleo/DatosMiscelaneos.js +36 -0
  7. package/templates/backend/servicios/Nucleo/Miscelaneas.js +192 -25
  8. package/templates/frontend/Dockerfile +1 -0
  9. package/templates/frontend/src/app/Componentes/Nucleo/boton-ayuda/boton-ayuda.component.css +7 -0
  10. package/templates/frontend/src/app/Componentes/Nucleo/boton-ayuda/boton-ayuda.component.html +28 -0
  11. package/templates/frontend/src/app/Componentes/Nucleo/boton-ayuda/boton-ayuda.component.ts +78 -0
  12. package/templates/frontend/src/app/Componentes/Nucleo/estadisticas-del-modulo/estadisticas-del-modulo.component.html +43 -8
  13. package/templates/frontend/src/app/Componentes/Nucleo/estadisticas-del-modulo/estadisticas-del-modulo.component.ts +5 -4
  14. package/templates/frontend/src/app/Componentes/Nucleo/gestion-actividad/gestion-actividad.component.ts +1 -0
  15. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-confirmacion/mensaje-confirmacion.component.css +4 -2
  16. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-institucional/mensaje-institucional.component.html +3 -3
  17. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-institucional/mensaje-institucional.component.ts +1 -1
  18. package/templates/frontend/src/app/Componentes/Nucleo/subir-archivo/subir-archivo.component.ts +1 -1
  19. package/templates/frontend/src/app/Paginas/Nucleo/accesibilidad/accesibilidad.component.css +25 -0
  20. package/templates/frontend/src/app/Paginas/Nucleo/accesibilidad/accesibilidad.component.html +2 -0
  21. package/templates/frontend/src/app/Paginas/Nucleo/accesibilidad/accesibilidad.component.ts +31 -2
  22. package/templates/frontend/src/app/Paginas/Nucleo/acercade/acercade.component.css +67 -18
  23. package/templates/frontend/src/app/Paginas/Nucleo/acercade/acercade.component.html +56 -46
  24. package/templates/frontend/src/app/Paginas/Nucleo/acercade/acercade.component.ts +21 -1
  25. package/templates/frontend/src/app/Paginas/Nucleo/conozcanos/conozcanos.component.css +190 -375
  26. package/templates/frontend/src/app/Paginas/Nucleo/conozcanos/conozcanos.component.html +92 -91
  27. package/templates/frontend/src/app/Paginas/Nucleo/conozcanos/conozcanos.component.ts +19 -2
  28. package/templates/frontend/src/app/Paginas/Nucleo/contenedor-componentes/contenedor-componentes.component.ts +2 -2
  29. package/templates/frontend/src/app/Paginas/Nucleo/declaracion-ia/declaracion-ia.component.css +25 -0
  30. package/templates/frontend/src/app/Paginas/Nucleo/declaracion-ia/declaracion-ia.component.html +2 -0
  31. package/templates/frontend/src/app/Paginas/Nucleo/declaracion-ia/declaracion-ia.component.ts +33 -3
  32. package/templates/frontend/src/app/Paginas/Nucleo/politicas/politicas.component.css +69 -15
  33. package/templates/frontend/src/app/Paginas/Nucleo/politicas/politicas.component.html +129 -107
  34. package/templates/frontend/src/app/Paginas/Nucleo/politicas/politicas.component.ts +51 -9
  35. package/templates/frontend/src/app/Paginas/Nucleo/preguntasFrecuentes/preguntasFrecuentes.component.css +68 -15
  36. package/templates/frontend/src/app/Paginas/Nucleo/preguntasFrecuentes/preguntasFrecuentes.component.html +161 -88
  37. package/templates/frontend/src/app/Paginas/Nucleo/preguntasFrecuentes/preguntasFrecuentes.component.ts +63 -10
  38. package/templates/frontend/src/app/Paginas/Nucleo/sabiasque/sabiasque.component.css +100 -24
  39. package/templates/frontend/src/app/Paginas/Nucleo/sabiasque/sabiasque.component.html +269 -339
  40. package/templates/frontend/src/app/Paginas/Nucleo/sabiasque/sabiasque.component.ts +94 -6
@@ -1,97 +1,170 @@
1
- <div class="subtitle">
2
- <p>Preguntas frecuentes</p>
3
- </div>
4
- <div class="politicas-container">
5
-
6
- <!-- Árbol-->
7
- <div class="tree-container">
1
+ <div class="ia-layout">
2
+ <main class="ia-main">
8
3
 
9
- <!-- Item 1 -->
10
- <div class="tree-item" [class.expanded-item]="expandedItems['item1']">
11
- <div class="tree-header" (click)="toggleItem('item1')">
12
- <span class="tree-icon">{{ expandedItems['item1'] ? '▼' : '▶' }}</span>
13
- <span class="tree-title">1. ¿Cómo recuperar la clave acceso en SIGU?</span>
4
+ <header class="ia-encabezado">
5
+ <mat-icon class="ia-icono-header">help_outline</mat-icon>
6
+ <div>
7
+ <h1>Preguntas frecuentes</h1>
14
8
  </div>
15
- <div class="tree-content" [class.expanded]="expandedItems['item1']">
16
- <p><strong>Para restablecer la contraseña de acceso, siga el siguiente procedimiento:</strong></p>
9
+ </header>
17
10
 
18
- <p>1.1 Ingrese al portal de inicio de sesión de SIGU y digite su número de identificación. </p>
11
+ <section class="ia-seccion">
12
+ <div class="tree-container">
19
13
 
20
- <p>1.2 Seleccione la opción <strong>¿Olvidó su clave de acceso?</strong>.</p>
14
+ <div
15
+ *ngFor="let pregunta of preguntas"
16
+ class="tree-item"
17
+ [class.expanded-item]="expandedItems[pregunta.id]"
18
+ >
19
+
20
+ <div class="tree-header" (click)="toggleItem(pregunta.id)">
21
+ <span class="tree-icon">
22
+ {{ expandedItems[pregunta.id] ? '▼' : '▶' }}
23
+ </span>
24
+ <span class="tree-title">
25
+ {{ pregunta.titulo }}
26
+ </span>
27
+ </div>
28
+
29
+ <div class="tree-content" [class.expanded]="expandedItems[pregunta.id]">
30
+
31
+ <ng-container [ngSwitch]="pregunta.id">
32
+
33
+ <!-- ITEM 1 -->
34
+ <ng-container *ngSwitchCase="'item1'">
35
+
36
+ <p><strong>Para restablecer la contraseña de acceso, siga el siguiente procedimiento:</strong></p>
37
+
38
+ <p>1.1 Ingrese al portal de inicio de sesión de SIGU y digite su número de identificación.</p>
39
+
40
+ <p>1.2 Seleccione la opción <strong>¿Olvidó su clave de acceso?</strong>.</p>
41
+
42
+ <div class="conozcanos-image">
43
+ <img src="preguntasF-1.png" alt="Equipo SIGU">
44
+ </div>
45
+
46
+ <p>
47
+ El sistema mostrará un mensaje de confirmación indicando:
48
+ <strong>
49
+ Por favor revise su correo electrónico, se han enviado las instrucciones para continuar con el cambio de clave
50
+ </strong>.
51
+ Haga clic en <strong>continuar</strong>.
52
+ </p>
53
+
54
+ <p>
55
+ 1.4 Acceda a la bandeja de entrada del correo electrónico registrado en su cuenta.
56
+ Allí encontrará un mensaje automático con una clave nueva.
57
+ </p>
58
+
59
+ <p>
60
+ 1.5 Regrese a la página de inicio de sesión de SIGU e ingrese su número de identificación
61
+ junto con la clave nueva proporcionada.
62
+ </p>
63
+
64
+ <p>
65
+ 1.6 El sistema solicitará una verificación de identidad. Se enviará un código de verificación
66
+ a su correo electrónico registrado.
67
+ </p>
68
+
69
+ <p>
70
+ 1.7 Copie el código recibido, péguelo en el campo indicado y haga clic en
71
+ <strong>siguiente</strong>.
72
+ </p>
73
+
74
+ <div class="conozcanos-image">
75
+ <img src="preguntasF-2.png" alt="Equipo SIGU">
76
+ </div>
77
+
78
+ <p>
79
+ 1.8 Una vez validado el código, recibirá el mensaje
80
+ <strong>verificación exitosa</strong> y será redirigido automáticamente
81
+ al panel principal de su cuenta.
82
+ </p>
83
+
84
+ <p>
85
+ <strong>Nota:</strong>
86
+ Se recomienda cambiar la contraseña temporal por una nueva una vez dentro del sistema.
87
+ </p>
88
+
89
+ </ng-container>
90
+
91
+ <!-- ITEM 2 -->
92
+ <ng-container *ngSwitchCase="'item2'">
93
+
94
+ <p><strong>Para cambiar su clave, realice los siguientes pasos:</strong></p>
95
+
96
+ <p>2.1 Inicie sesión en SIGU con sus credenciales actuales.</p>
97
+
98
+ <p>
99
+ 2.2 En el panel principal, diríjase al menú superior y ubique el ícono de usuario
100
+ (representado por silueta de persona) en el extremo derecho.
101
+ </p>
102
+
103
+ <div class="preguntados-image">
104
+ <img src="preguntasF-3.png" alt="Equipo SIGU">
105
+ </div>
106
+
107
+ <p>
108
+ 2.3 Haga clic en el ícono y seleccione su cuenta
109
+ (el nombre de usuario asociado).
110
+ </p>
111
+
112
+ <p>
113
+ 2.4 Se abrirá una nueva ventana. Dentro de este, seleccione la pestaña o tarjeta denominada
114
+ <strong>cambio de contraseña</strong>.
115
+ </p>
116
+
117
+ <p>
118
+ 2.5 El sistema mostrará un panel con las instrucciones técnicas.
119
+ Ingrese la nueva contraseña en el campo correspondiente respetando los requisitos
120
+ de seguridad (longitud, caracteres especiales, etc.).
121
+ </p>
122
+
123
+ <div class="conozcanos-image">
124
+ <img src="preguntasF-4.png" alt="Equipo SIGU">
125
+ </div>
126
+
127
+ <p>
128
+ 2.6 Confirme la nueva contraseña y haga clic en <strong>cambiar</strong>.
129
+ </p>
130
+
131
+ <p>
132
+ <strong>
133
+ La contraseña quedará actualizada de forma inmediata para futuros inicios de sesión.
134
+ </strong>
135
+ </p>
136
+
137
+ </ng-container>
138
+
139
+ <!-- ITEM 3 -->
140
+ <ng-container *ngSwitchCase="'item3'">
141
+
142
+ <p>
143
+ 3.1 Para acceder mediante <strong>login con google</strong>,
144
+ el usuario debe tener una cuenta registrada previamente como oferente
145
+ o personal administrativo bajo el dominio <strong>@utn.ac.cr</strong>.
146
+ Al seleccionar la cuenta institucional asociada,
147
+ el sistema lo redirigirá automáticamente al panel de su perfil.
148
+ </p>
149
+
150
+ <div class="conozcanos-image">
151
+ <img src="preguntasF-5.png" alt="Equipo SIGU">
152
+ </div>
153
+
154
+ </ng-container>
155
+
156
+ </ng-container>
157
+
158
+ </div>
159
+
160
+ <div class="line"></div>
21
161
 
22
- <div class="conozcanos-image">
23
- <img src="preguntasF-1.png" alt="Equipo SIGU">
24
- </div>
25
- <p>El sistema mostrará un mensaje de confirmación indicando: <strong>Por favor revise su correo electrónico, se
26
- han enviado las instrucciones para continuar con el cambio de clave</strong>”. Haga clic en
27
- <strong>continuar</strong>.
28
- </p>
29
- <p>1.4 Acceda a la bandeja de entrada del correo electrónico registrado en su cuenta. Allí encontrará un mensaje
30
- automático con una clave nueva.</p>
31
- <p>1.5 Regrese a la página de inicio de sesión de SIGU e ingrese su número de identificación junto con la clave
32
- nueva proporcionada.</p>
33
- <p>1.6 El sistema solicitará una verificación de identidad. Se enviará un código de verificación a su correo
34
- electrónico registrado.</p>
35
- <p>1.7 Copie el código recibido, péguelo en el campo indicado y haga clic en <strong>siguiente</strong>.</p>
36
- <div class="conozcanos-image">
37
- <img src="preguntasF-2.png" alt="Equipo SIGU">
38
- </div>
39
- <p>1.8 Una vez validado el código, recibirá el mensaje <strong>verificación exitosa</strong> y será redirigido
40
- automáticamente al panel principal de su cuenta.</p>
41
- <p><strong>Nota:</strong> Se recomienda cambiar la contraseña temporal por una nueva una vez dentro del sistema.
42
- </p>
43
- </div>
44
- <div class="line"></div>
45
- </div>
46
-
47
- <!-- Item 2-->
48
- <div class="tree-item" [class.expanded-item]="expandedItems['item2']">
49
- <div class="tree-header" (click)="toggleItem('item2')">
50
- <span class="tree-icon">{{ expandedItems['item2'] ? '▼' : '▶' }}</span>
51
- <span class="tree-title">2. ¿Cómo cambiar mi clave en SIGU?</span>
52
- </div>
53
- <div class="tree-content" [class.expanded]="expandedItems['item2']">
54
- <p><strong>Para cambiar su clave, realice los siguientes pasos:</strong></p>
55
- <P>2.1 Inicie sesión en SIGU con sus credenciales actuales.</P>
56
- <p>2.2 En el panel principal, diríjase al menú superior y ubique el ícono de usuario (representado por silueta
57
- de persona) en el extremo derecho.</p>
58
- <div class="preguntados-image">
59
- <img src="preguntasF-3.png" alt="Equipo SIGU">
60
- </div>
61
- <p>2.3 Haga clic en el ícono y seleccione su cuenta (el nombre de usuario asociado).</p>
62
- <p>2.4 Se abrirá una nueva ventana. Dentro de este, seleccione la pestaña o tarjeta denominada <strong>cambio
63
- de contraseña</strong>.</p>
64
- <p>2.5 El sistema mostrará un panel con las instrucciones técnicas. Ingrese la nueva contraseña en el campo
65
- correspondiente respetando los requisitos de seguridad (longitud, caracteres especiales, etc.).</p>
66
- <div class="conozcanos-image">
67
- <img src="preguntasF-4.png" alt="Equipo SIGU">
68
- </div>
69
- <p>2.6 Confirme la nueva contraseña y haga clic en <strong>cambiar</strong>.</p>
70
- <p><strong>La contraseña quedará actualizada de forma inmediata para futuros inicios de sesión.</strong></p>
71
- </div>
72
- <div class="line"></div>
73
- </div>
74
-
75
- <!-- Item 3-->
76
- <div class="tree-item" [class.expanded-item]="expandedItems['item3']">
77
- <div class="tree-header" (click)="toggleItem('item3')">
78
- <span class="tree-icon">{{ expandedItems['item3'] ? '▼' : '▶' }}</span>
79
- <span class="tree-title">3. ¿Cómo inicio sesión con google en SIGU?</span>
80
- </div>
81
- <div class="tree-content" [class.expanded]="expandedItems['item3']">
82
- <p>3.1 Para acceder mediante <strong>login con google</strong>, el usuario debe tener una cuenta registrada
83
- previamente como
84
- oferente o personal administrativo bajo el dominio <strong>@utn.ac.cr</strong>. Al seleccionar la cuenta
85
- institucional
86
- asociada, el sistema lo redirigirá automáticamente al panel de su perfil.</p>
87
-
88
- <div class="conozcanos-image">
89
- <img src="preguntasF-5.png" alt="Equipo SIGU">
90
162
  </div>
163
+
91
164
  </div>
92
- <div class="line"></div>
93
- </div>
165
+ </section>
94
166
 
95
- </div>
167
+ <button *ngIf="mostrarBotonInicio" class="btn-volver-arriba" (click)="irAlInicio()" title="Volver arriba">↑ Volver arriba</button>
96
168
 
97
- </div>
169
+ </main>
170
+ </div>
@@ -1,5 +1,6 @@
1
1
  import { Component, OnInit } from '@angular/core';
2
2
  import { MatIconModule } from '@angular/material/icon';
3
+ import { CommonModule } from '@angular/common';
3
4
  import { DatosGlobalesService } from '../../../datos-globales.service';
4
5
  import { HttpClient } from '@angular/common/http';
5
6
  import { takeUntil } from 'rxjs/operators';
@@ -7,17 +8,41 @@ import { Subject } from 'rxjs';
7
8
  @Component({
8
9
  selector: 'app-preguntasfrecuentes',
9
10
  standalone: true,
10
- imports: [MatIconModule],
11
+ imports: [CommonModule, MatIconModule],
11
12
  templateUrl: './preguntasFrecuentes.component.html',
12
13
  styleUrl: './preguntasFrecuentes.component.css'
13
14
  })
14
15
  export class PreguntasFrecuentesComponent implements OnInit {
15
-
16
+
16
17
  private _destroy$ = new Subject<void>();
18
+ mostrarBotonInicio = false;
19
+ private _scrollListener?: EventListener;
20
+
17
21
  constructor(private http: HttpClient, private datosGlobalesService: DatosGlobalesService) { }
18
- ngOnInit(): void {
19
- this.http.get(`${this.datosGlobalesService.ObtenerURL()}misc/VistaDePreguntasFrecuentes`).pipe(takeUntil(this._destroy$)).subscribe({ error: () => { } });
20
- }
22
+ ngOnInit(): void {
23
+ this.http.get(`${this.datosGlobalesService.ObtenerURL()}misc/VistaDePreguntasFrecuentes`).pipe(takeUntil(this._destroy$)).subscribe({ error: () => { } });
24
+
25
+ this.http.get<any>(`${this.datosGlobalesService.ObtenerURL()}misc/obtenerRankingDeItemsPreguntasFrecuentes`).pipe(takeUntil(this._destroy$)).subscribe({
26
+ next: (respuesta) => {
27
+ const ranking = respuesta.body ?? {};
28
+ this.preguntas.sort(
29
+ (a, b) =>
30
+ (ranking[b.id] ?? 0) - (ranking[a.id] ?? 0));
31
+ }
32
+ });
33
+ setTimeout(() => {
34
+ const c = document.querySelector('.zona-scrollable');
35
+ if (c) {
36
+ this._scrollListener = () => { this.mostrarBotonInicio = (c as HTMLElement).scrollTop > 200; };
37
+ c.addEventListener('scroll', this._scrollListener);
38
+ }
39
+ }, 0);
40
+ }
41
+
42
+ ngOnDestroy(): void {
43
+ this._destroy$.next(); this._destroy$.complete();
44
+ if (this._scrollListener) { document.querySelector('.zona-scrollable')?.removeEventListener('scroll', this._scrollListener); }
45
+ }
21
46
  // items expandidos
22
47
  expandedItems: { [key: string]: boolean } = {
23
48
  item1: false,
@@ -27,10 +52,38 @@ export class PreguntasFrecuentesComponent implements OnInit {
27
52
  item5: false,
28
53
  item6: false,
29
54
  };
30
-
55
+
56
+
31
57
  toggleItem(itemId: string) {
32
- this.expandedItems[itemId] = !this.expandedItems[itemId];
58
+ const estabaAbierto = this.expandedItems[itemId];
59
+ this.expandedItems[itemId] = !estabaAbierto;
60
+ if (!estabaAbierto) {
61
+ this.http.post(
62
+ `${this.datosGlobalesService.ObtenerURL()}misc/registrarVistaDeItemsDePreguntaFrecuente`,
63
+ { itemId }
64
+ ).subscribe({
65
+ error: (error) => console.error(error)
66
+ });
67
+ }
68
+ }
69
+
70
+ preguntas = [
71
+ {
72
+ id: 'item1',
73
+ titulo: '¿Cómo recuperar la clave acceso en SIGU?'
74
+ },
75
+ {
76
+ id: 'item2',
77
+ titulo: '¿Cómo cambiar mi clave en SIGU?'
78
+ },
79
+ {
80
+ id: 'item3',
81
+ titulo: '¿Cómo inicio sesión con google en SIGU?'
82
+ }
83
+ ];
84
+ irAlInicio(): void {
85
+ const contenedor = document.querySelector('.zona-scrollable');
86
+ if (contenedor) { contenedor.scrollTo({ top: 0, behavior: 'smooth' }); this.mostrarBotonInicio = false; }
87
+ else { window.scrollTo({ top: 0, behavior: 'smooth' }); }
33
88
  }
34
-
35
-
36
- }
89
+ }
@@ -1,22 +1,61 @@
1
- .politicas-container {
2
- max-width: 1000px;
3
- padding-bottom: 20px;
4
- font-family: 'Roboto', sans-serif;
5
- background-color: white;
6
- text-align: left;
1
+ .ia-layout {
2
+ max-width: 820px;
7
3
  margin: 0 auto;
4
+ padding: 24px 16px;
5
+ font-family: 'Roboto', sans-serif;
6
+ }
7
+
8
+ .ia-main {
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: 28px;
8
12
  }
9
13
 
10
- .subtitle {
11
- background-color: #0b4794;
12
- font-size: 25px;
14
+ .ia-encabezado {
15
+ display: flex;
16
+ align-items: center;
17
+ gap: 14px;
18
+ padding: 20px 24px;
19
+ background: linear-gradient(90deg, rgba(1, 33, 105, 1) 0%, rgba(63, 97, 171, 1) 100%);
13
20
  color: white;
14
- padding: 18px;
15
- margin: 20px 0;
16
- text-align: center;
21
+ border-radius: 12px;
22
+ }
23
+
24
+ .ia-icono-header {
25
+ font-size: 40px !important;
26
+ width: 40px !important;
27
+ height: 40px !important;
28
+ flex-shrink: 0;
29
+ opacity: 0.9;
17
30
  }
18
- .subtitle p {
19
- margin: 5px 0;
31
+
32
+ .ia-encabezado h1 {
33
+ margin: 0;
34
+ font-size: 22px;
35
+ font-weight: 700;
36
+ line-height: 1.2;
37
+ }
38
+
39
+ .ia-seccion {
40
+ background: white;
41
+ border: 1px solid #d0daea;
42
+ border-radius: 10px;
43
+ padding: 20px 24px;
44
+ }
45
+
46
+ @media (max-width: 768px) {
47
+ .ia-seccion {
48
+ border: none;
49
+ border-radius: 0;
50
+ padding: 8px 0;
51
+ background: transparent;
52
+ }
53
+ }
54
+
55
+ .ia-seccion .tree-container {
56
+ padding-left: 0;
57
+ padding-right: 0;
58
+ margin-top: 0;
20
59
  }
21
60
 
22
61
 
@@ -96,6 +135,7 @@
96
135
  color: #4D4D4D;
97
136
  margin-bottom: 20px;
98
137
  font-size: 16px;
138
+ text-align: justify;
99
139
  }
100
140
 
101
141
  .tree-content ul {
@@ -126,11 +166,11 @@
126
166
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
127
167
  }
128
168
  @media (max-width: 768px) {
129
-
169
+
130
170
  .tree-title {
131
171
  font-size: 14px;
132
172
  }
133
-
173
+
134
174
  .tree-content p {
135
175
  font-size: 14px;
136
176
  }
@@ -138,6 +178,19 @@
138
178
  .tree-content li{
139
179
  font-size: 14px;
140
180
  }
181
+
182
+ .sub-tree-item {
183
+ margin: 6px 0;
184
+ }
185
+
186
+ .tree-item {
187
+ padding-left: 4px;
188
+ }
189
+
190
+ .tree-content.expanded {
191
+ padding: 8px 4px;
192
+ }
193
+
141
194
  }
142
195
 
143
196
  /* sub items*/
@@ -193,16 +246,15 @@
193
246
 
194
247
  .imagenes-comparacion {
195
248
  display: flex;
196
- gap: 20px;
197
- justify-content: center;
198
- align-items: flex-start;
199
- flex-wrap: wrap;
249
+ flex-direction: column;
250
+ gap: 16px;
200
251
  margin-bottom: 20px;
201
252
  }
202
253
 
203
254
  .imagen-item {
204
- flex: 1;
205
- min-width: 250px;
255
+ display: flex;
256
+ flex-direction: column;
257
+ align-items: center;
206
258
  text-align: center;
207
259
  }
208
260
 
@@ -211,7 +263,7 @@
211
263
  max-width: 420px;
212
264
  height: auto;
213
265
  border-radius: 8px;
214
- box-shadow: 0 10px 30px rgba(0,0,0,0.1);
266
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
215
267
  }
216
268
 
217
269
  .video-container {
@@ -226,4 +278,28 @@
226
278
  max-width: 700px;
227
279
  border-radius: 8px;
228
280
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
229
- }
281
+ }
282
+
283
+ /* Botón volver arriba */
284
+ .btn-volver-arriba {
285
+ display: none;
286
+ }
287
+
288
+ @media (max-width: 768px) {
289
+ .btn-volver-arriba {
290
+ display: flex;
291
+ align-items: center;
292
+ justify-content: center;
293
+ margin: 2rem auto 1rem;
294
+ padding: 0.6rem 1.4rem;
295
+ background: linear-gradient(90deg, rgba(1, 33, 105, 1) 0%, rgba(63, 97, 171, 1) 100%);
296
+ color: white;
297
+ border: none;
298
+ border-radius: 24px;
299
+ font-family: 'Roboto', sans-serif;
300
+ font-size: 0.9rem;
301
+ font-weight: 500;
302
+ cursor: pointer;
303
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
304
+ }
305
+ }