iatoolkit 0.8.1__py3-none-any.whl → 0.63.4__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 (159) hide show
  1. iatoolkit/__init__.py +8 -34
  2. iatoolkit/base_company.py +14 -3
  3. iatoolkit/common/routes.py +83 -52
  4. iatoolkit/common/session_manager.py +0 -1
  5. iatoolkit/common/util.py +0 -27
  6. iatoolkit/iatoolkit.py +61 -46
  7. iatoolkit/infra/llm_client.py +7 -8
  8. iatoolkit/infra/openai_adapter.py +1 -1
  9. iatoolkit/infra/redis_session_manager.py +48 -2
  10. iatoolkit/repositories/database_manager.py +17 -2
  11. iatoolkit/repositories/models.py +31 -6
  12. iatoolkit/repositories/profile_repo.py +7 -2
  13. iatoolkit/services/auth_service.py +188 -0
  14. iatoolkit/services/branding_service.py +147 -0
  15. iatoolkit/services/dispatcher_service.py +10 -40
  16. iatoolkit/services/excel_service.py +15 -15
  17. iatoolkit/services/history_service.py +3 -12
  18. iatoolkit/services/jwt_service.py +15 -24
  19. iatoolkit/services/onboarding_service.py +43 -0
  20. iatoolkit/services/profile_service.py +97 -44
  21. iatoolkit/services/query_service.py +124 -81
  22. iatoolkit/services/tasks_service.py +1 -1
  23. iatoolkit/services/user_feedback_service.py +67 -31
  24. iatoolkit/services/user_session_context_service.py +112 -54
  25. iatoolkit/static/images/fernando.jpeg +0 -0
  26. iatoolkit/static/js/{chat_feedback.js → chat_feedback_button.js} +6 -11
  27. iatoolkit/static/js/chat_history_button.js +126 -0
  28. iatoolkit/static/js/chat_logout_button.js +36 -0
  29. iatoolkit/static/js/chat_main.js +130 -220
  30. iatoolkit/static/js/chat_onboarding_button.js +97 -0
  31. iatoolkit/static/js/chat_prompt_manager.js +94 -0
  32. iatoolkit/static/js/chat_reload_button.js +52 -0
  33. iatoolkit/static/styles/chat_iatoolkit.css +329 -507
  34. iatoolkit/static/styles/chat_modal.css +95 -56
  35. iatoolkit/static/styles/landing_page.css +182 -0
  36. iatoolkit/static/styles/onboarding.css +169 -0
  37. iatoolkit/system_prompts/query_main.prompt +3 -12
  38. iatoolkit/templates/_company_header.html +20 -0
  39. iatoolkit/templates/_login_widget.html +40 -0
  40. iatoolkit/templates/base.html +8 -3
  41. iatoolkit/templates/change_password.html +54 -37
  42. iatoolkit/templates/chat.html +149 -66
  43. iatoolkit/templates/chat_modals.html +47 -18
  44. iatoolkit/templates/error.html +41 -8
  45. iatoolkit/templates/forgot_password.html +37 -24
  46. iatoolkit/templates/index.html +140 -0
  47. iatoolkit/templates/login_simulation.html +34 -0
  48. iatoolkit/templates/onboarding_shell.html +105 -0
  49. iatoolkit/templates/signup.html +64 -66
  50. iatoolkit/views/base_login_view.py +81 -0
  51. iatoolkit/views/change_password_view.py +23 -12
  52. iatoolkit/views/external_login_view.py +61 -28
  53. iatoolkit/views/{file_store_view.py → file_store_api_view.py} +9 -2
  54. iatoolkit/views/forgot_password_view.py +23 -13
  55. iatoolkit/views/history_api_view.py +52 -0
  56. iatoolkit/views/home_view.py +58 -25
  57. iatoolkit/views/index_view.py +14 -0
  58. iatoolkit/views/init_context_api_view.py +68 -0
  59. iatoolkit/views/llmquery_api_view.py +45 -0
  60. iatoolkit/views/login_simulation_view.py +81 -0
  61. iatoolkit/views/login_view.py +118 -34
  62. iatoolkit/views/logout_api_view.py +45 -0
  63. iatoolkit/views/{prompt_view.py → prompt_api_view.py} +7 -7
  64. iatoolkit/views/signup_view.py +38 -29
  65. iatoolkit/views/{tasks_view.py → tasks_api_view.py} +10 -36
  66. iatoolkit/views/tasks_review_api_view.py +55 -0
  67. iatoolkit/views/{user_feedback_view.py → user_feedback_api_view.py} +16 -31
  68. iatoolkit/views/verify_user_view.py +13 -8
  69. {iatoolkit-0.8.1.dist-info → iatoolkit-0.63.4.dist-info}/METADATA +2 -2
  70. iatoolkit-0.63.4.dist-info/RECORD +113 -0
  71. {iatoolkit-0.8.1.dist-info → iatoolkit-0.63.4.dist-info}/top_level.txt +0 -1
  72. iatoolkit/common/auth.py +0 -200
  73. iatoolkit/static/images/arrow_up.png +0 -0
  74. iatoolkit/static/images/diagrama_iatoolkit.jpg +0 -0
  75. iatoolkit/static/images/logo_clinica.png +0 -0
  76. iatoolkit/static/images/logo_iatoolkit.png +0 -0
  77. iatoolkit/static/images/logo_maxxa.png +0 -0
  78. iatoolkit/static/images/logo_notaria.png +0 -0
  79. iatoolkit/static/images/logo_tarjeta.png +0 -0
  80. iatoolkit/static/images/logo_umayor.png +0 -0
  81. iatoolkit/static/images/upload.png +0 -0
  82. iatoolkit/static/js/chat_history.js +0 -117
  83. iatoolkit/templates/home.html +0 -201
  84. iatoolkit/templates/login.html +0 -43
  85. iatoolkit/views/chat_token_request_view.py +0 -98
  86. iatoolkit/views/chat_view.py +0 -51
  87. iatoolkit/views/download_file_view.py +0 -58
  88. iatoolkit/views/external_chat_login_view.py +0 -88
  89. iatoolkit/views/history_view.py +0 -57
  90. iatoolkit/views/llmquery_view.py +0 -65
  91. iatoolkit/views/tasks_review_view.py +0 -83
  92. iatoolkit-0.8.1.dist-info/RECORD +0 -175
  93. tests/__init__.py +0 -5
  94. tests/common/__init__.py +0 -0
  95. tests/common/test_auth.py +0 -279
  96. tests/common/test_routes.py +0 -42
  97. tests/common/test_session_manager.py +0 -59
  98. tests/common/test_util.py +0 -444
  99. tests/companies/__init__.py +0 -5
  100. tests/conftest.py +0 -36
  101. tests/infra/__init__.py +0 -5
  102. tests/infra/connectors/__init__.py +0 -5
  103. tests/infra/connectors/test_google_drive_connector.py +0 -107
  104. tests/infra/connectors/test_local_file_connector.py +0 -85
  105. tests/infra/connectors/test_s3_connector.py +0 -95
  106. tests/infra/test_call_service.py +0 -92
  107. tests/infra/test_database_manager.py +0 -59
  108. tests/infra/test_gemini_adapter.py +0 -137
  109. tests/infra/test_google_chat_app.py +0 -68
  110. tests/infra/test_llm_client.py +0 -165
  111. tests/infra/test_llm_proxy.py +0 -122
  112. tests/infra/test_mail_app.py +0 -94
  113. tests/infra/test_openai_adapter.py +0 -105
  114. tests/infra/test_redis_session_manager_service.py +0 -117
  115. tests/repositories/__init__.py +0 -5
  116. tests/repositories/test_database_manager.py +0 -87
  117. tests/repositories/test_document_repo.py +0 -76
  118. tests/repositories/test_llm_query_repo.py +0 -340
  119. tests/repositories/test_models.py +0 -38
  120. tests/repositories/test_profile_repo.py +0 -142
  121. tests/repositories/test_tasks_repo.py +0 -76
  122. tests/repositories/test_vs_repo.py +0 -107
  123. tests/services/__init__.py +0 -5
  124. tests/services/test_dispatcher_service.py +0 -274
  125. tests/services/test_document_service.py +0 -181
  126. tests/services/test_excel_service.py +0 -208
  127. tests/services/test_file_processor_service.py +0 -121
  128. tests/services/test_history_service.py +0 -164
  129. tests/services/test_jwt_service.py +0 -255
  130. tests/services/test_load_documents_service.py +0 -112
  131. tests/services/test_mail_service.py +0 -70
  132. tests/services/test_profile_service.py +0 -379
  133. tests/services/test_prompt_manager_service.py +0 -190
  134. tests/services/test_query_service.py +0 -243
  135. tests/services/test_search_service.py +0 -39
  136. tests/services/test_sql_service.py +0 -160
  137. tests/services/test_tasks_service.py +0 -252
  138. tests/services/test_user_feedback_service.py +0 -389
  139. tests/services/test_user_session_context_service.py +0 -132
  140. tests/views/__init__.py +0 -5
  141. tests/views/test_change_password_view.py +0 -191
  142. tests/views/test_chat_token_request_view.py +0 -188
  143. tests/views/test_chat_view.py +0 -98
  144. tests/views/test_download_file_view.py +0 -149
  145. tests/views/test_external_chat_login_view.py +0 -120
  146. tests/views/test_external_login_view.py +0 -102
  147. tests/views/test_file_store_view.py +0 -128
  148. tests/views/test_forgot_password_view.py +0 -142
  149. tests/views/test_history_view.py +0 -336
  150. tests/views/test_home_view.py +0 -61
  151. tests/views/test_llm_query_view.py +0 -154
  152. tests/views/test_login_view.py +0 -114
  153. tests/views/test_prompt_view.py +0 -111
  154. tests/views/test_signup_view.py +0 -140
  155. tests/views/test_tasks_review_view.py +0 -104
  156. tests/views/test_tasks_view.py +0 -130
  157. tests/views/test_user_feedback_view.py +0 -214
  158. tests/views/test_verify_user_view.py +0 -110
  159. {iatoolkit-0.8.1.dist-info → iatoolkit-0.63.4.dist-info}/WHEEL +0 -0
