'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 (
{t('intro')}
{t('rightsSubtitle')}
{t(`rights.${right.key}.description`)}
{t('rightsCta.text')}
{t('principlesSubtitle')}
{t(`principles.${principle.key}.description`)}
{t('measuresSubtitle')}
{t('register.body')}
{t('dpo.body')}