commit
729c2e0897
7 changed files with 758 additions and 0 deletions
@ -0,0 +1,114 @@ |
|||||
|
const { createApp, ref, onMounted, computed } = Vue; |
||||
|
|
||||
|
createApp({ |
||||
|
setup() { |
||||
|
const carData = ref({}); |
||||
|
const isLoading = ref(true); |
||||
|
const error = ref(null); |
||||
|
|
||||
|
// Function to load configuration from data.json
|
||||
|
const loadCarData = async () => { |
||||
|
try { |
||||
|
const dataJsonPath = './data.json'; |
||||
|
const response = await fetch(dataJsonPath, { cache: 'no-store', headers: { 'Cache-Control': 'no-cache' } }); |
||||
|
|
||||
|
if (!response.ok) { |
||||
|
throw new Error(`HTTP error! status: ${response.status}`); |
||||
|
} |
||||
|
|
||||
|
const data = await response.json(); |
||||
|
carData.value = data; |
||||
|
isLoading.value = false; |
||||
|
} catch (err) { |
||||
|
console.error('Error loading car data:', err); |
||||
|
error.value = err.message; |
||||
|
isLoading.value = false; |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
onMounted(async () => { |
||||
|
// Set page title based on device
|
||||
|
document.title = window.innerWidth <= 768 ? 'Auto en Venta' : (carData.value?.pageTitle); |
||||
|
|
||||
|
// Load car data from data.json
|
||||
|
await loadCarData(); |
||||
|
|
||||
|
// Initialize carousel and animations after data is loaded
|
||||
|
if (!error.value) { |
||||
|
// Wait for DOM to be fully updated
|
||||
|
setTimeout(() => { |
||||
|
// Initialize AOS animations
|
||||
|
AOS.init({ |
||||
|
duration: 800, |
||||
|
easing: 'ease-in-out', |
||||
|
once: true, |
||||
|
mirror: false, |
||||
|
offset: 50 |
||||
|
}); |
||||
|
|
||||
|
// Initialize enhanced mobile-friendly carousel
|
||||
|
try { |
||||
|
// Make sure the carousel element exists before initializing
|
||||
|
const carouselElement = document.getElementById('carCarousel'); |
||||
|
|
||||
|
// Check if carousel element exists and has carousel items
|
||||
|
if (carouselElement && carData.value && carData.value.carImages && carData.value.carImages.length > 0) { |
||||
|
// Wait a bit more for images to load
|
||||
|
setTimeout(() => { |
||||
|
// Initialize with simpler options to ensure compatibility
|
||||
|
bulmaCarousel.attach('#carCarousel', { |
||||
|
slidesToScroll: 1, |
||||
|
slidesToShow: 1, |
||||
|
loop: true, |
||||
|
autoplay: true, |
||||
|
autoplaySpeed: 3000, |
||||
|
pagination: true |
||||
|
}); |
||||
|
console.log('Carousel initialized successfully'); |
||||
|
}, 200); |
||||
|
} else { |
||||
|
console.error('Carousel element not found or no images available'); |
||||
|
} |
||||
|
} catch (error) { |
||||
|
console.error('Error initializing carousel:', error); |
||||
|
|
||||
|
// Fallback: Create a simple manual carousel if Bulma carousel fails
|
||||
|
try { |
||||
|
const carouselElement = document.getElementById('carCarousel'); |
||||
|
if (carouselElement) { |
||||
|
// Add a class to indicate fallback mode
|
||||
|
carouselElement.classList.add('fallback-carousel'); |
||||
|
|
||||
|
// Get all carousel items
|
||||
|
const items = carouselElement.querySelectorAll('.carousel-item'); |
||||
|
if (items.length > 0) { |
||||
|
// Show only the first item initially
|
||||
|
items.forEach((item, index) => { |
||||
|
item.style.display = index === 0 ? 'block' : 'none'; |
||||
|
}); |
||||
|
|
||||
|
console.log('Fallback carousel initialized'); |
||||
|
} |
||||
|
} |
||||
|
} catch (fallbackError) { |
||||
|
console.error('Error initializing fallback carousel:', fallbackError); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Add fade-in animation to elements with class 'fade-in'
|
||||
|
document.querySelectorAll('.fade-in').forEach((el, index) => { |
||||
|
setTimeout(() => { |
||||
|
el.classList.add('visible'); |
||||
|
}, 100 * index); |
||||
|
}); |
||||
|
}, 300); // Increased timeout to ensure DOM is ready
|
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
return { |
||||
|
carData, |
||||
|
isLoading, |
||||
|
error |
||||
|
}; |
||||
|
} |
||||
|
}).mount('#app'); |
||||
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 151 KiB |
@ -0,0 +1,397 @@ |
|||||
|
/* Base styles and variables */ |
||||
|
:root { |
||||
|
--primary-color: #FF5F40; |
||||
|
--primary-dark: #E04B30; |
||||
|
--secondary-color: #2C3E50; |
||||
|
--accent-color: #3498DB; |
||||
|
--light-bg: #F8F9FA; |
||||
|
--dark-text: #2C3E50; |
||||
|
--light-text: #FFFFFF; |
||||
|
--border-radius: 10px; |
||||
|
--box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1); |
||||
|
--gradient-primary: linear-gradient(135deg, #FF5F40 0%, #E04B30 100%); |
||||
|
--gradient-dark: linear-gradient(135deg, #2C3E50 0%, #1A252F 100%); |
||||
|
} |
||||
|
|
||||
|
/* Global styles */ |
||||
|
body { |
||||
|
font-family: 'Montserrat', sans-serif; |
||||
|
color: var(--dark-text); |
||||
|
background-color: var(--light-bg); |
||||
|
line-height: 1.6; |
||||
|
} |
||||
|
|
||||
|
h1, |
||||
|
h2, |
||||
|
h3, |
||||
|
h4, |
||||
|
h5, |
||||
|
h6 { |
||||
|
font-family: 'Poppins', sans-serif; |
||||
|
font-weight: 600; |
||||
|
} |
||||
|
|
||||
|
[v-cloak] { |
||||
|
display: none; |
||||
|
} |
||||
|
|
||||
|
.loading-overlay { |
||||
|
position: fixed; |
||||
|
top: 0; |
||||
|
left: 0; |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
background-color: rgba(255, 255, 255, 0.9); |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
z-index: 1000; |
||||
|
} |
||||
|
|
||||
|
.loading-overlay .progress { |
||||
|
width: 80%; |
||||
|
max-width: 300px; |
||||
|
height: 8px; |
||||
|
border-radius: 4px; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
/* Hero section styling */ |
||||
|
.hero.is-primary { |
||||
|
background: var(--gradient-primary); |
||||
|
position: relative; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
.hero.is-primary::before { |
||||
|
content: ''; |
||||
|
position: absolute; |
||||
|
top: 0; |
||||
|
left: 0; |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
background-image: url('https://images.unsplash.com/photo-1492144534655-ae79c964c9d7?ixlib=rb-1.2.1&auto=format&fit=crop&w=1950&q=80'); |
||||
|
background-size: cover; |
||||
|
background-position: center; |
||||
|
opacity: 0.15; |
||||
|
z-index: 0; |
||||
|
} |
||||
|
|
||||
|
.hero-body { |
||||
|
position: relative; |
||||
|
z-index: 1; |
||||
|
padding: 4rem 1.5rem; |
||||
|
} |
||||
|
|
||||
|
.hero .title { |
||||
|
font-weight: 700; |
||||
|
letter-spacing: -0.5px; |
||||
|
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); |
||||
|
} |
||||
|
|
||||
|
.hero .subtitle { |
||||
|
font-weight: 400; |
||||
|
max-width: 600px; |
||||
|
margin: 1rem auto 0; |
||||
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); |
||||
|
} |
||||
|
|
||||
|
/* Section styling */ |
||||
|
.section { |
||||
|
padding: 3rem 1.5rem; |
||||
|
} |
||||
|
|
||||
|
.section-title { |
||||
|
position: relative; |
||||
|
margin-bottom: 2rem; |
||||
|
padding-bottom: 0.75rem; |
||||
|
} |
||||
|
|
||||
|
.section-title::after { |
||||
|
content: ''; |
||||
|
position: absolute; |
||||
|
bottom: 0; |
||||
|
left: 0; |
||||
|
width: 60px; |
||||
|
height: 4px; |
||||
|
background: var(--primary-color); |
||||
|
border-radius: 2px; |
||||
|
} |
||||
|
|
||||
|
/* Card styling */ |
||||
|
.card { |
||||
|
border-radius: var(--border-radius); |
||||
|
box-shadow: var(--box-shadow); |
||||
|
overflow: hidden; |
||||
|
transition: transform 0.3s ease, box-shadow 0.3s ease; |
||||
|
height: 100%; |
||||
|
} |
||||
|
|
||||
|
.card:hover { |
||||
|
transform: translateY(-5px); |
||||
|
box-shadow: 0 12px 25px rgba(0, 0, 0, 0.15); |
||||
|
} |
||||
|
|
||||
|
/* Carousel styling */ |
||||
|
.carousel-container { |
||||
|
border-radius: var(--border-radius); |
||||
|
overflow: hidden; |
||||
|
box-shadow: var(--box-shadow); |
||||
|
margin-bottom: 2.5rem; |
||||
|
} |
||||
|
|
||||
|
/* Ensure images are properly sized */ |
||||
|
.carousel .carousel-item img { |
||||
|
width: 100%; |
||||
|
height: 450px; |
||||
|
object-fit: cover; |
||||
|
} |
||||
|
|
||||
|
/* Style carousel navigation */ |
||||
|
.carousel-nav-left, |
||||
|
.carousel-nav-right { |
||||
|
background-color: rgba(255, 255, 255, 0.8); |
||||
|
border-radius: 50%; |
||||
|
width: 40px; |
||||
|
height: 40px; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); |
||||
|
transition: all 0.2s ease; |
||||
|
cursor: pointer; |
||||
|
position: absolute; |
||||
|
top: 50%; |
||||
|
transform: translateY(-50%); |
||||
|
} |
||||
|
|
||||
|
.carousel-nav-left { |
||||
|
left: 10px; |
||||
|
} |
||||
|
|
||||
|
.carousel-nav-right { |
||||
|
right: 10px; |
||||
|
} |
||||
|
|
||||
|
.carousel-nav-left:hover, |
||||
|
.carousel-nav-right:hover { |
||||
|
background-color: white; |
||||
|
transform: translateY(-50%) scale(1.1); |
||||
|
} |
||||
|
|
||||
|
/* Style carousel indicators */ |
||||
|
.carousel-indicator { |
||||
|
background-color: rgba(255, 255, 255, 0.6); |
||||
|
border: 1px solid rgba(0, 0, 0, 0.1); |
||||
|
} |
||||
|
|
||||
|
.carousel-indicator.is-active { |
||||
|
background-color: var(--primary-color); |
||||
|
} |
||||
|
|
||||
|
/* Fallback carousel styles */ |
||||
|
.fallback-carousel { |
||||
|
position: relative; |
||||
|
overflow: hidden; |
||||
|
border-radius: var(--border-radius); |
||||
|
} |
||||
|
|
||||
|
.fallback-carousel .carousel-item { |
||||
|
transition: opacity 0.5s ease; |
||||
|
} |
||||
|
|
||||
|
.fallback-carousel .carousel-nav-left, |
||||
|
.fallback-carousel .carousel-nav-right { |
||||
|
z-index: 10; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
|
||||
|
/* Feature highlights */ |
||||
|
.feature-highlight { |
||||
|
text-align: center; |
||||
|
padding: 1.5rem; |
||||
|
margin-bottom: 1.5rem; |
||||
|
background-color: white; |
||||
|
border-radius: var(--border-radius); |
||||
|
box-shadow: var(--box-shadow); |
||||
|
transition: transform 0.3s ease; |
||||
|
} |
||||
|
|
||||
|
.feature-highlight:hover { |
||||
|
transform: translateY(-5px); |
||||
|
} |
||||
|
|
||||
|
.feature-icon { |
||||
|
font-size: 2rem; |
||||
|
color: var(--primary-color); |
||||
|
margin-bottom: 1rem; |
||||
|
display: inline-block; |
||||
|
background: rgba(255, 95, 64, 0.1); |
||||
|
padding: 1rem; |
||||
|
border-radius: 50%; |
||||
|
} |
||||
|
|
||||
|
/* Specs table styling */ |
||||
|
.specs-table { |
||||
|
border-radius: var(--border-radius); |
||||
|
overflow: hidden; |
||||
|
box-shadow: var(--box-shadow); |
||||
|
} |
||||
|
|
||||
|
.specs-table .table { |
||||
|
background-color: white; |
||||
|
margin-bottom: 0; |
||||
|
} |
||||
|
|
||||
|
.specs-table th { |
||||
|
background-color: var(--secondary-color); |
||||
|
color: white; |
||||
|
font-weight: 600; |
||||
|
} |
||||
|
|
||||
|
.specs-table tr:nth-child(even) { |
||||
|
background-color: rgba(0, 0, 0, 0.02); |
||||
|
} |
||||
|
|
||||
|
/* WhatsApp button styling */ |
||||
|
.cta-container { |
||||
|
text-align: center; |
||||
|
padding: 2rem; |
||||
|
background: white; |
||||
|
border-radius: var(--border-radius); |
||||
|
box-shadow: var(--box-shadow); |
||||
|
margin: 2rem 0; |
||||
|
} |
||||
|
|
||||
|
.whatsapp-button { |
||||
|
background: var(--gradient-primary); |
||||
|
color: white !important; |
||||
|
padding: 12px 28px; |
||||
|
border-radius: 50px; |
||||
|
font-weight: 600; |
||||
|
font-size: 1.1rem; |
||||
|
display: inline-flex; |
||||
|
align-items: center; |
||||
|
gap: 10px; |
||||
|
box-shadow: 0 4px 15px rgba(255, 95, 64, 0.4); |
||||
|
transition: all 0.3s ease; |
||||
|
border: none; |
||||
|
} |
||||
|
|
||||
|
.whatsapp-button:hover, |
||||
|
.whatsapp-button:focus { |
||||
|
transform: translateY(-3px); |
||||
|
box-shadow: 0 6px 20px rgba(255, 95, 64, 0.5); |
||||
|
background: linear-gradient(135deg, #FF7E66 0%, #E04B30 100%); |
||||
|
} |
||||
|
|
||||
|
.whatsapp-button:active { |
||||
|
transform: translateY(-1px); |
||||
|
} |
||||
|
|
||||
|
.whatsapp-button i { |
||||
|
font-size: 1.4rem; |
||||
|
} |
||||
|
|
||||
|
/* Footer styling */ |
||||
|
.footer { |
||||
|
background-color: var(--secondary-color); |
||||
|
color: white; |
||||
|
padding: 3rem 1.5rem; |
||||
|
} |
||||
|
|
||||
|
.footer strong { |
||||
|
color: white; |
||||
|
} |
||||
|
|
||||
|
/* Price tag */ |
||||
|
.price-tag { |
||||
|
background: var(--gradient-primary); |
||||
|
color: white; |
||||
|
/*display: inline-block; */ |
||||
|
padding: 0.75rem 1.5rem; |
||||
|
border-radius: 50px; |
||||
|
font-weight: 700; |
||||
|
font-size: 1.5rem; |
||||
|
margin: 1rem 0; |
||||
|
box-shadow: 0 4px 10px rgba(255, 95, 64, 0.3); |
||||
|
} |
||||
|
|
||||
|
/* Mobile-specific styles */ |
||||
|
@media screen and (max-width: 768px) { |
||||
|
|
||||
|
html, |
||||
|
body { |
||||
|
overflow-x: hidden; |
||||
|
-webkit-overflow-scrolling: touch; |
||||
|
} |
||||
|
|
||||
|
body { |
||||
|
position: relative; |
||||
|
width: 100%; |
||||
|
} |
||||
|
|
||||
|
.hero-body { |
||||
|
padding: 3rem 1rem; |
||||
|
} |
||||
|
|
||||
|
.carousel .carousel-item img { |
||||
|
height: 300px; |
||||
|
} |
||||
|
|
||||
|
.carousel-nav-left, |
||||
|
.carousel-nav-right { |
||||
|
width: 35px; |
||||
|
height: 35px; |
||||
|
} |
||||
|
|
||||
|
.table-container { |
||||
|
overflow-x: auto; |
||||
|
} |
||||
|
|
||||
|
.title.is-1 { |
||||
|
font-size: 2rem !important; |
||||
|
} |
||||
|
|
||||
|
.title.is-3 { |
||||
|
font-size: 1.5rem !important; |
||||
|
} |
||||
|
|
||||
|
.section { |
||||
|
padding: 2rem 1rem; |
||||
|
} |
||||
|
|
||||
|
.whatsapp-button { |
||||
|
width: 100%; |
||||
|
max-width: 300px; |
||||
|
font-size: 1rem; |
||||
|
padding: 12px 16px; |
||||
|
} |
||||
|
|
||||
|
.container { |
||||
|
padding: 0 15px; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/* Animation classes */ |
||||
|
.fade-in { |
||||
|
opacity: 0; |
||||
|
transform: translateY(20px); |
||||
|
transition: opacity 0.6s ease, transform 0.6s ease; |
||||
|
} |
||||
|
|
||||
|
.fade-in.visible { |
||||
|
opacity: 1; |
||||
|
transform: translateY(0); |
||||
|
} |
||||
|
|
||||
|
/* Optimize image loading */ |
||||
|
img { |
||||
|
display: block; |
||||
|
} |
||||
|
|
||||
|
/* Mobile-optimized table container */ |
||||
|
.is-mobile-optimized { |
||||
|
-webkit-overflow-scrolling: touch; |
||||
|
scroll-behavior: smooth; |
||||
|
} |
||||
@ -0,0 +1,67 @@ |
|||||
|
{ |
||||
|
"pageTitle": "Me venden!", |
||||
|
"heroTitle": "¡Fantastica Ferrari de coleccionen Venta!", |
||||
|
"heroSubtitle": "Dueño vende directo sin intermediarios listo para transferencia inmediata.", |
||||
|
"galleryTitle": "Galería de Fotos", |
||||
|
"carImages": [ |
||||
|
{ |
||||
|
"src": "assets/ferrari_1.jpg", |
||||
|
"alt": "Imagen de Auto 1" |
||||
|
}, |
||||
|
{ |
||||
|
"src": "assets/ferrari_2.jpg", |
||||
|
"alt": "Imagen de Auto 2" |
||||
|
}, |
||||
|
{ |
||||
|
"src": "assets/ferrari_3.jpg", |
||||
|
"alt": "Imagen de Auto 3" |
||||
|
} |
||||
|
], |
||||
|
"specTitle": "Especificaciones del Auto", |
||||
|
"carSpecs": [ |
||||
|
{ |
||||
|
"feature": "Marca", |
||||
|
"detail": "Ferrari", |
||||
|
"extra": "Excelente estado" |
||||
|
}, |
||||
|
{ |
||||
|
"feature": "Modelo", |
||||
|
"detail": "Ferrari 488" |
||||
|
}, |
||||
|
{ |
||||
|
"feature": "Año", |
||||
|
"detail": "1970" |
||||
|
}, |
||||
|
{ |
||||
|
"feature": "Kilometraje", |
||||
|
"detail": "350.000 km" |
||||
|
}, |
||||
|
{ |
||||
|
"feature": "Color", |
||||
|
"detail": "Rojo" |
||||
|
}, |
||||
|
{ |
||||
|
"feature": "Motor", |
||||
|
"detail": "4.0L 8 valvulas", |
||||
|
"extra": "Nunca tuvo GNC" |
||||
|
}, |
||||
|
{ |
||||
|
"feature": "Transmisión", |
||||
|
"detail": "Manual" |
||||
|
}, |
||||
|
{ |
||||
|
"feature": "Tipo de Combustible", |
||||
|
"detail": "Nafta" |
||||
|
}, |
||||
|
{ |
||||
|
"feature": "Precio", |
||||
|
"detail": "$77.000.000 (Negociable)" |
||||
|
} |
||||
|
], |
||||
|
"contactInfo": { |
||||
|
"whatsappNumber": "+5493511234567", |
||||
|
"whatsappText": "Hola, estoy interesado en tu auto en venta!", |
||||
|
"buttonText": "Contactar por WhatsApp" |
||||
|
}, |
||||
|
"footerText": "<strong>Creado con <a href='https://qrcrafter.com' target='_blank' rel='noopener noreferrer'>QRCrafter.com</a></strong>" |
||||
|
} |
||||
@ -0,0 +1,180 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="es"> |
||||
|
|
||||
|
<head> |
||||
|
|
||||
|
<meta charset="UTF-8"> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0"> |
||||
|
<meta name="theme-color" content="#FF5F40"> |
||||
|
<meta name="mobile-web-app-capable" content="yes"> |
||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> |
||||
|
|
||||
|
<title>{{ carData && carData.pageTitle ? carData.pageTitle : '¡Auto en Venta!' }}</title> |
||||
|
|
||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.3/css/bulma.min.css"> |
||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma-carousel@4.0.4/dist/css/bulma-carousel.min.css"> |
||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
||||
|
<link rel="stylesheet" |
||||
|
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&family=Poppins:wght@300;400;500;600;700&display=swap"> |
||||
|
|
||||
|
<!-- Add Vue.js --> |
||||
|
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> |
||||
|
<!-- Add carousel script in head to ensure it's loaded before use --> |
||||
|
<script src="https://cdn.jsdelivr.net/npm/bulma-carousel@4.0.4/dist/js/bulma-carousel.min.js"></script> |
||||
|
<!-- Add AOS for animations --> |
||||
|
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script> |
||||
|
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet"> |
||||
|
|
||||
|
<link rel="stylesheet" href="assets/styles.css"> |
||||
|
|
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
<div id="app" v-cloak> |
||||
|
<div v-if="isLoading" class="loading-overlay"> |
||||
|
<progress class="progress is-primary" max="100">Loading</progress> |
||||
|
</div> |
||||
|
|
||||
|
<div v-else-if="error" class="notification is-danger"> |
||||
|
<button class="delete"></button> |
||||
|
Error al cargar los datos: {{ error }} |
||||
|
</div> |
||||
|
|
||||
|
<template v-else> |
||||
|
<section class="hero is-primary"> |
||||
|
<div class="hero-body"> |
||||
|
<div class="container"> |
||||
|
<h1 class="title is-1 has-text-centered is-size-3-mobile" data-aos="fade-down"> |
||||
|
{{ carData.heroTitle }} |
||||
|
</h1> |
||||
|
|
||||
|
<p class="subtitle has-text-centered is-size-6-mobile" data-aos="fade-up" data-aos-delay="200"> |
||||
|
{{ carData.heroSubtitle }} |
||||
|
</p> |
||||
|
|
||||
|
<div class="price-tag has-text-centered" data-aos="zoom-in" data-aos-delay="400"> |
||||
|
<i class="fas fa-tag mr-2"></i> {{ carData.carSpecs.find(spec => spec.feature === 'Precio')?.detail }} |
||||
|
</div> |
||||
|
|
||||
|
<div class="buttons is-centered mt-4" data-aos="fade-up" data-aos-delay="600"> |
||||
|
<a :href="`https://wa.me/${carData.contactInfo.whatsappNumber}?text=${encodeURIComponent(carData.contactInfo.whatsappText)}`" |
||||
|
class="button is-white is-outlined is-rounded" target="_blank" rel="noopener noreferrer"> |
||||
|
<span class="icon"><i class="fab fa-whatsapp"></i></span> |
||||
|
<span>Escribime</span> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="section"> |
||||
|
<div class="container"> |
||||
|
<!-- Key Features Highlights --> |
||||
|
<div class="columns is-multiline mb-6" data-aos="fade-up"> |
||||
|
<div class="column is-3-desktop is-6-tablet"> |
||||
|
<div class="feature-highlight"> |
||||
|
<span class="feature-icon"> |
||||
|
<i class="fas fa-car"></i> |
||||
|
</span> |
||||
|
<h3 class="title is-5"> |
||||
|
{{ carData.carSpecs.find(spec => spec.feature === 'Marca')?.detail }} {{ carData.carSpecs.find(spec => |
||||
|
spec.feature === 'Modelo')?.detail }} |
||||
|
</h3> |
||||
|
<p>{{ carData.carSpecs.find(spec => spec.feature === 'Marca')?.extra }}</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="column is-3-desktop is-6-tablet"> |
||||
|
<div class="feature-highlight"> |
||||
|
<span class="feature-icon"> |
||||
|
<i class="fas fa-tachometer-alt"></i> |
||||
|
</span> |
||||
|
<h3 class="title is-5">{{ carData.carSpecs.find(spec => spec.feature === 'Kilometraje')?.detail }}</h3> |
||||
|
<p>{{ carData.carSpecs.find(spec => spec.feature === 'Kilometraje')?.extra }}</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="column is-3-desktop is-6-tablet"> |
||||
|
<div class="feature-highlight"> |
||||
|
<span class="feature-icon"> |
||||
|
<i class="fas fa-calendar-alt"></i> |
||||
|
</span> |
||||
|
<h3 class="title is-5">{{ carData.carSpecs.find(spec => spec.feature === 'Año')?.detail }}</h3> |
||||
|
<p>{{ carData.carSpecs.find(spec => spec.feature === 'Año')?.extra }}</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="column is-3-desktop is-6-tablet"> |
||||
|
<div class="feature-highlight"> |
||||
|
<span class="feature-icon"> |
||||
|
<i class="fas fa-gas-pump"></i> |
||||
|
</span> |
||||
|
<h3 class="title is-5">{{ carData.carSpecs.find(spec => spec.feature === 'Motor')?.detail }}</h3> |
||||
|
<p>{{ carData.carSpecs.find(spec => spec.feature === 'Motor')?.extra }}</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<!-- Gallery Section --> |
||||
|
<h2 class="title is-3 is-size-4-mobile section-title" data-aos="fade-right">{{ carData.galleryTitle }}</h2> |
||||
|
<div class="carousel-container" data-aos="fade-up"> |
||||
|
<!-- Using the proper structure for Bulma Carousel --> |
||||
|
<div id="carCarousel" class="carousel"> |
||||
|
<div v-for="(image, index) in carData.carImages" :key="index" class="carousel-item"> |
||||
|
<figure class="image is-4by3"> |
||||
|
<a :href="image.src" target="_blank" rel="noopener noreferrer"> |
||||
|
<img :src="image.src" :alt="image.alt" loading="lazy"> |
||||
|
</a> |
||||
|
</figure> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<h2 class="title is-3 is-size-4-mobile section-title">{{ carData.specTitle }}</h2> |
||||
|
<div class="specs-table is-mobile-optimized"> |
||||
|
<table class="table is-bordered is-hoverable is-fullwidth is-size-7-mobile"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th><i class="fas fa-clipboard-list mr-2"></i>Característica</th> |
||||
|
<th><i class="fas fa-info-circle mr-2"></i>Detalle</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<tr v-for="(spec, index) in carData.carSpecs" :key="index"> |
||||
|
<td><strong>{{ spec.feature }}</strong></td> |
||||
|
<td>{{ spec.detail }}</td> |
||||
|
</tr> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</div> |
||||
|
|
||||
|
<div class="cta-container mt-6"> |
||||
|
<h3 class="title is-4 mb-4">¿Te interesa?</h3> |
||||
|
<p class="subtitle is-6 mb-5">Escribime para coordinar una visita o solicitar más información</p> |
||||
|
<a :href="`https://wa.me/${carData.contactInfo.whatsappNumber}?text=${encodeURIComponent(carData.contactInfo.whatsappText)}`" |
||||
|
class="whatsapp-button" target="_blank" rel="noopener noreferrer" aria-label="Contactar por WhatsApp"> |
||||
|
<i class="fab fa-whatsapp"></i> |
||||
|
<span>{{ carData.contactInfo.buttonText }}</span> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<footer class="footer"> |
||||
|
<div class="content has-text-centered"> |
||||
|
<div class="columns is-centered"> |
||||
|
<div class="column is-8"> |
||||
|
<p class="mb-4"> |
||||
|
<span v-html="carData.footerText"></span> |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</footer> |
||||
|
</template> |
||||
|
</div> |
||||
|
|
||||
|
<script src="assets/app.js"></script> |
||||
|
</body> |
||||
|
|
||||
|
</html> |
||||
Loading…
Reference in new issue