@@ -1,13 +1,154 @@
1
- /* Spinner */
2
- .spinning {
3
- animation: spin 1s linear infinite;
4
- font-size: 15px; /* Tamaño del ícono */
5
- display: inline-block;
1
+ /* Customización de variables de Bootstrap */
2
+ :root {
3
+ --bs-tooltip-bg: #495057; /* Gris carbón, más claro y profesional */
4
+ --bs-tooltip-opacity: 0.95; /* Ligeramente más opaco para mejor legibilidad */
6
5
  }
7
6
 
8
- @keyframes spin {
9
- 0% { transform: rotate(0deg); }
10
- 100% { transform: rotate(360deg); }
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);
14
+ }
15
+
16
+ ul {
17
+ /* Se resetea el padding por defecto del navegador y se aplica uno controlado */
18
+ padding-left: 1.5rem; /* ~24px de indentación para la lista */
19
+ margin-bottom: 1rem; /* Espacio después de que termina la lista */
20
+ }
21
+
22
+ li {
23
+ /* Espacio vertical entre cada elemento de la lista para mejor legibilidad */
24
+ margin-bottom: 0.5rem; /* ~8px */
25
+ padding-left: 0.25rem; /* Pequeño espacio extra entre la viñeta y el texto */
26
+ color: #495057;
27
+ }
28
+
29
+ /* Estilo para la viñeta (el punto) de cada elemento de la lista */
30
+ li::marker {
31
+ color: var(--brand-primary-color); /* La viñeta usa el color principal de la marca */
32
+ font-size: 1.1em; /* Ligeramente más grande para que sea más visible */
33
+ }
34
+
35
+ .text-muted {
36
+ color: #64748b;
37
+ }
38
+
39
+ /* Estos estilos son para las paginas publicas: home, signup, olvide la clave, etc */
40
+
41
+ /* --- Encabezado (top) de company --- */
42
+ .custom-company-header {
43
+ height: 78px;
44
+ margin-bottom: 20px;
45
+ padding: 0 1.5rem; /* Padding interno para que el texto no toque los bordes */
46
+ border-radius: 0.375rem; /* Bordes redondeados para que coincida con los formularios */
47
+
48
+ /* Los estilos de color y sombra se mantienen */
49
+ background-color: var(--brand-header-bg);
50
+ color: var(--brand-header-text);
51
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); /* Sombra ligeramente más suave */
52
+ }
53
+
54
+ /* Estilo específico para el nombre de la marca en el encabezado (Letra más grande) */
55
+ .custom-company-header .brand-name {
56
+ font-size: 1.8rem; /* Tamaño de fuente aumentado */
57
+ font-weight: 600;
58
+ color: inherit;
59
+ text-decoration: none;
60
+ transition: opacity 0.2s ease-in-out;
61
+ }
62
+
63
+ /* Efecto hover para el enlace del nombre de la marca */
64
+ .custom-company-header .brand-name:hover {
65
+ opacity: 0.85;
66
+ }
67
+
68
+ /* Estilo para el texto "Powered by" --- */
69
+ .custom-company-header .powered-by {
70
+ font-size: 0.9rem;
71
+ font-weight: 400;
72
+ opacity: 0.75; /* Menos prominente que el nombre de la marca */
73
+ color: inherit;
74
+ }
75
+
76
+ /* --- Estilo para el enlace de IAToolkit --- */
77
+ .custom-company-header .iatoolkit-link {
78
+ color: inherit; /* Hereda el color del texto padre */
79
+ text-decoration: none; /* ¡Elimina el subrayado! */
80
+ font-weight: 600; /* Un poco más de peso para diferenciarlo */
81
+ transition: opacity 0.2s ease-in-out;
82
+ }
83
+
84
+
85
+ .custom-company-header .form-container {
86
+ display: flex;
87
+ flex-direction: column;
88
+ gap: 1rem;
89
+ }
90
+
91
+ /* titulo en home */
92
+ .home-title {
93
+ font-size: 3rem;
94
+ font-weight: 700;
95
+ line-height: 1.2;
96
+ color: var(--brand-primary-color);
97
+ }
98
+
99
+ /* contenedor de formularios: login, signup, forgot password, etc. */
100
+ .branded-form-container {
101
+ background-color: #ffffff;
102
+ border: 1px solid #dee2e6;
103
+ border-top: 4px solid #adb5bd;
104
+ border-radius: 0.375rem;
105
+ padding: 2rem;
106
+ box-shadow: 0 4px 12px rgba(0,0,0,0.08);
107
+ }
108
+
109
+
110
+ .branded-form-label {
111
+ font-size: 0.85rem;
112
+ font-weight: 600;
113
+ color: #495057; /* Un gris oscuro profesional */
114
+ text-transform: uppercase;
115
+ letter-spacing: 0.05em; /* Un poco de espacio extra entre letras */
116
+ margin-bottom: 0.3rem;
117
+ display: block;
118
+ }
119
+
120
+
121
+ /* Efecto de foco brandeado para todos los form-control */
122
+ .form-control:focus {
123
+ border-color: var(--brand-primary-color);
124
+ box-shadow: 0 0 0 0.25rem rgba(var(--brand-primary-color-rgb), 0.25); /* Usa la variable RGB para el shadow */
125
+ }
126
+
127
+ .branded-form-title {
128
+ color: var(--brand-primary-color);
129
+ font-size: 1.75rem; /* Un tamaño más prominente */
130
+ font-weight: 700; /* Equivalente a fw-bold de Bootstrap */
131
+ text-align: center;
132
+ margin-bottom: 1.5rem; /* Espacio consistente debajo del título */
133
+ }
134
+
135
+
136
+
137
+ /* CSS para el chat principal */
138
+ /* esta clase defines los atributos de cada bloque */
139
+ .chat-block {
140
+ padding: 1rem; /* Equivalente a p-3 de Bootstrap */
141
+ border: 1px solid #dee2e6; /* Borde estándar y sutil */
142
+ border-radius: 0.375rem; /* Borde redondeado estándar de Bootstrap */
143
+ box-shadow: 0 2px 8px rgba(0,0,0,0.06); /* Sombra suave y unificada */
144
+ }
145
+
146
+
147
+ /* sección del encabezado en el chat principal */
148
+ .company-section {
149
+ border-radius: 0.375rem; /* Mismo radio que .chat-block para consistencia */
150
+ background-color: var(--brand-header-bg);
151
+ color: var(--brand-header-text);
11
152
  }
