"use client"; import { motion, type Variants } from "framer-motion"; import Image from "next/image"; import type { ReactNode } from "react"; import { cn } from "@/lib/utils"; const container: Variants = { hidden: {}, show: { transition: { staggerChildren: 0.09, delayChildren: 0.18 } }, }; const item: Variants = { hidden: { opacity: 0, y: 16 }, show: { opacity: 1, y: 0, transition: { type: "spring", stiffness: 150, damping: 18 }, }, }; // Slowly drifting colored blobs behind everything. function Aurora() { return (
); } export function AuthShell({ title, subtitle, children, footer, }: { title: string; subtitle?: ReactNode; children: ReactNode; footer?: ReactNode; }) { return (
{/* rotating gradient halo */} {/* the card */} {/* top edge highlight */}
{/* one-time shimmer sweep on mount */} temetro

{title}

{subtitle && (

{subtitle}

)}
{children} {footer && ( {footer} )}
); } export function Field({ label, htmlFor, hint, children, }: { label: string; htmlFor: string; hint?: ReactNode; children: ReactNode; }) { return (
{children} {hint &&

{hint}

}
); } export function FormAlert({ tone = "error", children, }: { tone?: "error" | "success"; children: ReactNode; }) { return (

{children}

); }