the-tip-top-frontend/app/rules/page.tsx
soufiane 81a3e0bfae feat: update color palette to WCAG AA compliant green theme
- Update primary colors to forest green (#0B6029)
- Update all page titles to use primary-300/500 colors
- Update components (Header, Footer, Button, etc.)
- Fix email to thetiptopgr3@gmail.com
- Adjust hero section spacing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 11:18:19 +01:00

360 lines
20 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use client';
import type { Metadata } from "next";
import { useState } from "react";
export default function RulesPage() {
const [openSection, setOpenSection] = useState<number | null>(null);
const toggleSection = (index: number) => {
setOpenSection(openSection === index ? null : index);
};
return (
<div className="min-h-screen bg-gradient-to-br from-beige-100 via-beige-50 to-beige-100">
{/* Hero Section */}
<section className="bg-gradient-to-r from-white to-beige-50 py-12 border-b-2 border-beige-300">
<div className="container mx-auto px-4">
<div className="max-w-4xl mx-auto text-center">
<h1 className="text-4xl md:text-5xl font-bold text-primary-300 mb-4">
Règlement du jeu-concours
</h1>
<p className="text-lg text-gray-600">
Toutes les conditions de participation à notre grand jeu-concours "Thé Tip Top"
pour l'ouverture de notre 10e boutique.
</p>
</div>
</div>
</section>
{/* Résumé Section */}
<section className="py-8">
<div className="container mx-auto px-4">
<div className="max-w-4xl mx-auto">
<div className="bg-white rounded-xl shadow-md p-6 mb-8 border border-beige-300">
<div className="flex items-center gap-2 mb-6">
<span className="text-2xl">📋</span>
<h2 className="text-2xl font-bold text-gray-800">Résumé du jeu-concours</h2>
</div>
<div className="grid md:grid-cols-3 gap-4">
{/* 100% gagnants */}
<div className="bg-gradient-to-br from-primary-50 to-primary-100 rounded-lg p-6 text-center border border-primary-200 hover:shadow-lg transition-shadow">
<div className="w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-primary-500 to-primary-600 rounded-full flex items-center justify-center text-3xl shadow-lg">🎯</div>
<div className="text-2xl font-bold text-gray-800 mb-2">100% gagnants</div>
<p className="text-sm text-gray-600">
Chaque participant repart avec un lot garanti
</p>
</div>
{/* 30 + 60 jours */}
<div className="bg-gradient-to-br from-primary-50 to-primary-100 rounded-lg p-6 text-center border border-primary-200 hover:shadow-lg transition-shadow">
<div className="w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-primary-500 to-primary-600 rounded-full flex items-center justify-center text-3xl shadow-lg">🔄</div>
<div className="text-2xl font-bold text-gray-800 mb-2">30 + 60 jours</div>
<p className="text-sm text-gray-600">
Validation tickets (30j) + récupération lots (60j)
</p>
</div>
{/* Grand prix 360€ */}
<div className="bg-gradient-to-br from-primary-50 to-primary-100 rounded-lg p-6 text-center border border-primary-200 hover:shadow-lg transition-shadow">
<div className="w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-primary-500 to-primary-600 rounded-full flex items-center justify-center text-3xl shadow-lg">🏆</div>
<div className="text-2xl font-bold text-gray-800 mb-2">Grand prix 360€</div>
<p className="text-sm text-gray-600">
Tirage final sous contrôle d'huissier
</p>
</div>
</div>
</div>
</div>
</div>
</section>
{/* Accordion Sections */}
<section className="py-8 pb-16">
<div className="container mx-auto px-4">
<div className="max-w-4xl mx-auto space-y-4">
{/* Section 1 - Conditions de participation */}
<div className="bg-white rounded-xl shadow-md overflow-hidden border border-beige-300">
<button
onClick={() => toggleSection(1)}
className="w-full flex items-center justify-between p-6 text-left hover:bg-gradient-to-r hover:from-primary-50 hover:to-primary-100 transition-colors"
>
<div className="flex items-center gap-3">
<div className="w-12 h-12 bg-gradient-to-br from-primary-500 to-primary-600 rounded-full flex items-center justify-center text-xl shadow-md">📋</div>
<h3 className="text-xl font-bold text-gray-800">1. Conditions de participation</h3>
</div>
<svg
className={`w-6 h-6 text-gray-600 transition-transform ${openSection === 1 ? 'rotate-180' : ''}`}
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</button>
{openSection === 1 && (
<div className="px-6 pb-6 space-y-4 text-gray-800">
<p>Le concours est ouvert à toute personne majeure résidant en France métropolitaine ayant effectué un achat d'un montant minimum de 49€ TTC. Pour participer, le participant doit entrer un code unique obtenu lors d'un achat ou d'une opération marketing. </p>
</div>
)}
</div>
{/* Section 2 - Codes de participation */}
<div className="bg-white rounded-xl shadow-md overflow-hidden border border-beige-300">
<button
onClick={() => toggleSection(2)}
className="w-full flex items-center justify-between p-6 text-left hover:bg-gradient-to-r hover:from-primary-50 hover:to-primary-100 transition-colors"
>
<div className="flex items-center gap-3">
<div className="w-12 h-12 bg-gradient-to-br from-primary-500 to-primary-600 rounded-full flex items-center justify-center text-xl shadow-md">🎫</div>
<h3 className="text-xl font-bold text-gray-800">2. Codes de participation</h3>
</div>
<svg
className={`w-6 h-6 text-gray-600 transition-transform ${openSection === 2 ? 'rotate-180' : ''}`}
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</button>
{openSection === 2 && (
<div className="px-6 pb-6 space-y-4 text-gray-800">
<p>Pour participer au jeu, le participant doit :</p>
<ol className="list-decimal list-inside space-y-2 ml-4">
<li>Effectuer un achat de minimum 49€ dans une boutique Thé Tip Top participante</li>
<li>Récupérer son ticket de caisse comportant un code unique à 10 caractères</li>
<li>Se rendre sur notre site </li>
<li>Créer un compte ou se connecter à son compte existant</li>
<li>Saisir le code figurant sur son ticket dans l'espace dédié</li>
<li>Découvrir instantanément son gain</li>
</ol>
<div className="bg-gradient-to-r from-primary-50 to-primary-100 border-l-4 border-primary-500 p-4 mt-4 rounded">
<p className="font-semibold text-gray-800"> Important</p>
<p className="text-gray-800">Chaque code ne peut être utilisé qu'une seule fois. Toute tentative de fraude entraînera l'exclusion du participant.</p>
</div>
</div>
)}
</div>
{/* Section 3 - Calendrier et délais */}
<div className="bg-white rounded-xl shadow-md overflow-hidden border border-beige-300">
<button
onClick={() => toggleSection(3)}
className="w-full flex items-center justify-between p-6 text-left hover:bg-gradient-to-r hover:from-primary-50 hover:to-primary-100 transition-colors"
>
<div className="flex items-center gap-3">
<div className="w-12 h-12 bg-gradient-to-br from-primary-500 to-primary-600 rounded-full flex items-center justify-center text-xl shadow-md">🎁</div>
<h3 className="text-xl font-bold text-gray-800">3. Lots à gagner</h3>
</div>
<svg
className={`w-6 h-6 text-gray-600 transition-transform ${openSection === 3 ? 'rotate-180' : ''}`}
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</button>
{openSection === 3 && (
<div className="px-6 pb-6 space-y-4 text-gray-800">
<div>
<p className="font-semibold mb-2">Voici ce que tu peux gagner :</p>
</div>
<div>
<ul className="list list-inside space-y-2 ml-4">
<li>Infuseur à thé (60% des tickets)</li>
<li>Boîte de 100g de thé détox ou infusion (20% des tickets)</li>
<li>Boîte de 100g de thé signature (10% des tickets)</li>
<li>Coffret découverte (valeur 39 - 6% des tickets)</li>
<li>Coffret découverte (valeur 69 - 4% des tickets)</li>
</ul>
</div>
</div>
)}
</div>
{/* Section 4 - Tirage final Grand Prix */}
<div className="bg-white rounded-xl shadow-md overflow-hidden border border-beige-300">
<button
onClick={() => toggleSection(4)}
className="w-full flex items-center justify-between p-6 text-left hover:bg-gradient-to-r hover:from-primary-50 hover:to-primary-100 transition-colors"
>
<div className="flex items-center gap-3">
<div className="w-12 h-12 bg-gradient-to-br from-primary-500 to-primary-600 rounded-full flex items-center justify-center text-xl shadow-md">🏆</div>
<h3 className="text-xl font-bold text-gray-800">4. Tirage final - Grand Prix</h3>
</div>
<svg
className={`w-6 h-6 text-gray-600 transition-transform ${openSection === 4 ? 'rotate-180' : ''}`}
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</button>
{openSection === 4 && (
<div className="px-6 pb-6 space-y-4 text-gray-800">
<p className="font-semibold text-xl">Grand Prix : 1 an de thé offert (valeur 360)</p>
<p>À l'issue de la période de participation, un tirage au sort sera organisé pour désigner le grand gagnant du prix principal.</p>
<div>
<p className="font-semibold mb-2">Conditions du tirage :</p>
<ul className="list-disc list-inside space-y-2 ml-4">
<li>Sous contrôle d'huissier de justice : Maître Dupont, Office Notarial de Paris</li>
<li>Tous les participants ayant validé au moins un code sont automatiquement inscrits</li>
</ul>
</div>
<div>
<p className="font-semibold mb-2">Le lot :</p>
<p>Le gagnant recevra Un an de thé d'une valeur de 360€ !</p>
</div>
<div className="bg-gradient-to-r from-primary-50 to-primary-100 border-l-4 border-primary-500 p-4 mt-4 rounded">
<p className="font-semibold text-gray-800">🎁 Information</p>
<p className="text-gray-800">Le gagnant sera contacté par email et par téléphone dans les 48h suivant le tirage.</p>
</div>
</div>
)}
</div>
{/* Section 5 - Retrait des lots */}
<div className="bg-white rounded-xl shadow-md overflow-hidden border border-beige-300">
<button
onClick={() => toggleSection(5)}
className="w-full flex items-center justify-between p-6 text-left hover:bg-gradient-to-r hover:from-primary-50 hover:to-primary-100 transition-colors"
>
<div className="flex items-center gap-3">
<div className="w-12 h-12 bg-gradient-to-br from-primary-500 to-primary-600 rounded-full flex items-center justify-center text-xl shadow-md">🎁</div>
<h3 className="text-xl font-bold text-gray-800">5. Retrait des lots</h3>
</div>
<svg
className={`w-6 h-6 text-gray-600 transition-transform ${openSection === 5 ? 'rotate-180' : ''}`}
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</button>
{openSection === 5 && (
<div className="px-6 pb-6 space-y-4 text-gray-800">
<p>Les lots doivent être réclamés dans un délai de <strong>60 jours</strong> (du 1er décembre 2025 au 31 janvier 2026).</p>
<div>
<p className="font-semibold mb-2">Modalités de remise :</p>
<ul className="list-disc list-inside space-y-2 ml-4">
<li><strong>Infuseur, thé détox/signature :</strong> Retrait en boutique ou envoi postal (frais de port offerts)</li>
<li><strong>Coffrets découverte et prestige :</strong> Retrait en boutique ou livraison à domicile offerte</li>
<li><strong>Grand prix (1 an de thé) :</strong> Livraison à l'adresse de votre choix</li>
</ul>
</div>
<div className="bg-red-50 border-l-4 border-red-500 p-4 mt-4 rounded">
<p className="font-semibold text-red-900"> Attention</p>
<p className="text-red-800">Les lots non réclamés dans le délai imparti seront considérés comme abandonnés. Aucun lot ne peut être échangé, remboursé ou converti en espèces.</p>
</div>
</div>
)}
</div>
{/* Section 6 - Protection des données */}
<div className="bg-white rounded-xl shadow-md overflow-hidden border border-beige-300">
<button
onClick={() => toggleSection(6)}
className="w-full flex items-center justify-between p-6 text-left hover:bg-gradient-to-r hover:from-primary-50 hover:to-primary-100 transition-colors"
>
<div className="flex items-center gap-3">
<div className="w-12 h-12 bg-gradient-to-br from-primary-500 to-primary-600 rounded-full flex items-center justify-center text-xl shadow-md">🔒</div>
<h3 className="text-xl font-bold text-gray-800">6. Protection des données personnelles</h3>
</div>
<svg
className={`w-6 h-6 text-gray-600 transition-transform ${openSection === 6 ? 'rotate-180' : ''}`}
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</button>
{openSection === 6 && (
<div className="px-6 pb-6 space-y-4 text-gray-800">
<p>Les données personnelles collectées dans le cadre du jeu font l'objet d'un traitement informatique destiné à gérer la participation au jeu et l'attribution des lots.</p>
<div>
<p className="font-semibold mb-2">Vos droits :</p>
<ul className="list-disc list-inside space-y-2 ml-4">
<li>Droit d'accès à vos données personnelles</li>
<li>Droit de rectification de vos données</li>
<li>Droit à l'effacement de vos données</li>
<li>Droit d'opposition au traitement</li>
<li>Droit à la portabilité des données</li>
</ul>
</div>
<p>Pour exercer vos droits, contactez-nous à : <a href="mailto:contact@thetiptop.fr" className="text-primary-500 underline hover:text-primary-600">contact@thetiptop.fr</a></p>
<p>Pour plus d'informations, consultez notre <a href="/privacy" className="text-primary-500 underline hover:text-primary-600">Politique de confidentialité</a>.</p>
</div>
)}
</div>
</div>
</div>
</section>
{/* Informations légales Section */}
<section className="py-16 bg-gradient-to-br from-beige-100 via-beige-50 to-beige-100">
<div className="container mx-auto px-4">
<div className="max-w-5xl mx-auto">
<div className="text-center mb-8">
<h2 className="text-3xl font-bold text-gray-800 mb-2">Informations légales</h2>
<p className="text-gray-600">Détails officiels du jeu-concours</p>
</div>
<div className="grid md:grid-cols-2 gap-6 mb-6">
{/* Organisateur */}
<div className="bg-white rounded-xl shadow-lg p-6 border-2 border-beige-300 hover:shadow-xl transition-shadow">
<div className="flex items-center gap-3 mb-4">
<div className="w-12 h-12 bg-gradient-to-br from-primary-500 to-primary-600 rounded-full flex items-center justify-center shadow-md">
<span className="text-xl">🏢</span>
</div>
<h3 className="text-xl font-bold text-gray-800">Organisateur</h3>
</div>
<div className="space-y-2 text-gray-800">
<p className="font-semibold">Thé Tip Top</p>
<p className="text-sm">18 rue Léon Frot, 75011 Paris</p>
<p className="text-sm text-gray-600">SIRET : 901 234 567 00015</p>
</div>
</div>
{/* Huissier */}
<div className="bg-white rounded-xl shadow-lg p-6 border-2 border-beige-300 hover:shadow-xl transition-shadow">
<div className="flex items-center gap-3 mb-4">
<div className="w-12 h-12 bg-gradient-to-br from-primary-500 to-primary-600 rounded-full flex items-center justify-center shadow-md">
<span className="text-xl">⚖️</span>
</div>
<h3 className="text-xl font-bold text-gray-800">Huissier</h3>
</div>
<div className="space-y-2 text-gray-800">
<p className="font-semibold">Maître Arnaud Rick</p>
<p className="text-sm">Office Notarial de Paris</p>
<p className="text-sm">456 Rue de la Justice, 75002 Paris, France</p>
</div>
</div>
</div>
{/* Note légale */}
<div className="bg-gradient-to-r from-primary-500 to-primary-600 rounded-xl shadow-lg p-6 text-white text-center">
<div className="flex items-center justify-center gap-2 mb-3">
<span className="text-2xl">📜</span>
<h3 className="text-lg font-semibold">Note légale</h3>
</div>
<p className="text-sm text-white/90 leading-relaxed">
Jeu-concours gratuit sans obligation d'achat, sauf pour l'acquisition du ticket donnant droit à participation.
Règlement déposé chez Maître Arnaud Rick, huissier de justice à Paris.
</p>
</div>
</div>
</div>
</section>
</div>
);
}