
A contemporary pricing section with bold cards, soft shadows, and accent gradients. Use it to give a polished, current feel to a product or SaaS page.
@shadcn-ui-blocks
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from '@/components/ui/card';
import { CheckIcon } from 'lucide-react';
const StarterIcon = () => (
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="h-12 w-12"
>
<path
d="M12 2L2 7L12 12L22 7L12 2Z"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M2 17L12 22L22 17"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M2 12L12 17L22 12"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
const ProfessionalIcon = () => (
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="h-12 w-12"
>
<path
d="M12 2L2 7L12 12L22 7L12 2Z"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M2 17L12 22L22 17"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M2 12L12 17L22 12"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M12 12L12 22"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
const EnterpriseIcon = () => (
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="h-12 w-12"
>
<path
d="M12 2L2 7L12 12L22 7L12 2Z"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M2 17L12 22L22 17"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M2 12L12 17L22 12"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M12 12L12 22"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M12 2L12 12"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
const plans = [
{
name: 'Starter',
price: '$29',
description: 'Perfect for individuals and small projects',
features: [
'Up to 5 projects',
'Basic analytics',
'24/7 support',
'1GB storage',
'Basic integrations',
],
icon: StarterIcon,
cta: 'Get Started',
popular: false,
},
{
name: 'Professional',
price: '$79',
description: 'Ideal for growing businesses',
features: [
'Unlimited projects',
'Advanced analytics',
'Priority support',
'10GB storage',
'Advanced integrations',
'Custom branding',
'API access',
],
icon: ProfessionalIcon,
cta: 'Start Free Trial',
popular: true,
},
{
name: 'Enterprise',
price: 'Custom',
description: 'For large organizations with custom needs',
features: [
'Everything in Professional',
'Unlimited storage',
'Dedicated support',
'Custom integrations',
'SLA guarantee',
'Advanced security',
'On-premise deployment',
],
icon: EnterpriseIcon,
cta: 'Contact Sales',
popular: false,
},
];
export default function PricingSectionModern() {
return (
<section className="bg-muted/50 py-24">
<div className="container mx-auto px-4 md:px-6 2xl:max-w-[1400px]">
<div className="flex flex-col items-center justify-center space-y-4 text-center">
<div className="space-y-2">
<h2 className="text-3xl font-bold tracking-tighter sm:text-4xl md:text-5xl">
Simple, transparent pricing
</h2>
<p className="text-muted-foreground mx-auto max-w-[700px] md:text-xl">
Choose the perfect plan for your needs. All plans include a 14-day
free trial.
</p>
</div>
</div>
<div className="mx-auto mt-12 grid max-w-5xl gap-6 lg:grid-cols-3 lg:gap-8">
{plans.map((plan) => (
<Card
key={plan.name}
className={`relative flex flex-col ${
plan.popular ? 'border-primary shadow-lg' : ''
}`}
>
{plan.popular && (
<Badge
className="absolute -top-3 left-1/2 -translate-x-1/2"
variant="default"
>
Most Popular
</Badge>
)}
<CardHeader className="flex flex-col items-center space-y-2">
<div className="text-primary mb-4">
<plan.icon />
</div>
<CardTitle className="text-2xl">{plan.name}</CardTitle>
<div className="flex items-baseline space-x-1">
<span className="text-4xl font-bold">{plan.price}</span>
{plan.price !== 'Custom' && (
<span className="text-muted-foreground">/month</span>
)}
</div>
<CardDescription className="text-center">
{plan.description}
</CardDescription>
</CardHeader>
<CardContent className="flex-1">
<ul className="space-y-4">
{plan.features.map((feature) => (
<li key={feature} className="flex items-center space-x-2">
<CheckIcon className="text-primary h-5 w-5" />
<span className="text-sm">{feature}</span>
</li>
))}
</ul>
</CardContent>
<CardFooter>
<Button
className="w-full"
variant={plan.popular ? 'default' : 'outline'}
asChild
>
<a href={plan.price === 'Custom' ? '/contact' : '/signup'}>
{plan.cta}
</a>
</Button>
</CardFooter>
</Card>
))}
</div>
<div className="mt-12 text-center">
<p className="text-muted-foreground text-sm">
Need a custom plan?{' '}
<a href="#" className="text-primary hover:underline">
Contact our sales team
</a>
</p>
</div>
</div>
</section>
);
}




