12
153
 
13
154
  /* Estilos para el contenedor del chat y mensajes para que exista scroll */
@@ -16,6 +157,7 @@
16
157
  overflow-y: auto;
17
158
  display: flex;
18
159
  flex-direction: column;
160
+ background-color: #fff; /* Fondo blanco para el contenedor del chat */
19
161
  }
20
162
  .answer-section, .error-section, .document-section {
21
163
  max-width: 100%;
@@ -23,14 +165,24 @@
23
165
  margin-bottom: 10px;
24
166
  }
25
167
 
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
168
 
169
+ /* Spinner */
170
+ .spinning {
171
+ animation: spin 1s linear infinite;
172
+ font-size: 15px; /* Tamaño del ícono */
173
+ display: inline-block;
174
+ }
175
+ #spinner .spinner-border {
176
+ color: var(--brand-primary-color);
177
+ }
178
+
179
+
180
+ @keyframes spin {
181
+ 0% { transform: rotate(0deg); }
182
+ 100% { transform: rotate(360deg); }
32
183
  }
33
184
 
185
+
34
186
  /* Estilos para el modal de archivos y ordenar icono */
35
187
  .list-group-item {
36
188
  display: flex;
@@ -44,73 +196,9 @@
44
196
  .remove-file-btn {
45
197
  flex-shrink: 0;
46
198
  }
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
199
 
110
200
  /* Estilo del mensaje ingresado por el usuario */
111
201
  #chat-container .message {
112
- /* Propiedades de layout y forma (se mantienen del original) */
113
- margin-top: 10px;
114
202
  max-width: 75%;
115
203
  min-width: fit-content;
116
204
  width: fit-content;
@@ -120,199 +208,70 @@
120
208
  align-items: center;
121
209
  align-self: flex-end;
122
210
  text-align: left;
123
-
124
- /* Propiedades estéticas (adoptadas de .llm-output) */
125
- padding: 15px;
211
+ padding-left: 0.5em;
212
+ color: #202123;
126
213
  font-family: Arial, sans-serif;
127
214
  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
- }
215
+ line-height: 1.6;
216
+ background-color: #f7f7f8;
217
+ border: none;
218
+ }
219
+
220
+ .answer-section {
221
+ align-self: flex-start;
222
+ max-width: 75%;
223
+ padding: 10px 15px;
224
+ font-family: "Inter", Arial, sans-serif;
225
+ font-size: 15px;
226
+ line-height: 1.6;
227
+ word-wrap: break-word;
228
+ }
143
229
 
