iatoolkit 0.11.0__py3-none-any.whl → 0.66.2__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.
Files changed (106) hide show
  1. iatoolkit/base_company.py +11 -3
  2. iatoolkit/common/routes.py +92 -52
  3. iatoolkit/common/session_manager.py +0 -1
  4. iatoolkit/common/util.py +17 -27
  5. iatoolkit/iatoolkit.py +91 -47
  6. iatoolkit/infra/llm_client.py +7 -8
  7. iatoolkit/infra/openai_adapter.py +1 -1
  8. iatoolkit/infra/redis_session_manager.py +48 -2
  9. iatoolkit/locales/en.yaml +144 -0
  10. iatoolkit/locales/es.yaml +140 -0
  11. iatoolkit/repositories/database_manager.py +17 -2
  12. iatoolkit/repositories/models.py +31 -4
  13. iatoolkit/repositories/profile_repo.py +7 -2
  14. iatoolkit/services/auth_service.py +193 -0
  15. iatoolkit/services/branding_service.py +59 -18
  16. iatoolkit/services/dispatcher_service.py +10 -40
  17. iatoolkit/services/excel_service.py +15 -15
  18. iatoolkit/services/help_content_service.py +30 -0
  19. iatoolkit/services/history_service.py +2 -11
  20. iatoolkit/services/i18n_service.py +104 -0
  21. iatoolkit/services/jwt_service.py +15 -24
  22. iatoolkit/services/language_service.py +77 -0
  23. iatoolkit/services/onboarding_service.py +43 -0
  24. iatoolkit/services/profile_service.py +148 -75
  25. iatoolkit/services/query_service.py +124 -81
  26. iatoolkit/services/tasks_service.py +1 -1
  27. iatoolkit/services/user_feedback_service.py +68 -32
  28. iatoolkit/services/user_session_context_service.py +112 -54
  29. iatoolkit/static/images/fernando.jpeg +0 -0
  30. iatoolkit/static/js/chat_feedback_button.js +80 -0
  31. iatoolkit/static/js/chat_help_content.js +124 -0
  32. iatoolkit/static/js/chat_history_button.js +112 -0
  33. iatoolkit/static/js/chat_logout_button.js +36 -0
  34. iatoolkit/static/js/chat_main.js +148 -220
  35. iatoolkit/static/js/chat_onboarding_button.js +97 -0
  36. iatoolkit/static/js/chat_prompt_manager.js +94 -0
  37. iatoolkit/static/js/chat_reload_button.js +35 -0
  38. iatoolkit/static/styles/chat_iatoolkit.css +367 -199
  39. iatoolkit/static/styles/chat_modal.css +98 -76
  40. iatoolkit/static/styles/chat_public.css +107 -0
  41. iatoolkit/static/styles/landing_page.css +182 -0
  42. iatoolkit/static/styles/onboarding.css +169 -0
  43. iatoolkit/system_prompts/query_main.prompt +3 -12
  44. iatoolkit/templates/_company_header.html +20 -0
  45. iatoolkit/templates/_login_widget.html +42 -0
  46. iatoolkit/templates/base.html +40 -20
  47. iatoolkit/templates/change_password.html +57 -36
  48. iatoolkit/templates/chat.html +169 -83
  49. iatoolkit/templates/chat_modals.html +134 -68
  50. iatoolkit/templates/error.html +44 -8
  51. iatoolkit/templates/forgot_password.html +40 -23
  52. iatoolkit/templates/index.html +145 -0
  53. iatoolkit/templates/login_simulation.html +34 -0
  54. iatoolkit/templates/onboarding_shell.html +104 -0
  55. iatoolkit/templates/signup.html +63 -65
  56. iatoolkit/views/base_login_view.py +92 -0
  57. iatoolkit/views/change_password_view.py +56 -30
  58. iatoolkit/views/external_login_view.py +61 -28
  59. iatoolkit/views/{file_store_view.py → file_store_api_view.py} +9 -2
  60. iatoolkit/views/forgot_password_view.py +27 -19
  61. iatoolkit/views/help_content_api_view.py +54 -0
  62. iatoolkit/views/history_api_view.py +56 -0
  63. iatoolkit/views/home_view.py +50 -23
  64. iatoolkit/views/index_view.py +14 -0
  65. iatoolkit/views/init_context_api_view.py +73 -0
  66. iatoolkit/views/llmquery_api_view.py +57 -0
  67. iatoolkit/views/login_simulation_view.py +81 -0
  68. iatoolkit/views/login_view.py +130 -37
  69. iatoolkit/views/logout_api_view.py +49 -0
  70. iatoolkit/views/profile_api_view.py +46 -0
  71. iatoolkit/views/{prompt_view.py → prompt_api_view.py} +10 -10
  72. iatoolkit/views/signup_view.py +42 -35
  73. iatoolkit/views/{tasks_view.py → tasks_api_view.py} +10 -36
  74. iatoolkit/views/tasks_review_api_view.py +55 -0
  75. iatoolkit/views/user_feedback_api_view.py +60 -0
  76. iatoolkit/views/verify_user_view.py +35 -28
  77. {iatoolkit-0.11.0.dist-info → iatoolkit-0.66.2.dist-info}/METADATA +2 -2
  78. iatoolkit-0.66.2.dist-info/RECORD +119 -0
  79. iatoolkit/common/auth.py +0 -200
  80. iatoolkit/static/images/arrow_up.png +0 -0
  81. iatoolkit/static/images/diagrama_iatoolkit.jpg +0 -0
  82. iatoolkit/static/images/logo_clinica.png +0 -0
  83. iatoolkit/static/images/logo_iatoolkit.png +0 -0
  84. iatoolkit/static/images/logo_maxxa.png +0 -0
  85. iatoolkit/static/images/logo_notaria.png +0 -0
  86. iatoolkit/static/images/logo_tarjeta.png +0 -0
  87. iatoolkit/static/images/logo_umayor.png +0 -0
  88. iatoolkit/static/images/upload.png +0 -0
  89. iatoolkit/static/js/chat_feedback.js +0 -115
  90. iatoolkit/static/js/chat_history.js +0 -117
  91. iatoolkit/static/styles/chat_info.css +0 -53
  92. iatoolkit/templates/header.html +0 -31
  93. iatoolkit/templates/home.html +0 -199
  94. iatoolkit/templates/login.html +0 -43
  95. iatoolkit/templates/test.html +0 -9
  96. iatoolkit/views/chat_token_request_view.py +0 -98
  97. iatoolkit/views/chat_view.py +0 -58
  98. iatoolkit/views/download_file_view.py +0 -58
  99. iatoolkit/views/external_chat_login_view.py +0 -95
  100. iatoolkit/views/history_view.py +0 -57
  101. iatoolkit/views/llmquery_view.py +0 -65
  102. iatoolkit/views/tasks_review_view.py +0 -83
  103. iatoolkit/views/user_feedback_view.py +0 -74
  104. iatoolkit-0.11.0.dist-info/RECORD +0 -110
  105. {iatoolkit-0.11.0.dist-info → iatoolkit-0.66.2.dist-info}/WHEEL +0 -0
  106. {iatoolkit-0.11.0.dist-info → iatoolkit-0.66.2.dist-info}/top_level.txt +0 -0
