diff --git a/971.php b/971.php
new file mode 100644
index 0000000..ec20ae6
--- /dev/null
+++ b/971.php
@@ -0,0 +1,26 @@
+
+
+
+ JWE - KAT
+
+
+
+
+ Guadeloupe (971)
+
+
+
Correct ✅ : 0
+
Faux ❌ : 0
+
+
+
+
Trouve la commune
+
...
+
+
+
+
+
+
+
+
diff --git a/972.php b/972.php
new file mode 100644
index 0000000..11ea0b4
--- /dev/null
+++ b/972.php
@@ -0,0 +1,26 @@
+
+
+
+ JWE - KAT
+
+
+
+
+ Martinique (972)
+
+
+
Correct ✅ : 0
+
Faux ❌ : 0
+
+
+
+
Trouve la commune
+
...
+
+
+
+
+
+
+
+
diff --git a/973.php b/973.php
new file mode 100644
index 0000000..d43cebe
--- /dev/null
+++ b/973.php
@@ -0,0 +1,26 @@
+
+
+
+ JWE - KAT
+
+
+
+
+ Guyane (973)
+
+
+
Correct ✅ : 0
+
Faux ❌ : 0
+
+
+
+
Trouve la commune
+
...
+
+
+
+
+
+
+
+
diff --git a/974.php b/974.php
new file mode 100644
index 0000000..39fe93e
--- /dev/null
+++ b/974.php
@@ -0,0 +1,26 @@
+
+
+
+ JWE - KAT
+
+
+
+
+ La Réunion (974)
+
+
+
Correct ✅ : 0
+
Faux ❌ : 0
+
+
+
+
Trouve la commune
+
...
+
+
+
+
+
+
+
+
diff --git a/css/map.css b/css/map.css
new file mode 100644
index 0000000..d055a20
--- /dev/null
+++ b/css/map.css
@@ -0,0 +1,42 @@
+body {
+ margin: 0;
+ padding: 0;
+}
+
+html, body, #map {
+ height: 90%;
+}
+
+#title,div {
+ text-align: center;
+}
+
+.popup-ko .maplibregl-popup-content {
+ background-color: rgba(255, 0, 0, 0.9);
+ border-radius: 10px;
+ box-shadow: 0px 0px 0px 2px rgb(0, 0, 0);
+}
+
+.popup-ok .maplibregl-popup-content {
+ background-color: rgba(0, 255, 34, 0.9);
+ border-radius: 10px;
+ box-shadow: 0px 0px 0px 2px rgb(0, 0, 0);
+}
+
+.maplibregl-popup-tip {
+ display: none !important;
+}
+
+@media (max-width: 600px) {
+ body {
+ font-size: 100%;
+ }
+
+ h1 {
+ font-size: 5.5vw;
+ }
+
+ ul, li {
+ padding: 3vw;
+ }
+}
diff --git a/js/map.js b/js/map.js
new file mode 100644
index 0000000..d1b8d5f
--- /dev/null
+++ b/js/map.js
@@ -0,0 +1,383 @@
+/**
+ * js/map.js
+ */
+
+/**
+ * Récupérer le nom du fichier actuel (ex: 971.php) et en extraire le code du département (ex: 971).
+ */
+const currentFileName = window.location.pathname.split('/').pop()
+const codeDepartement = currentFileName.split('.')[0]
+
+/**
+ * Définir le centre , le niveau de zoom et le style de la carte en fonction du code du département.
+ */
+let centerCoordinates
+let zoomLevel
+let styleFileName
+
+switch (codeDepartement) {
+ case '971':
+ centerCoordinates = [-61.4167, 16.25] // Guadeloupe
+ zoomLevel = 9
+ styleFileName = 'ortho.json'
+ break
+ case '972':
+ centerCoordinates = [-61.01635, 14.60285] // Martinique
+ zoomLevel = 9.5
+ styleFileName = 'ortho.json'
+ break
+ case '973':
+ centerCoordinates = [-53.1258, 3.9339] // Guyane française
+ zoomLevel = 7
+ styleFileName = 'ortho-jwe.json'
+ break
+ case '974':
+ centerCoordinates = [55.52905, -21.13014] // La Réunion
+ styleFileName = 'ortho.json'
+ zoomLevel = 9.5
+ break
+ default:
+ centerCoordinates = [-61.4167, 16.25] // Par défaut (Guadeloupe)
+ styleFileName = 'ortho.json'
+ zoomLevel = 9.5
+}
+
+/**
+ * Initialise et configure la carte
+ */
+const map = new maplibregl.Map({
+ container: 'map',
+ style: `./kat/styles/${styleFileName}`,
+ center: centerCoordinates,
+ zoom: zoomLevel
+})
+
+if (codeDepartement !== '973') {
+ /**
+ * Désactive le zoom, le double-clic, le déplacement de la carte pour les cartes autres que celle la Guyane.
+ */
+ map.scrollZoom.disable()
+ map.doubleClickZoom.disable()
+ map.dragPan.disable()
+} else {
+ /**
+ * Ajoute les contrôles de navigation à la carte, et définit les niveaux de zoom minimum et maximum pour la Guyane.
+ */
+ map.addControl(new maplibregl.NavigationControl({showCompass: false}))
+ map.setMinZoom(7)
+ map.setMaxZoom(9.5)
+}
+
+/**
+ * Définit les décalages des popups en fonction de leur position.
+ */
+const popupOffsets = {
+ 'top': [0, 0],
+ 'top-left': [0, 0],
+ 'top-right': [0, 0],
+ 'bottom': [0, -30],
+ 'bottom-left': [0, -50],
+ 'bottom-right': [0, -50],
+ 'left': [25, -25],
+ 'right': [-25, -25]
+}
+
+/**
+ * Référence aux éléments HTML pour afficher le score.
+ */
+const ok = document.getElementById('OK')
+const ko = document.getElementById('KO')
+
+/**
+ * État actuel de la commune survolée.
+ */
+let hoveredStateId = null
+
+/**
+ * Référence à la commune actuellement sélectionnée pour trouver.
+ */
+let currentCommune = null
+
+/**
+ * Ensemble des codes des communes déjà trouvées correctement.
+ */
+const correctAnswers = new Set()
+
+/**
+ * Récupère les propriétés des communes depuis un fichier GeoJSON en fonction du code du département.
+ *
+ * @async
+ * @param {string} codeDepartement - Numéro du département.
+ * @returns {Promise