cambio en footer, soluciones y carousel
This commit is contained in:
parent
2956937c64
commit
934aed1d52
30
README.md
30
README.md
@ -1,4 +1,4 @@
|
||||
# Descargar y mover el repositorio
|
||||
## Descargar y mover el repositorio
|
||||
```bash
|
||||
cd ~
|
||||
git clone gitea@192.168.10.40:dix/formha.git
|
||||
@ -6,12 +6,12 @@ sudo mv formha/ /var/www
|
||||
cd /var/www/formha/
|
||||
```
|
||||
|
||||
# Entrar en modo Dios
|
||||
## Entrar en modo Dios
|
||||
```bash
|
||||
sudo su
|
||||
```
|
||||
|
||||
# Crear el ambiente virtual
|
||||
## Crear el ambiente virtual
|
||||
```bash
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
@ -19,13 +19,13 @@ pip install -r requirements.txt
|
||||
deactivate
|
||||
```
|
||||
|
||||
# Salimos del modo Dios
|
||||
## Salimos del modo Dios
|
||||
```bash
|
||||
exit
|
||||
```
|
||||
|
||||
# Añade las variables de entorno del proyecto al archivo envars
|
||||
- si tienes problemas con las variables de entorno deberás de comentarlas y reiniciar apache, una vez reiniciado deberas descomentar las variables de entorno y volver a reiniciar apache
|
||||
## Añade las variables de entorno del proyecto al archivo **envars**
|
||||
Sí tienes problemas con las variables de entorno deberás de comentarlas y reiniciar apache, una vez reiniciado deberás descomentar las variables de entorno y volver a reiniciar apache
|
||||
```bash
|
||||
sudo nano /etc/apache2/envvars
|
||||
```
|
||||
@ -46,19 +46,27 @@ export forma_db='{
|
||||
#/////////////////////////////////////
|
||||
```
|
||||
|
||||
# Movemos el archivo de configuración a Apache (solo se hace 1 vez)
|
||||
## SI TE DA ERROR PRIMERO DESACTIVA APACHE EL PROBLEMA ES LAS VARIABLES DE ENTORNO
|
||||
sudo systemctl stop apache2
|
||||
## Movemos el archivo de configuración a Apache (solo se hace 1 vez)
|
||||
### SI TE DA ERROR PRIMERO DESACTIVA APACHE EL PROBLEMA ES LAS VARIABLES DE ENTORNO
|
||||
|
||||
```bash
|
||||
sudo systemctl stop apache2
|
||||
sudo mv formha.conf /etc/apache2/sites-available/
|
||||
cd /etc/apache2/sites-available/
|
||||
sudo a2ensite formha.conf
|
||||
|
||||
```
|
||||
## Reiniciar apache
|
||||
```bash
|
||||
sudo systemctl reload apache2
|
||||
sudo systemctl restart apache2
|
||||
```
|
||||
# IMPORTANTE
|
||||
- Debes de dar permisos a la ruta de archivos UPLOAD (solo se ejecuta una vez)
|
||||
```bash
|
||||
sudo chown -R www-data:www-data /var/www/uploads/formha
|
||||
sudo chmod -R 755 /var/www/uploads/formha
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Binary file not shown.
@ -54,7 +54,7 @@ class Carousel(FlaskForm):
|
||||
]
|
||||
)
|
||||
|
||||
bg_color = StringField('Color de fondo del texto: ', widget=ColorInput(), validators=[DataRequired()])
|
||||
bg_color = StringField('Color de fondo: ', widget=ColorInput(), validators=[DataRequired()])
|
||||
|
||||
txt_color = StringField('Color del texto: ', widget=ColorInput(), validators=[DataRequired()])
|
||||
|
||||
|
35
main.py
35
main.py
@ -33,7 +33,7 @@ if 'microsoft' in platform.uname().release.lower():
|
||||
folder_upload = os.path.join(os.getcwd(), "static", "uploads")
|
||||
|
||||
elif platform.system() == "Linux":
|
||||
folder_upload = "/var/www/formha/static/uploads/"
|
||||
folder_upload = "/var/www/uploads/formha"
|
||||
|
||||
|
||||
|
||||
@ -183,7 +183,7 @@ def solutions():
|
||||
return render_template(v['solutions'], active_page='solutions')
|
||||
|
||||
@app.route('/methodology')
|
||||
@cache.cached(timeout=43200)
|
||||
# @cache.cached(timeout=43200)
|
||||
def methodology():
|
||||
return render_template(v['methodology'], active_page='methodology')
|
||||
|
||||
@ -419,13 +419,32 @@ def recover_pswd():
|
||||
recipients=[emailPswdReco] # Asegúrate que es una lista
|
||||
)
|
||||
|
||||
# msg.html = render_template( 'email/recover_pswd.html', temp_password=new_tmp_pswd )
|
||||
|
||||
msg.html = """
|
||||
<h1>Nueva contraseña temporal:</h1>
|
||||
<p><strong>Contraseña:</strong> {}</p>
|
||||
<p><strong>Una vez iniciada tu sesión debes de cambiar la contraseña a una nueva que puedas recordar</strong></p>
|
||||
""".format(new_tmp_pswd)
|
||||
msg.html = f"""
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Recuperación de contraseña</title>
|
||||
</head>
|
||||
<body style="font-family: Arial, sans-serif; background-color: #f4f4f4; padding: 20px;">
|
||||
<div style="max-width: 600px; margin: auto; background-color: white; padding: 30px; border-radius: 10px; box-shadow: 0 0 10px rgba(0,0,0,0.1);">
|
||||
<h2 style="color: #2c3e50;">🔒 Recuperación de contraseña</h2>
|
||||
<p>Hola,</p>
|
||||
<p>Hemos recibido una solicitud para restablecer tu contraseña. A continuación te proporcionamos una contraseña temporal que podrás usar para iniciar sesión:</p>
|
||||
|
||||
<p style="font-size: 18px;"><strong>🔑 Contraseña temporal:</strong> <span style="color: #e74c3c;">{new_tmp_pswd}</span></p>
|
||||
|
||||
<p><strong>Importante:</strong> Una vez que inicies sesión, te recomendamos cambiar tu contraseña por una que solo tú conozcas y puedas recordar fácilmente.</p>
|
||||
|
||||
<hr>
|
||||
<p style="font-size: 12px; color: #888;">Este es un mensaje automático, por favor no respondas a este correo.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
||||
|
||||
|
||||
dbUsers.update_pswd(pswd=hashed_new_pswd, email=emailPswdReco)
|
||||
|
||||
|
@ -55,6 +55,7 @@
|
||||
height: 100vh;
|
||||
object-fit: cover;
|
||||
}
|
||||
main { min-height: 80dvh; }
|
||||
}
|
||||
|
||||
/* --------- Responsivo (ajustes si necesitas) ---------- */
|
||||
@ -68,6 +69,8 @@
|
||||
.carousel-caption.centered .caption-content h2 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
main { min-height: 80dvh; }
|
||||
}
|
||||
|
||||
/* Tablets */
|
||||
@ -75,14 +78,24 @@
|
||||
.carousel-caption.centered .caption-content h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
main { min-height: 80dvh; }
|
||||
}
|
||||
|
||||
/* Laptops */
|
||||
@media (min-width: 1024px) and (max-width: 1439px) {
|
||||
/* ajustes opcionales */
|
||||
main { min-height: 80dvh; }
|
||||
}
|
||||
|
||||
/* Pantallas grandes */
|
||||
@media (min-width: 1440px) {
|
||||
/* ajustes opcionales */
|
||||
main { min-height: 80dvh; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -163,7 +163,7 @@ main {
|
||||
|
||||
main {
|
||||
background-size: 50% auto; /* 30% del ancho del contenedor */
|
||||
height: 80vh;
|
||||
min-height: 70dvh;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,13 +1,21 @@
|
||||
.container{
|
||||
& p {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
main {
|
||||
place-items: center;
|
||||
}
|
||||
|
||||
#random-img {
|
||||
width: 70%;
|
||||
height: auto;
|
||||
|
||||
background-color: #fff;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Smartphones (hasta 767px) */
|
||||
@media (max-width: 767px) {
|
||||
/* main{ background-color: black; } */
|
||||
|
@ -1,6 +1,12 @@
|
||||
import { simpleNotification } from '../../z_comps/notify.js';
|
||||
|
||||
|
||||
// valida los archivos que se cargan en el formulario
|
||||
// solo permite jpg, jpeg, png, mp4
|
||||
// y los archivos que no son de imagen se eliminan
|
||||
// y se muestra un mensaje de error
|
||||
|
||||
|
||||
let form = document.querySelector("form");
|
||||
let img = document.getElementById("img");
|
||||
|
||||
|
99
static/h_tmp_user/i_carousel_form/datatable_carousel.js
Normal file
99
static/h_tmp_user/i_carousel_form/datatable_carousel.js
Normal file
@ -0,0 +1,99 @@
|
||||
new DataTable('#tblCarousel', {
|
||||
responsive: {
|
||||
details: {
|
||||
type: 'column',
|
||||
renderer: function (api, rowIdx, columns) {
|
||||
const data = $.map(columns, function (col) {
|
||||
// Excluir columnas ocultas con títulos no deseados
|
||||
if (
|
||||
col.hidden &&
|
||||
!(
|
||||
col.title.includes("ID") ||
|
||||
col.title === 'Acciones'
|
||||
)
|
||||
) {
|
||||
return `
|
||||
<tr data-dt-row="${col.rowIndex}" data-dt-column="${col.columnIndex}">
|
||||
<td style="padding-left: 1rem; font-weight: 600; min-width: 120px;">${col.title}:</td>
|
||||
<td style="padding-left: 1rem;">${col.data}</td>
|
||||
</tr>
|
||||
`;
|
||||
}
|
||||
return '';
|
||||
}).join('');
|
||||
|
||||
return data
|
||||
? $('<table style="width:100%"/>').append(`<tbody>${data}</tbody>`)
|
||||
: false;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
autoWidth: false,
|
||||
dom: '<"top"lf>rt<"bottom"ip>',
|
||||
|
||||
language: {
|
||||
search: "Buscar:",
|
||||
lengthMenu: "Mostrar _MENU_ registros",
|
||||
info: "Mostrando _START_ a _END_ de _TOTAL_ registros",
|
||||
infoEmpty: "Mostrando 0 a 0 de 0 registros",
|
||||
infoFiltered: "(filtrado de _MAX_ registros totales)",
|
||||
paginate: {
|
||||
first: "Primero",
|
||||
last: "Último",
|
||||
next: "Siguiente",
|
||||
previous: "Anterior"
|
||||
}
|
||||
},
|
||||
|
||||
initComplete: function () {
|
||||
const api = this.api();
|
||||
|
||||
// Agregar filtros a columnas que lo permiten
|
||||
api.columns().every(function () {
|
||||
const column = this;
|
||||
const header = $(column.header());
|
||||
const title = header.text().trim();
|
||||
|
||||
|
||||
|
||||
if (
|
||||
!(
|
||||
title.includes("ID") ||
|
||||
title === 'New Tab' ||
|
||||
title === 'Acciones'
|
||||
)
|
||||
) {
|
||||
const input = $('<input type="text" class="form-control form-control-sm" placeholder="Filtrar..."/>')
|
||||
.appendTo(header.empty()) // Vaciar el th antes de agregar input
|
||||
.on('keyup change', function () {
|
||||
if (column.search() !== this.value) {
|
||||
column.search(this.value).draw();
|
||||
}
|
||||
});
|
||||
|
||||
input.css('width', '100%');
|
||||
}
|
||||
});
|
||||
|
||||
// Ajustes al redimensionar ventana
|
||||
$(window).on('resize', function () {
|
||||
$('.dataTables_scrollHeadInner, .dataTables_scrollHeadInner table').css('width', '100%');
|
||||
});
|
||||
},
|
||||
|
||||
drawCallback: function () {
|
||||
// Asegurar ancho correcto si hay columnas ocultas
|
||||
if (this.api().responsive.hasHidden()) {
|
||||
$('.dataTables_scrollHeadInner, .dataTables_scrollHeadInner table').css('width', '100%');
|
||||
}
|
||||
},
|
||||
|
||||
columnDefs: [
|
||||
{ responsivePriority: 1, targets: 0 }, // ID
|
||||
{ responsivePriority: 2, targets: -1 }, // Acciones
|
||||
{ responsivePriority: 3, targets: 2 }, // Archivo
|
||||
{ width: '80px', targets: 0 }, // Ancho para ID
|
||||
{ width: '120px', targets: -1 } // Ancho para Acciones
|
||||
]
|
||||
});
|
80
static/h_tmp_user/i_carousel_form/delete_slide.js
Normal file
80
static/h_tmp_user/i_carousel_form/delete_slide.js
Normal file
@ -0,0 +1,80 @@
|
||||
import { simpleNotification } from '../../z_comps/notify.js';
|
||||
|
||||
|
||||
function delete_file(e) {
|
||||
let btn = $(this);
|
||||
let postId = btn.data('id');
|
||||
let url = `${window.location.origin}/user/carousel/delete-slide/${postId}`;
|
||||
|
||||
fetch(url, {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + localStorage.getItem('token_ai') // o tu token JWT
|
||||
}
|
||||
})
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
if (data.msg) {
|
||||
console.log(data.msg);
|
||||
let btn = document.querySelector(`[data-id="${postId}"]`);
|
||||
let row = $(btn).closest('tr'); // usa jQuery para compatibilidad con DataTables
|
||||
let table = $('#tblCarousel').DataTable(); // obtiene instancia
|
||||
|
||||
table.row(row).remove().draw(); // elimina la fila y redibuja la tabla
|
||||
|
||||
simpleNotification("Eliminación exitosa", `${data.msg}`, "success");
|
||||
|
||||
// eliminar el tr del slide si quieres: btn.closest('tr').remove();
|
||||
} else {
|
||||
console.error('Error:', data.error);
|
||||
}
|
||||
})
|
||||
.catch(err => console.error('Error en fetch:', err));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// https://htmlguyllc.github.io/jConfirm/
|
||||
$(function(){
|
||||
$('.delete-btn').jConfirm({
|
||||
//false|array: if provided, this will override the default confirm/deny buttons (see below for an example)
|
||||
btns: false,
|
||||
//string: question displayed to the user
|
||||
question: '¿Deseas continuar con la eliminación?',
|
||||
//string: confirm button text
|
||||
confirm_text: 'Sí',
|
||||
//string: deny button text
|
||||
deny_text: 'No',
|
||||
//boolean: if true, when the confirm button is clicked the user will be redirected to the button's href location
|
||||
// follow_href: true,
|
||||
//boolean: if true and follow_href is true, the href will be opened in a new window
|
||||
open_new_tab: false,
|
||||
//boolean: if true, the tooltip will be hidden if you click outside of it
|
||||
hide_on_click: true,
|
||||
//string ('auto','top','bottom','left','right'): preferred location of the tooltip (defaults to auto if no space)
|
||||
position: 'auto',
|
||||
//boolean: if true, the deny button will be shown
|
||||
show_deny_btn: true,
|
||||
//string ('black', 'white', 'bootstrap-4', 'bootstrap-4-white')
|
||||
theme: 'bootstrap-4',
|
||||
//string ('tiny', 'small', 'medium', 'large')
|
||||
size: 'medium',
|
||||
//boolean: show the tooltip immediately on instantiation
|
||||
show_now: false,
|
||||
//string: class(es) to add to the tooltip
|
||||
'class': ''
|
||||
}).on('confirm', delete_file)
|
||||
.on('deny', function(e){
|
||||
var btn = $(this);
|
||||
//do something on deny
|
||||
}).on('jc-show', function(e, tooltip){
|
||||
// console.log("el tooltip es visible");
|
||||
//do something when tooltip is shown
|
||||
//tooltip dom element is passed as the second parameter
|
||||
|
||||
}).on('jc-hide', function(e){
|
||||
//do something when tooltip is hidden
|
||||
});
|
||||
|
||||
});
|
@ -94,9 +94,9 @@
|
||||
/* Estilos personalizados para el footer */
|
||||
|
||||
.footer {
|
||||
background-color: var(--navbar-footer-color);
|
||||
background-color: var(--navbar-footer-color) !important;
|
||||
font-size: var(--font-size-formha);
|
||||
color: white;
|
||||
color: white !important;
|
||||
padding: 3rem 0;
|
||||
|
||||
& .img-cont{
|
||||
@ -104,6 +104,11 @@
|
||||
background-color: white;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
& i, a {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.footer h5 {
|
||||
|
219
static/y_img/methodology/m-01.svg
Normal file
219
static/y_img/methodology/m-01.svg
Normal file
@ -0,0 +1,219 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 604 601">
|
||||
<!-- Generator: Adobe Illustrator 29.5.0, SVG Export Plug-In . SVG Version: 2.1.0 Build 137) -->
|
||||
<defs>
|
||||
<style>
|
||||
.st0, .st1 {
|
||||
font-family: Montserrat-Regular, Montserrat;
|
||||
}
|
||||
|
||||
.st0, .st2 {
|
||||
letter-spacing: -.02em;
|
||||
}
|
||||
|
||||
.st3 {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.st3, .st4, .st5, .st6, .st7, .st8, .st9 {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.st4 {
|
||||
font-family: LeagueSpartan-Bold, 'SYDRR E+ League Spartan';
|
||||
font-size: 31.11px;
|
||||
}
|
||||
|
||||
.st4, .st10, .st7, .st2 {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.st11, .st12 {
|
||||
fill: #423585;
|
||||
}
|
||||
|
||||
.st13, .st14 {
|
||||
fill: #8fb73b;
|
||||
}
|
||||
|
||||
.st15, .st16 {
|
||||
fill: #5a9ad5;
|
||||
}
|
||||
|
||||
.st17 {
|
||||
isolation: isolate;
|
||||
}
|
||||
|
||||
.st18 {
|
||||
stroke: #8fb73b;
|
||||
}
|
||||
|
||||
.st18, .st19, .st20 {
|
||||
fill: none;
|
||||
stroke-width: 2px;
|
||||
}
|
||||
|
||||
.st18, .st6, .st20 {
|
||||
stroke-miterlimit: 10;
|
||||
}
|
||||
|
||||
.st19 {
|
||||
stroke: #fff;
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: round;
|
||||
}
|
||||
|
||||
.st12 {
|
||||
mix-blend-mode: overlay;
|
||||
opacity: .2;
|
||||
}
|
||||
|
||||
.st16, .st14 {
|
||||
font-family: Montserrat-SemiBold, Montserrat;
|
||||
font-size: 10.37px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.st10, .st2 {
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
}
|
||||
|
||||
.st6 {
|
||||
stroke: #413585;
|
||||
}
|
||||
|
||||
.st21 {
|
||||
letter-spacing: -.04em;
|
||||
}
|
||||
|
||||
.st7 {
|
||||
font-family: Montserrat-ExtraBold, Montserrat;
|
||||
font-size: 39.05px;
|
||||
}
|
||||
|
||||
.st8 {
|
||||
font-size: 7px;
|
||||
}
|
||||
|
||||
.st20 {
|
||||
stroke: #5a9ad5;
|
||||
}
|
||||
|
||||
.st9 {
|
||||
font-size: 8px;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<g class="st17">
|
||||
<g id="BACKGROUND">
|
||||
<rect class="st11" y="-3" width="604" height="604"/>
|
||||
</g>
|
||||
<g id="OBJECTS">
|
||||
<text class="st14" transform="translate(402.19 366.08)"><tspan x="0" y="0">EXPERIENCIA DE SERVICIO</tspan></text>
|
||||
<text class="st9" transform="translate(396.03 379.28)"><tspan class="st1"><tspan x="0" y="0">Acompañamos cada paso del proyecto, </tspan></tspan><tspan class="st21"><tspan class="st1" x="-20" y="9.33">asegurando una experiencia </tspan><tspan class="st10" x="87.63" y="9.33">cercana, ágil y efectiva.</tspan></tspan></text>
|
||||
<text class="st14" transform="translate(391.29 506.1)"><tspan x="0" y="0">SOSTENIBILIDAD DEL CAMBIO </tspan></text>
|
||||
<text class="st9" transform="translate(389.67 519.29)"><tspan class="st10" x="0" y="0">Reforzamos capacidades</tspan><tspan class="st1" x="104.69" y="0" xml:space="preserve"> internas para que el </tspan><tspan class="st1"><tspan x="28.65" y="9.33">valor se mantenga a largo plazo,</tspan></tspan><tspan class="st1"><tspan x="48.87" y="18.67" xml:space="preserve"> más allá del proyecto.</tspan></tspan></text>
|
||||
<text class="st14" transform="translate(420.89 218.81)"><tspan x="0" y="0">ANÁLISIS DE DATOS</tspan></text>
|
||||
<text class="st8" transform="translate(386.84 231.26)"><tspan class="st1"><tspan x="0" y="0" xml:space="preserve">Identificamos información clave para entender las </tspan></tspan><tspan class="st10" x="7.14" y="10">metas, retos y oportunidades</tspan><tspan class="st1" x="114.68" y="10" xml:space="preserve"> de tu empresa.</tspan></text>
|
||||
<text class="st7" transform="translate(143.39 73.95)"><tspan x="0" y="0">METODOLOGÍA</tspan></text>
|
||||
<text class="st3" transform="translate(103.37 118.12)"><tspan class="st1"><tspan x="0" y="0">Implementamos soluciones con el enfoque humano, </tspan></tspan><tspan class="st10"><tspan x="114.04" y="16">técnico y estratégico.</tspan></tspan></text>
|
||||
<text class="st16" transform="translate(77.25 292.45)"><tspan x="0" y="0">PERSONALIZACIÓN</tspan></text>
|
||||
<text class="st16" transform="translate(104.86 430.39)"><tspan x="0" y="0">IMPACTO</tspan></text>
|
||||
<g>
|
||||
<path class="st13" d="M257.15,197.03h44.82v70.53h-44.82c-18.77,0-34-15.23-34-34v-2.53c0-18.77,15.23-34,34-34Z"/>
|
||||
<path class="st12" d="M237.92,260.93c5.79,4.16,12.86,6.62,20.49,6.62h43.56v-70.53h-.14l-63.91,63.91Z"/>
|
||||
<text class="st4" transform="translate(248.04 244.39)"><tspan x="0" y="0">01</tspan></text>
|
||||
<path class="st18" d="M257.9,188.73c-24.34,0-44.08,19.73-44.08,44.08s19.73,44.08,44.08,44.08"/>
|
||||
<g>
|
||||
<line class="st18" x1="317.53" y1="231.25" x2="352.73" y2="231.25"/>
|
||||
<polygon class="st13" points="348.8 236.44 351 231.25 348.8 226.07 361.09 231.25 348.8 236.44"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st13" d="M257.15,338.08h44.82v70.53h-44.82c-18.77,0-34-15.23-34-34v-2.53c0-18.77,15.23-34,34-34Z"/>
|
||||
<path class="st12" d="M237.92,401.99c5.79,4.16,12.86,6.62,20.49,6.62h43.56v-70.53h-.14l-63.91,63.91Z"/>
|
||||
<text class="st4" transform="translate(243.89 385.44)"><tspan x="0" y="0">03</tspan></text>
|
||||
<path class="st18" d="M258.93,329.78c-24.34,0-44.08,19.73-44.08,44.08s19.73,44.08,44.08,44.08"/>
|
||||
<g>
|
||||
<line class="st18" x1="317.53" y1="374.38" x2="352.73" y2="374.38"/>
|
||||
<polygon class="st13" points="348.8 379.57 351 374.38 348.8 369.2 361.09 374.38 348.8 379.57"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st13" d="M257.15,479.13h44.82v70.53h-44.82c-18.77,0-34-15.23-34-34v-2.53c0-18.77,15.23-34,34-34Z"/>
|
||||
<path class="st12" d="M237.92,543.04c5.79,4.16,12.86,6.62,20.49,6.62h43.56v-70.53h-.14l-63.91,63.91Z"/>
|
||||
<text class="st4" transform="translate(243.89 526.5)"><tspan x="0" y="0">05</tspan></text>
|
||||
<path class="st18" d="M257.9,470.84c-24.34,0-44.08,19.73-44.08,44.08s19.73,44.08,44.08,44.08"/>
|
||||
<g>
|
||||
<line class="st18" x1="317.53" y1="514.4" x2="352.73" y2="514.4"/>
|
||||
<polygon class="st13" points="348.8 519.58 351 514.4 348.8 509.21 361.09 514.4 348.8 519.58"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st15" d="M335.97,408.61h44.82v70.53h-44.82c-18.77,0-34-15.23-34-34v-2.53c0-18.77,15.23-34,34-34Z" transform="translate(682.77 887.74) rotate(180)"/>
|
||||
<path class="st12" d="M366.59,415.63l-63.51,63.5h42.45c19.39,0,35.26-15.87,35.26-35.26h0c0-11.52-5.6-21.8-14.21-28.24Z"/>
|
||||
<text class="st4" transform="translate(316.49 455.97)"><tspan x="0" y="0">04</tspan></text>
|
||||
<path class="st20" d="M345.53,399.27c24.34,0,44.08,19.73,44.08,44.08s-19.73,44.08-44.08,44.08"/>
|
||||
<g>
|
||||
<line class="st20" x1="285.38" y1="444.91" x2="252.79" y2="444.91"/>
|
||||
<polygon class="st15" points="256.72 439.72 254.52 444.91 256.72 450.09 244.43 444.91 256.72 439.72"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st15" d="M335.97,267.55h44.82v70.53h-44.82c-18.77,0-34-15.23-34-34v-2.53c0-18.77,15.23-34,34-34Z" transform="translate(682.77 605.63) rotate(180)"/>
|
||||
<path class="st12" d="M366.59,274.58l-63.51,63.51h42.45c19.39,0,35.26-15.87,35.26-35.26h0c0-11.52-5.6-21.8-14.21-28.24Z"/>
|
||||
<text class="st4" transform="translate(315.46 314.92)"><tspan x="0" y="0">02</tspan></text>
|
||||
<path class="st20" d="M345.53,259.26c24.34,0,44.08,19.73,44.08,44.08s-19.73,44.08-44.08,44.08"/>
|
||||
<g>
|
||||
<line class="st20" x1="282.77" y1="303.85" x2="250.18" y2="303.85"/>
|
||||
<polygon class="st15" points="254.11 298.67 251.91 303.85 254.11 309.04 241.82 303.85 254.11 298.67"/>
|
||||
</g>
|
||||
</g>
|
||||
<text class="st9" transform="translate(58.77 306)"><tspan class="st1"><tspan x="0" y="0">Diseñamos estrategías a la medida, </tspan></tspan><tspan class="st0" x="-7.42" y="9.33">utilizando</tspan><tspan class="st2" x="30.73" y="9.33" xml:space="preserve"> metodologías especializadas</tspan><tspan class="st10" x="149.3" y="9.33"> </tspan><tspan class="st1"><tspan x="13.35" y="18.67">y herramientas tecnológicas.</tspan></tspan></text>
|
||||
<text class="st9" transform="translate(59.74 443)"><tspan class="st1" x="0" y="0">Medimos</tspan><tspan class="st10" x="37.46" y="0" xml:space="preserve"> resultados con métricas </tspan><tspan class="st10" x="9.44" y="9.33">claras</tspan><tspan class="st1" x="34.15" y="9.33" xml:space="preserve"> para asegurar que cada </tspan><tspan class="st0"><tspan x="-1.16" y="18.67">intervención tenga efectos tangibles.</tspan></tspan></text>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st6" d="M436.4,347.41v-3.2c0-4.42,4.2-8.01,9.37-8.01h9.24c5.18,0,9.37,3.59,9.37,8.01v3.2"/>
|
||||
<path class="st6" d="M458.52,324.27c0,4.49-3.64,9.57-8.13,9.57s-8.13-5.08-8.13-9.57,3.64-8.13,8.13-8.13,8.13,3.64,8.13,8.13Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st6" d="M486.37,347.41v-3.2c0-4.42,4.2-8.01,9.37-8.01h9.24c5.18,0,9.37,3.59,9.37,8.01v3.2"/>
|
||||
<path class="st6" d="M508.49,324.27c0,4.49-3.64,9.57-8.13,9.57s-8.13-5.08-8.13-9.57,3.64-8.13,8.13-8.13,8.13,3.64,8.13,8.13Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st6" d="M461.38,331.78v-3.2c0-4.42,4.2-8.01,9.37-8.01h9.24c5.18,0,9.37,3.59,9.37,8.01v3.2"/>
|
||||
<path class="st6" d="M483.51,308.63c0,4.49-3.64,9.57-8.13,9.57s-8.13-5.08-8.13-9.57,3.64-8.13,8.13-8.13,8.13,3.64,8.13,8.13Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st6" d="M134.38,231.99c0,1.82-1.48,3.3-3.3,3.3v6.59h6.59c0-1.82,1.48-3.3,3.3-3.3s3.3,1.48,3.3,3.3h6.59v-6.59c1.82,0,3.3-1.48,3.3-3.3s-1.48-3.3-3.3-3.3v-6.59h-6.59c0-1.82-1.48-3.3-3.3-3.3s-3.3,1.48-3.3,3.3h-6.59v6.59c1.82,0,3.3,1.48,3.3,3.3Z"/>
|
||||
<path class="st6" d="M107.45,241.51c0,1.82-1.48,3.3-3.3,3.3v6.59h6.59c0-1.82,1.48-3.3,3.3-3.3s3.3,1.48,3.3,3.3h6.59v-6.59c1.82,0,3.3-1.48,3.3-3.3s-1.48-3.3-3.3-3.3v-6.59h-6.59c0-1.82-1.48-3.3-3.3-3.3s-3.3,1.48-3.3,3.3h-6.59v6.59c1.82,0,3.3,1.48,3.3,3.3Z"/>
|
||||
<path class="st6" d="M120.64,261.29c0,1.82,1.48,3.3,3.3,3.3v6.59h6.59c0-1.82,1.48-3.3,3.3-3.3s3.3,1.48,3.3,3.3h6.59v-6.59c1.82,0,3.3-1.48,3.3-3.3s-1.48-3.3-3.3-3.3v-6.59h-6.59c0-1.82-1.48-3.3-3.3-3.3s-3.3,1.48-3.3,3.3h-6.59v6.59c-1.82,0-3.3,1.48-3.3,3.3Z"/>
|
||||
<path class="st6" d="M107.45,261.29c0,1.82-1.48,3.3-3.3,3.3v6.59h6.59c0-1.82,1.48-3.3,3.3-3.3s3.3,1.48,3.3,3.3h6.59v-6.59c-1.82,0-3.3-1.48-3.3-3.3s1.48-3.3,3.3-3.3v-6.59h-6.59c0-1.82-1.48-3.3-3.3-3.3s-3.3,1.48-3.3,3.3h-6.59v6.59c1.82,0,3.3,1.48,3.3,3.3Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<rect class="st5" x="99.72" y="391.6" width="14.13" height="14.13" rx="1.32" ry="1.32"/>
|
||||
<rect class="st5" x="114.53" y="384.53" width="14.13" height="21.2" rx="1.32" ry="1.32"/>
|
||||
<rect class="st5" x="129.34" y="377.46" width="14.13" height="28.27" rx="1.32" ry="1.32"/>
|
||||
<rect class="st5" x="144.15" y="370.39" width="14.13" height="35.34" rx="1.32" ry="1.32"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st5" d="M134.4,360.49l8.76.86c.32.03.48.39.3.65l-5.13,7.15c-.19.26-.58.22-.71-.07l-3.63-8.02c-.13-.29.1-.61.42-.58Z"/>
|
||||
<line class="st19" x1="136.22" y1="364.88" x2="109.54" y2="376.97"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<rect class="st5" x="445.12" y="187.82" width="14.14" height="14.13" rx="1.32" ry="1.32"/>
|
||||
<rect class="st5" x="459.93" y="180.75" width="14.13" height="21.2" rx="1.32" ry="1.32"/>
|
||||
<rect class="st5" x="474.74" y="173.68" width="14.13" height="28.27" rx="1.32" ry="1.32"/>
|
||||
<rect class="st5" x="489.55" y="166.61" width="14.13" height="35.34" rx="1.32" ry="1.32"/>
|
||||
</g>
|
||||
<path class="st6" d="M453.54,466.78c-.06-.62-.08-1.25-.08-1.87,0-2.76.54-5.44,1.61-7.96,1.03-2.43,2.5-4.62,4.38-6.5,1.88-1.88,4.06-3.35,6.5-4.38,2.23-.94,4.58-1.47,7-1.59v-4.33l8.09,6.53-8.09,6.53v-4.3c-3.94.24-7.58,1.87-10.37,4.66-3.03,3.03-4.69,7.05-4.69,11.33,0,.49.02.98.07,1.47l.09,1-4.4.4-.09-1Z"/>
|
||||
<path class="st6" d="M473.9,487.36c-1.78,0-3.56-.24-5.3-.7-2.56-.69-4.93-1.84-7.04-3.44-1.93-1.46-3.57-3.23-4.87-5.27l-3.75,2.16,1.61-10.27,9.7,3.75-3.73,2.15c2.15,3.27,5.4,5.62,9.23,6.65,1.37.37,2.77.55,4.17.55,2.78,0,5.54-.75,7.98-2.15.42-.24.84-.51,1.24-.79l.82-.57,2.55,3.61-.82.58c-.51.36-1.04.7-1.58,1.01-2.39,1.38-4.98,2.25-7.69,2.59-.84.1-1.68.16-2.52.16Z"/>
|
||||
<path class="st6" d="M486.5,469.93l3.73,2.15c1.76-3.5,2.17-7.49,1.15-11.31-1.11-4.13-3.76-7.59-7.46-9.73-.42-.24-.86-.47-1.31-.68l-.91-.42,1.86-4.01.91.42c.56.26,1.12.55,1.66.86,2.39,1.38,4.44,3.19,6.09,5.37,1.59,2.11,2.75,4.48,3.44,7.04.69,2.56.87,5.19.54,7.82-.3,2.4-1.01,4.7-2.13,6.86l3.75,2.16-9.7,3.74-1.61-10.27Z"/>
|
||||
<path class="st5" d="M481.58,472.55c-2.87,2.05-6.27,1.63-7.72.83.08-2.71,1-4.16,2.7-5.76,1.1-1.03,5.97-4.59,6.18-6.37-.72,1.38-2.42,2.39-3.81,3.37-1.39.98-2.82,1.95-3.96,3.21-1.14,1.26-1.98,3.1-1.96,4.8-1.26-2.6-.43-6.49,1.81-8.68,2.41-2.36,6.17-3.08,8.29-5.72,4.11,5.47,3.53,10.68-1.53,14.3Z"/>
|
||||
<path class="st5" d="M472.6,473.52c-1.32.39-3.47.39-5.32-.94-3.95-2.82-4.4-6.89-1.19-11.16,1.62,2.02,4.48,2.59,6.36,4.36-.3.65-.53,1.35-.68,2.07-.02.11-.04.22-.06.33-.73-.65-1.55-1.22-2.36-1.78-1.09-.77-2.41-1.55-2.98-2.63.16,1.39,3.96,4.16,4.82,4.97.14.13.27.26.4.39-.09,1.36.15,2.65.65,3.75.11.24.24.46.35.63Z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 13 KiB |
228
static/y_img/methodology/m-02.svg
Normal file
228
static/y_img/methodology/m-02.svg
Normal file
@ -0,0 +1,228 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 604 601">
|
||||
<!-- Generator: Adobe Illustrator 29.5.0, SVG Export Plug-In . SVG Version: 2.1.0 Build 137) -->
|
||||
<defs>
|
||||
<style>
|
||||
.st0, .st1 {
|
||||
font-family: Montserrat-Regular, Montserrat;
|
||||
}
|
||||
|
||||
.st0, .st2 {
|
||||
letter-spacing: -.02em;
|
||||
}
|
||||
|
||||
.st3, .st4, .st5 {
|
||||
fill: #5a9ad5;
|
||||
}
|
||||
|
||||
.st3, .st6 {
|
||||
font-size: 8px;
|
||||
}
|
||||
|
||||
.st7 {
|
||||
font-family: LeagueSpartan-Bold, 'SYDRR E+ League Spartan';
|
||||
font-size: 31.11px;
|
||||
}
|
||||
|
||||
.st7, .st8, .st9, .st10, .st11, .st12 {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.st7, .st13, .st14 {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.st15, .st16, .st6, .st17 {
|
||||
fill: #8fb73b;
|
||||
}
|
||||
|
||||
.st16 {
|
||||
font-size: 7px;
|
||||
}
|
||||
|
||||
.st18 {
|
||||
isolation: isolate;
|
||||
}
|
||||
|
||||
.st8 {
|
||||
stroke-width: .75px;
|
||||
}
|
||||
|
||||
.st8, .st19, .st10, .st11, .st12, .st20 {
|
||||
stroke-miterlimit: 10;
|
||||
}
|
||||
|
||||
.st8, .st19, .st12 {
|
||||
stroke: #8fb73b;
|
||||
}
|
||||
|
||||
.st19, .st21, .st20 {
|
||||
fill: none;
|
||||
stroke-width: 2px;
|
||||
}
|
||||
|
||||
.st22 {
|
||||
mix-blend-mode: overlay;
|
||||
opacity: .2;
|
||||
}
|
||||
|
||||
.st22, .st23, .st14 {
|
||||
fill: #423585;
|
||||
}
|
||||
|
||||
.st23 {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.st10, .st21, .st20 {
|
||||
stroke: #5a9ad5;
|
||||
}
|
||||
|
||||
.st5, .st17 {
|
||||
font-family: Montserrat-SemiBold, Montserrat;
|
||||
font-size: 10.37px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.st13 {
|
||||
font-family: Montserrat-Bold, Montserrat;
|
||||
}
|
||||
|
||||
.st11 {
|
||||
stroke: #413585;
|
||||
}
|
||||
|
||||
.st21 {
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: round;
|
||||
}
|
||||
|
||||
.st14 {
|
||||
font-family: Montserrat-ExtraBold, Montserrat;
|
||||
font-size: 39.05px;
|
||||
}
|
||||
|
||||
.st24 {
|
||||
letter-spacing: -.04em;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<g class="st18">
|
||||
<g id="OBJECTS">
|
||||
<text class="st17" transform="translate(402.19 366.08)"><tspan x="0" y="0">EXPERIENCIA DE SERVICIO</tspan></text>
|
||||
<text class="st6" transform="translate(396.03 379.28)"><tspan class="st1"><tspan x="0" y="0">Acompañamos cada paso del proyecto, </tspan></tspan><tspan class="st24"><tspan class="st1" x="-20" y="9.33">asegurando una experiencia </tspan><tspan class="st13" x="87.63" y="9.33">cercana, ágil y efectiva.</tspan></tspan></text>
|
||||
<text class="st17" transform="translate(391.29 506.1)"><tspan x="0" y="0">SOSTENIBILIDAD DEL CAMBIO </tspan></text>
|
||||
<text class="st6" transform="translate(389.67 519.29)"><tspan class="st13" x="0" y="0">Reforzamos capacidades</tspan><tspan class="st1" x="104.69" y="0" xml:space="preserve"> internas para que el </tspan><tspan class="st1"><tspan x="28.65" y="9.33">valor se mantenga a largo plazo, </tspan></tspan><tspan class="st1"><tspan x="49.92" y="18.67">más allá del proyecto.</tspan></tspan></text>
|
||||
<text class="st17" transform="translate(420.89 218.81)"><tspan x="0" y="0">ANÁLISIS DE DATOS</tspan></text>
|
||||
<text class="st16" transform="translate(386.84 231.26)"><tspan class="st1"><tspan x="0" y="0" xml:space="preserve">Identificamos información clave para entender las </tspan></tspan><tspan class="st13" x="7.14" y="10">metas, retos y oportunidades</tspan><tspan class="st1" x="114.68" y="10" xml:space="preserve"> de tu empresa.</tspan></text>
|
||||
<text class="st14" transform="translate(143.39 73.95)"><tspan x="0" y="0">METODOLOGÍA</tspan></text>
|
||||
<text class="st23" transform="translate(103.37 118.12)"><tspan class="st1"><tspan x="0" y="0">Implementamos soluciones con el enfoque humano, </tspan></tspan><tspan class="st13"><tspan x="114.04" y="16">técnico y estratégico.</tspan></tspan></text>
|
||||
<text class="st5" transform="translate(77.25 292.45)"><tspan x="0" y="0">PERSONALIZACIÓN</tspan></text>
|
||||
<text class="st5" transform="translate(104.86 430.39)"><tspan x="0" y="0">IMPACTO</tspan></text>
|
||||
<g>
|
||||
<path class="st15" d="M257.15,197.03h44.82v70.53h-44.82c-18.77,0-34-15.23-34-34v-2.53c0-18.77,15.23-34,34-34Z"/>
|
||||
<path class="st22" d="M237.92,260.93c5.79,4.16,12.86,6.62,20.49,6.62h43.56v-70.53h-.14l-63.91,63.91Z"/>
|
||||
<text class="st7" transform="translate(248.04 244.39)"><tspan x="0" y="0">01</tspan></text>
|
||||
<path class="st19" d="M257.9,188.73c-24.34,0-44.08,19.73-44.08,44.08s19.73,44.08,44.08,44.08"/>
|
||||
<g>
|
||||
<line class="st19" x1="317.53" y1="231.25" x2="352.73" y2="231.25"/>
|
||||
<polygon class="st15" points="348.8 236.44 351 231.25 348.8 226.07 361.09 231.25 348.8 236.44"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st15" d="M257.15,338.08h44.82v70.53h-44.82c-18.77,0-34-15.23-34-34v-2.53c0-18.77,15.23-34,34-34Z"/>
|
||||
<path class="st22" d="M237.92,401.99c5.79,4.16,12.86,6.62,20.49,6.62h43.56v-70.53h-.14l-63.91,63.91Z"/>
|
||||
<text class="st7" transform="translate(243.89 385.44)"><tspan x="0" y="0">03</tspan></text>
|
||||
<path class="st19" d="M258.93,329.78c-24.34,0-44.08,19.73-44.08,44.08s19.73,44.08,44.08,44.08"/>
|
||||
<g>
|
||||
<line class="st19" x1="317.53" y1="374.38" x2="352.73" y2="374.38"/>
|
||||
<polygon class="st15" points="348.8 379.57 351 374.38 348.8 369.2 361.09 374.38 348.8 379.57"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st15" d="M257.15,479.13h44.82v70.53h-44.82c-18.77,0-34-15.23-34-34v-2.53c0-18.77,15.23-34,34-34Z"/>
|
||||
<path class="st22" d="M237.92,543.04c5.79,4.16,12.86,6.62,20.49,6.62h43.56v-70.53h-.14l-63.91,63.91Z"/>
|
||||
<text class="st7" transform="translate(243.89 526.5)"><tspan x="0" y="0">05</tspan></text>
|
||||
<path class="st19" d="M257.9,470.84c-24.34,0-44.08,19.73-44.08,44.08s19.73,44.08,44.08,44.08"/>
|
||||
<g>
|
||||
<line class="st19" x1="317.53" y1="514.4" x2="352.73" y2="514.4"/>
|
||||
<polygon class="st15" points="348.8 519.58 351 514.4 348.8 509.21 361.09 514.4 348.8 519.58"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st4" d="M335.97,408.61h44.82v70.53h-44.82c-18.77,0-34-15.23-34-34v-2.53c0-18.77,15.23-34,34-34Z" transform="translate(682.77 887.74) rotate(180)"/>
|
||||
<path class="st22" d="M366.59,415.63l-63.51,63.5h42.45c19.39,0,35.26-15.87,35.26-35.26h0c0-11.52-5.6-21.8-14.21-28.24Z"/>
|
||||
<text class="st7" transform="translate(316.49 455.97)"><tspan x="0" y="0">04</tspan></text>
|
||||
<path class="st20" d="M345.53,399.27c24.34,0,44.08,19.73,44.08,44.08s-19.73,44.08-44.08,44.08"/>
|
||||
<g>
|
||||
<line class="st20" x1="285.38" y1="444.91" x2="252.79" y2="444.91"/>
|
||||
<polygon class="st4" points="256.72 439.72 254.52 444.91 256.72 450.09 244.43 444.91 256.72 439.72"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st4" d="M335.97,267.55h44.82v70.53h-44.82c-18.77,0-34-15.23-34-34v-2.53c0-18.77,15.23-34,34-34Z" transform="translate(682.77 605.63) rotate(180)"/>
|
||||
<path class="st22" d="M366.59,274.58l-63.51,63.51h42.45c19.39,0,35.26-15.87,35.26-35.26h0c0-11.52-5.6-21.8-14.21-28.24Z"/>
|
||||
<text class="st7" transform="translate(315.46 314.92)"><tspan x="0" y="0">02</tspan></text>
|
||||
<path class="st20" d="M345.53,259.26c24.34,0,44.08,19.73,44.08,44.08s-19.73,44.08-44.08,44.08"/>
|
||||
<g>
|
||||
<line class="st20" x1="282.77" y1="303.85" x2="250.18" y2="303.85"/>
|
||||
<polygon class="st4" points="254.11 298.67 251.91 303.85 254.11 309.04 241.82 303.85 254.11 298.67"/>
|
||||
</g>
|
||||
</g>
|
||||
<text class="st3" transform="translate(58.77 306)"><tspan class="st1"><tspan x="0" y="0">Diseñamos estrategías a la medida, </tspan></tspan><tspan class="st2"><tspan class="st1" x="-7.34" y="9.33">utilizando </tspan><tspan class="st13" x="32.75" y="9.33">metodologías especializadas </tspan></tspan><tspan class="st1"><tspan x="13.35" y="18.67">y herramientas tecnológicas.</tspan></tspan></text>
|
||||
<text class="st3" transform="translate(59.82 443)"><tspan class="st1" x="0" y="0">Medimos </tspan><tspan class="st13" x="39.56" y="0">resultados con métricas </tspan><tspan class="st13" x="9.36" y="9.33">claras</tspan><tspan class="st1" x="34.06" y="9.33" xml:space="preserve"> para asegurar que cada </tspan><tspan class="st0"><tspan x="-1.25" y="18.67">intervención tenga efectos tangibles.</tspan></tspan></text>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st12" d="M436.4,347.41v-3.2c0-4.42,4.2-8.01,9.37-8.01h9.24c5.18,0,9.37,3.59,9.37,8.01v3.2"/>
|
||||
<path class="st12" d="M458.52,324.27c0,4.49-3.64,9.57-8.13,9.57s-8.13-5.08-8.13-9.57,3.64-8.13,8.13-8.13,8.13,3.64,8.13,8.13Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st12" d="M486.37,347.41v-3.2c0-4.42,4.2-8.01,9.37-8.01h9.24c5.18,0,9.37,3.59,9.37,8.01v3.2"/>
|
||||
<path class="st12" d="M508.49,324.27c0,4.49-3.64,9.57-8.13,9.57s-8.13-5.08-8.13-9.57,3.64-8.13,8.13-8.13,8.13,3.64,8.13,8.13Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st12" d="M461.38,331.78v-3.2c0-4.42,4.2-8.01,9.37-8.01h9.24c5.18,0,9.37,3.59,9.37,8.01v3.2"/>
|
||||
<path class="st12" d="M483.51,308.63c0,4.49-3.64,9.57-8.13,9.57s-8.13-5.08-8.13-9.57,3.64-8.13,8.13-8.13,8.13,3.64,8.13,8.13Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st10" d="M134.38,231.99c0,1.82-1.48,3.3-3.3,3.3v6.59h6.59c0-1.82,1.48-3.3,3.3-3.3s3.3,1.48,3.3,3.3h6.59v-6.59c1.82,0,3.3-1.48,3.3-3.3s-1.48-3.3-3.3-3.3v-6.59h-6.59c0-1.82-1.48-3.3-3.3-3.3s-3.3,1.48-3.3,3.3h-6.59v6.59c1.82,0,3.3,1.48,3.3,3.3Z"/>
|
||||
<path class="st10" d="M107.45,241.51c0,1.82-1.48,3.3-3.3,3.3v6.59h6.59c0-1.82,1.48-3.3,3.3-3.3s3.3,1.48,3.3,3.3h6.59v-6.59c1.82,0,3.3-1.48,3.3-3.3s-1.48-3.3-3.3-3.3v-6.59h-6.59c0-1.82-1.48-3.3-3.3-3.3s-3.3,1.48-3.3,3.3h-6.59v6.59c1.82,0,3.3,1.48,3.3,3.3Z"/>
|
||||
<path class="st10" d="M120.64,261.29c0,1.82,1.48,3.3,3.3,3.3v6.59h6.59c0-1.82,1.48-3.3,3.3-3.3s3.3,1.48,3.3,3.3h6.59v-6.59c1.82,0,3.3-1.48,3.3-3.3s-1.48-3.3-3.3-3.3v-6.59h-6.59c0-1.82-1.48-3.3-3.3-3.3s-3.3,1.48-3.3,3.3h-6.59v6.59c-1.82,0-3.3,1.48-3.3,3.3Z"/>
|
||||
<path class="st10" d="M107.45,261.29c0,1.82-1.48,3.3-3.3,3.3v6.59h6.59c0-1.82,1.48-3.3,3.3-3.3s3.3,1.48,3.3,3.3h6.59v-6.59c-1.82,0-3.3-1.48-3.3-3.3s1.48-3.3,3.3-3.3v-6.59h-6.59c0-1.82-1.48-3.3-3.3-3.3s-3.3,1.48-3.3,3.3h-6.59v6.59c1.82,0,3.3,1.48,3.3,3.3Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<rect class="st10" x="99.72" y="391.6" width="14.13" height="14.13" rx="1.32" ry="1.32"/>
|
||||
<rect class="st10" x="114.53" y="384.53" width="14.13" height="21.2" rx="1.32" ry="1.32"/>
|
||||
<rect class="st10" x="129.34" y="377.46" width="14.13" height="28.27" rx="1.32" ry="1.32"/>
|
||||
<rect class="st10" x="144.15" y="370.39" width="14.13" height="35.34" rx="1.32" ry="1.32"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st4" d="M134.4,360.49l8.76.86c.32.03.48.39.3.65l-5.13,7.15c-.19.26-.58.22-.71-.07l-3.63-8.02c-.13-.29.1-.61.42-.58Z"/>
|
||||
<line class="st21" x1="136.22" y1="364.88" x2="109.54" y2="376.97"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<rect class="st12" x="445.12" y="187.82" width="14.14" height="14.13" rx="1.32" ry="1.32"/>
|
||||
<rect class="st12" x="459.93" y="180.75" width="14.13" height="21.2" rx="1.32" ry="1.32"/>
|
||||
<rect class="st12" x="474.74" y="173.68" width="14.13" height="28.27" rx="1.32" ry="1.32"/>
|
||||
<rect class="st12" x="489.55" y="166.61" width="14.13" height="35.34" rx="1.32" ry="1.32"/>
|
||||
</g>
|
||||
<path class="st11" d="M473.9,487.36c-1.78,0-3.56-.24-5.3-.7-2.56-.69-4.93-1.84-7.04-3.44-1.93-1.46-3.57-3.23-4.87-5.27l-3.75,2.16,1.61-10.27,9.7,3.75-3.73,2.15c2.15,3.27,5.4,5.62,9.23,6.65,1.37.37,2.77.55,4.17.55,2.78,0,5.54-.75,7.98-2.15.42-.24.84-.51,1.24-.79l.82-.57,2.55,3.61-.82.58c-.51.36-1.04.7-1.58,1.01-2.39,1.38-4.98,2.25-7.69,2.59-.84.1-1.68.16-2.52.16Z"/>
|
||||
<g>
|
||||
<path class="st8" d="M453.54,466.84c-.06-.62-.08-1.25-.08-1.87,0-2.76.54-5.44,1.61-7.96,1.03-2.43,2.5-4.62,4.38-6.5,1.88-1.88,4.06-3.35,6.5-4.38,2.23-.94,4.58-1.47,7-1.59v-4.33l8.09,6.53-8.09,6.53v-4.3c-3.94.24-7.58,1.87-10.37,4.66-3.03,3.03-4.69,7.05-4.69,11.33,0,.49.02.98.07,1.47l.09,1-4.4.4-.09-1Z"/>
|
||||
<path class="st8" d="M473.9,487.41c-1.78,0-3.56-.24-5.3-.7-2.56-.69-4.93-1.84-7.04-3.44-1.93-1.46-3.57-3.23-4.87-5.27l-3.75,2.16,1.61-10.27,9.7,3.75-3.73,2.15c2.15,3.27,5.4,5.62,9.23,6.65,1.37.37,2.77.55,4.17.55,2.78,0,5.54-.75,7.98-2.15.42-.24.84-.51,1.24-.79l.82-.57,2.55,3.61-.82.58c-.51.36-1.04.7-1.58,1.01-2.39,1.38-4.98,2.25-7.69,2.59-.84.1-1.68.16-2.52.16Z"/>
|
||||
<path class="st8" d="M486.5,469.98l3.73,2.15c1.76-3.5,2.17-7.49,1.15-11.31-1.11-4.13-3.76-7.59-7.46-9.73-.42-.24-.86-.47-1.31-.68l-.91-.42,1.86-4.01.91.42c.56.26,1.12.55,1.66.86,2.39,1.38,4.44,3.19,6.09,5.37,1.59,2.11,2.75,4.48,3.44,7.04.69,2.56.87,5.19.54,7.82-.3,2.4-1.01,4.7-2.13,6.86l3.75,2.16-9.7,3.74-1.61-10.27Z"/>
|
||||
<g>
|
||||
<path class="st9" d="M481.58,472.61c-2.87,2.05-6.27,1.63-7.72.83.08-2.71,1-4.16,2.7-5.76,1.1-1.03,5.97-4.59,6.18-6.37-.72,1.38-2.42,2.39-3.81,3.37-1.39.98-2.82,1.95-3.96,3.21-1.14,1.26-1.98,3.1-1.96,4.8-1.26-2.6-.43-6.49,1.81-8.68,2.41-2.36,6.17-3.08,8.29-5.72,4.11,5.47,3.53,10.68-1.53,14.3Z"/>
|
||||
<path class="st15" d="M481.45,472.39c-1.26.88-2.73,1.39-4.27,1.45-1.07.04-2.24-.1-3.2-.62l.12.22c.04-1.29.3-2.55.98-3.66.53-.86,1.25-1.6,2.01-2.25,1.5-1.28,3.09-2.48,4.45-3.92.57-.6,1.31-1.37,1.43-2.23.04-.26-.31-.47-.46-.19-.61,1.13-1.71,1.89-2.74,2.6-1.1.76-2.21,1.51-3.26,2.34-2.05,1.62-3.76,3.84-3.76,6.57l.47-.13c-1.06-2.24-.54-5.07.74-7.1,1.39-2.2,3.83-3.2,6.01-4.42,1.22-.69,2.41-1.48,3.3-2.57l-.39-.05c1.32,1.77,2.43,3.82,2.65,6.05.19,1.9-.33,3.75-1.43,5.31-.72,1.02-1.65,1.87-2.66,2.6-.26.19,0,.62.25.43,1.75-1.26,3.25-2.89,3.96-4.96s.48-4.1-.26-6.01c-.51-1.32-1.24-2.54-2.08-3.66-.09-.12-.28-.19-.39-.05-1.73,2.12-4.42,2.97-6.64,4.42-1.09.71-2.05,1.57-2.75,2.68s-1.11,2.31-1.28,3.57c-.18,1.37-.05,2.78.54,4.03.11.23.47.11.47-.13,0-1.32.47-2.61,1.18-3.71s1.82-2.06,2.91-2.87,2.12-1.49,3.18-2.24c.93-.67,1.87-1.41,2.42-2.43l-.46-.19c-.11.77-.77,1.44-1.27,1.98-.74.79-1.56,1.52-2.39,2.22-1.46,1.24-3.08,2.36-4.13,4-.76,1.2-1.05,2.59-1.1,3.99,0,.08.05.18.12.22,1.04.56,2.29.73,3.45.68,1.62-.06,3.19-.59,4.52-1.52.26-.18.01-.62-.25-.43Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st9" d="M472.6,473.58c-1.32.39-3.47.39-5.32-.94-3.95-2.82-4.4-6.89-1.19-11.16,1.62,2.02,4.48,2.59,6.36,4.36-.3.65-.53,1.34-.68,2.07-.02.11-.04.22-.06.33-.73-.65-1.55-1.22-2.36-1.78-1.09-.77-2.41-1.55-2.98-2.63.16,1.39,3.96,4.16,4.82,4.97.14.13.27.26.4.39-.09,1.36.15,2.65.65,3.75.11.24.24.46.35.63Z"/>
|
||||
<path class="st15" d="M472.53,473.34c-1.03.3-2.15.29-3.19,0-1.27-.34-2.36-1.12-3.26-2.05-1.53-1.58-2.2-3.7-1.69-5.86.33-1.4,1.05-2.68,1.91-3.82l-.39.05c1.68,2.05,4.46,2.6,6.36,4.36l-.04-.3c-.36.79-.62,1.61-.77,2.46l.42-.11c-.91-.8-1.92-1.49-2.91-2.17-.88-.6-1.86-1.23-2.38-2.19-.15-.27-.49-.07-.46.19.07.51.44.96.76,1.35.47.56,1,1.06,1.54,1.54.98.87,2.07,1.64,2.99,2.59l-.07-.18c-.09,1.55.19,3.19,1.04,4.51.17.27.61.02.43-.25-.62-.96-.92-2.12-.98-3.25-.02-.3,0-.59,0-.89s-.18-.41-.38-.6c-.18-.17-.36-.32-.54-.48-1.12-.93-2.27-1.83-3.28-2.89-.4-.42-.94-.96-1.02-1.57l-.46.19c.52.96,1.45,1.6,2.32,2.21,1.04.72,2.1,1.42,3.05,2.26.13.11.38.09.42-.11.14-.81.38-1.59.72-2.34.05-.1.05-.22-.04-.3-1.9-1.76-4.7-2.32-6.36-4.36-.11-.14-.31-.06-.39.05-1.5,2-2.59,4.52-1.99,7.05.26,1.11.85,2.12,1.6,2.98.88,1,2.01,1.86,3.27,2.3s2.65.5,3.91.13c.31-.09.18-.57-.13-.48Z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 15 KiB |
@ -10,6 +10,8 @@
|
||||
|
||||
{% block body %}
|
||||
|
||||
|
||||
|
||||
<div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="carousel" data-aos="fade-left" data-aos-delay="300" data-aos-duration="800">
|
||||
<div class="carousel-indicators">
|
||||
<!-- {# inicio card item slide #} -->
|
||||
|
@ -10,57 +10,23 @@
|
||||
{% block body %}
|
||||
|
||||
|
||||
<div class="container py-5" data-aos="fade-up" data-aos-delay="0" data-aos-duration="800">
|
||||
<h2 class="text-center mb-4">Nuestra Metodología</h2>
|
||||
<p class="text-center text-muted mb-5">Implementamos soluciones con enfoque humano, técnico y estratégico.</p>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-md-6">
|
||||
<div class="card shadow-sm h-100" style="border: 2px solid#90b83b;">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title" style="color: #90b83b;"><i class="bi bi-bar-chart-line me-2"></i> ANÁLISIS DE DATOS</h5>
|
||||
<p class="card-text">Identificamos información clave para entender las metas, retos y oportunidades estratégicas de tu empresa.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<img id="random-img" alt="Imagen aleatoria" data-aos="fade-up" data-aos-delay="0" data-aos-duration="800">
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="card shadow-sm h-100" style="border: 2px solid#8c1f5a;">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title" style="color: #8c1f5a;"><i class="bi bi-sliders me-2"></i> PERSONALIZACIÓN</h5>
|
||||
<p class="card-text">Diseñamos estrategias a la medida, utilizando metodologías especializadas y herramientas tecnológicas.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="card shadow-sm h-100" style="border: 2px solid#5d9dd1;">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title" style="color: #5d9dd1;"><i class="bi bi-people me-2"></i> EXPERIENCIA DE SERVICIO</h5>
|
||||
<p class="card-text">Acompañamos cada paso del proyecto, asegurando una experiencia cercana, ágil y efectiva.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const images = [
|
||||
"{{ url_for('static', filename='y_img/methodology/m-01.svg') }}",
|
||||
"{{ url_for('static', filename='y_img/methodology/m-02.svg') }}"
|
||||
];
|
||||
const randomIndex = Math.floor(Math.random() * images.length);
|
||||
document.getElementById("random-img").src = images[randomIndex];
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="card shadow-sm h-100" style="border: 2px solid#002e72;">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title" style="color: #002e72;"><i class="bi bi-graph-up-arrow me-2"></i> IMPACTO</h5>
|
||||
<p class="card-text">Medimos resultados con métricas claras para asegurar que cada intervención tenga efectos tangibles.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-12">
|
||||
<div class="card shadow-sm h-100" style="border: 2px solid#707272;">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title" style="color: #707272;"><i class="bi bi-arrow-repeat me-2"></i> SOSTENIBILIDAD DEL CAMBIO</h5>
|
||||
<p class="card-text">Reforzamos capacidades internas para que el valor se mantenga a largo plazo, más allá del proyecto.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock body %}
|
||||
|
||||
|
@ -11,11 +11,6 @@
|
||||
{% block body %}
|
||||
|
||||
|
||||
|
||||
<!-- https://codepen.io/componentity/embed/RwajNdW?height=500&theme-id=dark&default-tab=result&user=componentity&slug-hash=RwajNdW&pen-title=Blog%20Card%20Section%20Bootstrap%20-%202nd&name=cp_embed_1 -->
|
||||
<!-- https://codepen.io/anon/embed/dgmjKK?height=602&theme-id=dark&slug-hash=dgmjKK&default-tab=result&animations=run&editable=&embed-version=2&user=anon&name=cp_embed_23 -->
|
||||
<!-- https://bootstrapbrain.com/component/bootstrap-5-blog-card/#code -->
|
||||
<!-- <div class="col-md-12"> -->
|
||||
<style>
|
||||
.fade-out {
|
||||
opacity: 0;
|
||||
@ -23,6 +18,75 @@
|
||||
}
|
||||
</style>
|
||||
|
||||
<style>
|
||||
@media (max-width: 576px) {
|
||||
#card-container {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
<style>
|
||||
/* Smartphones (hasta 767px) */
|
||||
@media (max-width: 767px) {
|
||||
/* main{ background-color: black; } */
|
||||
main {
|
||||
min-height: 80dvh;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tablets (768px - 1023px) */
|
||||
@media (min-width: 768px) and (max-width: 1023px) {
|
||||
/* main{ background-color: pink; } */
|
||||
main {
|
||||
min-height: 80dvh;
|
||||
}
|
||||
}
|
||||
|
||||
/* Laptops (1024px - 1439px) monitores resulición baja */
|
||||
@media (min-width: 1024px) and (max-width: 1439px) {
|
||||
/* main{ background-color: purple; } */
|
||||
main {
|
||||
min-height: 80dvh;
|
||||
}
|
||||
}
|
||||
|
||||
/* PCs de escritorio (1440px - 1919px) macbook */
|
||||
@media (min-width: 1440px) and (max-width: 1919px) {
|
||||
/* main{ background-color: greenyellow; } */
|
||||
main {
|
||||
min-height: 80dvh;
|
||||
}
|
||||
}
|
||||
|
||||
/* Pantallas Ultrawide (1920px en adelante) */
|
||||
@media (min-width: 1920px) {
|
||||
/* main{ background-color: red; } */
|
||||
main {
|
||||
min-height: 80dvh;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="container">
|
||||
@ -54,11 +118,11 @@
|
||||
</nav>
|
||||
{% endif %}
|
||||
<!-- {# f pagination #} -->
|
||||
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 g-4" id="card-container">
|
||||
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 g-4" id="card-container" data-aos="zoom-out-left" data-aos-delay="0" data-aos-duration="800" data-aos-easing="ease-in-out">
|
||||
|
||||
{% for ele in data %}
|
||||
|
||||
<div class="col card-wrapper" data-id="{{ele[0]}}" data-aos="zoom-out-left" data-aos-delay="{{loop.index * 100 }}"
|
||||
data-aos-duration="800" data-aos-easing="ease-in-out">
|
||||
<div class="col card-wrapper" data-id="{{ele[0]}}">
|
||||
<div class="card h-100">
|
||||
|
||||
<img src="{{ (ele[5] if ele[5] is not none else url_for('static', filename='y_img/other/no_img.png'))|safe }}"
|
||||
|
@ -13,6 +13,9 @@
|
||||
|
||||
{% block body %}
|
||||
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
/* estilos del carousel */
|
||||
@media screen and (orientation: landscape) {
|
||||
@ -77,35 +80,236 @@
|
||||
</style>
|
||||
|
||||
|
||||
<style>
|
||||
/* Smartphones (hasta 767px) */
|
||||
@media (max-width: 767px) {
|
||||
/* main{ background-color: black; } */
|
||||
#myTabContent{
|
||||
min-height: 80dvh;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tablets (768px - 1023px) */
|
||||
@media (min-width: 768px) and (max-width: 1023px) {
|
||||
/* main{ background-color: pink; } */
|
||||
#myTabContent{
|
||||
min-height: 80dvh;
|
||||
}
|
||||
}
|
||||
|
||||
/* Laptops (1024px - 1439px) monitores resulición baja */
|
||||
@media (min-width: 1024px) and (max-width: 1439px) {
|
||||
/* main{ background-color: purple; } */
|
||||
#myTabContent{
|
||||
min-height: 80dvh;
|
||||
}
|
||||
}
|
||||
|
||||
/* PCs de escritorio (1440px - 1919px) macbook */
|
||||
@media (min-width: 1440px) and (max-width: 1919px) {
|
||||
/* main{ background-color: greenyellow; } */
|
||||
|
||||
#myTabContent{
|
||||
min-height: 80dvh;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Pantallas Ultrawide (1920px en adelante) */
|
||||
@media (min-width: 1920px) {
|
||||
/* main{ background-color: red; } */
|
||||
|
||||
#myTabContent{
|
||||
min-height: 80dvh;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
|
||||
/* Estilo responsive para móviles */
|
||||
@media screen and (max-width: 768px) {
|
||||
#tblCarousel {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#tblCarousel_wrapper {
|
||||
padding: 0 !important;
|
||||
margin: 0 -0.5rem; /* Compensa el padding de las celdas */
|
||||
}
|
||||
|
||||
#tblCarousel thead {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#tblCarousel tbody {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#tblCarousel tr {
|
||||
display: block;
|
||||
width: calc(100% - 2rem); /* Resta el padding horizontal */
|
||||
margin: 0.5rem 1rem 1rem;
|
||||
padding: 1rem;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 0.75rem;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
|
||||
background-color: white;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
#tblCarousel td {
|
||||
display: block;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
padding: 0.75rem 1rem 0.75rem 7.5rem; /* Más espacio para etiquetas */
|
||||
border: none;
|
||||
border-bottom: 1px solid #eee;
|
||||
text-align: left;
|
||||
word-break: break-word;
|
||||
box-sizing: border-box;
|
||||
min-height: 3rem;
|
||||
}
|
||||
|
||||
#tblCarousel td::before {
|
||||
content: attr(data-label);
|
||||
position: absolute;
|
||||
top: 0.75rem;
|
||||
left: 1rem;
|
||||
width: 6rem; /* Ancho fijo para etiquetas */
|
||||
font-weight: 600;
|
||||
color: #444;
|
||||
font-size: 0.85rem;
|
||||
white-space: normal;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
#tblCarousel td:last-child {
|
||||
border-bottom: none;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.field_btns {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5rem;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.field_btns a {
|
||||
flex: 0 1 calc(50% - 0.5rem); /* Dos botones por fila */
|
||||
min-width: 0;
|
||||
text-align: center;
|
||||
padding: 0.375rem 0.5rem;
|
||||
}
|
||||
|
||||
/* Manejo específico de columnas con contenido largo */
|
||||
#tblCarousel td[data-label="Archivo"],
|
||||
#tblCarousel td[data-label="Texto"] {
|
||||
white-space: normal;
|
||||
max-height: none;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/* Ajuste para filas con menos contenido */
|
||||
#tblCarousel td[data-label="ID"],
|
||||
#tblCarousel td[data-label="New Tab"] {
|
||||
min-height: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
<style>
|
||||
/* formulario */
|
||||
/* Ajustes para móviles */
|
||||
@media (max-width: 576px) {
|
||||
.form-control-color {
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
}
|
||||
|
||||
.input-group-text {
|
||||
font-size: 0.8rem;
|
||||
padding: 0.375rem 0.5rem;
|
||||
}
|
||||
|
||||
.btn-lg {
|
||||
padding: 0.5rem 1rem;
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* Mejora para los contadores de caracteres */
|
||||
.form-text {
|
||||
text-align: right;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
/* Estilo para los inputs de color */
|
||||
.input-group .form-control-color {
|
||||
flex: 0 0 auto;
|
||||
width: 3.5rem;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
<ul class="nav nav-tabs" id="myTab" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true"><i class="bi bi-file-earmark-slides-fill"></i> Slides</button>
|
||||
<button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab"
|
||||
aria-controls="home" aria-selected="true"><i class="bi bi-file-earmark-slides-fill"></i> Slides</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false"><i class="bi bi-database-fill-up"></i> Añadir Slide</button>
|
||||
<button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile" type="button" role="tab"
|
||||
aria-controls="profile" aria-selected="false"><i class="bi bi-database-fill-up"></i> Añadir Slide</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false"><i class="bi bi-play-circle-fill"></i> Carousel</button>
|
||||
<button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact" type="button" role="tab"
|
||||
aria-controls="contact" aria-selected="false"><i class="bi bi-play-circle-fill"></i> Carousel</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content" id="myTabContent">
|
||||
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
|
||||
<div class="tab-pane fade show active table-responsive" id="home" role="tabpanel" aria-labelledby="home-tab">
|
||||
<!-- {# --------------------------------------------------------------- #} -->
|
||||
<!-- {# i tabla slides #} -->
|
||||
<table id="tblCarousel" class="table table-striped" style="width:100%">
|
||||
<table id="tblCarousel" class="table table-striped display responsive nowrap" style="width:100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Creado</th>
|
||||
<th>Archivo</th>
|
||||
<th>New Tab</th>
|
||||
<th>Texto</th>
|
||||
<th>Acciones</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for ele in data %}
|
||||
@ -131,10 +335,8 @@
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
<!-- {# f tabla slides #} -->
|
||||
<!-- {# --------------------------------------------------------------- #} -->
|
||||
</div>
|
||||
@ -147,51 +349,122 @@
|
||||
<div class="form-header">
|
||||
<h2>Agregar Slide</h2>
|
||||
</div>
|
||||
<form method="POST" action="{{ url_for('carousel') }}" enctype="multipart/form-data" class="login-form">
|
||||
|
||||
<form method="POST" action="{{ url_for('carousel') }}" enctype="multipart/form-data" class="needs-validation" novalidate>
|
||||
{{ form.hidden_tag() }}
|
||||
|
||||
<!-- {# input imagen #} -->
|
||||
<div class="form-row">
|
||||
{{ form.img.label() }}
|
||||
{{ form.img( class_="form-control" ) }}
|
||||
<!-- Fila 1: Campos de imagen y colores -->
|
||||
<div class="row">
|
||||
<!-- Input imagen - Ocupa todo el ancho en móviles, mitad en pantallas medianas/grandes -->
|
||||
<div class="col-12 col-md-6 mb-3">
|
||||
{{ form.img.label(class="form-label fw-bold") }}
|
||||
{{ form.img(class="form-control") }}
|
||||
<div class="invalid-feedback">
|
||||
Por favor selecciona un archivo válido.
|
||||
</div>
|
||||
<small class="form-text text-muted">
|
||||
Formatos soportados: JPG, PNG, GIF, MP4 (max 5MB)
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<!-- {# bg color picker #} -->
|
||||
<div class="form-row">
|
||||
{{ form.bg_color.label() }}
|
||||
{{ form.bg_color( type="color", class_="form-control form-control-color", value="") }}
|
||||
<!-- bg color picker - Apila en móviles, 2 por fila en pantallas medianas/grandes -->
|
||||
<div class="col-6 col-md-3 mb-3">
|
||||
{{ form.bg_color.label(class="form-label fw-bold") }}
|
||||
<div class="input-group">
|
||||
{{ form.bg_color(type="color", class="form-control form-control-color", value="#ffffff") }}
|
||||
<span class="input-group-text">{{ form.bg_color.data }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- {# txt color picker #} -->
|
||||
<div class="form-row">
|
||||
{{ form.txt_color.label() }}
|
||||
{{ form.txt_color( type="color", class_="form-control form-control-color", value="" ) }}
|
||||
<!-- txt color picker -->
|
||||
<div class="col-6 col-md-3 mb-3">
|
||||
{{ form.txt_color.label(class="form-label fw-bold") }}
|
||||
<div class="input-group">
|
||||
{{ form.txt_color(type="color", class="form-control form-control-color", value="#000000") }}
|
||||
<span class="input-group-text">{{ form.txt_color.data }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- {# txt #} -->
|
||||
<div class="form-row">
|
||||
{{ form.txt.label() }}
|
||||
{{ form.txt( class_="form-control" ) }}
|
||||
<!-- Fila 2: Campos de texto y URL -->
|
||||
<div class="row">
|
||||
<!-- txt - Ocupa todo el ancho en móviles, 2/3 en pantallas medianas/grandes -->
|
||||
<div class="col-12 col-md-8 mb-3">
|
||||
{{ form.txt.label(class="form-label fw-bold") }}
|
||||
{{ form.txt(class="form-control", maxlength="350", rows="3", placeholder="Texto que aparecerá en el slide") }}
|
||||
<div class="form-text">
|
||||
<span id="txt-counter">0</span>/350 caracteres
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- {# url #} -->
|
||||
<div class="form-row">
|
||||
{{ form.url.label() }}
|
||||
{{ form.url( class_="form-control" ) }}
|
||||
<!-- url - Ocupa todo el ancho en móviles, 1/3 en pantallas medianas/grandes -->
|
||||
<div class="col-12 col-md-4 mb-3">
|
||||
{{ form.url.label(class="form-label fw-bold") }}
|
||||
{{ form.url(class="form-control", maxlength="250", placeholder="https://ejemplo.com") }}
|
||||
<div class="form-text">
|
||||
<span id="url-counter">0</span>/250 caracteres
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- {# isNewTab #} -->
|
||||
<!-- Switch para new tab -->
|
||||
<div class="row mb-4">
|
||||
<div class="col-12">
|
||||
<div class="form-check form-switch">
|
||||
<div class="form-row">
|
||||
{{ form.isNewTab( class_="form-check-input", type="checkbox" ) }}
|
||||
{{ form.isNewTab.label() }}
|
||||
{{ form.isNewTab(class="form-check-input", type="checkbox", role="switch") }}
|
||||
{{ form.isNewTab.label(class="form-check-label fw-bold") }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-database-fill-up"></i> Enviar Datos
|
||||
<!-- Botón de submit -->
|
||||
<div class="d-grid gap-2 d-md-flex justify-content-md-end">
|
||||
<button type="submit" class="btn btn-primary btn-lg">
|
||||
<i class="bi bi-database-fill-up me-2"></i>Guardar Slide
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- JavaScript para contadores de caracteres -->
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Contador para el campo de texto
|
||||
const txtField = document.querySelector('#{{ form.txt.id }}');
|
||||
const txtCounter = document.querySelector('#txt-counter');
|
||||
|
||||
txtField.addEventListener('input', function() {
|
||||
txtCounter.textContent = this.value.length;
|
||||
});
|
||||
|
||||
// Contador para el campo URL
|
||||
const urlField = document.querySelector('#{{ form.url.id }}');
|
||||
const urlCounter = document.querySelector('#url-counter');
|
||||
|
||||
urlField.addEventListener('input', function() {
|
||||
urlCounter.textContent = this.value.length;
|
||||
});
|
||||
|
||||
// Validación del formulario
|
||||
const forms = document.querySelectorAll('.needs-validation');
|
||||
|
||||
Array.from(forms).forEach(form => {
|
||||
form.addEventListener('submit', event => {
|
||||
if (!form.checkValidity()) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
|
||||
form.classList.add('was-validated');
|
||||
}, false);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<!-- {# final form #} -->
|
||||
<!-- {# f form add slide #} -->
|
||||
@ -201,7 +474,8 @@
|
||||
<div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">
|
||||
<!-- {# --------------------------------------------------------------- #} -->
|
||||
<!-- {# i carousel #} -->
|
||||
<div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="carousel">
|
||||
<div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="carousel" data-bs-touch="true">
|
||||
<!-- <div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="carousel"> -->
|
||||
<div class="carousel-indicators">
|
||||
{% for s in data %}
|
||||
<button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="{{ loop.index0 }}"
|
||||
@ -233,11 +507,13 @@
|
||||
{% endfor %}
|
||||
<!-- {# fin card item slide #} -->
|
||||
</div>
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="prev">
|
||||
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions"
|
||||
data-bs-slide="prev">
|
||||
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Previous</span>
|
||||
</button>
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="next">
|
||||
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions"
|
||||
data-bs-slide="next">
|
||||
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||
<span class="visually-hidden">Next</span>
|
||||
</button>
|
||||
@ -248,10 +524,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{% endblock body %}
|
||||
|
||||
{% block js %}
|
||||
@ -267,117 +539,6 @@
|
||||
<script src="https://htmlguyllc.github.io/jConfirm/jConfirm.min.js"></script>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
function delete_file(e) {
|
||||
let btn = $(this);
|
||||
let postId = btn.data('id');
|
||||
let url = `${window.location.origin}/user/carousel/delete-slide/${postId}`;
|
||||
|
||||
fetch(url, {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + localStorage.getItem('token_ai') // o tu token JWT
|
||||
}
|
||||
})
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
if (data.msg) {
|
||||
console.log(data.msg);
|
||||
let btn = document.querySelector(`[data-id="${postId}"]`);
|
||||
let row = $(btn).closest('tr'); // usa jQuery para compatibilidad con DataTables
|
||||
let table = $('#tblCarousel').DataTable(); // obtiene instancia
|
||||
|
||||
table.row(row).remove().draw(); // elimina la fila y redibuja la tabla
|
||||
|
||||
// eliminar el tr del slide si quieres: btn.closest('tr').remove();
|
||||
} else {
|
||||
console.error('Error:', data.error);
|
||||
}
|
||||
})
|
||||
.catch(err => console.error('Error en fetch:', err));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// https://htmlguyllc.github.io/jConfirm/
|
||||
$(function(){
|
||||
$('.delete-btn').jConfirm({
|
||||
//false|array: if provided, this will override the default confirm/deny buttons (see below for an example)
|
||||
btns: false,
|
||||
//string: question displayed to the user
|
||||
question: '¿Deseas continuar con la eliminación?',
|
||||
//string: confirm button text
|
||||
confirm_text: 'Sí',
|
||||
//string: deny button text
|
||||
deny_text: 'No',
|
||||
//boolean: if true, when the confirm button is clicked the user will be redirected to the button's href location
|
||||
// follow_href: true,
|
||||
//boolean: if true and follow_href is true, the href will be opened in a new window
|
||||
open_new_tab: false,
|
||||
//boolean: if true, the tooltip will be hidden if you click outside of it
|
||||
hide_on_click: true,
|
||||
//string ('auto','top','bottom','left','right'): preferred location of the tooltip (defaults to auto if no space)
|
||||
position: 'auto',
|
||||
//boolean: if true, the deny button will be shown
|
||||
show_deny_btn: true,
|
||||
//string ('black', 'white', 'bootstrap-4', 'bootstrap-4-white')
|
||||
theme: 'bootstrap-4',
|
||||
//string ('tiny', 'small', 'medium', 'large')
|
||||
size: 'medium',
|
||||
//boolean: show the tooltip immediately on instantiation
|
||||
show_now: false,
|
||||
//string: class(es) to add to the tooltip
|
||||
'class': ''
|
||||
}).on('confirm', delete_file)
|
||||
.on('deny', function(e){
|
||||
var btn = $(this);
|
||||
//do something on deny
|
||||
}).on('jc-show', function(e, tooltip){
|
||||
// console.log("el tooltip es visible");
|
||||
//do something when tooltip is shown
|
||||
//tooltip dom element is passed as the second parameter
|
||||
|
||||
}).on('jc-hide', function(e){
|
||||
//do something when tooltip is hidden
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
|
||||
new DataTable('#tblCarousel', {
|
||||
initComplete: function() {
|
||||
// Agrega campos de filtro para cada columna
|
||||
this.api().columns().every(function() {
|
||||
let column = this;
|
||||
let header = $(column.header());
|
||||
let title = header.text().trim();
|
||||
|
||||
// Excluir la columna "Estatus" del filtro
|
||||
if (!(title.includes("ID") || title === 'New Tab' || title === 'Acciones')) {
|
||||
|
||||
console.log(title);
|
||||
// Crea input de filtro
|
||||
header.append('<div class="filter"><input type="text" class="form-control" placeholder="'+title+'" /></div>');
|
||||
|
||||
// Aplica el filtro al escribir
|
||||
$('input', header)
|
||||
.on('keyup change', function() {
|
||||
if (column.search() !== this.value) {
|
||||
column.search(this.value).draw();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<!-- {# if flash #} -->
|
||||
@ -389,7 +550,9 @@
|
||||
<!-- {# validador archivos extensión #} -->
|
||||
<script type="module" src="{{ url_for('static', filename='h_tmp_user/i_carousel_form/carousel_form.js') }}"></script>
|
||||
|
||||
<script type="module" src="{{ url_for('static', filename='h_tmp_user/i_carousel_form/delete_slide.js') }}"></script>
|
||||
|
||||
<script src="{{ url_for('static', filename='h_tmp_user/i_carousel_form/datatable_carousel.js') }}"></script>
|
||||
|
||||
|
||||
{% endblock js %}
|
@ -1,36 +1,61 @@
|
||||
<!-- Footer -->
|
||||
<footer class="footer">
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<!-- Columna 1: Contacto -->
|
||||
<div class="col-md-4 mb-4 mb-md-0 text-center">
|
||||
<div class="row gy-4 text-center text-md-start">
|
||||
|
||||
<!-- Columna 1: Mapa -->
|
||||
<div class="col-md-3">
|
||||
<h5>Ubicación</h5>
|
||||
<iframe
|
||||
src="https://www.google.com/maps/embed?pb=!1m17!1m12!1m3!1d470.72746206114255!2d-99.11244015806791!3d19.29020556180476!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m2!1m1!2zMTnCsDE3JzI0LjYiTiA5OcKwMDYnNDQuNiJX!5e0!3m2!1ses-419!2smx!4v1747189055133!5m2!1ses-419!2smx"
|
||||
width="100%"
|
||||
height="200"
|
||||
style="border:0; border-radius: 0.5rem;"
|
||||
allowfullscreen=""
|
||||
loading="lazy"
|
||||
referrerpolicy="no-referrer-when-downgrade">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<!-- Columna 2: Contacto -->
|
||||
<div class="col-md-3">
|
||||
<h5>Contacto</h5>
|
||||
<ul class="list-unstyled">
|
||||
<li class="mb-2"><i class="bi bi-geo-alt-fill me-2"></i> CDMX, México</li>
|
||||
<li class="mb-2">
|
||||
<i class="bi bi-geo-alt-fill me-2"></i>
|
||||
<a href="https://maps.app.goo.gl/VMCcHh1SJ7eqXcAA8" target="_blank">
|
||||
Blvd. Adolfo Ruíz Cortines 2467<br>C.P. 16035, CDMX, México
|
||||
</a>
|
||||
</li>
|
||||
<li class="mb-2"><i class="bi bi-telephone-fill me-2"></i> +52 xxxx xxxx</li>
|
||||
<!-- <li class="mb-2"><i class="bi bi-envelope-fill me-2"></i> email@formha.com</li> -->
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Copyright -->
|
||||
<div class="col-md-4 mb-4 mb-md-0 text-center">
|
||||
<div class="img-cont">
|
||||
<img src="{{ url_for( 'static', filename='y_img/logos/formha_blanco_vertical.png' ) }}" alt="Escudo FORMHä" height="150">
|
||||
<!-- Columna 3: Logo -->
|
||||
<div class="col-md-3 d-flex flex-column align-items-center text-center">
|
||||
<div class="img-cont mb-3">
|
||||
<img src="{{ url_for('static', filename='y_img/logos/formha_blanco_vertical.png') }}" alt="Escudo FORMHä" height="100">
|
||||
</div>
|
||||
<p>© 2025, Todos los derechos reservados.</p>
|
||||
<small>© 2025 FORMHä. Todos los derechos reservados.</small>
|
||||
</div>
|
||||
|
||||
<!-- Columna 3: Redes Sociales -->
|
||||
<div class="col-md-4 mb-4 mb-md-0 text-center">
|
||||
<!-- Columna 4: Redes Sociales -->
|
||||
<div class="col-md-3">
|
||||
<h5>Síguenos</h5>
|
||||
<div class="social-icons mb-4">
|
||||
<a href="#" class="text-white"><i class="bi bi-facebook"></i></a>
|
||||
<a href="#" class="text-white"><i class="bi bi-twitter-x"></i></a>
|
||||
<a href="#" class="text-white"><i class="bi bi-instagram"></i></a>
|
||||
<a href="#" class="text-white"><i class="bi bi-linkedin"></i></a>
|
||||
<a href="#" class="text-white"><i class="bi bi-youtube"></i></a>
|
||||
<div class="social-icons">
|
||||
<a href="https://www.facebook.com/formha.mx/" target="_blank"><i class="bi bi-facebook"></i></a>
|
||||
<a href="https://x.com/formhamx" target="_blank"><i class="bi bi-twitter-x"></i></a>
|
||||
<a href="https://www.instagram.com/formha.mx" target="_blank"><i class="bi bi-instagram"></i></a>
|
||||
<a href="https://www.linkedin.com/company/formha-mx/" target="_blank"><i class="bi bi-linkedin"></i></a>
|
||||
<a href="#" target="_blank"><i class="bi bi-youtube"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="my-4 border-secondary">
|
||||
|
||||
<div class="text-center small">
|
||||
Desarrollado con ❤️ por FORMHä
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
</footer>
|
||||
|
Loading…
x
Reference in New Issue
Block a user