iatoolkit 0.11.0__py3-none-any.whl → 0.66.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. iatoolkit/base_company.py +11 -3
  2. iatoolkit/common/routes.py +92 -52
  3. iatoolkit/common/session_manager.py +0 -1
  4. iatoolkit/common/util.py +17 -27
  5. iatoolkit/iatoolkit.py +91 -47
  6. iatoolkit/infra/llm_client.py +7 -8
  7. iatoolkit/infra/openai_adapter.py +1 -1
  8. iatoolkit/infra/redis_session_manager.py +48 -2
  9. iatoolkit/locales/en.yaml +144 -0
  10. iatoolkit/locales/es.yaml +140 -0
  11. iatoolkit/repositories/database_manager.py +17 -2
  12. iatoolkit/repositories/models.py +31 -4
  13. iatoolkit/repositories/profile_repo.py +7 -2
  14. iatoolkit/services/auth_service.py +193 -0
  15. iatoolkit/services/branding_service.py +59 -18
  16. iatoolkit/services/dispatcher_service.py +10 -40
  17. iatoolkit/services/excel_service.py +15 -15
  18. iatoolkit/services/help_content_service.py +30 -0
  19. iatoolkit/services/history_service.py +2 -11
  20. iatoolkit/services/i18n_service.py +104 -0
  21. iatoolkit/services/jwt_service.py +15 -24
  22. iatoolkit/services/language_service.py +77 -0
  23. iatoolkit/services/onboarding_service.py +43 -0
  24. iatoolkit/services/profile_service.py +148 -75
  25. iatoolkit/services/query_service.py +124 -81
  26. iatoolkit/services/tasks_service.py +1 -1
  27. iatoolkit/services/user_feedback_service.py +68 -32
  28. iatoolkit/services/user_session_context_service.py +112 -54
  29. iatoolkit/static/images/fernando.jpeg +0 -0
  30. iatoolkit/static/js/chat_feedback_button.js +80 -0
  31. iatoolkit/static/js/chat_help_content.js +124 -0
  32. iatoolkit/static/js/chat_history_button.js +112 -0
  33. iatoolkit/static/js/chat_logout_button.js +36 -0
  34. iatoolkit/static/js/chat_main.js +148 -220
  35. iatoolkit/static/js/chat_onboarding_button.js +97 -0
  36. iatoolkit/static/js/chat_prompt_manager.js +94 -0
  37. iatoolkit/static/js/chat_reload_button.js +35 -0
  38. iatoolkit/static/styles/chat_iatoolkit.css +367 -199
  39. iatoolkit/static/styles/chat_modal.css +98 -76
  40. iatoolkit/static/styles/chat_public.css +107 -0
  41. iatoolkit/static/styles/landing_page.css +182 -0
  42. iatoolkit/static/styles/onboarding.css +169 -0
  43. iatoolkit/system_prompts/query_main.prompt +3 -12
  44. iatoolkit/templates/_company_header.html +20 -0
  45. iatoolkit/templates/_login_widget.html +42 -0
  46. iatoolkit/templates/base.html +40 -20
  47. iatoolkit/templates/change_password.html +57 -36
  48. iatoolkit/templates/chat.html +169 -83
  49. iatoolkit/templates/chat_modals.html +134 -68
  50. iatoolkit/templates/error.html +44 -8
  51. iatoolkit/templates/forgot_password.html +40 -23
  52. iatoolkit/templates/index.html +145 -0
  53. iatoolkit/templates/login_simulation.html +34 -0
  54. iatoolkit/templates/onboarding_shell.html +104 -0
  55. iatoolkit/templates/signup.html +63 -65
  56. iatoolkit/views/base_login_view.py +92 -0
  57. iatoolkit/views/change_password_view.py +56 -30
  58. iatoolkit/views/external_login_view.py +61 -28
  59. iatoolkit/views/{file_store_view.py → file_store_api_view.py} +9 -2
  60. iatoolkit/views/forgot_password_view.py +27 -19
  61. iatoolkit/views/help_content_api_view.py +54 -0
  62. iatoolkit/views/history_api_view.py +56 -0
  63. iatoolkit/views/home_view.py +50 -23
  64. iatoolkit/views/index_view.py +14 -0
  65. iatoolkit/views/init_context_api_view.py +73 -0
  66. iatoolkit/views/llmquery_api_view.py +57 -0
  67. iatoolkit/views/login_simulation_view.py +81 -0
  68. iatoolkit/views/login_view.py +130 -37
  69. iatoolkit/views/logout_api_view.py +49 -0
  70. iatoolkit/views/profile_api_view.py +46 -0
  71. iatoolkit/views/{prompt_view.py → prompt_api_view.py} +10 -10
  72. iatoolkit/views/signup_view.py +42 -35
  73. iatoolkit/views/{tasks_view.py → tasks_api_view.py} +10 -36
  74. iatoolkit/views/tasks_review_api_view.py +55 -0
  75. iatoolkit/views/user_feedback_api_view.py +60 -0
  76. iatoolkit/views/verify_user_view.py +35 -28
  77. {iatoolkit-0.11.0.dist-info → iatoolkit-0.66.2.dist-info}/METADATA +2 -2
  78. iatoolkit-0.66.2.dist-info/RECORD +119 -0
  79. iatoolkit/common/auth.py +0 -200
  80. iatoolkit/static/images/arrow_up.png +0 -0
  81. iatoolkit/static/images/diagrama_iatoolkit.jpg +0 -0
  82. iatoolkit/static/images/logo_clinica.png +0 -0
  83. iatoolkit/static/images/logo_iatoolkit.png +0 -0
  84. iatoolkit/static/images/logo_maxxa.png +0 -0
  85. iatoolkit/static/images/logo_notaria.png +0 -0
  86. iatoolkit/static/images/logo_tarjeta.png +0 -0
  87. iatoolkit/static/images/logo_umayor.png +0 -0
  88. iatoolkit/static/images/upload.png +0 -0
  89. iatoolkit/static/js/chat_feedback.js +0 -115
  90. iatoolkit/static/js/chat_history.js +0 -117
  91. iatoolkit/static/styles/chat_info.css +0 -53
  92. iatoolkit/templates/header.html +0 -31
  93. iatoolkit/templates/home.html +0 -199
  94. iatoolkit/templates/login.html +0 -43
  95. iatoolkit/templates/test.html +0 -9
  96. iatoolkit/views/chat_token_request_view.py +0 -98
  97. iatoolkit/views/chat_view.py +0 -58
  98. iatoolkit/views/download_file_view.py +0 -58
  99. iatoolkit/views/external_chat_login_view.py +0 -95
  100. iatoolkit/views/history_view.py +0 -57
  101. iatoolkit/views/llmquery_view.py +0 -65
  102. iatoolkit/views/tasks_review_view.py +0 -83
  103. iatoolkit/views/user_feedback_view.py +0 -74
  104. iatoolkit-0.11.0.dist-info/RECORD +0 -110
  105. {iatoolkit-0.11.0.dist-info → iatoolkit-0.66.2.dist-info}/WHEEL +0 -0
  106. {iatoolkit-0.11.0.dist-info → iatoolkit-0.66.2.dist-info}/top_level.txt +0 -0
