iatoolkit 0.59.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 (93) hide show
  1. iatoolkit/__init__.py +2 -0
  2. iatoolkit/base_company.py +2 -19
  3. iatoolkit/common/routes.py +28 -25
  4. iatoolkit/common/session_manager.py +2 -0
  5. iatoolkit/common/util.py +17 -6
  6. iatoolkit/company_registry.py +1 -2
  7. iatoolkit/iatoolkit.py +54 -20
  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 +3 -4
  13. iatoolkit/repositories/profile_repo.py +0 -4
  14. iatoolkit/services/auth_service.py +44 -32
  15. iatoolkit/services/branding_service.py +35 -27
  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 +59 -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 +70 -29
  33. iatoolkit/static/js/chat_feedback_button.js +80 -0
  34. iatoolkit/static/js/chat_help_content.js +124 -0
  35. iatoolkit/static/js/chat_history_button.js +110 -0
  36. iatoolkit/static/js/chat_logout_button.js +36 -0
  37. iatoolkit/static/js/chat_main.js +32 -184
  38. iatoolkit/static/js/{chat_onboarding.js → chat_onboarding_button.js} +0 -1
  39. iatoolkit/static/js/chat_prompt_manager.js +94 -0
  40. iatoolkit/static/js/chat_reload_button.js +35 -0
  41. iatoolkit/static/styles/chat_iatoolkit.css +251 -205
  42. iatoolkit/static/styles/chat_modal.css +63 -95
  43. iatoolkit/static/styles/chat_public.css +107 -0
  44. iatoolkit/static/styles/landing_page.css +121 -167
  45. iatoolkit/templates/_company_header.html +20 -0
  46. iatoolkit/templates/_login_widget.html +10 -10
  47. iatoolkit/templates/base.html +36 -19
  48. iatoolkit/templates/change_password.html +24 -22
  49. iatoolkit/templates/chat.html +121 -93
  50. iatoolkit/templates/chat_modals.html +113 -74
  51. iatoolkit/templates/error.html +44 -8
  52. iatoolkit/templates/forgot_password.html +17 -15
  53. iatoolkit/templates/index.html +66 -81
  54. iatoolkit/templates/login_simulation.html +16 -5
  55. iatoolkit/templates/onboarding_shell.html +1 -2
  56. iatoolkit/templates/signup.html +22 -20
  57. iatoolkit/views/base_login_view.py +12 -1
  58. iatoolkit/views/change_password_view.py +50 -33
  59. iatoolkit/views/external_login_view.py +5 -11
  60. iatoolkit/views/file_store_api_view.py +7 -9
  61. iatoolkit/views/forgot_password_view.py +21 -19
  62. iatoolkit/views/help_content_api_view.py +54 -0
  63. iatoolkit/views/history_api_view.py +16 -12
  64. iatoolkit/views/home_view.py +61 -0
  65. iatoolkit/views/index_view.py +5 -34
  66. iatoolkit/views/init_context_api_view.py +16 -13
  67. iatoolkit/views/llmquery_api_view.py +38 -28
  68. iatoolkit/views/login_simulation_view.py +14 -2
  69. iatoolkit/views/login_view.py +48 -33
  70. iatoolkit/views/logout_api_view.py +49 -0
  71. iatoolkit/views/profile_api_view.py +46 -0
  72. iatoolkit/views/prompt_api_view.py +8 -8
  73. iatoolkit/views/signup_view.py +27 -25
  74. iatoolkit/views/{tasks_view.py → tasks_api_view.py} +10 -36
  75. iatoolkit/views/tasks_review_api_view.py +55 -0
  76. iatoolkit/views/user_feedback_api_view.py +21 -32
  77. iatoolkit/views/verify_user_view.py +33 -26
  78. {iatoolkit-0.59.1.dist-info → iatoolkit-0.67.0.dist-info}/METADATA +40 -22
  79. iatoolkit-0.67.0.dist-info/RECORD +120 -0
  80. iatoolkit-0.67.0.dist-info/licenses/LICENSE +21 -0
  81. iatoolkit/static/js/chat_context_reload.js +0 -54
  82. iatoolkit/static/js/chat_feedback.js +0 -115
  83. iatoolkit/static/js/chat_history.js +0 -127
  84. iatoolkit/static/styles/chat_info.css +0 -53
  85. iatoolkit/templates/_branding_styles.html +0 -53
  86. iatoolkit/templates/_navbar.html +0 -9
  87. iatoolkit/templates/header.html +0 -31
  88. iatoolkit/templates/test.html +0 -9
  89. iatoolkit/views/chat_token_request_view.py +0 -98
  90. iatoolkit/views/tasks_review_view.py +0 -83
  91. iatoolkit-0.59.1.dist-info/RECORD +0 -111
  92. {iatoolkit-0.59.1.dist-info → iatoolkit-0.67.0.dist-info}/WHEEL +0 -0
  93. {iatoolkit-0.59.1.dist-info → iatoolkit-0.67.0.dist-info}/top_level.txt +0 -0