144
230
  .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 */
231
+ align-self: flex-start;
147
232
  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
- }
233
+ min-width: 250px;
193
234
 
194
- .row {
235
+ color: var(--brand-danger-text, #842029); /* Color de texto de error de la marca */
236
+ background-color: var(--brand-danger-bg, #f8d7da); /* Fondo de error de la marca */
237
+ border: 1px solid var(--brand-danger-border, #f5c2c7); /* Borde de error de la marca */
238
+ font-style: italic;
239
+ font-size: 0.9rem;
195
240
  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 */
241
+ align-items: center;
242
+ justify-content: start;
243
+ margin: 10px 0;
244
+ padding: 10px 15px; /* Un poco más de padding lateral */
245
+ opacity: 0.9;
246
+ border-radius: 8px; /* Bordes redondeados */
247
+ word-wrap: break-word; /* Asegura que el texto no se desborde */
220
248
  }
221
249
 
222
-
223
- .input-container {
224
- width: 100%;
225
- display: flex;
226
- justify-content: center;
250
+ .error-section i {
251
+ color: var(--brand-danger-color, #dc3545); /* Color del icono, el rojo principal */
252
+ font-size: 1.2rem; /* Tamaño del icono */
253
+ margin-right: 10px; /* Espacio entre el icono y el texto */
254
+ flex-shrink: 0; /* Evita que el icono se encoja */
227
255
  }
228
256
 
229
257
  #question {
230
258
  width: 100%;
231
259
  font-size: 15px;
232
- background: #f8f9fa; /* Fondo gris claro */
233
- color: #202123; /* Texto oscuro */
260
+ background: #f8f9fa;
261
+ color: #202123;
234
262
  border: 1px solid #d1d5db;
235
- transition: border-color 0.2s ease-in-out;
263
+ transition: all 0.3s ease-in-out;
236
264
  }
237
265
 
238
266
  #question:focus {
239
267
  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 */
268
+ border-color: #80bdff;
269
+ box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
308
270
  }
309
271
 
310
272
  /* 1. La caja principal que envuelve toda el área de entrada */
311
273
  .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);
274
+ background-color: var(--brand-prompt-assistant-bg, #f8f9fa);
316
275
  }
317
276
 
318
277
  /* 2. La barra "cápsula" que envuelve el texto y los iconos */
@@ -320,7 +279,7 @@
320
279
  background-color: #ffffff;
321
280
  border: 1px solid #dee2e6;
322
281
  border-radius: 1.5rem;
323
- padding: 0.25rem 0.5rem;
282
+ padding: 0.1rem 0.5rem;
324
283
  transition: all 0.2s ease-in-out;
325
284
  }
326
285
 
@@ -330,6 +289,35 @@
330
289
  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
331
290
  }
