'use client'; import { useRef } from 'react'; import { useTranslations } from 'next-intl'; import { motion, useInView } from 'framer-motion'; import { Shield, UserCheck, Database, FileText, Globe, Clock, CheckCircle, Download, Trash2, Edit, Eye, Mail, type LucideIcon, } from 'lucide-react'; import { Link } from '@/i18n/navigation'; import { LandingHeader, LandingFooter } from '@/components/layout'; type RightKey = 'access' | 'rectification' | 'erasure' | 'portability'; type PrincipleKey = 'minimization' | 'retention' | 'integrity' | 'transparency'; type MeasureKey = 'technical' | 'organizational'; const RIGHTS: { key: RightKey; icon: LucideIcon }[] = [ { key: 'access', icon: Eye }, { key: 'rectification', icon: Edit }, { key: 'erasure', icon: Trash2 }, { key: 'portability', icon: Download }, ]; const PRINCIPLES: { key: PrincipleKey; icon: LucideIcon }[] = [ { key: 'minimization', icon: Database }, { key: 'retention', icon: Clock }, { key: 'integrity', icon: Shield }, { key: 'transparency', icon: FileText }, ]; const MEASURES: MeasureKey[] = ['technical', 'organizational']; const MEASURE_ITEMS = ['item1', 'item2', 'item3', 'item4', 'item5'] as const; const REGISTER_ITEMS = ['item1', 'item2', 'item3', 'item4', 'item5'] as const; export default function CompliancePage() { const t = useTranslations('marketing.compliance'); const heroRef = useRef(null); const contentRef = useRef(null); const isHeroInView = useInView(heroRef, { once: true }); const isContentInView = useInView(contentRef, { once: true }); const containerVariants = { hidden: { opacity: 0, y: 50 }, visible: { opacity: 1, y: 0, transition: { duration: 0.6, staggerChildren: 0.1, }, }, }; const itemVariants = { hidden: { opacity: 0, y: 20 }, visible: { opacity: 1, y: 0, transition: { duration: 0.5 }, }, }; return (
{/* Hero Section */}
{t('badge')}

{t('title1')}
{t('title2')}

{t('intro')}

{t('badges.compliant')}
{t('badges.dpo')}
{/* Wave */}
{/* Your Rights */}

{t('rightsTitle')}

{t('rightsSubtitle')}

{RIGHTS.map((right) => { const IconComponent = right.icon; return (

{t(`rights.${right.key}.title`)}

{t(`rights.${right.key}.description`)}

); })}
{/* Exercise Rights CTA */}

{t('rightsCta.text')}

{t('rightsCta.login')} {t('rightsCta.dpo')}
{/* Principles */}

{t('principlesTitle')}

{t('principlesSubtitle')}

{PRINCIPLES.map((principle, index) => { const IconComponent = principle.icon; return (

{t(`principles.${principle.key}.title`)}

{t(`principles.${principle.key}.description`)}

); })}
{/* Technical & Organizational Measures */}

{t('measuresTitle')}

{t('measuresSubtitle')}

{MEASURES.map((key, index) => (

{t(`measures.${key}.title`)}

    {MEASURE_ITEMS.map((itemKey) => (
  • {t(`measures.${key}.${itemKey}` as any)}
  • ))}
))}
{/* Data Processing Register */}

{t('register.title')}

{t('register.body')}

    {REGISTER_ITEMS.map((itemKey) => (
  • {t(`register.${itemKey}` as any)}
  • ))}
{/* Contact DPO */}

{t('dpo.title')}

{t('dpo.body')}

dpo@xpeditis.com {t('dpo.privacyLink')}
); }