diff --git a/frontend/src/components/landing/hero-visual.tsx b/frontend/src/components/landing/hero-visual.tsx new file mode 100644 index 0000000..c436610 --- /dev/null +++ b/frontend/src/components/landing/hero-visual.tsx @@ -0,0 +1,187 @@ +'use client'; + +import { useEffect, useState } from 'react'; +import { motion, useReducedMotion, AnimatePresence } from 'framer-motion'; +import { Languages } from 'lucide-react'; +import { cn } from '@/lib/utils'; + +/** + * Landing hero visual — the product promise drawn instead of photographed: + * one document whose layout never moves while its language changes. + * Pure geometry (bars, table, chart) + one real translated heading per card. + */ + +const SOURCE_HEADING = 'Rapport annuel'; + +const TARGETS = [ + { code: 'EN', heading: 'Annual report', widths: [0.94, 0.82, 0.88, 0.58, 0.76] }, + { code: 'ES', heading: 'Informe anual', widths: [0.9, 0.86, 0.84, 0.64, 0.8] }, + { code: 'DE', heading: 'Jahresbericht', widths: [0.98, 0.78, 0.92, 0.52, 0.7] }, +] as const; + +const SOURCE_WIDTHS = [0.92, 0.8, 0.86, 0.62, 0.78]; + +const CYCLE_MS = 3600; + +function TextLines({ widths, accent = false }: { widths: readonly number[]; accent?: boolean }) { + return ( +
+ {heading} +
+ ++ {t('landing.hero.visualCaption')} +
diff --git a/frontend/src/lib/i18n/messages/en/landing.json b/frontend/src/lib/i18n/messages/en/landing.json index 534f949..b9f5d66 100644 --- a/frontend/src/lib/i18n/messages/en/landing.json +++ b/frontend/src/lib/i18n/messages/en/landing.json @@ -149,5 +149,6 @@ "landing.translate.aiAnalysis": "Active AI Analysis", "landing.translate.processing": "Processing", "landing.translate.preservingLayout": "Your layout is being preserved", - "landing.formats.pill": "COMPATIBILITY" + "landing.formats.pill": "COMPATIBILITY", + "landing.hero.visualCaption": "Same layout, new language — nothing else moves" } diff --git a/frontend/src/lib/i18n/messages/fr/landing.json b/frontend/src/lib/i18n/messages/fr/landing.json index 95808eb..b87fcf4 100644 --- a/frontend/src/lib/i18n/messages/fr/landing.json +++ b/frontend/src/lib/i18n/messages/fr/landing.json @@ -149,5 +149,6 @@ "landing.translate.aiAnalysis": "Analyse IA Active", "landing.translate.processing": "Traitement en cours", "landing.translate.preservingLayout": "Votre mise en page est en cours de préservation", - "landing.formats.pill": "COMPATIBILITÉ" + "landing.formats.pill": "COMPATIBILITÉ", + "landing.hero.visualCaption": "Même mise en page, nouvelle langue — rien d'autre ne bouge" }