iatoolkit 0.11.0__py3-none-any.whl → 0.71.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 (122) hide show
  1. iatoolkit/__init__.py +2 -6
  2. iatoolkit/base_company.py +9 -29
  3. iatoolkit/cli_commands.py +1 -1
  4. iatoolkit/common/routes.py +96 -52
  5. iatoolkit/common/session_manager.py +2 -1
  6. iatoolkit/common/util.py +17 -27
  7. iatoolkit/company_registry.py +1 -2
  8. iatoolkit/iatoolkit.py +97 -53
  9. iatoolkit/infra/llm_client.py +15 -20
  10. iatoolkit/infra/llm_proxy.py +38 -10
  11. iatoolkit/infra/openai_adapter.py +1 -1
  12. iatoolkit/infra/redis_session_manager.py +48 -2
  13. iatoolkit/locales/en.yaml +167 -0
  14. iatoolkit/locales/es.yaml +163 -0
  15. iatoolkit/repositories/database_manager.py +23 -3
  16. iatoolkit/repositories/document_repo.py +1 -1
  17. iatoolkit/repositories/models.py +35 -10
  18. iatoolkit/repositories/profile_repo.py +3 -2
  19. iatoolkit/repositories/vs_repo.py +26 -20
  20. iatoolkit/services/auth_service.py +193 -0
  21. iatoolkit/services/branding_service.py +70 -25
  22. iatoolkit/services/company_context_service.py +155 -0
  23. iatoolkit/services/configuration_service.py +133 -0
  24. iatoolkit/services/dispatcher_service.py +80 -105
  25. iatoolkit/services/document_service.py +5 -2
  26. iatoolkit/services/embedding_service.py +146 -0
  27. iatoolkit/services/excel_service.py +30 -26
  28. iatoolkit/services/file_processor_service.py +4 -12
  29. iatoolkit/services/history_service.py +7 -16
  30. iatoolkit/services/i18n_service.py +104 -0
  31. iatoolkit/services/jwt_service.py +18 -29
  32. iatoolkit/services/language_service.py +83 -0
  33. iatoolkit/services/load_documents_service.py +100 -113
  34. iatoolkit/services/mail_service.py +9 -4
  35. iatoolkit/services/profile_service.py +152 -76
  36. iatoolkit/services/prompt_manager_service.py +20 -16
  37. iatoolkit/services/query_service.py +208 -96
  38. iatoolkit/services/search_service.py +11 -4
  39. iatoolkit/services/sql_service.py +57 -25
  40. iatoolkit/services/tasks_service.py +1 -1
  41. iatoolkit/services/user_feedback_service.py +72 -34
  42. iatoolkit/services/user_session_context_service.py +112 -54
  43. iatoolkit/static/images/fernando.jpeg +0 -0
  44. iatoolkit/static/js/chat_feedback_button.js +80 -0
  45. iatoolkit/static/js/chat_help_content.js +124 -0
  46. iatoolkit/static/js/chat_history_button.js +110 -0
  47. iatoolkit/static/js/chat_logout_button.js +36 -0
  48. iatoolkit/static/js/chat_main.js +135 -222
  49. iatoolkit/static/js/chat_onboarding_button.js +103 -0
  50. iatoolkit/static/js/chat_prompt_manager.js +94 -0
  51. iatoolkit/static/js/chat_reload_button.js +35 -0
  52. iatoolkit/static/styles/chat_iatoolkit.css +289 -210
  53. iatoolkit/static/styles/chat_modal.css +63 -77
  54. iatoolkit/static/styles/chat_public.css +107 -0
  55. iatoolkit/static/styles/landing_page.css +182 -0
  56. iatoolkit/static/styles/onboarding.css +176 -0
  57. iatoolkit/system_prompts/query_main.prompt +5 -22
  58. iatoolkit/templates/_company_header.html +20 -0
  59. iatoolkit/templates/_login_widget.html +42 -0
  60. iatoolkit/templates/base.html +40 -20
  61. iatoolkit/templates/change_password.html +57 -36
  62. iatoolkit/templates/chat.html +180 -86
  63. iatoolkit/templates/chat_modals.html +138 -68
  64. iatoolkit/templates/error.html +44 -8
  65. iatoolkit/templates/forgot_password.html +40 -23
  66. iatoolkit/templates/index.html +145 -0
  67. iatoolkit/templates/login_simulation.html +45 -0
  68. iatoolkit/templates/onboarding_shell.html +107 -0
  69. iatoolkit/templates/signup.html +63 -65
  70. iatoolkit/views/base_login_view.py +91 -0
  71. iatoolkit/views/change_password_view.py +56 -31
  72. iatoolkit/views/embedding_api_view.py +65 -0
  73. iatoolkit/views/external_login_view.py +61 -28
  74. iatoolkit/views/{file_store_view.py → file_store_api_view.py} +10 -3
  75. iatoolkit/views/forgot_password_view.py +27 -21
  76. iatoolkit/views/help_content_api_view.py +54 -0
  77. iatoolkit/views/history_api_view.py +56 -0
  78. iatoolkit/views/home_view.py +50 -23
  79. iatoolkit/views/index_view.py +14 -0
  80. iatoolkit/views/init_context_api_view.py +74 -0
  81. iatoolkit/views/llmquery_api_view.py +58 -0
  82. iatoolkit/views/login_simulation_view.py +93 -0
  83. iatoolkit/views/login_view.py +130 -37
  84. iatoolkit/views/logout_api_view.py +49 -0
  85. iatoolkit/views/profile_api_view.py +46 -0
  86. iatoolkit/views/{prompt_view.py → prompt_api_view.py} +10 -10
  87. iatoolkit/views/signup_view.py +41 -36
  88. iatoolkit/views/{tasks_view.py → tasks_api_view.py} +10 -36
  89. iatoolkit/views/tasks_review_api_view.py +55 -0
  90. iatoolkit/views/user_feedback_api_view.py +60 -0
  91. iatoolkit/views/verify_user_view.py +34 -29
  92. {iatoolkit-0.11.0.dist-info → iatoolkit-0.71.2.dist-info}/METADATA +41 -23
  93. iatoolkit-0.71.2.dist-info/RECORD +122 -0
  94. iatoolkit-0.71.2.dist-info/licenses/LICENSE +21 -0
  95. iatoolkit/common/auth.py +0 -200
  96. iatoolkit/static/images/arrow_up.png +0 -0
  97. iatoolkit/static/images/diagrama_iatoolkit.jpg +0 -0
  98. iatoolkit/static/images/logo_clinica.png +0 -0
  99. iatoolkit/static/images/logo_iatoolkit.png +0 -0
  100. iatoolkit/static/images/logo_maxxa.png +0 -0
  101. iatoolkit/static/images/logo_notaria.png +0 -0
  102. iatoolkit/static/images/logo_tarjeta.png +0 -0
  103. iatoolkit/static/images/logo_umayor.png +0 -0
  104. iatoolkit/static/images/upload.png +0 -0
  105. iatoolkit/static/js/chat_feedback.js +0 -115
  106. iatoolkit/static/js/chat_history.js +0 -117
  107. iatoolkit/static/styles/chat_info.css +0 -53
  108. iatoolkit/templates/header.html +0 -31
  109. iatoolkit/templates/home.html +0 -199
  110. iatoolkit/templates/login.html +0 -43
  111. iatoolkit/templates/test.html +0 -9
  112. iatoolkit/views/chat_token_request_view.py +0 -98
  113. iatoolkit/views/chat_view.py +0 -58
  114. iatoolkit/views/download_file_view.py +0 -58
  115. iatoolkit/views/external_chat_login_view.py +0 -95
  116. iatoolkit/views/history_view.py +0 -57
  117. iatoolkit/views/llmquery_view.py +0 -65
  118. iatoolkit/views/tasks_review_view.py +0 -83
  119. iatoolkit/views/user_feedback_view.py +0 -74
  120. iatoolkit-0.11.0.dist-info/RECORD +0 -110
  121. {iatoolkit-0.11.0.dist-info → iatoolkit-0.71.2.dist-info}/WHEEL +0 -0
  122. {iatoolkit-0.11.0.dist-info → iatoolkit-0.71.2.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,90 +142,129 @@
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
  }
