Compare commits

...

80 Commits

Author SHA1 Message Date
f70a7e71e0 Merge version_30_1778244795339 into main
Merge version_30_1778244795339 into main
2026-05-08 12:53:29 +00:00
048d7464e9 Update src/pages/HomePage.tsx 2026-05-08 12:53:25 +00:00
611b0330a7 Merge version_29_1778244756307 into main
Merge version_29_1778244756307 into main
2026-05-08 12:52:49 +00:00
d69ab2fa49 Update src/pages/HomePage.tsx 2026-05-08 12:52:46 +00:00
bf112d58c4 Merge version_28_1778244641251 into main
Merge version_28_1778244641251 into main
2026-05-08 12:50:55 +00:00
b5956b81cd Update src/pages/HomePage.tsx 2026-05-08 12:50:52 +00:00
040e8da47f Switch to version 27: modified src/pages/HomePage.tsx 2026-05-08 12:44:58 +00:00
5810dd2c6a Merge version_30_1778239852809 into main
Merge version_30_1778239852809 into main
2026-05-08 11:32:43 +00:00
622ad45f8a Update src/pages/HomePage.tsx 2026-05-08 11:32:37 +00:00
4cf859e062 Merge version_30_1778239852809 into main
Merge version_30_1778239852809 into main
2026-05-08 11:32:28 +00:00
kudinDmitriyUp
299deed620 feat: replace gallery with bento grid layout 2026-05-08 11:32:03 +00:00
4fb88c92d5 Merge version_29_1778239042097 into main
Merge version_29_1778239042097 into main
2026-05-08 11:19:27 +00:00
401fe07eeb Update src/pages/HomePage.tsx 2026-05-08 11:19:21 +00:00
e717835e90 Merge version_29_1778239042097 into main
Merge version_29_1778239042097 into main
2026-05-08 11:19:11 +00:00
kudinDmitriyUp
80934d15af feat: add gallery section to homepage 2026-05-08 11:18:47 +00:00
983fb61b78 Merge version_28_1778238895181 into main
Merge version_28_1778238895181 into main
2026-05-08 11:16:48 +00:00
9a646017f5 Update src/pages/HomePage.tsx 2026-05-08 11:16:45 +00:00
2f73bb2286 Merge version_28_1778238895181 into main
Merge version_28_1778238895181 into main
2026-05-08 11:16:37 +00:00
kudinDmitriyUp
ccd6fd2002 feat: add gallery section to homepage 2026-05-08 11:16:13 +00:00
092c4f7a70 Merge version_27_1778238797704 into main
Merge version_27_1778238797704 into main
2026-05-08 11:13:21 +00:00
f04ba57938 Update theme colors 2026-05-08 11:13:18 +00:00
129470bbdd Switch to version 26: modified src/components/ui/NavbarFloating.tsx 2026-05-08 10:52:37 +00:00
f1c3fa553a Switch to version 26: modified src/components/ui/NavbarCentered.tsx 2026-05-08 10:52:36 +00:00
a9e43fc3f0 Switch to version 21: modified src/pages/HomePage.tsx 2026-05-08 10:52:20 +00:00
213e6754c7 Switch to version 21: modified src/components/ui/NavbarFloating.tsx 2026-05-08 10:52:19 +00:00
b48fbc195d Switch to version 21: modified src/components/ui/NavbarCentered.tsx 2026-05-08 10:52:19 +00:00
e26f45c249 Switch to version 15: modified src/styles/animations.css 2026-05-08 10:51:57 +00:00
96cd150067 Switch to version 15: modified src/pages/HomePage.tsx 2026-05-08 10:51:56 +00:00
7c5ba0dec7 Switch to version 15: modified src/index.css 2026-05-08 10:51:56 +00:00
d3f7feb5f2 Switch to version 15: modified src/components/ui/NavbarCentered.tsx 2026-05-08 10:51:55 +00:00
606aeb39f5 Switch to version 15: modified src/components/sections/hero/HeroOverlay.tsx 2026-05-08 10:51:55 +00:00
c6cb9f7479 Switch to version 15: modified src/components/sections/hero/HeroBillboardTiltedCarousel.tsx 2026-05-08 10:51:54 +00:00
5d48f9981d Switch to version 15: modified src/components/sections/contact/ContactCta.tsx 2026-05-08 10:51:54 +00:00
3bc80ddd37 Switch to version 15: modified src/components/sections/about/AboutFeaturesSplit.tsx 2026-05-08 10:51:53 +00:00
9df5080bdc Switch to version 15: added src/components/custom/TestimonialCard.tsx 2026-05-08 10:51:53 +00:00
303ff02301 Switch to version 15: added src/components/custom/TestimonialCard.css 2026-05-08 10:51:52 +00:00
e9c3a748a7 Switch to version 15: added src/components/custom/AnimatedBackground.tsx 2026-05-08 10:51:52 +00:00
9927e01163 Switch to version 2: remove src/components/custom/TestimonialCard.tsx 2026-05-08 10:51:21 +00:00
b49c6efa15 Switch to version 2: remove src/components/custom/TestimonialCard.css 2026-05-08 10:51:21 +00:00
195626da92 Switch to version 2: remove src/components/custom/AnimatedBackground.tsx 2026-05-08 10:51:20 +00:00
4120efe02a Switch to version 2: modified src/styles/animations.css 2026-05-08 10:51:20 +00:00
e6385c3f27 Switch to version 2: modified src/pages/HomePage.tsx 2026-05-08 10:51:19 +00:00
d85b057cc8 Switch to version 2: modified src/index.css 2026-05-08 10:51:19 +00:00
1717652cfb Switch to version 2: modified src/components/ui/NavbarFloating.tsx 2026-05-08 10:51:18 +00:00
3618d167ee Switch to version 2: modified src/components/ui/NavbarCentered.tsx 2026-05-08 10:51:18 +00:00
87f94db9ac Switch to version 2: modified src/components/sections/hero/HeroOverlay.tsx 2026-05-08 10:51:17 +00:00
97e2d1f8e8 Switch to version 2: modified src/components/sections/hero/HeroBillboardTiltedCarousel.tsx 2026-05-08 10:51:17 +00:00
80ebfeb8fb Switch to version 2: modified src/components/sections/contact/ContactCta.tsx 2026-05-08 10:51:16 +00:00
8cd03db182 Switch to version 2: modified src/components/sections/about/AboutFeaturesSplit.tsx 2026-05-08 10:51:16 +00:00
aa493ae923 Merge version_26_1778236318310 into main
Merge version_26_1778236318310 into main
2026-05-08 10:36:58 +00:00
kudinDmitriyUp
ae40e9e616 feat: add smooth opening animation to navbar using CSS transitions 2026-05-08 10:36:35 +00:00
da4cfcc1ba Merge version_25_1778236015160 into main
Merge version_25_1778236015160 into main
2026-05-08 10:28:26 +00:00
kudinDmitriyUp
5141485438 feat: reduce navbar open blur strength 2026-05-08 10:27:54 +00:00
2fc38ce197 Merge version_23_1778235657685 into main
Merge version_23_1778235657685 into main
2026-05-08 10:22:09 +00:00
kudinDmitriyUp
a41574603f feat: decrease navbar blur strength 2026-05-08 10:21:36 +00:00
e1cb829536 Merge version_22_1778235448055 into main
Merge version_22_1778235448055 into main
2026-05-08 10:19:04 +00:00
kudinDmitriyUp
4ec9a6c452 feat: add background blur to open navbar 2026-05-08 10:18:32 +00:00
acb8bd1321 Merge version_21_1778234835630 into main
Merge version_21_1778234835630 into main
2026-05-08 10:09:52 +00:00
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
kudinDmitriyUp
ecb83a4563 feat: Align hero content with testimonials 2026-05-08 07:55:44 +00:00
788c6cf1dd Merge version_10_1778226668506 into main
Merge version_10_1778226668506 into main
2026-05-08 07:52:46 +00:00
10 changed files with 193 additions and 151 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

