mirror of
https://github.com/beilunyang/moemail.git
synced 2026-09-06 07:46:41 +08:00
feat: add new content pages
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
"use client"
|
||||
|
||||
import {
|
||||
Accordion,
|
||||
AccordionContent,
|
||||
AccordionItem,
|
||||
AccordionTrigger,
|
||||
} from "@/components/ui/accordion"
|
||||
import { useTranslations } from "next-intl"
|
||||
|
||||
export function FaqSection() {
|
||||
const t = useTranslations("home.faq")
|
||||
|
||||
// We'll hardcode the keys for now to map them
|
||||
const questions = ["q1", "q2", "q3", "q4", "q5"]
|
||||
|
||||
return (
|
||||
<section className="py-24 bg-muted/30">
|
||||
<div className="container mx-auto px-4 max-w-3xl">
|
||||
<h2 className="text-4xl font-bold text-center mb-12">{t("title")}</h2>
|
||||
<div className="bg-card w-full rounded-2xl border shadow-sm p-6 sm:p-10">
|
||||
<Accordion type="single" collapsible className="w-full">
|
||||
{questions.map((key) => (
|
||||
<AccordionItem key={key} value={key} className="border-b-border/50 last:border-0 px-2">
|
||||
<AccordionTrigger className="text-left py-6 text-lg hover:text-primary transition-colors hover:no-underline">
|
||||
{t(`${key}.question`)}
|
||||
</AccordionTrigger>
|
||||
<AccordionContent className="text-muted-foreground text-base pb-6 leading-relaxed">
|
||||
{t(`${key}.answer`)}
|
||||
</AccordionContent>
|
||||
</AccordionItem>
|
||||
))}
|
||||
</Accordion>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
interface FeatureCardProps {
|
||||
interface FeatureCardProps {
|
||||
icon: React.ReactNode
|
||||
title: string
|
||||
description: string
|
||||
description: string
|
||||
}
|
||||
|
||||
export function FeatureCard({ icon, title, description }: FeatureCardProps) {
|
||||
return (
|
||||
<div className="p-4 rounded border-2 border-primary/20 hover:border-primary/40 transition-colors bg-white/5 backdrop-blur">
|
||||
<div className="p-4 rounded-xl border border-primary/20 bg-background/50 backdrop-blur-sm hover:border-primary/50 transition-colors group">
|
||||
<div className="flex items-center gap-3">
|
||||
<div className="rounded-lg bg-primary/10 text-primary p-2">
|
||||
{icon}
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
"use client"
|
||||
|
||||
import { useTranslations } from "next-intl"
|
||||
import { MousePointerClick, RefreshCw, ArchiveX, Network, FileCode, Share2 } from "lucide-react"
|
||||
|
||||
export function HowItWorks() {
|
||||
const t = useTranslations("home.howItWorks")
|
||||
|
||||
return (
|
||||
<section className="py-16">
|
||||
<div className="container mx-auto px-4 max-w-5xl">
|
||||
<h2 className="text-3xl font-bold text-center mb-12">{t("title")}</h2>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||
<div className="flex flex-col items-center text-center space-y-4 p-6 rounded-xl border border-border bg-card/50 hover:border-primary/50 transition-colors">
|
||||
<div className="p-4 bg-primary/10 rounded-full text-primary">
|
||||
<MousePointerClick className="w-8 h-8" />
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold">{t("step1.title")}</h3>
|
||||
<p className="text-muted-foreground">{t("step1.description")}</p>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col items-center text-center space-y-4 p-6 rounded-xl border border-border bg-card/50 hover:border-primary/50 transition-colors">
|
||||
<div className="p-4 bg-primary/10 rounded-full text-primary">
|
||||
<RefreshCw className="w-8 h-8" />
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold">{t("step2.title")}</h3>
|
||||
<p className="text-muted-foreground">{t("step2.description")}</p>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col items-center text-center space-y-4 p-6 rounded-xl border border-border bg-card/50 hover:border-primary/50 transition-colors">
|
||||
<div className="p-4 bg-primary/10 rounded-full text-primary">
|
||||
<ArchiveX className="w-8 h-8" />
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold">{t("step3.title")}</h3>
|
||||
<p className="text-muted-foreground">{t("step3.description")}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-8 mt-8">
|
||||
<div className="flex flex-col items-center text-center space-y-4 p-6 rounded-xl border border-border bg-card/50 hover:border-primary/50 transition-colors">
|
||||
<div className="p-4 bg-primary/10 rounded-full text-primary">
|
||||
<Network className="w-8 h-8" />
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold">{t("advStep1.title")}</h3>
|
||||
<p className="text-muted-foreground">{t("advStep1.description")}</p>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col items-center text-center space-y-4 p-6 rounded-xl border border-border bg-card/50 hover:border-primary/50 transition-colors">
|
||||
<div className="p-4 bg-primary/10 rounded-full text-primary">
|
||||
<FileCode className="w-8 h-8" />
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold">{t("advStep2.title")}</h3>
|
||||
<p className="text-muted-foreground">{t("advStep2.description")}</p>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col items-center text-center space-y-4 p-6 rounded-xl border border-border bg-card/50 hover:border-primary/50 transition-colors">
|
||||
<div className="p-4 bg-primary/10 rounded-full text-primary">
|
||||
<Share2 className="w-8 h-8" />
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold">{t("advStep3.title")}</h3>
|
||||
<p className="text-muted-foreground">{t("advStep3.description")}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user