332
291
 
292
+ /* Aplica el color secundario de la marca al icono de ver archivos */
293
+ #view-files-button i {
294
+ color: var(--brand-secondary-color, #6c757d);
295
+ }
296
+
297
+ /* Estilo para mensajes sutiles del sistema (ej. abortado) */
298
+ .system-message {
299
+ color: var(--brand-secondary-color, #6c757d); /* Usa el color secundario o un gris por defecto */
300
+ font-style: italic;
301
+ font-size: 0.9rem;
302
+ display: flex;
303
+ align-items: center;
304
+ justify-content: start;
305
+ margin: 10px 0;
306
+ padding: 10px;
307
+ opacity: 0.8;
308
+ }
309
+
310
+
311
+ #prompt-assistant-collapse .card {
312
+ border-radius: 1.5rem; /* Mismo radio que el chat-input-bar */
313
+ border: 1px solid var(--brand-prompt-assistant-border, #dee2e6); /* Mismo borde que el chat-input-bar */
314
+ box-shadow: none; /* Eliminamos la sombra por defecto del card */
315
+ }
316
+
317
+ #prompt-assistant-collapse.show .card {
318
+ margin-bottom: 12px !important; /* Anula el mb-2 (8px) para añadir un poco más de espacio */
319
+ }
320
+
333
321
  /* 4. El textarea "invisible" en el centro */
