Compare commits

..

20 Commits

Author SHA1 Message Date
kudinDmitriyUp
40cad254a0 feat: remove solid background from navbar and add blur effect 2026-05-08 10:09:19 +00:00
c499eb3691 Merge version_20_1778234396806 into main
Merge version_20_1778234396806 into main
2026-05-08 10:01:13 +00:00
kudinDmitriyUp
960495577a feat: remove solid background from mobile navbar 2026-05-08 10:00:39 +00:00
eea0ea4704 Merge version_19_1778233736268 into main
Merge version_19_1778233736268 into main
2026-05-08 09:50:33 +00:00
kudinDmitriyUp
0f1c441597 feat: replace metrics section with gradient cards 2026-05-08 09:50:10 +00:00
15d1cab14b Merge version_18_1778231790767 into main
Merge version_18_1778231790767 into main
2026-05-08 09:17:53 +00:00
kudinDmitriyUp
bcbc79f4b7 feat: update consultation section image 2026-05-08 09:17:19 +00:00
ad98cc1d99 Merge version_17_1778231348086 into main
Merge version_17_1778231348086 into main
2026-05-08 09:10:59 +00:00
kudinDmitriyUp
595ae5f56c feat: replace portfolio section with features detailed steps 2026-05-08 09:10:33 +00:00
6648ab8d89 Merge version_16_1778229809387 into main
Merge version_16_1778229809387 into main
2026-05-08 08:44:54 +00:00
kudinDmitriyUp
74df44500f feat: Add button to About Us section 2026-05-08 08:44:31 +00:00
d6a4924d7c Merge version_15_1778229061901 into main
Merge version_15_1778229061901 into main
2026-05-08 08:34:20 +00:00
kudinDmitriyUp
743e9fdbf6 feat: add animated background to about section 2026-05-08 08:33:56 +00:00
ee65977fb0 Merge version_14_1778228418077 into main
Merge version_14_1778228418077 into main
2026-05-08 08:23:04 +00:00
kudinDmitriyUp
4aa2a57150 feat: update border radius to match Apple's design 2026-05-08 08:22:31 +00:00
8113fd7d7d Merge version_13_1778228298894 into main
Merge version_13_1778228298894 into main
2026-05-08 08:19:38 +00:00
kudinDmitriyUp
dce6ba68d8 feat: apply glassmorphic effect to about section card 2026-05-08 08:19:07 +00:00
f87b5cc1dc Merge version_12_1778227063732 into main
Merge version_12_1778227063732 into main
2026-05-08 07:59:09 +00:00
kudinDmitriyUp
2def7734a1 feat: add light ray background to CTA section 2026-05-08 07:58:38 +00:00
92b9d3f91a Merge version_11_1778226860864 into main
Merge version_11_1778226860864 into main
2026-05-08 07:56:07 +00:00
8 changed files with 96 additions and 72 deletions

View File

@@ -0,0 +1,15 @@
import React from 'react';
const AnimatedBackground = () => {
return (
<div className="absolute inset-0 z-0 overflow-hidden">
<div className="absolute inset-0 bg-gradient-to-br from-background-light via-background to-background-dark" />
<div className="absolute inset-0 animate-pulse-slow">
<div className="absolute top-1/4 left-1/4 w-96 h-96 bg-primary/10 rounded-full filter blur-3xl opacity-50" />
<div className="absolute bottom-1/4 right-1/4 w-96 h-96 bg-secondary/10 rounded-full filter blur-3xl opacity-50" />
</div>
</div>
);
};
export default AnimatedBackground;

View File

