import { useMemo } from 'react' import { Link } from 'react-router-dom' import usePageMeta from '../hooks/usePageMeta' import bannerImg from '../assets/img/banner-accueil.webp' // Tous les lots possibles hors grand lot (déjà mis en avant dans sa propre // carte). Chaque lot devient sa propre carte flottante, étalée en quinconce // le long de la partie droite de l'illustration plutôt qu'empilée en liste. const gains = [ { label: 'Infuseur à thé', top: '26%', right: '26%', delay: 700, variant: 'a' }, { label: 'Boîte 100 g détox ou infusion', top: '22%', right: '1%', delay: 850, variant: 'b' }, { label: 'Boîte 100 g thé signature', top: '48%', right: '30%', delay: 1000, variant: 'a' }, { label: 'Coffret découverte 39 €', top: '78%', right: '2%', delay: 1150, variant: 'b' }, { label: 'Coffret découverte 69 €', top: '84%', right: '24%', delay: 1300, variant: 'a' }, ] // Légère inclinaison 3D des cartes de la bannière au passage de la souris, // façon « tilt card ». Fonctions déclarées hors du composant : elles ne // dépendent d'aucun state, inutile de les recréer à chaque rendu. function handleCardTilt(e) { const el = e.currentTarget const rect = el.getBoundingClientRect() const px = (e.clientX - rect.left) / rect.width - 0.5 const py = (e.clientY - rect.top) / rect.height - 0.5 el.style.transform = `perspective(700px) rotateX(${(-py * 12).toFixed(2)}deg) rotateY(${(px * 12).toFixed(2)}deg) scale(1.04)` } function resetCardTilt(e) { e.currentTarget.style.transform = '' } // Petites animations de thé générées en JS : position, taille, durée et // délai tirés au sort une seule fois (useMemo) pour parsemer toute la // bannière de feuilles/tasses/théières/cuillères qui dérivent doucement, // sans jamais se superposer deux fois de la même façon. Taille et opacité // relevées pour qu'elles restent bien visibles sur le fond teal. const TEA_EMOJI = ['🍃', '🍵', '🫖', '☕', '🥄', '✨'] function createTeaParticles(count) { return Array.from({ length: count }, (_, i) => ({ id: i, emoji: TEA_EMOJI[i % TEA_EMOJI.length], left: Math.round(Math.random() * 100), top: Math.round(Math.random() * 100), size: Math.round(20 + Math.random() * 26), duration: +(4 + Math.random() * 4).toFixed(1), delay: +(Math.random() * 4).toFixed(1), opacity: +(0.18 + Math.random() * 0.22).toFixed(2), drift: Math.round(12 + Math.random() * 20), })) } const faqs = [ { question: 'Comment obtenir un code ?', answer: "Achetez pour plus de 49 € dans notre boutique Thé Tip Top de Nice, entre le 2 et le 31 octobre 2026 : un code unique à 10 caractères figure sur votre ticket de caisse ou votre facture.", }, { question: 'Quels sont les lots à gagner ?', answer: ( <> Tous les tickets sont gagnants ! Selon votre ticket, vous pouvez remporter : Un tirage au sort désigne en plus un grand gagnant qui remporte une année de thé d'une valeur de 360 €. ), plainAnswer: "Tous les tickets sont gagnants ! Selon votre ticket, vous pouvez remporter : un infuseur à thé, une boîte de 100 g de thé détox ou d'infusion, une boîte de 100 g de thé signature, un coffret découverte d'une valeur de 39 €, ou un coffret découverte d'une valeur de 69 €. Un tirage au sort désigne en plus un grand gagnant qui remporte une année de thé d'une valeur de 360 €.", }, { question: 'Jusqu\'à quand puis-je jouer ?', answer: 'La saisie des codes est ouverte du 2 au 31 octobre 2026 inclus. Les lots sont ensuite à retirer jusqu\'au 30 novembre 2026.', }, { question: 'Que faire si mon code n\'est pas reconnu ?', answer: "Vérifiez que le code a été saisi sans espace ni erreur. Si le problème persiste, contactez-nous depuis la page Contact.", }, { question: 'Où retirer mon lot ?', answer: 'Dans notre boutique de Nice, sur présentation de votre compte utilisateur validé et de la confirmation de gain affichée dans votre espace « Mes gains », jusqu\'au 30 novembre 2026.', }, ] const faqJsonLd = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faqs.map((faq) => ({ '@type': 'Question', name: faq.question, acceptedAnswer: { '@type': 'Answer', text: faq.plainAnswer || faq.answer, }, })), } export default function Accueil() { usePageMeta({ title: 'Jeu-concours 100 % Gagnant | Thé Tip Top — Thés bio et faits main', description: "Du 2 au 31 octobre, tout ticket de plus de 49 € de notre boutique de Nice porte un code 100 % gagnant. Saisissez le vôtre et repartez avec votre lot.", }) // Tirées au sort une seule fois au montage : la bannière ne doit pas // réordonner ses particules de thé à chaque re-render. const teaParticles = useMemo(() => createTeaParticles(30), []) return (