1 Commits

Author SHA1 Message Date
dbe91ab8b9 Merge version_4 into main
Merge version_4 into main
2025-12-26 16:14:02 +00:00
2 changed files with 229 additions and 311 deletions

View File

@@ -4,13 +4,13 @@
/* Base units */ /* Base units */
/* --vw is set by ThemeProvider */ /* --vw is set by ThemeProvider */
--background: #fffef5; --background: #000000;;
--card: #fffbeb; --card: #1b1b1b;;
--foreground: #121200e6; --foreground: #ffffff;;
--primary-cta: #ffcf40; --primary-cta: #ff0000;;
--secondary-cta: #ffffff; --secondary-cta: #151515;;
--accent: #e2e2e2; --accent: #303030;;
--background-accent: #fef3c7; --background-accent: #303030;;
/* text sizing - set by ThemeProvider */ /* text sizing - set by ThemeProvider */
/* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem); /* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);
@@ -495,7 +495,7 @@ html {
body { body {
background-color: var(--background); background-color: var(--background);
color: var(--foreground); color: var(--foreground);
font-family: var(--font-inter-tight), sans-serif; font-family: var(--font-jetbrains-mono), sans-serif;
position: relative; position: relative;
min-height: 100vh; min-height: 100vh;
overscroll-behavior: none; overscroll-behavior: none;
@@ -508,5 +508,5 @@ h3,
h4, h4,
h5, h5,
h6 { h6 {
font-family: var(--font-inter-tight), sans-serif; font-family: var(--font-jetbrains-mono), sans-serif;
} }

View File

@@ -1,11 +1,16 @@
"use client"; "use client"
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import { useState } from "react"; import NavbarStyleMinimal from '@/components/navbar/NavbarStyleMinimal';
import HeroLogoBillboardSplitImage from '@/components/sections/hero/HeroLogoBillboardSplitImage';
import MediaAbout from '@/components/sections/about/MediaAbout';
import FeatureCardFourteen from '@/components/sections/feature/FeatureCardFourteen';
import TestimonialCardThirteen from '@/components/sections/testimonial/TestimonialCardThirteen';
import ContactFaq from '@/components/sections/contact/ContactFaq';
import FooterSocial from '@/components/sections/footer/FooterSocial';
import { Heart, Star, Calendar, Instagram, Facebook, Linkedin } from 'lucide-react';
export default function LandingPage() { export default function LandingPage() {
const [isMenuOpen, setIsMenuOpen] = useState(false);
return ( return (
<ThemeProvider <ThemeProvider
defaultButtonVariant="hover-magnetic" defaultButtonVariant="hover-magnetic"
@@ -19,310 +24,223 @@ export default function LandingPage() {
secondaryButtonStyle="glass" secondaryButtonStyle="glass"
headingFontWeight="medium" headingFontWeight="medium"
> >
{/* Navigation */} <div id="nav" data-section="nav">
<nav className="fixed top-0 left-0 w-full bg-white/90 backdrop-blur-sm z-50 border-b border-gray-200"> <NavbarStyleMinimal
<div className="max-w-6xl mx-auto px-6 py-4"> brandName="Viva"
<div className="flex items-center justify-between"> button={{ text: "Reserve Now", href: "contact" }}
<h1 className="text-2xl font-bold text-gray-900">Viva</h1> />
<div className="hidden md:flex items-center space-x-8"> </div>
<a href="#hero" className="text-gray-700 hover:text-gray-900 transition-colors">Home</a>
<a href="#about" className="text-gray-700 hover:text-gray-900 transition-colors">About</a>
<a href="#menu" className="text-gray-700 hover:text-gray-900 transition-colors">Menu</a>
<a href="#testimonials" className="text-gray-700 hover:text-gray-900 transition-colors">Reviews</a>
<a href="#contact" className="text-gray-700 hover:text-gray-900 transition-colors">Contact</a>
<button className="bg-blue-600 text-white px-6 py-2 rounded-lg hover:bg-blue-700 transition-colors">
Reserve Now
</button>
</div>
<button
className="md:hidden"
onClick={() => setIsMenuOpen(!isMenuOpen)}
>
<div className="w-6 h-6 flex flex-col justify-center space-y-1">
<div className="w-full h-0.5 bg-gray-700"></div>
<div className="w-full h-0.5 bg-gray-700"></div>
<div className="w-full h-0.5 bg-gray-700"></div>
</div>
</button>
</div>
{isMenuOpen && (
<div className="md:hidden mt-4 pb-4 border-t border-gray-200 pt-4">
<div className="flex flex-col space-y-2">
<a href="#hero" className="text-gray-700 hover:text-gray-900 transition-colors py-2">Home</a>
<a href="#about" className="text-gray-700 hover:text-gray-900 transition-colors py-2">About</a>
<a href="#menu" className="text-gray-700 hover:text-gray-900 transition-colors py-2">Menu</a>
<a href="#testimonials" className="text-gray-700 hover:text-gray-900 transition-colors py-2">Reviews</a>
<a href="#contact" className="text-gray-700 hover:text-gray-900 transition-colors py-2">Contact</a>
<button className="bg-blue-600 text-white px-6 py-2 rounded-lg hover:bg-blue-700 transition-colors mt-2 w-full">
Reserve Now
</button>
</div>
</div>
)}
</div>
</nav>
{/* Hero Section */} <div id="hero" data-section="hero">
<section id="hero" className="pt-20 min-h-screen flex items-center bg-gradient-to-br from-gray-50 to-blue-50"> <HeroLogoBillboardSplitImage
<div className="max-w-6xl mx-auto px-6 grid md:grid-cols-2 gap-12 items-center"> logoText="VIVA"
<div> description="Experience culinary excellence in an elegant atmosphere. Discover authentic flavors and impeccable service."
<h1 className="text-5xl md:text-6xl font-bold text-gray-900 mb-6">VIVA</h1> buttons={[
<p className="text-xl text-gray-600 mb-8 leading-relaxed"> { text: "Reserve Table", href: "contact" },
Experience culinary excellence in an elegant atmosphere. Discover authentic flavors and impeccable service. { text: "Explore Menu", href: "menu" }
</p> ]}
<div className="flex flex-col sm:flex-row gap-4"> layoutOrder="default"
<button className="bg-blue-600 text-white px-8 py-3 rounded-lg hover:bg-blue-700 transition-colors"> splitImageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766416778445-zl3jwowr.jpg"
Reserve Table splitImageAlt="Restaurant Interior"
</button> imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766762603989-3tcb4zsk.jpg"
<button className="border border-gray-300 text-gray-700 px-8 py-3 rounded-lg hover:border-gray-400 transition-colors"> imageAlt="Fine Dining Experience"
Explore Menu frameStyle="card"
</button> />
</div> </div>
</div>
<div className="relative">
<img
src="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766416778445-zl3jwowr.jpg"
alt="Restaurant Interior"
className="w-full h-96 object-cover rounded-2xl shadow-2xl"
/>
</div>
</div>
</section>
{/* About Section */} <div id="about" data-section="about">
<section id="about" className="py-20 bg-white"> <MediaAbout
<div className="max-w-6xl mx-auto px-6 grid md:grid-cols-2 gap-12 items-center"> title="Our Story"
<div className="relative"> description="Founded with a passion for culinary innovation, Viva brings together world-class cuisine, impeccable service, and an unforgettable dining experience. Every dish is crafted with precision and love."
<img tag="About Us"
src="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766764501852-mmy7v2k1.jpg" tagIcon={Heart}
alt="Restaurant ambiance" imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766764501852-mmy7v2k1.jpg"
className="w-full h-96 object-cover rounded-2xl shadow-xl" imageAlt="Restaurant ambiance"
/> buttons={[{ text: "Join us", href: "#" }]}
</div> useInvertedBackground="noInvert"
<div> />
<div className="flex items-center gap-2 mb-4"> </div>
<span className="text-red-500"></span>
<span className="text-sm font-medium text-gray-500 uppercase tracking-wide">About Us</span>
</div>
<h2 className="text-4xl font-bold text-gray-900 mb-6">Our Story</h2>
<p className="text-lg text-gray-600 mb-8 leading-relaxed">
Founded with a passion for culinary innovation, Viva brings together world-class cuisine, impeccable service, and an unforgettable dining experience. Every dish is crafted with precision and love.
</p>
<button className="bg-blue-600 text-white px-8 py-3 rounded-lg hover:bg-blue-700 transition-colors">
Join us
</button>
</div>
</div>
</section>
{/* Menu Section */} <div id="menu" data-section="menu">
<section id="menu" className="py-20 bg-gray-50"> <FeatureCardFourteen
<div className="max-w-6xl mx-auto px-6"> title="Signature Specialties"
<div className="text-center mb-16"> description="Indulge in our carefully curated selection of dishes that define Viva's culinary identity"
<span className="text-sm font-medium text-gray-500 uppercase tracking-wide">Menu</span> textboxLayout="default"
<h2 className="text-4xl font-bold text-gray-900 mt-2 mb-4">Signature Specialties</h2> useInvertedBackground="noInvert"
<p className="text-xl text-gray-600 max-w-2xl mx-auto"> tag="Menu"
Indulge in our carefully curated selection of dishes that define Viva's culinary identity tagIcon={Star}
</p> features={[
</div> {
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-8"> id: "1",
<div className="bg-white rounded-2xl overflow-hidden shadow-lg hover:shadow-xl transition-shadow"> title: "Handmade Pasta",
<img description: "Traditional Italian pasta prepared fresh daily with premium ingredients. 5 stars",
src="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766760339172-wtq2r8qq.jpg" imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766760339172-wtq2r8qq.jpg",
alt="Signature Pasta Dish" imageAlt: "Signature Pasta Dish"
className="w-full h-48 object-cover" },
/> {
<div className="p-6"> id: "2",
<h3 className="text-xl font-semibold text-gray-900 mb-2">Handmade Pasta</h3> title: "Fresh Seafood",
<p className="text-gray-600">Traditional Italian pasta prepared fresh daily with premium ingredients. 5 stars</p> description: "Ocean-to-table selections featuring the finest catch of the day. 5 stars",
</div> imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766760341776-od1mgbjg.jpg",
</div> imageAlt: "Seafood Specialty"
<div className="bg-white rounded-2xl overflow-hidden shadow-lg hover:shadow-xl transition-shadow"> },
<img {
src="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766760341776-od1mgbjg.jpg" id: "3",
alt="Seafood Specialty" title: "Decadent Desserts",
className="w-full h-48 object-cover" description: "Artisanal sweet creations that end your meal on a perfect note. 5 stars",
/> imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766760342753-3muw0pvy.jpg",
<div className="p-6"> imageAlt: "Premium Dessert"
<h3 className="text-xl font-semibold text-gray-900 mb-2">Fresh Seafood</h3> },
<p className="text-gray-600">Ocean-to-table selections featuring the finest catch of the day. 5 stars</p> {
</div> id: "4",
</div> title: "Premium Steaks",
<div className="bg-white rounded-2xl overflow-hidden shadow-lg hover:shadow-xl transition-shadow"> description: "Expertly aged cuts grilled to perfection with signature preparations. 5 stars",
<img imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766416782593-h8zdw91t.jpg",
src="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766760342753-3muw0pvy.jpg" imageAlt: "Prime Steak Selection"
alt="Premium Dessert" }
className="w-full h-48 object-cover" ]}
/> />
<div className="p-6"> </div>
<h3 className="text-xl font-semibold text-gray-900 mb-2">Decadent Desserts</h3>
<p className="text-gray-600">Artisanal sweet creations that end your meal on a perfect note. 5 stars</p>
</div>
</div>
<div className="bg-white rounded-2xl overflow-hidden shadow-lg hover:shadow-xl transition-shadow">
<img
src="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766416782593-h8zdw91t.jpg"
alt="Prime Steak Selection"
className="w-full h-48 object-cover"
/>
<div className="p-6">
<h3 className="text-xl font-semibold text-gray-900 mb-2">Premium Steaks</h3>
<p className="text-gray-600">Expertly aged cuts grilled to perfection with signature preparations. 5 stars</p>
</div>
</div>
</div>
</div>
</section>
{/* Testimonials Section */} <div id="testimonials" data-section="testimonials">
<section id="testimonials" className="py-20 bg-white"> <TestimonialCardThirteen
<div className="max-w-6xl mx-auto px-6"> testimonials={[
<div className="text-center mb-16"> {
<h2 className="text-4xl font-bold text-gray-900 mb-4">What Our Guests Say</h2> id: "1",
<p className="text-xl text-gray-600 max-w-2xl mx-auto"> name: "Margaret Chen",
Hear from those who have experienced Viva's culinary excellence handle: "@margaretchen",
</p> testimonial: "Viva has become our favorite restaurant. The food is exceptional, the service is impeccable, and the atmosphere is simply perfect. We celebrate every special occasion here.",
</div> rating: 5,
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8"> imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766414401529-6db20epg.jpg",
<div className="bg-gray-50 rounded-2xl p-6"> imageAlt: "Margaret Chen"
<div className="flex items-center gap-3 mb-4"> },
<img {
src="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766414401529-6db20epg.jpg" id: "2",
alt="Margaret Chen" name: "James Wilson",
className="w-12 h-12 rounded-full object-cover" handle: "@jameswilson",
/> testimonial: "Outstanding culinary experience. The chef's attention to detail is remarkable, and every course was a masterpiece.",
<div> rating: 5,
<h4 className="font-semibold text-gray-900">Margaret Chen</h4> imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766492697041-9adqfrju.jpg",
<p className="text-sm text-gray-500">@margaretchen</p> imageAlt: "James Wilson"
</div> },
</div> {
<div className="flex mb-3"> id: "3",
<span className="text-yellow-400"></span> name: "Sofia Rodriguez",
</div> handle: "@sofiar",
<p className="text-gray-600"> testimonial: "The finest dining experience in the city. Worth every penny for the quality and sophistication.",
Viva has become our favorite restaurant. The food is exceptional, the service is impeccable, and the atmosphere is simply perfect. We celebrate every special occasion here. rating: 5,
</p> imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766502911819-f5rnce5q.jpg",
</div> imageAlt: "Sofia Rodriguez"
<div className="bg-gray-50 rounded-2xl p-6"> },
<div className="flex items-center gap-3 mb-4"> {
<img id: "4",
src="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766492697041-9adqfrju.jpg" name: "David Kim",
alt="James Wilson" handle: "@davidkim",
className="w-12 h-12 rounded-full object-cover" testimonial: "Brought my family for a special celebration and they loved every moment. Highly recommended for special occasions.",
/> rating: 5,
<div> imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766502912600-84fr3x4z.jpg",
<h4 className="font-semibold text-gray-900">James Wilson</h4> imageAlt: "David Kim"
<p className="text-sm text-gray-500">@jameswilson</p> },
</div> {
</div> id: "5",
<div className="flex mb-3"> name: "Emma Thompson",
<span className="text-yellow-400"></span> handle: "@emmathompson",
</div> testimonial: "A culinary journey I'll never forget. The wine pairing was expertly curated and enhanced every dish.",
<p className="text-gray-600"> rating: 5,
Outstanding culinary experience. The chef's attention to detail is remarkable, and every course was a masterpiece. imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766502913367-8j5yog7q.jpg",
</p> imageAlt: "Emma Thompson"
</div> },
<div className="bg-gray-50 rounded-2xl p-6"> {
<div className="flex items-center gap-3 mb-4"> id: "6",
<img name: "Michael Santos",
src="https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766502911819-f5rnce5q.jpg" handle: "@michaelsantos",
alt="Sofia Rodriguez" testimonial: "Professional service, exquisite food, elegant ambiance. Viva sets the standard for fine dining.",
className="w-12 h-12 rounded-full object-cover" rating: 5,
/> imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/gallery/uploaded-1766502914201-sdgv9pae.jpg",
<div> imageAlt: "Michael Santos"
<h4 className="font-semibold text-gray-900">Sofia Rodriguez</h4> }
<p className="text-sm text-gray-500">@sofiar</p> ]}
</div> showRating={true}
</div> title="What Our Guests Say"
<div className="flex mb-3"> description="Hear from those who have experienced Viva's culinary excellence"
<span className="text-yellow-400"></span> textboxLayout="default"
</div> animationType="opacity"
<p className="text-gray-600"> useInvertedBackground="invertCard"
The finest dining experience in the city. Worth every penny for the quality and sophistication. />
</p> </div>
</div>
</div>
</div>
</section>
{/* Contact Section */} <div id="contact" data-section="contact">
<section id="contact" className="py-20 bg-gray-50"> <ContactFaq
<div className="max-w-6xl mx-auto px-6"> faqs={[
<div className="grid lg:grid-cols-2 gap-16"> {
<div> id: "1",
<h2 className="text-4xl font-bold text-gray-900 mb-8">Frequently Asked Questions</h2> title: "How far in advance should I make a reservation?",
<div className="space-y-6"> content: "We recommend reservations at least 2-3 weeks in advance for optimal table selection. However, we do accommodate walk-ins based on availability."
<div className="bg-white rounded-xl p-6 shadow-sm"> },
<h3 className="font-semibold text-gray-900 mb-2">How far in advance should I make a reservation?</h3> {
<p className="text-gray-600">We recommend reservations at least 2-3 weeks in advance for optimal table selection. However, we do accommodate walk-ins based on availability.</p> id: "2",
</div> title: "Do you offer private dining options?",
<div className="bg-white rounded-xl p-6 shadow-sm"> content: "Yes, we offer exclusive private dining experiences for special occasions. Please contact us directly to discuss your event requirements."
<h3 className="font-semibold text-gray-900 mb-2">Do you offer private dining options?</h3> },
<p className="text-gray-600">Yes, we offer exclusive private dining experiences for special occasions. Please contact us directly to discuss your event requirements.</p> {
</div> id: "3",
<div className="bg-white rounded-xl p-6 shadow-sm"> title: "What is your dress code?",
<h3 className="font-semibold text-gray-900 mb-2">What is your dress code?</h3> content: "Smart casual is recommended. Jackets are appreciated but not required. We want our guests to feel comfortable while maintaining our refined atmosphere."
<p className="text-gray-600">Smart casual is recommended. Jackets are appreciated but not required. We want our guests to feel comfortable while maintaining our refined atmosphere.</p> },
</div> {
</div> id: "4",
</div> title: "Do you accommodate dietary restrictions?",
<div className="bg-white rounded-2xl p-8 shadow-lg"> content: "Absolutely. Please inform us of any dietary requirements when booking, and our chef will create a custom menu to suit your needs."
<div className="flex items-center gap-3 mb-6"> },
<span className="text-blue-600">📅</span> {
<h3 className="text-2xl font-bold text-gray-900">Reserve Your Table</h3> id: "5",
</div> title: "Can I bring my own wine?",
<p className="text-gray-600 mb-6"> content: "We have a curated wine selection. Outside wine is not permitted, but our sommelier can recommend excellent pairings from our collection."
Book your next culinary experience at Viva. Experience excellence with every bite. },
</p> {
<button className="w-full bg-blue-600 text-white px-8 py-3 rounded-lg hover:bg-blue-700 transition-colors"> id: "6",
Book Now title: "What is your cancellation policy?",
</button> content: "Reservations cancelled within 48 hours may incur a charge. We appreciate advance notice for any changes to your reservation."
</div> }
</div> ]}
</div> ctaTitle="Reserve Your Table"
</section> ctaDescription="Book your next culinary experience at Viva. Experience excellence with every bite."
ctaButton={{ text: "Book Now", href: "#" }}
ctaIcon={Calendar}
useInvertedBackground="noInvert"
animationType="slide-up"
/>
</div>
{/* Footer */} <div id="footer" data-section="footer">
<footer id="footer" className="py-16 bg-gray-900 text-white"> <FooterSocial
<div className="max-w-6xl mx-auto px-6"> logoText="Viva"
<div className="grid md:grid-cols-4 gap-8"> copyrightText="© 2025 Viva Restaurant. All rights reserved."
<div> columns={[
<h3 className="text-2xl font-bold mb-4">Viva</h3> {
<p className="text-gray-400">© 2025 Viva Restaurant. All rights reserved.</p> title: "Restaurant",
</div> items: [
<div> { label: "About Us", href: "#about" },
<h4 className="font-semibold mb-4">Restaurant</h4> { label: "Menu", href: "#menu" },
<div className="space-y-2"> { label: "Reservations", href: "#contact" }
<a href="#about" className="block text-gray-400 hover:text-white transition-colors">About Us</a> ]
<a href="#menu" className="block text-gray-400 hover:text-white transition-colors">Menu</a> },
<a href="#contact" className="block text-gray-400 hover:text-white transition-colors">Reservations</a> {
</div> title: "Visit",
</div> items: [
<div> { label: "Hours", href: "#" },
<h4 className="font-semibold mb-4">Visit</h4> { label: "Location", href: "#" },
<div className="space-y-2"> { label: "Private Dining", href: "#" }
<a href="#" className="block text-gray-400 hover:text-white transition-colors">Hours</a> ]
<a href="#" className="block text-gray-400 hover:text-white transition-colors">Location</a> }
<a href="#" className="block text-gray-400 hover:text-white transition-colors">Private Dining</a> ]}
</div> socialLinks={[
</div> { icon: Instagram, href: "https://instagram.com", ariaLabel: "Instagram" },
<div> { icon: Facebook, href: "https://facebook.com", ariaLabel: "Facebook" },
<h4 className="font-semibold mb-4">Connect</h4> { icon: Linkedin, href: "https://linkedin.com", ariaLabel: "LinkedIn" }
<div className="flex space-x-4"> ]}
<a href="https://instagram.com" className="text-gray-400 hover:text-white transition-colors" aria-label="Instagram"> />
📷 </div>
</a>
<a href="https://facebook.com" className="text-gray-400 hover:text-white transition-colors" aria-label="Facebook">
📘
</a>
<a href="https://linkedin.com" className="text-gray-400 hover:text-white transition-colors" aria-label="LinkedIn">
💼
</a>
</div>
</div>
</div>
</div>
</footer>
</ThemeProvider> </ThemeProvider>
); );
} }