// Landing, middle sections const Roles = ({ onChoose, persona }) => (
Chacun joue un rôle dans le passage de l'imagination à l'action.} sub="L'écosystème EVAD relie ceux qui coordonnent un lieu, ceux qui contribuent par leurs mains, et ceux qui financent contre des preuves d'impact mesurables.">
{Object.entries(ROLES).map(([id, r]) => { const isActive = persona === id; return (
{ e.currentTarget.style.transform = 'translateY(-4px)'; e.currentTarget.style.boxShadow = '0 16px 40px rgba(1,130,98,.14)'; }} onMouseLeave={e => { e.currentTarget.style.transform = ''; e.currentTarget.style.boxShadow = isActive ? '0 16px 40px ' + r.accent + '22' : '0 2px 16px rgba(1,130,98,.06)'; }}> {r.image && (
{r.name}
)}
{r.emoji}
{r.short}
{r.verb}

{r.name}

{r.desc}

{r.perks && (
    {r.perks.map((perk, i) => (
  • {perk}
  • ))}
)} {onChoose && ( )}
); })}
{onChoose && persona && (
)}
); const VADE_STEPS = [ { L: 'V', name: 'Valoriser', title: 'Valoriser le potentiel', color: '#018262', desc: "Connaître la base : les ressources, les forces et les limites. Ce socle pose la Vadance, la promesse d'impact, ce que le projet s'engage à devenir." }, { L: 'A', name: 'Activer', title: 'Activer les solutions', color: '#3a6e8c', desc: "Puiser dans la bibliothèque commune (low-tech, permaculture, gouvernance), générer fiche et tableau de bord. La promesse s'outille et se met en mouvement." }, { L: 'D', name: 'Développer', title: "Développer l'écosystème", color: '#c8732a', desc: 'Mettre les quêtes en ligne, mobiliser la communauté, sécuriser le financement et documenter chaque preuve. La Vadance se change en résultats mesurés sur le terrain.' }, { L: 'E', name: 'Essaimer', title: 'Essaimer preuves et pratiques', color: '#7a6ea8', desc: 'La promesse devient Vadité. Les apprentissages essaiment dans les communs et relancent la spirale un cran plus haut.' }, ]; const ROLE_ROWS = [ { id: 'pilote', emoji: '🏡', name: "Pilote d'impact", short: 'Pilote', color: '#018262', tint: '#dcefe7', cells: [ "Diagnostiquer les ressources, les forces et les limites de votre lieu. Ce socle pose votre Vadance : la promesse d'impact que votre lieu s'engage à tenir.", "Puiser dans la bibliothèque commune (low-tech, permaculture, gouvernance), générer la fiche de votre lieu et son tableau de bord. Votre promesse s'outille.", "Publier vos quêtes, mobiliser les Bâtisseurs, sécuriser les financements des Semeurs, documenter chaque preuve sur le terrain.", "Votre Vadance devient Vadité : un score vérifié, lisible par les financeurs. Vos apprentissages rejoignent les communs et votre lieu repart un cran plus haut.", ], }, { id: 'batisseur', emoji: '🌿', name: "Bâtisseur d'impact", short: 'Bâtisseur', color: '#c8732a', tint: '#fce8d8', cells: [ "Identifier vos compétences, vos envies, ce que vous voulez apporter aux lieux qui vous entourent. Votre profil devient votre promesse de contribution.", "Explorer la bibliothèque, découvrir les solutions et les cartes compétences, vous former aux pratiques régénératives éprouvées.", "Entreprendre les missions des lieux, contribuer sur le terrain, créditer vos Graines, documenter vos réalisations.", "Vos contributions vérifiées construisent votre parcours. Transmettre, devenir référent, porter les pratiques vers d'autres lieux, et reprendre la spirale un cran plus haut.", ], }, { id: 'semeur', emoji: '🌾', name: "Semeur d'impact", short: 'Semeur', color: '#3a6e8c', tint: '#e0eef6', cells: [ "Lire la Vadance des lieux : une promesse d'impact structurée, comparable, adossée à des indicateurs, pas une plaquette.", "Flécher votre financement vers des solutions et des quêtes précises, avec une visibilité directe sur ce que votre apport déclenche.", "Suivre en continu les résultats mesurés sur le terrain : chaque preuve documentée alimente le tableau de bord de votre portefeuille de lieux.", "La Vadité consolide ce qui a été tenu. Comparer promesse et réalisation, capitaliser les enseignements, réinvestir un cran plus haut.", ], }, ]; const ParcoursMatrix = () => (
{/* Header */}
Qui fait quoi ?

La spirale VADE, vécue par les trois rôles :

{ROLE_ROWS.map(r => ( {r.emoji}{r.short} ))}
{/* Matrix */}
{/* corner */}
{/* step headers */} {VADE_STEPS.map((s, i) => (
{s.L} {s.name}
))} {/* rows */} {ROLE_ROWS.map(r => (
{r.emoji} {r.name}
{r.cells.map((c, i) => (
{c}
))}
))}
{/* footer note */}

Le même parcours pour les trois rôles. Personne ne capte la valeur seul : elle circule, elle nourrit le lieu, elle revient, et l'écosystème apprend.

); const VadeWheel = () => { const cx = 300, cy = 320; const DEG = Math.PI / 180; // Archimedean spiral: t = rotation from V (deg), clockwise; radius grows outward. // V is the tightest turn, then A, D, E open wider, and the run escapes at the top. const R_STOPS = [[0, 138], [90, 193], [180, 216], [270, 236], [360, 288]]; const rAt = (t) => { for (let i = 0; i < R_STOPS.length - 1; i++) { const [t0, r0] = R_STOPS[i], [t1, r1] = R_STOPS[i + 1]; if (t <= t1) return r0 + (r1 - r0) * (t - t0) / (t1 - t0); } return R_STOPS[R_STOPS.length - 1][1]; }; const ptAt = (t) => { const phi = (-90 + t) * DEG, r = rAt(t); return [cx + r * Math.cos(phi), cy + r * Math.sin(phi)]; }; const segPath = (t0, t1) => { let d = ''; for (let t = t0; t <= t1 + 0.001; t += 3) { const [x, y] = ptAt(t); d += (d ? 'L' : 'M') + x.toFixed(1) + ',' + y.toFixed(1); } return d; }; // nodes sit on the spiral at V=0°, A=90°, D=180°, E=270° const nodePos = [0, 90, 180, 270].map(ptAt); const nameOff = [-54, -54, 60, 60]; // V & A above, D & E below // arrowhead at the spiral's outer end (t = 360°) const [ex, ey] = ptAt(360); const [bx, by] = ptAt(355); const ang = Math.atan2(ey - by, ex - bx), AH = 17, AW = 9; const perp = ang + Math.PI / 2; const arrow = [ [ex, ey], [ex - Math.cos(ang) * AH + Math.cos(perp) * AW, ey - Math.sin(ang) * AH + Math.sin(perp) * AW], [ex - Math.cos(ang) * AH - Math.cos(perp) * AW, ey - Math.sin(ang) * AH - Math.sin(perp) * AW], ].map(p => p[0].toFixed(1) + ',' + p[1].toFixed(1)).join(' '); const segs = [ { d: segPath(0, 90), c: '#018262' }, // V → A { d: segPath(90, 180), c: '#3a6e8c' }, // A → D { d: segPath(180, 270), c: '#c8732a' }, // D → E { d: segPath(270, 360), c: '#7a6ea8' }, // E → sortie ]; return ( {/* the spiral itself, one growing turn V→A→D→E and a cran plus haut */} {segs.map((s, i) => ( ))} un cran plus haut {/* center label */} SPIRALE VADE {['🏡','🌿','🌾'].map((e, i) => ( {e} ))} {/* nodes */} {VADE_STEPS.map((s, i) => { const [x, y] = nodePos[i]; return ( {s.L} {s.name} ); })} ); }; const Cycle = ({ role, onChoose }) => { const activeRow = role && ROLE_ROWS.find(r => r.id === role); return (
Spirale VADE, {activeRow ? <>vécue en {activeRow.name}. : 'la spirale partagée.'}} sub={activeRow ? ( <>Voici les quatre étapes telles que vous, {activeRow.name}, les traversez. La même spirale nourrit aussi les autres profils, la valeur circule. ) : ( <>VADE est la spirale partagée par les Pilotes, les Bâtisseurs et les Semeurs : Valoriser, Activer, Développer, Essaimer. )}>
{activeRow ? activeRow.emoji : '⟲'}