@@ -1,52 +1,4 @@
1
- /* ######################################################### */
2
1
  /* Estilos generales para modales */
3
- /* ######################################################### */
4
-
5
- /* Estilos del header del modal con branding */
6
- .modal-header.branded {
7
- background-color: var(--brand-modal-header-bg);
8
- color: var(--brand-modal-header-text);
9
- border-bottom: 1px solid rgba(0, 0, 0, 0.1);
10
- }
11
- .modal-header.branded .btn-close {
12
- filter: invert(1) grayscale(100%) brightness(200%); /* Hace el botón de cerrar visible en fondos oscuros */
13
- }
14
-
15
- /* Estilos para botones con branding */
16
- .btn-branded-primary {
17
- background-color: var(--brand-primary-color);
18
- border-color: var(--brand-primary-color);
19
- color: var(--brand-text-on-primary);
20
- }
21
- .btn-branded-primary:hover {
22
- filter: brightness(90%);
23
- color: var(--brand-text-on-primary);
24
- }
25
-
26
- .btn-branded-secondary {
27
- background-color: var(--brand-secondary-color);
28
- border-color: var(--brand-secondary-color);
29
- color: var(--brand-text-on-secondary);
30
- }
31
- .btn-branded-secondary:hover {
32
- filter: brightness(90%);
33
- color: var(--brand-text-on-secondary);
34
- }
35
-
36
- /* Estilos para alertas informativas personalizadas */
37
- .alert-branded-info {
38
- background-color: var(--brand-info-bg);
39
- color: var(--brand-info-text);
40
- border-color: var(--brand-info-border);
41
- }
42
- .alert-branded-info strong,
43
- .alert-branded-info .alert-link {
44
- color: inherit;
45
- }
46
- .alert-branded-info .bi { /* Asegura que los iconos también tomen el color */
47
- color: inherit;
48
- }
49
-
50
2
 