334
322
  .chat-textarea {
335
323
  flex-grow: 1;
@@ -341,35 +329,42 @@
341
329
  min-height: 38px;
342
330
  }
343
331
 
344
- /* 5. Estilo UNIFICADO para todos los iconos de acción secundarios */
332
+ /* 5. NUEVO Estilo UNIFICADO para los enlaces de iconos de acción */
333
+ .action-icon-style {
334
+ color: #6c757d; /* Color gris estándar por defecto */
335
+ transition: opacity 0.2s ease-in-out;
336
+ }
337
+ .action-icon-style:hover {
338
+ opacity: 0.75; /* Efecto hover sutil */
339
+ }
345
340
  .action-icon-style i {
346
- color: #6c757d; /* Color gris estándar DIRECTAMENTE al icono */
347
- font-size: 1.5rem; /* Tamaño uniforme */
341
+ font-size: 1.5rem;
348
342
  vertical-align: middle;
349
- transition: color 0.2s ease-in-out;
350
343
  }
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 */
344
+
345
+ /* Aplica a los iconos de la barra de entrada inferior */
355
346
  .chat-input-bar .d-flex a i {
356
347
  font-size: 1.5rem;
357
348
  vertical-align: middle;
358
349
  color: #6c757d;
359
350
  transition: color 0.2s ease-in-out;
360
351
  }
