diff --git a/workloads/ecommerce/app/page.tsx b/workloads/ecommerce/app/page.tsx
index 0e91d18..753ae5a 100644
--- a/workloads/ecommerce/app/page.tsx
+++ b/workloads/ecommerce/app/page.tsx
@@ -1,7 +1,7 @@
import Link from "next/link";
import { ArrowRight } from "lucide-react";
import { CategoryTiles } from "@/components/home/category-tiles";
-import { HeroBento } from "@/components/home/hero-bento";
+import { HeroCarousel } from "@/components/home/hero-carousel";
import { TrustBar } from "@/components/home/trust-bar";
import { ProductCarousel } from "@/components/product/product-carousel";
import { Button } from "@/components/ui/button";
@@ -17,5 +17,5 @@ export const dynamic = "force-dynamic";
export default async function HomePage() {
const [products, categories] = await Promise.all([getProducts(), getCategories()]);
const treasures = products.filter((product) => product.isNew || product.featured).slice(0, 8);
- return <>
NovedadesTesoros recién llegados
Desliza y encuentra nuevos favoritos.
Club ARIPromociones, lanzamientos y mucha diversión.
Únete a nuestra comunidad y recibe primero las novedades del catálogo.
>;
+ return <>
NovedadesTesoros recién llegados
Desliza y encuentra nuevos favoritos.
Club ARIPromociones, lanzamientos y mucha diversión.
Únete a nuestra comunidad y recibe primero las novedades del catálogo.
>;
}
diff --git a/workloads/ecommerce/components/home/hero-bento.tsx b/workloads/ecommerce/components/home/hero-bento.tsx
deleted file mode 100644
index 77c5b6c..0000000
--- a/workloads/ecommerce/components/home/hero-bento.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-"use client";
-
-import Image from "next/image";
-import Link from "next/link";
-import { ArrowRight, BadgePercent, Sparkles } from "lucide-react";
-import { motion, useReducedMotion } from "motion/react";
-import { Button } from "@/components/ui/button";
-
-export function HeroBento() {
- const reduceMotion = useReducedMotion();
- const initial = reduceMotion ? false : { opacity: 0, y: 20 };
-
- return (
-
-
-
-
-
Celebración ARI
-
Hasta50% OFFen tesoros seleccionados
-
Personajes, mochilas y regalos que convierten cualquier día en una celebración.
-
-
-
-
-
-
-
-
-
- Héroes favoritos
Acción y aventura
-
-
-
-
- Novedad
Tesoros para regalar
-
-
-
-
-
- );
-}
diff --git a/workloads/ecommerce/components/home/hero-carousel.tsx b/workloads/ecommerce/components/home/hero-carousel.tsx
new file mode 100644
index 0000000..7380a39
--- /dev/null
+++ b/workloads/ecommerce/components/home/hero-carousel.tsx
@@ -0,0 +1,113 @@
+"use client";
+
+import Image from "next/image";
+import Link from "next/link";
+import { ArrowRight, BadgePercent, Sparkles } from "lucide-react";
+import { AnimatePresence, motion, useReducedMotion } from "motion/react";
+import { useEffect, useState } from "react";
+import { Button } from "@/components/ui/button";
+
+// ADR 0008 sub-fase 4: hero azul con dots de paginacion (carrusel), en vez
+// del bento estatico de 3 tarjetas en fucsia/rojo/violeta del esquema
+// arcoiris original. Un slide a la vez, fondo azul de marca en los tres,
+// para leerse como una sola pieza de marca en vez de 3 bloques de colores
+// distintos.
+const slides = [
+ {
+ id: "celebracion",
+ badge: "Celebración ARI",
+ icon: Sparkles,
+ title: "Hasta 50% OFF",
+ subtitle: "en tesoros seleccionados",
+ description: "Personajes, mochilas y regalos que convierten cualquier día en una celebración.",
+ href: "/catalog",
+ image: "/images/promo/hero-vibrant.webp",
+ imageAlt: "Promoción principal de Ari Shopping",
+ },
+ {
+ id: "marvel",
+ badge: "Héroes favoritos",
+ icon: BadgePercent,
+ title: "Acción y aventura",
+ subtitle: "colección Marvel",
+ description: "Figuras, mochilas y sets listos para la próxima misión.",
+ href: "/catalog?collection=Marvel",
+ image: "/images/promo/promo-marvel.webp",
+ imageAlt: "Colección Marvel",
+ },
+ {
+ id: "regalos",
+ badge: "Novedad",
+ icon: Sparkles,
+ title: "Tesoros para regalar",
+ subtitle: "",
+ description: "Personajes y peluches para sorprender en cualquier ocasión.",
+ href: "/catalog",
+ image: "/images/promo/promo-characters.webp",
+ imageAlt: "Personajes y peluches",
+ },
+];
+
+const AUTOPLAY_MS = 6000;
+
+export function HeroCarousel() {
+ const reduceMotion = useReducedMotion();
+ const [index, setIndex] = useState(0);
+
+ useEffect(() => {
+ if (reduceMotion) return;
+ const timer = setInterval(() => setIndex((current) => (current + 1) % slides.length), AUTOPLAY_MS);
+ return () => clearInterval(timer);
+ }, [reduceMotion]);
+
+ const slide = slides[index];
+ const Icon = slide.icon;
+
+ return (
+
+
+
+
+
+
+
+ {slide.badge}
+
+
{slide.title}
+ {slide.subtitle &&
{slide.subtitle}
}
+
{slide.description}
+
+
+
+
+
+
+
+
+
+ {slides.map((item, itemIndex) => (
+
+
+
+ );
+}