51
3
  /* Título del modal */
52
4
  .modal-title{
@@ -54,7 +6,6 @@
54
6
  font-weight: bold;
55
7
  }
56
8
 
57
-
58
9
  /* Estilos del header del modal*/
59
10
  .modal-header {
60
11
  display: flex;
@@ -68,6 +19,7 @@
68
19
  margin: 0;
69
20
  padding: 0;
70
21
  flex: 1;
22
+ color: inherit;
71
23
  }
72
24
 
73
25
  /* Estilos del botón de cerrar del modal*/
@@ -77,31 +29,58 @@
77
29
  margin-left: auto;
78
30
  }
79
31
 
80
- /* ######################################################### */
81
- /* Modal de historial */
82
- /* ######################################################### */
32
+ /* Estilos del header del modal con branding */
33
+ .modal-header.branded {
34
+ background-color: var(--brand-modal-header-bg);
35
+ color: var(--brand-modal-header-text);
36
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
37
+ }
38
+ .modal-header.branded .btn-close {
39
+ filter: invert(1) grayscale(100%) brightness(200%); /* Hace el botón de cerrar visible en fondos oscuros */
40
+ }
83
41
 
84
- /* Encabezado de tabla con branding */
85
- .thead-branded th {
42
+ /* Estilos para botones con branding */
43
+ .btn-branded-primary {
86
44
  background-color: var(--brand-primary-color);
45
+ border-color: var(--brand-primary-color);
87
46
  color: var(--brand-text-on-primary);
88
- font-size: 16px;
89
- font-weight: bold;
47
+ }
48
+ .btn-branded-primary:hover {
49
+ background-color: var(--brand-text-on-primary);
50
+ color: var(--brand-primary-color);
51
+ border-color: var(--brand-primary-color);
90
52
  }
91
53
 
54
+ .btn-branded-secondary {
55
+ background-color: var(--brand-secondary-color);
56
+ border-color: var(--brand-secondary-color);
57
+ color: var(--brand-text-on-secondary);
58
+ }
59
+ .btn-branded-secondary:hover {
60
+ background-color: var(--brand-text-on-secondary);
61
+ color: var(--brand-secondary-color);
62
+ border-color: var(--brand-secondary-color);
63
+ }
92
64
 
93
- #history-content .table td:nth-child(1) { width: 5%; }
94
- #history-content .table td:nth-child(2) { width: 23%; }
95
-
96
- #history-content .table td:nth-child(3) {
97
- width: auto; /* Columna de la consulta - ocupa el resto */
65
+ /* Tabla con el resultado del historial */
66
+ .thead-branded th {
67
+ background-color: #e9ecef; /* Un gris claro estándar de Bootstrap */
68
+ color: #212529; /* El color de texto oscuro por defecto */
69
+ font-size: 16px;
70
+ font-weight: bold;
71
+ }
72
+ .col-icon {
73
+ width: 1%;
98
74
  }
99
75
 
100
- /* ######################################################### */
101
76
  /* Modal de feedback */
102
- /* ######################################################### */
103
-
104
- /* Contenedor de calificación del modal de feedback */
77
+ .rating-stars {
78
+ display: flex;
79
+ justify-content: center;
80
+ gap: 5px;
81
+ margin-bottom: 15px;
82
+ padding-top: 5px;
83
+ }
105
84
 
106
85
  /* Estilos de las estrellas del modal de feedback */
107
86
  .star {
@@ -112,16 +91,51 @@
112
91
  margin: 0 2px;
113
92
  }
114
93
 
115
- /* Estilos de las estrellas del modal de feedback al pasar el mouse */
94
+ .star::before {
95
+ content: '★';
96
+ }
97
+
116
98
  .star:hover,
117
99
  .star.active,
118
100
  .star.hover-active {
119
- color: #ffc107;
101
+ color: var(--brand-primary-color);
102
+ }
103
+
104
+ /* model de help */
105
+ .modal-body .accordion-button:not(.collapsed) {
106
+ background-color: var(--brand-primary-color);
107
+ color: var(--brand-text-on-primary);
108
+ font-weight: 600;
109
+ box-shadow: none;
110
+ }
111
+
112
+ /* 2. Estilo para el anillo de foco, aplicado ÚNICAMENTE cuando el botón está CERRADO y tiene foco. */
113
+ .modal-body .accordion-button.collapsed:focus {
114
+ background-color: #fff; /* Asegura fondo blanco al hacer foco en un item cerrado */
115
+ border-color: transparent; /* Evita bordes no deseados */
116
+ /* La única regla que debe estar aquí es la que dibuja el anillo de foco. */
117
+ box-shadow: 0 0 0 0.25rem rgba(var(--brand-primary-color-rgb), 0.25);
118
+ }
119
+
120
+ .icon-spaced {
121
+ margin-right: 10px;
122
+ }
123
+
124
+ .text-muted{
125
+ font-size:16px;
126
+ text-align: justify;
127
+ }
128
+
129
+ .feedback-text{
130
+ font-size: 16px;
120
131
  }
121
132
 
122
- /* ######################################################### */
123
133
  /* Modal de listado de archivos */
124
- /* ######################################################### */
134
+ /* Estilos del nombre del archivo del modal de archivos y ordenar icono */
135
+ .file-name-modal {
136
+ flex: 1;
137
+ margin-right: 10px;
138
+ }
125
139
 
126
140
  /* Para el icono de eliminar del modal */
127
141
  .remove-file-btn i {
@@ -135,13 +149,21 @@
135
149
  align-items: center;
136
150
  }
137
151
 
138
- /* Estilos del nombre del archivo del modal de archivos y ordenar icono */
139
- .file-name-modal {
140
- flex: 1;
141
- margin-right: 10px;
142
- }
143
-
144
152
  /* Estilos del botón de eliminar del modal de archivos y ordenar icono */
145
153
  .remove-file-btn {
146
154
  flex-shrink: 0;
147
- }
155
+ }
156
+
157
+ /* Estilos para alertas generales del chat */
158
+ .alert-branded-info {
159
+ background-color: var(--brand-info-bg);
160
+ color: var(--brand-info-text);
161
+ border-color: var(--brand-info-border);
162
+ }
163
+ .alert-branded-info strong,
164
+ .alert-branded-info .alert-link {
165
+ color: inherit;
166
+ }
167
+ .alert-branded-info .bi { /* Asegura que los iconos también tomen el color */
168
+ color: inherit;
169
+ }
@@ -0,0 +1,107 @@
1
+ /* Estos estilos son para las paginas publicas: home, signup, olvide la clave, etc */
2
+
3
+ /* --- Encabezado (top) de company --- */
4
+ .custom-company-header {
5
+ height: 78px;
6
+ margin-bottom: 20px;
7
+ padding: 0 1.5rem; /* Padding interno para que el texto no toque los bordes */
8
+ border-radius: 0.375rem; /* Bordes redondeados para que coincida con los formularios */
9
+
10
+ /* Los estilos de color y sombra se mantienen */
11
+ background-color: var(--brand-header-bg);
12
+ color: var(--brand-header-text);
13
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); /* Sombra ligeramente más suave */
14
+ }
15
+
16
+ /* Estilo específico para el nombre de la marca en el encabezado (Letra más grande) */
17
+ .custom-company-header .brand-name {
18
+ font-size: 1.8rem; /* Tamaño de fuente aumentado */
19
+ font-weight: 600;
20
+ color: inherit;
21
+ text-decoration: none;
22
+ transition: opacity 0.2s ease-in-out;
23
+ }
24
+
25
+ /* Efecto hover para el enlace del nombre de la marca */
26
+ .custom-company-header .brand-name:hover {
27
+ opacity: 0.85;
28
+ }
29
+
30
+ /* Estilo para el texto "Powered by" --- */
31
+ .custom-company-header .powered-by {
32
+ font-size: 0.9rem;
33
+ font-weight: 400;
34
+ opacity: 0.75; /* Menos prominente que el nombre de la marca */
35
+ color: inherit;
36
+ }
37
+
38
+ /* --- Estilo para el enlace de IAToolkit --- */
39
+ .custom-company-header .iatoolkit-link {
40
+ color: inherit; /* Hereda el color del texto padre */
41
+ text-decoration: none; /* ¡Elimina el subrayado! */
42
+ font-weight: 600; /* Un poco más de peso para diferenciarlo */
43
+ transition: opacity 0.2s ease-in-out;
44
+ }
45
+
46
+ .custom-company-header .form-container {
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: 1rem;
50
+ }
51
+
52
+ /* titulo en home */
53
+ .home-title {
54
+ font-size: 3.2rem;
55
+ font-weight: 800;
56
+ line-height: 1.2;
57
+ color: var(--brand-primary-color);
58
+ }
59
+ .list-example {
60
+ display: block; /* Coloca el ejemplo en su propia línea */
61
+ font-size: 0.9rem; /* Lo hace ligeramente más pequeño */
62
+ color: #6c757d; /* Color gris (muted) para texto secundario */
63
+ font-style: italic; /* Cursiva para diferenciarlo */
64
+ padding-left: 1.75rem; /* Lo indenta para alinearlo con el texto del tema */
65
+ margin-top: 0.25rem; /* Pequeño espacio superior */
66
+ }
67
+
68
+ .text-brand-primary {
69
+ font-weight: 800;
70
+ color: var(--brand-primary-color);
71
+ }
72
+
73
+ /* contenedor de formularios: login, signup, forgot password, etc. */
74
+ .branded-form-container {
75
+ background-color: #ffffff;
76
+ border: 1px solid #dee2e6;
77
+ border-top: 4px solid #adb5bd;
78
+ border-radius: 0.375rem;
79
+ padding: 2rem;
80
+ box-shadow: 0 4px 12px rgba(0,0,0,0.08);
81
+ }
82
+
83
+ .branded-form-label {
84
+ font-size: 0.85rem;
85
+ font-weight: 600;
86
+ color: #495057; /* Un gris oscuro profesional */
87
+ text-transform: uppercase;
88
+ letter-spacing: 0.05em; /* Un poco de espacio extra entre letras */
89
+ margin-bottom: 0.3rem;
90
+ display: block;
91
+ }
92
+
93
+ /* Efecto de foco brandeado para todos los form-control */
94
+ .form-control:focus {
95
+ border-color: var(--brand-primary-color);
96
+ box-shadow: 0 0 0 0.25rem rgba(var(--brand-primary-color-rgb), 0.25); /* Usa la variable RGB para el shadow */
97
+ }
98
+
99
+ .branded-form-title {
100
+ color: var(--brand-primary-color);
101
+ font-size: 1.75rem; /* Un tamaño más prominente */
102
+ font-weight: 700; /* Equivalente a fw-bold de Bootstrap */
103
+ text-align: center;
104
+ margin-bottom: 1.5rem; /* Espacio consistente debajo del título */
105
+ }
106
+
107
+
@@ -0,0 +1,182 @@
1
+ /* static/styles/landing_page.css */
2
+
3
+ /* --- Variables y Estilos Globales --- */
4
+ :root {
5
+ --website-primary-color: #4A55A2;
6
+ --website-primary-color-dark: #3A448A;
7
+ --website-gradient-start: #4A55A2;
8
+ --website-gradient-end: #7895CB;
9
+ --website-dark-text: #212529;
10
+ --website-light-bg: #f8f9fa;
11
+ --website-muted-text: #6c757d;
12
+ }
13
+
14
+ body {
15
+ background-color: #fff;
16
+ color: var(--website-dark-text);
17
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
18
+ }
19
+
20
+ /* --- Encabezado Propio (sin usar .navbar) --- */
21
+ .website-header {
22
+ margin-top: 1rem;
23
+ padding: 1rem 1.5rem; /* Padding vertical y horizontal */
24
+ border-radius: 0.5rem;
25
+ display: flex;
26
+ align-items: center;
27
+
28
+ /* Estilos de color (se mantienen) */
29
+ background-color: var(--website-primary-color);
30
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
31
+ }
32
+
33
+ .website-brand {
34
+ font-weight: 700;
35
+ font-size: 1.75rem;
36
+ color: #ffffff;
37
+ }
38
+
39
+ /* --- Sección Principal (Hero) --- */
40
+ .hero-section {
41
+ padding: 2rem 0 1rem; /* Ajustado: 5rem arriba, 0 a los lados, 2.5rem abajo */
42
+ }
43
+
44
+ .hero-title {
45
+ font-size: 3rem;
46
+ font-weight: 800;
47
+ line-height: 1.2;
48
+ margin-bottom: 1.5rem;
49
+ }
50
+ .gradient-text {
51
+ background: linear-gradient(90deg, var(--website-gradient-start), var(--website-gradient-end));
52
+ -webkit-background-clip: text;
53
+ -webkit-text-fill-color: transparent;
54
+ background-clip: text;
55
+ text-fill-color: transparent;
56
+ }
57
+ .hero-bullets {
58
+ list-style: none;
59
+ padding-left: 0;
60
+ font-size: 1.1rem;
61
+ }
62
+ .hero-bullets li {
63
+ display: flex;
64
+ align-items: center;
65
+ gap: 0.75rem;
66
+ margin-bottom: 1rem;
67
+ color: var(--website-muted-text);
68
+ }
69
+ .hero-bullets .bi {
70
+ color: var(--website-primary-color);
71
+ font-size: 1.5rem;
72
+ }
73
+
74
+ /* --- Botón de Llamada a la Acción (CTA) --- */
75
+ .hero-section .btn-primary {
76
+ background-color: var(--website-primary-color);
77
+ border-color: var(--website-primary-color);
78
+ transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out;
79
+ }
80
+ .hero-section .btn-primary:hover {
81
+ background-color: var(--website-primary-color-dark);
82
+ border-color: var(--website-primary-color-dark);
83
+ }
84
+
85
+ .bg-light h3 {
86
+ color: var(--website-primary-color);
87
+ }
88
+
89
+ .features-section {
90
+ padding: 5rem 0;
91
+ background-color: var(--website-light-bg);
92
+ }
93
+ .feature-item {
94
+ background-color: #fff;
95
+ padding: 2rem;
96
+ border-radius: 0.75rem;
97
+ border: 1px solid #e9ecef;
98
+ height: 100%;
99
+ transition: all 0.3s ease;
100
+ }
101
+ .feature-item:hover {
102
+ transform: translateY(-5px);
103
+ box-shadow: 0 8px 25px rgba(0,0,0,0.08);
104
+ }
105
+ .feature-icon {
106
+ font-size: 2.5rem;
107
+ margin-bottom: 1rem;
108
+ color: var(--website-primary-color);
109
+ }
110
+ .feature-item h3 {
111
+ font-weight: 600;
112
+ margin-bottom: 0.5rem;
113
+ }
114
+ .feature-item p {
115
+ color: var(--website-muted-text);
116
+ }
117
+
118
+ /* Estilo especial para la caja de Open Source */
119
+ .opensource-box {
120
+ background: var(--website-dark-text);
121
+ color: #fff;
122
+ padding: 2rem;
123
+ border-radius: 0.75rem;
124
+ height: 100%;
125
+ display: flex;
126
+ flex-direction: column;
127
+ justify-content: space-between;
128
+ border: 1px solid transparent;
129
+ transition: all 0.3s ease;
130
+ }
131
+ .opensource-box:hover {
132
+ transform: translateY(-5px);
133
+ box-shadow: 0 8px 25px rgba(0,0,0,0.15);
134
+ }
135
+ .opensource-icon .bi-github {
136
+ font-size: 2.5rem;
137
+ margin-bottom: 1rem;
138
+ }
139
+ .opensource-box h3 {
140
+ font-weight: 600;
141
+ }
142
+ .opensource-box p {
143
+ color: #ced4da;
144
+ margin-bottom: 1.5rem;
145
+ }
146
+
147
+ /* --- Sección del Autor --- */
148
+ .author-section {
149
+ background-color: #fff;
150
+ }
151
+ .author-card {
152
+ background-color: var(--website-light-bg);
153
+ border-radius: 0.75rem;
154
+ border: 1px solid #e9ecef;
155
+ }
156
+ .author-card h5 {
157
+ color: var(--website-primary-color);
158
+ font-weight: 600;
159
+ }
160
+ .author-bio {
161
+ color: var(--website-muted-text);
162
+ line-height: 1.6;
163
+ }
164
+ .author-linkedin {
165
+ text-decoration: none;
166
+ color: #0077b5;
167
+ font-weight: 500;
168
+ transition: opacity 0.2s;
169
+ }
170
+ .author-linkedin:hover {
171
+ opacity: 0.8;
172
+ }
173
+
174
+ /* --- Footer --- */
175
+ .landing-footer {
176
+ background-color: var(--website-light-bg);
177
+ color: var(--website-muted-text);
178
+ padding: 2rem 0;
179
+ text-align: center;
180
+ margin-top: 4rem;
181
+ border-top: 1px solid #e9ecef;
182
+ }
@@ -0,0 +1,169 @@
1
+ /* static/css/onboarding.css */
2
+
3
+ /* Fuente base para ambos contextos */
4
+ .ob-root {
5
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
6
+ }
7
+
8
+ /* Tarjeta */
9
+ .ob-card {
10
+ background-color: #fff;
11
+ border-radius: 12px;
12
+ box-shadow: 0 4px 20px rgba(0,0,0,0.1);
13
+ padding: 30px;
14
+ width: 90%;
15
+ max-width: 450px;
16
+ text-align: center;
17
+ transition: opacity 0.3s ease-in-out;
18
+ margin: 0 auto;
19
+ }
20
+
21
+ /* Contenido de tarjeta */
22
+ .ob-icon {
23
+ font-size: 40px;
24
+ color: var(--brand-primary-color, #FF5100);
25
+ margin-bottom: 15px;
26
+ }
27
+ .ob-title {
28
+ font-size: 1.25rem;
29
+ color: #333;
30
+ margin-bottom: 10px;
31
+ }
32
+ .ob-text {
33
+ font-size: 0.95rem;
34
+ color: #666;
35
+ line-height: 1.5;
36
+ min-height: 60px;
37
+ }
38
+
39
+ /* Navegación */
40
+ .ob-nav {
41
+ display: flex;
42
+ justify-content: space-between;
43
+ align-items: center;
44
+ margin-top: 20px;
45
+ }
46
+ .ob-btn {
47
+ background-color: var(--brand-secondary-color, #06326B);
48
+ border: none;
49
+ color: var(--brand-text-on-secondary, #FFFFFF);
50
+ border-radius: 50%;
51
+ width: 40px;
52
+ height: 40px;
53
+ cursor: pointer;
54
+ transition: opacity 0.2s;
55
+ display: inline-flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ }
59
+ .ob-btn:hover { opacity: 0.85; }
60
+
61
+ /* Dots */
62
+ .ob-dots {
63
+ display: flex;
64
+ gap: 8px;
65
+ }
66
+ .ob-dots > div {
67
+ width: 10px;
68
+ height: 10px;
69
+ border-radius: 50%;
70
+ background-color: #ddd;
71
+ transition: background-color 0.3s;
72
+ }
73
+ .ob-dots > div.active {
74
+ background-color: var(--brand-primary-color, #FF5100);
75
+ }
76
+
77
+ /* Encabezado reutilizable (si se usa) */
78
+ .ob-brand-header {
79
+ font-size: 2rem;
80
+ font-weight: 700;
81
+ margin-bottom: 24px;
82
+ color: var(--brand-secondary-color, #06326B);
83
+ text-align: center;
84
+ }
85
+ .ob-brand-header .brand-name {
86
+ color: var(--brand-primary-color, #FF5100);
87
+ }
88
+
89
+ /* Utilidades */
90
+ .ob-fade {
91
+ transition: opacity 0.5s ease-in-out;
92
+ }
93
+
94
+ /* Responsivo */
95
+ @media (max-width: 420px) {
96
+ .ob-card { padding: 24px; }
97
+ .ob-icon { font-size: 34px; }
98
+ }
99
+
100
+ /* Overlay a pantalla completa */
101
+ .onboarding-shell-root {
102
+ position: relative;
103
+ height: calc(100vh - 0px);
104
+ }
105
+
106
+ /* Centrado vertical y horizontal del contenido del loader */
107
+ #loader-wrapper {
108
+ position: absolute; inset: 0;
109
+ background-color: #f4f7f6;
110
+ z-index: 1000;
111
+ display: flex; align-items: center; justify-content: center;
112
+ padding: 20px; box-sizing: border-box;
113
+ transition: opacity 0.5s ease-in-out;
114
+ }
115
+
116
+ /* Pila vertical: header + tarjeta + banda de carga */
117
+ .ob-stack {
118
+ width: 100%;
119
+ max-width: 520px; /* ligeramente más que la tarjeta para respiración */
120
+ display: flex;
121
+ flex-direction: column;
122
+ align-items: stretch; /* la tarjeta ocupa el ancho */
123
+ gap: 16px;
124
+ }
125
+
126
+ /* Header de marca consistente */
127
+ .ob-brand-header {
128
+ font-size: 2rem;
129
+ font-weight: 700;
130
+ margin: 0;
131
+ color: var(--brand-secondary-color, #06326B);
132
+ text-align: center;
133
+ }
134
+ .ob-brand-header .brand-name {
135
+ color: var(--brand-primary-color, #FF5100);
136
+ }
137
+
138
+ /* Banda de estado integrada visualmente con la tarjeta */
139
+ .ob-loading-band {
140
+ display: flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ gap: 12px;
144
+ padding: 12px 14px;
145
+ background: #ffffff;
146
+ border-radius: 12px;
147
+ box-shadow: 0 4px 20px rgba(0,0,0,0.08);
148
+ }
149
+
150
+ /* Spinner */
151
+ .spinner {
152
+ width: 28px; height: 28px;
153
+ border: 4px solid rgba(0,0,0,0.1);
154
+ border-top-color: var(--brand-primary-color, #FF5100);
155
+ border-radius: 50%;
156
+ animation: spin 1s linear infinite;
157
+ }
158
+ @keyframes spin { to { transform: rotate(360deg); } }
159
+
160
+ #loading-status p {
161
+ font-size: 0.95rem;
162
+ font-weight: 500;
163
+ color: #555;
164
+ margin: 0;
165
+ }
166
+
167
+ /* Iframe contenedor */
168
+ #content-container { width: 100%; height: 100%; }
169
+ #content-container iframe { width: 100%; height: 100%; border: none; }
@@ -1,24 +1,15 @@
1
1
  Eres un asistente que responde preguntas o ejecuta tareas según el contexto de la empresa.
2
2
 
3
3
  ### **Nombre de la empresa**
4
- ## Nombre: {{company.name}}
4
+ ## Nombre: {{company}}, tambien se conoce como {{ company_short_name }}
5
5
 
6
6
  ### ** Información del usuario que esta consultando este chat**
7
- Contexto del usuario:
7
+ - Identificador unico de usuario: {{ user_identifier }}
8
8
  - Nombre: {{ user_fullname }}
9
9
  - Email: {{ user_email }}
10
10
  - Tipo de usuario: {% if user_is_local %}Interno{% else %}Externo{% endif %}
11
- - Empresa: {{ company_name }}
11
+ - Rol de usuario: {{ user_rol }}
12
12
 
13
- {% if user_name %}
14
- El usuario que consulta se identifica con la variable `user_name` y tiene el
15
- siguiente valor: {{ user_name }}.
16
-
17
- Este usuario tiene el rol: {{ user_rol }} en el producto {{ user_product }}.
18
-
19
- {% else %}
20
- El usuario que consulta se identifica como: {{ user_id }}
21
- {% endif %}
22
13
 
23
14
  ## Servicios de datos (function calls) disponibles en {{company.name}}:
24
15
  {% for service in service_list %}