feat: Enhance Pricing Page with Enterprise Plan and Billing Toggle

- Added Enterprise plan with features and pricing.
- Introduced billing toggle for monthly and yearly subscriptions.
- Updated feature list to include enterprise-specific features.
- Improved UI for plan cards and added new styles for better visual appeal.
- Adjusted SEO metadata to reflect new pricing structure.
- Enhanced global styles for marketing elements.
This commit is contained in:
Your Name
2026-04-04 20:01:03 +02:00
parent 0f9b1fe260
commit 7e9edc2992
20 changed files with 1567 additions and 1091 deletions

View File

@@ -1,6 +1,6 @@
import { Link } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import { FileText } from 'lucide-react';
import { ArrowRight, FileText, Layers3 } from 'lucide-react';
const FOOTER_TOOLS = {
PDF: [
@@ -49,99 +49,87 @@ export default function Footer() {
const { t } = useTranslation();
return (
<footer className="border-t border-slate-200 bg-slate-50 dark:border-slate-700 dark:bg-slate-900">
<div className="mx-auto max-w-7xl px-4 py-10 sm:px-6 lg:px-8">
{/* Tool link grid */}
<div className="mb-8 grid gap-8 sm:grid-cols-2 lg:grid-cols-3">
{Object.entries(FOOTER_TOOLS).map(([category, tools]) => (
<div key={category}>
<h3 className="mb-3 text-sm font-semibold uppercase tracking-wider text-slate-900 dark:text-white">
{category}
</h3>
<ul className="space-y-2">
{tools.map((tool) => (
<li key={tool.slug}>
<Link
to={(tool as { slug: string; isLanding?: boolean; isComparison?: boolean }).isComparison ? `/compare/${tool.slug}` : (tool as { slug: string; isLanding?: boolean }).isLanding ? `/${tool.slug}` : `/tools/${tool.slug}`}
className="text-sm text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400"
>
{tool.label}
</Link>
</li>
))}
</ul>
<footer className="border-t border-slate-200/80 bg-white/80 backdrop-blur-sm dark:border-slate-700/60 dark:bg-slate-950/80">
<div className="mx-auto max-w-7xl px-4 py-8 sm:px-6 lg:px-8">
<div className="marketing-panel overflow-hidden px-6 py-8 sm:px-8 sm:py-10">
<div className="grid gap-10 xl:grid-cols-[1.15fr,1.85fr]">
<div>
<div className="flex items-center gap-3">
<div className="flex h-12 w-12 items-center justify-center rounded-2xl bg-gradient-to-br from-primary-500 via-sky-500 to-accent-500 shadow-lg shadow-primary-200/70 dark:shadow-primary-950/40">
<Layers3 className="h-5 w-5 text-white" />
</div>
<div>
<p className="text-xl font-black tracking-tight text-slate-950 dark:text-white">
{t('common.appName')}
</p>
<p className="text-sm text-slate-500 dark:text-slate-400">
{t('common.siteTagline', 'Online PDF and file workflows')}
</p>
</div>
</div>
<p className="mt-6 max-w-md text-sm leading-7 text-slate-600 dark:text-slate-300">
{t(
'common.footerDescription',
'Convert, compress, edit, and automate document work in one browser-based workspace built for speed, clarity, and secure processing.'
)}
</p>
<div className="mt-6 flex flex-wrap gap-3">
<Link
to="/tools"
className="inline-flex items-center gap-2 rounded-full bg-slate-950 px-4 py-2.5 text-sm font-semibold text-white transition-colors hover:bg-primary-600 dark:bg-white dark:text-slate-950 dark:hover:bg-primary-300"
>
{t('common.allTools')}
<ArrowRight className="h-4 w-4" />
</Link>
<Link
to="/developers"
className="inline-flex items-center rounded-full border border-slate-200 px-4 py-2.5 text-sm font-semibold text-slate-700 transition-colors hover:bg-white dark:border-slate-700 dark:text-slate-200 dark:hover:bg-slate-900"
>
{t('common.developers')}
</Link>
</div>
</div>
))}
<div className="grid gap-8 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5">
{Object.entries(FOOTER_TOOLS).map(([category, tools]) => (
<div key={category}>
<h3 className="mb-4 text-xs font-bold uppercase tracking-[0.22em] text-slate-500 dark:text-slate-400">
{category}
</h3>
<ul className="space-y-2.5">
{tools.map((tool) => (
<li key={tool.slug}>
<Link
to={(tool as { slug: string; isLanding?: boolean; isComparison?: boolean }).isComparison ? `/compare/${tool.slug}` : (tool as { slug: string; isLanding?: boolean }).isLanding ? `/${tool.slug}` : `/tools/${tool.slug}`}
className="text-sm text-slate-600 transition-colors hover:text-primary-600 dark:text-slate-300 dark:hover:text-primary-400"
>
{tool.label}
</Link>
</li>
))}
</ul>
</div>
))}
</div>
</div>
</div>
{/* Bottom bar */}
<div className="border-t border-slate-200 pt-6 dark:border-slate-700">
<div className="flex flex-col items-center justify-between gap-4 sm:flex-row">
{/* Brand */}
<div className="flex items-center gap-2 text-slate-600 dark:text-slate-400">
<FileText className="h-5 w-5" />
<span className="text-sm font-medium">
© {new Date().getFullYear()} {t('common.appName')}
</span>
</div>
<div className="mt-6 flex flex-col gap-4 border-t border-slate-200/80 pt-6 dark:border-slate-700/60 lg:flex-row lg:items-center lg:justify-between">
<div className="flex items-center gap-2 text-sm text-slate-500 dark:text-slate-400">
<FileText className="h-4 w-4" />
<span>© {new Date().getFullYear()} {t('common.appName')}</span>
</div>
{/* Links */}
<div className="flex items-center gap-6">
<Link
to="/privacy"
className="text-sm text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400"
>
{t('common.privacy')}
</Link>
<Link
to="/terms"
className="text-sm text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400"
>
{t('common.terms')}
</Link>
<Link
to="/tools"
className="text-sm text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400"
>
{t('common.allTools')}
</Link>
<Link
to="/about"
className="text-sm text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400"
>
{t('common.about')}
</Link>
<Link
to="/contact"
className="text-sm text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400"
>
{t('common.contact')}
</Link>
<Link
to="/pricing"
className="text-sm text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400"
>
{t('common.pricing')}
</Link>
<Link
to="/pricing-transparency"
className="text-sm text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400"
>
{t('common.pricingTransparency')}
</Link>
<Link
to="/blog"
className="text-sm text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400"
>
{t('common.blog')}
</Link>
<Link
to="/developers"
className="text-sm text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400"
>
{t('common.developers')}
</Link>
</div>
<div className="flex flex-wrap items-center gap-4 text-sm">
<Link to="/privacy" className="text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400">{t('common.privacy')}</Link>
<Link to="/terms" className="text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400">{t('common.terms')}</Link>
<Link to="/pricing" className="text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400">{t('common.pricing')}</Link>
<Link to="/pricing-transparency" className="text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400">{t('common.pricingTransparency')}</Link>
<Link to="/about" className="text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400">{t('common.about')}</Link>
<Link to="/contact" className="text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400">{t('common.contact')}</Link>
<Link to="/blog" className="text-slate-500 transition-colors hover:text-primary-600 dark:text-slate-400 dark:hover:text-primary-400">{t('common.blog')}</Link>
</div>
</div>
</div>