iatoolkit 0.63.1__py3-none-any.whl → 0.67.0__py3-none-any.whl

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.

Potentially problematic release.


This version of iatoolkit might be problematic. Click here for more details.

Files changed (78) hide show
  1. iatoolkit/__init__.py +2 -0
  2. iatoolkit/base_company.py +1 -20
  3. iatoolkit/common/routes.py +11 -2
  4. iatoolkit/common/session_manager.py +2 -0
  5. iatoolkit/common/util.py +17 -0
  6. iatoolkit/company_registry.py +1 -2
  7. iatoolkit/iatoolkit.py +41 -5
  8. iatoolkit/locales/en.yaml +167 -0
  9. iatoolkit/locales/es.yaml +163 -0
  10. iatoolkit/repositories/database_manager.py +3 -3
  11. iatoolkit/repositories/document_repo.py +1 -1
  12. iatoolkit/repositories/models.py +2 -3
  13. iatoolkit/repositories/profile_repo.py +0 -4
  14. iatoolkit/services/auth_service.py +14 -9
  15. iatoolkit/services/branding_service.py +32 -22
  16. iatoolkit/services/configuration_service.py +140 -0
  17. iatoolkit/services/dispatcher_service.py +20 -18
  18. iatoolkit/services/document_service.py +5 -2
  19. iatoolkit/services/excel_service.py +15 -11
  20. iatoolkit/services/file_processor_service.py +4 -12
  21. iatoolkit/services/history_service.py +8 -7
  22. iatoolkit/services/i18n_service.py +104 -0
  23. iatoolkit/services/jwt_service.py +7 -9
  24. iatoolkit/services/language_service.py +79 -0
  25. iatoolkit/services/load_documents_service.py +4 -4
  26. iatoolkit/services/mail_service.py +9 -4
  27. iatoolkit/services/onboarding_service.py +10 -4
  28. iatoolkit/services/profile_service.py +58 -38
  29. iatoolkit/services/prompt_manager_service.py +20 -16
  30. iatoolkit/services/query_service.py +15 -14
  31. iatoolkit/services/sql_service.py +6 -2
  32. iatoolkit/services/user_feedback_service.py +16 -14
  33. iatoolkit/static/js/chat_feedback_button.js +57 -87
  34. iatoolkit/static/js/chat_help_content.js +124 -0
  35. iatoolkit/static/js/chat_history_button.js +48 -65
  36. iatoolkit/static/js/chat_main.js +27 -24
  37. iatoolkit/static/js/chat_reload_button.js +28 -45
  38. iatoolkit/static/styles/chat_iatoolkit.css +223 -315
  39. iatoolkit/static/styles/chat_modal.css +63 -97
  40. iatoolkit/static/styles/chat_public.css +107 -0
  41. iatoolkit/static/styles/landing_page.css +0 -1
  42. iatoolkit/templates/_company_header.html +6 -2
  43. iatoolkit/templates/_login_widget.html +42 -0
  44. iatoolkit/templates/base.html +34 -19
  45. iatoolkit/templates/change_password.html +22 -20
  46. iatoolkit/templates/chat.html +58 -27
  47. iatoolkit/templates/chat_modals.html +113 -74
  48. iatoolkit/templates/error.html +12 -13
  49. iatoolkit/templates/forgot_password.html +11 -7
  50. iatoolkit/templates/index.html +8 -3
  51. iatoolkit/templates/login_simulation.html +16 -5
  52. iatoolkit/templates/onboarding_shell.html +0 -1
  53. iatoolkit/templates/signup.html +14 -14
  54. iatoolkit/views/base_login_view.py +12 -1
  55. iatoolkit/views/change_password_view.py +49 -33
  56. iatoolkit/views/forgot_password_view.py +20 -19
  57. iatoolkit/views/help_content_api_view.py +54 -0
  58. iatoolkit/views/history_api_view.py +13 -9
  59. iatoolkit/views/home_view.py +30 -38
  60. iatoolkit/views/init_context_api_view.py +16 -11
  61. iatoolkit/views/llmquery_api_view.py +38 -26
  62. iatoolkit/views/login_simulation_view.py +14 -2
  63. iatoolkit/views/login_view.py +47 -35
  64. iatoolkit/views/logout_api_view.py +26 -22
  65. iatoolkit/views/profile_api_view.py +46 -0
  66. iatoolkit/views/prompt_api_view.py +6 -6
  67. iatoolkit/views/signup_view.py +26 -24
  68. iatoolkit/views/user_feedback_api_view.py +19 -18
  69. iatoolkit/views/verify_user_view.py +30 -29
  70. {iatoolkit-0.63.1.dist-info → iatoolkit-0.67.0.dist-info}/METADATA +40 -22
  71. iatoolkit-0.67.0.dist-info/RECORD +120 -0
  72. iatoolkit-0.67.0.dist-info/licenses/LICENSE +21 -0
  73. iatoolkit/static/styles/chat_info.css +0 -53
  74. iatoolkit/templates/header.html +0 -31
  75. iatoolkit/templates/test.html +0 -9
  76. iatoolkit-0.63.1.dist-info/RECORD +0 -112
  77. {iatoolkit-0.63.1.dist-info → iatoolkit-0.67.0.dist-info}/WHEEL +0 -0
  78. {iatoolkit-0.63.1.dist-info → iatoolkit-0.67.0.dist-info}/top_level.txt +0 -0