@@ -4,98 +4,119 @@
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 */
19
+ }
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
+ }
25
+
26
+ /* Estilo para la viñeta (el punto) de cada elemento de la lista */
27
+ li::marker {
28
+ color: var(--brand-primary-color); /* La viñeta usa el color principal de la marca */
29
+ font-size: 1.1em; /* Ligeramente más grande para que sea más visible */
30
+ }
31
+
32
+ .text-muted {
33
+ color: #64748b;
34
+ }
35
+
36
+ .chat-layout-container {
37
+ display: flex;
38
+ flex-direction: column;
39
+ height: 100dvh;
40
+ overflow: hidden;
41
+ padding-top: 1rem;
42
+ padding-bottom: 0.2rem;
43
+ }
44
+
45
+ /* Esta parte para el prompt-assistant sigue siendo correcta */
46
+ main.chat-layout-container.prompt-assistant-open {
47
+ height: auto;
48
+ overflow: visible;
16
49
  }
17
50
 
18
51
 
52
+ /* CSS para el chat principal */
19
53
  /* esta clase defines los atributos de cada bloque */
20
54
  .chat-block {
21
- padding: 1rem; /* Equivalente a p-3 de Bootstrap */
22
- border: 1px solid #dee2e6; /* Borde estándar y sutil */
55
+ padding: 1rem;
56
+ border: 1px solid #dee2e6;
23
57
  border-radius: 0.375rem; /* Borde redondeado estándar de Bootstrap */
24
58
  box-shadow: 0 2px 8px rgba(0,0,0,0.06); /* Sombra suave y unificada */
25
59
  }