352
+
353
+ /* Anulación específica para el icono de la varita mágica */
354
+ .chat-input-bar a[href="#prompt-assistant-collapse"] i {
355
+ color: var(--brand-prompt-assistant-icon-color, #6c757d);
356
+ }
357
+
361
358
  .chat-input-bar .d-flex a:hover i {
362
359
  color: #343a40;
363
360
  }
364
361
 
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 */
362
+ /* 6. Anulación específica para el botón de ENVIAR usando su ID (Máxima Prioridad) */
363
+ #send-button i {
364
+ font-size: 1.7rem; /* Ligeramente más grande */
370
365
  }
371
- .send-button-icon:hover i {
372
- color: #0b5ed7 !important; /* Azul más oscuro en hover */
366
+ #send-button:hover i {
367
+ filter: brightness(85%); /* Efecto hover genérico que funciona con cualquier color */
373
368
  }
374
369
 
375
370
  /* 7. Estilo para el botón de enviar cuando está deshabilitado */
@@ -384,318 +379,145 @@
384
379
  }
385
380
  }
386
381
 
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
382
  .filepond--credits {
411
383
  display: none; /* Ocultar créditos de FilePond */
412
384
  }
413
385
 
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
386
  /* Estilo para el input de datos específicos cuando tiene contenido */
439
387
  .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 */
388
+ background-color: #e9f3ed !important;
389
+ border-color: #198754 !important;
390
+ border-width: 2px !important;
391
+ color: #0a5833 !important;
392
+ font-weight: 500 !important;
393
+ box-shadow: 0 1px 4px rgba(25, 135, 84, 0.2) !important;
446
394
  }
447
395
 
448
396
  /* Ajuste para la etiqueta flotante */
449
397
  .specific-data-input.has-content + label {
450
- color: #0a5833 !important; /* Aseguramos que el color de la etiqueta coincida */
398
+ color: #0a5833 !important;
451
399
  }
452
400
 
453
401
  /* Estilo para el botón de limpiar */
454
402
  .clear-specific-data-button {
455
403
  position: absolute;
456
404
  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 */
405
+ right: 15px;
406
+ transform: translateY(-50%);
407
+ z-index: 5;
460
408
  padding: 0.25rem 0.5rem;
461
409
  color: #6c757d;
462
410
  background-color: transparent;
463
- border: none; /* Aseguramos que no tenga borde */
411
+ border: none;
464
412
  }
465
413
 
466
414
  .clear-specific-data-button:hover {
467
415
  color: #212529;
468
416
  }
469
417
 
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
418
  .dropdown-menu-soft {
508
- background-color: #f8f9fa;
509
- border-color: #dee2e6;
419
+ background-color: var(--brand-prompt-assistant-dropdown-bg, #f8f9fa);
420
+ border-color: var(--brand-prompt-assistant-border, #dee2e6);
510
421
  }
511
422
 
512
- /* Estilo y efecto para cada opción de la lista */
513
423
  .dropdown-menu-soft .dropdown-item {
514
- transition: all 0.15s ease-in-out; /* Transición para el efecto hover */
424
+ transition: all 0.15s ease-in-out;
515
425
  }
516
426
 
517
427
  .dropdown-menu-soft .dropdown-item:hover,
518
428
  .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 */
429
+ color: var(--brand-prompt-assistant-item-hover-text, #ffffff);
430
+ background-color: var(--brand-prompt-assistant-item-hover-bg, #495057);
431
+ padding-left: 1.5rem;
432
+ transition: all 0.15s ease-in-out;
523
433
  }
524
434
 
525
- /* Estilo para las cabeceras de las categorías dentro del menú */
526
435
  .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 */
436
+ background-color: var(--brand-prompt-assistant-header-bg, #495057);
437
+ color: var(--brand-prompt-assistant-header-text, #ffffff);
438
+ font-weight: 600;
439
+ margin: 4px;
440
+ padding: 0.4rem 1rem;
441
+ border-radius: 4px;
442
+ font-size: 0.85rem;
443
+ text-transform: none;
537
444
  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;
445
+ border-bottom: none;
546
446
  }
547
447
 
548
448
  #clear-selection-button {
549
449
  position: absolute;
550
450
  top: 50%;
551
- /* Lo movemos 45px desde la derecha para que no se superponga con la flecha del dropdown */
552
451
  right: 45px;
553
452
  transform: translateY(-50%);
554
- z-index: 5; /* Asegura que esté por encima del botón principal */
453
+ z-index: 5;
555
454
  padding: 0.25rem 0.5rem;
556
- color: #6c757d; /* Color gris estándar */
455
+ color: #6c757d;
557
456
  background-color: transparent;
558
457
  }
559
458
 
560
459
  #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;
460
+ color: #212529;
589
461
  }
590
462
 
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 */
463
+ #send-button i {
464
+ color: var(--brand-send-button-color);
594
465
  }
595
466
 
596
- #history-content .table td:nth-child(2) {
597
- width: 20%; /* Columna de la fecha */
598
- }
467
+ /* Estilos personalizados para Toastr usando las variables de Branding */
599
468
 