@@ -4,187 +4,131 @@
4
4
  --bs-tooltip-opacity: 0.95; /* Ligeramente más opaco para mejor legibilidad */
5
5
  }
6
6
 
7
- .alert-branded-danger {
8
- background-color: var(--brand-danger-bg);
9
- color: var(--brand-danger-text);
10
- border-color: var(--brand-danger-border);
7
+ h1, h2, h3, h4, h5, h6 {
8
+ font-family: var(--font-family-sans);
9
+ font-weight: var(--weight-semibold);
10
+ line-height: var(--lh-title);
11
+ margin: 0 0 0.6em;
12
+ /* Se define un color base usando la nueva variable de branding */
13
+ color: var(--brand-text-heading-color);
11
14
  }
12
- /* Asegura que el texto fuerte y los enlaces dentro de la alerta también tomen el color correcto */
13
- .alert-branded-danger strong,
14
- .alert-branded-danger .alert-link {
15
- color: inherit;
15
+
16
+ ul {
17
+ padding-left: 1.5rem; /* ~24px de indentación para la lista */
18
+ margin-bottom: 1rem; /* Espacio después de que termina la lista */
16
19
  }
17
20
 
21
+ li {
22
+ margin-bottom: 0.5rem;
23
+ padding-left: 0.25rem; /* Pequeño espacio extra entre la viñeta y el texto */
24
+ }
18
25
 
19
- /* esta clase defines los atributos de cada bloque */
20
- .chat-block {
21
- padding: 1rem; /* Equivalente a p-3 de Bootstrap */
22
- border: 1px solid #dee2e6; /* Borde estándar y sutil */
23
- border-radius: 0.375rem; /* Borde redondeado estándar de Bootstrap */
24
- box-shadow: 0 2px 8px rgba(0,0,0,0.06); /* Sombra suave y unificada */
26
+ .text-muted {
27
+ color: #64748b;
25
28
  }
26
29
 
27
- /* estos estilo aplican a la home page/signup/etc */
28
-
29
- /* --- Encabezado de Empresa Personalizado (Actualizado) --- */
30
- .custom-company-header {
31
- height: 78px;
32
- margin-bottom: 20px;
33
- padding: 0 1.5rem; /* Padding interno para que el texto no toque los bordes */
34
- border-radius: 0.375rem; /* Bordes redondeados para que coincida con los formularios */
35
-
36
- /* Los estilos de color y sombra se mantienen */
37
- background-color: var(--brand-header-bg);
38
- color: var(--brand-header-text);
39
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); /* Sombra ligeramente más suave */
40
- }
41
-
42
- /* Estilo específico para el nombre de la marca (Letra más grande) */
43
- .custom-company-header .brand-name {
44
- font-size: 1.8rem; /* Tamaño de fuente aumentado */
45
- font-weight: 600;
46
- color: inherit;
47
- text-decoration: none;
48
- transition: opacity 0.2s ease-in-out;
49
- }
50
-
51
- /* Efecto hover para el enlace del nombre de la marca */
52
- .custom-company-header .brand-name:hover {
53
- opacity: 0.85;
54
- }
55
-
56
- /* Estilo para el texto "Powered by" --- */
57
- .custom-company-header .powered-by {
58
- font-size: 0.9rem;
59
- font-weight: 400;
60
- opacity: 0.75; /* Menos prominente que el nombre de la marca */
61
- color: inherit;
62
- }
63
-
64
- /* --- Estilo para el enlace de IAToolkit --- */
65
- .custom-company-header .iatoolkit-link {
66
- color: inherit; /* Hereda el color del texto padre */
67
- text-decoration: none; /* ¡Elimina el subrayado! */
68
- font-weight: 600; /* Un poco más de peso para diferenciarlo */
69
- transition: opacity 0.2s ease-in-out;
70
- }
71
-
72
- .branded-form-container {
73
- background-color: #ffffff;
74
- border: 1px solid #dee2e6;
75
- border-top: 4px solid #adb5bd;
76
- border-radius: 0.375rem;
77
- padding: 2rem;
78
- box-shadow: 0 4px 12px rgba(0,0,0,0.08);
79
- }
80
-
81
- .branded-headline {
82
- color: var(--brand-primary-color);
83
- font-size: 2.5rem;
84
- font-weight: 700;
85
- line-height: 1.2;
86
- }
87
-
88
- .text-branded-primary {
89
- color: var(--brand-primary-color) !important;
90
- }
91
-
92
-
93
- .branded-form-label {
94
- font-size: 0.85rem;
95
- font-weight: 600;
96
- color: #495057; /* Un gris oscuro profesional */
97
- text-transform: uppercase;
98
- letter-spacing: 0.05em; /* Un poco de espacio extra entre letras */
99
- margin-bottom: 0.3rem;
100
- display: block;
101
- }
102
-
103
-
104
- /* Efecto de foco brandeado para todos los form-control */
105
- .form-control:focus {
106
- border-color: var(--brand-primary-color);
107
- box-shadow: 0 0 0 0.25rem rgba(var(--brand-primary-color-rgb), 0.25); /* Usa la variable RGB para el shadow */
108
- }
109
-
110
- .branded-form-title {
111
- color: var(--brand-primary-color);
112
- font-size: 1.75rem; /* Un tamaño más prominente */
113
- font-weight: 700; /* Equivalente a fw-bold de Bootstrap */
114
- text-align: center;
115
- margin-bottom: 1.5rem; /* Espacio consistente debajo del título */
116
- }
117
-
118
-
119
- /* Estilo para la sección del encabezado */
120
- .company-section {
121
- border-radius: 0.375rem; /* Mismo radio que .chat-block para consistencia */
122
- background-color: var(--brand-header-bg);
123
- color: var(--brand-header-text);
30
+ /* Estilos para botones con branding */
31
+ .btn-branded-primary {
32
+ background-color: var(--brand-primary-color);
33
+ border-color: var(--brand-primary-color);
34
+ color: var(--brand-text-on-primary);
35
+ }
36
+ .btn-branded-primary:hover {
37
+ background-color: var(--brand-text-on-primary);
38
+ color: var(--brand-primary-color);
39
+ border-color: var(--brand-primary-color);
124
40
  }
125
41
 
126
- /* Spinner */
127
- .spinning {
128
- animation: spin 1s linear infinite;
129
- font-size: 15px; /* Tamaño del ícono */
130
- display: inline-block;
42
+ .btn-branded-secondary {
43
+ background-color: var(--brand-secondary-color);
44
+ border-color: var(--brand-secondary-color);
45
+ color: var(--brand-text-on-secondary);
46
+ }
47
+ .btn-branded-secondary:hover {
48
+ background-color: var(--brand-text-on-secondary);
49
+ color: var(--brand-secondary-color);
50
+ border-color: var(--brand-secondary-color);
131
51
  }
132
52
 
133
- @keyframes spin {
134
- 0% { transform: rotate(0deg); }
135
- 100% { transform: rotate(360deg); }
53
+ .chat-layout-container {
54
+ display: flex;
55
+ flex-direction: column;
56
+ height: 100dvh;
57
+ overflow: hidden;
58
+ padding-top: 1rem;
59
+ padding-bottom: 0.2rem;
60
+ }
61
+
62
+
63
+ /* sección del encabezado en el chat principal */
64
+ .company-section {
65
+ border-radius: 0.375rem; /* Mismo radio que .chat-block para consistencia */
66
+ background-color: var(--brand-header-bg);
67
+ color: var(--brand-header-text);
136
68
  }
137
69
 
138
70
  /* Estilos para el contenedor del chat y mensajes para que exista scroll */
139
71
  #chat-container {
140
- max-height: 70vh;
72
+ flex-grow: 1;
141
73
  overflow-y: auto;
142
74
  display: flex;
143
75
  flex-direction: column;
144
76
  background-color: #fff; /* Fondo blanco para el contenedor del chat */
145
77
  }
146
- .answer-section, .error-section, .document-section {
147
- max-width: 100%;
148
- word-wrap: break-word;
149
- margin-bottom: 10px;
78
+
79
+ /* CSS para el chat principal */
80
+ /* esta clase defines los atributos de cada bloque */
81
+ .chat-block {
82
+ padding: 1rem;
83
+ border: 1px solid #dee2e6;
84
+ border-radius: 0.375rem; /* Borde redondeado estándar de Bootstrap */
85
+ box-shadow: 0 2px 8px rgba(0,0,0,0.06); /* Sombra suave y unificada */
150
86
  }
151
87
 
152
- /* Estilos para el modal de archivos y ordenar icono */
153
- .list-group-item {
154
- display: flex;
155
- justify-content: space-between;
156
- align-items: center;
88
+ /* El textarea "invisible" en el centro */
89
+ .chat-textarea {
90
+ flex-grow: 1;
91
+ background: transparent !important;
92
+ border: none !important;
93
+ box-shadow: none !important;
94
+ resize: none;
95
+ max-height: 150px;
96
+ min-height: 38px;
157
97
  }
158
- .file-name-modal {
159
- flex: 1;
160
- margin-right: 10px;
98
+
99
+ /* La barra "cápsula" que envuelve el texto y los iconos */
100
+ .chat-input-bar {
101
+ background-color: #ffffff;
102
+ border: 1px solid #dee2e6;
103
+ border-radius: 1rem;
104
+ padding: 0.1rem 0.5rem;
105
+ transition: all 0.2s ease-in-out;
161
106
  }
162
- .remove-file-btn {
163
- flex-shrink: 0;
107
+
108
+ /* Efecto de foco para toda la barra */
109
+ .chat-input-bar:focus-within {
110
+ border-color: #86b7fe;
111
+ box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
164
112
  }
165
- /* Estilos del header del modal*/
166
- .modal-header {
167
- display: flex;
168
- align-items: center;
169
- justify-content: space-between;
170
- width: 100%;
113
+ /* La caja principal que envuelve toda el área de entrada */
114
+ .input-area {
115
+ background-color: var(--brand-prompt-assistant-bg, #f8f9fa);
171
116
  }
172
117
 
173
- .modal-header .modal-title {
174
- margin: 0;
175
- padding: 0;
176
- flex: 1;
177
- }
178
118
 
179
- .modal-header .close {
180
- margin: 0;
181
- padding: 0;
182
- margin-left: auto;
119
+ #question {
120
+ width: 100%;
121
+ font-size: 15px;
122
+ background: #f8f9fa;
123
+ color: #202123;
124
+ border: 1px solid #d1d5db;
125
+ transition: all 0.3s ease-in-out;
183
126
  }
184
127
 
185
- /* Para el icono de eliminar del modal */
186
- .remove-file-btn i {
187
- color: #c82333
128
+ #question:focus {
129
+ outline: none;
130
+ border-color: #80bdff;
131
+ box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
188
132
  }
189
133
 
190
134
  /* Estilo del mensaje ingresado por el usuario */
@@ -204,18 +148,24 @@
204
148
  font-size: 15px;
205
149
  line-height: 1.6;
206
150
  background-color: #f7f7f8;
207
- border: none;
208
151
  }
209
152
 
210
- .answer-section {
211
- align-self: flex-start;
212
- max-width: 75%;
213
- padding: 10px 15px;
214
- font-family: "Inter", Arial, sans-serif;
215
- font-size: 15px;
216
- line-height: 1.6;
217
- word-wrap: break-word;
218
- }
153
+ .answer-section, .error-section {
154
+ max-width: 100%;
155
+ word-wrap: break-word;
156
+ margin-bottom: 10px;
157
+ }
158
+
159
+
160
+ .answer-section {
161
+ align-self: flex-start;
162
+ max-width: 75%;
163
+ padding: 10px 15px;
164
+ font-family: "Inter", Arial, sans-serif;
165
+ font-size: 15px;
166
+ line-height: 1.6;
167
+ word-wrap: break-word;
168
+ }
219
169
 
220
170
  .error-section {
221
171
  align-self: flex-start;
@@ -244,62 +194,76 @@
244
194
  flex-shrink: 0; /* Evita que el icono se encoja */
245
195
  }
246
196
 
247
- #question {
248
- width: 100%;
249
- font-size: 15px;
250
- background: #f8f9fa;
251
- color: #202123;
252
- border: 1px solid #d1d5db;
253
- transition: all 0.3s ease-in-out;
197
+ /* Estilo para mensajes sutiles del sistema (ej. abortado) */
198
+ .system-message {
199
+ color: var(--brand-secondary-color, #6c757d); /* Usa el color secundario o un gris por defecto */
200
+ font-style: italic;
201
+ font-size: 0.9rem;
202
+ display: flex;
203
+ align-items: center;
204
+ justify-content: start;
205
+ margin: 10px 0;
206
+ padding: 10px;
207
+ opacity: 0.8;
254
208
  }
255
209
 
256
- #question:focus {
257
- outline: none;
258
- border-color: #80bdff;
259
- box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
210
+ /* Spinner */
211
+ .spinning {
212
+ animation: spin 1s linear infinite;
213
+ font-size: 15px; /* Tamaño del ícono */
214
+ display: inline-block;
215
+ }
216
+ #spinner .spinner-border {
217
+ color: var(--brand-primary-color);
260
218
  }
261
219
 
262
- /* 1. La caja principal que envuelve toda el área de entrada */
263
- .input-area {
264
- background-color: var(--brand-prompt-assistant-bg, #f8f9fa);
220
+ @keyframes spin {
221
+ 0% { transform: rotate(0deg); }
222
+ 100% { transform: rotate(360deg); }
265
223
  }
266
224
 
267
- /* 2. La barra "cápsula" que envuelve el texto y los iconos */
268
- .chat-input-bar {
269
- background-color: #ffffff;
270
- border: 1px solid #dee2e6;
271
- border-radius: 1.5rem;
272
- padding: 0.1rem 0.5rem;
273
- transition: all 0.2s ease-in-out;
225
+
226
+ /* Estilos para el modal de archivos y ordenar icono */
227
+ .list-group-item {
228
+ display: flex;
229
+ justify-content: space-between;
230
+ align-items: center;
231
+
232
+ border: none;
233
+ /* separador sutil solo en la parte inferior */
234
+ border-bottom: 1px solid #e9ecef; /* Un gris muy claro estándar */
235
+ padding: 0.5rem 0.75rem;
236
+
237
+ /* animación suave para el cambio de fondo */
238
+ transition: background-color 0.2s ease-in-out;
274
239
  }
275
240
 
276
- /* 3. Efecto de foco para toda la barra */
277
- .chat-input-bar:focus-within {
278
- border-color: #86b7fe;
279
- box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
241
+ /* Al pasar el ratón, cambiamos el fondo para dar feedback */
242
+ .list-group-item:hover {
243
+ background-color: #f8f9fa; /* Un gris de fondo muy sutil */
280
244
  }
281
245
 
282
- /* Aplica el color secundario de la marca al icono de ver archivos */
283
- #view-files-button i {
284
- color: var(--brand-secondary-color, #6c757d);
246
+ /* Eliminamos el borde del último elemento para un acabado limpio */
247
+ .list-group-item:last-child {
248
+ border-bottom: none;
285
249
  }
286
250
 
287
- /* Estilo para mensajes sutiles del sistema (ej. abortado) */
288
- .system-message {
289
- color: var(--brand-secondary-color, #6c757d); /* Usa el color secundario o un gris por defecto */
290
- font-style: italic;
291
- font-size: 0.9rem;
292
- display: flex;
293
- align-items: center;
294
- justify-content: start;
295
- margin: 10px 0;
296
- padding: 10px;
297
- opacity: 0.8;
251
+ .file-name-modal {
252
+ flex: 1;
253
+ margin-right: 10px;
254
+ }
255
+ .remove-file-btn {
256
+ flex-shrink: 0;
298
257
  }
299
258
 
300
259
 
260
+ /* Aplica el color secundario de la marca al icono de ver archivos */
261
+ #view-files-button i {
262
+ color: var(--brand-secondary-color, #6c757d);
263
+ }
264
+
301
265
  #prompt-assistant-collapse .card {
302
- border-radius: 1.5rem; /* Mismo radio que el chat-input-bar */
266
+ border-radius: 1rem; /* Mismo radio que el chat-input-bar */
303
267
  border: 1px solid var(--brand-prompt-assistant-border, #dee2e6); /* Mismo borde que el chat-input-bar */
304
268
  box-shadow: none; /* Eliminamos la sombra por defecto del card */
305
269
  }
@@ -308,18 +272,8 @@
308
272
  margin-bottom: 12px !important; /* Anula el mb-2 (8px) para añadir un poco más de espacio */
309
273
  }
310
274
 
311
- /* 4. El textarea "invisible" en el centro */
312
- .chat-textarea {
313
- flex-grow: 1;
314
- background: transparent !important;
315
- border: none !important;
316
- box-shadow: none !important;
317
- resize: none;
318
- max-height: 150px;
319
- min-height: 38px;
320
- }
321
275
 
322
- /* 5. NUEVO Estilo UNIFICADO para los enlaces de iconos de acción */
276
+ /* Estilo UNIFICADO para los enlaces de iconos de acción */
323
277
  .action-icon-style {
324
278
  color: #6c757d; /* Color gris estándar por defecto */
325
279
  transition: opacity 0.2s ease-in-out;
@@ -349,7 +303,7 @@
349
303
  color: #343a40;
350
304
  }
351
305
 
352
- /* 6. Anulación específica para el botón de ENVIAR usando su ID (Máxima Prioridad) */
306
+ /* Anulación específica para el botón de ENVIAR usando su ID (Máxima Prioridad) */
353
307
  #send-button i {
354
308
  font-size: 1.7rem; /* Ligeramente más grande */
355
309
  }
@@ -363,12 +317,6 @@
363
317
  pointer-events: none; /* Lo hace no-clicable */
364
318
  }
365
319
 
366
- @media (max-width: 768px) {
367
- #chat-container {
368
- height: 68vh;
369
- }
370
- }
371
-
372
320
  .filepond--credits {
373
321
  display: none; /* Ocultar créditos de FilePond */
374
322
  }
@@ -435,14 +383,30 @@
435
383
  border-bottom: none;
436
384
  }
437
385
 
438
- /* Estilo para el botón principal del asistente de prompts */
439
- #prompt-select-button {
440
- background-color: var(--brand-prompt-assistant-button-bg, #FFFFFF);
441
- color: var(--brand-prompt-assistant-button-text, #495057);
442
- border-color: var(--brand-prompt-assistant-button-border, #ced4da);
386
+ /* estilos para el selector de prompts */
387
+ .prompt-select-button {
388
+ color: #202123;
389
+ border: 2px solid var(--brand-primary-color);
390
+ border-radius: 0.25rem; /* Estilos de botón estándar */
391
+ padding: 0.5rem 1rem;
392
+ cursor: pointer;
393
+ text-align: center;
394
+ font-weight: 500;
395
+
396
+ /* Transición suave para el cambio en hover */
397
+ transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
443
398
  }
444
399
 
400
+ .prompt-select-button:hover {
401
+ background-color: var(--brand-primary-color);
402
+ color: var(--brand-text-on-primary);
403
+
404
+ /* Marca el borde con un glow limpio */
405
+ border-color: var(--brand-primary-color);
406
+ box-shadow: 0 0 0 3px rgba( var(--brand-primary-rgb), 0.25 );
407
+ }
445
408
 
409
+ /* estilo de la x que limpia el prompt seleccionado */
446
410
  #clear-selection-button {
447
411
  position: absolute;
448
412
  top: 50%;
@@ -455,95 +419,9 @@
455
419
  }
456
420
 
457
421
  #clear-selection-button:hover {
458
- color: #212529;
459
- }
460
-
461
-
462
- /* Estilos para el modal de feedback */
463
- .icon-spaced {
464
- margin-right: 10px;
465
- }
466
-
467
- .modal-title{
468
- font-size: 20px;
469
- font-weight: bold;
470
- }
471
-
472
- .text-muted{
473
- font-size:16px;
474
- text-align: justify;
475
- }
476
-
477
- .feedback-text{
478
- font-size: 16px;
479
- }
480
-
481
- /* Estilos para el modal de historial */
482
-
483
- .thead-dark th{
484
- font-size: 16px;
485
- font-weight: bold;
486
- }
487
-
488
- #history-content .table td:nth-child(1) { width: 5%; }
489
- #history-content .table td:nth-child(2) { width: 20%; }
490
- #history-content .table td:nth-child(3) { width: auto; }
491
-
492
- /* Contenedor de calificación con estrellas */
493
- .rating-container {
494
- text-align: center;
495
- margin: 10px 0 0 0;
496
- display: flex;
497
- flex-direction: column;
498
- justify-content: center;
499
- align-items: center;
500
- gap: 5px;
501
- width: 100%;
502
- }
503
-
504
- .rating-stars-container{
505
- text-align: center;
506
- margin: 2px 0 0 0;
507
- display: flex;
508
- flex-direction: row;
509
- justify-content: center;
510
- align-items: center;
511
- gap: 10px;
512
- width: 100%;
513
- }
514
-
515
- /* --- ESTILOS PARA EL WIDGET DE ESTRELLAS DE FEEDBACK --- */
516
- .rating-stars {
517
- display: flex;
518
- justify-content: center;
519
- gap: 5px;
520
- margin-bottom: 15px;
521
- padding-top: 5px;
522
- }
523
- .star {
524
- font-size: 2rem;
525
- color: #adb5bd;
526
- cursor: pointer;
527
- transition: color 0.2s, transform 0.2s;
528
- }
529
- .star:hover {
530
- transform: scale(1.15);
531
- }
532
- .star::before {
533
- font-family: 'bootstrap-icons';
534
- content: "\F586";
535
- font-style: normal;
536
- font-weight: normal;
537
- line-height: 1;
538
- -webkit-font-smoothing: antialiased;
539
- }
540
- .star.active::before,
541
- .star.hover-active::before {
542
- content: "\F587";
543
- }
544
- .star.active,
545
- .star.hover-active {
546
- color: #ffc107;
422
+ color: #ffffff;
423
+ background-color: #6c757d;
424
+ border-radius: 0.25rem;
547
425
  }
548
426
 
549
427
  #send-button i {
@@ -576,7 +454,7 @@
576
454
  }
577
455
 
578
456
  /* --- Toast de Error (Usa el color de peligro de la marca) --- */
579
- .toast-error {
457
+ .toast-error{
580
458
  background-color: var(--brand-danger-color) !important;
581
459
  color: var(--brand-text-on-primary) !important; /* Asumimos texto blanco sobre el color de peligro */
582
460
  opacity: 0.95 !important;
@@ -593,3 +471,33 @@
593
471
  .toast-close-button:hover {
594
472
  opacity: 0.8;
595
473
  }
474
+
475
+ .alert-branded-danger {
476
+ background-color: var(--brand-danger-bg);
477
+ color: var(--brand-danger-text);
478
+ border-color: var(--brand-danger-border);
479
+ }
480
+ /* Asegura que el texto fuerte y los enlaces dentro de la alerta también tomen el color correcto */
481
+ .alert-branded-danger strong,
482
+ .alert-branded-danger .alert-link {
483
+ color: inherit;
484
+ }
485
+
486
+ .edit-pencil {
487
+ color: var(--brand-secondary-color, #6c757d); /* Color secundario por defecto */
488
+ cursor: pointer;
489
+ opacity: 0.6;
490
+ text-decoration: none;
491
+ /* Transición suave para todos los cambios (color, opacidad, tamaño) */
492
+ transition: all 0.25s ease-in-out;
493
+ }
494
+
495
+ .edit-pencil:hover {
496
+ opacity: 1;
497
+ transform: scale(1.2);
498
+ color: var(--brand-primary-color, #4C6A8D);
499
+ cursor: pointer;
500
+ }
501
+
502
+
503
+