{activeRow ? <>Vue adaptée à votre profil {activeRow.name}. La spirale reste la même, vos actions changent. Vous êtes libre d'y entrer à n'importe quelle étape, selon là où vous en êtes. : <>Une même spirale pour les trois profils : la valeur circule entre eux et nourrit l'écosystème. Pas besoin de commencer au début : on entre dans la spirale à l'étape qui nous correspond.}

{VADE_STEPS.map((s, i) => { const myCell = activeRow ? activeRow.cells[i] : null; return (
{ e.currentTarget.style.transform = 'translateX(2px)'; e.currentTarget.style.boxShadow = '0 8px 24px rgba(1,130,98,.1)'; }} onMouseLeave={e => { e.currentTarget.style.transform = ''; e.currentTarget.style.boxShadow = activeRow ? '0 6px 18px rgba(1,130,98,.08)' : '0 1px 6px rgba(1,130,98,.04)'; }}>
{s.L}
{s.title}
{!activeRow &&

{s.desc}

} {myCell && (

{myCell}

)}
); })}
); }; const DevaSection = () => (
Deva accompagne, vous prenez les décisions.}>

Deva est l'esprit régénératif de l'écosystème. Il suggère des quêtes adaptées à votre lieu, repère les preuves manquantes, propose des solutions issues de la bibliothèque.

{/* Speech bubble tail toward Deva avatar */}
    {[ ['📚', 'Suggère des solutions'], ['⚡', 'Génère des quêtes'], ['✓', 'Vérifie les preuves'], ['🤲', 'Met en relation'], ].map(([e, t]) => (
  • {e} {t}
  • ))}
Deva
); const MarketplaceSection = () => { const items = [ { e: '🌾', t: 'Permaculture · 2 jours', l: 'Ferme du Champ Vert · Drôme', p: '120 G', g: 'linear-gradient(135deg,#4aab8f,#016b52)', b: 'new' }, { e: '🛖', t: 'Yourte 4 places', l: 'Tiers-lieu Les Possibles', p: '85 G', g: 'linear-gradient(135deg,#c8732a,#a85e20)', b: 'promo' }, { e: '🧱', t: 'Construction terre crue', l: 'Écolieu La Source', p: '450 G', g: 'linear-gradient(135deg,#7a6ea8,#3a6e8c)', b: 'premium' }, ]; const bcols = { new: '#4aab8f', promo: '#c8732a', premium: 'linear-gradient(135deg,#7a6ea8,#3a6e8c)' }; return (
{items.map(m => (
{m.e} {m.b}
{m.t}
{m.l}
{m.p}
))}
); }; window.Roles = Roles; window.Cycle = Cycle; window.DevaSection = DevaSection; window.MarketplaceSection = MarketplaceSection;