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>
);
}