Compare commits
15 Commits
version_6_
...
version_12
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cc3d4625e3 | ||
| 0844f7cd77 | |||
|
|
37ec7c3f38 | ||
| 78aeb49b85 | |||
| 97d714b472 | |||
| 38ae4249b0 | |||
|
|
9ff93e7f07 | ||
| eccf99bffa | |||
|
|
c7abc1069e | ||
| 2bbd922b2b | |||
| e8ccaf4bb9 | |||
|
|
a8dcee9314 | ||
| c2b4bdedf6 | |||
|
|
399795763a | ||
| 96ffe62070 |
49
src/components/custom/GalleryBento.tsx
Normal file
49
src/components/custom/GalleryBento.tsx
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
|
||||||
|
type GalleryItem = {
|
||||||
|
imageSrc: string;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
className?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const GalleryBento = ({
|
||||||
|
tag,
|
||||||
|
title,
|
||||||
|
description,
|
||||||
|
items,
|
||||||
|
}: {
|
||||||
|
tag: string;
|
||||||
|
title:string;
|
||||||
|
description: string;
|
||||||
|
items: GalleryItem[];
|
||||||
|
}) => {
|
||||||
|
return (
|
||||||
|
<section className="py-20">
|
||||||
|
<div className="container mx-auto px-4">
|
||||||
|
<div className="text-center mb-12">
|
||||||
|
<span className="text-sm font-semibold text-primary uppercase tracking-wider">{tag}</span>
|
||||||
|
<h2 className="text-4xl font-bold text-gray-900 dark:text-white mt-2">{title}</h2>
|
||||||
|
<p className="text-lg text-gray-600 dark:text-gray-300 mt-4 max-w-2xl mx-auto">{description}</p>
|
||||||
|
</div>
|
||||||
|
<div className="grid grid-cols-2 md:grid-cols-4 gap-4">
|
||||||
|
{items.map((item, index) => (
|
||||||
|
<div
|
||||||
|
key={index}
|
||||||
|
className={`relative overflow-hidden rounded-lg group fade-in h-full`}
|
||||||
|
>
|
||||||
|
<img src={item.imageSrc} alt={item.title} className="w-full h-full object-cover transition-transform duration-500 group-hover:scale-110 aspect-[4/3]" />
|
||||||
|
<div className="absolute inset-0 bg-black bg-opacity-50 flex flex-col justify-end p-4 opacity-0 group-hover:opacity-100 transition-opacity duration-500">
|
||||||
|
<h3 className="text-white text-lg font-semibold">{item.title}</h3>
|
||||||
|
<p className="text-gray-300 text-sm">{item.description}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default GalleryBento;
|
||||||
@@ -95,11 +95,7 @@ const HeroOverlayTestimonial = ({
|
|||||||
|
|
||||||
<div
|
<div
|
||||||
key={currentIndex}
|
key={currentIndex}
|
||||||
initial={{ opacity: 0, y: 10 }}
|
className="absolute z-10 bottom-3 left-3 right-3 p-3 xl:p-4 2xl:p-5 card rounded flex flex-col gap-3 xl:gap-4 2xl:gap-5 md:left-auto md:bottom-8 md:right-8 md:max-w-25/100 2xl:max-w-2/10 bg-white/20 backdrop-blur-lg border border-white/30"
|
||||||
animate={{ opacity: 1, y: 0 }}
|
|
||||||
exit={{ opacity: 0, y: -10 }}
|
|
||||||
transition={{ duration: 0.3 }}
|
|
||||||
className="absolute z-10 bottom-3 left-3 right-3 p-3 xl:p-4 2xl:p-5 card rounded flex flex-col gap-3 xl:gap-4 2xl:gap-5 md:left-auto md:bottom-8 md:right-8 md:max-w-25/100 2xl:max-w-2/10 bg-white/10 backdrop-blur-md border border-white/20"
|
|
||||||
>
|
>
|
||||||
<div className="flex gap-1">
|
<div className="flex gap-1">
|
||||||
{Array.from({ length: 5 }).map((_, index) => (
|
{Array.from({ length: 5 }).map((_, index) => (
|
||||||
|
|||||||
@@ -186,3 +186,17 @@ h6 {
|
|||||||
2.10837px 3.16256px 9.48767px color-mix(in srgb, var(--color-accent) 10%, transparent);
|
2.10837px 3.16256px 9.48767px color-mix(in srgb, var(--color-accent) 10%, transparent);
|
||||||
border: 1px solid var(--color-secondary-cta);
|
border: 1px solid var(--color-secondary-cta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@keyframes fadeIn {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.fade-in {
|
||||||
|
animation: fadeIn 0.5s ease-in-out;
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
|||||||
import ContactSplitForm from '@/components/sections/contact/ContactSplitForm';
|
import ContactSplitForm from '@/components/sections/contact/ContactSplitForm';
|
||||||
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
|
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
|
||||||
import FeaturesIconCards from '@/components/sections/features/FeaturesIconCards';
|
import FeaturesIconCards from '@/components/sections/features/FeaturesIconCards';
|
||||||
|
import GalleryBento from '@/components/custom/GalleryBento';
|
||||||
import HeroOverlayTestimonial from '@/components/sections/hero/HeroOverlayTestimonial';
|
import HeroOverlayTestimonial from '@/components/sections/hero/HeroOverlayTestimonial';
|
||||||
import MetricsGradientCards from '@/components/sections/metrics/MetricsGradientCards';
|
import MetricsGradientCards from '@/components/sections/metrics/MetricsGradientCards';
|
||||||
import ProductRatingCards from '@/components/sections/product/ProductRatingCards';
|
import ProductRatingCards from '@/components/sections/product/ProductRatingCards';
|
||||||
@@ -217,6 +218,41 @@ export default function HomePage() {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="gallery" data-section="gallery">
|
||||||
|
<GalleryBento
|
||||||
|
tag="Vineyard Moments"
|
||||||
|
title="Capturing the Spirit of Vine & Barrel"
|
||||||
|
description="Explore memorable moments from our vineyard, where guests enjoy the beauty of our estate and the pleasure of our wines."
|
||||||
|
items={[
|
||||||
|
{
|
||||||
|
imageSrc: "http://img.b2bpic.net/free-photo/group-friends-celebrating-together_23-2149872337.jpg",
|
||||||
|
title: "Toasting to Friendship",
|
||||||
|
description: "Guests raising a glass amidst the scenic beauty of our vineyard."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageSrc: "http://img.b2bpic.net/free-photo/happy-friends-having-fun-outdoors_23-2148952039.jpg",
|
||||||
|
title: "Vineyard Explorations",
|
||||||
|
description: "A group of friends enjoying a sunny day exploring our lush vineyards.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageSrc: "http://img.b2bpic.net/free-photo/people-enjoying-calm-countryside_23-2150162019.jpg",
|
||||||
|
title: "Serene Tastings",
|
||||||
|
description: "Visitors savoring our finest wines while taking in the tranquil vineyard views.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageSrc: "http://img.b2bpic.net/free-photo/group-people-sitting-table-eating-drinking-wine_1303-28963.jpg",
|
||||||
|
title: "Harvest Celebrations",
|
||||||
|
description: "A joyful gathering celebrating the harvest season with good food and great wine."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageSrc: "http://img.b2bpic.net/free-photo/smiling-young-friends-clinking-wine-glasses-while-having-picnic-vineyard_23-2148179259.jpg",
|
||||||
|
title: "Picnics and Pairings",
|
||||||
|
description: "Friends enjoying a delightful picnic, perfectly paired with our signature wines."
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="contact" data-section="contact">
|
<div id="contact" data-section="contact">
|
||||||
<ContactSplitForm
|
<ContactSplitForm
|
||||||
tag="Connect With Us"
|
tag="Connect With Us"
|
||||||
|
|||||||
Reference in New Issue
Block a user