Files
nearle_web_nextjs/src/components/why-nearle/WhyNearleHero.tsx
2026-07-23 10:26:49 +05:30

120 lines
4.5 KiB
TypeScript

"use client";
import Link from "next/link";
import Image from "next/image";
import { motion, useReducedMotion } from "framer-motion";
import { HeroLogo } from "@/components/heroes/HeroLogo";
import { MaterialIcon } from "@/components/ui/MaterialIcon";
const EASE = [0.22, 1, 0.36, 1] as [number, number, number, number];
const badgeVariant = {
hidden: { opacity: 0, y: 20 },
visible: { opacity: 1, y: 0, transition: { duration: 0.5, delay: 0.9, ease: EASE } },
};
const headingVariant = {
hidden: { opacity: 0, y: 24 },
visible: { opacity: 1, y: 0, transition: { duration: 0.6, delay: 1.0, ease: EASE } },
};
const descVariant = {
hidden: { opacity: 0, y: 20 },
visible: { opacity: 1, y: 0, transition: { duration: 0.55, delay: 1.1, ease: EASE } },
};
const ctaVariant = {
hidden: { opacity: 0, y: 16 },
visible: { opacity: 1, y: 0, transition: { duration: 0.5, delay: 1.2, ease: EASE } },
};
export function WhyNearleHero() {
const shouldReduce = useReducedMotion();
return (
<section className="w-full flex flex-col select-none bg-white">
<div className="relative overflow-hidden border-b border-white/10 bg-gradient-to-br from-[#1A0322] via-[#2B0040] to-[#0A000D]">
{/* Ambient background image */}
<motion.div
aria-hidden="true"
className="pointer-events-none absolute inset-0 z-0"
initial={shouldReduce ? undefined : { opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 1.4, ease: "easeOut" }}
>
<Image
src="/images/why-nearle/why-nearle.png"
alt=""
fill
sizes="100vw"
className="absolute inset-0 h-full w-full object-cover object-center"
priority
fetchPriority="high"
/>
{/* Dark gradient overlay to make text pop while keeping the image vibrant */}
<div className="absolute inset-0 bg-gradient-to-b from-[#1A0322]/80 via-black/45 to-[#0A000D]/90" />
</motion.div>
<div className="page-container relative z-10 flex min-h-[520px] items-center justify-center px-6 pt-20 pb-14 sm:px-8 sm:pt-24 md:min-h-[76vh] md:py-16">
<div className="relative z-20 flex w-full max-w-[880px] flex-col items-center text-center px-2 md:px-8">
<HeroLogo />
<motion.span
variants={badgeVariant}
initial="hidden"
animate="visible"
className="inline-flex items-center gap-1.5 px-4 py-1.5 rounded-full text-xs font-bold tracking-widest bg-white text-[#6330D6] shadow-md uppercase mb-6 w-fit"
>
What is AI Commerce?
</motion.span>
<motion.h1
variants={headingVariant}
initial="hidden"
animate="visible"
className="font-display text-4xl sm:text-5xl lg:text-[52px] xl:text-[60px] font-extrabold text-white leading-[1.08] tracking-tight [text-shadow:0_4px_32px_rgba(0,0,0,0.5)]"
>
AI Commerce Starts
<br />
Where <span className="text-[#C9A2FF]">Quick Commerce</span>
<br />
Stops.
</motion.h1>
<motion.p
variants={descVariant}
initial="hidden"
animate="visible"
className="max-w-[660px] text-lg md:text-xl text-white/90 font-medium mt-6 leading-[1.6]"
>
Neighborhood stores already have the trust, the customers, and the
location. Nearle adds the AI, the digital storefront, and the
ordering so local commerce finally scales without losing what
makes it local.
</motion.p>
<motion.div
variants={ctaVariant}
initial="hidden"
animate="visible"
className="mt-9"
>
<Link
href="/platform"
className="group inline-flex items-center gap-2 rounded-full bg-white px-8 py-4 text-base font-black text-[#16001D] shadow-[0_16px_30px_rgba(0,0,0,0.35)] transition-transform duration-200 hover:scale-[1.03] active:scale-95"
>
Learn About Our Platform
<MaterialIcon
icon="arrow_forward"
size={20}
className="transition-transform duration-200 group-hover:translate-x-0.5"
/>
</Link>
</motion.div>
</div>
</div>
</div>
</section>
);
}