Fix Demo enterprise

This commit is contained in:
Urtzi Alfaro
2025-12-17 13:03:52 +01:00
parent 0bbfa010bf
commit 8bfe4f2dd7
111 changed files with 26200 additions and 2245 deletions

View File

@@ -23,7 +23,7 @@ import {
useApprovePurchaseOrder,
useStartProductionBatch,
} from '../../api/hooks/useProfessionalDashboard';
import { useDashboardData, useDashboardRealtimeSync } from '../../api/hooks/useDashboardData';
import { useControlPanelData, useControlPanelRealtimeSync } from '../../api/hooks/useControlPanelData';
import { useRejectPurchaseOrder } from '../../api/hooks/purchase-orders';
import { useIngredients } from '../../api/hooks/inventory';
import { useSuppliers } from '../../api/hooks/suppliers';
@@ -99,15 +99,15 @@ export function BakeryDashboard({ plan }: { plan?: string }) {
);
const qualityTemplates = Array.isArray(qualityData?.templates) ? qualityData.templates : [];
// NEW: Single unified data fetch for all 4 dashboard blocks
// NEW: Enhanced control panel data fetch with SSE integration
const {
data: dashboardData,
isLoading: dashboardLoading,
refetch: refetchDashboard,
} = useDashboardData(tenantId);
} = useControlPanelData(tenantId);
// Enable SSE real-time state synchronization
useDashboardRealtimeSync(tenantId);
// Enable enhanced SSE real-time state synchronization
useControlPanelRealtimeSync(tenantId);
// Mutations
const approvePO = useApprovePurchaseOrder();
@@ -417,6 +417,7 @@ export function BakeryDashboard({ plan }: { plan?: string }) {
runningBatches={dashboardData?.runningBatches || []}
pendingBatches={dashboardData?.pendingBatches || []}
alerts={dashboardData?.alerts || []}
equipmentAlerts={dashboardData?.equipmentAlerts || []}
loading={dashboardLoading}
onStartBatch={handleStartBatch}
/>

View File

@@ -4,15 +4,17 @@ import { useTranslation } from 'react-i18next';
import { PublicLayout } from '../../components/layout';
import {
Button,
TableOfContents,
ProgressBar,
FloatingCTA,
ScrollReveal,
SavingsCalculator,
StepTimeline,
AnimatedCounter,
TOCSection,
TimelineStep
TimelineStep,
Card,
CardHeader,
CardBody,
Badge
} from '../../components/ui';
import { getDemoUrl } from '../../utils/navigation';
import {
@@ -41,7 +43,8 @@ import {
Droplets,
Award,
Database,
FileText
FileText,
Sparkles
} from 'lucide-react';
const FeaturesPage: React.FC = () => {
@@ -117,39 +120,6 @@ const FeaturesPage: React.FC = () => {
},
];
// Table of Contents sections
const tocSections: TOCSection[] = [
{
id: 'automatic-system',
label: t('toc.automatic', 'Sistema Automático'),
icon: <Clock className="w-4 h-4" />
},
{
id: 'local-intelligence',
label: t('toc.local', 'Inteligencia Local'),
icon: <MapPin className="w-4 h-4" />
},
{
id: 'demand-forecasting',
label: t('toc.forecasting', 'Predicción de Demanda'),
icon: <Target className="w-4 h-4" />
},
{
id: 'waste-reduction',
label: t('toc.waste', 'Reducción de Desperdicios'),
icon: <Recycle className="w-4 h-4" />
},
{
id: 'sustainability',
label: t('toc.sustainability', 'Sostenibilidad'),
icon: <Leaf className="w-4 h-4" />
},
{
id: 'business-models',
label: t('toc.business', 'Modelos de Negocio'),
icon: <Store className="w-4 h-4" />
},
];
return (
<PublicLayout
@@ -175,44 +145,69 @@ const FeaturesPage: React.FC = () => {
dismissible
/>
{/* Main Content with Sidebar */}
<div className="flex gap-8">
{/* Sidebar - Table of Contents */}
<aside className="hidden lg:block w-64 flex-shrink-0">
<TableOfContents sections={tocSections} />
</aside>
{/* Hero Section - Enhanced with Demo page style */}
<section className="relative overflow-hidden bg-gradient-to-br from-[var(--bg-primary)] via-[var(--bg-secondary)] to-[var(--color-primary)]/5 dark:from-[var(--bg-primary)] dark:via-[var(--bg-secondary)] dark:to-[var(--color-primary)]/10 py-24">
{/* Background Pattern */}
<div className="absolute inset-0 bg-pattern opacity-50"></div>
{/* Main Content */}
<div className="flex-1 min-w-0">
{/* Hero Section */}
<section className="bg-gradient-to-br from-[var(--bg-primary)] via-[var(--bg-secondary)] to-[var(--color-primary)]/5 py-20">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
{/* Animated Background Elements */}
<div className="absolute top-20 left-10 w-72 h-72 bg-[var(--color-primary)]/10 rounded-full blur-3xl animate-pulse"></div>
<div className="absolute bottom-10 right-10 w-96 h-96 bg-[var(--color-secondary)]/10 rounded-full blur-3xl animate-pulse" style={{ animationDelay: '1s' }}></div>
<div className="relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<ScrollReveal variant="fadeUp" delay={0.1}>
<div className="text-center max-w-4xl mx-auto">
<h1 className="text-4xl lg:text-6xl font-extrabold text-[var(--text-primary)] mb-6">
{t('hero.title', 'Cómo Bakery-IA Trabaja Para Ti Cada Día')}
<div className="text-center max-w-4xl mx-auto space-y-6">
<div className="inline-flex items-center gap-2 px-4 py-2 rounded-full bg-[var(--color-primary)]/10 dark:bg-[var(--color-primary)]/20 border border-[var(--color-primary)]/20 dark:border-[var(--color-primary)]/30 mb-4">
<Sparkles className="w-4 h-4 text-[var(--color-primary)]" />
<span className="text-sm font-medium text-[var(--color-primary)]">{t('hero.badge', 'Funcionalidades Completas')}</span>
</div>
<h1 className="text-5xl md:text-6xl font-bold text-[var(--text-primary)] mb-6 leading-tight">
{t('hero.title', 'Cómo Bakery-IA')}
<span className="block bg-gradient-to-r from-[var(--color-primary)] to-[var(--color-secondary)] bg-clip-text text-transparent">
{t('hero.title_highlight', 'Trabaja Para Ti Cada Día')}
</span>
</h1>
<p className="text-xl text-[var(--text-secondary)] leading-relaxed">
<p className="text-xl md:text-2xl text-[var(--text-secondary)] max-w-3xl mx-auto leading-relaxed">
{t('hero.subtitle', 'Todas las funcionalidades explicadas en lenguaje sencillo para dueños de panaderías')}
</p>
<div className="flex items-center justify-center gap-8 pt-4 text-sm text-[var(--text-tertiary)]">
<div className="flex items-center gap-2">
<CheckCircle2 className="w-5 h-5 text-[var(--color-success)]" />
<span>{t('hero.feature1', 'IA Automática 24/7')}</span>
</div>
<div className="flex items-center gap-2">
<CheckCircle2 className="w-5 h-5 text-[var(--color-success)]" />
<span>{t('hero.feature2', '92% Precisión')}</span>
</div>
<div className="flex items-center gap-2">
<CheckCircle2 className="w-5 h-5 text-[var(--color-success)]" />
<span>{t('hero.feature3', 'ROI Inmediato')}</span>
</div>
</div>
</div>
</ScrollReveal>
</div>
</section>
{/* Feature 1: Automatic Daily System - THE KILLER FEATURE */}
<section id="automatic-system" className="py-20 bg-[var(--bg-primary)] scroll-mt-24">
<section id="automatic-system" className="py-20 bg-[var(--bg-primary)]">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<ScrollReveal variant="fadeUp" delay={0.1}>
<div className="text-center mb-16">
<div className="inline-flex items-center gap-2 bg-[var(--color-primary)]/10 text-[var(--color-primary)] px-4 py-2 rounded-full text-sm font-medium mb-6">
<Clock className="w-4 h-4" />
<div className="inline-flex items-center gap-2 bg-[var(--color-primary)]/10 dark:bg-[var(--color-primary)]/20 border border-[var(--color-primary)]/20 dark:border-[var(--color-primary)]/30 text-[var(--color-primary)] px-4 py-2 rounded-full text-sm font-medium mb-6">
<Clock className="w-5 h-5" />
<span>{t('automatic.badge', 'La Funcionalidad Estrella')}</span>
</div>
<h2 className="text-3xl lg:text-5xl font-extrabold text-[var(--text-primary)] mb-6">
{t('automatic.title', 'Tu Asistente Personal Que Nunca Duerme')}
<h2 className="text-4xl lg:text-5xl font-bold text-[var(--text-primary)] mb-6">
{t('automatic.title', 'Tu Asistente Personal')}
<span className="block bg-gradient-to-r from-[var(--color-primary)] to-[var(--color-secondary)] bg-clip-text text-transparent">
{t('automatic.title_highlight', 'Que Nunca Duerme')}
</span>
</h2>
<p className="text-xl text-[var(--text-secondary)] max-w-3xl mx-auto">
<p className="text-xl text-[var(--text-secondary)] max-w-3xl mx-auto leading-relaxed">
{t('automatic.intro', 'Imagina contratar un ayudante súper organizado que llega a las 5:30 AM (antes que tú) y hace todo esto AUTOMÁTICAMENTE:')}
</p>
</div>
@@ -229,61 +224,65 @@ const FeaturesPage: React.FC = () => {
/>
{/* Morning Result */}
<div className="bg-gradient-to-r from-[var(--color-primary)] to-orange-600 rounded-2xl p-8 text-white">
<div className="text-center max-w-3xl mx-auto">
<Clock className="w-16 h-16 mx-auto mb-4" />
<h3 className="text-2xl lg:text-3xl font-bold mb-4">
<div className="relative overflow-hidden bg-gradient-to-r from-[var(--color-primary)] to-orange-600 rounded-2xl p-8 text-white shadow-xl mt-8">
<div className="absolute inset-0 bg-gradient-to-r from-transparent via-white/10 to-transparent animate-shimmer"></div>
<div className="relative text-center max-w-3xl mx-auto">
<div className="relative inline-block mb-6">
<Clock className="w-16 h-16 mx-auto" />
<div className="absolute inset-0 rounded-full bg-white/20 blur-xl animate-pulse"></div>
</div>
<h3 className="text-2xl lg:text-3xl font-bold mb-6">
{t('automatic.result.title', 'A las 6:00 AM recibes un email:')}
</h3>
<div className="space-y-2 text-lg">
<div className="flex items-center justify-center gap-2">
<CheckCircle2 className="w-6 h-6" />
<span>{t('automatic.result.item1', 'Predicción del día hecha')}</span>
<div className="grid md:grid-cols-2 gap-4 text-left">
<div className="flex items-center gap-3 bg-white/10 backdrop-blur-sm rounded-lg p-4">
<CheckCircle2 className="w-6 h-6 flex-shrink-0" />
<span className="text-lg">{t('automatic.result.item1', 'Predicción del día hecha')}</span>
</div>
<div className="flex items-center justify-center gap-2">
<CheckCircle2 className="w-6 h-6" />
<span>{t('automatic.result.item2', 'Plan de producción listo')}</span>
<div className="flex items-center gap-3 bg-white/10 backdrop-blur-sm rounded-lg p-4">
<CheckCircle2 className="w-6 h-6 flex-shrink-0" />
<span className="text-lg">{t('automatic.result.item2', 'Plan de producción listo')}</span>
</div>
<div className="flex items-center justify-center gap-2">
<CheckCircle2 className="w-6 h-6" />
<span>{t('automatic.result.item3', '3 pedidos creados (aprobar con 1 clic)')}</span>
<div className="flex items-center gap-3 bg-white/10 backdrop-blur-sm rounded-lg p-4">
<CheckCircle2 className="w-6 h-6 flex-shrink-0" />
<span className="text-lg">{t('automatic.result.item3', '3 pedidos creados (aprobar con 1 clic)')}</span>
</div>
<div className="flex items-center justify-center gap-2">
<CheckCircle2 className="w-6 h-6" />
<span>{t('automatic.result.item4', 'Alerta: "Leche caduca en 2 días, úsala primero"')}</span>
<div className="flex items-center gap-3 bg-white/10 backdrop-blur-sm rounded-lg p-4">
<CheckCircle2 className="w-6 h-6 flex-shrink-0" />
<span className="text-lg">{t('automatic.result.item4', 'Alerta: "Leche caduca en 2 días, úsala primero"')}</span>
</div>
</div>
</div>
</div>
{/* What it eliminates */}
<div className="bg-[var(--bg-secondary)] rounded-2xl p-8 border border-[var(--border-primary)]">
<div className="bg-gradient-to-br from-[var(--bg-secondary)] to-[var(--bg-tertiary)] rounded-2xl p-8 border border-[var(--border-primary)] shadow-lg mt-8">
<h3 className="text-2xl font-bold text-[var(--text-primary)] mb-6 text-center">
{t('automatic.eliminates.title', 'Lo que ELIMINA de tu rutina:')}
</h3>
<div className="grid md:grid-cols-2 gap-4">
<div className="flex items-start gap-3">
<span className="text-red-500 text-xl"></span>
<div className="flex items-start gap-3 p-3 rounded-lg hover:bg-[var(--bg-primary)] transition-colors">
<span className="text-red-500 text-xl flex-shrink-0"></span>
<span className="text-[var(--text-secondary)]">{t('automatic.eliminates.item1', 'Adivinar cuánto hacer')}</span>
</div>
<div className="flex items-start gap-3">
<span className="text-red-500 text-xl"></span>
<div className="flex items-start gap-3 p-3 rounded-lg hover:bg-[var(--bg-primary)] transition-colors">
<span className="text-red-500 text-xl flex-shrink-0"></span>
<span className="text-[var(--text-secondary)]">{t('automatic.eliminates.item2', 'Contar inventario manualmente')}</span>
</div>
<div className="flex items-start gap-3">
<span className="text-red-500 text-xl"></span>
<div className="flex items-start gap-3 p-3 rounded-lg hover:bg-[var(--bg-primary)] transition-colors">
<span className="text-red-500 text-xl flex-shrink-0"></span>
<span className="text-[var(--text-secondary)]">{t('automatic.eliminates.item3', 'Calcular cuándo pedir a proveedores')}</span>
</div>
<div className="flex items-start gap-3">
<span className="text-red-500 text-xl"></span>
<div className="flex items-start gap-3 p-3 rounded-lg hover:bg-[var(--bg-primary)] transition-colors">
<span className="text-red-500 text-xl flex-shrink-0"></span>
<span className="text-[var(--text-secondary)]">{t('automatic.eliminates.item4', 'Recordar fechas de caducidad')}</span>
</div>
<div className="flex items-start gap-3">
<span className="text-red-500 text-xl"></span>
<div className="flex items-start gap-3 p-3 rounded-lg hover:bg-[var(--bg-primary)] transition-colors">
<span className="text-red-500 text-xl flex-shrink-0"></span>
<span className="text-[var(--text-secondary)]">{t('automatic.eliminates.item5', 'Preocuparte por quedarte sin stock')}</span>
</div>
<div className="flex items-start gap-3">
<span className="text-red-500 text-xl"></span>
<div className="flex items-start gap-3 p-3 rounded-lg hover:bg-[var(--bg-primary)] transition-colors">
<span className="text-red-500 text-xl flex-shrink-0"></span>
<span className="text-[var(--text-secondary)]">{t('automatic.eliminates.item6', 'Desperdiciar ingredientes caducados')}</span>
</div>
</div>
@@ -294,18 +293,21 @@ const FeaturesPage: React.FC = () => {
</section>
{/* Feature 2: Local Intelligence */}
<section id="local-intelligence" className="py-20 bg-[var(--bg-secondary)] scroll-mt-24">
<section id="local-intelligence" className="py-20 bg-[var(--bg-secondary)]">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<ScrollReveal variant="fadeUp" delay={0.1}>
<div className="text-center mb-16">
<div className="inline-flex items-center gap-2 bg-[var(--color-primary)]/10 text-[var(--color-primary)] px-4 py-2 rounded-full text-sm font-medium mb-6">
<MapPin className="w-4 h-4" />
<div className="inline-flex items-center gap-2 bg-[var(--color-primary)]/10 dark:bg-[var(--color-primary)]/20 border border-[var(--color-primary)]/20 dark:border-[var(--color-primary)]/30 text-[var(--color-primary)] px-4 py-2 rounded-full text-sm font-medium mb-6">
<MapPin className="w-5 h-5" />
<span>{t('local.badge', 'Tu Ventaja Competitiva')}</span>
</div>
<h2 className="text-3xl lg:text-5xl font-extrabold text-[var(--text-primary)] mb-6">
{t('local.title', 'Tu Panadería Es Única. La IA También.')}
<h2 className="text-4xl lg:text-5xl font-bold text-[var(--text-primary)] mb-6">
{t('local.title', 'Tu Panadería Es Única.')}
<span className="block bg-gradient-to-r from-[var(--color-primary)] to-[var(--color-secondary)] bg-clip-text text-transparent">
{t('local.title_highlight', 'La IA También.')}
</span>
</h2>
<p className="text-xl text-[var(--text-secondary)] max-w-3xl mx-auto">
<p className="text-xl text-[var(--text-secondary)] max-w-3xl mx-auto leading-relaxed">
{t('local.intro', 'Las IA genéricas saben que es lunes. La TUYA sabe que:')}
</p>
</div>
@@ -314,8 +316,8 @@ const FeaturesPage: React.FC = () => {
<div className="grid md:grid-cols-2 gap-8 max-w-6xl mx-auto">
{/* Schools */}
<ScrollReveal variant="fadeUp" delay={0.1}>
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] hover:shadow-xl transition-all">
<div className="w-12 h-12 bg-blue-500/10 rounded-xl flex items-center justify-center mb-4">
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] shadow-lg hover:shadow-2xl transition-all duration-300 hover:-translate-y-1">
<div className="w-12 h-12 bg-gradient-to-br from-blue-500/10 to-blue-600/10 rounded-xl flex items-center justify-center mb-4">
<School className="w-6 h-6 text-blue-600" />
</div>
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-3">
@@ -340,8 +342,8 @@ const FeaturesPage: React.FC = () => {
{/* Offices */}
<ScrollReveal variant="fadeUp" delay={0.15}>
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] hover:shadow-xl transition-all">
<div className="w-12 h-12 bg-purple-500/10 rounded-xl flex items-center justify-center mb-4">
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] shadow-lg hover:shadow-2xl transition-all duration-300 hover:-translate-y-1">
<div className="w-12 h-12 bg-gradient-to-br from-purple-500/10 to-purple-600/10 rounded-xl flex items-center justify-center mb-4">
<Building2 className="w-6 h-6 text-purple-600" />
</div>
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-3">
@@ -366,8 +368,8 @@ const FeaturesPage: React.FC = () => {
{/* Gyms */}
<ScrollReveal variant="fadeUp" delay={0.2}>
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] hover:shadow-xl transition-all">
<div className="w-12 h-12 bg-green-500/10 rounded-xl flex items-center justify-center mb-4">
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] shadow-lg hover:shadow-2xl transition-all duration-300 hover:-translate-y-1">
<div className="w-12 h-12 bg-gradient-to-br from-green-500/10 to-green-600/10 rounded-xl flex items-center justify-center mb-4">
<Dumbbell className="w-6 h-6 text-green-600" />
</div>
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-3">
@@ -392,8 +394,8 @@ const FeaturesPage: React.FC = () => {
{/* Competition */}
<ScrollReveal variant="fadeUp" delay={0.25}>
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] hover:shadow-xl transition-all">
<div className="w-12 h-12 bg-amber-500/10 rounded-xl flex items-center justify-center mb-4">
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] shadow-lg hover:shadow-2xl transition-all duration-300 hover:-translate-y-1">
<div className="w-12 h-12 bg-gradient-to-br from-amber-500/10 to-amber-600/10 rounded-xl flex items-center justify-center mb-4">
<ShoppingBag className="w-6 h-6 text-amber-600" />
</div>
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-3">
@@ -418,8 +420,8 @@ const FeaturesPage: React.FC = () => {
{/* Weather */}
<ScrollReveal variant="fadeUp" delay={0.3}>
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] hover:shadow-xl transition-all">
<div className="w-12 h-12 bg-sky-500/10 rounded-xl flex items-center justify-center mb-4">
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] shadow-lg hover:shadow-2xl transition-all duration-300 hover:-translate-y-1">
<div className="w-12 h-12 bg-gradient-to-br from-sky-500/10 to-sky-600/10 rounded-xl flex items-center justify-center mb-4">
<Cloud className="w-6 h-6 text-sky-600" />
</div>
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-3">
@@ -444,8 +446,8 @@ const FeaturesPage: React.FC = () => {
{/* Events */}
<ScrollReveal variant="fadeUp" delay={0.35}>
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] hover:shadow-xl transition-all">
<div className="w-12 h-12 bg-pink-500/10 rounded-xl flex items-center justify-center mb-4">
<div className="bg-[var(--bg-primary)] rounded-2xl p-6 border border-[var(--border-primary)] shadow-lg hover:shadow-2xl transition-all duration-300 hover:-translate-y-1">
<div className="w-12 h-12 bg-gradient-to-br from-pink-500/10 to-pink-600/10 rounded-xl flex items-center justify-center mb-4">
<PartyPopper className="w-6 h-6 text-pink-600" />
</div>
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-3">
@@ -471,37 +473,49 @@ const FeaturesPage: React.FC = () => {
{/* Why it matters */}
<ScrollReveal variant="fadeUp" delay={0.4}>
<div className="mt-12 max-w-4xl mx-auto bg-gradient-to-r from-[var(--color-primary)] to-orange-600 rounded-2xl p-8 text-white">
<h3 className="text-2xl font-bold mb-4 text-center">
{t('local.why_matters.title', 'Por qué importa:')}
</h3>
<div className="grid md:grid-cols-2 gap-6">
<div className="bg-white/10 rounded-lg p-4">
<p className="font-medium mb-2">{t('local.why_matters.generic', 'IA genérica:')}</p>
<p className="text-white/90">{t('local.why_matters.generic_example', '"Es lunes → vende X"')}</p>
<div className="mt-12 max-w-4xl mx-auto relative overflow-hidden bg-gradient-to-r from-[var(--color-primary)] to-orange-600 rounded-2xl p-8 text-white shadow-xl">
<div className="absolute inset-0 bg-gradient-to-r from-transparent via-white/10 to-transparent animate-shimmer"></div>
<div className="relative">
<h3 className="text-2xl font-bold mb-6 text-center">
{t('local.why_matters.title', 'Por qué importa:')}
</h3>
<div className="grid md:grid-cols-2 gap-6">
<div className="bg-white/10 backdrop-blur-sm rounded-lg p-5 border border-white/20">
<p className="font-semibold mb-3 text-lg">{t('local.why_matters.generic', 'IA genérica:')}</p>
<p className="text-white/90 text-base leading-relaxed">{t('local.why_matters.generic_example', '"Es lunes → vende X"')}</p>
</div>
<div className="bg-white/20 backdrop-blur-sm rounded-lg p-5 border-2 border-white shadow-lg">
<p className="font-semibold mb-3 text-lg">{t('local.why_matters.yours', 'TU IA:')}</p>
<p className="text-white/90 text-base leading-relaxed">{t('local.why_matters.yours_example', '"Es lunes, llueve, colegio cerrado (festivo local), mercadillo cancelado → vende Y"')}</p>
</div>
</div>
<div className="bg-white/20 rounded-lg p-4 border-2 border-white">
<p className="font-medium mb-2">{t('local.why_matters.yours', 'TU IA:')}</p>
<p className="text-white/90">{t('local.why_matters.yours_example', '"Es lunes, llueve, colegio cerrado (festivo local), mercadillo cancelado → vende Y"')}</p>
<div className="text-center mt-8 p-4 bg-white/10 backdrop-blur-sm rounded-lg">
<p className="text-xl font-bold">
Precisión: <span className="text-3xl"><AnimatedCounter value={92} suffix="%" className="inline" /></span> <span className="text-white/80 text-lg">(vs 60-70% de sistemas genéricos)</span>
</p>
</div>
</div>
<p className="text-center mt-6 text-xl font-bold">
Precisión: <AnimatedCounter value={92} suffix="%" className="inline text-[var(--color-primary)]" /> (vs 60-70% de sistemas genéricos)
</p>
</div>
</ScrollReveal>
</div>
</section>
{/* Feature 3: Demand Forecasting */}
<section id="demand-forecasting" className="py-20 bg-[var(--bg-primary)] scroll-mt-24">
<section id="demand-forecasting" className="py-20 bg-[var(--bg-primary)]">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<ScrollReveal variant="fadeUp" delay={0.1}>
<div className="text-center mb-12">
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)] mb-4">
Sabe Cuánto Venderás Mañana (<AnimatedCounter value={92} suffix="%" className="inline text-[var(--color-primary)]" /> de Precisión)
<div className="inline-flex items-center gap-2 bg-[var(--color-primary)]/10 dark:bg-[var(--color-primary)]/20 border border-[var(--color-primary)]/20 dark:border-[var(--color-primary)]/30 text-[var(--color-primary)] px-4 py-2 rounded-full text-sm font-medium mb-6">
<Target className="w-5 h-5" />
<span>{t('forecasting.badge', 'Predicción Inteligente')}</span>
</div>
<h2 className="text-4xl lg:text-5xl font-bold text-[var(--text-primary)] mb-4">
{t('forecasting.title', 'Sabe Cuánto Venderás Mañana')}
<span className="block">
(<AnimatedCounter value={92} suffix="%" className="inline bg-gradient-to-r from-[var(--color-primary)] to-[var(--color-secondary)] bg-clip-text text-transparent" /> de Precisión)
</span>
</h2>
<p className="text-xl text-[var(--text-secondary)] max-w-3xl mx-auto">
<p className="text-xl text-[var(--text-secondary)] max-w-3xl mx-auto leading-relaxed">
{t('forecasting.subtitle', 'No es magia. Es matemáticas con tus datos.')}
</p>
</div>
@@ -570,12 +584,19 @@ const FeaturesPage: React.FC = () => {
</section>
{/* Feature 4: Reduce Waste = Save Money */}
<section id="waste-reduction" className="py-20 bg-[var(--bg-secondary)] scroll-mt-24">
<section id="waste-reduction" className="py-20 bg-[var(--bg-secondary)]">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<ScrollReveal variant="fadeUp" delay={0.1}>
<div className="text-center mb-12">
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)] mb-4">
{t('waste.title', 'Menos Pan en la Basura, Más Dinero en Tu Bolsillo')}
<div className="inline-flex items-center gap-2 bg-green-500/10 dark:bg-green-500/20 border border-green-500/20 dark:border-green-500/30 text-green-600 dark:text-green-400 px-4 py-2 rounded-full text-sm font-medium mb-6">
<Recycle className="w-5 h-5" />
<span>{t('waste.badge', 'Ahorro Directo')}</span>
</div>
<h2 className="text-4xl lg:text-5xl font-bold text-[var(--text-primary)] mb-4">
{t('waste.title_part1', 'Menos Pan en la Basura,')}
<span className="block bg-gradient-to-r from-green-600 to-emerald-600 bg-clip-text text-transparent">
{t('waste.title_part2', 'Más Dinero en Tu Bolsillo')}
</span>
</h2>
</div>
</ScrollReveal>
@@ -640,16 +661,19 @@ const FeaturesPage: React.FC = () => {
</section>
{/* Feature 5: Sustainability + Grants */}
<section id="sustainability" className="py-20 bg-[var(--bg-primary)] scroll-mt-24">
<section id="sustainability" className="py-20 bg-[var(--bg-primary)]">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<ScrollReveal variant="fadeUp" delay={0.1}>
<div className="text-center mb-12">
<div className="inline-flex items-center gap-2 bg-green-500/10 text-green-600 dark:text-green-400 px-4 py-2 rounded-full text-sm font-medium mb-6">
<Leaf className="w-4 h-4" />
<span>{t('sustainability.badge', 'Funcionalidad del Sistema')}</span>
<div className="inline-flex items-center gap-2 bg-green-500/10 dark:bg-green-500/20 border border-green-500/20 dark:border-green-500/30 text-green-600 dark:text-green-400 px-4 py-2 rounded-full text-sm font-medium mb-6">
<Leaf className="w-5 h-5" />
<span>{t('sustainability.badge', 'Impacto Positivo')}</span>
</div>
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)] mb-4">
{t('sustainability.title', 'Impacto Ambiental y Sostenibilidad')}
<h2 className="text-4xl lg:text-5xl font-bold text-[var(--text-primary)] mb-4">
{t('sustainability.title', 'Impacto Ambiental')}
<span className="block bg-gradient-to-r from-green-600 to-emerald-600 bg-clip-text text-transparent">
{t('sustainability.title_highlight', 'y Sostenibilidad')}
</span>
</h2>
</div>
</ScrollReveal>
@@ -813,22 +837,32 @@ const FeaturesPage: React.FC = () => {
</section>
{/* Feature 6: Business Models */}
<section id="business-models" className="py-20 bg-[var(--bg-secondary)] scroll-mt-24">
<section id="business-models" className="py-20 bg-[var(--bg-secondary)]">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-12">
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)] mb-4">
{t('business_models.title', 'Para Cualquier Modelo de Negocio')}
</h2>
<p className="text-xl text-[var(--text-secondary)]">
{t('business_models.subtitle', 'No importa cómo trabajes, funciona para ti')}
</p>
</div>
<ScrollReveal variant="fadeUp" delay={0.1}>
<div className="text-center mb-12">
<div className="inline-flex items-center gap-2 bg-[var(--color-primary)]/10 dark:bg-[var(--color-primary)]/20 border border-[var(--color-primary)]/20 dark:border-[var(--color-primary)]/30 text-[var(--color-primary)] px-4 py-2 rounded-full text-sm font-medium mb-6">
<Store className="w-5 h-5" />
<span>{t('business_models.badge', 'Flexible y Adaptable')}</span>
</div>
<h2 className="text-4xl lg:text-5xl font-bold text-[var(--text-primary)] mb-4">
{t('business_models.title', 'Para Cualquier')}
<span className="block bg-gradient-to-r from-[var(--color-primary)] to-[var(--color-secondary)] bg-clip-text text-transparent">
{t('business_models.title_highlight', 'Modelo de Negocio')}
</span>
</h2>
<p className="text-xl text-[var(--text-secondary)] max-w-3xl mx-auto leading-relaxed">
{t('business_models.subtitle', 'No importa cómo trabajes, funciona para ti')}
</p>
</div>
</ScrollReveal>
<div className="grid md:grid-cols-2 gap-8 max-w-5xl mx-auto">
<div className="bg-[var(--bg-primary)] rounded-2xl p-8 border-2 border-[var(--color-primary)]">
<div className="w-12 h-12 bg-[var(--color-primary)]/10 rounded-xl flex items-center justify-center mb-4">
<Store className="w-6 h-6 text-[var(--color-primary)]" />
</div>
<ScrollReveal variant="fadeUp" delay={0.15}>
<div className="bg-[var(--bg-primary)] rounded-2xl p-8 border-2 border-[var(--color-primary)] shadow-lg hover:shadow-2xl transition-all duration-300 hover:-translate-y-1">
<div className="w-12 h-12 bg-gradient-to-br from-[var(--color-primary)]/10 to-[var(--color-primary)]/20 rounded-xl flex items-center justify-center mb-4">
<Store className="w-6 h-6 text-[var(--color-primary)]" />
</div>
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-4">
{t('business_models.local.title', 'Panadería Producción Local')}
</h3>
@@ -845,9 +879,11 @@ const FeaturesPage: React.FC = () => {
<span className="text-[var(--text-secondary)]">{t('business_models.local.benefit2', 'Gestiona inventario de un punto')}</span>
</li>
</ul>
</div>
</div>
</ScrollReveal>
<div className="bg-[var(--bg-primary)] rounded-2xl p-8 border-2 border-blue-600">
<ScrollReveal variant="fadeUp" delay={0.2}>
<div className="bg-[var(--bg-primary)] rounded-2xl p-8 border-2 border-blue-600 shadow-lg hover:shadow-2xl transition-all duration-300 hover:-translate-y-1">
<div className="w-12 h-12 bg-blue-500/10 rounded-xl flex items-center justify-center mb-4">
<Globe className="w-6 h-6 text-blue-600" />
</div>
@@ -871,33 +907,68 @@ const FeaturesPage: React.FC = () => {
<span className="text-[var(--text-secondary)]">{t('business_models.central.benefit3', 'Gestiona inventario central + puntos')}</span>
</li>
</ul>
</div>
</div>
</ScrollReveal>
</div>
</div>
</section>
{/* Final CTA */}
<section className="py-20 bg-gradient-to-r from-[var(--color-primary)] to-orange-600">
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
<h2 className="text-3xl lg:text-4xl font-bold text-white mb-6">
{t('cta.title', 'Ver Bakery-IA en Acción')}
</h2>
<p className="text-xl text-white/90 mb-8">
{t('cta.subtitle', 'Solicita una demo personalizada para tu panadería')}
</p>
<Link to={getDemoUrl()}>
<Button
size="lg"
className="bg-white text-[var(--color-primary)] hover:bg-gray-100 font-bold text-lg px-8 py-4"
>
{t('cta.button', 'Solicitar Demo')}
<ArrowRight className="ml-2 w-5 h-5" />
</Button>
</Link>
<section className="relative overflow-hidden py-24 bg-gradient-to-r from-[var(--color-primary)] to-orange-600">
{/* Animated shimmer effect */}
<div className="absolute inset-0 bg-gradient-to-r from-transparent via-white/10 to-transparent animate-shimmer"></div>
{/* Animated background blobs */}
<div className="absolute top-0 left-0 w-96 h-96 bg-white/10 rounded-full blur-3xl animate-pulse"></div>
<div className="absolute bottom-0 right-0 w-96 h-96 bg-white/10 rounded-full blur-3xl animate-pulse" style={{ animationDelay: '1s' }}></div>
<div className="relative max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
<ScrollReveal variant="fadeUp" delay={0.1}>
<div className="text-center space-y-6">
<div className="inline-flex items-center gap-2 px-4 py-2 rounded-full bg-white/20 backdrop-blur-sm border border-white/30 mb-4">
<Sparkles className="w-5 h-5 text-white" />
<span className="text-sm font-medium text-white">{t('cta.badge', 'Prueba Gratuita Disponible')}</span>
</div>
<h2 className="text-4xl lg:text-5xl font-bold text-white mb-6 leading-tight">
{t('cta.title', 'Ver Bakery-IA en Acción')}
</h2>
<p className="text-xl lg:text-2xl text-white/90 mb-8 max-w-2xl mx-auto leading-relaxed">
{t('cta.subtitle', 'Solicita una demo personalizada para tu panadería')}
</p>
<div className="flex flex-col sm:flex-row items-center justify-center gap-4 pt-4">
<Link to={getDemoUrl()}>
<Button
size="lg"
className="bg-white text-[var(--color-primary)] hover:bg-gray-50 hover:shadow-2xl font-bold text-lg px-10 py-5 transition-all duration-300 hover:scale-105 group shadow-xl"
>
<Sparkles className="mr-2 w-5 h-5" />
{t('cta.button', 'Solicitar Demo')}
<ArrowRight className="ml-2 w-5 h-5 group-hover:translate-x-1 transition-transform" />
</Button>
</Link>
</div>
<div className="flex items-center justify-center gap-8 pt-6 text-sm text-white/80">
<div className="flex items-center gap-2">
<CheckCircle2 className="w-5 h-5" />
<span>{t('cta.feature1', 'Sin compromiso')}</span>
</div>
<div className="flex items-center gap-2">
<CheckCircle2 className="w-5 h-5" />
<span>{t('cta.feature2', 'Configuración en minutos')}</span>
</div>
<div className="flex items-center gap-2">
<CheckCircle2 className="w-5 h-5" />
<span>{t('cta.feature3', 'Soporte dedicado')}</span>
</div>
</div>
</div>
</ScrollReveal>
</div>
</section>
</div>
</div>
</PublicLayout>
);
};