@@ -4,98 +4,135 @@
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
- /* Estilo para la sección del encabezado */
28
- .company-section {
29
- border-radius: 0.375rem; /* Mismo radio que .chat-block para consistencia */
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);
30
40
  }
31
41
 
32
- /* Spinner */
33
- .spinning {
34
- animation: spin 1s linear infinite;
35
- font-size: 15px; /* Tamaño del ícono */
36
- 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);
37
51
  }
38
52
 
39
- @keyframes spin {
40
- 0% { transform: rotate(0deg); }
41
- 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);
42
68
  }
43
69
 
44
70
  /* Estilos para el contenedor del chat y mensajes para que exista scroll */
45
71
  #chat-container {
46
- max-height: 70vh;
72
+ flex-grow: 1;
47
73
  overflow-y: auto;
48
74
  display: flex;
49
75
  flex-direction: column;
50
76
  background-color: #fff; /* Fondo blanco para el contenedor del chat */
51
77
  }
52
- .answer-section, .error-section, .document-section {
53
- max-width: 100%;
54
- word-wrap: break-word;
55
- 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 */
56
86
  }
57
87
 
58
- /* Estilos para el modal de archivos y ordenar icono */
59
- .list-group-item {
60
- display: flex;
61
- justify-content: space-between;
62
- 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;
63
97
  }
64
- .file-name-modal {
65
- flex: 1;
66
- 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;
67
106
  }
68
- .remove-file-btn {
69
- 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);
70
112
  }
71
- /* Estilos del header del modal*/
72
- .modal-header {
73
- display: flex;
74
- align-items: center;
75
- justify-content: space-between;
76
- 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);
77
116
  }
78
117
 
79
- .modal-header .modal-title {
80
- margin: 0;
81
- padding: 0;
82
- flex: 1;
83
- }
84
118
 
85
- .modal-header .close {
86
- margin: 0;
87
- padding: 0;
88
- 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;
89
126
  }
90
127
 
91
- /* Para el icono de eliminar del modal */
92
- .remove-file-btn i {
93
- 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);
94
132
  }
95
133
 
96
134
  /* Estilo del mensaje ingresado por el usuario */
97
135
  #chat-container .message {
98
- margin-top: 10px;
99
136
  max-width: 75%;
100
137
  min-width: fit-content;
101
138
  width: fit-content;
@@ -105,24 +142,31 @@
105
142
  align-items: center;
106
143
  align-self: flex-end;
107
144
  text-align: left;
108
- padding: 15px;
145
+ padding-left: 0.5em;
146
+ color: #202123;
109
147
  font-family: Arial, sans-serif;
110
148
  font-size: 15px;
111
- line-height: 1.5;
112
- color: #333;
113
- background-color: #ffffff;
114
- border: 1px solid #ddd;
149
+ line-height: 1.6;
150
+ background-color: #f7f7f8;
151
+ }
152
+
153
+ .answer-section, .error-section {
154
+ max-width: 100%;
155
+ word-wrap: break-word;
156
+ margin-bottom: 10px;
115
157
  }
116
158
 
117
159
 
118
160
  .answer-section {
119
- color: #202123; /* Texto negro suave */
120
- font-family: "Inter", Arial, sans-serif; /* Fuente moderna */
121
- font-size: 16px;
161
+ align-self: flex-start;
162
+ max-width: 75%;
163
+ padding: 10px 15px;
164
+ font-family: "Inter", Arial, sans-serif;
165
+ font-size: 15px;
122
166
  line-height: 1.6;
123
167
  word-wrap: break-word;
124
- padding-top: 0.5em;
125
168
  }
169
+
126
170
  .error-section {
127
171
  align-self: flex-start;
128
172
  max-width: 75%;
@@ -150,62 +194,76 @@
150
194
  flex-shrink: 0; /* Evita que el icono se encoja */
151
195
  }
152
196
 
153
- #question {
154
- width: 100%;
155
- font-size: 15px;
156
- background: #f8f9fa;
157
- color: #202123;
158
- border: 1px solid #d1d5db;
159
- 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;
160
208
  }
161
209
 
162
- #question:focus {
163
- outline: none;
164
- border-color: #80bdff;
165
- 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);
166
218
  }
167
219
 