600
- #history-content .table td:nth-child(3) {
601
- width: auto; /* Columna de la consulta - ocupa el resto */
469
+ /* --- Toast de Información (Usa el color primario de la marca) --- */
470
+ .toast-info {
471
+ /* ¡Importante! Usamos las variables CSS de tu BrandingService */
472
+ background-color: var(--brand-primary-color) !important;
473
+ color: var(--brand-text-on-primary) !important;
474
+ opacity: 0.95 !important;
602
475
  }
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;
476
+ .toast-info .toast-progress {
477
+ /* Usamos un color ligeramente más oscuro o una variante,
478
+ pero para simplificar, podemos empezar con el mismo */
479
+ background-color: rgba(0, 0, 0, 0.2) !important;
611
480
  }
612
481
 
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%;
482
+ /* --- Toast de Éxito (Usa el verde por defecto o uno de marca si lo defines) --- */
483
+ .toast-success {
484
+ background-color: #198754 !important; /* Puedes crear una variable --brand-success-color si quieres */
485
+ color: #ffffff !important;
486
+ opacity: 0.95 !important;
623
487
  }
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%;
488
+ .toast-success .toast-progress {
489
+ background-color: rgba(0, 0, 0, 0.2) !important;
634
490
  }
635
491
 
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 */
492
+ /* --- Toast de Error (Usa el color de peligro de la marca) --- */
493
+ .toast-error {
494
+ background-color: var(--brand-danger-color) !important;
495
+ color: var(--brand-text-on-primary) !important; /* Asumimos texto blanco sobre el color de peligro */
496
+ opacity: 0.95 !important;
645
497
  }
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 */
498
+ .toast-error .toast-progress {
499
+ background-color: rgba(0, 0, 0, 0.2) !important;
653
500
  }
654
501
 
655
- /* Efecto visual al pasar el mouse por encima */
656
- .star:hover {
657
- transform: scale(1.15); /* Agranda un poco la estrella */
502
+ /* Opcional: Estilo para el botón de cierre para que contraste bien */
503
+ .toast-close-button {
504
+ color: var(--brand-text-on-primary) !important;
505
+ text-shadow: none !important;
658
506
  }
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;
507
+ .toast-close-button:hover {
508
+ opacity: 0.8;
673
509
  }
674
510
 
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`) */
511
+ .alert-branded-danger {
512
+ background-color: var(--brand-danger-bg);
513
+ color: var(--brand-danger-text);
514
+ border-color: var(--brand-danger-border);
679
515
  }
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 */
516
+ /* Asegura que el texto fuerte y los enlaces dentro de la alerta también tomen el color correcto */
517
+ .alert-branded-danger strong,
518
+ .alert-branded-danger .alert-link {
519
+ color: inherit;
685
520
  }
686
521
 
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
522
 
694
523
 
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
- }