Refonte jauge : affichage des soutiens réguliers vers objectif 500

- Remplace le montant collecté par le nombre de soutiens réguliers actifs
  (plans Donorbox status=active + 98 soutiens historiques) avec objectif 500
- Proxy PHP : appel à /api/v1/plans pour compter les plans actifs toutes
  campagnes confondues, avec pagination et détail plans_detail dans la réponse
- Jauge initialisée à 19.6% (98/500) en fallback si l'API est indisponible
- Versions FR et EN mises à jour

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
isUnknown 2026-03-06 08:45:11 +01:00
parent f0591a20ab
commit 97766e6bb7
5 changed files with 301 additions and 113 deletions

View file

@ -1,8 +1,14 @@
{ {
"total_raised": "35675.25", "total_raised": "35825.53",
"goal_amt": "50000.0", "goal_amt": "50000.0",
"currency": "eur", "currency": "eur",
"donations_count": 521, "donations_count": 533,
"recurring_donors_count": 56,
"campaign_name": "Soutenez Index avant le 31 d\u00e9cembre 2025 !", "campaign_name": "Soutenez Index avant le 31 d\u00e9cembre 2025 !",
"updated_at": "2026-02-27T12:51:20+01:00" "updated_at": "2026-03-06T07:41:46+00:00",
"DEBUG_plans_breakdown": {
"cancelled|monthly": 36,
"active|monthly": 56,
"failed|monthly": 19
}
} }

View file

@ -128,14 +128,56 @@ if ($campaign === null) {
} }
} }
// Compter tous les donateurs réguliers actifs (toutes campagnes confondues)
$recurring_count = 0;
$plans_page = 1;
do {
$plans_url = 'https://donorbox.org/api/v1/plans?per_page=100&page=' . $plans_page;
$ch_plans = curl_init();
curl_setopt_array($ch_plans, [
CURLOPT_URL => $plans_url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => DONORBOX_EMAIL . ':' . DONORBOX_API_KEY,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'User-Agent: Index-NGO-Website'],
CURLOPT_TIMEOUT => 10,
CURLOPT_SSL_VERIFYPEER => true
]);
$plans_response = curl_exec($ch_plans);
$plans_http_code = curl_getinfo($ch_plans, CURLINFO_HTTP_CODE);
curl_close($ch_plans);
if ($plans_response === false || $plans_http_code !== 200) {
break;
}
$plans = json_decode($plans_response, true);
if (!is_array($plans)) break;
foreach ($plans as $plan) {
if (isset($plan['status']) && $plan['status'] === 'active') {
$recurring_count++;
}
$status = $plan['status'] ?? 'unknown';
$type = $plan['type'] ?? 'unknown';
$plans_detail[$status . '|' . $type] = ($plans_detail[$status . '|' . $type] ?? 0) + 1;
}
$plans_page++;
} while (count($plans) === 100);
// Extraire uniquement les données nécessaires // Extraire uniquement les données nécessaires
$filteredData = [ $filteredData = [
'total_raised' => $campaign['total_raised'] ?? 0, 'total_raised' => $campaign['total_raised'] ?? 0,
'goal_amt' => $campaign['goal_amt'] ?? 50000, 'goal_amt' => $campaign['goal_amt'] ?? 50000,
'currency' => $campaign['currency'] ?? 'EUR', 'currency' => $campaign['currency'] ?? 'EUR',
'donations_count' => $campaign['donations_count'] ?? 0, 'donations_count' => $campaign['donations_count'] ?? 0,
'recurring_donors_count' => $recurring_count,
'campaign_name' => $campaign['name'] ?? 'Unknown', 'campaign_name' => $campaign['name'] ?? 'Unknown',
'updated_at' => date('c') 'updated_at' => date('c'),
'plans_detail' => $plans_detail ?? []
]; ];
$jsonResponse = json_encode($filteredData, JSON_PRETTY_PRINT); $jsonResponse = json_encode($filteredData, JSON_PRETTY_PRINT);

View file