@@ -35,7 +35,7 @@ const TestimonialCard = () => {
}, []);
return (
<div className="absolute bottom-5 right-5 z-20">
<div className="z-20">
<div className={`testimonial-card ${visible ? 'fade-in' : 'fade-out'}`}>
<div className="bg-white/80 backdrop-blur-sm rounded-lg p-4 max-w-sm shadow-lg">
<p className="text-gray-800 italic">"{testimonials[index].quote}"</p>

View File

@@ -1,3 +1,4 @@
import AnimatedBackground from "@/components/custom/AnimatedBackground";
import type { LucideIcon } from "lucide-react";
import Button from "@/components/ui/Button";
import TextAnimation from "@/components/ui/TextAnimation";
@@ -24,7 +25,8 @@ const AboutFeaturesSplit = ({
videoSrc,
}: AboutFeaturesSplitProps) => {
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 items-center gap-2">
<span className="px-3 py-1 mb-1 text-sm card rounded">{tag}</span>
@@ -54,7 +56,7 @@ const AboutFeaturesSplit = ({
</div>
<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) => {
const ItemIcon = resolveIcon(item.icon);
return (
@@ -74,7 +76,7 @@ const AboutFeaturesSplit = ({
})}
</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">
<ImageOrVideo imageSrc={imageSrc} videoSrc={videoSrc} className="absolute inset-0 object-cover rounded" />
</div>

View File

@@ -16,7 +16,11 @@ const ContactCta = ({
return (
<section aria-label="Contact section" className="py-20">
<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">
<span className="card rounded px-3 py-1 text-sm">{tag}</span>

View File

@@ -43,38 +43,52 @@ const HeroOverlay = ({
aria-hidden="true"
/>
<div className="relative z-10 w-content-width mx-auto pb-40 md:pb-50">
<div className="flex flex-col gap-3 w-full md:w-6/10 lg:w-1/2 xl:w-45/100 2xl:w-4/10">
<span className="w-fit px-3 py-1 mb-1 text-sm card rounded">{tag}</span>
<div className="relative z-10 w-content-width mx-auto pb-20 md:pb-20">
<div className="flex flex-col md:flex-row justify-between items-end gap-3 w-full">
<div className="flex flex-col gap-3 w-full md:w-6/10 lg:w-1/2 xl:w-45/100 2xl:w-4/10">
<span className="w-fit px-3 py-1 mb-1 text-sm card rounded">{tag}</span>
<TextAnimation
text={title}
variant="fade"
gradientText={true}
tag="h1"
className="text-7xl 2xl:text-8xl font-medium text-primary-cta-text text-balance"
/>
<TextAnimation
text={title}
variant="fade"
gradientText={true}
tag="h1"
className="text-7xl 2xl:text-8xl font-medium text-primary-cta-text text-balance"
/>
<TextAnimation
text={description}
variant="fade"
gradientText={false}
tag="p"
className="text-lg md:text-xl text-primary-cta-text leading-tight text-balance"
/>
<TextAnimation
text={description}
variant="fade"
gradientText={false}
tag="p"
className="text-lg md:text-xl text-primary-cta-text leading-tight text-balance"
/>
<div className="flex flex-wrap gap-3 mt-3">
<Button text={primaryButton.text} href={primaryButton.href} variant="primary"/>
<Button text={secondaryButton.text} href={secondaryButton.href} variant="secondary"animationDelay={0.1} />
</div>
{avatars && avatars.length > 0 && (
<div className="mt-4">
<AvatarGroup avatars={avatars} size="lg" label={avatarsLabel} labelClassName="text-primary-cta-text" />
<div className="flex flex-wrap gap-3 mt-3">
<Button text={primaryButton.text} href={primaryButton.href} variant="primary" />
<Button
text={secondaryButton.text}
href={secondaryButton.href}
variant="secondary"
animationDelay={0.1}
/>
</div>
)}
{avatars && avatars.length > 0 && (
<div className="mt-4">
<AvatarGroup
avatars={avatars}
size="lg"
label={avatarsLabel}
labelClassName="text-primary-cta-text"
/>
</div>
)}
</div>
<div className="w-full md:w-auto">
<TestimonialCard />
</div>
</div>
<TestimonialCard />
</div>
</section>
);

View File

@@ -1,5 +1,6 @@
import { useState, useEffect, useRef } from "react";
import { Plus, ArrowRight } from "lucide-react";
import { Plus, ArrowRight } from "lucide-react";
import { cls } from "@/lib/utils";
import Button from "@/components/ui/Button";
@@ -52,7 +53,7 @@ const NavbarCentered = ({ logo, navItems, ctaButton }: NavbarCenteredProps) => {
<nav
className={cls(
"fixed z-1000 top-3 left-3 right-3 transition-all duration-500 ease-in-out",
isScrolled ? "h-15 bg-background/80 backdrop-blur-sm rounded-lg" : "h-20 bg-background/0 backdrop-blur-0"
isScrolled ? "h-15 bg-background/80 backdrop-blur-[2px] rounded-lg" : "h-20 bg-background/0 backdrop-blur-0"
)}
>
<div className="relative mx-auto flex items-center justify-between h-full w-content-width">
@@ -89,46 +90,46 @@ const NavbarCentered = ({ logo, navItems, ctaButton }: NavbarCenteredProps) => {
</div>
</nav>
{menuOpen && (
<div
ref={menuRef}
className="md:hidden fixed z-1000 top-3 left-3 right-3 p-6 rounded-lg card"
>
<div className="flex items-center justify-between mb-6">
<p className="text-xl text-foreground">Menu</p>
<button
className="flex items-center justify-center shrink-0 size-9 rounded cursor-pointer primary-button"
onClick={() => setMenuOpen(false)}
aria-label="Close menu"
>
<Plus className="w-1/2 h-1/2 text-primary-cta-text rotate-45" strokeWidth={1.5} />
</button>
</div>
<div className="flex flex-col gap-4">
{navItems.map((item, index) => (
<div key={item.name}>
<a
href={item.href}
onClick={(e) => handleNavClick(e, item.href, () => setMenuOpen(false))}
className="flex items-center justify-between py-2 text-base font-medium text-foreground"
>
{item.name}
<ArrowRight className="size-4 text-foreground" strokeWidth={1.5} />
</a>
{index < navItems.length - 1 && (
<div className="h-px bg-linear-to-r from-transparent via-foreground/20 to-transparent" />
)}
</div>
))}
</div>
<div className="mt-6">
<Button text={ctaButton.text} href={ctaButton.href} variant="primary" animate={false} className="w-full" />
</div>
</div>
<div
ref={menuRef}
className={cls(
"md:hidden fixed z-1000 top-3 left-3 right-3 p-6 rounded-lg bg-background/80 backdrop-blur-[2px] transition-all duration-300 ease-in-out",
menuOpen ? "opacity-100 translate-y-0" : "opacity-0 -translate-y-4 pointer-events-none"
)}
>
<div className="flex items-center justify-between mb-6">
<p className="text-xl text-foreground">Menu</p>
<button
className="flex items-center justify-center shrink-0 size-9 rounded cursor-pointer primary-button"
onClick={() => setMenuOpen(false)}
aria-label="Close menu"
>
<Plus className="w-1/2 h-1/2 text-primary-cta-text rotate-45" strokeWidth={1.5} />
</button>
</div>
<div className="flex flex-col gap-4">
{navItems.map((item, index) => (
<div key={item.name}>
<a
href={item.href}
onClick={(e) => handleNavClick(e, item.href, () => setMenuOpen(false))}
className="flex items-center justify-between py-2 text-base font-medium text-foreground"
>
{item.name}
<ArrowRight className="size-4 text-foreground" strokeWidth={1.5} />
</a>
{index < navItems.length - 1 && (
<div className="h-px bg-linear-to-r from-transparent via-foreground/20 to-transparent" />
)}
</div>
))}
</div>
<div className="mt-6">
<Button text={ctaButton.text} href={ctaButton.href} variant="primary" animate={false} className="w-full" />
</div>
</div>
</>
);
};

View File

@@ -31,17 +31,18 @@ const NavbarFloating = ({ logo, navItems, ctaButton }: NavbarFloatingProps) => {
return (
<>
{menuOpen && (
<div
className="fixed inset-0 z-999 bg-foreground"
onClick={() => setMenuOpen(false)}
/>
)}
{menuOpen && (
<div
className="fixed inset-0 z-500 bg-black/20 backdrop-blur-md"
onClick={() => setMenuOpen(false)}
/>
)}
<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 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">
<a href="/" className="text-xl font-medium text-foreground">{logo}</a>

View File

@@ -5,18 +5,18 @@
:root {
/* @colorThemes/lightTheme/grayNavyBlue */
--background: #fafffb;
--card: #ffffff;
--foreground: #001a0a;
--primary-cta: #0a705f;
--primary-cta-text: #fafffb;
--secondary-cta: #ffffff;
--secondary-cta-text: #001a0a;
--accent: #a8d9be;
--background-accent: #6bbfb8;
--background: #0a0a0a;
--card: #1a1a1a;
--foreground: #ffffff;
--primary-cta: #1f7cff;
--primary-cta-text: #ffffff;
--secondary-cta: #010101;
--secondary-cta-text: #ffffff;
--accent: #1f7cff;
--background-accent: #f96b2f;
/* @layout/border-radius/rounded */
--radius: 1rem;
--radius: 1.5rem;
/* @layout/content-width/medium */
--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 FeaturesRevealCards from '@/components/sections/features/FeaturesRevealCards';
import HeroOverlay from '@/components/sections/hero/HeroOverlay';
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
import ProductMediaCards from '@/components/sections/product/ProductMediaCards';
import MetricsGradientCards from '@/components/sections/metrics/MetricsGradientCards';
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import TestimonialTrustCard from '@/components/sections/testimonial/TestimonialTrustCard';
import { Leaf, ShieldCheck, Sparkles } from "lucide-react";
@@ -13,7 +13,7 @@ export default function HomePage() {
<div id="hero" data-section="hero">
<HeroOverlay
tag="Your Outdoor Oasis Awaits"
title="Transforming Landscapes, Enhancing Lives"
title="Redefining Landscapes, Enhancing Lives"
description="From lush gardens to perfectly manicured lawns, we craft stunning outdoor spaces tailored to your vision. Experience nature's beauty with expert care."
primaryButton={{
text: "Our Services",
@@ -49,7 +49,11 @@ export default function HomePage() {
description: "We use only premium materials and eco-friendly practices to ensure lasting beauty and environmental responsibility.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/people-making-notes-about-flower_23-2147768470.jpg"
imageSrc="https://pixabay.com/get/g4fd875caee0818c883cfd796b43d19cc5aa317fcbcc705d5213185bda563c6d98622aa0f965cd4df11783705e252c77f7bcf1f949eb8b116321445884163e6f7_1280.jpg?id=6577149"
primaryButton={{
text: "Learn More",
href: "#",
}}
/>
</div>
@@ -84,77 +88,63 @@ export default function HomePage() {
</div>
<div id="portfolio" data-section="portfolio">
<ProductMediaCards
tag="Our Portfolio"
title="Inspired Outdoor Creations"
description="Explore a gallery of our completed projects, showcasing diverse styles and innovative designs. See the quality and artistry we bring to every landscape."
products={[
{
name: "Backyard Oasis",
price: "Luxury Residential",
imageSrc: "http://img.b2bpic.net/free-photo/suburban-housing_53876-14307.jpg",
},
{
name: "Modern Frontage",
price: "Curb Appeal Boost",
imageSrc: "http://img.b2bpic.net/free-photo/plants-pot-with-watering-can_23-2148905227.jpg",
},
{
name: "Urban Rooftop Garden",
price: "Cityscape Green",
imageSrc: "http://img.b2bpic.net/free-photo/artists-garden-filled-with-variety-plants-beautiful-flowers_1258-296326.jpg",
},
{
name: "Tranquil Water Feature",
price: "Natural & Serene",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-with-gardening-concept_23-2148127956.jpg",
},
{
name: "Commercial Grounds",
price: "Business Park",
imageSrc: "http://img.b2bpic.net/free-photo/city-square_1359-1040.jpg",
},
{
name: "Custom Pergola & Patio",
price: "Outdoor Living",
imageSrc: "http://img.b2bpic.net/free-photo/empty-pavilion-garden_1339-3182.jpg",
},
]}
/>
</div>
<FeaturesDetailedSteps
tag="Our Process"
title="From Vision to Reality"
description="Our systematic approach ensures every project is a seamless and rewarding experience for our clients. We handle every detail with precision and care."
steps={[
{
tag: "Step 1",
title: "Consultation",
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://pixabay.com/get/g6eb973f7cd05906bc2621830e50b2d57806471945669fcd710c139c12f74b2c6ab1ec1881f11e73276203d0658440cb7c2c2d34258d5efd4665f3b9e79118db3_1280.jpg?id=9464875",
},
{
tag: "Step 2",
title: "Design",
subtitle: "Crafting the Blueprint",
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.",
imageSrc: "http://img.b2bpic.net/free-photo/greenhouse-with-flowers_1398-4315.jpg",
},
{
tag: "Step 3",
title: "Installation",
subtitle: "Bringing the Design to Life",
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",
},
{
tag: "Step 4",
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.",
imageSrc: "http://img.b2bpic.net/free-photo/gardener-checking-his-plants_23-2147656308.jpg",
},
]}
/>
</div>
<div id="metrics" data-section="metrics">
<MetricsFeatureCards
<MetricsGradientCards
tag="Our Impact"
title="Proven Excellence in Landscaping"
description="Our commitment to quality and customer satisfaction is reflected in our achievements and long-lasting client relationships."
metrics={[
{
value: "15+",
title: "Years of Experience",
features: [
"Local industry leaders",
"Skilled & certified team",
"Reliable service delivery",
],
label: "Years of Experience",
description: "Local industry leaders, skilled & certified team, reliable service delivery.",
},
{
value: "500+",
title: "Projects Completed",
features: [
"Residential & commercial",
"Diverse design styles",
"On-time & on-budget",
],
label: "Projects Completed",
description: "Residential & commercial, diverse design styles, on-time & on-budget.",
},
{
value: "98%",
title: "Customer Satisfaction",
features: [
"Glowing testimonials",
"Repeat clientele",
"Dedicated support",
],
label: "Customer Satisfaction",
description: "Glowing testimonials, repeat clientele, and dedicated support.",
},
]}
/>

View File

@@ -212,3 +212,18 @@
77% { opacity: 0.05; }
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;
}