commit f0591a20ab3573b0039231fdb3b77c9fc9b66440
Author: isUnknown
Date: Wed Mar 4 13:39:20 2026 +0100
First commit
diff --git a/.htaccess b/.htaccess
new file mode 100644
index 0000000..5b0df2c
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,26 @@
+
+RewriteEngine On
+RewriteCond %{SERVER_PORT} 80
+RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
+
+
+# compress text file responses
+
+AddOutputFilterByType DEFLATE text/plain
+AddOutputFilterByType DEFLATE text/html
+AddOutputFilterByType DEFLATE text/css
+AddOutputFilterByType DEFLATE text/javascript
+AddOutputFilterByType DEFLATE application/json
+AddOutputFilterByType DEFLATE application/javascript
+AddOutputFilterByType DEFLATE application/x-javascript
+
+
+# set security headers in all responses
+
+
+# serve files as plain text if the actual content type is not known
+# (hardens against attacks from malicious file uploads)
+Header set Content-Type "text/plain" "expr=-z %{CONTENT_TYPE}"
+Header set X-Content-Type-Options "nosniff"
+
+
\ No newline at end of file
diff --git a/api/.env b/api/.env
new file mode 100644
index 0000000..6dfc008
--- /dev/null
+++ b/api/.env
@@ -0,0 +1,12 @@
+# Configuration Brevo API
+# ATTENTION : Ce fichier contient des informations sensibles
+# Ne JAMAIS commiter ce fichier dans Git
+
+# Clé API Brevo
+BREVO_API_KEY=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
+
+# ID de la liste de contacts Brevo
+BREVO_LIST_ID=2
+
+# Origines autorisées pour CORS
+ALLOWED_ORIGINS=*
diff --git a/api/.htaccess b/api/.htaccess
new file mode 100644
index 0000000..c962ba9
--- /dev/null
+++ b/api/.htaccess
@@ -0,0 +1,9 @@
+# Protection du dossier cache
+
+ Deny from all
+
+
+# Autoriser uniquement l'accès au proxy PHP
+
+ Allow from all
+
diff --git a/api/brevo-config.php b/api/brevo-config.php
new file mode 100644
index 0000000..eb0cc3f
--- /dev/null
+++ b/api/brevo-config.php
@@ -0,0 +1,31 @@
+ 'Method not allowed']);
+ exit();
+}
+
+if (empty(BREVO_API_KEY)) {
+ http_response_code(500);
+ echo json_encode([
+ 'error' => 'Server configuration error',
+ 'message' => 'Brevo API key not configured'
+ ]);
+ exit();
+}
+
+$input = file_get_contents('php://input');
+$data = json_decode($input, true);
+
+if (!isset($data['email']) || empty($data['email'])) {
+ http_response_code(400);
+ echo json_encode(['error' => 'Email required']);
+ exit();
+}
+
+$email = filter_var($data['email'], FILTER_VALIDATE_EMAIL);
+if ($email === false) {
+ http_response_code(400);
+ echo json_encode(['error' => 'Invalid email']);
+ exit();
+}
+
+$brevoData = [
+ 'email' => $email,
+ 'listIds' => [BREVO_LIST_ID],
+ 'updateEnabled' => true
+];
+
+// Only include attributes if provided and not empty
+if (isset($data['attributes']) && is_array($data['attributes']) && !empty($data['attributes'])) {
+ $brevoData['attributes'] = $data['attributes'];
+}
+
+$ch = curl_init();
+
+curl_setopt_array($ch, [
+ CURLOPT_URL => BREVO_API_URL,
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_POST => true,
+ CURLOPT_POSTFIELDS => json_encode($brevoData),
+ CURLOPT_HTTPHEADER => [
+ 'Content-Type: application/json',
+ 'api-key: ' . BREVO_API_KEY,
+ 'User-Agent: Index-NGO-Newsletter'
+ ],
+ CURLOPT_TIMEOUT => 10,
+ CURLOPT_SSL_VERIFYPEER => true
+]);
+
+$response = curl_exec($ch);
+$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+$curlError = curl_error($ch);
+curl_close($ch);
+
+if ($response === false) {
+ http_response_code(500);
+ echo json_encode([
+ 'error' => 'Connection error',
+ 'details' => $curlError
+ ]);
+ exit();
+}
+
+$responseData = json_decode($response, true);
+
+switch ($httpCode) {
+ case 201:
+ case 204:
+ http_response_code(200);
+ echo json_encode([
+ 'success' => true,
+ 'message' => 'Successfully subscribed',
+ 'email' => $email
+ ]);
+ break;
+
+ case 400:
+ http_response_code(400);
+ $isDuplicate = isset($responseData['code']) && $responseData['code'] === 'duplicate_parameter';
+
+ echo json_encode([
+ 'error' => $isDuplicate ? 'email_already_exists' : 'invalid_data',
+ 'message' => $isDuplicate
+ ? 'This email is already subscribed to our newsletter.'
+ : 'Invalid email address.',
+ 'user_message' => $isDuplicate
+ ? 'You are already subscribed!'
+ : 'Please check your email address.'
+ ]);
+ break;
+
+ case 401:
+ http_response_code(500);
+ $isIpIssue = isset($responseData['code']) && $responseData['code'] === 'unauthorized'
+ && strpos($responseData['message'] ?? '', 'IP address') !== false;
+
+ echo json_encode([
+ 'error' => $isIpIssue ? 'ip_not_authorized' : 'invalid_api_key',
+ 'message' => $isIpIssue
+ ? 'Server IP not authorized on Brevo'
+ : 'Invalid API key',
+ 'user_message' => 'A technical error occurred. Please try again later.',
+ 'admin_info' => $responseData['message'] ?? null
+ ]);
+ break;
+
+ case 404:
+ http_response_code(500);
+ echo json_encode([
+ 'error' => 'list_not_found',
+ 'message' => 'Contact list not found',
+ 'user_message' => 'A technical error occurred. Please try again later.'
+ ]);
+ break;
+
+ default:
+ http_response_code($httpCode);
+ echo json_encode([
+ 'error' => 'api_error',
+ 'message' => 'Error communicating with subscription service',
+ 'user_message' => 'An error occurred. Please try again.',
+ 'http_code' => $httpCode
+ ]);
+ break;
+}
diff --git a/api/cache/donorbox_data.json b/api/cache/donorbox_data.json
new file mode 100644
index 0000000..6a861e6
--- /dev/null
+++ b/api/cache/donorbox_data.json
@@ -0,0 +1,8 @@
+{
+ "total_raised": "35675.25",
+ "goal_amt": "50000.0",
+ "currency": "eur",
+ "donations_count": 521,
+ "campaign_name": "Soutenez Index avant le 31 d\u00e9cembre 2025 !",
+ "updated_at": "2026-02-27T12:51:20+01:00"
+}
\ No newline at end of file
diff --git a/api/donorbox-proxy.php b/api/donorbox-proxy.php
new file mode 100644
index 0000000..90fdb04
--- /dev/null
+++ b/api/donorbox-proxy.php
@@ -0,0 +1,150 @@
+ 'Méthode non autorisée']);
+ exit();
+}
+
+// Configuration de l'API Donorbox
+define('DONORBOX_EMAIL', 'contact@index.ngo');
+define('DONORBOX_API_KEY', 'Q5oiaoxPwA5C2s1iafh_pihynM_5HOZbMZz6QwjVx2aLhWijOPI9rw');
+define('CAMPAIGN_SLUG', 'soutenir-index-2025-don'); // Slug de la campagne à filtrer
+define('DONORBOX_API_URL', 'https://donorbox.org/api/v1/campaigns');
+
+// Gestion du cache (5 minutes)
+$cacheFile = __DIR__ . '/cache/donorbox_data.json';
+$cacheTime = 300; // 5 minutes en secondes
+
+// Vérifier si le cache existe et est valide
+if (file_exists($cacheFile) && (time() - filemtime($cacheFile) < $cacheTime)) {
+ // Utiliser le cache
+ $cachedData = file_get_contents($cacheFile);
+ echo $cachedData;
+ exit();
+}
+
+// Appel à l'API Donorbox avec Basic Auth (--user format)
+$ch = curl_init();
+
+curl_setopt_array($ch, [
+ CURLOPT_URL => DONORBOX_API_URL,
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_USERPWD => DONORBOX_EMAIL . ':' . DONORBOX_API_KEY, // Format --user de cURL
+ CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
+ CURLOPT_HTTPHEADER => [
+ 'Content-Type: application/json',
+ 'User-Agent: Index-NGO-Website'
+ ],
+ CURLOPT_TIMEOUT => 10,
+ CURLOPT_SSL_VERIFYPEER => true
+]);
+
+$response = curl_exec($ch);
+$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+$curlError = curl_error($ch);
+
+curl_close($ch);
+
+// Gestion des erreurs
+if ($response === false) {
+ http_response_code(500);
+ echo json_encode([
+ 'error' => 'Erreur de connexion à Donorbox',
+ 'details' => $curlError
+ ]);
+ exit();
+}
+
+if ($httpCode !== 200) {
+ http_response_code($httpCode);
+ echo json_encode([
+ 'error' => 'Erreur API Donorbox',
+ 'http_code' => $httpCode,
+ 'response' => json_decode($response)
+ ]);
+ exit();
+}
+
+// Décoder et valider la réponse
+$campaigns = json_decode($response, true);
+
+if (json_last_error() !== JSON_ERROR_NONE) {
+ http_response_code(500);
+ echo json_encode([
+ 'error' => 'Réponse JSON invalide',
+ 'details' => json_last_error_msg()
+ ]);
+ exit();
+}
+
+// Trouver la campagne correspondante par son slug/name
+$campaign = null;
+if (is_array($campaigns)) {
+ foreach ($campaigns as $camp) {
+ // Recherche par slug ou par name
+ if (isset($camp['slug']) && $camp['slug'] === CAMPAIGN_SLUG) {
+ $campaign = $camp;
+ break;
+ }
+ if (isset($camp['name']) && strpos(strtolower($camp['name']), strtolower(CAMPAIGN_SLUG)) !== false) {
+ $campaign = $camp;
+ break;
+ }
+ }
+}
+
+// Si aucune campagne trouvée, utiliser la première ou renvoyer une erreur
+if ($campaign === null) {
+ if (is_array($campaigns) && count($campaigns) > 0) {
+ $campaign = $campaigns[0]; // Prendre la première campagne par défaut
+ } else {
+ http_response_code(404);
+ echo json_encode([
+ 'error' => 'Aucune campagne trouvée',
+ 'campaigns_count' => is_array($campaigns) ? count($campaigns) : 0
+ ]);
+ exit();
+ }
+}
+
+// Extraire uniquement les données nécessaires
+$filteredData = [
+ 'total_raised' => $campaign['total_raised'] ?? 0,
+ 'goal_amt' => $campaign['goal_amt'] ?? 50000,
+ 'currency' => $campaign['currency'] ?? 'EUR',
+ 'donations_count' => $campaign['donations_count'] ?? 0,
+ 'campaign_name' => $campaign['name'] ?? 'Unknown',
+ 'updated_at' => date('c')
+];
+
+$jsonResponse = json_encode($filteredData, JSON_PRETTY_PRINT);
+
+// Sauvegarder dans le cache
+if (!file_exists(dirname($cacheFile))) {
+ mkdir(dirname($cacheFile), 0755, true);
+}
+file_put_contents($cacheFile, $jsonResponse);
+
+// Retourner la réponse
+echo $jsonResponse;
diff --git a/assets/css/base/_body.scss b/assets/css/base/_body.scss
new file mode 100644
index 0000000..98452c6
--- /dev/null
+++ b/assets/css/base/_body.scss
@@ -0,0 +1,44 @@
+* {
+ margin: 0;
+ padding: 0;
+
+ box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+ -moz-font-smoothing: antialiased;
+ -o-font-smoothing: antialiased;
+
+ scroll-behavior: smooth;
+}
+a {
+ color: currentColor;
+}
+button{
+ background: none;
+ outline: none;
+ border: none;
+ color: var(--color-txt);
+}
+iframe{
+ border: none;
+}
+
+body{
+ font-family: var(--font);
+ line-height: var(--leading-normal);
+ font-size: var(--fs-normal);
+
+ color: var(--color-txt);
+ background-color: var(--color-bg);
+ padding: 0px var(--padding-body);
+
+ width: 100vw;
+ overflow-x: hidden;
+
+}
+
+
+
+main{
+ padding-top: var(--header-h);
+ // padding-bottom: 10vh;
+}
\ No newline at end of file
diff --git a/assets/css/base/_responsive.scss b/assets/css/base/_responsive.scss
new file mode 100644
index 0000000..ff9bac4
--- /dev/null
+++ b/assets/css/base/_responsive.scss
@@ -0,0 +1,11 @@
+$desktop: "screen and (min-width: 1200px)";
+$medium: "screen and (max-width: 1080px)";
+$medium-up: "screen and (min-width: 1080px)";
+$small-up: "screen and (min-width: 720px)";
+$small: "screen and (max-width: 720px)";
+$x-small: "screen and (max-width: 560px)";
+$paysage: "screen and (max-height: 670px) and (min-width: 1080px)";
+
+@media #{$medium}{
+
+}
diff --git a/assets/css/base/_var.scss b/assets/css/base/_var.scss
new file mode 100644
index 0000000..bbab83b
--- /dev/null
+++ b/assets/css/base/_var.scss
@@ -0,0 +1,60 @@
+:root {
+ --font: 'Executive', Arial, sans-serif;
+ --title: 'System', Arial, sans-serif;
+
+ // --fs-x-small: 10px;
+ // --fs-small: 12px;
+ // --fs-normal: 16px;
+ // --fs-medium: 22px;
+ // --fs-big: 38px;
+
+ --fs-x-small: 10px;
+ --fs-small: 12px;
+ --fs-normal: 16px;
+ --fs-medium: 20px;
+ --fs-big: 30px;
+ --fs-x-big: 38px;
+
+ --fs-button-bold: 22px;
+
+ @media #{$small} {
+ --fs-medium: 20px;
+ --fs-big: 26px;
+ }
+
+ --leading-tight: 1;
+ --leading-normal: 1.2;
+ // --leading-relaxed: 1.4;
+ // --leading-loose: 1.8;
+
+ --fw-normal: 400;
+ --fw-medium: 500;
+ --fw-bold: 600;
+
+ --color-bg: #161616;
+ --color-txt: #ffffff;
+ --color-accent: #00ff00;
+ --color-accent-50: #e9ffe9;
+ --color-accent-100: #d8fdd8;
+
+ --grey-100: #d8d8d8;
+ --grey-300: #b9b9b9;
+ --grey-400: #969696;
+ --grey-600: #6d6d6d;
+ --grey-800: #383838;
+
+ --border: 1px solid var(--color-txt);
+ --border-light: 1px solid var(--grey-800);
+
+ --header-h: 80px;
+ --header-h-shrinked: 50px;
+
+ // responsive
+ --padding-body: 20px;
+
+ --radius-small: 4px;
+ --spacing: 30px;
+ --h-block: 30px;
+
+ --curve: cubic-bezier(0.175, 0.885, 0.32, 1.275);
+}
diff --git a/assets/css/components/_btn--default.scss b/assets/css/components/_btn--default.scss
new file mode 100644
index 0000000..1edcd10
--- /dev/null
+++ b/assets/css/components/_btn--default.scss
@@ -0,0 +1,79 @@
+.btn__default{
+
+
+ --size: calc(var(--h-block) - 8px);
+ font-size: var(--fs-normal);
+ font-weight: var(--fw-normal);
+ height: var(--size);
+ padding-right: 1.5ch;
+
+ position: relative;
+
+
+ display: flex;
+ align-items: center;
+ gap: 0ch;
+ // padding-right: 0.5ch;
+ color: var(--color-accent);
+ font-weight: var(--fw-medium);
+ text-decoration: none;
+
+ cursor: pointer;
+
+
+ .icon, .txt{ z-index: 10; }
+
+ .icon{
+ width: var(--size);
+ height: var(--size);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--color-bg);
+ text-align: center;
+
+ svg{
+ fill: var(--color-bg);
+ width: 80%;
+ }
+ }
+
+ .txt{
+ font-family: var(--font-title);
+ color: var(--color-accent);
+ font-size: var(--fs-normal);
+ font-weight: var(--fw-bold);
+ padding-left: 1ch;
+ }
+
+ &::after{
+ content: '';
+ display: block;
+ background-color: var(--color-accent);
+ border-radius: calc(var(--size)/2);
+ width: var(--size);
+ height: var(--size);
+ position: absolute;
+ left: 0;
+ z-index: 0;
+ transition: width .2s
+ }
+
+ &:hover{
+ //
+ .txt{
+ color: var(--color-bg);
+ display: block;
+ }
+ &::after{
+ width: 100%;
+ }
+ }
+
+
+
+
+
+
+}
+
diff --git a/assets/css/components/_btn--don.scss b/assets/css/components/_btn--don.scss
new file mode 100644
index 0000000..3c4e2d0
--- /dev/null
+++ b/assets/css/components/_btn--don.scss
@@ -0,0 +1,60 @@
+#btn--don__mobile {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ padding-top: calc(var(--spacing) * 0.5);
+ padding-bottom: calc(var(--spacing) * 1.5);
+ position: fixed;
+ bottom: 0px;
+ left: 0;
+ z-index: 100;
+ opacity: 0;
+ transition: opacity ease-in 0.2s;
+
+ pointer-events: none;
+ &.is-visible {
+ pointer-events: all;
+ opacity: 1;
+ }
+
+ &.is-sticky {
+ position: relative;
+ }
+
+ @media #{$small-up} {
+ display: none !important;
+ }
+}
+
+.btn--don {
+ --vertical-padding: 0.5ch;
+ height: calc(var(--h-block) + var(--vertical-padding));
+ border-radius: calc(var(--h-block) / 1);
+ padding: var(--vertical-padding) 2ch;
+ background-color: var(--color-accent);
+ color: var(--color-bg);
+ font-family: var(--font);
+ font-size: var(--fs-medium);
+ font-weight: var(--fw-bold);
+
+ a {
+ text-decoration: none;
+ display: flex;
+ align-items: center;
+ gap: 0.5ch;
+ }
+
+ .icon {
+ height: 28px;
+ position: relative;
+ top: 1px;
+ }
+
+ svg {
+ fill: var(--color-bg);
+ width: 24px;
+ height: 24px;
+ }
+}
diff --git a/assets/css/components/_form-newsletter.scss b/assets/css/components/_form-newsletter.scss
new file mode 100644
index 0000000..8eac349
--- /dev/null
+++ b/assets/css/components/_form-newsletter.scss
@@ -0,0 +1,127 @@
+.form__newsletter{
+ --size: 24px;
+
+ position: relative;
+ display: flex;
+ align-items: center;
+ position: relative;
+
+
+
+ input[type="email"]{
+
+ height: calc(var(--h-block)*1.25);
+ width: 100%;
+ border-radius: calc(var(--h-block)*0.625);
+ outline: none;
+ border: none;
+ padding: 0 2ch;
+ font-family: var(--font);
+
+ font-size: var(--fs-normal);
+ z-index: 40;
+ padding-top: 4px;
+ &::placeholder{
+ font-family: var(--font);
+ font-size: var(--fs-normal);
+ }
+
+ &:focus{
+ outline: 3px solid var(--grey-400);
+ }
+
+
+ }
+
+ button[type="submit"].btn--bold{
+ position: absolute;
+ right: 2px;
+ z-index: 100;
+ }
+
+
+ button[type="submit"].btn--bold {
+
+
+ --size: calc(var(--h-block)*1.25 - 4px);
+ font-family: var(--font);
+ font-size: var(--fs-button-bold);
+ height: var(--size);
+
+
+ display: flex;
+ align-items: center;
+ gap: 0.75ch;
+ color: var(--color-accent);
+ font-weight: var(--fw-medium);
+ text-decoration: none;
+
+ cursor: pointer;
+
+
+ .icon, .txt{ z-index: 10; }
+
+ .icon{
+ width: var(--size);
+ height: var(--size);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--color-bg);
+ text-align: center;
+
+ svg{
+ fill: var(--color-bg);
+ width: 80%;
+ }
+ }
+
+ .txt{
+ position: relative;
+ top: 2px;
+ font-size: var(--fs-normal);
+ display: none;
+ padding-left: 1ch;
+ }
+
+ &::after{
+ content: '';
+ display: block;
+ background-color: var(--color-accent);
+ border-radius: calc(var(--size)/2);
+ width: var(--size);
+ height: var(--size);
+ position: absolute;
+ right: 0;
+ z-index: 0;
+ transition: width .2s
+ }
+
+ &:hover{
+ .txt{
+ color: var(--color-bg);
+ display: block;
+ }
+ &::after{
+ width: 100%;
+ }
+ }
+
+ // @media #{$small}{
+ // .txt{
+ // color: var(--color-bg);
+ // display: block;
+ // }
+ // &::after{
+ // width: 100%;
+ // }
+ // }
+
+
+
+ }
+
+
+
+
+}
\ No newline at end of file
diff --git a/assets/css/components/_gauge.scss b/assets/css/components/_gauge.scss
new file mode 100644
index 0000000..42fd1fb
--- /dev/null
+++ b/assets/css/components/_gauge.scss
@@ -0,0 +1,90 @@
+.gauge__container {
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+
+ position: relative;
+ top: calc(var(--spacing) * 0.25);
+
+ padding: 0 calc(var(--spacing) * 0.5);
+}
+
+#gauge {
+ --gauge-h: 12px;
+ width: 100%;
+ margin-bottom: calc(var(--spacing) * 0.25);
+ height: var(--gauge-h);
+ border-radius: calc(var(--gauge-h) * 0.5);
+ background-color: var(--color-bg);
+ border: 1px solid var(--color-txt);
+ position: relative;
+ // overflow: hidden;
+ box-shadow: 7px 6px 5px -3px rgba(0, 0, 0, 0.14);
+ &::before {
+ content: '';
+ display: block;
+ height: calc(var(--gauge-h) - 2px);
+ border-radius: calc(var(--gauge-h) * 0.5);
+ width: var(--pourcent);
+ min-width: 20px;
+ background-color: var(--color-accent);
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ transition: width cubic-bezier(0.86, 0, 0.07, 1) 1s;
+ }
+}
+
+.gauge--infos {
+ .property {
+ font-size: var(--fs-small);
+ padding-bottom: 3px;
+ }
+
+ .value {
+ font-size: var(--fs-small);
+ }
+
+ &:last-of-type {
+ text-align: right;
+ }
+}
+
+#gauge--infos__donors {
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+
+ .value {
+ font-weight: bold;
+ display: inline;
+ }
+
+ .property {
+ display: inline;
+ padding-bottom: 0;
+ }
+}
+
+
+@media #{$small-up} {
+ #gauge {
+ --gauge-h: 18px;
+
+ border: 2px solid var(--color-txt);
+ &::before {
+ height: calc(var(--gauge-h) - 4px);
+ }
+ }
+
+ .gauge--infos {
+ .property {
+ font-size: var(--fs-small);
+ }
+ .value {
+ font-size: var(--fs-normal);
+ }
+ }
+}
diff --git a/assets/css/components/_nav-tabs.scss b/assets/css/components/_nav-tabs.scss
new file mode 100644
index 0000000..2cbf6df
--- /dev/null
+++ b/assets/css/components/_nav-tabs.scss
@@ -0,0 +1,40 @@
+.nav--tabs{
+ height: calc(var(--h-block)*1);
+ width: auto;
+ border: var(--border);
+ border-radius: var(--radius-small);
+ overflow: hidden;
+
+
+ display: inline-flex;
+
+ width: auto;
+ margin: 0 auto;
+ margin-bottom: var(--spacing);
+
+
+ .nav--tabs__btn{
+ font-family: var(--font);
+ font-size: var(--fs-small);
+ font-weight: var(--fw-medium);
+ padding: 0 2ch;
+
+ &.is-selected{
+ background-color: var(--color-txt);
+ color: var(--color-bg);
+ }
+
+ &:not(.is-selected):hover{
+ background-color: var(--grey-800);
+ cursor: pointer;
+ }
+
+ }
+
+ .nav--tabs__btn + .nav--tabs__btn{
+ border-left: var(--border);
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/assets/css/components/_text.scss b/assets/css/components/_text.scss
new file mode 100644
index 0000000..2aa69f1
--- /dev/null
+++ b/assets/css/components/_text.scss
@@ -0,0 +1,68 @@
+[data-template="subscription-newsletter"],
+[data-template="thanks"],
+[data-template="support"],
+[data-template="store"]{
+
+ .p__baseline-big{
+ font-family: var(--title);
+ font-size: var(--fs-big);
+ font-weight: var(--fw-bold);
+ line-height: 1.1;
+ text-align: center;
+ margin: calc(var(--spacing)*1) 0;
+
+ strong{
+ font-weight: var(--fw-bolf);
+ color: var(--color-accent);
+ }
+
+ .link-don{
+ display: block;
+ color: var(--color-accent);
+ text-decoration: none;
+ // &::after{
+ // content: ' ↗';
+ // font-size: 0.8em;
+ // }
+ &:hover{
+ text-decoration: underline 2px;
+ text-underline-offset: 4px;
+
+ }
+ }
+ }
+
+ .p__baseline{
+ font-size: var(--fs-medium);
+ font-weight: var(--fw-medium);
+ line-height: 1.1;
+ text-align: center;
+ margin: calc(var(--spacing)*1) 0;
+ @media #{$small}{
+ text-align: center;
+ margin: var(--spacing) 0;
+ }
+ }
+
+ .p__details{
+ font-size: var(--fs-small);
+ margin-bottom: 0.5em;
+ color: var(--grey-400);
+ }
+
+ .section__heading{
+ font-size: var(--fs-normal);
+ font-weight: var(--fw-medium);
+ line-height: 1;
+ text-align: center;
+ margin-top: calc(var(--spacing)*0.5);
+ margin-bottom: calc(var(--spacing)*1);
+ }
+
+ ul, ol{
+ margin-left: 3ch;
+ margin-bottom: 0.5em;
+ }
+
+}
+
diff --git a/assets/css/partials/_site-footer.scss b/assets/css/partials/_site-footer.scss
new file mode 100644
index 0000000..b6ae09d
--- /dev/null
+++ b/assets/css/partials/_site-footer.scss
@@ -0,0 +1,122 @@
+#site-footer{
+
+ background-color: black;
+
+ width: 100vw;
+ position: relative;
+ left: calc(var(--padding-body)*-1);
+ padding: calc(var(--padding-body)*2) var(--padding-body);
+// border-top: var(--border-light);
+
+ p{
+ margin: calc(var(--spacing)*0.5) 0;
+
+ a{
+ text-decoration: none;
+ &:hover{
+ text-decoration: underline;
+ }
+ }
+ }
+
+ .p__small{
+ font-size: var(--fs-x-small);
+ // margin-top: calc(var(--spacing)*0.5)
+ }
+
+ #list-socials {
+ list-style: none;
+ columns: 2;
+ max-width: 500px;
+ margin: 0;
+ a{
+
+ display: flex;
+ align-items: center;
+ gap: 1ch;
+ text-decoration: none;
+ height: calc(var(--spacing)*1);
+
+ &::after{
+ content: '↗';
+ color: var(--grey-300);
+ }
+ }
+
+ .text{
+ line-height: 1;
+
+ }
+
+ .icon{
+ width: 20px;
+ height: 20px;
+ position: relative;
+ top: -2px;
+ }
+ svg{
+ display: flex;
+ align-items: center;
+ width: 20px;
+ height: 20px;
+
+ }
+ }
+
+
+
+
+ @media #{$small}{
+ margin-top: calc(var(--spacing)*2);
+ .footer__socials{
+ margin-top: calc(var(--spacing)*1.5);
+ }
+ .footer__mentions{
+ margin-top: calc(var(--spacing)*0.5);
+ p{
+ // font-size: var(--font-size);
+ margin-top: calc(var(--spacing)*2);
+ }
+ }
+ }
+
+
+ @media #{$small-up}{
+
+ .site-footer__container{
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ column-gap: calc(var(--spacing)*2);
+
+ max-width: 1200px;
+ margin: 0 auto;
+ }
+
+ .footer__mentions{
+ grid-column: span 2;
+ text-align: center;
+ p{
+ font-size: var(--font-size);
+ margin-top: calc(var(--spacing)*2);
+ }
+
+ }
+
+ }
+
+ @media #{$medium-up}{
+ .site-footer__container{
+ column-gap: calc(var(--spacing)*4);
+ }
+ }
+
+ @media #{$small}{
+ .footer__mentions{
+ padding-top: calc(var(--spacing)*1);
+ p{ margin-top: 0;}
+
+ text-align: center;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/assets/css/partials/_site-header.scss b/assets/css/partials/_site-header.scss
new file mode 100644
index 0000000..cf92821
--- /dev/null
+++ b/assets/css/partials/_site-header.scss
@@ -0,0 +1,78 @@
+@keyframes add-border {
+ from {
+ border-bottom-color: transparent;
+ }
+ to {
+ border-bottom: var(--grey-800);
+ }
+}
+
+#site-header {
+ position: fixed;
+ left: var(--padding-body);
+ top: 0px;
+ z-index: 900;
+
+ width: calc(100vw - var(--padding-body) * 2);
+ // padding: 0 var(--padding-body);
+ height: var(--header-h);
+ &.is-shrinked {
+ height: var(--header-h-shrinked);
+ // animation: add-border 0.2s linear 0.2s;
+ border-bottom: var(--border-light);
+ }
+ // transition: all ease-in 0.2s;
+
+ background-color: var(--color-bg);
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ .site-title {
+ display: flex;
+ width: 120px;
+ transition: all ease-in 0.2s;
+ overflow: hidden;
+ svg {
+ fill: var(--color-txt);
+ }
+ }
+ &.is-shrinked {
+ .site-title {
+ width: 80px !important;
+ }
+ }
+
+ .header-left,
+ .header-right {
+ width: 90px;
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ }
+
+ .header-center {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ }
+
+ #toggle-lang {
+ list-style: none;
+ display: flex;
+ justify-content: flex-end;
+ gap: 0.75ch;
+ text-transform: uppercase;
+ color: var(--grey-400);
+ line-height: 1;
+ margin: 0;
+ padding: 0;
+
+ a {
+ text-decoration: none;
+ }
+ li.is-selected {
+ color: var(--color-txt);
+ }
+ }
+}
diff --git a/assets/css/style.css b/assets/css/style.css
new file mode 100644
index 0000000..68d32fd
--- /dev/null
+++ b/assets/css/style.css
@@ -0,0 +1,1311 @@
+@charset "UTF-8";
+:root {
+ --font: "Executive", Arial, sans-serif;
+ --title: "System", Arial, sans-serif;
+ --fs-x-small: 10px;
+ --fs-small: 12px;
+ --fs-normal: 16px;
+ --fs-medium: 20px;
+ --fs-big: 30px;
+ --fs-x-big: 38px;
+ --fs-button-bold: 22px;
+ --leading-tight: 1;
+ --leading-normal: 1.2;
+ --fw-normal: 400;
+ --fw-medium: 500;
+ --fw-bold: 600;
+ --color-bg: #161616;
+ --color-txt: #ffffff;
+ --color-accent: #00ff00;
+ --color-accent-50: #e9ffe9;
+ --color-accent-100: #d8fdd8;
+ --grey-100: #d8d8d8;
+ --grey-300: #b9b9b9;
+ --grey-400: #969696;
+ --grey-600: #6d6d6d;
+ --grey-800: #383838;
+ --border: 1px solid var(--color-txt);
+ --border-light: 1px solid var(--grey-800);
+ --header-h: 80px;
+ --header-h-shrinked: 50px;
+ --padding-body: 20px;
+ --radius-small: 4px;
+ --spacing: 30px;
+ --h-block: 30px;
+ --curve: cubic-bezier(0.175, 0.885, 0.32, 1.275);
+}
+@media screen and (max-width: 720px) {
+ :root {
+ --fs-medium: 20px;
+ --fs-big: 26px;
+ }
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+ -moz-font-smoothing: antialiased;
+ -o-font-smoothing: antialiased;
+ scroll-behavior: smooth;
+}
+
+a {
+ color: currentColor;
+}
+
+button {
+ background: none;
+ outline: none;
+ border: none;
+ color: var(--color-txt);
+}
+
+iframe {
+ border: none;
+}
+
+body {
+ font-family: var(--font);
+ line-height: var(--leading-normal);
+ font-size: var(--fs-normal);
+ color: var(--color-txt);
+ background-color: var(--color-bg);
+ padding: 0px var(--padding-body);
+ width: 100vw;
+ overflow-x: hidden;
+}
+
+main {
+ padding-top: var(--header-h);
+}
+
+.nav--tabs {
+ height: calc(var(--h-block) * 1);
+ width: auto;
+ border: var(--border);
+ border-radius: var(--radius-small);
+ overflow: hidden;
+ display: inline-flex;
+ width: auto;
+ margin: 0 auto;
+ margin-bottom: var(--spacing);
+}
+.nav--tabs .nav--tabs__btn {
+ font-family: var(--font);
+ font-size: var(--fs-small);
+ font-weight: var(--fw-medium);
+ padding: 0 2ch;
+}
+.nav--tabs .nav--tabs__btn.is-selected {
+ background-color: var(--color-txt);
+ color: var(--color-bg);
+}
+.nav--tabs .nav--tabs__btn:not(.is-selected):hover {
+ background-color: var(--grey-800);
+ cursor: pointer;
+}
+.nav--tabs .nav--tabs__btn + .nav--tabs__btn {
+ border-left: var(--border);
+}
+
+.btn__default {
+ --size: calc(var(--h-block) - 8px);
+ font-size: var(--fs-normal);
+ font-weight: var(--fw-normal);
+ height: var(--size);
+ padding-right: 1.5ch;
+ position: relative;
+ display: flex;
+ align-items: center;
+ gap: 0ch;
+ color: var(--color-accent);
+ font-weight: var(--fw-medium);
+ text-decoration: none;
+ cursor: pointer;
+}
+.btn__default .icon, .btn__default .txt {
+ z-index: 10;
+}
+.btn__default .icon {
+ width: var(--size);
+ height: var(--size);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--color-bg);
+ text-align: center;
+}
+.btn__default .icon svg {
+ fill: var(--color-bg);
+ width: 80%;
+}
+.btn__default .txt {
+ font-family: var(--font-title);
+ color: var(--color-accent);
+ font-size: var(--fs-normal);
+ font-weight: var(--fw-bold);
+ padding-left: 1ch;
+}
+.btn__default::after {
+ content: "";
+ display: block;
+ background-color: var(--color-accent);
+ border-radius: calc(var(--size) / 2);
+ width: var(--size);
+ height: var(--size);
+ position: absolute;
+ left: 0;
+ z-index: 0;
+ transition: width 0.2s;
+}
+.btn__default:hover .txt {
+ color: var(--color-bg);
+ display: block;
+}
+.btn__default:hover::after {
+ width: 100%;
+}
+
+#btn--don__mobile {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding-top: calc(var(--spacing) * 0.5);
+ padding-bottom: calc(var(--spacing) * 1.5);
+ position: fixed;
+ bottom: 0px;
+ left: 0;
+ z-index: 100;
+ opacity: 0;
+ transition: opacity ease-in 0.2s;
+ pointer-events: none;
+}
+#btn--don__mobile.is-visible {
+ pointer-events: all;
+ opacity: 1;
+}
+#btn--don__mobile.is-sticky {
+ position: relative;
+}
+@media screen and (min-width: 720px) {
+ #btn--don__mobile {
+ display: none !important;
+ }
+}
+
+.btn--don {
+ --vertical-padding: 0.5ch;
+ height: calc(var(--h-block) + var(--vertical-padding));
+ border-radius: calc(var(--h-block) / 1);
+ padding: var(--vertical-padding) 2ch;
+ background-color: var(--color-accent);
+ color: var(--color-bg);
+ font-family: var(--font);
+ font-size: var(--fs-medium);
+ font-weight: var(--fw-bold);
+}
+.btn--don a {
+ text-decoration: none;
+ display: flex;
+ align-items: center;
+ gap: 0.5ch;
+}
+.btn--don .icon {
+ height: 28px;
+ position: relative;
+ top: 1px;
+}
+.btn--don svg {
+ fill: var(--color-bg);
+ width: 24px;
+ height: 24px;
+}
+
+.form__newsletter {
+ --size: 24px;
+ position: relative;
+ display: flex;
+ align-items: center;
+ position: relative;
+}
+.form__newsletter input[type=email] {
+ height: calc(var(--h-block) * 1.25);
+ width: 100%;
+ border-radius: calc(var(--h-block) * 0.625);
+ outline: none;
+ border: none;
+ padding: 0 2ch;
+ font-family: var(--font);
+ font-size: var(--fs-normal);
+ z-index: 40;
+ padding-top: 4px;
+}
+.form__newsletter input[type=email]::-moz-placeholder {
+ font-family: var(--font);
+ font-size: var(--fs-normal);
+}
+.form__newsletter input[type=email]::placeholder {
+ font-family: var(--font);
+ font-size: var(--fs-normal);
+}
+.form__newsletter input[type=email]:focus {
+ outline: 3px solid var(--grey-400);
+}
+.form__newsletter button[type=submit].btn--bold {
+ position: absolute;
+ right: 2px;
+ z-index: 100;
+}
+.form__newsletter button[type=submit].btn--bold {
+ --size: calc(var(--h-block)*1.25 - 4px);
+ font-family: var(--font);
+ font-size: var(--fs-button-bold);
+ height: var(--size);
+ display: flex;
+ align-items: center;
+ gap: 0.75ch;
+ color: var(--color-accent);
+ font-weight: var(--fw-medium);
+ text-decoration: none;
+ cursor: pointer;
+}
+.form__newsletter button[type=submit].btn--bold .icon, .form__newsletter button[type=submit].btn--bold .txt {
+ z-index: 10;
+}
+.form__newsletter button[type=submit].btn--bold .icon {
+ width: var(--size);
+ height: var(--size);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--color-bg);
+ text-align: center;
+}
+.form__newsletter button[type=submit].btn--bold .icon svg {
+ fill: var(--color-bg);
+ width: 80%;
+}
+.form__newsletter button[type=submit].btn--bold .txt {
+ position: relative;
+ top: 2px;
+ font-size: var(--fs-normal);
+ display: none;
+ padding-left: 1ch;
+}
+.form__newsletter button[type=submit].btn--bold::after {
+ content: "";
+ display: block;
+ background-color: var(--color-accent);
+ border-radius: calc(var(--size) / 2);
+ width: var(--size);
+ height: var(--size);
+ position: absolute;
+ right: 0;
+ z-index: 0;
+ transition: width 0.2s;
+}
+.form__newsletter button[type=submit].btn--bold:hover .txt {
+ color: var(--color-bg);
+ display: block;
+}
+.form__newsletter button[type=submit].btn--bold:hover::after {
+ width: 100%;
+}
+
+.gauge__container {
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ position: relative;
+ top: calc(var(--spacing) * 0.25);
+ padding: 0 calc(var(--spacing) * 0.5);
+}
+
+#gauge {
+ --gauge-h: 12px;
+ width: 100%;
+ margin-bottom: calc(var(--spacing) * 0.25);
+ height: var(--gauge-h);
+ border-radius: calc(var(--gauge-h) * 0.5);
+ background-color: var(--color-bg);
+ border: 1px solid var(--color-txt);
+ position: relative;
+ box-shadow: 7px 6px 5px -3px rgba(0, 0, 0, 0.14);
+}
+#gauge::before {
+ content: "";
+ display: block;
+ height: calc(var(--gauge-h) - 2px);
+ border-radius: calc(var(--gauge-h) * 0.5);
+ width: var(--pourcent);
+ min-width: 20px;
+ background-color: var(--color-accent);
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ transition: width cubic-bezier(0.86, 0, 0.07, 1) 1s;
+}
+
+.gauge--infos .property {
+ font-size: var(--fs-small);
+ padding-bottom: 3px;
+}
+.gauge--infos .value {
+ font-size: var(--fs-small);
+}
+.gauge--infos:last-of-type {
+ text-align: right;
+}
+
+#gauge--infos__donors {
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+}
+#gauge--infos__donors .value {
+ font-weight: bold;
+ display: inline;
+}
+#gauge--infos__donors .property {
+ display: inline;
+ padding-bottom: 0;
+}
+
+@media screen and (min-width: 720px) {
+ #gauge {
+ --gauge-h: 18px;
+ border: 2px solid var(--color-txt);
+ }
+ #gauge::before {
+ height: calc(var(--gauge-h) - 4px);
+ }
+ .gauge--infos .property {
+ font-size: var(--fs-small);
+ }
+ .gauge--infos .value {
+ font-size: var(--fs-normal);
+ }
+}
+[data-template=subscription-newsletter] .p__baseline-big,
+[data-template=thanks] .p__baseline-big,
+[data-template=support] .p__baseline-big,
+[data-template=store] .p__baseline-big {
+ font-family: var(--title);
+ font-size: var(--fs-big);
+ font-weight: var(--fw-bold);
+ line-height: 1.1;
+ text-align: center;
+ margin: calc(var(--spacing) * 1) 0;
+}
+[data-template=subscription-newsletter] .p__baseline-big strong,
+[data-template=thanks] .p__baseline-big strong,
+[data-template=support] .p__baseline-big strong,
+[data-template=store] .p__baseline-big strong {
+ font-weight: var(--fw-bolf);
+ color: var(--color-accent);
+}
+[data-template=subscription-newsletter] .p__baseline-big .link-don,
+[data-template=thanks] .p__baseline-big .link-don,
+[data-template=support] .p__baseline-big .link-don,
+[data-template=store] .p__baseline-big .link-don {
+ display: block;
+ color: var(--color-accent);
+ text-decoration: none;
+}
+[data-template=subscription-newsletter] .p__baseline-big .link-don:hover,
+[data-template=thanks] .p__baseline-big .link-don:hover,
+[data-template=support] .p__baseline-big .link-don:hover,
+[data-template=store] .p__baseline-big .link-don:hover {
+ -webkit-text-decoration: underline 2px;
+ text-decoration: underline 2px;
+ text-underline-offset: 4px;
+}
+[data-template=subscription-newsletter] .p__baseline,
+[data-template=thanks] .p__baseline,
+[data-template=support] .p__baseline,
+[data-template=store] .p__baseline {
+ font-size: var(--fs-medium);
+ font-weight: var(--fw-medium);
+ line-height: 1.1;
+ text-align: center;
+ margin: calc(var(--spacing) * 1) 0;
+}
+@media screen and (max-width: 720px) {
+ [data-template=subscription-newsletter] .p__baseline,
+ [data-template=thanks] .p__baseline,
+ [data-template=support] .p__baseline,
+ [data-template=store] .p__baseline {
+ text-align: center;
+ margin: var(--spacing) 0;
+ }
+}
+[data-template=subscription-newsletter] .p__details,
+[data-template=thanks] .p__details,
+[data-template=support] .p__details,
+[data-template=store] .p__details {
+ font-size: var(--fs-small);
+ margin-bottom: 0.5em;
+ color: var(--grey-400);
+}
+[data-template=subscription-newsletter] .section__heading,
+[data-template=thanks] .section__heading,
+[data-template=support] .section__heading,
+[data-template=store] .section__heading {
+ font-size: var(--fs-normal);
+ font-weight: var(--fw-medium);
+ line-height: 1;
+ text-align: center;
+ margin-top: calc(var(--spacing) * 0.5);
+ margin-bottom: calc(var(--spacing) * 1);
+}
+[data-template=subscription-newsletter] ul, [data-template=subscription-newsletter] ol,
+[data-template=thanks] ul,
+[data-template=thanks] ol,
+[data-template=support] ul,
+[data-template=support] ol,
+[data-template=store] ul,
+[data-template=store] ol {
+ margin-left: 3ch;
+ margin-bottom: 0.5em;
+}
+
+@keyframes add-border {
+ from {
+ border-bottom-color: transparent;
+ }
+ to {
+ border-bottom: var(--grey-800);
+ }
+}
+#site-header {
+ position: fixed;
+ left: var(--padding-body);
+ top: 0px;
+ z-index: 900;
+ width: calc(100vw - var(--padding-body) * 2);
+ height: var(--header-h);
+ background-color: var(--color-bg);
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+#site-header.is-shrinked {
+ height: var(--header-h-shrinked);
+ border-bottom: var(--border-light);
+}
+#site-header .site-title {
+ display: flex;
+ width: 120px;
+ transition: all ease-in 0.2s;
+ overflow: hidden;
+}
+#site-header .site-title svg {
+ fill: var(--color-txt);
+}
+#site-header.is-shrinked .site-title {
+ width: 80px !important;
+}
+#site-header .header-left,
+#site-header .header-right {
+ width: 90px;
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+}
+#site-header .header-center {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+#site-header #toggle-lang {
+ list-style: none;
+ display: flex;
+ justify-content: flex-end;
+ gap: 0.75ch;
+ text-transform: uppercase;
+ color: var(--grey-400);
+ line-height: 1;
+ margin: 0;
+ padding: 0;
+}
+#site-header #toggle-lang a {
+ text-decoration: none;
+}
+#site-header #toggle-lang li.is-selected {
+ color: var(--color-txt);
+}
+
+#site-footer {
+ background-color: black;
+ width: 100vw;
+ position: relative;
+ left: calc(var(--padding-body) * -1);
+ padding: calc(var(--padding-body) * 2) var(--padding-body);
+}
+#site-footer p {
+ margin: calc(var(--spacing) * 0.5) 0;
+}
+#site-footer p a {
+ text-decoration: none;
+}
+#site-footer p a:hover {
+ text-decoration: underline;
+}
+#site-footer .p__small {
+ font-size: var(--fs-x-small);
+}
+#site-footer #list-socials {
+ list-style: none;
+ -moz-columns: 2;
+ columns: 2;
+ max-width: 500px;
+ margin: 0;
+}
+#site-footer #list-socials a {
+ display: flex;
+ align-items: center;
+ gap: 1ch;
+ text-decoration: none;
+ height: calc(var(--spacing) * 1);
+}
+#site-footer #list-socials a::after {
+ content: "↗";
+ color: var(--grey-300);
+}
+#site-footer #list-socials .text {
+ line-height: 1;
+}
+#site-footer #list-socials .icon {
+ width: 20px;
+ height: 20px;
+ position: relative;
+ top: -2px;
+}
+#site-footer #list-socials svg {
+ display: flex;
+ align-items: center;
+ width: 20px;
+ height: 20px;
+}
+@media screen and (max-width: 720px) {
+ #site-footer {
+ margin-top: calc(var(--spacing) * 2);
+ }
+ #site-footer .footer__socials {
+ margin-top: calc(var(--spacing) * 1.5);
+ }
+ #site-footer .footer__mentions {
+ margin-top: calc(var(--spacing) * 0.5);
+ }
+ #site-footer .footer__mentions p {
+ margin-top: calc(var(--spacing) * 2);
+ }
+}
+@media screen and (min-width: 720px) {
+ #site-footer .site-footer__container {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ -moz-column-gap: calc(var(--spacing) * 2);
+ column-gap: calc(var(--spacing) * 2);
+ max-width: 1200px;
+ margin: 0 auto;
+ }
+ #site-footer .footer__mentions {
+ grid-column: span 2;
+ text-align: center;
+ }
+ #site-footer .footer__mentions p {
+ font-size: var(--font-size);
+ margin-top: calc(var(--spacing) * 2);
+ }
+}
+@media screen and (min-width: 1080px) {
+ #site-footer .site-footer__container {
+ -moz-column-gap: calc(var(--spacing) * 4);
+ column-gap: calc(var(--spacing) * 4);
+ }
+}
+@media screen and (max-width: 720px) {
+ #site-footer .footer__mentions {
+ padding-top: calc(var(--spacing) * 1);
+ text-align: center;
+ }
+ #site-footer .footer__mentions p {
+ margin-top: 0;
+ }
+}
+
+[data-template=support] section {
+ display: flex;
+ flex-direction: column;
+ margin: 0 auto;
+ padding-bottom: calc(var(--spacing) * 0.75);
+ margin-bottom: calc(var(--spacing) * 0.75);
+ border-bottom: var(--border-light);
+}
+[data-template=support] #section__hero {
+ margin-top: calc(var(--spacing) * 1);
+ display: block;
+}
+[data-template=support] #section__questions {
+ border-bottom: none;
+}
+[data-template=support] #section__donation:target {
+ padding-top: calc(var(--header-h) * 1.25);
+}
+[data-template=support] #section__video {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+[data-template=support] #section__video .video-container {
+ display: flex;
+}
+[data-template=support] #section__video video {
+ width: 100%;
+ border: 1px solid var(--grey-800);
+ max-height: 90vh;
+ display: flex;
+}
+@media screen and (min-width: 1080px) {
+ [data-template=support] main {
+ display: grid;
+ grid-template-columns: 50% 50%;
+ grid-template-rows: repeat(4, auto);
+ max-width: 1200px;
+ margin: 0 auto;
+ padding-bottom: 0;
+ }
+ [data-template=support] #section__donation {
+ padding-top: calc(var(--spacing) * 1);
+ }
+ [data-template=support] #section__donation,
+ [data-template=support] #section__comments {
+ border: none;
+ }
+ [data-template=support] #section__baseline {
+ padding: calc(var(--spacing) * 0.5) 0;
+ }
+ [data-template=support] .gauge__container {
+ padding-top: calc(var(--spacing) * 1);
+ }
+ [data-template=support] .col-left,
+ [data-template=support] .col-right {
+ padding-top: calc(var(--spacing) * 1);
+ }
+ [data-template=support] .col-left {
+ grid-column: 1;
+ grid-row: 1/5;
+ }
+ [data-template=support] .col-right {
+ position: sticky;
+ top: calc(var(--spacing) * 2.5);
+ grid-column: 2;
+ grid-row: 1;
+ overflow: hidden;
+ }
+}
+@media screen and (max-width: 1080px) {
+ [data-template=support] main {
+ display: flex;
+ flex-direction: column;
+ align-items: stretch;
+ justify-content: stretch;
+ max-width: 600px;
+ margin: 0 auto;
+ }
+ [data-template=support] section {
+ width: 100%;
+ }
+ [data-template=support] .col-left,
+ [data-template=support] .col-right {
+ display: contents;
+ }
+ [data-template=support] #section__hero {
+ order: 1;
+ }
+ [data-template=support] #section__donation {
+ order: 2;
+ }
+ [data-template=support] #section__baseline {
+ order: 3;
+ }
+ [data-template=support] #section__video {
+ order: 4;
+ }
+ [data-template=support] #section__comments {
+ order: 5;
+ }
+ [data-template=support] #section__questions {
+ order: 6;
+ margin-bottom: calc(var(--spacing) * 2);
+ }
+}
+@media screen and (max-height: 670px) and (min-width: 1080px) {
+ [data-template=support] .col-left,
+ [data-template=support] .col-right {
+ display: contents;
+ }
+ [data-template=support] section {
+ width: 100%;
+ }
+ [data-template=support] #section__donation {
+ grid-row: 1;
+ grid-column: 2;
+ position: sticky;
+ top: calc(var(--spacing) * 3.75);
+ }
+ [data-template=support] #section__hero {
+ grid-row: 1;
+ grid-column: 1;
+ }
+ [data-template=support] #section__baseline {
+ grid-row: 2;
+ grid-column: 1;
+ }
+ [data-template=support] #section__video {
+ grid-row: 3;
+ grid-column: 1;
+ }
+ [data-template=support] #section__comments {
+ grid-row: 4;
+ grid-column: 1;
+ border-bottom: var(--border-light);
+ }
+ [data-template=support] #section__questions {
+ grid-row: 5;
+ grid-column: 1;
+ }
+}
+
+#section__donation {
+ display: flex;
+ align-items: center;
+}
+#section__donation .btn--donation__container {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: calc(var(--padding-body) * 0.75);
+ display: none;
+}
+@media screen and (min-width: 1080px) {
+ #section__donation .btn--donation__container {
+ width: 420px;
+ }
+}
+@media screen and (max-width: 1080px) {
+ #section__donation .btn--donation__container {
+ width: 100%;
+ max-width: 420px;
+ }
+}
+#section__donation .btn--donation__container .btn--donation__grow-2 {
+ grid-column: span 2;
+}
+#section__donation .btn--donation__container.is-selected {
+ display: grid;
+}
+#section__donation .btn--donation {
+ background-color: var(--color-txt);
+ color: var(--color-bg);
+ border-radius: var(--radius-small);
+ height: calc(var(--h-block) * 2);
+}
+#section__donation .btn--donation .bold {
+ font-family: var(--title);
+ font-size: var(--fs-medium);
+ font-weight: var(--fw-bold);
+ margin-bottom: 0.25em;
+}
+#section__donation .btn--donation .small {
+ font-family: var(--font);
+ font-weight: var(--fw-medium);
+ font-size: var(--fs-small);
+}
+#section__donation .btn--donation:hover {
+ outline: 4px solid var(--color-accent);
+ cursor: pointer;
+}
+
+.comment__text {
+ font-size: var(--fs-medium);
+ font-weight: var(--fw-medium);
+ line-height: var(--leading-tight);
+ line-height: 1.1;
+ max-width: 28ch;
+ text-align: center;
+}
+
+.comment__name {
+ margin-top: calc(var(--spacing) * 0.5);
+ text-align: center;
+}
+
+.swiper {
+ width: 100%;
+ max-width: 700px;
+ height: auto;
+ position: relative;
+ padding-bottom: 40px; /* espace réservé pour les dots */
+}
+.swiper .swiper-slide {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+.swiper .comments-slider__dots {
+ position: absolute;
+ bottom: 10px; /* espace du bas */
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+.swiper .comments-slider__dots .swiper-pagination-bullet {
+ background-color: var(--grey-600);
+ opacity: 1;
+}
+.swiper .comments-slider__dots .swiper-pagination-bullet-active {
+ background-color: var(--color-txt);
+ opacity: 1;
+}
+
+#section__questions {
+ max-width: 700px;
+}
+#section__questions summary::marker {
+ content: "";
+ display: none;
+}
+#section__questions summary::-webkit-details-marker {
+ content: "";
+ display: none;
+}
+#section__questions details {
+ border-bottom: var(--border);
+}
+#section__questions details:first-of-type {
+ border-top: var(--border);
+}
+#section__questions details summary {
+ padding-top: calc(var(--spacing) * 0.25 + 2px);
+ padding-bottom: calc(var(--spacing) * 0.25);
+ cursor: pointer;
+ position: relative;
+ padding-right: 2ch;
+}
+#section__questions details[open] summary::after {
+ content: "✕";
+ position: absolute;
+ right: 0;
+}
+#section__questions details p {
+ margin: calc(var(--spacing) * 0.5) 0;
+}
+#section__questions details ul, #section__questions details ol {
+ margin-bottom: calc(var(--spacing) * 0.5);
+}
+
+#section__video {
+ margin-bottom: calc(var(--spacing) * 2);
+}
+#section__video .btn__deploy {
+ margin-top: calc(var(--spacing) * 1);
+ --size: var(--h-block);
+ font-family: var(--font);
+ font-size: var(--fs-small);
+ font-weight: var(--fw-normal);
+ line-height: 1;
+ border: var(--border-light);
+ height: var(--size);
+ border-radius: calc(var(--size) / 2);
+ padding-left: 1.5ch;
+ padding-right: 2ch;
+ padding-top: 1px;
+ position: relative;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ gap: 1ch;
+ font-weight: var(--fw-medium);
+ text-decoration: none;
+ cursor: pointer;
+}
+#section__video .btn__deploy:hover {
+ background-color: var(--grey-800);
+ border-color: var(--color-txt);
+}
+#section__video .btn__deploy svg {
+ fill: var(--color-txt);
+ width: 10px;
+ position: relative;
+ top: 1px;
+ left: 1px;
+}
+#section__video .videos__ul {
+ list-style: none;
+ width: 100%;
+ margin-top: calc(var(--spacing) * 1);
+ display: none;
+}
+#section__video .videos__ul .videos__li {
+ position: relative;
+ padding-left: 40px;
+ padding-right: 2ch;
+ margin-bottom: calc(var(--spacing) * 0.75);
+ cursor: pointer;
+}
+@media screen and (max-width: 520px) {
+ #section__video .videos__ul .videos__li .br-desktop {
+ display: none;
+ }
+}
+#section__video .videos__ul .videos__li:hover {
+ color: var(--grey-100);
+}
+#section__video .videos__ul .videos__li .icon {
+ --size: 20px;
+ flex-shrink: 0;
+ width: var(--size);
+ height: var(--size);
+ border-radius: calc(var(--size) / 2);
+ border: var(--border);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: absolute;
+ left: 0px;
+}
+#section__video .videos__ul .videos__li svg {
+ fill: var(--color-txt);
+ width: 7px;
+}
+#section__video #videos__input {
+ display: none;
+}
+#section__video #videos__input:checked ~ .videos__ul {
+ display: block;
+}
+
+#video__fullscreen {
+ width: 100vw;
+ height: 100vh;
+ background-color: var(--color-bg);
+ padding: var(--padding-body);
+ position: fixed;
+ top: 0px;
+ left: 0;
+ z-index: 3000;
+}
+#video__fullscreen iframe {
+ width: 90%;
+ height: calc(100vh - 60px);
+ height: calc(100dvh - 60px);
+ border: var(--border);
+}
+#video__fullscreen #video__close {
+ height: 60px;
+ font-size: 20px;
+ width: 100%;
+ font-weight: bold;
+ display: flex;
+ align-items: top;
+ justify-content: flex-end;
+}
+
+body.is-fullscreen {
+ overflow: hidden;
+}
+
+[data-template=store] main {
+ margin-bottom: calc(var(--spacing) * 2);
+}
+[data-template=store] .p__baseline-big {
+ margin-top: calc(var(--spacing) * 2);
+}
+[data-template=store] #store__container {
+ margin-top: calc(var(--spacing) * 2);
+ margin-bottom: calc(var(--spacing) * 4);
+ width: 100%;
+ max-width: 1000px;
+}
+[data-template=store] #store__container .store__product {
+ position: relative;
+}
+[data-template=store] #store__container .store__product figure {
+ aspect-ratio: 4/3;
+ background-color: var(--color-bg);
+ background-color: var(--data-bg);
+ margin-bottom: calc(var(--spacing) * 0.5);
+ overflow: hidden;
+}
+[data-template=store] #store__container .store__product img {
+ width: 100%;
+ height: 100%;
+ -o-object-fit: contain;
+ object-fit: contain;
+ transition: var(--curve) 0.5s;
+}
+[data-template=store] #store__container .store__product a {
+ text-decoration: none;
+}
+[data-template=store] #store__container .store__product .link-block {
+ display: block;
+ height: 100%;
+ width: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: pointer;
+}
+[data-template=store] #store__container .store__product:hover figure {
+ overflow: hidden;
+}
+[data-template=store] #store__container .store__product:hover img {
+ transform: scale(1.05);
+}
+[data-template=store] #store__container .store__product:hover .line-1 {
+ text-decoration: underline;
+}
+@media screen and (max-width: 720px) {
+ [data-template=store] #store__container .store__product {
+ margin-top: calc(var(--spacing) * 1.5);
+ margin-bottom: calc(var(--spacing) * 0.5);
+ }
+}
+@media screen and (min-width: 720px) {
+ [data-template=store] #store__container {
+ display: grid;
+ grid-template-columns: repeat(6, 1fr);
+ -moz-column-gap: calc(var(--padding-body) * 0.75);
+ column-gap: calc(var(--padding-body) * 0.75);
+ row-gap: calc(var(--spacing) * 2);
+ margin-left: auto;
+ margin-right: auto;
+ }
+ [data-template=store] #store__container .store__product {
+ grid-column: span 2;
+ }
+ [data-template=store] #store__container .store__product:nth-of-type(1),
+ [data-template=store] #store__container .store__product:nth-of-type(2) {
+ grid-column: span 3;
+ }
+}
+[data-template=store] #site-footer {
+ margin-top: calc(var(--spacing) * 4);
+ padding-top: 0px;
+}
+
+.section__product,
+.store__nav {
+ max-width: 1000px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.store__nav {
+ padding-top: calc(var(--spacing) * 1);
+}
+.store__nav a {
+ text-decoration: none;
+}
+.store__nav a:hover {
+ text-decoration: underline;
+}
+.store__nav a::before {
+ content: "← ";
+}
+
+.section__product figure {
+ aspect-ratio: 1/1;
+}
+.section__product figure img {
+ width: 100%;
+ height: 100%;
+ -o-object-fit: contain;
+ object-fit: contain;
+}
+.section__product #list-size {
+ list-style: none;
+ display: flex;
+ margin-top: calc(var(--spacing) * 0.5);
+ margin-bottom: calc(var(--spacing) * 0.5);
+ gap: 2ch;
+}
+.section__product #list-size li {
+ position: relative;
+}
+.section__product #list-size li input[type=radio] {
+ position: fixed;
+ opacity: 0;
+ pointer-events: none;
+}
+.section__product #list-size li label {
+ font-family: var(--title);
+ font-size: var(--fs-normal);
+ height: 4ch;
+ width: 4ch;
+ border-radius: 50%;
+ border: var(--border);
+ border-color: transparent;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding-top: 0px;
+ cursor: pointer;
+}
+.section__product #list-size li input[type=radio]:checked + label {
+ border-color: var(--color-txt);
+}
+.section__product #list-size li input[type=radio]:not(:checked) + label:hover {
+ border-color: var(--grey-600);
+ background-color: var(--grey-800);
+}
+.section__product .hero {
+ margin-bottom: calc(var(--spacing) * 1);
+ padding-top: calc(var(--spacing) * 0.5);
+ border-top: var(--border-light);
+}
+.section__product .hero .p__baseline-big {
+ margin: 0;
+ text-align: left;
+}
+.section__product .add-to-cart,
+.section__product #list-size {
+ margin: 0;
+ border-bottom: var(--border-light);
+ padding: calc(var(--spacing) * 0.5) 0;
+}
+
+@media screen and (max-width: 720px) {
+ .store__nav a {
+ padding-top: 0;
+ font-size: var(--fs-small);
+ }
+ .section__product {
+ display: flex;
+ flex-direction: column;
+ }
+ .section__product .col-left {
+ display: contents;
+ }
+ .section__product .hero {
+ margin-top: calc(var(--spacing) * 0.5);
+ order: 1;
+ }
+ .section__product figure {
+ order: 2;
+ margin-bottom: calc(var(--spacing) * 1);
+ }
+ .section__product .details {
+ order: 3;
+ margin-bottom: calc(var(--spacing) * 1.5);
+ }
+ .section__product .size {
+ border-top: var(--border-light);
+ order: 4;
+ }
+ .section__product .add-to-cart {
+ order: 5;
+ }
+}
+@media screen and (min-width: 720px) {
+ .section__product {
+ display: grid;
+ grid-template-columns: 50% 50%;
+ aspect-ratio: 2/1;
+ margin-top: calc(var(--spacing) * 0.5);
+ position: relative;
+ }
+ .section__product .col-left {
+ padding-right: var(--padding-body);
+ }
+ .section__product .details {
+ margin-bottom: calc(var(--spacing) * 3);
+ }
+ .section__product .add-to-cart,
+ .section__product #list-size {
+ width: calc(50% - var(--padding-body));
+ }
+ .section__product .add-to-cart {
+ position: absolute;
+ bottom: 10px;
+ }
+ .section__product #list-size {
+ position: absolute;
+ bottom: calc(var(--spacing) * 2);
+ border-top: var(--border-light);
+ }
+}
+[data-template=thanks] .p__baseline-big {
+ margin-top: calc(var(--spacing) * 3);
+ margin-bottom: calc(var(--spacing) * 3);
+}
+[data-template=thanks] .p__baseline {
+ text-align: left;
+ max-width: 800px;
+ margin: var(--spacing) auto;
+}
+[data-template=thanks] .p__baseline a {
+ color: var(--color-accent);
+ text-decoration: none;
+}
+[data-template=thanks] .p__baseline a:hover {
+ text-decoration: underline;
+}
+[data-template=thanks] #site-footer {
+ border-top: none;
+ margin-top: calc(var(--spacing) * 4);
+}
+
+.snipcart-modal__container {
+ z-index: 1000;
+}
+
+[data-template=subscription-newsletter] main {
+ margin-top: calc(var(--spacing) * 2);
+}
+[data-template=subscription-newsletter] #form__newsletter__container {
+ max-width: 700px;
+ margin: calc(var(--spacing) * 3) auto;
+ margin-bottom: calc(var(--spacing) * 4);
+}
+[data-template=subscription-newsletter] #form__newsletter__container .form__newsletter {
+ margin: calc(var(--spacing) * 1) 0;
+}
+[data-template=subscription-newsletter] #form__newsletter__container .form__newsletter input[type=email] {
+ height: calc(var(--h-block) * 1.75);
+ border-radius: calc(var(--h-block) * 0.875);
+ font-size: var(--fs-medium);
+}
+[data-template=subscription-newsletter] #form__newsletter__container .form__newsletter input[type=email]::-moz-placeholder {
+ font-size: var(--fs-medium);
+}
+[data-template=subscription-newsletter] #form__newsletter__container .form__newsletter input[type=email]::placeholder {
+ font-size: var(--fs-medium);
+}
+[data-template=subscription-newsletter] #form__newsletter__container .form__newsletter button[type=submit].btn--bold {
+ --size: calc(var(--h-block)*1.75 - 4px);
+}
+[data-template=subscription-newsletter] #form__newsletter__container .form__newsletter button[type=submit].btn--bold .icon svg {
+ width: 28px;
+}
+[data-template=subscription-newsletter] #form__newsletter__container .form__newsletter .txt {
+ padding-left: 2ch;
+}
+[data-template=subscription-newsletter] #form__newsletter__container .p__baseline {
+ max-width: 52ch;
+ text-align: left;
+}
+[data-template=subscription-newsletter] #form__newsletter__container .p__details {
+ color: var(--color-txt);
+ max-width: 80ch;
+}
+[data-template=subscription-newsletter] #site-footer {
+ margin-top: calc(var(--spacing) * 4);
+ padding-top: 0px;
+}/*# sourceMappingURL=style.css.map */
\ No newline at end of file
diff --git a/assets/css/style.css.map b/assets/css/style.css.map
new file mode 100644
index 0000000..03b6a08
--- /dev/null
+++ b/assets/css/style.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["style.css","base/_var.scss","base/_body.scss","components/_nav-tabs.scss","components/_btn--default.scss","components/_btn--don.scss","components/_form-newsletter.scss","components/_gauge.scss","components/_text.scss","partials/_site-header.scss","partials/_site-footer.scss","template/support/_layout.scss","template/support/_section--donation.scss","template/support/_section--comments.scss","template/support/_section--questions.scss","template/support/_section--video.scss","template/store/_layout.scss","template/store/_section--product.scss","template/store/_thanks.scss","template/store/_snipcart.scss","template/subscription-newsletter/_layout.scss"],"names":[],"mappings":"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","file":"style.css"}
\ No newline at end of file
diff --git a/assets/css/style.scss b/assets/css/style.scss
new file mode 100644
index 0000000..9eed384
--- /dev/null
+++ b/assets/css/style.scss
@@ -0,0 +1,29 @@
+@charset "UTF-8";
+@import 'base/responsive';
+@import 'base/var';
+@import 'base/body';
+
+@import 'components/nav-tabs';
+@import 'components/btn--default';
+@import 'components/btn--don';
+@import 'components/form-newsletter';
+@import 'components/gauge';
+@import 'components/text';
+
+@import 'partials/site-header';
+@import 'partials/site-footer';
+
+@import 'template/support/layout';
+@import 'template/support/section--donation';
+@import 'template/support/section--comments';
+@import 'template/support/section--questions';
+@import 'template/support/section--video';
+
+@import 'template/store/layout';
+@import 'template/store/section--product';
+@import 'template/store/thanks';
+@import 'template/store/snipcart';
+
+@import 'template/subscription-newsletter/layout';
+
+
diff --git a/assets/css/template/store/_layout.scss b/assets/css/template/store/_layout.scss
new file mode 100644
index 0000000..e64adcd
--- /dev/null
+++ b/assets/css/template/store/_layout.scss
@@ -0,0 +1,90 @@
+[data-template='store'] {
+ main {
+ margin-bottom: calc(var(--spacing) * 2);
+ }
+
+ .p__baseline-big {
+ margin-top: calc(var(--spacing) * 2);
+ }
+
+ #store__container {
+ margin-top: calc(var(--spacing) * 2);
+ margin-bottom: calc(var(--spacing) * 4);
+ width: 100%;
+ max-width: 1000px;
+
+ .store__product {
+ position: relative;
+ figure {
+ aspect-ratio: 4/3;
+ background-color: var(--color-bg);
+ background-color: var(--data-bg);
+ margin-bottom: calc(var(--spacing) * 0.5);
+ overflow: hidden;
+ }
+ img {
+ width: 100%;
+ height: 100%;
+ object-fit: contain;
+ transition: var(--curve) 0.5s;
+ }
+
+ a {
+ text-decoration: none;
+ }
+
+ .link-block {
+ display: block;
+ height: 100%;
+ width: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: pointer;
+ }
+
+ &:hover {
+ figure {
+ overflow: hidden;
+ }
+ img {
+ transform: scale(1.05);
+ }
+
+ .line-1 {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ @media #{$small} {
+ .store__product {
+ margin-top: calc(var(--spacing) * 1.5);
+ margin-bottom: calc(var(--spacing) * 0.5);
+ }
+ }
+
+ @media #{$small-up} {
+ display: grid;
+ grid-template-columns: repeat(6, 1fr);
+ column-gap: calc(var(--padding-body) * 0.75);
+ row-gap: calc(var(--spacing) * 2);
+ margin-left: auto;
+ margin-right: auto;
+
+ .store__product {
+ grid-column: span 2;
+ }
+ .store__product:nth-of-type(1),
+ .store__product:nth-of-type(2) {
+ grid-column: span 3;
+ }
+ }
+ }
+
+
+ #site-footer{
+ margin-top: calc(var(--spacing)*4);
+ padding-top: 0px;
+ }
+}
diff --git a/assets/css/template/store/_section--product.scss b/assets/css/template/store/_section--product.scss
new file mode 100644
index 0000000..40563ef
--- /dev/null
+++ b/assets/css/template/store/_section--product.scss
@@ -0,0 +1,168 @@
+.section__product,
+.store__nav {
+ max-width: 1000px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.store__nav {
+ padding-top: calc(var(--spacing) * 1);
+
+ a {
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+
+ a::before {
+ content: '← ';
+ }
+}
+
+.section__product {
+ figure {
+ aspect-ratio: 1/1;
+
+ img {
+ width: 100%;
+ height: 100%;
+ object-fit: contain;
+ }
+ }
+
+ #list-size {
+ list-style: none;
+ display: flex;
+ margin-top: calc(var(--spacing) * 0.5);
+ margin-bottom: calc(var(--spacing) * 0.5);
+ gap: 2ch;
+
+ li {
+ position: relative;
+
+ input[type='radio'] {
+ position: fixed;
+ opacity: 0;
+ pointer-events: none;
+ }
+
+ label {
+ font-family: var(--title);
+ font-size: var(--fs-normal);
+ height: 4ch;
+ width: 4ch;
+ border-radius: 50%;
+ border: var(--border);
+ border-color: transparent;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding-top: 0px;
+ cursor: pointer;
+ }
+
+ input[type='radio']:checked + label {
+ border-color: var(--color-txt);
+ }
+
+ input[type='radio']:not(:checked) + label:hover {
+ border-color: var(--grey-600);
+ background-color: var(--grey-800);
+ }
+ }
+ }
+
+ .hero {
+ margin-bottom: calc(var(--spacing) * 1);
+ padding-top: calc(var(--spacing) * 0.5);
+ border-top: var(--border-light);
+
+ .p__baseline-big {
+ margin: 0;
+ text-align: left;
+ }
+ }
+
+ .add-to-cart,
+ #list-size {
+ margin: 0;
+ border-bottom: var(--border-light);
+ padding: calc(var(--spacing) * 0.5) 0;
+ }
+}
+
+@media #{$small} {
+ .store__nav a {
+ padding-top: 0;
+ font-size: var(--fs-small);
+ }
+
+ .section__product {
+ display: flex;
+ flex-direction: column;
+
+ .col-left {
+ display: contents;
+ }
+
+ .hero {
+ margin-top: calc(var(--spacing) * 0.5);
+ order: 1;
+ }
+ figure {
+ order: 2;
+ margin-bottom: calc(var(--spacing) * 1);
+ }
+
+ .details {
+ order: 3;
+ margin-bottom: calc(var(--spacing) * 1.5);
+ }
+
+ .size {
+ border-top: var(--border-light);
+ order: 4;
+ }
+
+ .add-to-cart {
+ order: 5;
+ }
+ }
+}
+
+@media #{$small-up} {
+ .section__product {
+ display: grid;
+ grid-template-columns: 50% 50%;
+ aspect-ratio: 2/1;
+
+ margin-top: calc(var(--spacing) * 0.5);
+ position: relative;
+
+ .col-left {
+ padding-right: var(--padding-body);
+ }
+
+ .details {
+ margin-bottom: calc(var(--spacing) * 3);
+ }
+
+ .add-to-cart,
+ #list-size {
+ width: calc(50% - var(--padding-body));
+ }
+
+ .add-to-cart {
+ position: absolute;
+ bottom: 10px;
+ }
+
+ #list-size {
+ position: absolute;
+ bottom: calc(var(--spacing) * 2);
+ border-top: var(--border-light);
+ }
+ }
+}
diff --git a/assets/css/template/store/_snipcart.scss b/assets/css/template/store/_snipcart.scss
new file mode 100644
index 0000000..aab74c7
--- /dev/null
+++ b/assets/css/template/store/_snipcart.scss
@@ -0,0 +1,3 @@
+.snipcart-modal__container {
+ z-index: 1000;
+}
diff --git a/assets/css/template/store/_thanks.scss b/assets/css/template/store/_thanks.scss
new file mode 100644
index 0000000..670fdef
--- /dev/null
+++ b/assets/css/template/store/_thanks.scss
@@ -0,0 +1,29 @@
+[data-template="thanks"]{
+ .p__baseline-big {
+ margin-top: calc(var(--spacing) * 3);
+ margin-bottom: calc(var(--spacing) * 3);
+ // font-size: var(--fs-x-big);
+ }
+
+ .p__baseline {
+ // font-size: var(--fs-big);
+ text-align: left;
+ max-width: 800px;
+ margin: var(--spacing) auto;
+
+ a{
+ color: var(--color-accent);
+ text-decoration: none;
+ &:hover{
+ text-decoration: underline;
+ }
+ }
+ }
+
+ #site-footer{
+ border-top: none;
+ margin-top: calc(var(--spacing) * 4);
+
+ }
+
+}
\ No newline at end of file
diff --git a/assets/css/template/subscription-newsletter/_layout.scss b/assets/css/template/subscription-newsletter/_layout.scss
new file mode 100644
index 0000000..85fe399
--- /dev/null
+++ b/assets/css/template/subscription-newsletter/_layout.scss
@@ -0,0 +1,55 @@
+[data-template="subscription-newsletter"]{
+
+ main{
+ margin-top: calc(var(--spacing)*2);
+ }
+
+
+ #form__newsletter__container{
+ max-width: 700px;
+ margin: calc(var(--spacing)*3) auto;
+ margin-bottom: calc(var(--spacing)*4);
+
+
+ .form__newsletter{
+ margin: calc(var(--spacing)*1) 0;
+
+ input[type="email"]{
+ height: calc(var(--h-block)*1.75);
+ border-radius: calc(var(--h-block)*0.875);
+ font-size: var(--fs-medium);
+ &::placeholder{
+ font-size: var(--fs-medium);
+ }
+ }
+ button[type="submit"].btn--bold {
+ --size: calc(var(--h-block)*1.75 - 4px);
+
+ .icon svg{
+ width: 28px;
+ }
+ }
+ .txt{
+ padding-left: 2ch;
+ }
+ }
+
+ .p__baseline{
+ max-width: 52ch;
+ // margin: 0 auto;
+ text-align: left;
+ }
+
+ .p__details{
+ color: var(--color-txt);
+ max-width: 80ch;
+ }
+
+ }
+
+ #site-footer{
+ margin-top: calc(var(--spacing)*4);
+ padding-top: 0px;
+ }
+
+}
\ No newline at end of file
diff --git a/assets/css/template/support/_layout.scss b/assets/css/template/support/_layout.scss
new file mode 100644
index 0000000..95ed351
--- /dev/null
+++ b/assets/css/template/support/_layout.scss
@@ -0,0 +1,177 @@
+[data-template="support"]{
+
+ section{
+ display: flex;
+ flex-direction: column;
+ margin: 0 auto;
+ padding-bottom: calc(var(--spacing)*0.75);
+ margin-bottom: calc(var(--spacing)*0.75);
+ border-bottom: var(--border-light);
+ }
+
+ #section__hero{
+ margin-top: calc(var(--spacing)*1);
+ display: block;
+ }
+
+ #section__questions{
+ border-bottom: none;
+ }
+
+ #section__donation:target{
+ padding-top: calc(var(--header-h)*1.25);
+ }
+
+ #section__video{
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+
+ .video-container{
+ display: flex;
+ }
+ video{
+ width: 100%;
+ border: 1px solid var(--grey-800);
+ max-height: 90vh;
+ display: flex;
+ }
+ }
+
+
+ @media #{$medium-up}{
+
+ main{
+ display: grid;
+ grid-template-columns: 50% 50%;
+ grid-template-rows: repeat(4, auto);
+ max-width: 1200px;
+ margin: 0 auto;
+ padding-bottom: 0;
+ }
+
+ #section__donation{
+ padding-top: calc(var(--spacing)*1);
+ }
+
+ #section__donation,
+ #section__comments{
+ border: none;
+ }
+
+ #section__baseline{
+ padding: calc(var(--spacing)*0.5) 0;
+ }
+
+ .gauge__container{
+ padding-top: calc(var(--spacing)*1);
+ }
+
+ .col-left,
+ .col-right{
+ padding-top: calc(var(--spacing)*1);
+ }
+ .col-left{
+ grid-column: 1;
+ grid-row: 1/5;
+ }
+ .col-right{
+ position: sticky;
+ top: calc(var(--spacing)*2.5);
+ grid-column: 2;
+ grid-row: 1;
+ overflow: hidden;
+ }
+
+ }
+
+
+ @media #{$medium}{
+ main{
+ display: flex;
+ flex-direction: column;
+ align-items: stretch;
+ justify-content: stretch;
+ max-width: 600px;
+ margin: 0 auto;
+ }
+
+ section{
+ width: 100%;
+ }
+
+
+ .col-left,
+ .col-right{
+ display: contents;
+ }
+
+ #section__hero{
+ order: 1;
+ }
+ #section__donation{
+ order: 2;
+ }
+ #section__baseline{
+ order: 3;
+ }
+ #section__video{
+ order: 4;
+ }
+ #section__comments{
+ order: 5;
+ }
+ #section__questions{
+ order: 6;
+ margin-bottom: calc(var(--spacing)*2);
+
+ }
+
+ }
+
+
+ @media #{$paysage}{
+ .col-left,
+ .col-right{
+ display: contents;
+ }
+
+ section{
+ width: 100%;
+ }
+
+ #section__donation{
+ grid-row: 1;
+ grid-column: 2;
+ position: sticky;
+ top: calc(var(--spacing)*3.75);
+ }
+
+ #section__hero{
+ grid-row: 1;
+ grid-column: 1;
+ }
+ #section__baseline{
+ grid-row: 2;
+ grid-column: 1;
+ }
+ #section__video{
+ grid-row: 3;
+ grid-column: 1;
+ }
+ #section__comments{
+ grid-row: 4;
+ grid-column: 1;
+ border-bottom: var(--border-light);
+
+ }
+ #section__questions{
+ grid-row: 5;
+ grid-column: 1;
+ }
+
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/assets/css/template/support/_section--comments.scss b/assets/css/template/support/_section--comments.scss
new file mode 100644
index 0000000..6d72bde
--- /dev/null
+++ b/assets/css/template/support/_section--comments.scss
@@ -0,0 +1,55 @@
+
+ .comment__text{
+ font-size: var(--fs-medium);
+ font-weight: var(--fw-medium);
+ line-height: var(--leading-tight);
+ line-height: 1.1;
+ max-width: 28ch;
+ text-align: center;
+ }
+
+ .comment__name {
+ margin-top: calc(var(--spacing)*0.5);
+ text-align: center;
+ }
+
+
+
+
+ .swiper {
+ width: 100%;
+ max-width: 700px;
+ height: auto;
+ position: relative;
+ padding-bottom: 40px; /* espace réservé pour les dots */
+
+ .swiper-slide{
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ }
+
+ .comments-slider__dots{
+ position: absolute;
+ bottom: 10px; /* espace du bas */
+ left: 0;
+ width: 100%;
+ text-align: center;
+
+ .swiper-pagination-bullet{
+ background-color: var(--grey-600);
+ opacity: 1;
+ }
+ .swiper-pagination-bullet-active{
+ background-color: var(--color-txt);
+ opacity: 1;
+ }
+
+
+ }
+
+
+ }
+
+
+
\ No newline at end of file
diff --git a/assets/css/template/support/_section--donation.scss b/assets/css/template/support/_section--donation.scss
new file mode 100644
index 0000000..20825b7
--- /dev/null
+++ b/assets/css/template/support/_section--donation.scss
@@ -0,0 +1,63 @@
+#section__donation{
+
+ display: flex;
+ align-items: center;
+
+
+
+ .btn--donation__container{
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: calc(var(--padding-body)*0.75);
+
+ @media #{$medium-up}{
+ width: 420px;
+ }
+
+ @media #{$medium}{
+ width: 100%;
+ max-width: 420px;
+ }
+
+ .btn--donation__grow-2{
+ grid-column: span 2;
+ }
+
+ display: none;
+ &.is-selected{
+ display: grid;
+ }
+ }
+
+
+ .btn--donation{
+ background-color: var(--color-txt);
+ color: var(--color-bg);
+ border-radius: var(--radius-small);
+ height: calc(var(--h-block)*2);
+
+ .bold{
+ font-family: var(--title);
+ font-size: var(--fs-medium);
+ font-weight: var(--fw-bold);
+ margin-bottom: 0.25em;
+ }
+
+ .small{
+ font-family: var(--font);
+ font-weight: var(--fw-medium);
+ font-size: var(--fs-small);
+ }
+
+ &:hover{
+ outline: 4px solid var(--color-accent);
+ cursor: pointer;
+ }
+
+ }
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/assets/css/template/support/_section--questions.scss b/assets/css/template/support/_section--questions.scss
new file mode 100644
index 0000000..e133d4e
--- /dev/null
+++ b/assets/css/template/support/_section--questions.scss
@@ -0,0 +1,48 @@
+#section__questions{
+
+ max-width: 700px;
+
+
+ summary::marker{
+ content: "";
+ display: none;
+ }
+ summary::-webkit-details-marker{
+ content: "";
+ display: none;
+ }
+
+
+ details{
+
+ border-bottom: var(--border);
+ &:first-of-type{
+ border-top: var(--border);
+ }
+
+ summary{
+ padding-top: calc(var(--spacing)*0.25 + 2px);
+ padding-bottom: calc(var(--spacing)*0.25);
+ cursor: pointer;
+ position: relative;
+ padding-right: 2ch;
+ }
+
+ &[open] summary::after{
+ content: "✕";
+ position: absolute;
+ right: 0;
+ }
+
+
+ p{
+ margin: calc(var(--spacing)*0.5) 0;
+ }
+
+ ul, ol{
+ margin-bottom: calc(var(--spacing)*0.5);
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/assets/css/template/support/_section--video.scss b/assets/css/template/support/_section--video.scss
new file mode 100644
index 0000000..ee2bf96
--- /dev/null
+++ b/assets/css/template/support/_section--video.scss
@@ -0,0 +1,140 @@
+#section__video{
+ margin-bottom: calc(var(--spacing)*2);
+
+ .btn__deploy{
+ margin-top: calc(var(--spacing)*1);
+ --size: var(--h-block);
+ font-family: var(--font);
+ font-size: var(--fs-small);
+ font-weight: var(--fw-normal);
+ line-height: 1;
+ border: var(--border-light);
+ height: var(--size);
+ border-radius: calc(var(--size)/2);
+ padding-left: 1.5ch;
+ padding-right: 2ch;
+ padding-top: 1px;
+
+ position: relative;
+ cursor: pointer;
+
+ display: flex;
+ align-items: center;
+ gap: 1ch;
+ // padding-right: 0.5ch;
+ font-weight: var(--fw-medium);
+ text-decoration: none;
+
+ &:hover{
+ background-color: var(--grey-800);
+ border-color: var(--color-txt);
+ }
+
+
+
+ cursor: pointer;
+
+ svg{
+ fill: var(--color-txt);
+ width: 10px;
+ position: relative;
+ top: 1px;
+ left: 1px;
+ }
+
+ }
+
+
+ .videos__ul{
+ list-style: none;
+ width: 100%;
+ margin-top: calc(var(--spacing)*1);
+ display: none;
+
+ .videos__li{
+
+ position: relative;
+ padding-left: 40px;
+ padding-right: 2ch;
+ // padding-top: calc(var(--spacing)*0.25);
+ // padding-bottom: calc(var(--spacing)*0.25);
+ // border-top: var(--border-light);
+ // border-bottom: var(--border-light);
+
+ margin-bottom: calc(var(--spacing)*0.75);
+
+ cursor: pointer;
+
+ @media screen and (max-width: 520px){
+ .br-desktop{ display: none; }
+ }
+
+
+ &:hover{
+ color: var(--grey-100);
+ }
+
+ .icon{
+ --size: 20px;
+ flex-shrink: 0;
+ width: var(--size);
+ height: var(--size);
+ border-radius: calc(var(--size)/2);
+ border: var(--border);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: absolute;
+ left: 0px;
+
+ }
+
+ svg{
+ fill: var(--color-txt);
+ width: 7px;
+ }
+ }
+ }
+
+ #videos__input{ display: none }
+
+ #videos__input:checked ~ .videos__ul{
+ display: block;
+ }
+}
+
+
+#video__fullscreen{
+
+ width: 100vw;
+ height: 100vh;
+ background-color: var(--color-bg);
+ padding: var(--padding-body);
+ position: fixed;
+ top: 0px;
+ left: 0;
+ z-index: 3000;
+
+
+ iframe{
+ width: 90%;
+ height: calc(100vh - 60px);
+ height: calc(100dvh - 60px);
+ border: var(--border);
+ }
+
+ #video__close{
+ height: 60px;
+ font-size: 20px;
+ width: 100%;
+ font-weight: bold;
+ display: flex;
+ align-items: top;
+ justify-content: flex-end;
+
+ }
+}
+
+body.is-fullscreen{
+ overflow: hidden;
+}
\ No newline at end of file
diff --git a/assets/favicon.png b/assets/favicon.png
new file mode 100644
index 0000000..bca6cd5
Binary files /dev/null and b/assets/favicon.png differ
diff --git a/assets/fonts/Executive-55Regular.woff b/assets/fonts/Executive-55Regular.woff
new file mode 100644
index 0000000..99eaf84
Binary files /dev/null and b/assets/fonts/Executive-55Regular.woff differ
diff --git a/assets/fonts/Executive-56Italic.woff b/assets/fonts/Executive-56Italic.woff
new file mode 100644
index 0000000..e70c795
Binary files /dev/null and b/assets/fonts/Executive-56Italic.woff differ
diff --git a/assets/fonts/Executive-65Medium.woff b/assets/fonts/Executive-65Medium.woff
new file mode 100644
index 0000000..16c2373
Binary files /dev/null and b/assets/fonts/Executive-65Medium.woff differ
diff --git a/assets/fonts/Executive-66MediumIt.woff b/assets/fonts/Executive-66MediumIt.woff
new file mode 100644
index 0000000..31f7584
Binary files /dev/null and b/assets/fonts/Executive-66MediumIt.woff differ
diff --git a/assets/fonts/System-Bold.woff2 b/assets/fonts/System-Bold.woff2
new file mode 100644
index 0000000..d041a01
Binary files /dev/null and b/assets/fonts/System-Bold.woff2 differ
diff --git a/assets/fonts/System-BoldItalic.woff2 b/assets/fonts/System-BoldItalic.woff2
new file mode 100644
index 0000000..0ca3899
Binary files /dev/null and b/assets/fonts/System-BoldItalic.woff2 differ
diff --git a/assets/fonts/System-Medium.woff2 b/assets/fonts/System-Medium.woff2
new file mode 100644
index 0000000..10541f0
Binary files /dev/null and b/assets/fonts/System-Medium.woff2 differ
diff --git a/assets/fonts/System-MediumItalic.woff2 b/assets/fonts/System-MediumItalic.woff2
new file mode 100644
index 0000000..db78574
Binary files /dev/null and b/assets/fonts/System-MediumItalic.woff2 differ
diff --git a/assets/fonts/stylesheet.css b/assets/fonts/stylesheet.css
new file mode 100644
index 0000000..95bf8b1
--- /dev/null
+++ b/assets/fonts/stylesheet.css
@@ -0,0 +1,57 @@
+/* Executive - Regular */
+@font-face {
+ font-family: "Executive";
+ src: url("Executive-55Regular.woff") format("woff");
+ font-weight: 300;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Executive";
+ src: url("Executive-56Italic.woff") format("woff");
+ font-weight: 300;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: "Executive";
+ src: url("Executive-65Medium.woff") format("woff");
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "Executive";
+ src: url("Executive-66MediumIt.woff") format("woff");
+ font-weight: normal;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: "System";
+ src: url("System-Medium.woff2") format("woff2");
+ font-weight: 500;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "System";
+ src: url("System-MediumItalic.woff2") format("woff2");
+ font-weight: 500;
+ font-style: italic;
+}
+
+
+@font-face {
+ font-family: "System";
+ src: url("System-Bold.woff2") format("woff2");
+ font-weight: 600;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "System";
+ src: url("System-BoldItalic.woff2") format("woff2");
+ font-weight: 600;
+ font-style: italic;
+}
\ No newline at end of file
diff --git a/assets/icons/arrow-left.svg b/assets/icons/arrow-left.svg
new file mode 100644
index 0000000..09437b0
--- /dev/null
+++ b/assets/icons/arrow-left.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/assets/icons/arrow-top-right.svg b/assets/icons/arrow-top-right.svg
new file mode 100644
index 0000000..e46faa9
--- /dev/null
+++ b/assets/icons/arrow-top-right.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/icons/bluesky.svg b/assets/icons/bluesky.svg
new file mode 100644
index 0000000..3944e93
--- /dev/null
+++ b/assets/icons/bluesky.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/icons/facebook.svg b/assets/icons/facebook.svg
new file mode 100644
index 0000000..cf4118e
--- /dev/null
+++ b/assets/icons/facebook.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/assets/icons/instagram.svg b/assets/icons/instagram.svg
new file mode 100644
index 0000000..57775b0
--- /dev/null
+++ b/assets/icons/instagram.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/assets/icons/linkedin.svg b/assets/icons/linkedin.svg
new file mode 100644
index 0000000..5a9c0a5
--- /dev/null
+++ b/assets/icons/linkedin.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/assets/icons/play-button.svg b/assets/icons/play-button.svg
new file mode 100644
index 0000000..d4fbef9
--- /dev/null
+++ b/assets/icons/play-button.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/icons/threads.svg b/assets/icons/threads.svg
new file mode 100644
index 0000000..3619982
--- /dev/null
+++ b/assets/icons/threads.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/assets/icons/youtube.svg b/assets/icons/youtube.svg
new file mode 100644
index 0000000..40ca348
--- /dev/null
+++ b/assets/icons/youtube.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/assets/images/abrs-visuel-couverture-min.png b/assets/images/abrs-visuel-couverture-min.png
new file mode 100644
index 0000000..ffd6713
Binary files /dev/null and b/assets/images/abrs-visuel-couverture-min.png differ
diff --git a/assets/images/casquette-01.png b/assets/images/casquette-01.png
new file mode 100644
index 0000000..9d22a75
Binary files /dev/null and b/assets/images/casquette-01.png differ
diff --git a/assets/images/hero-1.png b/assets/images/hero-1.png
new file mode 100644
index 0000000..fc3d595
Binary files /dev/null and b/assets/images/hero-1.png differ
diff --git a/assets/images/hero-2.png b/assets/images/hero-2.png
new file mode 100644
index 0000000..e65534d
Binary files /dev/null and b/assets/images/hero-2.png differ
diff --git a/assets/images/hero-3.png b/assets/images/hero-3.png
new file mode 100644
index 0000000..7dcfb86
Binary files /dev/null and b/assets/images/hero-3.png differ
diff --git a/assets/images/poster-video-campagne.jpg b/assets/images/poster-video-campagne.jpg
new file mode 100644
index 0000000..f3090ae
Binary files /dev/null and b/assets/images/poster-video-campagne.jpg differ
diff --git a/assets/images/publi-lebal.jpg b/assets/images/publi-lebal.jpg
new file mode 100644
index 0000000..07d03b4
Binary files /dev/null and b/assets/images/publi-lebal.jpg differ
diff --git a/assets/images/tshirt-01.png b/assets/images/tshirt-01.png
new file mode 100644
index 0000000..99899b8
Binary files /dev/null and b/assets/images/tshirt-01.png differ
diff --git a/assets/images/video-temp.mp4 b/assets/images/video-temp.mp4
new file mode 100644
index 0000000..113f900
Binary files /dev/null and b/assets/images/video-temp.mp4 differ
diff --git a/assets/index-logo.svg b/assets/index-logo.svg
new file mode 100644
index 0000000..5da04f5
--- /dev/null
+++ b/assets/index-logo.svg
@@ -0,0 +1,14 @@
+
+ Index.ngo
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/js/donation.js b/assets/js/donation.js
new file mode 100644
index 0000000..8c3ef58
--- /dev/null
+++ b/assets/js/donation.js
@@ -0,0 +1,154 @@
+(function () {
+ 'use strict';
+
+ const DONORBOX_CAMPAIGN_URL = 'https://donorbox.org/soutenir-index-2025-don';
+ const TAX_REDUCTION_RATE = 0.66;
+
+ const AMOUNTS = {
+ oneOff: [200, 100, 50, 20],
+ monthly: [50, 20, 10, 5],
+ };
+
+ const TRANSLATIONS = {
+ fr: {
+ afterTax: 'Soit {amount} € après impôts',
+ perMonth: '€/mois',
+ withTaxReduction: 'Avec 66 % de déduction fiscale',
+ },
+ en: {
+ afterTax: 'That is {amount} € after tax',
+ perMonth: '€/month',
+ withTaxReduction: 'With 66 % tax deduction',
+ },
+ };
+
+ function getLanguage() {
+ return document.documentElement.lang || 'fr';
+ }
+
+ function translate(key, params = {}) {
+ const lang = getLanguage();
+ let text = TRANSLATIONS[lang][key] || TRANSLATIONS['fr'][key];
+ Object.keys(params).forEach((param) => {
+ text = text.replace(`{${param}}`, params[param]);
+ });
+ return text;
+ }
+
+ function calculateAfterTax(amount) {
+ const result = amount * (1 - TAX_REDUCTION_RATE);
+ const rounded = Math.round(result * 100) / 100;
+ return rounded % 1 === 0 ? Math.round(rounded) : rounded.toFixed(2);
+ }
+
+ function formatAmount(amount) {
+ return amount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '\u202F');
+ }
+
+ function generateDonorboxUrl(amount, isMonthly) {
+ const params = new URLSearchParams();
+ params.append('default_interval', isMonthly ? 'm' : 'o');
+ if (amount) {
+ params.append('amount', amount);
+ }
+
+ // Récupérer les paramètres UTM de l'URL actuelle
+ const currentUrlParams = new URLSearchParams(window.location.search);
+ const utmParams = [
+ 'utm_source',
+ 'utm_medium',
+ 'utm_campaign',
+ 'utm_term',
+ 'utm_content',
+ ];
+
+ utmParams.forEach((utmParam) => {
+ const value = currentUrlParams.get(utmParam);
+ if (value) {
+ params.append(utmParam, value);
+ }
+ });
+
+ return `${DONORBOX_CAMPAIGN_URL}?${params.toString()}`;
+ }
+
+ function initTabs() {
+ const tabButtons = document.querySelectorAll('.nav--tabs__btn');
+ const containers = document.querySelectorAll('.btn--donation__container');
+
+ tabButtons.forEach((button, index) => {
+ button.addEventListener('click', () => {
+ tabButtons.forEach((btn) => btn.classList.remove('is-selected'));
+ containers.forEach((container) =>
+ container.classList.remove('is-selected')
+ );
+
+ button.classList.add('is-selected');
+ containers[index].classList.add('is-selected');
+ });
+ });
+ }
+
+ function initDonationButtons() {
+ const oneOffContainer = document.querySelector(
+ '[data-donnation="one-off"]'
+ );
+ const oneOffButtons = oneOffContainer.querySelectorAll('.btn--donation');
+
+ oneOffButtons.forEach((button, index) => {
+ if (index < AMOUNTS.oneOff.length) {
+ const amount = AMOUNTS.oneOff[index];
+ const afterTax = calculateAfterTax(amount);
+
+ button.innerHTML = `
+ ${formatAmount(amount)} €
+ ${translate('afterTax', {
+ amount: formatAmount(afterTax),
+ })}
+ `;
+
+ button.addEventListener('click', () => {
+ window.open(generateDonorboxUrl(amount, false), '_blank');
+ });
+ } else {
+ button.addEventListener('click', () => {
+ window.open(generateDonorboxUrl(null, false), '_blank');
+ });
+ }
+ });
+
+ const monthlyContainer = document.querySelector(
+ '[data-donnation="monthly"]'
+ );
+ const monthlyButtons = monthlyContainer.querySelectorAll('.btn--donation');
+
+ monthlyButtons.forEach((button, index) => {
+ if (index < AMOUNTS.monthly.length) {
+ const amount = AMOUNTS.monthly[index];
+ const afterTax = calculateAfterTax(amount);
+
+ button.innerHTML = `
+ ${formatAmount(amount)} ${translate(
+ 'perMonth'
+ )}
+ ${translate('afterTax', {
+ amount: formatAmount(afterTax),
+ })}
+ `;
+
+ button.addEventListener('click', () => {
+ window.open(generateDonorboxUrl(amount, true), '_blank');
+ });
+ } else {
+ button.addEventListener('click', () => {
+ window.open(generateDonorboxUrl(null, true), '_blank');
+ });
+ }
+ });
+ }
+
+ document.addEventListener('DOMContentLoaded', () => {
+ initTabs();
+ initDonationButtons();
+ });
+})();
diff --git a/assets/js/donorbox-gauge.js b/assets/js/donorbox-gauge.js
new file mode 100644
index 0000000..a410517
--- /dev/null
+++ b/assets/js/donorbox-gauge.js
@@ -0,0 +1,105 @@
+const DONORBOX_CONFIG = {
+ proxyUrl: '/api/donorbox-proxy.php',
+};
+
+function formatCurrency(amount) {
+ const rounded = Math.round(amount * 100) / 100;
+ 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() {
+ try {
+ const response = await fetch(DONORBOX_CONFIG.proxyUrl, {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ });
+
+ if (!response.ok) {
+ throw new Error(`HTTP error ${response.status}: ${response.statusText}`);
+ }
+
+ const data = await response.json();
+
+ if (data.error) {
+ throw new Error(data.error);
+ }
+
+ return data;
+ } catch (error) {
+ console.error('Error fetching Donorbox data:', error);
+ throw error;
+ }
+}
+
+function updateGaugeDisplay(campaignData) {
+ const collected = campaignData.total_raised || 0;
+ const goal = campaignData.goal_amt || 50000;
+ const percentage = Math.min((collected / goal) * 100, 100);
+
+ const gaugeElement = document.getElementById('gauge');
+ if (gaugeElement) {
+ gaugeElement.style.setProperty(
+ '--pourcent',
+ `${percentage > 2.5 ? percentage : 2.5}%`
+ );
+ }
+
+ const collectedElement = document.querySelector(
+ '#gauge--infos__donateurs .value'
+ );
+ if (collectedElement) {
+ collectedElement.textContent = formatCurrency(collected);
+ }
+
+ 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:', {
+ collected: formatCurrency(collected),
+ goal: formatCurrency(goal),
+ percentage: `${percentage.toFixed(1)}%`,
+ });
+}
+
+async function initDonorboxGauge() {
+ try {
+ console.log('Fetching Donorbox data...');
+ const campaignData = await fetchDonorboxData();
+ updateGaugeDisplay(campaignData);
+ } catch (error) {
+ console.error('Failed to update gauge:', error);
+ }
+}
+
+function setupAutoRefresh(intervalMinutes = 5) {
+ const intervalMs = intervalMinutes * 60 * 1000;
+ setInterval(initDonorboxGauge, intervalMs);
+ console.log(`Auto-refresh configured: every ${intervalMinutes} minutes`);
+}
+
+if (document.readyState === 'loading') {
+ document.addEventListener('DOMContentLoaded', () => {
+ initDonorboxGauge();
+ setupAutoRefresh(5);
+ });
+} else {
+ initDonorboxGauge();
+ setupAutoRefresh(5);
+}
diff --git a/assets/js/newsletter-brevo.js b/assets/js/newsletter-brevo.js
new file mode 100644
index 0000000..f84b403
--- /dev/null
+++ b/assets/js/newsletter-brevo.js
@@ -0,0 +1,89 @@
+(function () {
+ 'use strict';
+
+ const PROXY_URL = '/api/brevo-newsletter-proxy.php';
+
+ async function subscribeToNewsletter(email, attributes = {}) {
+ const response = await fetch(PROXY_URL, {
+ method: 'POST',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({ email, attributes }),
+ });
+
+ const data = await response.json();
+
+ if (!response.ok) {
+ const error = new Error(
+ data.user_message || data.message || 'Subscription error'
+ );
+ error.code = data.error;
+ error.data = data;
+ throw error;
+ }
+
+ return data;
+ }
+
+ function showMessage(form, text, isError = false) {
+ const oldMessages = form.parentNode.querySelectorAll('.newsletter-message');
+ oldMessages.forEach((msg) => msg.remove());
+
+ const message = document.createElement('p');
+ message.className = 'newsletter-message';
+ message.textContent = text;
+ message.style.marginTop = '0.5rem';
+ message.style.fontSize = '0.9rem';
+ message.style.color = isError
+ ? 'var(--color-error, #ef4444)'
+ : 'var(--color-success, #22c55e)';
+
+ form.parentNode.insertBefore(message, form.nextSibling);
+
+ if (!isError) {
+ setTimeout(() => message.remove(), 5000);
+ }
+ }
+
+ async function handleFormSubmit(event) {
+ event.preventDefault();
+
+ const form = event.target;
+ const emailInput = form.querySelector('input[type="email"]');
+ const submitButton = form.querySelector('button[type="submit"]');
+
+ if (!emailInput || !emailInput.value) {
+ const message = location.pathname.includes('/en/')
+ ? 'Please enter a valid email address.'
+ : 'Veuillez entrer une adresse email valide.';
+ showMessage(form, messsage, true);
+ return;
+ }
+
+ const email = emailInput.value.trim();
+ submitButton.disabled = true;
+
+ try {
+ await subscribeToNewsletter(email);
+ const message = location.pathname.includes('/en/')
+ ? 'Thank you! Your subscription has been confirmed.'
+ : 'Merci, votre inscription est confirmée !';
+ showMessage(form, message, false);
+ form.reset();
+ } catch (error) {
+ const isAlreadySubscribed = error.code === 'email_already_exists';
+ showMessage(form, error.message, !isAlreadySubscribed);
+ } finally {
+ submitButton.disabled = false;
+ }
+ }
+
+ function initNewsletterForms() {
+ const forms = document.querySelectorAll('.form__newsletter');
+ forms.forEach((form) => form.addEventListener('submit', handleFormSubmit));
+ }
+
+ document.addEventListener('DOMContentLoaded', initNewsletterForms);
+})();
diff --git a/assets/js/onload.js b/assets/js/onload.js
new file mode 100644
index 0000000..c2c7211
--- /dev/null
+++ b/assets/js/onload.js
@@ -0,0 +1,90 @@
+window.onload = function () {
+ headerShrink();
+ initCart();
+ toggleDonationButton();
+ videos();
+};
+
+window.onscroll = function () {
+ headerShrink();
+ toggleDonationButton();
+};
+
+function initCart() {
+ const items = document.querySelectorAll('.store__product .link-block');
+ const header = document.querySelector('#site-header');
+}
+
+function headerShrink() {
+ const header = document.getElementById('site-header');
+ const scrollPosition = window.scrollY || document.documentElement.scrollTop;
+
+ if (scrollPosition > 100) {
+ header.classList.add('is-shrinked');
+ } else {
+ header.classList.remove('is-shrinked');
+ }
+}
+
+function toggleDonationButton() {
+ const btn = document.getElementById('btn--don__mobile');
+ const section = document.getElementById('section__donation');
+ const footer = document.getElementById('site-footer');
+
+ if (!btn || !section || !footer) return; // sécurité
+
+ const scrollTop = window.scrollY || window.pageYOffset;
+ const triggerPoint = section.offsetTop + section.offsetHeight / 2;
+
+ // 1️⃣ Gestion de la visibilité du bouton
+ if (scrollTop >= triggerPoint) {
+ btn.classList.add('is-visible');
+ } else {
+ btn.classList.remove('is-visible');
+ }
+
+ // 2️⃣ Gestion de la position par rapport au footer
+ const footerRect = footer.getBoundingClientRect();
+ const windowHeight = window.innerHeight;
+
+ if (footerRect.top < windowHeight) {
+ const footerVisibleHeight = windowHeight - footerRect.top;
+ btn.style.bottom = footerVisibleHeight + 'px';
+ } else {
+ btn.style.bottom = '0px';
+ }
+}
+
+
+function videos(){
+ console.log("video");
+ let section = document.getElementById("section__video");
+ console.log(section);
+
+ let videoslinks = document.querySelectorAll(".videos__li");
+ videoslinks.forEach(function (video, index) {
+
+ video.addEventListener("click", (event) => {
+ let data = video.getAttribute('data-video');
+
+ var div = document.createElement('section');
+ div.id = "video__fullscreen";
+ div.innerHTML = '✕ \
+ ';
+ document.body.appendChild(div);
+ document.body.classList.add("is-fullscreen");
+
+ let close = document.querySelector("#video__close");
+ close.addEventListener("click", (event) => {
+ div.remove();
+ document.body.classList.remove("is-fullscreen");
+ });
+ });
+
+ });
+
+}
\ No newline at end of file
diff --git a/assets/js/product-size.js b/assets/js/product-size.js
new file mode 100644
index 0000000..bd02e34
--- /dev/null
+++ b/assets/js/product-size.js
@@ -0,0 +1,47 @@
+/**
+ * Gestion de la sélection de taille pour les produits
+ * Met à jour l'attribut data-item-size au changement de sélection
+ */
+
+(function() {
+ 'use strict';
+
+ /**
+ * Initialise la gestion des tailles
+ */
+ function initSizeSelector() {
+ const sizeRadios = document.querySelectorAll('#list-size input[type="radio"]');
+ const addToCartButton = document.querySelector('.add-to-cart');
+
+ if (!addToCartButton) {
+ console.warn('Bouton add-to-cart non trouvé');
+ return;
+ }
+
+ // Définir la taille initiale (taille sélectionnée par défaut)
+ const checkedRadio = document.querySelector('#list-size input[type="radio"]:checked');
+ if (checkedRadio) {
+ addToCartButton.setAttribute('data-item-size', checkedRadio.value);
+ }
+
+ // Écouter les changements de sélection
+ sizeRadios.forEach(radio => {
+ radio.addEventListener('change', function() {
+ // Mettre à jour l'attribut data-item-size
+ addToCartButton.setAttribute('data-item-size', this.value);
+
+ // Optionnel: gérer la classe is-selected sur les li parents
+ // (pour compatibilité avec d'éventuels styles existants)
+ const allLi = document.querySelectorAll('#list-size li');
+ allLi.forEach(li => li.classList.remove('is-selected'));
+ this.closest('li').classList.add('is-selected');
+ });
+ });
+ }
+
+ /**
+ * Initialisation au chargement de la page
+ */
+ document.addEventListener('DOMContentLoaded', initSizeSelector);
+
+})();
diff --git a/assets/js/snipcart.js b/assets/js/snipcart.js
new file mode 100644
index 0000000..cdb9359
--- /dev/null
+++ b/assets/js/snipcart.js
@@ -0,0 +1,82 @@
+window.SnipcartSettings = {
+ publicApiKey:
+ 'NGU4ODQ3MjAtY2MzMC00MWEyLWI2YTMtNjBmNGYzMTBlOTZkNjM4OTY1NDY4OTE5MTQyMTI3',
+ loadStrategy: 'on-user-interaction',
+};
+
+(() => {
+ var c, d;
+ (d = (c = window.SnipcartSettings).version) != null || (c.version = '3.0');
+ var s, S;
+ (S = (s = window.SnipcartSettings).timeoutDuration) != null ||
+ (s.timeoutDuration = 2750);
+ var l, p;
+ (p = (l = window.SnipcartSettings).domain) != null ||
+ (l.domain = 'cdn.snipcart.com');
+ var w, u;
+ (u = (w = window.SnipcartSettings).protocol) != null ||
+ (w.protocol = 'https');
+ var f =
+ window.SnipcartSettings.version.includes('v3.0.0-ci') ||
+ (window.SnipcartSettings.version != '3.0' &&
+ window.SnipcartSettings.version.localeCompare('3.4.0', void 0, {
+ numeric: !0,
+ sensitivity: 'base',
+ }) === -1),
+ m = ['focus', 'mouseover', 'touchmove', 'scroll', 'keydown'];
+ window.LoadSnipcart = o;
+ document.readyState === 'loading'
+ ? document.addEventListener('DOMContentLoaded', r)
+ : r();
+ function r() {
+ window.SnipcartSettings.loadStrategy
+ ? window.SnipcartSettings.loadStrategy === 'on-user-interaction' &&
+ (m.forEach((t) => document.addEventListener(t, o)),
+ setTimeout(o, window.SnipcartSettings.timeoutDuration))
+ : o();
+ }
+ var a = !1;
+ function o() {
+ if (a) return;
+ a = !0;
+ let t = document.getElementsByTagName('head')[0],
+ e = document.querySelector('#snipcart'),
+ i = document.querySelector(
+ `src[src^="${window.SnipcartSettings.protocol}://${window.SnipcartSettings.domain}"][src$="snipcart.js"]`
+ ),
+ n = document.querySelector(
+ `link[href^="${window.SnipcartSettings.protocol}://${window.SnipcartSettings.domain}"][href$="snipcart.css"]`
+ );
+ e ||
+ ((e = document.createElement('div')),
+ (e.id = 'snipcart'),
+ e.setAttribute('hidden', 'true'),
+ document.body.appendChild(e)),
+ v(e),
+ i ||
+ ((i = document.createElement('script')),
+ (i.src = `${window.SnipcartSettings.protocol}://${window.SnipcartSettings.domain}/themes/v${window.SnipcartSettings.version}/default/snipcart.js`),
+ (i.async = !0),
+ t.appendChild(i)),
+ n ||
+ ((n = document.createElement('link')),
+ (n.rel = 'stylesheet'),
+ (n.type = 'text/css'),
+ (n.href = `${window.SnipcartSettings.protocol}://${window.SnipcartSettings.domain}/themes/v${window.SnipcartSettings.version}/default/snipcart.css`),
+ t.prepend(n)),
+ m.forEach((g) => document.removeEventListener(g, o));
+ }
+ function v(t) {
+ !f ||
+ ((t.dataset.apiKey = window.SnipcartSettings.publicApiKey),
+ window.SnipcartSettings.addProductBehavior &&
+ (t.dataset.configAddProductBehavior =
+ window.SnipcartSettings.addProductBehavior),
+ window.SnipcartSettings.modalStyle &&
+ (t.dataset.configModalStyle = window.SnipcartSettings.modalStyle),
+ window.SnipcartSettings.currency &&
+ (t.dataset.currency = window.SnipcartSettings.currency),
+ window.SnipcartSettings.templatesUrl &&
+ (t.dataset.templatesUrl = window.SnipcartSettings.templatesUrl));
+ }
+})();
diff --git a/assets/js/temp/includeHtml.js b/assets/js/temp/includeHtml.js
new file mode 100644
index 0000000..58f04bb
--- /dev/null
+++ b/assets/js/temp/includeHtml.js
@@ -0,0 +1,33 @@
+// How to use
+//
+
+
+function includeHTML() {
+
+ var z, i, elmnt, file, xhttp;
+ /* Loop through a collection of all HTML elements: */
+ z = document.getElementsByTagName("*");
+ for (i = 0; i < z.length; i++) {
+ elmnt = z[i];
+ /*search for elements with a certain atrribute:*/
+ file = elmnt.getAttribute("w3-include-html");
+ if (file) {
+ /* Make an HTTP request using the attribute value as the file name: */
+ xhttp = new XMLHttpRequest();
+ xhttp.onreadystatechange = function() {
+ if (this.readyState == 4) {
+ if (this.status == 200) {elmnt.innerHTML = this.responseText;}
+ if (this.status == 404) {elmnt.innerHTML = "Page not found.";}
+ /* Remove the attribute, and call this function once more: */
+ elmnt.removeAttribute("w3-include-html");
+ includeHTML();
+ }
+ }
+ xhttp.open("GET", file, true);
+ xhttp.send();
+ /* Exit the function: */
+ return;
+ }
+ }
+
+}
diff --git a/en/index.html b/en/index.html
new file mode 100644
index 0000000..6f59cab
--- /dev/null
+++ b/en/index.html
@@ -0,0 +1,631 @@
+
+
+
+
+
+ Support Index
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To keep investigating, Index needs your help
+
+
+
+
+
+ Support us in 2026
+
+
+
+
+
+ Index is a not-for-profit, digital investigation NGO. Your
+ support guarantees our independence.
+
+
+
+
+ 2025–2026 campaign video
+
+
+
+
+
+
+ Frequently Asked Questions
+
+
+ How will my donation to Index be used?
+
+ All donations we receive are allocated to funding our
+ investigations, through the remuneration of our team members.
+
+
+ Our investigations take time. They require meticulous
+ collaborative work involving studying court files, analyzing
+ videos, modeling scenes in 3D, verifying scenarios, and more.
+ Although the members of the Index team accept solidarity-based
+ pay, we need funds to cover the cost of their investigative work.
+ That is what your donations will be used for.
+
+
+
+
+ Are donations tax deductible?
+
+ Yes, because Index is a non-profit organization. If you are
+ taxable in France, your donation to Index is 66% tax deductible.
+ This means that a donation of €200 will actually only cost you €68
+ after tax.
+
+
+ Your tax receipt will be sent to you automatically by email in
+ March of the year following your donation, in time for your tax
+ return.
+
+
+
+
+ What exactly is Index?
+
+ Index is an independent, non-profit investigative NGO founded in
+ France in 2020. Established as a non-profit organization under the
+ French law of 1901, Index operates both as an investigative media
+ outlet and as an independent expert firm accessible to all victims
+ of institutional violence and abuse of power.
+
+
+ Index was created as an autonomous extension of the international
+ research laboratory Forensic Architecture, to which it remains
+ closely linked both through its team and its methods.
+
+
+
+
+ Who is behind Index?
+
+ In November 2025, the Index team has seven regular members,
+ including four employees:
+
+
+ Francesco Sebregondi, Founder/Director
+ Dounia Idhmida, Management Manager
+ Léonie Montjarret, Communications Manager
+ Nadav Joffe, Investigator & 3D Modeler
+ Guillaume Seyller, Investigator & 3D Modeler
+ Basile Trouillet, Investigator & Video Editor
+ Filippo Ortona, Investigator & Journalist
+
+
+ The Index Board of Directors has five members: Yessa Belkhodja,
+ Lucie Simon, Kaoutar Harchi, Michel Feher, and Mathieu Molard.
+
+
+
+
+ Is there a minimum donation amount?
+
+ In order to cover our processing costs, the minimum donation
+ amount is €5, whether it is a one-time or monthly donation.
+ Regardless of the amount, all your donations bring us closer to
+ our funding goal. Furthermore, we are committed to developing the
+ largest possible support community: even a simple donation of €5
+ gives us the strength to continue our work.
+
+
+
+
+ I can't make a donation, how else can I help?
+
+ If you are unable to make a donation but would still like to
+ support us, don't worry: there are other ways to help Index!
+
+
+
+ Subscribe to our newsletter: Join the 2,000
+ subscribers to the Index newsletter. It's the best way to be the
+ first to receive our investigations, news, and exclusive
+ content.
+
+
+ Share our publications: Share our surveys,
+ news, and calls for donations by email and on social media.
+ Helping to spread the word about Index is a concrete way to
+ support us!
+
+
+ Talk about Index to those around you: Invite us
+ into your conversations! There is bound to be a colleague or
+ loved one who would benefit from discovering Index.
+
+
+
+
+
+ How can I contact the team?
+
+ If you have any questions or comments, please feel free to write
+ to us at:
+ contact@index.ngo .
+
+
+ And if you appreciate our work, please send us a message of
+ encouragement! We are always delighted to receive them.
+
+
+
+
+
+
+
+
+
+ One-time donation
+
+ Monthly donation
+
+
+
+
+ 200 €
+ That is 68 € after tax
+
+
+ 100 €
+ That is 34 € after tax
+
+
+ 50 €
+ That is 17 € after tax
+
+
+ 20 €
+ That is 6.80 € after tax
+
+
+ Choose your amount
+ With 66 % tax deduction
+
+
+
+
+
+ 5€/month
+ That is X€ after taxes
+
+
+ 10€/month
+ That is X€ after taxes
+
+
+ 20€/month
+ That is X€ after taxes
+
+
+ 50€/month
+ That is X€ after taxes
+
+
+ Choose your amount
+ With tax deduction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..2cda8cd
--- /dev/null
+++ b/index.html
@@ -0,0 +1,776 @@
+
+
+
+
+
+ Pour continuer, Index a besoin de vous.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Pour continuer à enquêter, Index a besoin de vous
+
+
+
+
+
+ Soutenez-nousen 2026
+
+
+
+
+
+ Index est une ONG d’investigation à but non-lucratif.
+ Vos dons garantissent notre indépendance.
+
+
+
+
+ Pourquoi soutenir Index ? Écoutez les premier·es concerné·es
+
+
+
+
+
+
+ Voir les témoignages
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ « Index fait un travail que la justice ne fait pas » : le témoignage d’Issam El Khalfaoui
+
+
+
+
+
+
+
+
+
+
+ « Votre travail nous a permis de nous rendre au tribunal la tête haute » : le témoignage de Dominique Rodtchenki-Pontonnier
+
+
+
+
+
+
+
+
+
+
+
+ « Les enquêtes d'Index doivent continuer » : le témoignage d’Assa Traoré
+
+
+
+
+
+
+
+
+ « Vous faites un travail rare et concret » : le témoignage de Jérôme Rodrigues
+
+
+
+
+
+
+
+
+ « Index est d’un intérêt public absolu » : le témoignage de Fatiha B.
+
+
+
+
+
+
+
+
+ « Je n’aurais jamais imaginé recevoir un tel soutien » : le témoignage de Jean-François Martin
+
+
+
+
+
+
+
+
+ « Le travail d'Index a permis de rétablir la vérité » : le témoignage de Mahamadou Camara, frère de Gaye
+
+
+
+
+
+
+
+
+ « Pour les familles endeuillées, Index est essentiel » : le témoignage de Christelle Vendeiro-Bico, belle-sœur de Luis Bico
+
+
+
+
+
+
+
+
+
+ Questions fréquentes
+
+
+ À quoi va servir mon don à Index ?
+
+ L'intégralité des dons que nous recevons est alloué au financement
+ de nos enquêtes, à travers la rémunération des membres de notre
+ équipe.
+
+
+ Nos enquêtes prennent du temps. Elles nécessitent un travail
+ collaboratif minutieux consistant à étudier des dossiers
+ judiciaires, analyser des vidéos, modéliser des scènes en 3D,
+ vérifier des scénarios… Bien que les membres de l'équipe d'Index
+ acceptent une rémunération à taux solidaire, nous avons besoin de
+ fonds pour couvrir le coût de leur travail d'investigation. C'est
+ à cela que serviront vos dons.
+
+
+
+
+ Les dons sont-ils défiscalisables ?
+
+ Oui, car Index est une association d'intérêt général. Si vous êtes
+ imposable en France, votre don à Index est déductible des impôts à
+ hauteur de 66 %. Ainsi, un don de 200 € ne vous coûte en réalité
+ que 68 € après déduction fiscale.
+
+
+ Votre reçu fiscal vous sera envoyé automatiquement par e-mail en
+ mars de l'année qui suit votre don, à temps pour votre déclaration
+ des impôts.
+
+
+
+
+ Index, c'est quoi au juste ?
+
+ Index est une ONG d'investigation indépendante, à but
+ non-lucratif, créée en France en 2020. Constituée en association
+ loi 1901, Index opère à la fois en tant que média d'investigation
+ et comme cabinet d'expertise indépendante accessible à toutes les
+ victimes de violences institutionnelles et d'abus de pouvoir.
+
+
+ Index a été créée en tant qu'extension autonome du laboratoire de
+ recherche international Forensic Architecture, auquel elle reste
+ étroitement liée tant par son équipe que par ses méthodes.
+
+
+
+
+ Qui est derrière Index ?
+
+ En novembre 2025, l'équipe d'Index compte sept membres réguliers,
+ dont quatre salariés :
+
+
+ Francesco Sebregondi, Fondateur/Directeur
+ Dounia Idhmida, Responsable de gestion
+ Leonie Montjarret, Responsable de communication
+ Nadav Joffe, Enquêteur & modélisateur 3D
+ Guillaume Seyller, Enquêteur & modélisateur 3D
+ Basile Trouillet, Enquêteur & monteur vidéo
+ Filippo Ortona, Enquêteur & journaliste
+
+
+ Le Conseil d'administration d'Index compte cinq membres : Yessa
+ Belkhodja, Lucie Simon, Kaoutar Harchi, Michel Feher, Mathieu
+ Molard.
+
+
+
+
+ Y a-t-il un montant minimum pour un don ?
+
+ Afin de couvrir nos frais de traitement, le montant minimum de don
+ est de 5 €, qu'il soit ponctuel ou mensuel. Quel qu'en soit le
+ montant, tous vos dons nous permettent de nous rapprocher de notre
+ objectif de financement. Par ailleurs, nous tenons à développer
+ une communauté de soutien la plus large possible : même un simple
+ don de 5 € nous donne de la force pour poursuivre notre action.
+
+
+
+
+
+ Je ne peux pas faire un don, comment vous aider autrement ?
+
+
+ Si vous ne pouvez pas faire un don mais souhaitez quand même nous
+ soutenir, rassurez-vous : il y a d'autres façons d'aider Index !
+
+
+
+ Abonnez-vous à notre newsletter : Rejoignez-les
+ 2 000 abonné·es à la newsletter d'Index. C'est le moyen le plus
+ sûr de recevoir nos enquêtes, nos actualités et des contenus
+ exclusifs en premier.
+
+
+ Relayez nos publications : Partagez nos
+ enquêtes, actualités et appels aux dons, par e-mail et sur les
+ réseaux sociaux. Contribuer à faire connaître Index, c'est nous
+ aider concrètement !
+
+
+ Parlez d'Index autour de vous : Invitez-nous
+ dans vos discussions ! Il y a forcément un·e collègue ou un·e
+ proche qui gagnerait à découvrir Index.
+
+
+
+
+
+ Comment contacter l'équipe ?
+
+ Pour toute question ou commentaire, n'hésitez pas à nous écrire à
+ l'adresse :
+ contact@index.ngo .
+
+
+ Et si vous appréciez notre travail, n'hésitez pas à nous envoyer
+ un message d'encouragement ! Nous sommes toujours ravi·es d'en
+ recevoir.
+
+
+
+
+
+
+
+
+
+ Je donne une fois
+
+ Je donne tous les mois
+
+
+
+
+ 200 €
+ Soit 68 € après impôts
+
+
+ 100 €
+ Soit 34 € après impôts
+
+
+ 50 €
+ Soit 17 € après impôts
+
+
+ 20 €
+ Soit 6.80 € après impôts
+
+
+ Choisissez votre montant
+ Avec déduction fiscale de 66 %
+
+
+
+
+
+ 5€/mois
+ Soit X€ après impôts
+
+
+ 10€/mois
+ Soit X€ après impôts
+
+
+ 20€/mois
+ Soit X€ après impôts
+
+
+ 50€/mois
+ Soit X€ après impôts
+
+
+ Choisissez votre montant
+ Avec déduction fiscale
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/merci/index.html b/merci/index.html
new file mode 100644
index 0000000..cd430e7
--- /dev/null
+++ b/merci/index.html
@@ -0,0 +1,108 @@
+
+
+
+
+
+ Index.ngo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Un grand merci !
+
+
+
+ Votre soutien nous permet de continuer à enquêter en toute indépendance.
+
+ Nous vous remercions sincèrement pour votre solidarité, qui est essentielle à la poursuite de notre mission.
+
+ Retour à la page d’accueil →
+
+
+
+
+
+
diff --git a/thanks/index.html b/thanks/index.html
new file mode 100644
index 0000000..242cf6a
--- /dev/null
+++ b/thanks/index.html
@@ -0,0 +1,108 @@
+
+
+
+
+
+ Index.ngo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Thank you!
+
+
+
+ Your support allows us to continue investigating with complete independence.
+
+ We sincerely thank you for your solidarity, which is essential to the pursuit of our mission.
+
+ Back to home page →
+
+
+
+
+
+
+ You are doing admirable work. Thank you for helping Justice + with a capital J. Keep up the good work! +
+Olivier
+