iatoolkit 0.59.1__py3-none-any.whl → 0.67.0__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.
- iatoolkit/__init__.py +2 -0
- iatoolkit/base_company.py +2 -19
- iatoolkit/common/routes.py +28 -25
- iatoolkit/common/session_manager.py +2 -0
- iatoolkit/common/util.py +17 -6
- iatoolkit/company_registry.py +1 -2
- iatoolkit/iatoolkit.py +54 -20
- iatoolkit/locales/en.yaml +167 -0
- iatoolkit/locales/es.yaml +163 -0
- iatoolkit/repositories/database_manager.py +3 -3
- iatoolkit/repositories/document_repo.py +1 -1
- iatoolkit/repositories/models.py +3 -4
- iatoolkit/repositories/profile_repo.py +0 -4
- iatoolkit/services/auth_service.py +44 -32
- iatoolkit/services/branding_service.py +35 -27
- iatoolkit/services/configuration_service.py +140 -0
- iatoolkit/services/dispatcher_service.py +20 -18
- iatoolkit/services/document_service.py +5 -2
- iatoolkit/services/excel_service.py +15 -11
- iatoolkit/services/file_processor_service.py +4 -12
- iatoolkit/services/history_service.py +8 -7
- iatoolkit/services/i18n_service.py +104 -0
- iatoolkit/services/jwt_service.py +7 -9
- iatoolkit/services/language_service.py +79 -0
- iatoolkit/services/load_documents_service.py +4 -4
- iatoolkit/services/mail_service.py +9 -4
- iatoolkit/services/onboarding_service.py +10 -4
- iatoolkit/services/profile_service.py +59 -38
- iatoolkit/services/prompt_manager_service.py +20 -16
- iatoolkit/services/query_service.py +15 -14
- iatoolkit/services/sql_service.py +6 -2
- iatoolkit/services/user_feedback_service.py +70 -29
- iatoolkit/static/js/chat_feedback_button.js +80 -0
- iatoolkit/static/js/chat_help_content.js +124 -0
- iatoolkit/static/js/chat_history_button.js +110 -0
- iatoolkit/static/js/chat_logout_button.js +36 -0
- iatoolkit/static/js/chat_main.js +32 -184
- iatoolkit/static/js/{chat_onboarding.js → chat_onboarding_button.js} +0 -1
- iatoolkit/static/js/chat_prompt_manager.js +94 -0
- iatoolkit/static/js/chat_reload_button.js +35 -0
- iatoolkit/static/styles/chat_iatoolkit.css +251 -205
- iatoolkit/static/styles/chat_modal.css +63 -95
- iatoolkit/static/styles/chat_public.css +107 -0
- iatoolkit/static/styles/landing_page.css +121 -167
- iatoolkit/templates/_company_header.html +20 -0
- iatoolkit/templates/_login_widget.html +10 -10
- iatoolkit/templates/base.html +36 -19
- iatoolkit/templates/change_password.html +24 -22
- iatoolkit/templates/chat.html +121 -93
- iatoolkit/templates/chat_modals.html +113 -74
- iatoolkit/templates/error.html +44 -8
- iatoolkit/templates/forgot_password.html +17 -15
- iatoolkit/templates/index.html +66 -81
- iatoolkit/templates/login_simulation.html +16 -5
- iatoolkit/templates/onboarding_shell.html +1 -2
- iatoolkit/templates/signup.html +22 -20
- iatoolkit/views/base_login_view.py +12 -1
- iatoolkit/views/change_password_view.py +50 -33
- iatoolkit/views/external_login_view.py +5 -11
- iatoolkit/views/file_store_api_view.py +7 -9
- iatoolkit/views/forgot_password_view.py +21 -19
- iatoolkit/views/help_content_api_view.py +54 -0
- iatoolkit/views/history_api_view.py +16 -12
- iatoolkit/views/home_view.py +61 -0
- iatoolkit/views/index_view.py +5 -34
- iatoolkit/views/init_context_api_view.py +16 -13
- iatoolkit/views/llmquery_api_view.py +38 -28
- iatoolkit/views/login_simulation_view.py +14 -2
- iatoolkit/views/login_view.py +48 -33
- iatoolkit/views/logout_api_view.py +49 -0
- iatoolkit/views/profile_api_view.py +46 -0
- iatoolkit/views/prompt_api_view.py +8 -8
- iatoolkit/views/signup_view.py +27 -25
- iatoolkit/views/{tasks_view.py → tasks_api_view.py} +10 -36
- iatoolkit/views/tasks_review_api_view.py +55 -0
- iatoolkit/views/user_feedback_api_view.py +21 -32
- iatoolkit/views/verify_user_view.py +33 -26
- {iatoolkit-0.59.1.dist-info → iatoolkit-0.67.0.dist-info}/METADATA +40 -22
- iatoolkit-0.67.0.dist-info/RECORD +120 -0
- iatoolkit-0.67.0.dist-info/licenses/LICENSE +21 -0
- iatoolkit/static/js/chat_context_reload.js +0 -54
- iatoolkit/static/js/chat_feedback.js +0 -115
- iatoolkit/static/js/chat_history.js +0 -127
- iatoolkit/static/styles/chat_info.css +0 -53
- iatoolkit/templates/_branding_styles.html +0 -53
- iatoolkit/templates/_navbar.html +0 -9
- iatoolkit/templates/header.html +0 -31
- iatoolkit/templates/test.html +0 -9
- iatoolkit/views/chat_token_request_view.py +0 -98
- iatoolkit/views/tasks_review_view.py +0 -83
- iatoolkit-0.59.1.dist-info/RECORD +0 -111
- {iatoolkit-0.59.1.dist-info → iatoolkit-0.67.0.dist-info}/WHEEL +0 -0
- {iatoolkit-0.59.1.dist-info → iatoolkit-0.67.0.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,49 +29,36 @@
|
|
|
77
29
|
margin-left: auto;
|
|
78
30
|
}
|
|
79
31
|
|
|
80
|
-
/*
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
.thead-branded th {
|
|
86
|
-
background-color: var(--brand-primary-color);
|
|
87
|
-
color: var(--brand-text-on-primary);
|
|
88
|
-
font-size: 16px;
|
|
89
|
-
font-weight: bold;
|
|
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);
|
|
90
37
|
}
|
|
91
|
-
|
|
92
|
-
|
|
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 */
|
|
38
|
+
.modal-header.branded .btn-close {
|
|
39
|
+
filter: invert(1) grayscale(100%) brightness(200%); /* Hace el botón de cerrar visible en fondos oscuros */
|
|
98
40
|
}
|
|
99
41
|
|
|
100
|
-
/* Evita el salto de línea en la celda de la fecha */
|
|
101
|
-
#historyModal .date-cell {
|
|
102
|
-
white-space: nowrap;
|
|
103
|
-
}
|
|
104
42
|
|
|
105
|
-
/*
|
|
106
|
-
|
|
107
|
-
color:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
43
|
+
/* Tabla con el resultado del historial */
|
|
44
|
+
.thead-branded th {
|
|
45
|
+
background-color: #e9ecef; /* Un gris claro estándar de Bootstrap */
|
|
46
|
+
color: #212529; /* El color de texto oscuro por defecto */
|
|
47
|
+
font-size: 16px;
|
|
48
|
+
font-weight: bold;
|
|
111
49
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
opacity: 1; /* El icono se vuelve completamente opaco al pasar el ratón */
|
|
115
|
-
cursor: pointer; /* Asegura que el cursor cambie a una mano */
|
|
50
|
+
.col-icon {
|
|
51
|
+
width: 1%;
|
|
116
52
|
}
|
|
117
53
|
|
|
118
|
-
/* ######################################################### */
|
|
119
54
|
/* Modal de feedback */
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
55
|
+
.rating-stars {
|
|
56
|
+
display: flex;
|
|
57
|
+
justify-content: center;
|
|
58
|
+
gap: 5px;
|
|
59
|
+
margin-bottom: 15px;
|
|
60
|
+
padding-top: 5px;
|
|
61
|
+
}
|
|
123
62
|
|
|
124
63
|
/* Estilos de las estrellas del modal de feedback */
|
|
125
64
|
.star {
|
|
@@ -130,16 +69,51 @@
|
|
|
130
69
|
margin: 0 2px;
|
|
131
70
|
}
|
|
132
71
|
|
|
133
|
-
|
|
72
|
+
.star::before {
|
|
73
|
+
content: '★';
|
|
74
|
+
}
|
|
75
|
+
|
|
134
76
|
.star:hover,
|
|
135
77
|
.star.active,
|
|
136
78
|
.star.hover-active {
|
|
137
|
-
color:
|
|
79
|
+
color: var(--brand-primary-color);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* model de help */
|
|
83
|
+
.modal-body .accordion-button:not(.collapsed) {
|
|
84
|
+
background-color: var(--brand-primary-color);
|
|
85
|
+
color: var(--brand-text-on-primary);
|
|
86
|
+
font-weight: 600;
|
|
87
|
+
box-shadow: none;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Estilo para el anillo de foco, aplicado ÚNICAMENTE cuando el botón está CERRADO y tiene foco. */
|
|
91
|
+
.modal-body .accordion-button.collapsed:focus {
|
|
92
|
+
background-color: #fff; /* Asegura fondo blanco al hacer foco en un item cerrado */
|
|
93
|
+
border-color: transparent; /* Evita bordes no deseados */
|
|
94
|
+
/* La única regla que debe estar aquí es la que dibuja el anillo de foco. */
|
|
95
|
+
box-shadow: 0 0 0 0.25rem rgba(var(--brand-primary-color-rgb), 0.25);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.icon-spaced {
|
|
99
|
+
margin-right: 10px;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.text-muted{
|
|
103
|
+
font-size:16px;
|
|
104
|
+
text-align: justify;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.feedback-text{
|
|
108
|
+
font-size: 16px;
|
|
138
109
|
}
|
|
139
110
|
|
|
140
|
-
/* ######################################################### */
|
|
141
111
|
/* Modal de listado de archivos */
|
|
142
|
-
/*
|
|
112
|
+
/* Estilos del nombre del archivo del modal de archivos y ordenar icono */
|
|
113
|
+
.file-name-modal {
|
|
114
|
+
flex: 1;
|
|
115
|
+
margin-right: 10px;
|
|
116
|
+
}
|
|
143
117
|
|
|
144
118
|
/* Para el icono de eliminar del modal */
|
|
145
119
|
.remove-file-btn i {
|
|
@@ -153,13 +127,7 @@
|
|
|
153
127
|
align-items: center;
|
|
154
128
|
}
|
|
155
129
|
|
|
156
|
-
/* Estilos del nombre del archivo del modal de archivos y ordenar icono */
|
|
157
|
-
.file-name-modal {
|
|
158
|
-
flex: 1;
|
|
159
|
-
margin-right: 10px;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
130
|
/* Estilos del botón de eliminar del modal de archivos y ordenar icono */
|
|
163
131
|
.remove-file-btn {
|
|
164
132
|
flex-shrink: 0;
|
|
165
|
-
}
|
|
133
|
+
}
|
|
@@ -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
|
+
|
|
@@ -1,228 +1,182 @@
|
|
|
1
1
|
/* static/styles/landing_page.css */
|
|
2
2
|
|
|
3
|
-
/* ---
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
|
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;
|
|
13
12
|
}
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
color:
|
|
17
|
-
|
|
18
|
-
font-
|
|
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;
|
|
19
18
|
}
|
|
20
19
|
|
|
21
|
-
.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/* Hace que el color del texto sea transparente para que se vea el fondo */
|
|
30
|
-
color: transparent;
|
|
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;
|
|
31
27
|
|
|
32
|
-
|
|
33
|
-
|
|
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);
|
|
34
31
|
}
|
|
35
32
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
justify-content: center;
|
|
41
|
-
height: 100%;
|
|
42
|
-
padding-left: 2rem;
|
|
33
|
+
.website-brand {
|
|
34
|
+
font-weight: 700;
|
|
35
|
+
font-size: 1.75rem;
|
|
36
|
+
color: #ffffff;
|
|
43
37
|
}
|
|
44
38
|
|
|
45
|
-
/* ---
|
|
39
|
+
/* --- Sección Principal (Hero) --- */
|
|
46
40
|
.hero-section {
|
|
47
|
-
padding: 1rem 0
|
|
48
|
-
background-color: #f8f9fa; /* Fondo gris claro para la sección principal */
|
|
41
|
+
padding: 2rem 0 1rem; /* Ajustado: 5rem arriba, 0 a los lados, 2.5rem abajo */
|
|
49
42
|
}
|
|
50
43
|
|
|
51
44
|
.hero-title {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
-webkit-text-fill-color: transparent;
|
|
57
|
-
line-height: 1.1;
|
|
58
|
-
letter-spacing: -0.5px;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.hero-bullets {
|
|
62
|
-
list-style: none;
|
|
63
|
-
padding-left: 2rem;
|
|
64
|
-
margin-top: 1.5rem;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.hero-bullets li {
|
|
68
|
-
font-size: 1.15rem;
|
|
69
|
-
color: #4b5563;
|
|
70
|
-
margin-bottom: 0.8rem;
|
|
71
|
-
display: flex;
|
|
72
|
-
align-items: flex-start;
|
|
73
|
-
gap: 0.6rem;
|
|
74
|
-
line-height: 1.5;
|
|
45
|
+
font-size: 3rem;
|
|
46
|
+
font-weight: 800;
|
|
47
|
+
line-height: 1.2;
|
|
48
|
+
margin-bottom: 1.5rem;
|
|
75
49
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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;
|
|
81
56
|
}
|
|
82
|
-
|
|
83
|
-
|
|
57
|
+
.hero-bullets {
|
|
58
|
+
list-style: none;
|
|
59
|
+
padding-left: 0;
|
|
84
60
|
font-size: 1.1rem;
|
|
85
|
-
color: #6c757d;
|
|
86
|
-
margin-top: 1.5rem;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
.value-proposition .hero-accelerator {
|
|
91
|
-
color: var(--brand-primary-color, #0d6efd);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/* --- Estilo para el título del widget de login --- */
|
|
95
|
-
.hero-section .bg-light h4 {
|
|
96
|
-
color: var(--brand-primary-color, #0d6efd);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
.author-section {
|
|
100
|
-
background: #ffffff;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.author-card {
|
|
104
|
-
background: #f8f9fa;
|
|
105
|
-
border: 1px solid #e9ecef;
|
|
106
|
-
border-radius: 10px;
|
|
107
61
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
color: var(--brand-text-on-primary, #fff);
|
|
115
|
-
display: flex; align-items: center; justify-content: center;
|
|
116
|
-
font-size: 2rem;
|
|
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);
|
|
117
68
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
line-height: 1.6;
|
|
69
|
+
.hero-bullets .bi {
|
|
70
|
+
color: var(--website-primary-color);
|
|
71
|
+
font-size: 1.5rem;
|
|
122
72
|
}
|
|
123
73
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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;
|
|
127
79
|
}
|
|
128
|
-
.
|
|
129
|
-
|
|
80
|
+
.hero-section .btn-primary:hover {
|
|
81
|
+
background-color: var(--website-primary-color-dark);
|
|
82
|
+
border-color: var(--website-primary-color-dark);
|
|
130
83
|
}
|
|
131
84
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
font-style: italic;
|
|
135
|
-
font-size: 0.9rem;
|
|
136
|
-
line-height: 1.4;
|
|
85
|
+
.bg-light h3 {
|
|
86
|
+
color: var(--website-primary-color);
|
|
137
87
|
}
|
|
138
88
|
|
|
139
|
-
/* --- 3. Sección de Características --- */
|
|
140
89
|
.features-section {
|
|
141
90
|
padding: 5rem 0;
|
|
142
|
-
background-color:
|
|
91
|
+
background-color: var(--website-light-bg);
|
|
143
92
|
}
|
|
144
|
-
|
|
145
|
-
/* (El resto del archivo CSS permanece sin cambios) */
|
|
146
93
|
.feature-item {
|
|
147
|
-
|
|
94
|
+
background-color: #fff;
|
|
148
95
|
padding: 2rem;
|
|
149
|
-
|
|
150
|
-
border: 1px solid #
|
|
151
|
-
|
|
152
|
-
|
|
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);
|
|
153
104
|
}
|
|
154
|
-
|
|
155
105
|
.feature-icon {
|
|
156
|
-
font-size:
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
display: inline-block;
|
|
106
|
+
font-size: 2.5rem;
|
|
107
|
+
margin-bottom: 1rem;
|
|
108
|
+
color: var(--website-primary-color);
|
|
160
109
|
}
|
|
161
|
-
|
|
162
110
|
.feature-item h3 {
|
|
163
|
-
font-size: 1.4rem;
|
|
164
111
|
font-weight: 600;
|
|
165
|
-
margin-bottom:
|
|
112
|
+
margin-bottom: 0.5rem;
|
|
166
113
|
}
|
|
167
|
-
|
|
168
114
|
.feature-item p {
|
|
169
|
-
color:
|
|
115
|
+
color: var(--website-muted-text);
|
|
170
116
|
}
|
|
171
117
|
|
|
118
|
+
/* Estilo especial para la caja de Open Source */
|
|
172
119
|
.opensource-box {
|
|
173
|
-
background
|
|
174
|
-
color: #
|
|
120
|
+
background: var(--website-dark-text);
|
|
121
|
+
color: #fff;
|
|
175
122
|
padding: 2rem;
|
|
176
|
-
border-radius: 0.
|
|
177
|
-
height: 100%;
|
|
123
|
+
border-radius: 0.75rem;
|
|
124
|
+
height: 100%;
|
|
178
125
|
display: flex;
|
|
179
126
|
flex-direction: column;
|
|
180
127
|
justify-content: space-between;
|
|
181
|
-
|
|
128
|
+
border: 1px solid transparent;
|
|
129
|
+
transition: all 0.3s ease;
|
|
182
130
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
color: var(--brand-text-on-primary, #FFFFFF);
|
|
187
|
-
opacity: 0.9;
|
|
188
|
-
margin-bottom: 1.5rem;
|
|
131
|
+
.opensource-box:hover {
|
|
132
|
+
transform: translateY(-5px);
|
|
133
|
+
box-shadow: 0 8px 25px rgba(0,0,0,0.15);
|
|
189
134
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
font-weight: 600;
|
|
193
|
-
font-size: 1.4rem; /* Tamaño consistente */
|
|
135
|
+
.opensource-icon .bi-github {
|
|
136
|
+
font-size: 2.5rem;
|
|
194
137
|
margin-bottom: 1rem;
|
|
195
138
|
}
|
|
196
|
-
|
|
197
|
-
|
|
139
|
+
.opensource-box h3 {
|
|
140
|
+
font-weight: 600;
|
|
141
|
+
}
|
|
142
|
+
.opensource-box p {
|
|
143
|
+
color: #ced4da;
|
|
198
144
|
margin-bottom: 1.5rem;
|
|
199
|
-
color: #adb5bd;
|
|
200
145
|
}
|
|
201
146
|
|
|
202
|
-
|
|
203
|
-
|
|
147
|
+
/* --- Sección del Autor --- */
|
|
148
|
+
.author-section {
|
|
149
|
+
background-color: #fff;
|
|
204
150
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
border-top: 1px solid #495057;
|
|
210
|
-
font-size: 0.9rem;
|
|
211
|
-
color: #ced4da;
|
|
151
|
+
.author-card {
|
|
152
|
+
background-color: var(--website-light-bg);
|
|
153
|
+
border-radius: 0.75rem;
|
|
154
|
+
border: 1px solid #e9ecef;
|
|
212
155
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
color:
|
|
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;
|
|
219
172
|
}
|
|
220
173
|
|
|
221
|
-
/* ---
|
|
174
|
+
/* --- Footer --- */
|
|
222
175
|
.landing-footer {
|
|
223
|
-
background-color:
|
|
224
|
-
color:
|
|
176
|
+
background-color: var(--website-light-bg);
|
|
177
|
+
color: var(--website-muted-text);
|
|
225
178
|
padding: 2rem 0;
|
|
226
179
|
text-align: center;
|
|
227
|
-
|
|
180
|
+
margin-top: 4rem;
|
|
181
|
+
border-top: 1px solid #e9ecef;
|
|
228
182
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{# El div principal ahora es un contenedor y tiene los estilos y clases de alineación #}
|
|
2
|
+
<div class="custom-company-header container d-flex justify-content-between align-items-center">
|
|
3
|
+
|
|
4
|
+
{% if company_short_name and branding %}
|
|
5
|
+
<a href="{{ url_for('home', company_short_name=company_short_name) }}"
|
|
6
|
+
class="brand-name"
|
|
7
|
+
style="{{ branding.primary_text_style }}">
|
|
8
|
+
{{ branding.name }} IA
|
|
9
|
+
</a>
|
|
10
|
+
{% else %}
|
|
11
|
+
<span class="brand-name">
|
|
12
|
+
IAToolkit
|
|
13
|
+
</span>
|
|
14
|
+
{% endif %}
|
|
15
|
+
|
|
16
|
+
{# Texto "Powered by" con enlace a iatoolkit.com #}
|
|
17
|
+
<span class="powered-by">
|
|
18
|
+
Powered by <a href="{{ url_for('index') }}" rel="noopener noreferrer" class="iatoolkit-link">IAToolkit</a>
|
|
19
|
+
</span>
|
|
20
|
+
</div>
|