// sections.jsx — Tous les chapitres de la landing après le HERO // Comment ça marche (avec animation signature Exaucement), 10 univers, Sponsors B2B, Cofondateurs, Footer /* ═══════════════════════════════════════════════════════════════════════ */ /* CHAPITRE 2 — Comment ça marche : 3 étapes animées + animation signature */ /* ═══════════════════════════════════════════════════════════════════════ */ function ExaucementAnimation() { // L'animation SIGNATURE : étincelle dorée → arc lumineux → éclat → +score const [trigger, setTrigger] = React.useState(0); const [score, setScore] = React.useState(120); const containerRef = React.useRef(null); // Auto-loop when visible React.useEffect(() => { const reduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches; if (reduced) return; let int; const obs = new IntersectionObserver(([entry]) => { if (entry.isIntersecting) { int = setInterval(() => { setTrigger(t => t + 1); setScore(s => s + 25); }, 3500); } else { clearInterval(int); } }, { threshold: 0.5 }); if (containerRef.current) obs.observe(containerRef.current); return () => { obs.disconnect(); clearInterval(int); }; }, []); return (
{/* Demandeur (gauche) */} 🙏 {/* Aideur (droite) */} {/* Arc lumineux */} {/* Étincelle voyageuse */} {/* Particules d'éclat (au point d'arrivée) */} {Array.from({ length: 12 }).map((_, i) => { const angle = (i / 12) * Math.PI * 2; const dist = 28 + (i % 3) * 8; return ( ); })} {/* +Points label */} +25 {/* Compteur PévèleScore */}
PévèleScore {score}
); } function StepVisualVoeu() { // L'écriture d'un vœu — champ "qui respire" return (
MON VŒU
J'ai besoin d'aide pour monter une étagère
🏠 Habitat 📍 Orchies
); } function StepVisualMatch() { // 3 profils suggérés par le Génie const matches = [ { name: "Camille D.", commune: "Orchies", initial: "C", score: 94, color: "#22D3EE" }, { name: "Léo B.", commune: "Auchy", initial: "L", score: 87, color: "#7C5CFF" }, { name: "Hugo M.", commune: "Bouvignies", initial: "H", score: 81, color: "#F472B6" }, ]; return (
LE GÉNIE PROPOSE — 3 VOISINS PROCHES
{matches.map((m, i) => (
{m.initial}
{m.name}
📍 {m.commune}
{m.score}%
))}
); } function CommentCaMarche() { return (
Chapitre 2 — Comment ça marche

Trois temps.
Un seul geste.

On ne poste pas, on n'expose pas. On fait un Vœu — un besoin, une offre — et le Génie matche localement, en moins de soixante secondes.

01 — Vœu

Tu fais un vœu.

Texte ou voix, en moins de 60 secondes. Un champ qui respire, une intention captée — pas un post.

02 — Match

Le Génie te relie.

IA locale, géolocalisée, hébergée en Europe. Trois voisins, artisans ou bénévoles te sont proposés — pas un feed.

03 — Exaucement

Le territoire t'exauce.

Conversation privée éphémère, double confirmation, +PévèleScore. Chaque besoin résolu illumine une commune de plus.

); } /* ═══════════════════════════════════════════════════════════════════════ */ /* CHAPITRE 3 — Les 10 univers */ /* ═══════════════════════════════════════════════════════════════════════ */ const UNIVERS = [ { id: 1, nom: "Habitat", emoji: "🏠", color: "#F59E0B", count: 184 }, { id: 2, nom: "Mobilité", emoji: "🚲", color: "#22D3EE", count: 96 }, { id: 3, nom: "Santé", emoji: "💚", color: "#34D399", count: 142 }, { id: 4, nom: "Éducation", emoji: "📚", color: "#60A5FA", count: 78 }, { id: 5, nom: "Économie locale", emoji: "🛍", color: "#A78BFA", count: 211 }, { id: 6, nom: "Culture", emoji: "🎭", color: "#F472B6", count: 64 }, { id: 7, nom: "Sport", emoji: "⚽", color: "#FB7185", count: 89 }, { id: 8, nom: "Vie citoyenne", emoji: "🤝", color: "#4ADE80", count: 47 }, { id: 9, nom: "Environnement", emoji: "🌱", color: "#10B981", count: 121 }, { id: 10, nom: "Famille", emoji: "👨‍👩‍👧", color: "#FBBF24", count: 156 }, ]; function UniversGrid() { return (
Chapitre 3 — Dix univers

Tout ce qui fait
vivre la Pévèle.

Habitat, mobilité, santé, éducation, économie locale, culture, sport, vie citoyenne, environnement, famille. Chaque univers a sa couleur — chaque vœu sa lumière.

{UNIVERS.map((u, i) => (
{u.emoji}
{u.nom}
{u.count} vœux ce mois-ci
))}
); } /* ═══════════════════════════════════════════════════════════════════════ */ /* CHAPITRE 4 — Sponsors B2B */ /* ═══════════════════════════════════════════════════════════════════════ */ function SponsorVisual() { // Mock visuel "Exauceur Officiel" — badge premium return (
{/* Aurora background */}
{/* Top: badge */}
Exauceur Officiel
Orchies · Habitat
{/* Center: logo placeholder */}
🔨
Bricolage Dubois
Artisan menuisier · Verified
{/* Bottom: metrics */}
34
Exaucements
2.1k
Impressions
4.9
Confiance
); } function SponsorsBlock() { return (
Chapitre 4 — Pour les commerçants & sponsors

Payez le besoin résolu.
Pas l'impression.

Devenez Exauceur Officiel de votre catégorie dans votre commune. Exclusivité, visibilité native, retour mesurable — et la fierté d'avoir résolu un vrai besoin local.

1240
vœux exaucés cette semaine
38
communes activables
0€
pour l'habitant. Toujours.
2
créneaux restants — Orchies
Réserver ma commune
); } /* ═══════════════════════════════════════════════════════════════════════ */ /* CHAPITRE 5 — Les Cofondateurs */ /* ═══════════════════════════════════════════════════════════════════════ */ function LinkedInIcon() { return ( ); } function CofondateurCard({ name, role, bio, linkedin, photoSrc, initials, gradient }) { return (
{/* Initiales en fond ; la photo (si déposée dans /founders) la recouvre. */} {initials} {photoSrc && ( {name} { e.currentTarget.style.display = "none"; }} /> )}

{name}

{role}

{bio}

Voir sur LinkedIn
); } function Cofondateurs() { return (
Chapitre 5 — Les cofondateurs

Deux voix.
Un seul territoire.

La Pévèle Augmentée est née d'une obsession partagée : connecter ce qui existe déjà, magnifier ce qui se fait déjà — sans publicité, sans commentaire, sans toxicité.

); } /* ═══════════════════════════════════════════════════════════════════════ */ /* FOOTER */ /* ═══════════════════════════════════════════════════════════════════════ */ function Footer() { return ( ); } window.CommentCaMarche = CommentCaMarche; window.UniversGrid = UniversGrid; window.SponsorsBlock = SponsorsBlock; window.Cofondateurs = Cofondateurs; window.Footer = Footer;