@@ -1,3 +1,4 @@
import AnimatedBackground from "@/components/custom/AnimatedBackground";
import type { LucideIcon } from "lucide-react"; import type { LucideIcon } from "lucide-react";
import Button from "@/components/ui/Button"; import Button from "@/components/ui/Button";
import TextAnimation from "@/components/ui/TextAnimation"; import TextAnimation from "@/components/ui/TextAnimation";
@@ -24,7 +25,8 @@ const AboutFeaturesSplit = ({
videoSrc, videoSrc,
}: AboutFeaturesSplitProps) => { }: AboutFeaturesSplitProps) => {
return ( return (
<section aria-label="About section" className="py-20"> <section aria-label="About section" className="py-20 relative">
<AnimatedBackground />
<div className="flex flex-col gap-8 mx-auto w-content-width"> <div className="flex flex-col gap-8 mx-auto w-content-width">
<div className="flex flex-col items-center gap-2"> <div className="flex flex-col items-center gap-2">
<span className="px-3 py-1 mb-1 text-sm card rounded">{tag}</span> <span className="px-3 py-1 mb-1 text-sm card rounded">{tag}</span>
@@ -54,7 +56,7 @@ const AboutFeaturesSplit = ({
</div> </div>
<div className="flex flex-col md:flex-row md:items-stretch gap-5"> <div className="flex flex-col md:flex-row md:items-stretch gap-5">
<div className="flex flex-col justify-center gap-3 xl:gap-4 2xl:gap-5 p-3 xl:p-4 2xl:p-5 w-full md:w-4/10 2xl:w-3/10 card rounded"> <div className="flex flex-col justify-center gap-3 xl:gap-4 2xl:gap-5 p-3 xl:p-4 2xl:p-5 w-full md:w-4/10 2xl:w-3/10 card rounded bg-transparent backdrop-blur-lg border border-white/20">
{items.map((item, index) => { {items.map((item, index) => {
const ItemIcon = resolveIcon(item.icon); const ItemIcon = resolveIcon(item.icon);
return ( return (
@@ -74,7 +76,7 @@ const AboutFeaturesSplit = ({
})} })}
</div> </div>
<div className="p-3 xl:p-4 2xl:p-5 w-full md:w-6/10 2xl:w-7/10 h-80 md:h-auto card rounded overflow-hidden"> <div className="p-3 xl:p-4 2xl:p-5 w-full md:w-6/10 2xl:w-7/10 h-80 md:h-auto card rounded overflow-hidden bg-transparent">
<div className="relative size-full"> <div className="relative size-full">
<ImageOrVideo imageSrc={imageSrc} videoSrc={videoSrc} className="absolute inset-0 object-cover rounded" /> <ImageOrVideo imageSrc={imageSrc} videoSrc={videoSrc} className="absolute inset-0 object-cover rounded" />
</div> </div>

View File

@@ -16,7 +16,11 @@ const ContactCta = ({
return ( return (
<section aria-label="Contact section" className="py-20"> <section aria-label="Contact section" className="py-20">
<div className="w-content-width mx-auto"> <div className="w-content-width mx-auto">
<ScrollReveal variant="slide-up" className="flex items-center justify-center py-20 px-5 md:px-10 card rounded"> <ScrollReveal variant="slide-up" className="relative overflow-hidden flex items-center justify-center py-20 px-5 md:px-10 card rounded">
<div
className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[800px] -z-10 bg-[radial-gradient(closest-side,theme(colors.background/0.5),transparent)]"
aria-hidden="true"
/>
<div className="w-full md:w-3/4 flex flex-col items-center gap-3"> <div className="w-full md:w-3/4 flex flex-col items-center gap-3">
<span className="card rounded px-3 py-1 text-sm">{tag}</span> <span className="card rounded px-3 py-1 text-sm">{tag}</span>

View File

@@ -93,7 +93,7 @@ const NavbarCentered = ({ logo, navItems, ctaButton }: NavbarCenteredProps) => {
<div <div
ref={menuRef} ref={menuRef}
className="md:hidden fixed z-1000 top-3 left-3 right-3 p-6 rounded-lg card" className="md:hidden fixed z-1000 top-3 left-3 right-3 p-6 rounded-lg bg-background/80 backdrop-blur-sm"
> >
<div className="flex items-center justify-between mb-6"> <div className="flex items-center justify-between mb-6">
<p className="text-xl text-foreground">Menu</p> <p className="text-xl text-foreground">Menu</p>

View File

@@ -32,16 +32,14 @@ const NavbarFloating = ({ logo, navItems, ctaButton }: NavbarFloatingProps) => {
return ( return (
<> <>
{menuOpen && (
<div
className="fixed inset-0 z-999 bg-foreground"
onClick={() => setMenuOpen(false)}
/>
)}
<nav className="fixed z-1000 top-5 left-1/2 -translate-x-1/2 w-content-width"> <nav className="fixed z-1000 top-5 left-1/2 -translate-x-1/2 w-content-width">
<div className="mx-auto w-full md:w-1/2 overflow-hidden rounded-theme-capped border border-white/10 bg-white/10 backdrop-blur-lg shadow-lg"> <div className={cls(
"mx-auto w-full md:w-1/2 overflow-hidden rounded-theme-capped border border-white/10 bg-white/10 shadow-lg",
menuOpen ? "backdrop-blur-lg" : "backdrop-blur-lg"
)}>
<div className="relative z-10 flex items-center justify-between gap-3 xl:gap-4 2xl:gap-5 p-3 xl:p-4 2xl:p-5"> <div className="relative z-10 flex items-center justify-between gap-3 xl:gap-4 2xl:gap-5 p-3 xl:p-4 2xl:p-5">
<a href="/" className="text-xl font-medium text-foreground">{logo}</a> <a href="/" className="text-xl font-medium text-foreground">{logo}</a>

View File

@@ -16,7 +16,7 @@
--background-accent: #6bbfb8; --background-accent: #6bbfb8;
/* @layout/border-radius/rounded */ /* @layout/border-radius/rounded */
--radius: 1rem; --radius: 1.5rem;
/* @layout/content-width/medium */ /* @layout/content-width/medium */
--width-content-width: clamp(40rem, 72.5vw, 100rem); --width-content-width: clamp(40rem, 72.5vw, 100rem);

View File

@@ -2,8 +2,8 @@ import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
import ContactCta from '@/components/sections/contact/ContactCta'; import ContactCta from '@/components/sections/contact/ContactCta';
import FeaturesRevealCards from '@/components/sections/features/FeaturesRevealCards'; import FeaturesRevealCards from '@/components/sections/features/FeaturesRevealCards';
import HeroOverlay from '@/components/sections/hero/HeroOverlay'; import HeroOverlay from '@/components/sections/hero/HeroOverlay';
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards'; import MetricsGradientCards from '@/components/sections/metrics/MetricsGradientCards';
import ProductMediaCards from '@/components/sections/product/ProductMediaCards'; import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard'; import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
import { Leaf, ShieldCheck, Sparkles } from "lucide-react"; import { Leaf, ShieldCheck, Sparkles } from "lucide-react";
@@ -50,6 +50,10 @@ export default function HomePage() {
}, },
]} ]}
imageSrc="http://img.b2bpic.net/free-photo/people-making-notes-about-flower_23-2147768470.jpg" imageSrc="http://img.b2bpic.net/free-photo/people-making-notes-about-flower_23-2147768470.jpg"
primaryButton={{
text: "Learn More",
href: "#",
}}
/> />
</div> </div>
@@ -84,77 +88,63 @@ export default function HomePage() {
</div> </div>
<div id="portfolio" data-section="portfolio"> <div id="portfolio" data-section="portfolio">
<ProductMediaCards <FeaturesDetailedSteps
tag="Our Portfolio" tag="Our Process"
title="Inspired Outdoor Creations" title="From Vision to Reality"
description="Explore a gallery of our completed projects, showcasing diverse styles and innovative designs. See the quality and artistry we bring to every landscape." description="Our systematic approach ensures every project is a seamless and rewarding experience for our clients. We handle every detail with precision and care."
products={[ steps={[
{ {
name: "Backyard Oasis", tag: "Step 1",
price: "Luxury Residential", title: "Consultation",
imageSrc: "http://img.b2bpic.net/free-photo/suburban-housing_53876-14307.jpg", subtitle: "Understanding Your Vision",
}, description: "We start with a thorough consultation to understand your needs, preferences, and the unique characteristics of your property. This allows us to create a tailored plan that aligns with your goals and budget.",
{ imageSrc: "https://images.unsplash.com/photo-1585345322958-15e8342b6c49?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
name: "Modern Frontage", },
price: "Curb Appeal Boost", {
imageSrc: "http://img.b2bpic.net/free-photo/plants-pot-with-watering-can_23-2148905227.jpg", tag: "Step 2",
}, title: "Design",
{ subtitle: "Crafting the Blueprint",
name: "Urban Rooftop Garden", description: "Our design team creates a detailed landscape plan, incorporating your ideas into a beautiful and functional design. We use 3D renderings to help you visualize the final outcome before we break ground.",
price: "Cityscape Green", imageSrc: "http://img.b2bpic.net/free-photo/greenhouse-with-flowers_1398-4315.jpg",
imageSrc: "http://img.b2bpic.net/free-photo/artists-garden-filled-with-variety-plants-beautiful-flowers_1258-296326.jpg", },
}, {
{ tag: "Step 3",
name: "Tranquil Water Feature", title: "Installation",
price: "Natural & Serene", subtitle: "Bringing the Design to Life",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-with-gardening-concept_23-2148127956.jpg", description: "Our skilled professionals execute the plan with meticulous attention to detail. We use high-quality materials and proven techniques to ensure a flawless installation that stands the test of time.",
}, imageSrc: "http://img.b2bpic.net/free-photo/gardener-woman-holding-flower-pot_1157-25532.jpg",
{ },
name: "Commercial Grounds", {
price: "Business Park", tag: "Step 4",
imageSrc: "http://img.b2bpic.net/free-photo/city-square_1359-1040.jpg", title: "Maintenance",
}, subtitle: "Ensuring Lasting Beauty",
{ description: "We offer comprehensive maintenance services to keep your new landscape looking its best. From seasonal care to ongoing upkeep, we ensure your outdoor space continues to thrive and bring you joy.",
name: "Custom Pergola & Patio", imageSrc: "http://img.b2bpic.net/free-photo/gardener-checking-his-plants_23-2147656308.jpg",
price: "Outdoor Living", },
imageSrc: "http://img.b2bpic.net/free-photo/empty-pavilion-garden_1339-3182.jpg", ]}
}, />
]} </div>
/>
</div>
<div id="metrics" data-section="metrics"> <div id="metrics" data-section="metrics">
<MetricsFeatureCards <MetricsGradientCards
tag="Our Impact" tag="Our Impact"
title="Proven Excellence in Landscaping" title="Proven Excellence in Landscaping"
description="Our commitment to quality and customer satisfaction is reflected in our achievements and long-lasting client relationships." description="Our commitment to quality and customer satisfaction is reflected in our achievements and long-lasting client relationships."
metrics={[ metrics={[
{ {
value: "15+", value: "15+",
title: "Years of Experience", label: "Years of Experience",
features: [ description: "Local industry leaders, skilled & certified team, reliable service delivery.",
"Local industry leaders",
"Skilled & certified team",
"Reliable service delivery",
],
}, },
{ {
value: "500+", value: "500+",
title: "Projects Completed", label: "Projects Completed",
features: [ description: "Residential & commercial, diverse design styles, on-time & on-budget.",
"Residential & commercial",
"Diverse design styles",
"On-time & on-budget",
],
}, },
{ {
value: "98%", value: "98%",
title: "Customer Satisfaction", label: "Customer Satisfaction",
features: [ description: "Glowing testimonials, repeat clientele, and dedicated support.",
"Glowing testimonials",
"Repeat clientele",
"Dedicated support",
],
}, },
]} ]}
/> />

View File

@@ -212,3 +212,18 @@
77% { opacity: 0.05; } 77% { opacity: 0.05; }
88% { opacity: 0; } 88% { opacity: 0; }
} }
@keyframes pulse-slow {
0%, 100% {
transform: scale(1);
opacity: 0.5;
}
50% {
transform: scale(1.1);
opacity: 0.7;
}
}
.animate-pulse-slow {
animation: pulse-slow 8s infinite ease-in-out;
}