iatoolkit 0.7.10__py3-none-any.whl → 0.7.11__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 (126) hide show
  1. iatoolkit/__init__.py +18 -14
  2. iatoolkit/base_company.py +5 -5
  3. iatoolkit/cli_commands.py +5 -3
  4. {common → iatoolkit/common}/auth.py +3 -3
  5. {common → iatoolkit/common}/routes.py +19 -19
  6. {common → iatoolkit/common}/util.py +2 -2
  7. iatoolkit/iatoolkit.py +37 -38
  8. {infra → iatoolkit/infra}/call_service.py +1 -1
  9. {infra → iatoolkit/infra}/connectors/file_connector_factory.py +5 -5
  10. {infra → iatoolkit/infra}/connectors/google_cloud_storage_connector.py +1 -1
  11. {infra → iatoolkit/infra}/connectors/google_drive_connector.py +1 -1
  12. {infra → iatoolkit/infra}/connectors/local_file_connector.py +2 -2
  13. {infra → iatoolkit/infra}/connectors/s3_connector.py +1 -1
  14. {infra → iatoolkit/infra}/gemini_adapter.py +2 -2
  15. {infra → iatoolkit/infra}/google_chat_app.py +1 -1
  16. {infra → iatoolkit/infra}/llm_client.py +7 -7
  17. {infra → iatoolkit/infra}/llm_proxy.py +6 -6
  18. {infra → iatoolkit/infra}/mail_app.py +1 -1
  19. {infra → iatoolkit/infra}/openai_adapter.py +2 -2
  20. {repositories → iatoolkit/repositories}/database_manager.py +1 -1
  21. {repositories → iatoolkit/repositories}/document_repo.py +3 -3
  22. {repositories → iatoolkit/repositories}/llm_query_repo.py +2 -2
  23. {repositories → iatoolkit/repositories}/profile_repo.py +2 -2
  24. {repositories → iatoolkit/repositories}/tasks_repo.py +2 -2
  25. {repositories → iatoolkit/repositories}/vs_repo.py +3 -3
  26. {services → iatoolkit/services}/benchmark_service.py +3 -3
  27. {services → iatoolkit/services}/dispatcher_service.py +9 -8
  28. {services → iatoolkit/services}/document_service.py +1 -1
  29. {services → iatoolkit/services}/excel_service.py +2 -2
  30. {services → iatoolkit/services}/file_processor_service.py +2 -2
  31. {services → iatoolkit/services}/history_service.py +4 -3
  32. {services → iatoolkit/services}/load_documents_service.py +11 -10
  33. {services → iatoolkit/services}/mail_service.py +2 -2
  34. {services → iatoolkit/services}/profile_service.py +6 -6
  35. {services → iatoolkit/services}/prompt_manager_service.py +5 -4
  36. {services → iatoolkit/services}/query_service.py +12 -11
  37. {services → iatoolkit/services}/search_service.py +2 -2
  38. {services → iatoolkit/services}/sql_service.py +4 -3
  39. {services → iatoolkit/services}/tasks_service.py +6 -6
  40. {services → iatoolkit/services}/user_feedback_service.py +3 -3
  41. {services → iatoolkit/services}/user_session_context_service.py +1 -1
  42. iatoolkit/static/images/arrow_up.png +0 -0
  43. iatoolkit/static/images/diagrama_iatoolkit.jpg +0 -0
  44. iatoolkit/static/images/logo_clinica.png +0 -0
  45. iatoolkit/static/images/logo_iatoolkit.png +0 -0
  46. iatoolkit/static/images/logo_maxxa.png +0 -0
  47. iatoolkit/static/images/logo_notaria.png +0 -0
  48. iatoolkit/static/images/logo_tarjeta.png +0 -0
  49. iatoolkit/static/images/logo_umayor.png +0 -0
  50. iatoolkit/static/images/upload.png +0 -0
  51. iatoolkit/static/js/chat_feedback.js +115 -0
  52. iatoolkit/static/js/chat_filepond.js +85 -0
  53. iatoolkit/static/js/chat_history.js +117 -0
  54. iatoolkit/static/js/chat_main.js +436 -0
  55. iatoolkit/static/styles/chat_iatoolkit.css +701 -0
  56. iatoolkit/static/styles/chat_info.css +53 -0
  57. iatoolkit/static/styles/chat_modal.css +136 -0
  58. iatoolkit/static/styles/llm_output.css +115 -0
  59. iatoolkit/static/temp/024f44a9-cc7e-4bde-9a3c-11903a8f5d3d.xlsx +0 -0
  60. iatoolkit/static/temp/0b97768e-79e8-43ec-b17e-ba3137f94e93.xlsx +0 -0
  61. iatoolkit/static/temp/202883ee-763e-4b40-9bb6-bfacfc5e65fe.xlsx +0 -0
  62. iatoolkit/static/temp/28287491-08b7-4863-a2a3-49fcb64a0906.xlsx +0 -0
  63. iatoolkit/static/temp/36780cac-7a46-4db4-ac98-7338a51aaf52.xlsx +0 -0
  64. iatoolkit/static/temp/5c1b66f6-d58f-4684-8a7a-df3bb1a35eaa.xlsx +0 -0
  65. iatoolkit/static/temp/5d5a3500-ec57-4e07-a554-8799a906d1ab.xlsx +0 -0
  66. iatoolkit/static/temp/65887e40-cf64-49aa-8d1f-651cb0f8cdf0.xlsx +0 -0
  67. iatoolkit/static/temp/6fa64b13-e8e5-40ad-8257-00fd1682dad8.xlsx +0 -0
  68. iatoolkit/static/temp/7ab7071f-ad9b-49e6-8e63-f08410625ce7.xlsx +0 -0
  69. iatoolkit/static/temp/824346d9-d54d-40c6-b5c2-9e1d84d0ae90.xlsx +0 -0
  70. iatoolkit/static/temp/9ca80c3d-d196-4dfc-8179-582584fae04c.xlsx +0 -0
  71. iatoolkit/static/temp/a34cb8a6-85fb-4ea8-aabe-889967cd83b5.xlsx +0 -0
  72. iatoolkit/static/temp/a7fc9c13-c509-4499-b4be-23bfa57cac31.xlsx +0 -0
  73. iatoolkit/static/temp/b83084f5-fe54-4580-885e-412b4388cbda.xlsx +0 -0
  74. iatoolkit/static/temp/c17c6864-34e1-448f-b0e9-380354256ea9.xlsx +0 -0
  75. iatoolkit/static/temp/customer_clusters.parquet +0 -0
  76. iatoolkit/static/temp/customer_clusters.xlsx +0 -0
  77. iatoolkit/static/temp/d1af98b8-18a9-4b94-b9bc-607d19a87d0d.xlsx +0 -0
  78. iatoolkit/templates/about.html +13 -0
  79. iatoolkit/templates/base.html +45 -0
  80. iatoolkit/templates/change_password.html +45 -0
  81. iatoolkit/templates/chat.html +180 -0
  82. iatoolkit/templates/chat_modals.html +115 -0
  83. iatoolkit/templates/error.html +15 -0
  84. iatoolkit/templates/forgot_password.html +33 -0
  85. iatoolkit/templates/header.html +31 -0
  86. iatoolkit/templates/home.html +201 -0
  87. iatoolkit/templates/login.html +43 -0
  88. iatoolkit/templates/signup.html +78 -0
  89. iatoolkit/templates/test.html +9 -0
  90. {views → iatoolkit/views}/change_password_view.py +1 -1
  91. {views → iatoolkit/views}/chat_token_request_view.py +2 -2
  92. {views → iatoolkit/views}/chat_view.py +3 -3
  93. {views → iatoolkit/views}/download_file_view.py +3 -3
  94. {views → iatoolkit/views}/external_chat_login_view.py +5 -5
  95. {views → iatoolkit/views}/external_login_view.py +2 -2
  96. {views → iatoolkit/views}/file_store_view.py +2 -2
  97. {views → iatoolkit/views}/forgot_password_view.py +1 -1
  98. {views → iatoolkit/views}/history_view.py +2 -2
  99. {views → iatoolkit/views}/home_view.py +1 -1
  100. {views → iatoolkit/views}/llmquery_view.py +2 -2
  101. {views → iatoolkit/views}/login_view.py +1 -1
  102. {views → iatoolkit/views}/prompt_view.py +2 -2
  103. {views → iatoolkit/views}/signup_view.py +1 -1
  104. {views → iatoolkit/views}/tasks_review_view.py +2 -2
  105. {views → iatoolkit/views}/tasks_view.py +2 -2
  106. {views → iatoolkit/views}/user_feedback_view.py +2 -2
  107. {views → iatoolkit/views}/verify_user_view.py +1 -1
  108. {iatoolkit-0.7.10.dist-info → iatoolkit-0.7.11.dist-info}/METADATA +1 -1
  109. iatoolkit-0.7.11.dist-info/RECORD +128 -0
  110. iatoolkit-0.7.11.dist-info/top_level.txt +1 -0
  111. iatoolkit-0.7.10.dist-info/RECORD +0 -80
  112. iatoolkit-0.7.10.dist-info/top_level.txt +0 -6
  113. {common → iatoolkit/common}/__init__.py +0 -0
  114. {common → iatoolkit/common}/exceptions.py +0 -0
  115. {common → iatoolkit/common}/session_manager.py +0 -0
  116. {infra → iatoolkit/infra}/__init__.py +0 -0
  117. {infra → iatoolkit/infra}/connectors/__init__.py +0 -0
  118. {infra → iatoolkit/infra}/connectors/file_connector.py +0 -0
  119. {infra → iatoolkit/infra}/llm_response.py +0 -0
  120. {infra → iatoolkit/infra}/redis_session_manager.py +0 -0
  121. {repositories → iatoolkit/repositories}/__init__.py +0 -0
  122. {repositories → iatoolkit/repositories}/models.py +0 -0
  123. {services → iatoolkit/services}/__init__.py +0 -0
  124. {services → iatoolkit/services}/jwt_service.py +0 -0
  125. {views → iatoolkit/views}/__init__.py +0 -0
  126. {iatoolkit-0.7.10.dist-info → iatoolkit-0.7.11.dist-info}/WHEEL +0 -0
