Files
gitlab-instance-0a899031_no…/components/sections/methodology.tsx
2026-03-18 02:35:18 -05:00

72 lines
2.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use client";
import { MapPin, Wallet, Wrench, Users } from "lucide-react";
import { motion } from "framer-motion";
import { METHODOLOGY_SYSTEMS } from "~/lib/data";
const ICON_MAP = {
location: MapPin,
income: Wallet,
tools: Wrench,
community: Users,
} as const;
export function Methodology() {
return (
<section className="bg-gradient-to-b from-white to-cyan-50/20 py-20 md:py-28">
<div className="container mx-auto px-4 md:px-6">
<motion.h2
initial={{ opacity: 0, y: 12 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-80px" }}
className="text-center text-2xl font-bold text-neutral-900 md:text-3xl"
>
🌍
</motion.h2>
<motion.p
initial={{ opacity: 0 }}
whileInView={{ opacity: 1 }}
viewport={{ once: true }}
className="mx-auto mt-3 max-w-2xl text-center text-neutral-600"
>
</motion.p>
<div className="mt-12 grid gap-6 sm:grid-cols-2 lg:grid-cols-4">
{METHODOLOGY_SYSTEMS.map((sys, i) => {
const Icon = ICON_MAP[sys.id];
return (
<motion.div
key={sys.id}
whileHover={{ y: -4 }}
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-40px" }}
transition={{ delay: i * 0.05 }}
className="rounded-2xl border-2 border-neutral-200/80 bg-white p-6 shadow-sm transition-all hover:border-cyan-200 hover:shadow-xl"
>
<Icon className="h-9 w-9 text-neutral-600" />
<h3 className="mt-4 font-medium text-neutral-900">
{sys.title}
</h3>
<p className="mt-2 text-sm text-neutral-600">
{sys.description}
</p>
</motion.div>
);
})}
</div>
<motion.p
initial={{ opacity: 0 }}
whileInView={{ opacity: 1 }}
viewport={{ once: true }}
className="mx-auto mt-12 max-w-2xl text-center text-sm text-neutral-600"
>
</motion.p>
</div>
</section>
);
}