Files
entscheidomat/components/playground.tsx
2026-07-23 21:59:15 +02:00

157 lines
5.9 KiB
TypeScript

"use client";
import Link from "next/link";
import {
ArrowRight,
CircleDashed,
Coins,
Dices,
Disc3,
Hash,
HelpCircle,
ListChecks,
} from "lucide-react";
import Reveal from "@/components/reveal";
const GENERATORS = [
{
id: "janein",
slug: "ja-nein-generator",
title: "Ja-Nein-Generator",
badge: "Zwei Optionen",
description:
"Stelle eine Frage und erhalte sofort eine unparteiische Antwort mit Ja oder Nein. Ideal für schnelle Alltagsentscheidungen.",
icon: HelpCircle,
},
{
id: "coin",
slug: "muenze-werfen",
title: "Münze werfen",
badge: "3D Münzwurf",
description:
"Wirf eine goldene 3D-Münze in die Luft und überlasse knifflige Wahlentscheidungen dem klassischen Kopf oder Zahl.",
icon: Coins,
},
{
id: "wheel",
slug: "gluecksrad",
title: "Glücksrad online",
badge: "Entscheidungsrad",
description:
"Erstelle dein eigenes Glücksrad mit individuellen Feldern und drehe für eine transparente, zufällige Auswahl.",
icon: Disc3,
},
{
id: "dice",
slug: "wuerfel-online",
title: "Würfel online",
badge: "Würfel-Simulator",
description:
"Rolle einen oder mehrere 6er, 10er oder benutzerdefinierte 3D-Würfel für Spiele & Entscheidungen.",
icon: Dices,
},
{
id: "number",
slug: "zufallszahl-generator",
title: "Zufallszahl-Generator",
badge: "Zahlenbereich",
description:
"Generiere eine oder mehrere echte Zufallszahlen in einem frei definierten Bereich zwischen Minimum und Maximum.",
icon: Hash,
},
{
id: "ball",
slug: "magic-8-ball",
title: "Magic 8-Ball",
badge: "Mystisches Orakel",
description:
"Befrage die magische Billardkugel und erhalte geheimnisvolle Antworten auf deine Lebensfragen.",
icon: CircleDashed,
},
{
id: "list",
slug: "namen-auslosen",
title: "Namen & Liste auslosen",
badge: "Gewinnspiel & Teams",
description:
"Mische Namen oder Optionen in einer Liste, lose Gewinner aus oder erstelle automatisch zufällige Gruppen.",
icon: ListChecks,
},
] as const;
export default function Playground() {
return (
<section id="tools" className="relative scroll-mt-20 py-20 sm:py-28">
<div className="relative mx-auto w-full max-w-6xl px-5 sm:px-8">
<Reveal className="mx-auto max-w-2xl text-center">
<p className="text-xs font-semibold uppercase tracking-[0.22em] text-ink-soft">
Die 7 Zufalls-Tools
</p>
<h2 className="mt-3 text-4xl font-semibold tracking-[-0.02em] sm:text-5xl">
Wähle deinen{" "}
<em className="font-display italic text-[#0d7a57]">Generator</em>.
</h2>
<p className="mt-4 text-lg leading-relaxed text-ink-soft">
Klicke auf ein Tool, um direkt zur interaktiven Vollversion mit
allen Einstellungen zu gelangen.
</p>
</Reveal>
<div className="mt-14 grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
{GENERATORS.map((tool, i) => {
const Icon = tool.icon;
const isFeatured = i === 6;
return (
<Reveal
key={tool.id}
delay={i * 0.06}
className={isFeatured ? "sm:col-span-2 lg:col-span-1" : ""}
>
<Link
href={`/${tool.slug}`}
className="group relative flex h-full flex-col justify-between overflow-hidden rounded-[2rem] border border-line bg-surface p-7 sm:p-8 shadow-lift transition-all duration-300 hover:-translate-y-1.5 hover:border-[#0d7a57]/40 hover:shadow-[0_20px_45px_rgba(13,122,87,0.14)]"
>
{/* Subtiler Glow-Effekt im Hintergrund der Karte */}
<div
aria-hidden
className="pointer-events-none absolute -right-12 -top-12 h-36 w-36 rounded-full bg-[#0d7a57]/5 blur-2xl transition-all duration-500 group-hover:scale-150 group-hover:bg-[#0d7a57]/15"
/>
<div>
{/* Icon & Badge Header */}
<div className="flex items-center justify-between gap-3">
<div className="flex h-12 w-12 items-center justify-center rounded-2xl border border-[#0d7a57]/20 bg-[#e6f7f0] text-[#0d7a57] shadow-sm transition-all duration-300 group-hover:scale-110 group-hover:border-[#0d7a57] group-hover:bg-[#0d7a57] group-hover:text-white">
<Icon className="h-6 w-6" strokeWidth={2.1} />
</div>
<span className="inline-flex items-center rounded-full border border-line bg-paper px-3 py-1 text-[11px] font-semibold uppercase tracking-wider text-ink-soft">
{tool.badge}
</span>
</div>
{/* Titel & Beschreibung */}
<h3 className="mt-6 font-display text-2xl font-semibold tracking-tight text-ink transition-colors duration-200 group-hover:text-[#0d7a57]">
{tool.title}
</h3>
<p className="mt-2.5 text-sm leading-relaxed text-ink-soft">
{tool.description}
</p>
</div>
{/* Action Link Footer */}
<div className="mt-8 flex items-center justify-between border-t border-line/60 pt-4 text-xs font-semibold uppercase tracking-widest text-[#0d7a57]">
<span>Generator öffnen</span>
<div className="flex h-7 w-7 items-center justify-center rounded-full bg-[#e6f7f0] text-[#0d7a57] transition-all duration-300 group-hover:translate-x-1 group-hover:bg-[#0d7a57] group-hover:text-white">
<ArrowRight className="h-3.5 w-3.5" />
</div>
</div>
</Link>
</Reveal>
);
})}
</div>
</div>
</section>
);
}