-
+
+
-
+
{item.title}
-
+
{item.sub}
@@ -239,5 +342,3 @@ export function AICommerceIntro() {
);
}
-
-
diff --git a/src/components/home/WhyAICommerceWins.tsx b/src/components/home/WhyAICommerceWins.tsx
index 33540d7..42c137f 100644
--- a/src/components/home/WhyAICommerceWins.tsx
+++ b/src/components/home/WhyAICommerceWins.tsx
@@ -1,32 +1,161 @@
"use client";
import Link from "next/link";
-import { motion } from "framer-motion";
+import { motion, useReducedMotion } from "framer-motion";
import { MaterialIcon } from "@/components/ui/MaterialIcon";
+import BorderGlow from "@/components/ui/BorderGlow";
import { fadeUp, fadeIn, staggerContainer, viewport } from "@/lib/animations";
+// 1. Trust Card Graphic (Animated Shield & Checkmark)
+function TrustCardGraphic({ reduce = false }: { reduce?: boolean }) {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+// 2. AI Catalog Graphic (Animated Sparkle Cluster)
+function AICatalogGraphic({ reduce = false }: { reduce?: boolean }) {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+// 3. Offline Commerce Graphic (Animated Wifi Signal Waves)
+function OfflineCommerceGraphic({ reduce = false }: { reduce?: boolean }) {
+ return (
+
+
+
+
+
+
+
+
+
+ );
+}
+
const CARDS = [
{
title: "Neighbourhood Trust",
desc: "Every order is fulfilled by a real local shop your street already knows — not an anonymous warehouse.",
icon: "handshake",
color: "bg-primary/5 text-primary border-primary/10",
+ glowColor: "268 85 65",
+ dotColor: "bg-[#7C3AED]",
+ colors: ["#c084fc", "#f472b6", "#38bdf8"],
+ renderSVG: (reduce: boolean) =>
,
},
{
title: "AI-Powered Catalog",
desc: "ProductLLM turns a shelf into a live, shoppable catalog in minutes — so any store can go online without the busywork.",
icon: "auto_awesome",
- color: "bg-secondary/5 text-secondary border-secondary/10",
+ color: "bg-emerald-500/10 text-emerald-600 border-emerald-500/20",
+ glowColor: "160 84 45",
+ dotColor: "bg-emerald-400",
+ colors: ["#34d399", "#818cf8", "#c084fc"],
+ renderSVG: (reduce: boolean) =>
,
},
{
title: "Offline-First Commerce",
desc: "Billing and inventory keep working even when the network drops. Built for how neighbourhood stores really run.",
icon: "wifi_off",
color: "bg-[#de96f9]/10 text-primary border-[#de96f9]/20",
+ glowColor: "280 85 65",
+ dotColor: "bg-[#EC4899]",
+ colors: ["#f472b6", "#c084fc", "#38bdf8"],
+ renderSVG: (reduce: boolean) =>
,
},
];
export function WhyAICommerceWins() {
+ const reduce = useReducedMotion();
+
return (
@@ -60,19 +189,50 @@ export function WhyAICommerceWins() {
-
-
-
-
- {card.title}
-
-
- {card.desc}
-
+
+
+ {/* Corner Hover Glowing Dot */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {card.renderSVG(!!reduce)}
+
+
+
+
+ {card.title}
+
+
+ {card.desc}
+
+
+
))}
diff --git a/src/components/ui/BorderGlow.tsx b/src/components/ui/BorderGlow.tsx
index 05929a0..949af00 100644
--- a/src/components/ui/BorderGlow.tsx
+++ b/src/components/ui/BorderGlow.tsx
@@ -176,12 +176,12 @@ const BorderGlow: React.FC
= ({
onPointerMove={handlePointerMove}
onPointerEnter={() => setIsHovered(true)}
onPointerLeave={() => setIsHovered(false)}
- className={`relative grid isolate border border-white/15 ${className}`}
+ className={`relative grid isolate border border-black/10 dark:border-white/15 ${className}`}
style={{
background: backgroundColor,
borderRadius: `${borderRadius}px`,
transform: 'translate3d(0, 0, 0.01px)',
- boxShadow: 'rgba(0,0,0,0.1) 0 1px 2px, rgba(0,0,0,0.1) 0 2px 4px, rgba(0,0,0,0.1) 0 4px 8px, rgba(0,0,0,0.1) 0 8px 16px, rgba(0,0,0,0.1) 0 16px 32px, rgba(0,0,0,0.1) 0 32px 64px',
+ boxShadow: 'rgba(0,0,0,0.06) 0 1px 3px, rgba(0,0,0,0.08) 0 4px 12px',
}}
>
{/* mesh gradient border */}