168
- /* 1. La caja principal que envuelve toda el área de entrada */
169
- .input-area {
170
- background-color: var(--brand-prompt-assistant-bg, #f8f9fa);
220
+ @keyframes spin {
221
+ 0% { transform: rotate(0deg); }
222
+ 100% { transform: rotate(360deg); }
171
223
  }
172
224
 
173
- /* 2. La barra "cápsula" que envuelve el texto y los iconos */
174
- .chat-input-bar {
175
- background-color: #ffffff;
176
- border: 1px solid #dee2e6;
177
- border-radius: 1.5rem;
178
- padding: 0.1rem 0.5rem;
179
- 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;
180
239
  }
181
240
 
182
- /* 3. Efecto de foco para toda la barra */
183
- .chat-input-bar:focus-within {
184
- border-color: #86b7fe;
185
- 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 */
186
244
  }
187
245
 
188
- /* Aplica el color secundario de la marca al icono de ver archivos */
189
- #view-files-button i {
190
- 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;
191
249
  }
192
250
 
193
- /* Estilo para mensajes sutiles del sistema (ej. abortado) */
194
- .system-message {
195
- color: var(--brand-secondary-color, #6c757d); /* Usa el color secundario o un gris por defecto */
196
- font-style: italic;
197
- font-size: 0.9rem;
198
- display: flex;
199
- align-items: center;
200
- justify-content: start;
201
- margin: 10px 0;
202
- padding: 10px;
203
- opacity: 0.8;
251
+ .file-name-modal {
252
+ flex: 1;
253
+ margin-right: 10px;
254
+ }
255
+ .remove-file-btn {
256
+ flex-shrink: 0;
204
257
  }
205
258
 
206
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
+
207
265
  #prompt-assistant-collapse .card {
208
- border-radius: 1.5rem; /* Mismo radio que el chat-input-bar */
266
+ border-radius: 1rem; /* Mismo radio que el chat-input-bar */
209
267
  border: 1px solid var(--brand-prompt-assistant-border, #dee2e6); /* Mismo borde que el chat-input-bar */
210
268
  box-shadow: none; /* Eliminamos la sombra por defecto del card */
211
269
  }
@@ -214,18 +272,8 @@
214
272
  margin-bottom: 12px !important; /* Anula el mb-2 (8px) para añadir un poco más de espacio */
215
273
  }
216
274
 
217
- /* 4. El textarea "invisible" en el centro */
218
- .chat-textarea {
219
- flex-grow: 1;
220
- background: transparent !important;
221
- border: none !important;
222
- box-shadow: none !important;
223
- resize: none;
224
- max-height: 150px;
225
- min-height: 38px;
226
- }
227
275
 
228
- /* 5. NUEVO Estilo UNIFICADO para los enlaces de iconos de acción */
276
+ /* Estilo UNIFICADO para los enlaces de iconos de acción */
229
277
  .action-icon-style {
230
278
  color: #6c757d; /* Color gris estándar por defecto */
231
279
  transition: opacity 0.2s ease-in-out;
@@ -255,7 +303,7 @@
255
303
  color: #343a40;
256
304
  }
257
305
 
258
- /* 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) */
259
307
  #send-button i {
260
308
  font-size: 1.7rem; /* Ligeramente más grande */
261
309
  }
@@ -269,12 +317,6 @@
269
317
  pointer-events: none; /* Lo hace no-clicable */
270
318
  }
271
319
 
272
- @media (max-width: 768px) {
273
- #chat-container {
274
- height: 68vh;
275
- }
276
- }
277
-
278
320
  .filepond--credits {
279
321
  display: none; /* Ocultar créditos de FilePond */
280
322
  }
@@ -341,14 +383,30 @@
341
383
  border-bottom: none;
342
384
  }
343
385
 
344
- /* Estilo para el botón principal del asistente de prompts */
345
- #prompt-select-button {
346
- background-color: var(--brand-prompt-assistant-button-bg, #FFFFFF);
347
- color: var(--brand-prompt-assistant-button-text, #495057);
348
- 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;
349
398
  }
350
399
 
400
+ .prompt-select-button:hover {
401
+ background-color: var(--brand-primary-color);
402
+ color: var(--brand-text-on-primary);
351
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
+ }
408
+
409
+ /* estilo de la x que limpia el prompt seleccionado */
352
410
  #clear-selection-button {
353
411
  position: absolute;
354
412
  top: 50%;
@@ -361,97 +419,85 @@
361
419
  }
362
420
 
363
421
  #clear-selection-button:hover {
364
- color: #212529;
422
+ color: #ffffff;
423
+ background-color: #6c757d;
424
+ border-radius: 0.25rem;
365
425
  }
366
426
 
