'use client'; import { useRef } from 'react'; import { useTranslations } from 'next-intl'; import { motion, useInView } from 'framer-motion'; import { Newspaper, Download, ExternalLink, Calendar, Mail, Phone, FileText, Image as ImageIcon, Video, Award, TrendingUp, Users, Globe, ArrowRight, Quote, type LucideIcon, } from 'lucide-react'; import { LandingHeader, LandingFooter } from '@/components/layout'; type StatKey = 'funding' | 'clients' | 'carriers' | 'countries'; type ReleaseKey = 'seriesA' | 'clients500' | 'cmaCgm' | 'tracking' | 'rotterdam'; type CoverageKey = 'lesEchos' | 'bfm' | 'jmm' | 'techEu'; type KitItemKey = 'visuals' | 'dossier' | 'videos'; type MilestoneKey = '2021' | '2022' | '2023' | '2024' | '2025'; const STATS: { key: StatKey; value: string }[] = [ { key: 'funding', value: '15M€' }, { key: 'clients', value: '500+' }, { key: 'carriers', value: '50+' }, { key: 'countries', value: '15' }, ]; const RELEASES: { id: number; key: ReleaseKey }[] = [ { id: 1, key: 'seriesA' }, { id: 2, key: 'clients500' }, { id: 3, key: 'cmaCgm' }, { id: 4, key: 'tracking' }, { id: 5, key: 'rotterdam' }, ]; const COVERAGE: { key: CoverageKey; outlet: string; url: string }[] = [ { key: 'lesEchos', outlet: 'Les Echos', url: '#' }, { key: 'bfm', outlet: 'BFM Business', url: '#' }, { key: 'jmm', outlet: 'Journal de la Marine Marchande', url: '#' }, { key: 'techEu', outlet: 'Tech.eu', url: '#' }, ]; const KIT_ITEMS: { key: KitItemKey; icon: LucideIcon }[] = [ { key: 'visuals', icon: ImageIcon }, { key: 'dossier', icon: FileText }, { key: 'videos', icon: Video }, ]; const MILESTONES: { key: MilestoneKey; icon: LucideIcon }[] = [ { key: '2021', icon: Award }, { key: '2022', icon: TrendingUp }, { key: '2023', icon: TrendingUp }, { key: '2024', icon: Users }, { key: '2025', icon: Globe }, ]; export default function PressPage() { const t = useTranslations('marketing.press'); const heroRef = useRef(null); const newsRef = useRef(null); const resourcesRef = useRef(null); const contactRef = useRef(null); const milestonesRef = useRef(null); const isHeroInView = useInView(heroRef, { once: true }); const isNewsInView = useInView(newsRef, { once: true }); const isResourcesInView = useInView(resourcesRef, { once: true }); const isContactInView = useInView(contactRef, { once: true }); const isMilestonesInView = useInView(milestonesRef, { 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('releasesSubtitle')}
{t(`releases.${release.key}.excerpt`)}
{t('coverageSubtitle')}
{t('kitSubtitle')}
{t(`kit.${item.key}.description`)}
{t('milestonesSubtitle')}
{t('contact.body')}
{t('contact.responsibleBio')}
“{t('contact.quote')}”