Spaces:
Build error
Build error
Upload components/Pricing.jsx with huggingface_hub
Browse files- components/Pricing.jsx +112 -0
components/Pricing.jsx
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { motion } from 'framer-motion';
|
| 2 |
+
import { Check, X } from 'lucide-react';
|
| 3 |
+
|
| 4 |
+
export default function Pricing() {
|
| 5 |
+
const plans = [
|
| 6 |
+
{
|
| 7 |
+
name: "Starter",
|
| 8 |
+
price: "Free",
|
| 9 |
+
description: "Perfect for individuals and hobbyists",
|
| 10 |
+
features: ["Basic 3D scrolling", "100MB storage", "Community support", "Standard templates"],
|
| 11 |
+
cta: "Start for Free",
|
| 12 |
+
popular: false
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
name: "Pro",
|
| 16 |
+
price: "$29",
|
| 17 |
+
description: "For growing businesses and creators",
|
| 18 |
+
features: ["Advanced 3D effects", "10GB storage", "Priority support", "Custom templates", "Analytics dashboard"],
|
| 19 |
+
cta: "Get Pro",
|
| 20 |
+
popular: true
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
name: "Enterprise",
|
| 24 |
+
price: "Custom",
|
| 25 |
+
description: "For large organizations and teams",
|
| 26 |
+
features: ["Full AI capabilities", "Unlimited storage", "24/7 dedicated support", "Custom integration", "SLA agreement"],
|
| 27 |
+
cta: "Contact Sales",
|
| 28 |
+
popular: false
|
| 29 |
+
}
|
| 30 |
+
];
|
| 31 |
+
|
| 32 |
+
return (
|
| 33 |
+
<section id="pricing" className="py-24 bg-slate-900 relative overflow-hidden">
|
| 34 |
+
{/* Background Elements */}
|
| 35 |
+
<div className="absolute inset-0 overflow-hidden">
|
| 36 |
+
<div className="absolute top-[30%] left-[20%] w-[40%] h-[40%] rounded-full bg-purple-600/10 blur-[100px]"></div>
|
| 37 |
+
<div className="absolute bottom-[20%] right-[15%] w-[30%] h-[30%] rounded-full bg-blue-600/10 blur-[80px]"></div>
|
| 38 |
+
</div>
|
| 39 |
+
|
| 40 |
+
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
|
| 41 |
+
<div className="text-center mb-20">
|
| 42 |
+
<motion.h2
|
| 43 |
+
className="text-4xl md:text-5xl font-bold text-white mb-6"
|
| 44 |
+
initial={{ opacity: 0, y: 20 }}
|
| 45 |
+
whileInView={{ opacity: 1, y: 0 }}
|
| 46 |
+
viewport={{ once: true }}
|
| 47 |
+
>
|
| 48 |
+
Simple, <span className="text-transparent bg-clip-text bg-gradient-to-r from-blue-400 to-purple-400">Transparent</span> Pricing
|
| 49 |
+
</motion.h2>
|
| 50 |
+
<motion.p
|
| 51 |
+
className="text-xl text-slate-400 max-w-3xl mx-auto"
|
| 52 |
+
initial={{ opacity: 0, y: 20 }}
|
| 53 |
+
whileInView={{ opacity: 1, y: 0 }}
|
| 54 |
+
viewport={{ once: true }}
|
| 55 |
+
transition={{ delay: 0.2 }}
|
| 56 |
+
>
|
| 57 |
+
Choose the perfect plan for your needs. No hidden fees, no surprises.
|
| 58 |
+
</motion.p>
|
| 59 |
+
</div>
|
| 60 |
+
|
| 61 |
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-8 max-w-6xl mx-auto">
|
| 62 |
+
{plans.map((plan, index) => (
|
| 63 |
+
<motion.div
|
| 64 |
+
key={index}
|
| 65 |
+
className={`relative p-8 rounded-3xl backdrop-blur-sm border transition-all duration-300 ${
|
| 66 |
+
plan.popular
|
| 67 |
+
? 'bg-slate-800/50 border-purple-500 shadow-2xl shadow-purple-500/20 scale-105 z-10'
|
| 68 |
+
: 'bg-slate-800/30 border-slate-700 hover:border-slate-600'
|
| 69 |
+
}`}
|
| 70 |
+
initial={{ opacity: 0, y: 40 }}
|
| 71 |
+
whileInView={{ opacity: 1, y: 0 }}
|
| 72 |
+
viewport={{ once: true }}
|
| 73 |
+
transition={{ delay: index * 0.1 }}
|
| 74 |
+
>
|
| 75 |
+
{plan.popular && (
|
| 76 |
+
<div className="absolute -top-4 left-1/2 transform -translate-x-1/2 bg-gradient-to-r from-purple-600 to-blue-600 text-white px-4 py-2 rounded-full text-sm font-medium">
|
| 77 |
+
Most Popular
|
| 78 |
+
</div>
|
| 79 |
+
)}
|
| 80 |
+
|
| 81 |
+
<div className="mb-8">
|
| 82 |
+
<h3 className="text-2xl font-bold text-white mb-2">{plan.name}</h3>
|
| 83 |
+
<div className="flex items-baseline gap-1">
|
| 84 |
+
<span className="text-4xl font-bold text-white">{plan.price}</span>
|
| 85 |
+
{plan.price !== "Free" && <span className="text-slate-400">/month</span>}
|
| 86 |
+
</div>
|
| 87 |
+
<p className="text-slate-400 mt-2">{plan.description}</p>
|
| 88 |
+
</div>
|
| 89 |
+
|
| 90 |
+
<div className="space-y-4 mb-8">
|
| 91 |
+
{plan.features.map((feature, i) => (
|
| 92 |
+
<div key={i} className="flex items-center gap-3">
|
| 93 |
+
<Check className="w-5 h-5 text-purple-400 flex-shrink-0" />
|
| 94 |
+
<span className="text-slate-300 text-sm">{feature}</span>
|
| 95 |
+
</div>
|
| 96 |
+
))}
|
| 97 |
+
</div>
|
| 98 |
+
|
| 99 |
+
<button className={`w-full py-3 rounded-xl font-bold transition-all duration-200 ${
|
| 100 |
+
plan.popular
|
| 101 |
+
? 'bg-gradient-to-r from-purple-600 to-blue-600 hover:from-purple-700 hover:to-blue-700 text-white'
|
| 102 |
+
: 'bg-slate-700 hover:bg-slate-600 text-white'
|
| 103 |
+
}`}>
|
| 104 |
+
{plan.cta}
|
| 105 |
+
</button>
|
| 106 |
+
</motion.div>
|
| 107 |
+
))}
|
| 108 |
+
</div>
|
| 109 |
+
</div>
|
| 110 |
+
</section>
|
| 111 |
+
);
|
| 112 |
+
}
|