367
-
368
- /* Estilos para el modal de feedback */
369
- .icon-spaced {
370
- margin-right: 10px;
427
+ #send-button i {
428
+ color: var(--brand-send-button-color);
371
429
  }
372
430
 
373
- .modal-title{
374
- font-size: 20px;
375
- font-weight: bold;
376
- }
431
+ /* Estilos personalizados para Toastr usando las variables de Branding */
377
432
 
378
- .text-muted{
379
- font-size:16px;
380
- text-align: justify;
433
+ /* --- Toast de Información (Usa el color primario de la marca) --- */
434
+ .toast-info {
435
+ /* ¡Importante! Usamos las variables CSS de tu BrandingService */
436
+ background-color: var(--brand-primary-color) !important;
437
+ color: var(--brand-text-on-primary) !important;
438
+ opacity: 0.95 !important;
381
439
  }
382
-
383
- .feedback-text{
384
- font-size: 16px;
440
+ .toast-info .toast-progress {
441
+ /* Usamos un color ligeramente más oscuro o una variante,
442
+ pero para simplificar, podemos empezar con el mismo */
443
+ background-color: rgba(0, 0, 0, 0.2) !important;
385
444
  }
386
445
 
387
- /* Estilos para el modal de historial */
388
-
389
- .thead-dark th{
390
- font-size: 16px;
391
- font-weight: bold;
446
+ /* --- Toast de Éxito (Usa el verde por defecto o uno de marca si lo defines) --- */
447
+ .toast-success {
448
+ background-color: #198754 !important; /* Puedes crear una variable --brand-success-color si quieres */
449
+ color: #ffffff !important;
450
+ opacity: 0.95 !important;
392
451
  }
393
-
394
- #history-content .table td:nth-child(1) { width: 5%; }
395
- #history-content .table td:nth-child(2) { width: 20%; }
396
- #history-content .table td:nth-child(3) { width: auto; }
397
-
398
- /* Contenedor de calificación con estrellas */
399
- .rating-container {
400
- text-align: center;
401
- margin: 10px 0 0 0;
402
- display: flex;
403
- flex-direction: column;
404
- justify-content: center;
405
- align-items: center;
406
- gap: 5px;
407
- width: 100%;
452
+ .toast-success .toast-progress {
453
+ background-color: rgba(0, 0, 0, 0.2) !important;
408
454
  }
409
455
 
410
- .rating-stars-container{
411
- text-align: center;
412
- margin: 2px 0 0 0;
413
- display: flex;
414
- flex-direction: row;
415
- justify-content: center;
416
- align-items: center;
417
- gap: 10px;
418
- width: 100%;
456
+ /* --- Toast de Error (Usa el color de peligro de la marca) --- */
457
+ .toast-error{
458
+ background-color: var(--brand-danger-color) !important;
459
+ color: var(--brand-text-on-primary) !important; /* Asumimos texto blanco sobre el color de peligro */
460
+ opacity: 0.95 !important;
461
+ }
462
+ .toast-error .toast-progress {
463
+ background-color: rgba(0, 0, 0, 0.2) !important;
419
464
  }
420
465
 
421
- /* --- ESTILOS PARA EL WIDGET DE ESTRELLAS DE FEEDBACK --- */
422
- .rating-stars {
423
- display: flex;
424
- justify-content: center;
425
- gap: 5px;
426
- margin-bottom: 15px;
427
- padding-top: 5px;
428
- }
429
- .star {
430
- font-size: 2rem;
431
- color: #adb5bd;
432
- cursor: pointer;
433
- transition: color 0.2s, transform 0.2s;
466
+ /* Opcional: Estilo para el botón de cierre para que contraste bien */
467
+ .toast-close-button {
468
+ color: var(--brand-text-on-primary) !important;
469
+ text-shadow: none !important;
434
470
  }
435
- .star:hover {
436
- transform: scale(1.15);
471
+ .toast-close-button:hover {
472
+ opacity: 0.8;
437
473
  }
438
- .star::before {
439
- font-family: 'bootstrap-icons';
440
- content: "\F586";
441
- font-style: normal;
442
- font-weight: normal;
443
- line-height: 1;
444
- -webkit-font-smoothing: antialiased;
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);
445
479
  }
446
- .star.active::before,
447
- .star.hover-active::before {
448
- content: "\F587";
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;
449
484
  }
450
- .star.active,
451
- .star.hover-active {
452
- color: #ffc107;
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;
453
493
  }
454
494
 
455
- #send-button i {
456
- color: var(--brand-send-button-color);
495
+ .edit-pencil:hover {
496
+ opacity: 1;
497
+ transform: scale(1.2);
498
+ color: var(--brand-primary-color, #4C6A8D);
499
+ cursor: pointer;
457
500
  }
501
+
502
+
503
+