126
169
 
127
170
  .error-section {
128
171
  align-self: flex-start;
129
172
  max-width: 75%;
130
- min-width: fit-content;
131
- width: fit-content;
132
- margin-top: 10px;
173
+ min-width: 250px;
174
+
175
+ color: var(--brand-danger-text, #842029); /* Color de texto de error de la marca */
176
+ background-color: var(--brand-danger-bg, #f8d7da); /* Fondo de error de la marca */
177
+ border: 1px solid var(--brand-danger-border, #f5c2c7); /* Borde de error de la marca */
178
+ font-style: italic;
179
+ font-size: 0.9rem;
133
180
  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);
181
+ align-items: center;
182
+ justify-content: start;
183
+ margin: 10px 0;
184
+ padding: 10px 15px; /* Un poco más de padding lateral */
185
+ opacity: 0.9;
186
+ border-radius: 8px; /* Bordes redondeados */
187
+ word-wrap: break-word; /* Asegura que el texto no se desborde */
146
188
  }
147
189
 
148
190
  .error-section i {
149
- color: #d32f2f;
150
- font-size: 1.2em;
151
- padding-top: 2px;
191
+ color: var(--brand-danger-color, #dc3545); /* Color del icono, el rojo principal */
192
+ font-size: 1.2rem; /* Tamaño del icono */
193
+ margin-right: 10px; /* Espacio entre el icono y el texto */
194
+ flex-shrink: 0; /* Evita que el icono se encoja */
152
195
  }
153
196
 
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;
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;
161
208
  }
162
209
 
163
- #question:focus {
164
- outline: none;
165
- border-color: #80bdff;
166
- 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);
167
218
  }