@ -2,17 +2,8 @@ const DONORBOX_CONFIG = {
proxyUrl: '/api/donorbox-proxy.php', proxyUrl: '/api/donorbox-proxy.php',
}; };
function formatCurrency(amount) { const RECURRING_DONORS_OFFSET = 98;
const rounded = Math.round(amount * 100) / 100; const GOAL_SUPPORTERS = 500;
const hasDecimals = rounded % 1 !== 0;
const formatted = rounded.toLocaleString('fr-FR', {
minimumFractionDigits: 0,
maximumFractionDigits: hasDecimals ? 2 : 0,
});
return formatted.replace(/[\s\u00A0\u202F]/g, '\u202F') + '\u202F€';
}
async function fetchDonorboxData() { async function fetchDonorboxData() {
try { try {
@ -41,9 +32,9 @@ async function fetchDonorboxData() {
} }
function updateGaugeDisplay(campaignData) { function updateGaugeDisplay(campaignData) {
const collected = campaignData.total_raised || 0; const recurringCount = campaignData.recurring_donors_count || 0;
const goal = campaignData.goal_amt || 50000; const totalSupport = recurringCount + RECURRING_DONORS_OFFSET;
const percentage = Math.min((collected / goal) * 100, 100); const percentage = Math.min((totalSupport / GOAL_SUPPORTERS) * 100, 100);
const gaugeElement = document.getElementById('gauge'); const gaugeElement = document.getElementById('gauge');
if (gaugeElement) { if (gaugeElement) {
@ -53,27 +44,16 @@ function updateGaugeDisplay(campaignData) {
); );
} }
const collectedElement = document.querySelector( const countElement = document.querySelector(
'#gauge--infos__donateurs .value' '#gauge--infos__donateurs .value'
); );
if (collectedElement) { if (countElement) {
collectedElement.textContent = formatCurrency(collected); countElement.textContent = totalSupport;
}
const goalElement = document.querySelector('#gauge--infos__objectif .value');
if (goalElement) {
goalElement.textContent = formatCurrency(goal);
}
const donorsCount = campaignData.donations_count || 0;
const donorsElement = document.querySelector('#gauge--infos__donors .value');
if (donorsElement) {
donorsElement.textContent = donorsCount;
} }
console.log('Gauge updated:', { console.log('Gauge updated:', {
collected: formatCurrency(collected), recurringDonors: recurringCount,
goal: formatCurrency(goal), totalSupport,
percentage: `${percentage.toFixed(1)}%`, percentage: `${percentage.toFixed(1)}%`,
}); });
} }

View file

@ -96,21 +96,17 @@
<div class="gauge__container"> <div class="gauge__container">
<div id="gauge" style="--pourcent: 0%"></div> <div id="gauge" style="--pourcent: 0%"></div>
<div class="gauge--infos" id="gauge--infos__donateurs"> <div class="gauge--infos" id="gauge--infos__donateurs">
<p class="property">Raised</p> <p class="property">Regular supporters</p>
<p class="value">0€</p>
</div>
<div class="gauge--infos" id="gauge--infos__donors">
<p class="property">Donors</p>
<p class="value">0</p> <p class="value">0</p>
</div> </div>
<div class="gauge--infos" id="gauge--infos__objectif"> <div class="gauge--infos" id="gauge--infos__objectif">
<p class="property">Goal</p> <p class="property">Goal</p>
<p class="value"></p> <p class="value">500</p>
</div> </div>
</div> </div>
<p class="p__baseline-big"> <p class="p__baseline-big">
Support us <strong>in 2026</strong> Goal: 500 supporters<br /><strong>in 2026</strong>
</p> </p>
</section> </section>
@ -518,16 +514,36 @@
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
> >
<span class="icon"> <span class="icon">
<svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <svg
<g transform="matrix(1,0,0,1,-2,1.77636e-15)"> width="100%"
<circle cx="14" cy="12" r="12" style="fill:white;"/> height="100%"
</g> viewBox="0 0 24 24"
<g transform="matrix(0.692308,0,0,0.692308,3.69231,3.69231)"> version="1.1"
<path d="M21.742,21.75L14.179,10.571L21.235,2.25L18.779,2.25L13.088,8.964L8.548,2.25L2.359,2.25L9.649,13.026L2.25,21.75L4.706,21.75L10.741,14.632L15.559,21.75L21.75,21.75L21.742,21.75ZM7.739,3.818L18.81,20.182L16.363,20.182L5.29,3.818L7.739,3.818Z" style="fill-rule:nonzero;"/> xmlns="http://www.w3.org/2000/svg"
</g> xmlns:xlink="http://www.w3.org/1999/xlink"
</svg> xml:space="preserve"
</span> xmlns:serif="http://www.serif.com/"
style="
fill-rule: evenodd;
clip-rule: evenodd;
stroke-linejoin: round;
stroke-miterlimit: 2;
"
>
<g transform="matrix(1,0,0,1,-2,1.77636e-15)">
<circle cx="14" cy="12" r="12" style="fill: white" />
</g>
<g
transform="matrix(0.692308,0,0,0.692308,3.69231,3.69231)"
>
<path
d="M21.742,21.75L14.179,10.571L21.235,2.25L18.779,2.25L13.088,8.964L8.548,2.25L2.359,2.25L9.649,13.026L2.25,21.75L4.706,21.75L10.741,14.632L15.559,21.75L21.75,21.75L21.742,21.75ZM7.739,3.818L18.81,20.182L16.363,20.182L5.29,3.818L7.739,3.818Z"
style="fill-rule: nonzero"
/>
</g>
</svg>
</span>
<span class="text">X</span> <span class="text">X</span>
</a> </a>
</li> </li>

View file

@ -97,21 +97,17 @@
<div class="gauge__container"> <div class="gauge__container">
<div id="gauge" style="--pourcent: 0%"></div> <div id="gauge" style="--pourcent: 0%"></div>
<div class="gauge--infos" id="gauge--infos__donateurs"> <div class="gauge--infos" id="gauge--infos__donateurs">
<p class="property">Collectés</p> <p class="property">Soutiens réguliers</p>
<p class="value">0€</p>
</div>
<div class="gauge--infos" id="gauge--infos__donors">
<p class="property">Donateur·ices</p>
<p class="value">0</p> <p class="value">0</p>
</div> </div>
<div class="gauge--infos" id="gauge--infos__objectif"> <div class="gauge--infos" id="gauge--infos__objectif">
<p class="property">Objectif</p> <p class="property">Objectif</p>
<p class="value"></p> <p class="value">500</p>
</div> </div>
</div> </div>
<p class="p__baseline-big"> <p class="p__baseline-big">
Soutenez-nous<br /><strong>en 2026</strong> Objectif 500 soutiens<br /><strong>en 2026</strong>
</p> </p>
</section> </section>
@ -123,7 +119,10 @@
</section> </section>
<section id="section__video"> <section id="section__video">
<h2 class="section__heading">Pourquoi soutenir Index&#8239; ? <br>Écoutez les premier·es concerné·es </h2> <h2 class="section__heading">
Pourquoi soutenir Index&#8239; ? <br />Écoutez les premier·es
concerné·es
</h2>
<div class="video-container"> <div class="video-container">
<iframe <iframe
title="Vidéo de campagne" title="Vidéo de campagne"
@ -147,7 +146,13 @@
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
xml:space="preserve" xml:space="preserve"
xmlns:serif="http://www.serif.com/" xmlns:serif="http://www.serif.com/"
style="fill-rule: evenodd; clip-rule: evenodd; stroke-linejoin: round; stroke-miterlimit: 2;"> style="
fill-rule: evenodd;
clip-rule: evenodd;
stroke-linejoin: round;
stroke-miterlimit: 2;
"
>
<rect <rect
x="0" x="0"
y="0" y="0"
@ -165,22 +170,9 @@
</label> </label>
<ul class="videos__ul"> <ul class="videos__ul">
<li class="videos__li" data-video="https://player.vimeo.com/video/1138884807?h=384a2d15ea&autoplay=1">
<span class="icon">
<svg height="80px" width="80px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve" >
<path d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"/>
</svg>
</span>
<p class="txt">«&#8239;Index fait un travail que&nbsp;la&nbsp;justice ne&nbsp;fait pas »&#8239;: <span class="br-desktop"><br></span>le&nbsp;témoignage dIssam&nbsp;El&nbsp;Khalfaoui</p>
</li>
<li <li
class="videos__li" class="videos__li"
data-video="https://player.vimeo.com/video/1145581831?h=ce46358189&autoplay=1" data-video="https://player.vimeo.com/video/1138884807?h=384a2d15ea&autoplay=1"
> >
<span class="icon"> <span class="icon">
<svg <svg
@ -197,67 +189,199 @@
/> />
</svg> </svg>
</span> </span>
<p class="txt">«&#8239;Votre travail nous a&nbsp;permis de nous rendre au tribunal la&nbsp;tête haute&#8239;»&#8239;: le&nbsp;témoignage de&nbsp;Dominique&nbsp;Rodtchenki-Pontonnier</p> <p class="txt">
«&#8239;Index fait un travail que&nbsp;la&nbsp;justice
ne&nbsp;fait pas »&#8239;:
<span class="br-desktop"><br /></span>le&nbsp;témoignage
dIssam&nbsp;El&nbsp;Khalfaoui
</p>
</li> </li>
<li
class="videos__li"
data-video="https://player.vimeo.com/video/1145581831?h=ce46358189&autoplay=1"
<li class="videos__li" data-video="https://player.vimeo.com/video/1142401468?h=f88778b3dd&autoplay=1"> >
<span class="icon"> <span class="icon">
<svg height="80px" width="80px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve" > <svg
<path d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"/> height="80px"
width="80px"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 512 512"
xml:space="preserve"
>
<path
d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"
/>
</svg> </svg>
</span> </span>
<p class="txt">«&#8239;Les enquêtes d'Index doivent continuer&#8239;»&#8239;: <span class="br-desktop"><br></span>le&nbsp;témoignage dAssa&nbsp;Traoré</p> <p class="txt">
«&#8239;Votre travail nous a&nbsp;permis de nous rendre au
tribunal la&nbsp;tête haute&#8239;»&#8239;: le&nbsp;témoignage
de&nbsp;Dominique&nbsp;Rodtchenki-Pontonnier
</p>
</li> </li>
<li class="videos__li" data-video="https://player.vimeo.com/video/1143395847?h=f28d317c46&autoplay=1"> <li
class="videos__li"
data-video="https://player.vimeo.com/video/1142401468?h=f88778b3dd&autoplay=1"
>
<span class="icon"> <span class="icon">
<svg height="80px" width="80px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve" > <svg
<path d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"/> height="80px"
width="80px"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 512 512"
xml:space="preserve"
>
<path
d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"
/>
</svg> </svg>
</span> </span>
<p class="txt">«&#8239;Vous faites un travail rare et&nbsp;concret&#8239;»&#8239;: <span class="br-desktop"><br></span>le&nbsp;témoignage de&nbsp;Jérôme&nbsp;Rodrigues</p> <p class="txt">
«&#8239;Les enquêtes d'Index doivent continuer&#8239;»&#8239;:
<span class="br-desktop"><br /></span>le&nbsp;témoignage
dAssa&nbsp;Traoré
</p>
</li> </li>
<li class="videos__li" data-video="https://player.vimeo.com/video/1144550389?h=5781ebef9b&autoplay=1"> <li
class="videos__li"
data-video="https://player.vimeo.com/video/1143395847?h=f28d317c46&autoplay=1"
>
<span class="icon"> <span class="icon">
<svg height="80px" width="80px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve" > <svg
<path d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"/> height="80px"
width="80px"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 512 512"
xml:space="preserve"
>
<path
d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"
/>
</svg> </svg>
</span> </span>
<p class="txt">«&#8239;Index est dun intérêt public absolu&#8239;»&#8239;: <span class="br-desktop"><br></span>le&nbsp;témoignage de&nbsp;Fatiha&nbsp;B.</p> <p class="txt">
«&#8239;Vous faites un travail rare
et&nbsp;concret&#8239;»&#8239;:
<span class="br-desktop"><br /></span>le&nbsp;témoignage
de&nbsp;Jérôme&nbsp;Rodrigues
</p>
</li> </li>
<li class="videos__li" data-video="https://player.vimeo.com/video/1145649552?h=63bd03334b&autoplay=1"> <li
class="videos__li"
data-video="https://player.vimeo.com/video/1144550389?h=5781ebef9b&autoplay=1"
>
<span class="icon"> <span class="icon">
<svg height="80px" width="80px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve" > <svg
<path d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"/> height="80px"
width="80px"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 512 512"
xml:space="preserve"
>
<path
d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"
/>
</svg> </svg>
</span> </span>
<p class="txt">«&#8239;Je naurais jamais imaginé recevoir un&nbsp;tel soutien&#8239;»&#8239;: <span class="br-desktop"><br></span>le&nbsp;témoignage de&nbsp;Jean-François&nbsp;Martin</p> <p class="txt">
«&#8239;Index est dun intérêt public absolu&#8239;»&#8239;:
<span class="br-desktop"><br /></span>le&nbsp;témoignage
de&nbsp;Fatiha&nbsp;B.
</p>
</li> </li>
<li class="videos__li" data-video="https://player.vimeo.com/video/1146620554?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479&autoplay=1"> <li
class="videos__li"
data-video="https://player.vimeo.com/video/1145649552?h=63bd03334b&autoplay=1"
>
<span class="icon"> <span class="icon">
<svg height="80px" width="80px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve" > <svg
<path d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"/> height="80px"
width="80px"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 512 512"
xml:space="preserve"
>
<path
d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"
/>
</svg> </svg>
</span> </span>
<p class="txt">«&#8239;Le travail d'Index a permis de rétablir la&nbsp;vérité&#8239;»&#8239;: <span class="br-desktop"><br></span>le&nbsp;témoignage de Mahamadou&nbsp;Camara, frère de&nbsp;Gaye</p> <p class="txt">
«&#8239;Je naurais jamais imaginé recevoir un&nbsp;tel
soutien&#8239;»&#8239;:
<span class="br-desktop"><br /></span>le&nbsp;témoignage
de&nbsp;Jean-François&nbsp;Martin
</p>
</li> </li>
<li class="videos__li" data-video="https://player.vimeo.com/video/1148007280?h=2e9c81e900&autoplay=1"> <li
class="videos__li"
data-video="https://player.vimeo.com/video/1146620554?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479&autoplay=1"
>
<span class="icon"> <span class="icon">
<svg height="80px" width="80px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve" > <svg
<path d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"/> height="80px"
width="80px"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 512 512"
xml:space="preserve"
>
<path
d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"
/>
</svg> </svg>
</span> </span>
<p class="txt">«&#8239;Pour les familles endeuillées, Index est essentiel&#8239;»&#8239;: <span class="br-desktop"><br></span>le&nbsp;témoignage de Christelle Vendeiro-Bico, belle-sœur de Luis&nbsp;Bico</p> <p class="txt">
«&#8239;Le travail d'Index a permis de rétablir
la&nbsp;vérité&#8239;»&#8239;:
<span class="br-desktop"><br /></span>le&nbsp;témoignage de
Mahamadou&nbsp;Camara, frère de&nbsp;Gaye
</p>
</li> </li>
<li
class="videos__li"
data-video="https://player.vimeo.com/video/1148007280?h=2e9c81e900&autoplay=1"
>
<span class="icon">
<svg
height="80px"
width="80px"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 512 512"
xml:space="preserve"
>
<path
d="M500.203,236.907L30.869,2.24c-6.613-3.285-14.443-2.944-20.736,0.939C3.84,7.083,0,13.931,0,21.333v469.333 c0,7.403,3.84,14.251,10.133,18.155c3.413,2.112,7.296,3.179,11.2,3.179c3.264,0,6.528-0.747,9.536-2.24l469.333-234.667 C507.435,271.467,512,264.085,512,256S507.435,240.533,500.203,236.907z"
/>
</svg>
</span>
<p class="txt">
«&#8239;Pour les familles endeuillées, Index est
essentiel&#8239;»&#8239;:
<span class="br-desktop"><br /></span>le&nbsp;témoignage de
Christelle Vendeiro-Bico, belle-sœur de Luis&nbsp;Bico
</p>
</li>
</ul> </ul>
</section> </section>
@ -663,16 +787,36 @@
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
> >
<span class="icon"> <span class="icon">
<svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> <svg
<g transform="matrix(1,0,0,1,-2,1.77636e-15)"> width="100%"
<circle cx="14" cy="12" r="12" style="fill:white;"/> height="100%"
</g> viewBox="0 0 24 24"
<g transform="matrix(0.692308,0,0,0.692308,3.69231,3.69231)"> version="1.1"
<path d="M21.742,21.75L14.179,10.571L21.235,2.25L18.779,2.25L13.088,8.964L8.548,2.25L2.359,2.25L9.649,13.026L2.25,21.75L4.706,21.75L10.741,14.632L15.559,21.75L21.75,21.75L21.742,21.75ZM7.739,3.818L18.81,20.182L16.363,20.182L5.29,3.818L7.739,3.818Z" style="fill-rule:nonzero;"/> xmlns="http://www.w3.org/2000/svg"
</g> xmlns:xlink="http://www.w3.org/1999/xlink"
</svg> xml:space="preserve"
</span> xmlns:serif="http://www.serif.com/"
style="
fill-rule: evenodd;
clip-rule: evenodd;
stroke-linejoin: round;
stroke-miterlimit: 2;
"
>
<g transform="matrix(1,0,0,1,-2,1.77636e-15)">
<circle cx="14" cy="12" r="12" style="fill: white" />
</g>
<g
transform="matrix(0.692308,0,0,0.692308,3.69231,3.69231)"
>
<path
d="M21.742,21.75L14.179,10.571L21.235,2.25L18.779,2.25L13.088,8.964L8.548,2.25L2.359,2.25L9.649,13.026L2.25,21.75L4.706,21.75L10.741,14.632L15.559,21.75L21.75,21.75L21.742,21.75ZM7.739,3.818L18.81,20.182L16.363,20.182L5.29,3.818L7.739,3.818Z"
style="fill-rule: nonzero"
/>
</g>
</svg>
</span>
<span class="text">X</span> <span class="text">X</span>
</a> </a>
</li> </li>