7 Commits
Author SHA1 Message Date
cedric 4d6a94e251 fix: remove cdn 2026-07-22 21:22:56 +04:00
cedric f0fd5eeca1 fix: npm audit fix 2026-07-22 21:22:36 +04:00
cedric 1b05d2f9a4 chore: change la licence 2026-07-22 21:22:22 +04:00
cedric bb680f60b0 Revert "feat: servir les images via le CDN BunnyCDN"
This reverts commit 58dd9297e0.
2026-07-22 21:12:34 +04:00
cedric d0fc7207f2 typo 2026-07-13 23:07:45 +04:00
cedric 66da280a50 typo: correction des liens des partenaires + ajout d'autres plateformes 2026-07-13 21:39:48 +04:00
cedric 742a275958 fix(hero): retire l'effet machine à écrire sur INTERNATIONALE 2026-07-13 21:30:31 +04:00
14 changed files with 109 additions and 104 deletions
-8
View File
@@ -1,5 +1,3 @@
const cdn = require("./src/_data/cdn.json");
module.exports = function(eleventyConfig) {
// Locale-aware content: `t` resolves to the content bundle for the page's locale (fr by default)
eleventyConfig.addGlobalData("eleventyComputed", {
@@ -7,12 +5,6 @@ module.exports = function(eleventyConfig) {
t: (data) => data.i18n[data.locale || "fr"]
});
// Serve local images through the BunnyCDN pull zone; leaves external URLs untouched
eleventyConfig.addFilter("cdn", (path) => {
if (typeof path !== "string" || !path.startsWith("/")) return path;
return cdn.url + path;
});
// Copy assets folders to output
eleventyConfig.addPassthroughCopy("src/assets");
+66 -36
View File
@@ -7,7 +7,7 @@
"": {
"name": "o-k-i.net-v2",
"version": "1.0.0",
"license": "ISC",
"license": "AGPL-3.0",
"devDependencies": {
"@11ty/eleventy": "^3.1.2"
}
@@ -278,9 +278,9 @@
}
},
"node_modules/anymatch/node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -410,9 +410,9 @@
}
},
"node_modules/brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"version": "1.1.16",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz",
"integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -844,9 +844,9 @@
}
},
"node_modules/gray-matter/node_modules/js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"version": "3.15.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz",
"integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1035,10 +1035,20 @@
}
},
"node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz",
"integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/puzrin"
},
{
"type": "github",
"url": "https://github.com/sponsors/nodeca"
}
],
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
@@ -1078,19 +1088,29 @@
}
},
"node_modules/linkify-it": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
"integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz",
"integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/puzrin"
},
{
"type": "github",
"url": "https://github.com/sponsors/markdown-it"
}
],
"license": "MIT",
"dependencies": {
"uc.micro": "^2.0.0"
}
},
"node_modules/liquidjs": {
"version": "10.24.0",
"resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.24.0.tgz",
"integrity": "sha512-TAUNAdgwaAXjjcUFuYVJm9kOVH7zc0mTKxsG9t9Lu4qdWjB2BEblyVIYpjWcmJLMGgiYqnGNJjpNMHx0gp/46A==",
"version": "10.27.2",
"resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.27.2.tgz",
"integrity": "sha512-kvknfAEtOHjHkAAv7GxLEJh8ghpMQm3Fc4uWVyF7hERSTsSRsdC7saWs0p5aDG7GDcWsu5o+T4232O+8KZO55w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1126,15 +1146,25 @@
}
},
"node_modules/markdown-it": {
"version": "14.1.0",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
"integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
"version": "14.3.0",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.3.0.tgz",
"integrity": "sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/puzrin"
},
{
"type": "github",
"url": "https://github.com/sponsors/markdown-it"
}
],
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1",
"entities": "^4.4.0",
"linkify-it": "^5.0.0",
"entities": "^4.5.0",
"linkify-it": "^5.0.2",
"mdurl": "^2.0.0",
"punycode.js": "^2.3.1",
"uc.micro": "^2.1.0"
@@ -1216,9 +1246,9 @@
}
},
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
"integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -1358,9 +1388,9 @@
}
},
"node_modules/picomatch": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
"integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1474,9 +1504,9 @@
}
},
"node_modules/readdirp/node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1675,9 +1705,9 @@
"license": "MIT"
},
"node_modules/ws": {
"version": "8.18.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
"version": "8.21.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz",
"integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==",
"dev": true,
"license": "MIT",
"engines": {
-3
View File
@@ -1,3 +0,0 @@
{
"url": "https://organisationka.b-cdn.net"
}
+11 -9
View File
@@ -13,20 +13,22 @@
{ "url": "https://gade.o-k-i.net/accounts/joukawouve", "text": "Discover on GADE" }
]
},
{
"name": "cyber-mawonaj",
"logo": "/assets/images/cyber_mawonaj.jpg",
"description": "Towards digital mawonaj - Winning your freedom also runs through the digital world.",
"links": [
{ "url": "https://gade.o-k-i.net/c/cyber_mawonaj/videos", "text": "Discover on GADE" }
]
},
{
"name": "Aktivist Vybz #AKV",
"logo": "/assets/images/akv.png",
"description": "Committed selectors and DJs, with content focused on activism and cultural expression.",
"links": [
{ "url": "https://gade.o-k-i.net/accounts/aktivist_vybz_akv", "text": "Discover on GADE" }
{ "url": "https://mizik.o-k-i.net/channels/aktivistvybzakv", "text": "Discover on MIZIK" },
{ "url": "https://gade.o-k-i.net/c/aktivist_vybz-1_channel/videos", "text": "Discover on GADE" }
]
},
{
"name": "cyber-mawonaj",
"logo": "/assets/images/cyber_mawonaj.jpg",
"description": "Towards digital mawonaj - Winning your freedom also runs through the digital world.",
"links": [
{ "url": "https://bokante.o-k-i.net/@cybermawonaj", "text": "Discover on BOKANTE" },
{ "url": "https://gade.o-k-i.net/c/cyber.mawonaj/videos", "text": "Discover on GADE" }
]
}
]
+11 -9
View File
@@ -13,20 +13,22 @@
{ "url": "https://gade.o-k-i.net/accounts/joukawouve", "text": "Découvrir sur GADE" }
]
},
{
"name": "cyber-mawonaj",
"logo": "/assets/images/cyber_mawonaj.jpg",
"description": "Vers le mawonaj numérique - Conquérir sa liberté passe aussi par le numérique.",
"links": [
{ "url": "https://gade.o-k-i.net/c/cyber_mawonaj/videos", "text": "Découvrir sur GADE" }
]
},
{
"name": "Aktivist Vybz #AKV",
"logo": "/assets/images/akv.png",
"description": "Sélecteurs et DJs engagés, avec un contenu axé sur l'activisme et l'expression culturelle.",
"links": [
{ "url": "https://gade.o-k-i.net/accounts/aktivist_vybz_akv", "text": "Découvrir sur GADE" }
{ "url": "https://mizik.o-k-i.net/channels/aktivistvybzakv", "text": "Découvrir sur MIZIK" },
{ "url": "https://gade.o-k-i.net/c/aktivist_vybz-1_channel/videos", "text": "Découvrir sur GADE" }
]
},
{
"name": "cyber-mawonaj",
"logo": "/assets/images/cyber_mawonaj.jpg",
"description": "Vers le mawonaj numérique - Conquérir sa liberté passe aussi par le numérique.",
"links": [
{ "url": "https://bokante.o-k-i.net/@cybermawonaj", "text": "Découvrir sur BOKANTE" },
{ "url": "https://gade.o-k-i.net/c/cyber.mawonaj/videos", "text": "Découvrir sur GADE" }
]
}
]
+6 -6
View File
@@ -23,7 +23,7 @@
<meta property="og:url" content="https://o-k-i.net{{ page.url or '/' }}">
<meta property="og:title" content="{% if title %}{{ title }}{% else %}{{ t.site.name }} - {{ t.site.og_tagline }}{% endif %}">
<meta property="og:description" content="{{ description or t.site.description }}">
<meta property="og:image" content="{{ '/assets/images/logo-512x512.png' | cdn }}">
<meta property="og:image" content="https://o-k-i.net/assets/images/logo-512x512.png">
<meta property="og:image:width" content="512">
<meta property="og:image:height" content="512">
<meta property="og:image:alt" content="Logo {{ t.site.name }}">
@@ -35,13 +35,13 @@
<meta name="twitter:url" content="https://o-k-i.net{{ page.url or '/' }}">
<meta name="twitter:title" content="{% if title %}{{ title }}{% else %}{{ t.site.name }} - {{ t.site.og_tagline }}{% endif %}">
<meta name="twitter:description" content="{{ description or t.site.description }}">
<meta name="twitter:image" content="{{ '/assets/images/logo-512x512.png' | cdn }}">
<meta name="twitter:image" content="https://o-k-i.net/assets/images/logo-512x512.png">
<meta name="twitter:image:alt" content="Logo {{ t.site.name }}">
<!-- Favicons -->
<link rel="icon" type="image/x-icon" href="{{ '/assets/images/favicon.ico' | cdn }}">
<link rel="icon" type="image/png" sizes="512x512" href="{{ '/assets/images/logo-512x512.png' | cdn }}">
<link rel="apple-touch-icon" href="{{ '/assets/images/logo-512x512.png' | cdn }}">
<link rel="icon" type="image/x-icon" href="/assets/images/favicon.ico">
<link rel="icon" type="image/png" sizes="512x512" href="/assets/images/logo-512x512.png">
<link rel="apple-touch-icon" href="/assets/images/logo-512x512.png">
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
@@ -59,7 +59,7 @@
"name": "{{ t.site.name }}",
"alternateName": "{{ t.site.shortName }}",
"url": "https://o-k-i.net",
"logo": "{{ '/assets/images/logo-512x512.png' | cdn }}",
"logo": "https://o-k-i.net/assets/images/logo-512x512.png",
"description": "{{ t.site.description }}",
"address": {
"@type": "PostalAddress",
+1 -1
View File
@@ -9,7 +9,7 @@
{% for client in t.clients.items %}
<a href="{{ client.url }}" target="_blank" rel="noopener noreferrer" class="partner-card">
<div class="partner-logo-container">
<img src="{{ client.logo | cdn }}" alt="Logo {{ client.name }}" class="partner-logo">
<img src="{{ client.logo }}" alt="Logo {{ client.name }}" class="partner-logo">
</div>
<h3>{{ client.name }}</h3>
<p class="project-domain">{{ client.domain }}</p>
+3 -3
View File
@@ -4,7 +4,7 @@
<h2>{{ t.djangokam.titre }} <span class="accent-text">{{ t.djangokam.titreAccent }}</span></h2>
<p class="section-subtitle">{{ t.djangokam.accroche }}</p>
<img src="{{ '/assets/images/djangokam-portrait.webp' | cdn }}" alt="Portrait officiel de DJANGOKAM" class="djangokam-portrait" width="512" height="512" loading="lazy">
<img src="/assets/images/djangokam-portrait.webp" alt="Portrait officiel de DJANGOKAM" class="djangokam-portrait" width="512" height="512" loading="lazy">
<blockquote class="djangokam-highlight">
{{ t.djangokam.message_cle }}
@@ -19,7 +19,7 @@
<figure class="djangokam-duo">
<a href="{{ t.djangokam.duo.url }}" target="_blank" rel="noopener noreferrer">
<img src="{{ t.djangokam.duo.image | cdn }}" alt="{{ t.djangokam.duo.alt }}" loading="lazy">
<img src="{{ t.djangokam.duo.image }}" alt="{{ t.djangokam.duo.alt }}" loading="lazy">
<figcaption>{{ t.djangokam.duo.legende }}</figcaption>
</a>
</figure>
@@ -39,7 +39,7 @@
{% for clip in t.djangokam.clips %}
<figure class="djangokam-clip">
<a href="{{ clip.url }}" target="_blank" rel="noopener noreferrer">
<img src="{{ clip.image | cdn }}" alt="{{ clip.alt }}" loading="lazy">
<img src="{{ clip.image }}" alt="{{ clip.alt }}" loading="lazy">
<figcaption>{{ clip.titre }}</figcaption>
</a>
</figure>
+1 -1
View File
@@ -1,7 +1,7 @@
<nav>
<div class="nav-container">
<a href="/" class="logo">
<img src="{{ '/assets/images/logo-512x512.png' | cdn }}" alt="{{ t.site.shortName }} Logo" class="logo-image">
<img src="/assets/images/logo-512x512.png" alt="{{ t.site.shortName }} Logo" class="logo-image">
<span>{{ t.site.shortName }}</span>
</a>
<ul class="nav-links">
+1 -1
View File
@@ -9,7 +9,7 @@
{% for partner in t.partners.items %}
<div class="partner-card">
<div class="partner-logo-container">
<img src="{{ partner.logo | cdn }}" alt="Logo {{ partner.name }}" class="partner-logo">
<img src="{{ partner.logo }}" alt="Logo {{ partner.name }}" class="partner-logo">
</div>
<h3>{{ partner.name }}</h3>
<p class="partner-description">{{ partner.description }}</p>
+1 -1
View File
@@ -385,7 +385,7 @@ html.light-theme .theme-icon-light {
right: -5%;
width: 55%;
height: 100%;
background: url('https://organisationka.b-cdn.net/assets/images/logo-512x512.png') center / contain no-repeat;
background: url('/assets/images/logo-512x512.png') center / contain no-repeat;
opacity: 0.05;
pointer-events: none;
}
-18
View File
@@ -277,24 +277,6 @@ function createNetworkLine() {
// Initialize network lines
createNetworkLine();
// Dynamic typing effect for hero subtitle
const subtitle = document.querySelector('.hero-subtitle');
if (subtitle) {
const text = subtitle.textContent;
subtitle.textContent = '';
let index = 0;
function typeWriter() {
if (index < text.length) {
subtitle.textContent += text.charAt(index);
index++;
setTimeout(typeWriter, 100);
}
}
setTimeout(typeWriter, 800);
}
// Add hover effect to project cards with tilt
document.querySelectorAll('.project-card, .service-card').forEach(card => {
card.addEventListener('mousemove', (e) => {
+4 -4
View File
@@ -30,16 +30,16 @@ description: Press resources for DJANGOKAM, the first Caribbean AI artist produc
<div class="press-visual-grid">
{% for visual in t.press.visuals %}
<div class="press-visual">
<a href="{{ visual.image | cdn }}" target="_blank" rel="noopener noreferrer">
<img src="{{ visual.image | cdn }}" alt="{{ visual.caption }}" loading="lazy">
<a href="{{ visual.image }}" target="_blank" rel="noopener noreferrer">
<img src="{{ visual.image }}" alt="{{ visual.caption }}" loading="lazy">
<span class="press-visual-caption">{{ visual.caption }}</span>
</a>
<a href="{{ ('/assets/press/' + visual.pdf) | cdn }}" class="press-visual-pdf-link">{{ t.press.visual_pdf_label }}</a>
<a href="{{ ('/assets/press/' + visual.pdf) }}" class="press-visual-pdf-link">{{ t.press.visual_pdf_label }}</a>
</div>
{% endfor %}
</div>
<div class="press-visuals-pdf">
<a href="{{ ('/assets/press/' + t.press.visuals_pdf_file) | cdn }}" class="btn btn-primary">{{ t.press.visuals_pdf_label }} →</a>
<a href="{{ ('/assets/press/' + t.press.visuals_pdf_file) }}" class="btn btn-primary">{{ t.press.visuals_pdf_label }} →</a>
</div>
</div>
</section>
+4 -4
View File
@@ -30,16 +30,16 @@ description: Ressources presse pour DJANGOKAM, premier artiste IA caribéen prod
<div class="press-visual-grid">
{% for visual in t.press.visuals %}
<div class="press-visual">
<a href="{{ visual.image | cdn }}" target="_blank" rel="noopener noreferrer">
<img src="{{ visual.image | cdn }}" alt="{{ visual.caption }}" loading="lazy">
<a href="{{ visual.image }}" target="_blank" rel="noopener noreferrer">
<img src="{{ visual.image }}" alt="{{ visual.caption }}" loading="lazy">
<span class="press-visual-caption">{{ visual.caption }}</span>
</a>
<a href="{{ ('/assets/press/' + visual.pdf) | cdn }}" class="press-visual-pdf-link">{{ t.press.visual_pdf_label }}</a>
<a href="{{ ('/assets/press/' + visual.pdf) }}" class="press-visual-pdf-link">{{ t.press.visual_pdf_label }}</a>
</div>
{% endfor %}
</div>
<div class="press-visuals-pdf">
<a href="{{ ('/assets/press/' + t.press.visuals_pdf_file) | cdn }}" class="btn btn-primary">{{ t.press.visuals_pdf_label }} →</a>
<a href="{{ ('/assets/press/' + t.press.visuals_pdf_file) }}" class="btn btn-primary">{{ t.press.visuals_pdf_label }} →</a>
</div>
</div>
</section>