168
219
 
169
- /* 1. La caja principal que envuelve toda el área de entrada */
170
- .input-area {
171
- background-color: #f8f9fa;
220
+ @keyframes spin {
221
+ 0% { transform: rotate(0deg); }
222
+ 100% { transform: rotate(360deg); }
172
223
  }
173
224
 
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;
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;
181
239
  }
182
240
 
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);
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 */
244
+ }
245
+
246
+ /* Eliminamos el borde del último elemento para un acabado limpio */
247
+ .list-group-item:last-child {
248
+ border-bottom: none;
249
+ }
250
+
251
+ .file-name-modal {
252
+ flex: 1;
253
+ margin-right: 10px;
254
+ }
255
+ .remove-file-btn {
256
+ flex-shrink: 0;
257
+ }
258
+
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);
187
263
  }
188
264
 
189
265
  #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 */
266
+ border-radius: 1rem; /* Mismo radio que el chat-input-bar */
267
+ border: 1px solid var(--brand-prompt-assistant-border, #dee2e6); /* Mismo borde que el chat-input-bar */
192
268
  box-shadow: none; /* Eliminamos la sombra por defecto del card */
193
269
  }
194
270
 
@@ -196,18 +272,8 @@
196
272
  margin-bottom: 12px !important; /* Anula el mb-2 (8px) para añadir un poco más de espacio */
197
273
  }
198
274
 
199
- /* 4. El textarea "invisible" en el centro */
200
- .chat-textarea {
201
- flex-grow: 1;
202
- background: transparent !important;
203
- border: none !important;
204
- box-shadow: none !important;
205
- resize: none;
206
- max-height: 150px;
207
- min-height: 38px;
208
- }
209
275
 
210
- /* 5. NUEVO Estilo UNIFICADO para los enlaces de iconos de acción */
276
+ /* Estilo UNIFICADO para los enlaces de iconos de acción */
211
277
  .action-icon-style {
212
278
  color: #6c757d; /* Color gris estándar por defecto */
213
279
  transition: opacity 0.2s ease-in-out;
@@ -227,13 +293,18 @@
227
293
  color: #6c757d;
228
294
  transition: color 0.2s ease-in-out;
229
295
  }
296
+
297
+ /* Anulación específica para el icono de la varita mágica */
298
+ .chat-input-bar a[href="#prompt-assistant-collapse"] i {
299
+ color: var(--brand-prompt-assistant-icon-color, #6c757d);
300
+ }
301
+
230
302
  .chat-input-bar .d-flex a:hover i {
231
303
  color: #343a40;
232
304
  }
233
305
 
234
- /* 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) */
235
307
  #send-button i {
236
- color: var(--brand-send-button-color); /* Usa la variable de branding */
237
308
  font-size: 1.7rem; /* Ligeramente más grande */
238
309
  }
