- Add SonarQube configuration for code quality analysis - sonar-project.properties with TypeScript/Next.js settings - .sonarignore to exclude build artifacts and dependencies - npm run sonar script - Jenkins pipeline stages for SonarQube analysis and quality gate - Implement cookie consent banner - New CookieConsent component with matching site colors - localStorage persistence for user choice - Accept/Reject buttons with proper styling - Link to cookies policy page - Add strict authentication protection for game page - Redirect unauthenticated users to login from /jeux - Clean up redundant auth checks and UI elements - Preserve redirect parameter for post-login navigation - Implement smart navigation with auth-aware redirects - "Jouer maintenant" button redirects based on auth status - "Participer au jeu" footer link with conditional routing - Authenticated users go to /jeux, others to /register - UI improvements and cleanup - Remove "Voir les lots" button from homepage - Remove "Gestion des cookies" from footer - Remove "À propos" from footer navigation - Consistent design across components 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
112 lines
5.5 KiB
TypeScript
112 lines
5.5 KiB
TypeScript
'use client';
|
|
|
|
import Image from 'next/image';
|
|
import Link from 'next/link';
|
|
import Button from './Button';
|
|
|
|
interface AboutContestProps {
|
|
title?: string;
|
|
description?: string;
|
|
imageUrl?: string;
|
|
}
|
|
|
|
export default function AboutContest({
|
|
title = "Jeu Concours Thé Tip Top - Boutique de Thé Premium à Nice",
|
|
description,
|
|
imageUrl = "/images/tea-collection.jpg",
|
|
}: AboutContestProps) {
|
|
const defaultDescription = `
|
|
Bienvenue dans notre grand jeu-concours Thé Tip Top organisé à l'occasion de l'ouverture de notre 10ème boutique de thé premium à Nice.
|
|
Nous vous offrons la chance de gagner des produits exceptionnels : thés bio, accessoires exclusifs et bien plus encore.
|
|
|
|
Participez facilement en quelques clics et tentez votre chance parmi nos lots prestigieux.
|
|
Avec 100% de tickets gagnants, chaque participation vous offre la garantie de repartir avec un cadeau !
|
|
`;
|
|
|
|
return (
|
|
<section className="py-20 bg-white/50 backdrop-blur-sm">
|
|
<div className="container mx-auto px-4">
|
|
<div className="max-w-7xl mx-auto">
|
|
<div className="grid md:grid-cols-2 gap-16 items-center">
|
|
{/* Texte */}
|
|
<div className="order-2 md:order-1 space-y-6">
|
|
<h2 className="text-4xl md:text-5xl font-bold text-[#5a5a4e] leading-tight">
|
|
Jeu Concours Thé Tip Top
|
|
<span className="block text-3xl md:text-4xl text-[#d4a574] mt-2">
|
|
Boutique Premium à Nice
|
|
</span>
|
|
</h2>
|
|
|
|
<div className="space-y-4 text-lg text-gray-700">
|
|
<p className="leading-relaxed">
|
|
Bienvenue dans notre grand jeu-concours <span className="font-semibold text-[#5a5a4e]">Thé Tip Top</span> organisé à l'occasion de l'ouverture de notre <span className="font-semibold text-[#d4a574]">10ème boutique</span> de thé premium à Nice.
|
|
</p>
|
|
<p className="leading-relaxed">
|
|
Nous vous offrons la chance de gagner des produits exceptionnels : thés bio, accessoires exclusifs et bien plus encore.
|
|
</p>
|
|
<p className="leading-relaxed">
|
|
Participez facilement en quelques clics et tentez votre chance parmi nos lots prestigieux.
|
|
</p>
|
|
<div className="bg-gradient-to-r from-[#d4a574]/10 to-[#c4956a]/10 border-l-4 border-[#d4a574] p-4 rounded-r-lg">
|
|
<p className="font-semibold text-[#5a5a4e] text-xl">
|
|
✨ 100% de tickets gagnants ! Chaque participation vous offre la garantie de repartir avec un cadeau.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="flex flex-col sm:flex-row gap-4 pt-4">
|
|
<Link href="/register">
|
|
<button className="bg-gradient-to-r from-[#d4a574] to-[#c4956a] hover:from-[#e5b685] hover:to-[#d4a574] text-white font-bold text-lg px-8 py-4 rounded-lg transition-all duration-300 hover:shadow-[0_0_25px_rgba(212,165,116,0.7)] hover:scale-105 shadow-lg flex items-center justify-center gap-2">
|
|
En savoir plus
|
|
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 7l5 5m0 0l-5 5m5-5H6" />
|
|
</svg>
|
|
</button>
|
|
</Link>
|
|
</div>
|
|
</div>
|
|
|
|
{/* Image */}
|
|
<div className="order-1 md:order-2">
|
|
<div className="relative rounded-2xl overflow-hidden shadow-2xl">
|
|
{/* Fallback avec illustration CSS si l'image n'existe pas */}
|
|
<div className="aspect-[4/3] bg-gradient-to-br from-[#1a4d2e] via-[#2d5a3d] to-[#1a4d2e] relative">
|
|
{/* Motif décoratif */}
|
|
<div className="absolute inset-0 opacity-20">
|
|
<div className="absolute inset-0" style={{
|
|
backgroundImage: 'url("data:image/svg+xml,%3Csvg width=\'60\' height=\'60\' viewBox=\'0 0 60 60\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cg fill=\'none\' fill-rule=\'evenodd\'%3E%3Cg fill=\'%23ffffff\' fill-opacity=\'0.3\'%3E%3Cpath d=\'M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z\'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")',
|
|
}}></div>
|
|
</div>
|
|
|
|
{/* Icône de thé */}
|
|
<div className="absolute inset-0 flex items-center justify-center">
|
|
<div className="text-9xl opacity-40">🍵</div>
|
|
</div>
|
|
|
|
{/* Badges décoratifs */}
|
|
<div className="absolute top-4 right-4 bg-[#f59e0b] text-white px-4 py-2 rounded-full font-bold shadow-lg">
|
|
10 ans
|
|
</div>
|
|
<div className="absolute bottom-4 left-4 bg-white/90 backdrop-blur-sm text-[#1a4d2e] px-4 py-2 rounded-full font-bold shadow-lg">
|
|
Premium Bio
|
|
</div>
|
|
</div>
|
|
|
|
{/* Note: Vous pouvez remplacer le div ci-dessus par une vraie image :
|
|
<Image
|
|
src={imageUrl}
|
|
alt="Collection de thés Thé Tip Top"
|
|
width={600}
|
|
height={450}
|
|
className="w-full h-full object-cover"
|
|
/>
|
|
*/}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
}
|