{"$schema":"https://ui.shadcn.com/schema/registry-item.json","name":"marketing-feature-sections-3d-cards","type":"registry:block","title":"3D Cards","files":[{"path":"components/blocks/marketing/feature-sections/3d-cards.tsx","content":"import { useRef, useState } from 'react';\nimport { Card, CardContent } from '@/components/ui/card';\nimport { cn } from '@/lib/utils';\nimport {\n  Fingerprint,\n  Gauge,\n  Globe,\n  Laptop,\n  Layers,\n  Lock,\n  RefreshCcw,\n  Shield,\n} from 'lucide-react';\n\ninterface Feature {\n  icon: typeof Fingerprint;\n  title: string;\n  description: string;\n  gradient: string;\n}\n\nconst features: Feature[] = [\n  {\n    icon: Fingerprint,\n    title: 'Biometric Authentication',\n    description: 'Secure access with advanced biometric verification systems.',\n    gradient: 'from-blue-500/20 to-purple-500/20',\n  },\n  {\n    icon: Shield,\n    title: 'Advanced Security',\n    description: 'Enterprise-grade security with end-to-end encryption.',\n    gradient: 'from-green-500/20 to-emerald-500/20',\n  },\n  {\n    icon: Globe,\n    title: 'Global CDN',\n    description: 'Lightning-fast content delivery across all continents.',\n    gradient: 'from-orange-500/20 to-red-500/20',\n  },\n  {\n    icon: Layers,\n    title: 'Microservices',\n    description: 'Scalable architecture with independent service components.',\n    gradient: 'from-pink-500/20 to-rose-500/20',\n  },\n  {\n    icon: RefreshCcw,\n    title: 'Auto Scaling',\n    description: 'Dynamic resource allocation based on demand.',\n    gradient: 'from-violet-500/20 to-purple-500/20',\n  },\n  {\n    icon: Gauge,\n    title: 'Performance',\n    description: 'Optimized for speed with sub-millisecond response times.',\n    gradient: 'from-cyan-500/20 to-blue-500/20',\n  },\n  {\n    icon: Lock,\n    title: 'Data Privacy',\n    description: 'GDPR compliant with advanced privacy controls.',\n    gradient: 'from-amber-500/20 to-orange-500/20',\n  },\n  {\n    icon: Laptop,\n    title: 'Cross Platform',\n    description: 'Seamless experience across all devices and platforms.',\n    gradient: 'from-indigo-500/20 to-blue-500/20',\n  },\n];\n\nfunction Feature3DCard({ feature }: { feature: Feature }) {\n  const cardRef = useRef<HTMLDivElement>(null);\n  const [rotation, setRotation] = useState({ x: 0, y: 0 });\n\n  const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n    if (!cardRef.current) return;\n\n    const card = cardRef.current;\n    const rect = card.getBoundingClientRect();\n    const x = e.clientX - rect.left;\n    const y = e.clientY - rect.top;\n\n    const centerX = rect.width / 2;\n    const centerY = rect.height / 2;\n\n    const rotateX = (y - centerY) / 10;\n    const rotateY = (centerX - x) / 10;\n\n    setRotation({ x: rotateX, y: rotateY });\n  };\n\n  const handleMouseLeave = () => {\n    setRotation({ x: 0, y: 0 });\n  };\n\n  return (\n    <Card\n      ref={cardRef}\n      className={cn(\n        'relative overflow-hidden p-0 transition-all duration-200 ease-out',\n        'hover:-translate-y-1 hover:shadow-lg',\n        'bg-gradient-to-br',\n        feature.gradient\n      )}\n      style={{\n        transform: `perspective(1000px) rotateX(${rotation.x}deg) rotateY(${rotation.y}deg)`,\n      }}\n      onMouseMove={handleMouseMove}\n      onMouseLeave={handleMouseLeave}\n    >\n      <CardContent className=\"space-y-4 p-6\">\n        <feature.icon className=\"text-primary h-12 w-12\" />\n        <div className=\"space-y-2\">\n          <h3 className=\"font-bold\">{feature.title}</h3>\n          <p className=\"text-muted-foreground text-sm\">{feature.description}</p>\n        </div>\n      </CardContent>\n    </Card>\n  );\n}\n\nexport default function FeatureSection3D() {\n  return (\n    <section className=\"container mx-auto space-y-8 px-4 py-24 md:px-6 2xl:max-w-[1400px]\">\n      <div className=\"space-y-4 text-center\">\n        <h2 className=\"text-3xl font-bold tracking-tighter sm:text-4xl md:text-5xl\">\n          Next-generation features\n        </h2>\n        <p className=\"text-muted-foreground mx-auto max-w-[700px] md:text-xl/relaxed lg:text-base/relaxed xl:text-xl/relaxed\">\n          Experience the future of web development with our cutting-edge\n          features.\n        </p>\n      </div>\n\n      <div className=\"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4\">\n        {features.map((feature) => (\n          <Feature3DCard key={feature.title} feature={feature} />\n        ))}\n      </div>\n    </section>\n  );\n}\n","type":"registry:component","target":"components/blocks/marketing/feature-sections/3d-cards.tsx"},{"path":"components/ui/card.tsx","content":"import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n  className,\n  size = \"default\",\n  ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n  return (\n    <div\n      data-slot=\"card\"\n      data-size={size}\n      className={cn(\n        \"group/card flex flex-col gap-6 overflow-hidden rounded-xl bg-card py-6 text-sm text-card-foreground shadow-xs ring-1 ring-foreground/10 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-header\"\n      className={cn(\n        \"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-title\"\n      className={cn(\n        \"font-heading text-base leading-normal font-medium group-data-[size=sm]/card:text-sm\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-description\"\n      className={cn(\"text-sm text-muted-foreground\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-action\"\n      className={cn(\n        \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-content\"\n      className={cn(\"px-6 group-data-[size=sm]/card:px-4\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-footer\"\n      className={cn(\n        \"flex items-center rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Card,\n  CardHeader,\n  CardFooter,\n  CardTitle,\n  CardAction,\n  CardDescription,\n  CardContent,\n}\n","type":"registry:ui","target":"components/ui/card.tsx"}],"description":"Feature cards that tilt in 3D as the cursor moves, each holding an icon, title, and copy. Adds depth to a landing page when you want highlights to feel tactile.","dependencies":["lucide-react"]}