feat: Instagram data sync, gold accent, SVG logo, FAQ & Pricing sections
- Sync all content from Instagram: fix addresses, trainer names, add 5 new trainers, remove 2 inactive, update class descriptions - Add FAQ section (11 Q&A items) and Pricing section (tabs: subscriptions, rental, rules) - Redesign with editorial magazine feel: centered headings, generous spacing, section glow effects, glassmorphism cards - Migrate entire accent palette from rose to warm gold (#c9a96e) - Replace low-res PNG logo with vector SVG traced via potrace — crisp at any size, animated gradient (black↔gold), heartbeat pulse animation - Make header brand name gold Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
66
src/components/sections/FAQ.tsx
Normal file
66
src/components/sections/FAQ.tsx
Normal file
@@ -0,0 +1,66 @@
|
||||
"use client";
|
||||
|
||||
import { useState } from "react";
|
||||
import { Plus, Minus } from "lucide-react";
|
||||
import { siteContent } from "@/data/content";
|
||||
import { SectionHeading } from "@/components/ui/SectionHeading";
|
||||
import { Reveal } from "@/components/ui/Reveal";
|
||||
|
||||
export function FAQ() {
|
||||
const { faq } = siteContent;
|
||||
const [openIndex, setOpenIndex] = useState<number | null>(null);
|
||||
|
||||
function toggle(index: number) {
|
||||
setOpenIndex(openIndex === index ? null : index);
|
||||
}
|
||||
|
||||
return (
|
||||
<section id="faq" className="section-glow relative section-padding bg-neutral-100 dark:bg-[#080808]">
|
||||
<div className="section-divider absolute top-0 left-0 right-0" />
|
||||
<div className="section-container">
|
||||
<Reveal>
|
||||
<SectionHeading centered>{faq.title}</SectionHeading>
|
||||
</Reveal>
|
||||
|
||||
<div className="mx-auto mt-14 max-w-3xl">
|
||||
{faq.items.map((item, i) => (
|
||||
<Reveal key={i}>
|
||||
<div
|
||||
className={`border-b border-neutral-200 dark:border-white/[0.06] ${
|
||||
i === 0 ? "border-t" : ""
|
||||
}`}
|
||||
>
|
||||
<button
|
||||
onClick={() => toggle(i)}
|
||||
className="flex w-full items-center justify-between gap-6 py-6 text-left transition-colors"
|
||||
>
|
||||
<span className="text-base font-medium text-neutral-900 dark:text-white sm:text-lg">
|
||||
{item.question}
|
||||
</span>
|
||||
<span className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-neutral-100 transition-all duration-300 dark:bg-white/[0.06]">
|
||||
{openIndex === i ? (
|
||||
<Minus size={16} className="text-[#c9a96e]" />
|
||||
) : (
|
||||
<Plus size={16} className="text-neutral-400 dark:text-neutral-500" />
|
||||
)}
|
||||
</span>
|
||||
</button>
|
||||
<div
|
||||
className={`grid transition-all duration-300 ease-out ${
|
||||
openIndex === i ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0"
|
||||
}`}
|
||||
>
|
||||
<div className="overflow-hidden">
|
||||
<div className="pb-6 pr-14 text-sm leading-relaxed text-neutral-600 dark:text-neutral-400 sm:text-base whitespace-pre-line">
|
||||
{item.answer}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Reveal>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user