@@ -0,0 +1,701 @@
1
+ /* Spinner */
2
+ .spinning {
3
+ animation: spin 1s linear infinite;
4
+ font-size: 15px; /* Tamaño del ícono */
5
+ display: inline-block;
6
+ }
7
+
8
+ @keyframes spin {
9
+ 0% { transform: rotate(0deg); }
10
+ 100% { transform: rotate(360deg); }
11
+ }
12
+
13
+ /* Estilos para el contenedor del chat y mensajes para que exista scroll */
14
+ #chat-container {
15
+ max-height: 70vh;
16
+ overflow-y: auto;
17
+ display: flex;
18
+ flex-direction: column;
19
+ }
20
+ .answer-section, .error-section, .document-section {
21
+ max-width: 100%;
22
+ word-wrap: break-word;
23
+ margin-bottom: 10px;
24
+ }
25
+
26
+ .input-container {
27
+ flex: 1;
28
+ display: flex;
29
+ /* Organiza los elementos internos (la fila de inputs y el textarea) uno sobre otro */
30
+ flex-direction: column;
31
+
32
+ }
33
+
34
+ /* Estilos para el modal de archivos y ordenar icono */
35
+ .list-group-item {
36
+ display: flex;
37
+ justify-content: space-between;
38
+ align-items: center;
39
+ }
40
+ .file-name-modal {
41
+ flex: 1;
42
+ margin-right: 10px;
43
+ }
44
+ .remove-file-btn {
45
+ flex-shrink: 0;
46
+ }
47
+ /* Estilos del header del modal*/
48
+ .modal-header {
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: space-between;
52
+ width: 100%;
53
+ }
54
+
55
+ .modal-header .modal-title {
56
+ margin: 0;
57
+ padding: 0;
58
+ flex: 1;
59
+ }
60
+
61
+ .modal-header .close {
62
+ margin: 0;
63
+ padding: 0;
64
+ margin-left: auto;
65
+ }
66
+
67
+ /* Titulo del modal */
68
+ .modal-title {
69
+ font-size: 1.5rem;
70
+ font-weight: bold;
71
+ }
72
+
73
+
74
+ /* Para el icono de eliminar del modal */
75
+ .remove-file-btn i {
76
+ color: #c82333
77
+ }
78
+
79
+ /* Modern Header Mejorado */
80
+ .modern-header {
81
+ display: flex;
82
+ justify-content: space-between;
83
+ align-items: center;
84
+ padding: 12px 30px; /* Espaciado optimizado */
85
+ background: linear-gradient(90deg, #3388ff, #003399); /* Azul más claro al inicio */
86
+ color: #ffffff; /* Texto blanco */
87
+ box-shadow: 0 3px 5px rgba(0, 0, 0, 0.08); /* Sombra más sutil */
88
+ position: sticky;
89
+ top: 0;
90
+ z-index: 1000;
91
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2); /* Línea blanca sutil abajo */
92
+ }
93
+
94
+ /* Ajustar el contenedor del logo */
95
+ .modern-header .logo-section {
96
+ display: flex;
97
+ align-items: center; /* Centra verticalmente la imagen dentro del header */
98
+ max-height: 100%; /* Asegura que siga el tamaño del contenedor */
99
+ }
100
+
101
+ /* Estilo general para la imagen del logo */
102
+ .modern-header .logo-section img {
103
+ max-height: 60px; /* Ajusta el tamaño máximo del logo */
104
+ max-width: 100%; /* Evita desbordamiento horizontal */
105
+ height: auto; /* Mantiene la proporción de la imagen */
106
+ object-fit: contain; /* Evita deformaciones */
107
+ }
108
+
109
+
110
+ /* Estilo del mensaje ingresado por el usuario */
111
+ #chat-container .message {
112
+ /* Propiedades de layout y forma (se mantienen del original) */
113
+ margin-top: 10px;
114
+ max-width: 75%;
115
+ min-width: fit-content;
116
+ width: fit-content;
117
+ border-radius: 12px 12px 0px 12px;
118
+ word-wrap: break-word;
119
+ display: inline-flex;
120
+ align-items: center;
121
+ align-self: flex-end;
122
+ text-align: left;
123
+
124
+ /* Propiedades estéticas (adoptadas de .llm-output) */
125
+ padding: 15px;
126
+ font-family: Arial, sans-serif;
127
+ font-size: 15px;
128
+ line-height: 1.5;
129
+ color: #333;
130
+ background-color: #ffffff; /* Fondo blanco para consistencia */
131
+ border: 1px solid #ddd; /* Borde sutil como en las tablas */
132
+ }
133
+
134
+
135
+ .answer-section {
136
+ color: #202123; /* Texto negro suave */
137
+ font-family: "Inter", Arial, sans-serif; /* Fuente moderna */
138
+ font-size: 16px;
139
+ line-height: 1.6;
140
+ word-wrap: break-word;
141
+ padding-top: 0.5em;
142
+ }
143
+
144
+ .error-section {
145
+ /* Layout y Alineación (Burbuja a la izquierda) */
146
+ align-self: flex-start; /* Alinea a la izquierda, como los mensajes del asistente */
147
+ max-width: 75%;
148
+ min-width: fit-content; /* Se ajusta al contenido mínimo */
149
+ width: fit-content;
150
+ margin-top: 10px;
151
+ display: flex;
152
+ align-items: flex-start; /* Alinea el ícono con la primera línea de texto */
153
+ gap: 12px; /* Un espaciado más generoso entre el ícono y el texto */
154
+
155
+ /* Estilo Visual de Burbuja de Error */
156
+ background-color: #fff0f0; /* Un rojo muy pálido y suave */
157
+ color: #5c0f0f; /* Texto en un rojo oscuro para buena legibilidad */
158
+ border: 1px solid #ffcccc; /* Borde en un tono de rojo ligeramente más oscuro */
159
+ padding: 12px 18px; /* Espaciado interno optimizado */
160
+ border-radius: 0 12px 12px 12px; /* Forma de burbuja (esquina superior izquierda recta) */
161
+ font-family: Arial, sans-serif;
162
+ font-size: 15px;
163
+ line-height: 1.5;
164
+ word-wrap: break-word; /* Mantenemos el ajuste de texto */
165
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); /* Sombra muy sutil para darle profundidad */
166
+ }
167
+
168
+ .error-section i {
169
+ color: #d32f2f; /* Un rojo más vibrante para el ícono, para que destaque */
170
+ font-size: 1.2em; /* Ícono un poco más grande para mayor impacto visual */
171
+ padding-top: 2px; /* Pequeño ajuste para alinear visualmente mejor con el texto */
172
+ }
173
+
174
+
175
+ .list-unstyled {
176
+ margin: 0;
177
+ padding: 0;
178
+ list-style: none;
179
+ }
180
+
181
+ /* Ajustes generales para la sección de validación */
182
+ .document-section {
183
+ display: flex;
184
+ border-radius: 15px;
185
+ margin-top: 10px;
186
+ padding: 10px;
187
+ text-align: left;
188
+ background-color: #ffffff; /* Fondo blanco */
189
+ flex-direction: column; /* Asegura que las filas se apilen verticalmente */
190
+ max-width: 70%;
191
+ border: 1px solid #d6d6d6; /* Borde neutro */
192
+ }
193
+
194
+ .row {
195
+ display: flex;
196
+ flex-wrap: nowrap; /* Evitar que los elementos salten de línea */
197
+ }
198
+
199
+ .col-auto {
200
+ display: inline-block; /* Asegura que ocupen solo el ancho necesario */
201
+ }
202
+
203
+ .document-section .rejection-reasons {
204
+ flex: 1;
205
+ margin-top: 10px;
206
+ margin-left: 25px;
207
+ display: block;
208
+ }
209
+
210
+ .rejection-reasons ul {
211
+ margin-left: 15px; /* Sangría para las listas */
212
+ padding: 0;
213
+ list-style: disc; /* Estilo de punto para las viñetas */
214
+ }
215
+
216
+ .document-section ul {
217
+ margin-left: 10px; /* Sangría para listas */
218
+ padding: 0;
219
+ list-style: disc inside; /* Estilo de viñetas alineadas */
220
+ }
221
+
222
+
223
+ .input-container {
224
+ width: 100%;
225
+ display: flex;
226
+ justify-content: center;
227
+ }
228
+
229
+ #question {
230
+ width: 100%;
231
+ font-size: 15px;
232
+ background: #f8f9fa; /* Fondo gris claro */
233
+ color: #202123; /* Texto oscuro */
234
+ border: 1px solid #d1d5db;
235
+ transition: border-color 0.2s ease-in-out;
236
+ }
237
+
238
+ #question:focus {
239
+ outline: none;
240
+ border-color: #0084ff; /* Azul vibrante */
241
+ box-shadow: 0 0 5px rgba(0, 132, 255, 0.3);
242
+ }
243
+
244
+
245
+ .filepond--panel {
246
+ padding: 0; /* Elimina cualquier relleno adicional del contenedor */
247
+ }
248
+
249
+ /* bordered drop area */
250
+ .filepond--panel-root {
251
+ background-color: transparent;
252
+ }
253
+
254
+ /* Contenedor de los archivos cargados (FilePond) */
255
+ .filepond-container {
256
+ width: 100%; /* Se estira todo lo que pueda */
257
+ border: 2px dashed #adb5bd; /* Gris, igual al textarea */
258
+ border-radius: 5px; /* Igual que el textarea */
259
+ padding: 10px;
260
+ min-height: 70px; /* Mantiene altura mínima */
261
+ max-height: 200px; /* Evita que crezca demasiado */
262
+ overflow-y: auto; /* Permite scroll si es necesario */
263
+ background-color: #f8f9fa; /* Gris claro, igual al textarea */
264
+ display: flex;
265
+ align-items: center;
266
+ justify-content: center;
267
+ text-align: center;
268
+ color: #6c757d; /* Color de prompt_llm.txt sutil */
269
+ }
270
+
271
+ .filepond--item {
272
+ width: calc(40% - 0.5em);/* Ancho dinámico basado en el contenido */
273
+ border-radius: 5px; /* Bordes curvados */
274
+ text-align: left; /* Alinea el prompt_llm.txt a la izquierda */
275
+ white-space: nowrap; /* Evita dividir el prompt_llm.txt en varias líneas */
276
+ overflow: hidden; /* Oculta cualquier desbordamiento */
277
+ text-overflow: ellipsis; /* Muestra puntos suspensivos si el prompt_llm.txt es muy largo */
278
+ }
279
+
280
+ .filepond--drop-label {
281
+ display: none; /* Opcional: Oculta el mensaje de arrastrar y soltar si no lo necesitas */
282
+ }
283
+
284
+ /* the text color of the file status and info labels */
285
+ .filepond--file {
286
+ color: black;
287
+ background-color: #d1e3f1;
288
+ }
289
+
290
+ .custom-confirm-button {
291
+ background-color: #0066cc;
292
+ color: white; /* Color del prompt_llm.txt */
293
+ border: none; /* Sin borde */
294
+ box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); /* Sombra */
295
+ }
296
+
297
+ .custom-confirm-button:hover {
298
+ background-color: #0066cc; /* Color al pasar el mouse */
299
+ }
300
+
301
+ .custom-cancel-button {
302
+ background-color: #dc3545; /* Color de fondo (rojo) */
303
+ color: white; /* Color del prompt_llm.txt */
304
+ }
305
+
306
+ .custom-cancel-button:hover {
307
+ background-color: #c82333; /* Color al pasar el mouse */
308
+ }
309
+
310
+ /* 1. La caja principal que envuelve toda el área de entrada */
311
+ .input-area {
312
+ background-color: #f8f9fa;
313
+ padding: 10px;
314
+ border-radius: 10px;
315
+ box-shadow: 0 -2px 5px rgba(0,0,0,0.05);
316
+ }
317
+
318
+ /* 2. La barra "cápsula" que envuelve el texto y los iconos */
319
+ .chat-input-bar {
320
+ background-color: #ffffff;
321
+ border: 1px solid #dee2e6;
322
+ border-radius: 1.5rem;
323
+ padding: 0.25rem 0.5rem;
324
+ transition: all 0.2s ease-in-out;
325
+ }
326
+
327
+ /* 3. Efecto de foco para toda la barra */
328
+ .chat-input-bar:focus-within {
329
+ border-color: #86b7fe;
330
+ box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
331
+ }
332
+
333
+ /* 4. El textarea "invisible" en el centro */
334
+ .chat-textarea {
335
+ flex-grow: 1;
336
+ background: transparent !important;
337
+ border: none !important;
338
+ box-shadow: none !important;
339
+ resize: none;
340
+ max-height: 150px;
341
+ min-height: 38px;
342
+ }
343
+
344
+ /* 5. Estilo UNIFICADO para todos los iconos de acción secundarios */
345
+ .action-icon-style i {
346
+ color: #6c757d; /* Color gris estándar DIRECTAMENTE al icono */
347
+ font-size: 1.5rem; /* Tamaño uniforme */
348
+ vertical-align: middle;
349
+ transition: color 0.2s ease-in-out;
350
+ }
351
+ .action-icon-style:hover i {
352
+ color: #343a40; /* El color del icono cambia en hover */
353
+ }
354
+ /* Aplica también a los iconos de la barra de entrada */
355
+ .chat-input-bar .d-flex a i {
356
+ font-size: 1.5rem;
357
+ vertical-align: middle;
358
+ color: #6c757d;
359
+ transition: color 0.2s ease-in-out;
360
+ }
361
+ .chat-input-bar .d-flex a:hover i {
362
+ color: #343a40;
363
+ }
364
+
365
+
366
+ /* 6. Anulación de color y tamaño para el botón de ENVIAR */
367
+ .send-button-icon i {
368
+ color: #0d6efd !important; /* Azul (importante para anular) */
369
+ font-size: 1.7rem !important; /* Ligeramente más grande para mayor énfasis */
370
+ }
371
+ .send-button-icon:hover i {
372
+ color: #0b5ed7 !important; /* Azul más oscuro en hover */
373
+ }
374
+
375
+ /* 7. Estilo para el botón de enviar cuando está deshabilitado */
376
+ .send-button-icon.disabled {
377
+ opacity: 0.4;
378
+ pointer-events: none; /* Lo hace no-clicable */
379
+ }
380
+
381
+ @media (max-width: 768px) {
382
+ #chat-container {
383
+ height: 68vh;
384
+ }
385
+ }
386
+
387
+ .edit-icon {
388
+ margin-left: 8px; /* Ajusta según el espacio deseado */
389
+ }
390
+
391
+ .message:hover .edit-icon {
392
+ color: #007bff; /* Un color azul que contrasta bien con el fondo blanco */
393
+ }
394
+
395
+ #chat-container {
396
+ background-color: #fff; /* Fondo blanco para el contenedor del chat */
397
+ box-shadow: 0 0 10px rgba(0,0,0,0.1); /* Sombra sutil */
398
+ }
399
+
400
+ #question {
401
+ transition: box-shadow 0.3s ease-in-out;
402
+ }
403
+
404
+ #question:focus {
405
+ border-color: #80bdff;
406
+ box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
407
+ }
408
+
409
+
410
+ .filepond--credits {
411
+ display: none; /* Ocultar créditos de FilePond */
412
+ }
413
+
414
+ /* Si FilePond sigue mostrando algo, intentar ocultarlo más agresivamente. */
415
+ /* Se accede al contenedor principal de FilePond que se crea automáticamente */
416
+ .filepond--root {
417
+ display: none;
418
+ visibility: hidden;
419
+ height: 0;
420
+ width: 0;
421
+ overflow: hidden;
422
+ position: absolute; /* Sacarlo del flujo del documento */
423
+ left: -9999px; /* Moverlo fuera de la pantalla */
424
+ }
425
+
426
+ /* Estilos para la barra de tareas*/
427
+ .company-section {
428
+ padding: 10px;
429
+ background-color: #f8f9fa;
430
+ border-radius: 10px;
431
+ border: 1px solid #e9ecef;
432
+ margin-right: 10px;
433
+ margin-bottom: 5px;
434
+ text-align: right
435
+ }
436
+
437
+
438
+ /* Estilo para el input de datos específicos cuando tiene contenido */
439
+ .specific-data-input.has-content {
440
+ background-color: #e9f3ed !important; /* Fondo verde muy pálido */
441
+ border-color: #198754 !important; /* Borde en verde 'success' */
442
+ border-width: 2px !important; /* Borde más grueso */
443
+ color: #0a5833 !important; /* Texto en verde oscuro */
444
+ font-weight: 500 !important; /* Fuente un poco más gruesa */
445
+ box-shadow: 0 1px 4px rgba(25, 135, 84, 0.2) !important; /* Sombra sutil y más suave */
446
+ }
447
+
448
+ /* Ajuste para la etiqueta flotante */
449
+ .specific-data-input.has-content + label {
450
+ color: #0a5833 !important; /* Aseguramos que el color de la etiqueta coincida */
451
+ }
452
+
453
+ /* Estilo para el botón de limpiar */
454
+ .clear-specific-data-button {
455
+ position: absolute;
456
+ top: 50%;
457
+ right: 15px; /* Lo mueve desde la derecha */
458
+ transform: translateY(-50%); /* Lo centra verticalmente */
459
+ z-index: 5; /* Se asegura de que esté por encima del input */
460
+ padding: 0.25rem 0.5rem;
461
+ color: #6c757d;
462
+ background-color: transparent;
463
+ border: none; /* Aseguramos que no tenga borde */
464
+ }
465
+
466
+ .clear-specific-data-button:hover {
467
+ color: #212529;
468
+ }
469
+
470
+
471
+ /* Estilo personalizado para un input más suave */
472
+ .form-control-soft {
473
+ background-color: #f8f9fa; /* Fondo gris muy claro, como en la opción 2 */
474
+ border-color: #dee2e6; /* Un borde inicial muy sutil */
475
+ transition: all 0.2s ease-in-out; /* Transición suave para los efectos */
476
+ }
477
+
478
+ /* Efecto al hacer clic (focus) */
479
+ .form-control-soft:focus {
480
+ border-color: #198754; /* El borde toma el color verde 'success' de Bootstrap */
481
+ box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); /* Resplandor a juego con el borde verde */
482
+ color: #000;
483
+ }
484
+
485
+ .btn-dropdown-soft {
486
+ background-color: #f8f9fa; /* Mismo fondo gris claro que el input */
487
+ border: 1px solid #dee2e6; /* Borde inicial sutil */
488
+ color: #495057; /* Color de texto estándar */
489
+ transition: all 0.2s ease-in-out; /* Transición suave */
490
+ height: 100%; /* Asegura que tenga la misma altura que el input de al lado */
491
+ }
492
+
493
+ /* Efecto cuando el menú está abierto (similar al :focus del input) */
494
+ .btn-dropdown-soft[aria-expanded="true"] {
495
+ background-color: #ffffff;
496
+ border-color: #198754; /* Borde verde 'success' */
497
+ box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); /* Resplandor verde */
498
+ }
499
+
500
+ /* Pequeño ajuste al pasar el ratón para que no cambie de color a menos que esté activo */
501
+ .btn-dropdown-soft:hover {
502
+ background-color: #f8f9fa;
503
+ border-color: #ced4da;
504
+ }
505
+
506
+ /* 2. Estilo para el menú desplegable y sus ítems */
507
+ .dropdown-menu-soft {
508
+ background-color: #f8f9fa;
509
+ border-color: #dee2e6;
510
+ }
511
+
512
+ /* Estilo y efecto para cada opción de la lista */
513
+ .dropdown-menu-soft .dropdown-item {
514
+ transition: all 0.15s ease-in-out; /* Transición para el efecto hover */
515
+ }
516
+
517
+ .dropdown-menu-soft .dropdown-item:hover,
518
+ .dropdown-menu-soft .dropdown-item:focus {
519
+ color: #ffffff; /* Nuevo color de texto: blanco */
520
+ background-color: #495057; /* Nuevo color de fondo: verde oscuro */
521
+ padding-left: 1.5rem; /* Mantenemos el efecto de indentación */
522
+ transition: all 0.15s ease-in-out; /* Mantenemos la transición suave */
523
+ }
524
+
525
+ /* Estilo para las cabeceras de las categorías dentro del menú */
526
+ .dropdown-menu-soft .dropdown-header {
527
+ background-color: #495057; /* Gris oscuro estándar de Bootstrap, muy legible */
528
+ color: #ffffff; /* Texto en blanco para un contraste nítido */
529
+ font-weight: 600; /* Grosor semibold, ideal para este contraste */
530
+
531
+ /* Pequeños ajustes para un look pulido */
532
+ margin: 4px; /* Un pequeño margen para que "respire" */
533
+ padding: 0.4rem 1rem; /* Espaciado interno equilibrado */
534
+ border-radius: 4px; /* Bordes sutilmente redondeados */
535
+ font-size: 0.85rem; /* Tamaño de fuente ajustado */
536
+ text-transform: none; /* Texto en formato normal para una apariencia más limpia */
537
+ letter-spacing: normal;
538
+ border-bottom: none; /* Nos aseguramos de quitar cualquier línea inferior */
539
+ }
540
+
541
+
542
+ /* Estilo para el texto de placeholder */
543
+ .form-control-soft::placeholder {
544
+ color: #6c757d; /* Color de texto gris estándar */
545
+ opacity: 1;
546
+ }
547
+
548
+ #clear-selection-button {
549
+ position: absolute;
550
+ top: 50%;
551
+ /* Lo movemos 45px desde la derecha para que no se superponga con la flecha del dropdown */
552
+ right: 45px;
553
+ transform: translateY(-50%);
554
+ z-index: 5; /* Asegura que esté por encima del botón principal */
555
+ padding: 0.25rem 0.5rem;
556
+ color: #6c757d; /* Color gris estándar */
557
+ background-color: transparent;
558
+ }
559
+
560
+ #clear-selection-button:hover {
561
+ color: #212529; /* Se oscurece un poco al pasar el mouse */
562
+ }
563
+
564
+
565
+ /* Estilos para el modal de feedback */
566
+ .icon-spaced {
567
+ margin-right: 10px;
568
+ }
569
+
570
+ .modal-title{
571
+ font-size: 20px;
572
+ font-weight: bold;
573
+ }
574
+
575
+ .text-muted{
576
+ font-size:16px;
577
+ text-align: justify;
578
+ }
579
+
580
+ .feedback-text{
581
+ font-size: 16px;
582
+ }
583
+
584
+ /* Estilos para el modal de historial */
585
+
586
+ .thead-dark th{
587
+ font-size: 16px;
588
+ font-weight: bold;
589
+ }
590
+
591
+ /* Control de ancho de columnas en la tabla del historial */
592
+ #history-content .table td:nth-child(1) {
593
+ width: 5%; /* Columna del número */
594
+ }
595
+
596
+ #history-content .table td:nth-child(2) {
597
+ width: 20%; /* Columna de la fecha */
598
+ }
599
+
600
+ #history-content .table td:nth-child(3) {
601
+ width: auto; /* Columna de la consulta - ocupa el resto */
602
+ }
603
+
604
+ /* Botones de feedback y historial */
605
+ .buttons-container {
606
+ display: flex;
607
+ justify-content: center;
608
+ align-items: center;
609
+ width: 100%;
610
+ gap: 12px;
611
+ }
612
+
613
+ /* Contenedor de calificación con estrellas */
614
+ .rating-container {
615
+ text-align: center;
616
+ margin: 10px 0 0 0;
617
+ display: flex;
618
+ flex-direction: column;
619
+ justify-content: center;
620
+ align-items: center;
621
+ gap: 5px;
622
+ width: 100%;
623
+ }
624
+
625
+ .rating-stars-container{
626
+ text-align: center;
627
+ margin: 2px 0 0 0;
628
+ display: flex;
629
+ flex-direction: row;
630
+ justify-content: center;
631
+ align-items: center;
632
+ gap: 10px;
633
+ width: 100%;
634
+ }
635
+
636
+ /* --- ESTILOS PARA EL WIDGET DE ESTRELLAS DE FEEDBACK --- */
637
+
638
+ /* Contenedor para alinear las estrellas y darles espacio */
639
+ .rating-stars {
640
+ display: flex;
641
+ justify-content: center; /* Centra las estrellas en el modal */
642
+ gap: 5px; /* Espacio entre las estrellas */
643
+ margin-bottom: 15px; /* Espacio debajo de las estrellas */
644
+ padding-top: 5px; /* Espacio superior para que no se peguen al texto */
645
+ }
646
+
647
+ /* Estilo base para cada estrella */
648
+ .star {
649
+ font-size: 2rem; /* Tamaño de las estrellas */
650
+ color: #adb5bd; /* Color de las estrellas inactivas (gris) */
651
+ cursor: pointer; /* Cursor de mano para indicar que son clickeables */
652
+ transition: color 0.2s, transform 0.2s; /* Transición suave para el color y el tamaño */
653
+ }
654
+
655
+ /* Efecto visual al pasar el mouse por encima */
656
+ .star:hover {
657
+ transform: scale(1.15); /* Agranda un poco la estrella */
658
+ }
659
+
660
+ /*
661
+ * La magia principal ocurre aquí.
662
+ * Usamos el pseudo-elemento ::before para controlar qué ícono de Bootstrap se muestra.
663
+ */
664
+
665
+ /* Por defecto, todas las estrellas muestran el ícono de estrella VACÍA (`bi-star`) */
666
+ .star::before {
667
+ font-family: 'bootstrap-icons'; /* Asegúrate de que la fuente de íconos esté disponible */
668
+ content: "\F586"; /* Código Unicode para el ícono `bi-star` */
669
+ font-style: normal;
670
+ font-weight: normal;
671
+ line-height: 1;
672
+ -webkit-font-smoothing: antialiased;
673
+ }
674
+
675
+ /* Cuando una estrella tiene la clase .active (seleccionada) o .hover-active (bajo el cursor)... */
676
+ .star.active::before,
677
+ .star.hover-active::before {
678
+ content: "\F587"; /* ...cambia el contenido al ícono de estrella LLENA (`bi-star-fill`) */
679
+ }
680
+
681
+ /* Color para las estrellas seleccionadas o bajo el cursor */
682
+ .star.active,
683
+ .star.hover-active {
684
+ color: #ffc107; /* Color dorado estándar de Bootstrap */
685
+ }
686
+
687
+ /*
688
+ * para que la altura de un boton coincida con la altura de un componente .form-floating
689
+ */
690
+ .btn-form-floating-height {
691
+ height: calc(3.5rem + 2px) !important;
692
+ }
693
+
694
+
695
+ /* Estilo específico para el botón de Enviar */
696
+ .send-button-icon i {
697
+ color: #0d6efd; /* Azul de Bootstrap */
698
+ }
699
+ .send-button-icon:hover i {
700
+ color: #0b5ed7; /* Azul más oscuro en hover */
701
+ }