182 lines
7.3 KiB
TypeScript
182 lines
7.3 KiB
TypeScript
import { Card } from "@/components/ui/card";
|
|
import { Button } from "@/components/ui/button";
|
|
import { ArrowRight, MapPin, Star, Camera } from "lucide-react";
|
|
import santoDomingoImage from "@/assets/santo-domingo.jpg";
|
|
import sanJuanImage from "@/assets/san-juan.jpg";
|
|
import puntaCanaImage from "@/assets/punta-cana.jpg";
|
|
|
|
const DestinationsSection = () => {
|
|
const destinations = [
|
|
{
|
|
id: "santo-domingo",
|
|
name: "Santo Domingo",
|
|
region: "Zona Colonial",
|
|
image: santoDomingoImage,
|
|
listings: "89+",
|
|
rating: 4.8,
|
|
description: "Descubre el corazón histórico de América",
|
|
highlights: ["Patrimonio UNESCO", "Catedral Primada", "Fortaleza Ozama"],
|
|
isPopular: true
|
|
},
|
|
{
|
|
id: "san-juan",
|
|
name: "San Juan",
|
|
region: "Viejo San Juan",
|
|
image: sanJuanImage,
|
|
listings: "124+",
|
|
rating: 4.9,
|
|
description: "Colores vibrantes y historia viva",
|
|
highlights: ["El Morro", "Calles empedradas", "Gastronomía única"],
|
|
isPopular: true
|
|
},
|
|
{
|
|
id: "punta-cana",
|
|
name: "Punta Cana",
|
|
region: "Costa del Coco",
|
|
image: puntaCanaImage,
|
|
listings: "95+",
|
|
rating: 4.7,
|
|
description: "Paraíso tropical de arena blanca",
|
|
highlights: ["Playas pristinas", "Resorts de lujo", "Deportes acuáticos"],
|
|
isPopular: false
|
|
}
|
|
];
|
|
|
|
return (
|
|
<section className="py-20 bg-background">
|
|
<div className="max-w-7xl mx-auto px-4">
|
|
{/* Section Header */}
|
|
<div className="text-center mb-16">
|
|
<div className="inline-block px-4 py-2 bg-secondary/10 text-secondary rounded-full text-sm font-medium mb-4">
|
|
Principales Regiones
|
|
</div>
|
|
<h2 className="text-4xl md:text-5xl font-bold mb-6">
|
|
Explora <span className="text-secondary-gradient">Ciudades</span>
|
|
</h2>
|
|
<p className="text-xl text-muted-foreground max-w-3xl mx-auto">
|
|
Descubre destinos emocionantes. Encuentra exactamente lo que estás buscando.
|
|
</p>
|
|
</div>
|
|
|
|
{/* Destinations Grid */}
|
|
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8 mb-12">
|
|
{destinations.map((destination, index) => (
|
|
<Card key={destination.id} className="group overflow-hidden bg-card border-0 shadow-soft hover:shadow-medium transition-all duration-500 hover:-translate-y-2">
|
|
{/* Image Container */}
|
|
<div className="relative h-64 overflow-hidden">
|
|
<img
|
|
src={destination.image}
|
|
alt={destination.name}
|
|
className="w-full h-full object-cover group-hover:scale-110 transition-transform duration-700"
|
|
/>
|
|
|
|
{/* Overlay */}
|
|
<div className="absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
|
|
|
|
{/* Popular Badge */}
|
|
{destination.isPopular && (
|
|
<div className="absolute top-4 left-4 bg-secondary text-secondary-foreground px-3 py-1 rounded-full text-sm font-medium">
|
|
🔥 Popular
|
|
</div>
|
|
)}
|
|
|
|
{/* Rating */}
|
|
<div className="absolute top-4 right-4 bg-white/90 text-gray-900 px-3 py-1 rounded-full text-sm font-medium flex items-center gap-1">
|
|
<Star className="w-4 h-4 fill-yellow-400 text-yellow-400" />
|
|
{destination.rating}
|
|
</div>
|
|
|
|
{/* Hover Actions */}
|
|
<div className="absolute bottom-4 left-4 right-4 transform translate-y-8 group-hover:translate-y-0 transition-transform duration-300 opacity-0 group-hover:opacity-100">
|
|
<div className="flex gap-2">
|
|
<Button size="sm" className="flex-1 bg-white/20 text-white border-white/30 hover:bg-white/30">
|
|
<Camera className="w-4 h-4 mr-2" />
|
|
Ver Galería
|
|
</Button>
|
|
<Button size="sm" className="bg-primary text-primary-foreground hover:bg-primary-dark">
|
|
<MapPin className="w-4 h-4" />
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{/* Content */}
|
|
<div className="p-6">
|
|
<div className="flex items-start justify-between mb-3">
|
|
<div>
|
|
<h3 className="text-2xl font-bold text-foreground mb-1">
|
|
{destination.name}
|
|
</h3>
|
|
<p className="text-lg font-medium text-primary">
|
|
{destination.region}
|
|
</p>
|
|
</div>
|
|
<div className="text-right">
|
|
<div className="text-2xl font-bold text-secondary">
|
|
{destination.listings}
|
|
</div>
|
|
<div className="text-sm text-muted-foreground">
|
|
listings
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<p className="text-muted-foreground mb-4 leading-relaxed">
|
|
{destination.description}
|
|
</p>
|
|
|
|
{/* Highlights */}
|
|
<div className="flex flex-wrap gap-2 mb-6">
|
|
{destination.highlights.map((highlight, idx) => (
|
|
<span
|
|
key={idx}
|
|
className="bg-primary/10 text-primary px-3 py-1 rounded-full text-sm font-medium"
|
|
>
|
|
{highlight}
|
|
</span>
|
|
))}
|
|
</div>
|
|
|
|
{/* CTA */}
|
|
<Button className="w-full group-hover:bg-primary-dark transition-colors">
|
|
Explorar más
|
|
<ArrowRight className="w-4 h-4 ml-2 group-hover:translate-x-1 transition-transform" />
|
|
</Button>
|
|
</div>
|
|
</Card>
|
|
))}
|
|
</div>
|
|
|
|
{/* Stats Section */}
|
|
<div className="grid grid-cols-2 md:grid-cols-4 gap-8 py-12 border-t border-border">
|
|
<div className="text-center">
|
|
<div className="text-4xl font-bold text-primary mb-2">2</div>
|
|
<div className="text-muted-foreground">Países</div>
|
|
</div>
|
|
<div className="text-center">
|
|
<div className="text-4xl font-bold text-secondary mb-2">15+</div>
|
|
<div className="text-muted-foreground">Ciudades</div>
|
|
</div>
|
|
<div className="text-center">
|
|
<div className="text-4xl font-bold text-success mb-2">500+</div>
|
|
<div className="text-muted-foreground">Negocios</div>
|
|
</div>
|
|
<div className="text-center">
|
|
<div className="text-4xl font-bold text-warning mb-2">50K+</div>
|
|
<div className="text-muted-foreground">Usuarios</div>
|
|
</div>
|
|
</div>
|
|
|
|
{/* Bottom CTA */}
|
|
<div className="text-center">
|
|
<Button size="lg" className="btn-hero text-lg px-8 py-4">
|
|
Ver Todos los Destinos
|
|
<ArrowRight className="w-5 h-5 ml-3" />
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
};
|
|
|
|
export default DestinationsSection; |