import { motion, useReducedMotion } from "framer-motion"; import type { ReactNode } from "react"; import { fadeUpVariants } from "@/presentation/theme/motion"; interface PageHeaderProps { title: string; subtitle?: string; badge?: string; badgeColor?: "green" | "blue" | "purple" | "orange"; children?: ReactNode; } const badgeClasses: Record, string> = { green: "border-neon-green/25 bg-neon-green/8 text-neon-green", blue: "border-neon-blue/25 bg-neon-blue/8 text-neon-blue", purple: "border-neon-purple/25 bg-neon-purple/8 text-neon-purple", orange: "border-neon-orange/25 bg-neon-orange/8 text-neon-orange", }; export function PageHeader({ title, subtitle, badge, badgeColor = "blue", children, }: PageHeaderProps) { const reduced = useReducedMotion(); return (

{title}

{badge && ( {badge} )}
{subtitle &&

{subtitle}

}
{children}
); } interface PageHeaderBadge { label: string; color?: "green" | "blue" | "purple" | "orange"; } interface HeroPageHeaderProps { title: string; subtitle: string; badges?: PageHeaderBadge[]; imageSrc?: string; imageOpacity?: number; } export function HeroPageHeader({ title, subtitle, badges, imageSrc = "/images/hero-pitch.png", imageOpacity = 0.28, }: HeroPageHeaderProps) { const reduced = useReducedMotion(); return (

{title}

{subtitle}

{badges && badges.length > 0 && (
{badges.map((b, i) => ( {b.label} ))}
)}
); }