"use client" import { AnimatePresence, motion, useInView, useMotionValue, useSpring, useTransform } from "motion/react" import { useEffect, useRef, useState, type PointerEvent } from "react" import { ArrowRightIcon, BotIcon, ChartNoAxesColumnIcon, CheckIcon, InboxIcon, LockIcon, MailIcon, MessageCircleIcon, PhoneIcon, PlugIcon, SparklesIcon, WorkflowIcon, } from "lucide-react" import { cn } from "@/lib/utils" import type { TemplateProps } from "../../lib/types" import { splitList } from "../shared/hooks" import { TImage } from "../shared/media" import { Accordion, Marquee, Reveal, RevealWords, ease, useScrollNav } from "../shared/motion" import { TemplateShell } from "../shared/shell" import { saas, type SaasData } from "./definition" import { fonts } from "./fonts" const em = "bg-gradient-to-r from-t-accent to-t-fg bg-clip-text text-transparent" const container = "mx-auto w-full max-w-[1200px] px-5 md:px-8" const heading = "font-t-display font-semibold tracking-[-0.035em]" const mono = { fontFamily: "var(--font-saas-mono), ui-monospace, monospace" } const card = "rounded-3xl border border-t-fg/10 bg-t-surface/60" const featureIcons = [InboxIcon, BotIcon, WorkflowIcon, ChartNoAxesColumnIcon, PlugIcon, LockIcon] function useTypewriter(text: string, active: boolean, speed = 28) { const [count, setCount] = useState(0) useEffect(() => { if (!active) return const timer = setInterval(() => setCount((c) => (c >= text.length ? c : c + 2)), speed) return () => clearInterval(timer) }, [active, text.length, speed]) return text.slice(0, count) } function Eyebrow({ children }: { children: string }) { return

{children}

} export function SaasTemplate({ content }: TemplateProps) { const { brand, hero, logos, features, steps, pricing, testimonials, faq, cta } = content.data const show = (key: string) => !content.hidden.includes(key) const links = [ { href: "#funktionen", label: "Funktionen", visible: show("features") }, { href: "#preise", label: "Preise", visible: show("pricing") }, { href: "#faq", label: "FAQ", visible: show("faq") }, ].filter((link) => link.visible) return (