26
60
 
27
- /* Estilo para la sección del encabezado */
61
+ /* sección del encabezado en el chat principal */
28
62
  .company-section {
29
- border-radius: 0.375rem; /* Mismo radio que .chat-block para consistencia */
30
- }
31
-
32
- /* Spinner */
33
- .spinning {
34
- animation: spin 1s linear infinite;
35
- font-size: 15px; /* Tamaño del ícono */
36
- display: inline-block;
37
- }
38
-
39
- @keyframes spin {
40
- 0% { transform: rotate(0deg); }
41
- 100% { transform: rotate(360deg); }
63
+ border-radius: 0.375rem; /* Mismo radio que .chat-block para consistencia */
64
+ background-color: var(--brand-header-bg);
65
+ color: var(--brand-header-text);
42
66
  }
43
67
 
44
68
  /* Estilos para el contenedor del chat y mensajes para que exista scroll */
45
69
  #chat-container {
46
- max-height: 70vh;
70
+ flex-grow: 1;
47
71
  overflow-y: auto;
48
72
  display: flex;
49
73
  flex-direction: column;
50
74
  background-color: #fff; /* Fondo blanco para el contenedor del chat */
51
75
  }
52
- .answer-section, .error-section, .document-section {
53
- max-width: 100%;
54
- word-wrap: break-word;
55
- margin-bottom: 10px;
56
- }
57
76
 
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;
63
- }
64
- .file-name-modal {
65
- flex: 1;
66
- margin-right: 10px;
77
+ /* La caja principal que envuelve toda el área de entrada */
78
+ .input-area {
79
+ background-color: var(--brand-prompt-assistant-bg, #f8f9fa);
67
80
  }
68
- .remove-file-btn {
69
- flex-shrink: 0;
81
+
82
+ /* La barra "cápsula" que envuelve el texto y los iconos */
83
+ .chat-input-bar {
84
+ background-color: #ffffff;
85
+ border: 1px solid #dee2e6;
86
+ border-radius: 1rem;
87
+ padding: 0.1rem 0.5rem;
88
+ transition: all 0.2s ease-in-out;
70
89
  }
71
- /* Estilos del header del modal*/
72
- .modal-header {
73
- display: flex;
74
- align-items: center;
75
- justify-content: space-between;
76
- width: 100%;
90
+
91
+ /* Efecto de foco para toda la barra */
92
+ .chat-input-bar:focus-within {
93
+ border-color: #86b7fe;
94
+ box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
77
95
  }
78
96
 
79
- .modal-header .modal-title {
80
- margin: 0;
81
- padding: 0;
82
- flex: 1;
97
+ #question {
98
+ width: 100%;
99
+ font-size: 15px;
100
+ background: #f8f9fa;
101
+ color: #202123;
102
+ border: 1px solid #d1d5db;
103
+ transition: all 0.3s ease-in-out;
83
104
  }
84
105
 
85
- .modal-header .close {
86
- margin: 0;
87
- padding: 0;
88
- margin-left: auto;
106
+ #question:focus {
107
+ outline: none;
108
+ border-color: #80bdff;
109
+ box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
89
110
  }
90
111
 
91
- /* Para el icono de eliminar del modal */
92
- .remove-file-btn i {
93
- color: #c82333
112
+ .answer-section, .error-section {
113
+ max-width: 100%;
114
+ word-wrap: break-word;
115
+ margin-bottom: 10px;
94
116
  }
95
117
 
96
118
  /* Estilo del mensaje ingresado por el usuario */
97
119
  #chat-container .message {
98
- margin-top: 10px;
99
120
  max-width: 75%;
100
121
  min-width: fit-content;
101
122
  width: fit-content;
@@ -105,90 +126,226 @@
105
126
  align-items: center;
106
127
  align-self: flex-end;
107
128
  text-align: left;
108
- padding: 15px;
129
+ padding-left: 0.5em;
130
+ color: #202123;
109
131
  font-family: Arial, sans-serif;
110
132
  font-size: 15px;
111
- line-height: 1.5;
112
- color: #333;
113
- background-color: #ffffff;
114
- border: 1px solid #ddd;
133
+ line-height: 1.6;
134
+ background-color: #f7f7f8;
115
135
  }
116
136
 
117
-
118
137
  .answer-section {
119
- color: #202123; /* Texto negro suave */
120
- font-family: "Inter", Arial, sans-serif; /* Fuente moderna */
121
- font-size: 16px;
138
+ align-self: flex-start;
139
+ max-width: 75%;
140
+ padding: 10px 15px;
141
+ font-family: "Inter", Arial, sans-serif;
142
+ font-size: 15px;
122
143
  line-height: 1.6;
123
144
  word-wrap: break-word;
124
- padding-top: 0.5em;
125
145
  }
126
146
 
127
147
  .error-section {
128
148
  align-self: flex-start;
129
149
  max-width: 75%;
130
- min-width: fit-content;
131
- width: fit-content;
132
- margin-top: 10px;
150
+ min-width: 250px;
151
+
152
+ color: var(--brand-danger-text, #842029); /* Color de texto de error de la marca */
153
+ background-color: var(--brand-danger-bg, #f8d7da); /* Fondo de error de la marca */
154
+ border: 1px solid var(--brand-danger-border, #f5c2c7); /* Borde de error de la marca */
155
+ font-style: italic;
156
+ font-size: 0.9rem;
133
157
  display: flex;
134
- align-items: flex-start;
135
- gap: 12px;
136
- background-color: #fff0f0;
137
- color: #5c0f0f;
138
- border: 1px solid #ffcccc;
139
- padding: 12px 18px;
140
- border-radius: 0 12px 12px 12px;
141
- font-family: Arial, sans-serif;
142
- font-size: 15px;
143
- line-height: 1.5;
144
- word-wrap: break-word;
145
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
158
+ align-items: center;
159
+ justify-content: start;
160
+ margin: 10px 0;
161
+ padding: 10px 15px; /* Un poco más de padding lateral */
162
+ opacity: 0.9;
163
+ border-radius: 8px; /* Bordes redondeados */
164
+ word-wrap: break-word; /* Asegura que el texto no se desborde */
146
165
  }
147
166
 
148
167
  .error-section i {
149
- color: #d32f2f;
150
- font-size: 1.2em;
151
- padding-top: 2px;
168
+ color: var(--brand-danger-color, #dc3545); /* Color del icono, el rojo principal */
169
+ font-size: 1.2rem; /* Tamaño del icono */
170
+ margin-right: 10px; /* Espacio entre el icono y el texto */
171
+ flex-shrink: 0; /* Evita que el icono se encoja */
152
172
  }
153
173
 
154
- #question {
155
- width: 100%;
156
- font-size: 15px;
157
- background: #f8f9fa;
158
- color: #202123;
159
- border: 1px solid #d1d5db;
160
- transition: all 0.3s ease-in-out;
174
+ /* Estilo para mensajes sutiles del sistema (ej. abortado) */
175
+ .system-message {
176
+ color: var(--brand-secondary-color, #6c757d); /* Usa el color secundario o un gris por defecto */
177
+ font-style: italic;
178
+ font-size: 0.9rem;
179
+ display: flex;
180
+ align-items: center;
181
+ justify-content: start;
182
+ margin: 10px 0;
183
+ padding: 10px;
184
+ opacity: 0.8;
161
185
  }
162
186
 
163
- #question:focus {
164
- outline: none;
165
- border-color: #80bdff;
166
- box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
187
+
188
+ /* Spinner */
189
+ .spinning {
190
+ animation: spin 1s linear infinite;
191
+ font-size: 15px; /* Tamaño del ícono */
192
+ display: inline-block;
193
+ }
194
+ #spinner .spinner-border {
195
+ color: var(--brand-primary-color);
167
196
  }
168
197
 
169
- /* 1. La caja principal que envuelve toda el área de entrada */
170
- .input-area {
171
- background-color: #f8f9fa;
198
+
199
+ @keyframes spin {
200
+ 0% { transform: rotate(0deg); }
201
+ 100% { transform: rotate(360deg); }
172
202
  }
173
203
 
174
- /* 2. La barra "cápsula" que envuelve el texto y los iconos */
175
- .chat-input-bar {
176
- background-color: #ffffff;
177
- border: 1px solid #dee2e6;
178
- border-radius: 1.5rem;
179
- padding: 0.1rem 0.5rem;
180
- transition: all 0.2s ease-in-out;
204
+
205
+ /* Estilos para el modal de archivos y ordenar icono */
206
+ .list-group-item {
207
+ display: flex;
208
+ justify-content: space-between;
209
+ align-items: center;
210
+
211
+ border: none;
212
+ /* separador sutil solo en la parte inferior */
213
+ border-bottom: 1px solid #e9ecef; /* Un gris muy claro estándar */
214
+ padding: 0.5rem 0.75rem;
215
+
216
+ /* animación suave para el cambio de fondo */
217
+ transition: background-color 0.2s ease-in-out;
181
218
  }
182
219
 
183
- /* 3. Efecto de foco para toda la barra */
184
- .chat-input-bar:focus-within {
185
- border-color: #86b7fe;
186
- box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
220
+ /* Al pasar el ratón, cambiamos el fondo para dar feedback */
221
+ .list-group-item:hover {
222
+ background-color: #f8f9fa; /* Un gris de fondo muy sutil */
223
+ }
224
+
225
+ /* Eliminamos el borde del último elemento para un acabado limpio */
226
+ .list-group-item:last-child {
227
+ border-bottom: none;
228
+ }
229
+
230
+ .file-name-modal {
231
+ flex: 1;
232
+ margin-right: 10px;
233
+ }
234
+ .remove-file-btn {
235
+ flex-shrink: 0;
236
+ }
237
+
238
+
239
+
240
+ /* Estos estilos son para las paginas publicas: home, signup, olvide la clave, etc */
241
+
242
+ /* --- Encabezado (top) de company --- */
243
+ .custom-company-header {
244
+ height: 78px;
245
+ margin-bottom: 20px;
246
+ padding: 0 1.5rem; /* Padding interno para que el texto no toque los bordes */
247
+ border-radius: 0.375rem; /* Bordes redondeados para que coincida con los formularios */
248
+
249
+ /* Los estilos de color y sombra se mantienen */
250
+ background-color: var(--brand-header-bg);
251
+ color: var(--brand-header-text);
252
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); /* Sombra ligeramente más suave */
253
+ }
254
+
255
+ /* Estilo específico para el nombre de la marca en el encabezado (Letra más grande) */
256
+ .custom-company-header .brand-name {
257
+ font-size: 1.8rem; /* Tamaño de fuente aumentado */
258
+ font-weight: 600;
259
+ color: inherit;
260
+ text-decoration: none;
261
+ transition: opacity 0.2s ease-in-out;
262
+ }
263
+
264
+ /* Efecto hover para el enlace del nombre de la marca */
265
+ .custom-company-header .brand-name:hover {
266
+ opacity: 0.85;
267
+ }
268
+
269
+ /* Estilo para el texto "Powered by" --- */
270
+ .custom-company-header .powered-by {
271
+ font-size: 0.9rem;
272
+ font-weight: 400;
273
+ opacity: 0.75; /* Menos prominente que el nombre de la marca */
274
+ color: inherit;
275
+ }
276
+
277
+ /* --- Estilo para el enlace de IAToolkit --- */
278
+ .custom-company-header .iatoolkit-link {
279
+ color: inherit; /* Hereda el color del texto padre */
280
+ text-decoration: none; /* ¡Elimina el subrayado! */
281
+ font-weight: 600; /* Un poco más de peso para diferenciarlo */
282
+ transition: opacity 0.2s ease-in-out;
283
+ }
284
+
285
+ .custom-company-header .form-container {
286
+ display: flex;
287
+ flex-direction: column;
288
+ gap: 1rem;
289
+ }
290
+
291
+ /* titulo en home */
292
+ .home-title {
293
+ font-size: 3.2rem;
294
+ font-weight: 800;
295
+ line-height: 1.2;
296
+ color: var(--brand-primary-color);
297
+ }
298
+ .list-example {
299
+ display: block; /* Coloca el ejemplo en su propia línea */
300
+ font-size: 0.9rem; /* Lo hace ligeramente más pequeño */
301
+ color: #6c757d; /* Color gris (muted) para texto secundario */
302
+ font-style: italic; /* Cursiva para diferenciarlo */
303
+ padding-left: 1.75rem; /* Lo indenta para alinearlo con el texto del tema */
304
+ margin-top: 0.25rem; /* Pequeño espacio superior */
305
+ }
306
+
307
+ .text-brand-primary {
308
+ font-weight: 800;
309
+ color: var(--brand-primary-color);
310
+ }
311
+
312
+ /* contenedor de formularios: login, signup, forgot password, etc. */
313
+ .branded-form-container {
314
+ background-color: #ffffff;
315
+ border: 1px solid #dee2e6;
316
+ border-top: 4px solid #adb5bd;
317
+ border-radius: 0.375rem;
318
+ padding: 2rem;
319
+ box-shadow: 0 4px 12px rgba(0,0,0,0.08);
320
+ }
321
+
322
+ .branded-form-label {
323
+ font-size: 0.85rem;
324
+ font-weight: 600;
325
+ color: #495057; /* Un gris oscuro profesional */
326
+ text-transform: uppercase;
327
+ letter-spacing: 0.05em; /* Un poco de espacio extra entre letras */
328
+ margin-bottom: 0.3rem;
329
+ display: block;
330
+ }
331
+
332
+ .branded-form-title {
333
+ color: var(--brand-primary-color);
334
+ font-size: 1.75rem; /* Un tamaño más prominente */
335
+ font-weight: 700; /* Equivalente a fw-bold de Bootstrap */
336
+ text-align: center;
337
+ margin-bottom: 1.5rem; /* Espacio consistente debajo del título */
338
+ }
339
+
340
+
341
+ /* Aplica el color secundario de la marca al icono de ver archivos */
342
+ #view-files-button i {
343
+ color: var(--brand-secondary-color, #6c757d);
187
344
  }
188
345
 
189
346
  #prompt-assistant-collapse .card {
190
- border-radius: 1.5rem; /* Mismo radio que el chat-input-bar */
191
- border: 1px solid #dee2e6; /* Mismo borde que el chat-input-bar */
347
+ border-radius: 1rem; /* Mismo radio que el chat-input-bar */
348
+ border: 1px solid var(--brand-prompt-assistant-border, #dee2e6); /* Mismo borde que el chat-input-bar */
192
349
  box-shadow: none; /* Eliminamos la sombra por defecto del card */
193
350
  }
194
351
 
@@ -207,7 +364,7 @@
207
364
  min-height: 38px;
208
365
  }
209
366
 
210
- /* 5. NUEVO Estilo UNIFICADO para los enlaces de iconos de acción */
367
+ /* Estilo UNIFICADO para los enlaces de iconos de acción */
211
368
  .action-icon-style {
212
369
  color: #6c757d; /* Color gris estándar por defecto */
213
370
  transition: opacity 0.2s ease-in-out;
@@ -227,13 +384,18 @@
227
384
  color: #6c757d;
228
385
  transition: color 0.2s ease-in-out;
229
386
  }
387
+
388
+ /* Anulación específica para el icono de la varita mágica */
389
+ .chat-input-bar a[href="#prompt-assistant-collapse"] i {
390
+ color: var(--brand-prompt-assistant-icon-color, #6c757d);
391
+ }
392
+
230
393
  .chat-input-bar .d-flex a:hover i {
231
394
  color: #343a40;
232
395
  }
233
396
 
234
397
  /* 6. Anulación específica para el botón de ENVIAR usando su ID (Máxima Prioridad) */
235
398
  #send-button i {
236
- color: var(--brand-send-button-color); /* Usa la variable de branding */
237
399
  font-size: 1.7rem; /* Ligeramente más grande */
238
400
  }
239
401
  #send-button:hover i {
@@ -246,12 +408,6 @@
246
408
  pointer-events: none; /* Lo hace no-clicable */
247
409
  }
248
410
 
249
- @media (max-width: 768px) {
250
- #chat-container {
251
- height: 68vh;
252
- }
253
- }
254
-
255
411
  .filepond--credits {
256
412
  display: none; /* Ocultar créditos de FilePond */
257
413
  }
@@ -289,8 +445,8 @@
289
445
  }
290
446
 
291
447
  .dropdown-menu-soft {
292
- background-color: #f8f9fa;
293
- border-color: #dee2e6;
448
+ background-color: var(--brand-prompt-assistant-dropdown-bg, #f8f9fa);
449
+ border-color: var(--brand-prompt-assistant-border, #dee2e6);
294
450
  }
295
451
 
296
452
  .dropdown-menu-soft .dropdown-item {
@@ -299,15 +455,15 @@
299
455
 
300
456
  .dropdown-menu-soft .dropdown-item:hover,
301
457
  .dropdown-menu-soft .dropdown-item:focus {
302
- color: #ffffff;
303
- background-color: #495057;
458
+ color: var(--brand-prompt-assistant-item-hover-text, #ffffff);
459
+ background-color: var(--brand-prompt-assistant-item-hover-bg, #495057);
304
460
  padding-left: 1.5rem;
305
461
  transition: all 0.15s ease-in-out;
306
462
  }
307
463
 
308
464
  .dropdown-menu-soft .dropdown-header {
309
- background-color: #495057;
310
- color: #ffffff;
465
+ background-color: var(--brand-prompt-assistant-header-bg, #495057);
466
+ color: var(--brand-prompt-assistant-header-text, #ffffff);
311
467
  font-weight: 600;
312
468
  margin: 4px;
313
469
  padding: 0.4rem 1rem;
@@ -318,6 +474,30 @@
318
474
  border-bottom: none;
319
475
  }
320
476
 
477
+ .prompt-select-button {
478
+ /* Estado por defecto: Estilo "outline" sutil */
479
+ background-color: var(--brand-primary-color);
480
+ color: var(--brand-text-on-primary);
481
+ border: 1px solid var(--brand-primary-color); /* Borde fino con el color primario */
482
+
483
+ /* Estilos de botón estándar */
484
+ border-radius: 0.25rem;
485
+ padding: 0.5rem 1rem;
486
+ cursor: pointer;
487
+ text-align: center;
488
+ font-weight: 500; /* Un poco más de peso para el texto */
489
+
490
+ /* Transición suave para el cambio en hover */
491
+ transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
492
+ }
493
+
494
+ .prompt-select-button:hover {
495
+ /* Estado hover: Se rellena para dar feedback claro */
496
+ background-color: transparent;
497
+ color: var(--brand-primary-color);
498
+ }
499
+
500
+
321
501
  #clear-selection-button {
322
502
  position: absolute;
323
503
  top: 50%;
@@ -333,92 +513,80 @@
333
513
  color: #212529;
334
514
  }
335
515
 
336
-
337
- /* Estilos para el modal de feedback */
338
- .icon-spaced {
339
- margin-right: 10px;
516
+ #send-button i {
517
+ color: var(--brand-send-button-color);
340
518
  }
341
519
 
342
- .modal-title{
343
- font-size: 20px;
344
- font-weight: bold;
345
- }
520
+ /* Estilos personalizados para Toastr usando las variables de Branding */
346
521
 
347
- .text-muted{
348
- font-size:16px;
349
- text-align: justify;
522
+ /* --- Toast de Información (Usa el color primario de la marca) --- */
523
+ .toast-info {
524
+ /* ¡Importante! Usamos las variables CSS de tu BrandingService */
525
+ background-color: var(--brand-primary-color) !important;
526
+ color: var(--brand-text-on-primary) !important;
527
+ opacity: 0.95 !important;
350
528
  }
351
-
352
- .feedback-text{
353
- font-size: 16px;
529
+ .toast-info .toast-progress {
530
+ /* Usamos un color ligeramente más oscuro o una variante,
531
+ pero para simplificar, podemos empezar con el mismo */
532
+ background-color: rgba(0, 0, 0, 0.2) !important;
354
533
  }
355
534
 
356
- /* Estilos para el modal de historial */
357
-
358
- .thead-dark th{
359
- font-size: 16px;
360
- font-weight: bold;
535
+ /* --- Toast de Éxito (Usa el verde por defecto o uno de marca si lo defines) --- */
536
+ .toast-success {
537
+ background-color: #198754 !important; /* Puedes crear una variable --brand-success-color si quieres */
538
+ color: #ffffff !important;
539
+ opacity: 0.95 !important;
361
540
  }
362
-
363
- #history-content .table td:nth-child(1) { width: 5%; }
364
- #history-content .table td:nth-child(2) { width: 20%; }
365
- #history-content .table td:nth-child(3) { width: auto; }
366
-
367
- /* Contenedor de calificación con estrellas */
368
- .rating-container {
369
- text-align: center;
370
- margin: 10px 0 0 0;
371
- display: flex;
372
- flex-direction: column;
373
- justify-content: center;
374
- align-items: center;
375
- gap: 5px;
376
- width: 100%;
541
+ .toast-success .toast-progress {
542
+ background-color: rgba(0, 0, 0, 0.2) !important;
377
543
  }
378
544
 
379
- .rating-stars-container{
380
- text-align: center;
381
- margin: 2px 0 0 0;
382
- display: flex;
383
- flex-direction: row;
384
- justify-content: center;
385
- align-items: center;
386
- gap: 10px;
387
- width: 100%;
545
+ /* --- Toast de Error (Usa el color de peligro de la marca) --- */
546
+ .toast-error{
547
+ background-color: var(--brand-danger-color) !important;
548
+ color: var(--brand-text-on-primary) !important; /* Asumimos texto blanco sobre el color de peligro */
549
+ opacity: 0.95 !important;
550
+ }
551
+ .toast-error .toast-progress {
552
+ background-color: rgba(0, 0, 0, 0.2) !important;
388
553
  }
389
554
 
390
- /* --- ESTILOS PARA EL WIDGET DE ESTRELLAS DE FEEDBACK --- */
391
- .rating-stars {
392
- display: flex;
393
- justify-content: center;
394
- gap: 5px;
395
- margin-bottom: 15px;
396
- padding-top: 5px;
397
- }
398
- .star {
399
- font-size: 2rem;
400
- color: #adb5bd;
401
- cursor: pointer;
402
- transition: color 0.2s, transform 0.2s;
555
+ /* Opcional: Estilo para el botón de cierre para que contraste bien */
556
+ .toast-close-button {
557
+ color: var(--brand-text-on-primary) !important;
558
+ text-shadow: none !important;
403
559
  }
404
- .star:hover {
405
- transform: scale(1.15);
560
+ .toast-close-button:hover {
561
+ opacity: 0.8;
406
562
  }
407
- .star::before {
408
- font-family: 'bootstrap-icons';
409
- content: "\F586";
410
- font-style: normal;
411
- font-weight: normal;
412
- line-height: 1;
413
- -webkit-font-smoothing: antialiased;
563
+
564
+ .alert-branded-danger {
565
+ background-color: var(--brand-danger-bg);
566
+ color: var(--brand-danger-text);
567
+ border-color: var(--brand-danger-border);
414
568
  }
415
- .star.active::before,
416
- .star.hover-active::before {
417
- content: "\F587";
569
+ /* Asegura que el texto fuerte y los enlaces dentro de la alerta también tomen el color correcto */
570
+ .alert-branded-danger strong,
571
+ .alert-branded-danger .alert-link {
572
+ color: inherit;
418
573
  }
419
- .star.active,
420
- .star.hover-active {
421
- color: #ffc107;
574
+
575
+ .edit-pencil {
576
+ color: var(--brand-secondary-color, #6c757d); /* Color secundario por defecto */
577
+ cursor: pointer;
578
+ opacity: 0.6;
579
+ text-decoration: none;
580
+ /* Transición suave para todos los cambios (color, opacidad, tamaño) */
581
+ transition: all 0.25s ease-in-out;
582
+ }
583
+
584
+ .edit-pencil:hover {
585
+ opacity: 1;
586
+ transform: scale(1.2);
587
+ color: var(--brand-primary-color, #4C6A8D);
588
+ cursor: pointer;
422
589
  }
423
590
 
424
591
 
592
+