Agrega estas imágenes coherentemente con el contexto de la landing page, en un bloque tipo carrusel funcional, debes optimizar las imágenes para que tenga un diseño y tamaño coherente como la imagen de la portada, debe tener un titulo atractivo y otra columna con la descripción de las imágenes.
Browse files- index.html +63 -1
- script.js +57 -0
- style.css +38 -0
index.html
CHANGED
|
@@ -48,9 +48,71 @@
|
|
| 48 |
</div>
|
| 49 |
</div>
|
| 50 |
</section>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
|
| 52 |
<!-- Problem Section -->
|
| 53 |
-
|
| 54 |
<div class="max-w-6xl mx-auto">
|
| 55 |
<h2 class="text-3xl md:text-4xl font-bold text-center mb-16">El problema que todos conocemos (pero nadie soluciona)</h2>
|
| 56 |
<div class="grid md:grid-cols-3 gap-8">
|
|
|
|
| 48 |
</div>
|
| 49 |
</div>
|
| 50 |
</section>
|
| 51 |
+
<!-- Product Showcase Section -->
|
| 52 |
+
<section class="py-20 px-4 bg-white">
|
| 53 |
+
<div class="max-w-6xl mx-auto">
|
| 54 |
+
<h2 class="text-3xl md:text-4xl font-bold text-center mb-16">Descubre el poder de Bikelo en acción</h2>
|
| 55 |
+
|
| 56 |
+
<div class="grid md:grid-cols-2 gap-12 items-center">
|
| 57 |
+
<div class="relative">
|
| 58 |
+
<div class="carousel-container relative overflow-hidden rounded-xl shadow-2xl border-2 border-primary">
|
| 59 |
+
<div class="carousel-slides flex transition-transform duration-300">
|
| 60 |
+
<div class="carousel-slide min-w-full">
|
| 61 |
+
<img src="https://huggingface.co/spaces/MagoDigi/bikelo-log-stica-ciclista-en-ia/resolve/main/images/Captura_Dashboard_bikelo.jpeg"
|
| 62 |
+
alt="Dashboard Bikelo" class="w-full h-auto object-cover">
|
| 63 |
+
</div>
|
| 64 |
+
<div class="carousel-slide min-w-full">
|
| 65 |
+
<img src="https://huggingface.co/spaces/MagoDigi/bikelo-log-stica-ciclista-en-ia/resolve/main/images/Captura_Busqueda_bikelo3.jpeg"
|
| 66 |
+
alt="Búsqueda inteligente" class="w-full h-auto object-cover">
|
| 67 |
+
</div>
|
| 68 |
+
<div class="carousel-slide min-w-full">
|
| 69 |
+
<img src="https://huggingface.co/spaces/MagoDigi/bikelo-log-stica-ciclista-en-ia/resolve/main/images/Captura_filtros_bikelo.jpeg"
|
| 70 |
+
alt="Filtros avanzados" class="w-full h-auto object-cover">
|
| 71 |
+
</div>
|
| 72 |
+
<div class="carousel-slide min-w-full">
|
| 73 |
+
<img src="https://huggingface.co/spaces/MagoDigi/bikelo-log-stica-ciclista-en-ia/resolve/main/images/Captura_Historial_bikelo6.jpeg"
|
| 74 |
+
alt="Historial completo" class="w-full h-auto object-cover">
|
| 75 |
+
</div>
|
| 76 |
+
</div>
|
| 77 |
+
<button class="carousel-prev absolute left-4 top-1/2 -translate-y-1/2 bg-white bg-opacity-80 text-secondary p-2 rounded-full shadow-md hover:bg-primary transition-all">
|
| 78 |
+
<i data-feather="chevron-left"></i>
|
| 79 |
+
</button>
|
| 80 |
+
<button class="carousel-next absolute right-4 top-1/2 -translate-y-1/2 bg-white bg-opacity-80 text-secondary p-2 rounded-full shadow-md hover:bg-primary transition-all">
|
| 81 |
+
<i data-feather="chevron-right"></i>
|
| 82 |
+
</button>
|
| 83 |
+
<div class="carousel-dots flex justify-center gap-2 absolute bottom-4 left-0 right-0">
|
| 84 |
+
<button class="w-3 h-3 rounded-full bg-white bg-opacity-50 hover:bg-opacity-100 transition-all dot" data-index="0"></button>
|
| 85 |
+
<button class="w-3 h-3 rounded-full bg-white bg-opacity-50 hover:bg-opacity-100 transition-all dot" data-index="1"></button>
|
| 86 |
+
<button class="w-3 h-3 rounded-full bg-white bg-opacity-50 hover:bg-opacity-100 transition-all dot" data-index="2"></button>
|
| 87 |
+
<button class="w-3 h-3 rounded-full bg-white bg-opacity-50 hover:bg-opacity-100 transition-all dot" data-index="3"></button>
|
| 88 |
+
</div>
|
| 89 |
+
</div>
|
| 90 |
+
</div>
|
| 91 |
+
|
| 92 |
+
<div class="space-y-6">
|
| 93 |
+
<div class="feature-description active">
|
| 94 |
+
<h3 class="text-2xl font-bold text-primary mb-3">Dashboard Inteligente</h3>
|
| 95 |
+
<p class="text-gray-600">Controla todos los aspectos de tu taller desde un único panel intuitivo. Visualiza KPIs clave, estado de reparaciones y métricas financieras en tiempo real.</p>
|
| 96 |
+
</div>
|
| 97 |
+
<div class="feature-description hidden">
|
| 98 |
+
<h3 class="text-2xl font-bold text-primary mb-3">Búsqueda Multicriterio</h3>
|
| 99 |
+
<p class="text-gray-600">Encuentra cualquier pieza en segundos con nuestro buscador avanzado. Filtra por marca, modelo, compatibilidad y disponibilidad en tiempo real.</p>
|
| 100 |
+
</div>
|
| 101 |
+
<div class="feature-description hidden">
|
| 102 |
+
<h3 class="text-2xl font-bold text-primary mb-3">Filtros Avanzados</h3>
|
| 103 |
+
<p class="text-gray-600">Navega fácilmente por tu inventario con filtros inteligentes que se adaptan a tus necesidades específicas de búsqueda y categorización.</p>
|
| 104 |
+
</div>
|
| 105 |
+
<div class="feature-description hidden">
|
| 106 |
+
<h3 class="text-2xl font-bold text-primary mb-3">Historial Completo</h3>
|
| 107 |
+
<p class="text-gray-600">Accede al historial completo de cada bicicleta y cliente. Todas las reparaciones, presupuestos y notas organizadas y fáciles de consultar.</p>
|
| 108 |
+
</div>
|
| 109 |
+
</div>
|
| 110 |
+
</div>
|
| 111 |
+
</div>
|
| 112 |
+
</section>
|
| 113 |
|
| 114 |
<!-- Problem Section -->
|
| 115 |
+
<section class="py-20 px-4 bg-gray-50">
|
| 116 |
<div class="max-w-6xl mx-auto">
|
| 117 |
<h2 class="text-3xl md:text-4xl font-bold text-center mb-16">El problema que todos conocemos (pero nadie soluciona)</h2>
|
| 118 |
<div class="grid md:grid-cols-3 gap-8">
|
script.js
CHANGED
|
@@ -1,3 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
// Form handling
|
| 2 |
document.addEventListener('DOMContentLoaded', function() {
|
| 3 |
const demoForm = document.querySelector('form');
|
|
|
|
| 1 |
+
|
| 2 |
+
// Carousel functionality
|
| 3 |
+
function initCarousel() {
|
| 4 |
+
const carousel = document.querySelector('.carousel-slides');
|
| 5 |
+
const prevBtn = document.querySelector('.carousel-prev');
|
| 6 |
+
const nextBtn = document.querySelector('.carousel-next');
|
| 7 |
+
const dots = document.querySelectorAll('.dot');
|
| 8 |
+
const descriptions = document.querySelectorAll('.feature-description');
|
| 9 |
+
let currentIndex = 0;
|
| 10 |
+
const totalSlides = document.querySelectorAll('.carousel-slide').length;
|
| 11 |
+
|
| 12 |
+
function updateCarousel() {
|
| 13 |
+
carousel.style.transform = `translateX(-${currentIndex * 100}%)`;
|
| 14 |
+
|
| 15 |
+
// Update dots
|
| 16 |
+
dots.forEach((dot, index) => {
|
| 17 |
+
dot.classList.toggle('active', index === currentIndex);
|
| 18 |
+
});
|
| 19 |
+
|
| 20 |
+
// Update descriptions
|
| 21 |
+
descriptions.forEach((desc, index) => {
|
| 22 |
+
desc.classList.toggle('hidden', index !== currentIndex);
|
| 23 |
+
desc.classList.toggle('active', index === currentIndex);
|
| 24 |
+
});
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
// Navigation
|
| 28 |
+
prevBtn.addEventListener('click', () => {
|
| 29 |
+
currentIndex = (currentIndex - 1 + totalSlides) % totalSlides;
|
| 30 |
+
updateCarousel();
|
| 31 |
+
});
|
| 32 |
+
|
| 33 |
+
nextBtn.addEventListener('click', () => {
|
| 34 |
+
currentIndex = (currentIndex + 1) % totalSlides;
|
| 35 |
+
updateCarousel();
|
| 36 |
+
});
|
| 37 |
+
|
| 38 |
+
// Dot navigation
|
| 39 |
+
dots.forEach(dot => {
|
| 40 |
+
dot.addEventListener('click', () => {
|
| 41 |
+
currentIndex = parseInt(dot.dataset.index);
|
| 42 |
+
updateCarousel();
|
| 43 |
+
});
|
| 44 |
+
});
|
| 45 |
+
|
| 46 |
+
// Auto-rotate (optional)
|
| 47 |
+
setInterval(() => {
|
| 48 |
+
currentIndex = (currentIndex + 1) % totalSlides;
|
| 49 |
+
updateCarousel();
|
| 50 |
+
}, 5000);
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
// Initialize carousel if exists
|
| 54 |
+
if (document.querySelector('.carousel-container')) {
|
| 55 |
+
initCarousel();
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
// Form handling
|
| 59 |
document.addEventListener('DOMContentLoaded', function() {
|
| 60 |
const demoForm = document.querySelector('form');
|
style.css
CHANGED
|
@@ -70,6 +70,44 @@
|
|
| 70 |
.delay-300 {
|
| 71 |
animation-delay: 0.3s;
|
| 72 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
|
| 74 |
/* Smooth scrolling */
|
| 75 |
html {
|
|
|
|
| 70 |
.delay-300 {
|
| 71 |
animation-delay: 0.3s;
|
| 72 |
}
|
| 73 |
+
/* Carousel Styles */
|
| 74 |
+
.carousel-container {
|
| 75 |
+
aspect-ratio: 16/9;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
.carousel-slides {
|
| 79 |
+
height: 100%;
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
.carousel-slide {
|
| 83 |
+
height: 100%;
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
.carousel-slide img {
|
| 87 |
+
height: 100%;
|
| 88 |
+
object-fit: cover;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
.carousel-prev, .carousel-next {
|
| 92 |
+
width: 40px;
|
| 93 |
+
height: 40px;
|
| 94 |
+
display: flex;
|
| 95 |
+
align-items: center;
|
| 96 |
+
justify-content: center;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
.carousel-prev:hover, .carousel-next:hover {
|
| 100 |
+
background: #FFB700 !important;
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
.carousel-dots .dot.active {
|
| 104 |
+
background: #FFB700 !important;
|
| 105 |
+
opacity: 1;
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
.feature-description {
|
| 109 |
+
transition: opacity 0.3s ease;
|
| 110 |
+
}
|
| 111 |
|
| 112 |
/* Smooth scrolling */
|
| 113 |
html {
|