239
310
  #send-button:hover i {
@@ -246,12 +317,6 @@
246
317
  pointer-events: none; /* Lo hace no-clicable */
247
318
  }
248
319
 
249
- @media (max-width: 768px) {
250
- #chat-container {
251
- height: 68vh;
252
- }
253
- }
254
-
255
320
  .filepond--credits {
256
321
  display: none; /* Ocultar créditos de FilePond */
257
322
  }
@@ -289,8 +354,8 @@
289
354
  }
290
355
 
291
356
  .dropdown-menu-soft {
292
- background-color: #f8f9fa;
293
- border-color: #dee2e6;
357
+ background-color: var(--brand-prompt-assistant-dropdown-bg, #f8f9fa);
358
+ border-color: var(--brand-prompt-assistant-border, #dee2e6);
294
359
  }
295
360
 
296
361
  .dropdown-menu-soft .dropdown-item {
@@ -299,15 +364,15 @@
299
364
 
300
365
  .dropdown-menu-soft .dropdown-item:hover,
301
366
  .dropdown-menu-soft .dropdown-item:focus {
302
- color: #ffffff;
303
- background-color: #495057;
367
+ color: var(--brand-prompt-assistant-item-hover-text, #ffffff);
368
+ background-color: var(--brand-prompt-assistant-item-hover-bg, #495057);
304
369
  padding-left: 1.5rem;
305
370
  transition: all 0.15s ease-in-out;
306
371
  }
307
372
 
308
373
  .dropdown-menu-soft .dropdown-header {
309
- background-color: #495057;
310
- color: #ffffff;
374
+ background-color: var(--brand-prompt-assistant-header-bg, #495057);
375
+ color: var(--brand-prompt-assistant-header-text, #ffffff);
311
376
  font-weight: 600;
312
377
  margin: 4px;
313
378
  padding: 0.4rem 1rem;
@@ -318,6 +383,30 @@
318
383
  border-bottom: none;
319
384
  }
320
385
 
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;
398
+ }
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
+ }
408
+
409
+ /* estilo de la x que limpia el prompt seleccionado */
321
410
  #clear-selection-button {
322
411
  position: absolute;
323
412
  top: 50%;
@@ -330,95 +419,85 @@
330
419
  }
331
420
 
332
421
  #clear-selection-button:hover {
333
- color: #212529;
422
+ color: #ffffff;
423
+ background-color: #6c757d;
424
+ border-radius: 0.25rem;
334
425
  }
335
426
 
336
-
337
- /* Estilos para el modal de feedback */
338
- .icon-spaced {
339
- margin-right: 10px;
427
+ #send-button i {
428
+ color: var(--brand-send-button-color);
340
429
  }
341
430
 
342
- .modal-title{
343
- font-size: 20px;
344
- font-weight: bold;
345
- }
431
+ /* Estilos personalizados para Toastr usando las variables de Branding */
346
432
 
347
- .text-muted{
348
- font-size:16px;
349
- 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;
350
439
  }
351
-
352
- .feedback-text{
353
- 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;
354
444
  }
355
445
 
356
- /* Estilos para el modal de historial */
357
-
358
- .thead-dark th{
359
- font-size: 16px;
360
- 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;
361
451
  }
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%;
452
+ .toast-success .toast-progress {
453
+ background-color: rgba(0, 0, 0, 0.2) !important;
377
454
  }
378
455
 
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%;
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;
388
464
  }
389
465
 
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;
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;
403
470
  }
404
- .star:hover {
405
- transform: scale(1.15);
471
+ .toast-close-button:hover {
472
+ opacity: 0.8;
406
473
  }
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;
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);
414
479
  }
415
- .star.active::before,
416
- .star.hover-active::before {
417
- 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;
418
484
  }
419
- .star.active,
420
- .star.hover-active {
421
- 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;
493
+ }
494
+
495
+ .edit-pencil:hover {
496
+ opacity: 1;
497
+ transform: scale(1.2);
498
+ color: var(--brand-primary-color, #4C6A8D);
499
+ cursor: pointer;
422
500
  }
423
501
 
424
502
 
503
+