diff --git a/src/assets/lexicon_icon.js b/src/assets/lexicon_icon.js
index ab5eb63e4e57018d4a7668e3e0bce1f3ddff32b3..1247bcfbdf8386aea0a1163e2cf950fddb466a1e 100644
--- a/src/assets/lexicon_icon.js
+++ b/src/assets/lexicon_icon.js
@@ -19,7 +19,7 @@ async function getLexiconsColors(authToken) {
     log("✅ Couleurs des lexiques récupérées :", colors);
     return colors;
   } catch (error) {
-    console.error("❌ Erreur lors de la récupération des couleurs des lexiques :", error);
+    log("❌ Erreur lors de la récupération des couleurs des lexiques :", error);
     return {};
   }
 }
@@ -87,7 +87,7 @@ async function getOrCreateLexiconColor(lexiconId) {
         }
       }
     } catch (error) {
-      console.error("Erreur lors de la récupération des couleurs via l'API :", error);
+      log("Erreur lors de la récupération des couleurs via l'API :", error);
     }
   }
   // Si aucune couleur n'est associée, on la génère et on la sauvegarde
@@ -133,7 +133,7 @@ async function updateLexiconColors(authToken) {
     await browser.storage.local.set({ lexiconColors: colorMapping });
     return colorMapping;
   } catch (error) {
-    console.error("❌ Erreur lors de la mise à jour des couleurs :", error);
+    log("❌ Erreur lors de la mise à jour des couleurs :", error);
     return {};
   }
 }
diff --git a/src/background/background.js b/src/background/background.js
index 9b1c26eef5887bf1c05caaa927a5a922c7174b2d..1f76e0cbf79a0a4cd3b2de0e060350ce4475b71c 100644
--- a/src/background/background.js
+++ b/src/background/background.js
@@ -238,7 +238,7 @@ browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => {
           });
           log(`✅ Message de surlignage transmis à l'onglet ${tabs[0].id}`);
         } catch (error) {
-          console.error("❌ Erreur lors de la gestion du surlignage:", error);
+          log("❌ Erreur lors de la gestion du surlignage:", error);
         }
       }
       break;
@@ -281,14 +281,14 @@ browser.webNavigation.onCompleted.addListener(async (details) => {
               log("🔐 Token détecté :", token);
               browser.runtime.sendMessage({ action: "saveToken", token });
             } else {
-              console.error("❌ Token introuvable.");
+              log("❌ Token introuvable.");
             }
             return null;
           })();
         `
       });
     } catch (error) {
-      console.error("❌ Erreur lors de la récupération du token :", error);
+      log("❌ Erreur lors de la récupération du token :", error);
     }
   }
 }, { url: [{ hostContains: "prisms.lezinter.net" }] });
@@ -366,48 +366,48 @@ let worker = null;
 
 function initWorker() {
   if (!worker) {
-    console.log("[Background] Initialisation du WebWorker...");
+    log("[Background] Initialisation du WebWorker...");
     try {
       worker = new Worker(browser.runtime.getURL("src/workers/pyodide_worker.js"));
       // Centralisation de l'écoute des messages et erreurs du Worker
       worker.addEventListener("message", handleWorkerMessage);
       worker.addEventListener("error", handleWorkerError);
-      console.log("[Background] WebWorker initialisé avec succès.");
+      log("[Background] WebWorker initialisé avec succès.");
     } catch (error) {
-      console.error("[Background] Échec de l'initialisation du WebWorker :", error);
+      log("[Background] Échec de l'initialisation du WebWorker :", error);
     }
   }
 }
 
 function handleWorkerError(error) {
-  console.error("Erreur du WebWorker :", error.message);
+  log("Erreur du WebWorker :", error.message);
 }
 
 function handleWorkerMessage(event) {
   const data = event.data;
-  console.log("[Background] Message du WebWorker :", data);
+  log("[Background] Message du WebWorker :", data);
 
   switch (data.type) {
     case "pyodide-simplemma":
       if (data.status === "success") {
-        console.log("[Background] Pyodide et Simplemma prêts. Mise à jour de l'état.");
+        log("[Background] Pyodide et Simplemma prêts. Mise à jour de l'état.");
         browser.storage.local.set({ pyodideSimplemmaReady: true });
         checkAndUpdateTracking();
       } else if (data.status === "error") {
-        console.error("[Background] Erreur lors du chargement :", data.message);
+        log("[Background] Erreur lors du chargement :", data.message);
       } else if (data.status === "already_loaded") {
-        console.log("[Background] Pyodide et Simplemma déjà chargés.");
+        log("[Background] Pyodide et Simplemma déjà chargés.");
       }
       break;
     case "update-frequencies":
-      console.log("[Background] Mise à jour des fréquences :", data.frequencies);
+      log("[Background] Mise à jour des fréquences :", data.frequencies);
       notifyAllTabs({ command: "update-frequencies", frequencies: data.frequencies });
       // Si un port stats est connecté, vous pouvez lui transmettre également :
       // port.postMessage({ command: "update-frequencies", frequencies: data.frequencies });
       browser.storage.local.set({ lemmaFrequencies: data.frequencies });
       break;
     case "threshold-exceeded":
-      console.log("[Background] Mots dépassant le seuil :", data.wordsAboveThreshold);
+      log("[Background] Mots dépassant le seuil :", data.wordsAboveThreshold);
       notifyAllTabs({ command: "threshold-exceeded", wordsAboveThreshold: data.wordsAboveThreshold });
       break;
     default:
@@ -423,14 +423,14 @@ initWorker();
 // Écoute des messages de la popup et transmission au WebWorker
 // ─────────────────────────────────────────────────────────────────────────────
 browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => {
-  console.log("[Background] Message reçu :", message);
+  log("[Background] Message reçu :", message);
 
   if (!worker) {
     initWorker();
   }
 
   if (message.command === "toggle-stats") {
-    console.log(`[Background] Statistiques ${message.isActive ? "activées" : "désactivées"}`);
+    log(`[Background] Statistiques ${message.isActive ? "activées" : "désactivées"}`);
     const { isActive } = message;
     await browser.storage.local.set({ isTrackingActive: isActive });
     if (!isActive) {
@@ -440,7 +440,7 @@ browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => {
   }
 
   if (message.command === "pyodide-simplemma") {
-    console.log("[Background] Demande d'initialisation de Pyodide et Simplemma...");
+    log("[Background] Demande d'initialisation de Pyodide et Simplemma...");
     worker.postMessage({ command: "pyodide-simplemma" });
   }
 
@@ -460,7 +460,7 @@ let storedFrequencies = {};
 
 loadStoredFrequencies().then(frequencies => {
   storedFrequencies = frequencies;
-  console.log("[Background] Fréquences initialisées :", storedFrequencies);
+  log("[Background] Fréquences initialisées :", storedFrequencies);
 });
 
 // ─────────────────────────────────────────────────────────────────────────────
@@ -469,10 +469,10 @@ loadStoredFrequencies().then(frequencies => {
 async function checkAndUpdateTracking() {
   const { isTrackingActive, pyodideSimplemmaReady } = await browser.storage.local.get(["isTrackingActive", "pyodideSimplemmaReady"]);
   if (isTrackingActive && pyodideSimplemmaReady) {
-    console.log("[Background] Activation du tracking.");
+    log("[Background] Activation du tracking.");
     notifyAllTabs({ command: "activate-stats" });
   } else {
-    console.log("[Background] Désactivation du tracking.");
+    log("[Background] Désactivation du tracking.");
     notifyAllTabs({ command: "deactivate-stats" });
   }
 }
@@ -497,7 +497,7 @@ browser.storage.onChanged.addListener(async (changes, area) => {
     checkAndUpdateTracking();
   }
   if (area === "local" && (changes.accessToken || changes.threshold || changes.trackedLanguages || changes.autoAdd)) {
-    console.log("[Background] Mise à jour des préférences détectée.");
+    log("[Background] Mise à jour des préférences détectée.");
     const { accessToken, trackedLanguages, threshold, autoAdd } = await browser.storage.local.get([
       "accessToken", "trackedLanguages", "threshold", "autoAdd"
     ]);
@@ -517,7 +517,7 @@ browser.storage.onChanged.addListener(async (changes, area) => {
 // ─────────────────────────────────────────────────────────────────────────────
 browser.runtime.onMessage.addListener(async (message, sender) => {
   if (message.command === "register-stats-script") {
-    console.log("[Background] stats.js s'est enregistré.");
+    log("[Background] stats.js s'est enregistré.");
     const { isTrackingActive, pyodideSimplemmaReady } = await browser.storage.local.get(["isTrackingActive", "pyodideSimplemmaReady"]);
     if (isTrackingActive && pyodideSimplemmaReady) {
       browser.tabs.sendMessage(sender.tab.id, { command: "activate-stats" })
@@ -530,11 +530,11 @@ browser.runtime.onMessage.addListener(async (message, sender) => {
 // Connexion entre stats.js et le Worker via un port dédié
 // ─────────────────────────────────────────────────────────────────────────────
 browser.runtime.onConnect.addListener((port) => {
-  console.log("[Background] Connexion établie :", port.name);
+  log("[Background] Connexion établie :", port.name);
   if (port.name === "stats-worker-port") {
     // Redirige les messages de stats.js vers le Worker
     port.onMessage.addListener((message) => {
-      console.log("[Background] Message reçu de stats.js :", message);
+      log("[Background] Message reçu de stats.js :", message);
       worker.postMessage(message);
     });
 
@@ -561,14 +561,14 @@ function loadStoplist() {
     .then(response => response.text())
     .then(text => {
       stoplistFr = text.split("\n").map(word => word.trim());
-      console.log("[Background] Stoplist chargée :", stoplistFr);
+      log("[Background] Stoplist chargée :", stoplistFr);
       sendStoplistToWorker();
     })
-    .catch(error => console.error("[Background] Erreur lors du chargement de la stoplist :", error));
+    .catch(error => log("[Background] Erreur lors du chargement de la stoplist :", error));
 }
 
 function sendStoplistToWorker() {
-  console.log("[Background] Envoi de la stoplist au Worker...");
+  log("[Background] Envoi de la stoplist au Worker...");
   worker.postMessage({ command: "update-stoplist", stoplist: stoplistFr });
 }
 
@@ -576,7 +576,7 @@ browser.runtime.onStartup.addListener(loadStoplist);
 browser.runtime.onInstalled.addListener(loadStoplist);
 
 async function handleHighlighting(command, lexiconId, tabId) {
-  console.log(`🎯 Gestion du surlignage: ${command} pour le lexique ${lexiconId}`);
+  log(`🎯 Gestion du surlignage: ${command} pour le lexique ${lexiconId}`);
   
   try {
       // S'assurer que le script est injecté
@@ -591,10 +591,10 @@ async function handleHighlighting(command, lexiconId, tabId) {
           lexiconId: lexiconId
       });
       
-      console.log("✅ Réponse du content script:", response);
+      log("✅ Réponse du content script:", response);
       return response;
   } catch (error) {
-      console.error("❌ Erreur lors de la gestion du surlignage:", error);
+      log("❌ Erreur lors de la gestion du surlignage:", error);
       return false;
   }
 }
\ No newline at end of file
diff --git a/src/context_menu/browser_context_menu.js b/src/context_menu/browser_context_menu.js
index 92112337ca829ef9f72b2bed3882f3c8e63387a4..57f5d56500b58ac5490b708a5f5010c5ec440d2f 100644
--- a/src/context_menu/browser_context_menu.js
+++ b/src/context_menu/browser_context_menu.js
@@ -12,7 +12,7 @@ async function loadAuthToken() {
     authToken = result.accessToken;
     log("🔑 Token chargé au démarrage :", authToken);
   } catch (error) {
-    console.error("❌ Erreur lors de la récupération du token :", error);
+    log("❌ Erreur lors de la récupération du token :", error);
   }
 }
 
@@ -100,7 +100,7 @@ browser.contextMenus.onClicked.addListener(async (info, tab) => {
     if (typeof actuallyOpenLoginPage === "function") {
       actuallyOpenLoginPage();
     } else {
-      console.error("La fonction actuallyOpenLoginPage n'est pas accessible.");
+      log("La fonction actuallyOpenLoginPage n'est pas accessible.");
     }
     return;
   }
@@ -146,7 +146,7 @@ browser.contextMenus.onClicked.addListener(async (info, tab) => {
       break;
     }
   
-  console.error(`❌ Action inconnue : ${info.menuItemId}`);
+  log(`❌ Action inconnue : ${info.menuItemId}`);
 });
 
 // ─────────────────────────────────────────────────────────────────────────────
@@ -167,7 +167,7 @@ async function getDefinition(selectedText) {
       definitions: allDefinitions,
     });
   } catch (error) {
-    console.error("❌ Erreur lors de la recherche combinée des définitions :", error);
+    log("❌ Erreur lors de la recherche combinée des définitions :", error);
   }
 }
 
@@ -201,7 +201,7 @@ async function searchInLexicons(selectedText) {
       selectedText,
     });
   } catch (error) {
-    console.error("❌ Erreur lors de la recherche dans les lexiques :", error);
+    log("❌ Erreur lors de la recherche dans les lexiques :", error);
     browser.runtime.sendMessage({
       action: "showLexiconResult",
       lexicons: [],
diff --git a/src/context_menu/custom_context_menu.js b/src/context_menu/custom_context_menu.js
index a4cb929040c15368a290d98693649dd43f60a348..dc136d9098c621e72e71fbd0713d93acf0156920 100644
--- a/src/context_menu/custom_context_menu.js
+++ b/src/context_menu/custom_context_menu.js
@@ -20,7 +20,7 @@ async function loadAuthToken() {
     authToken = result.accessToken || null;
     log("🔑 Token chargé :", authToken);
   } catch (error) {
-    console.error("❌ Erreur lors de la récupération du token :", error);
+    log("❌ Erreur lors de la récupération du token :", error);
     authToken = null;
   }
 }
@@ -297,7 +297,7 @@ async function showPicker(event, selectedText) {
         try {
           definitions = await fetchLexiconDefinitions(selectedText);
         } catch (error) {
-          console.error("Erreur lors de la récupération des définitions :", error);
+          log("Erreur lors de la récupération des définitions :", error);
         }
         const existingLexiconIds = new Set();
         if (Array.isArray(definitions)) {
@@ -329,7 +329,7 @@ async function showPicker(event, selectedText) {
             lexicons: successMsg
           });
         } catch (error) {
-          console.error("❌ Erreur lors de l'ajout du mot :", error);
+          log("❌ Erreur lors de l'ajout du mot :", error);
           const errorMsg = `❌ Erreur lors de l'ajout du mot : ${error.message}`;
           picker.innerHTML = `<p style="color: red;">${errorMsg}</p>`;
           setTimeout(() => picker.style.display = "none", 3000);
@@ -351,7 +351,7 @@ async function showPicker(event, selectedText) {
     picker.style.top = event.pageY + "px";
     picker.style.display = "flex";
   } catch (error) {
-    console.error("❌ Erreur lors de la récupération des lexiques :", error);
+    log("❌ Erreur lors de la récupération des lexiques :", error);
     picker.innerHTML = "<p style='color:#333;'>Erreur lors du chargement des lexiques.</p>";
     picker.style.display = "block";
   }
diff --git a/src/popup/popup.js b/src/popup/popup.js
index 5f83c88347f278d6e3a59f91532b202917f35884..5a912ed8a889836e943038439ce8952df30bd1a9 100644
--- a/src/popup/popup.js
+++ b/src/popup/popup.js
@@ -16,7 +16,7 @@ async function updateConnectionButton() {
   const button = document.getElementById("auth-button");
 
   if (!button) {
-    console.error("❌ Le bouton de connexion n'a pas été trouvé.");
+    log("❌ Le bouton de connexion n'a pas été trouvé.");
     return;
   }
 
@@ -360,7 +360,7 @@ function showNotification(message) {
       notificationBox.classList.add("hidden");
     }, { once: true });
   } else {
-    console.error("❌ Impossible d'afficher la notification : élément manquant.");
+    log("❌ Impossible d'afficher la notification : élément manquant.");
   }
 }
 
diff --git a/src/sidebar/sidebar.js b/src/sidebar/sidebar.js
index a6d9a6a7ce236a1eb66048b11ca76ad420573816..b56fc56332de1dfb456a02c895b1e38be55fc017 100644
--- a/src/sidebar/sidebar.js
+++ b/src/sidebar/sidebar.js
@@ -233,7 +233,7 @@ async function fetchLexicons() {
     // Restaurer l'état des boutons après l'affichage
     await restoreHighlightingState();
   } catch (error) {
-    console.error("❌ Erreur lors du chargement des lexiques :", error.message);
+    log("❌ Erreur lors du chargement des lexiques :", error.message);
     const lexiquesContainer = document.getElementById("lexiques");
     if (lexiquesContainer) {
       lexiquesContainer.textContent = error.message || "Erreur lors du chargement des lexiques.";
@@ -316,7 +316,7 @@ async function displayLexiconsWithCheckbox(lexicons) {
           .map(btn => parseInt(btn.dataset.lexiconId));
         await browser.storage.local.set({ activeLexicons });
       } catch (error) {
-        console.error("Erreur lors du toggle de surlignage pour le lexique", lexiconId, ":", error);
+        log("Erreur lors du toggle de surlignage pour le lexique", lexiconId, ":", error);
       }
     });
     
@@ -368,7 +368,7 @@ async function restoreHighlightingState() {
       });
     }
   } catch (error) {
-    console.error("Erreur lors de la restauration de l'état des boutons:", error);
+    log("Erreur lors de la restauration de l'état des boutons:", error);
   }
 }
 
@@ -381,7 +381,7 @@ function initModal() {
   log("closeModalBtn =", closeModalBtn);
 
   if (!modalOverlay || !modalFullText || !closeModalBtn) {
-    console.error("Les éléments modaux ne sont pas trouvés !");
+    log("Les éléments modaux ne sont pas trouvés !");
     return;
   }
 
@@ -444,7 +444,7 @@ async function handleAddWordClick() {
   try {
     definitions = await fetchLexiconDefinitions(selectedWord);
   } catch (error) {
-    console.error("Erreur lors de la récupération des définitions pour vérification :", error);
+    log("Erreur lors de la récupération des définitions pour vérification :", error);
   }
 
   const existingLexiconIds = new Set();
@@ -490,7 +490,7 @@ async function handleAddWordClick() {
     }
 
   } catch (error) {
-    console.error("Erreur lors de l'ajout du mot :", error);
+    log("Erreur lors de l'ajout du mot :", error);
     if (lexiconResultElement) {
       lexiconResultElement.textContent = "Erreur lors de l'ajout : " + error.message;
     }
@@ -664,7 +664,7 @@ document.addEventListener("DOMContentLoaded", async () => {
     chercherDefButton.style.visibility = "visible";
     chercherDefButton.disabled = false;
   } else {
-    console.error("❌ ERREUR : Bouton #chercherDef introuvable.");
+    log("❌ ERREUR : Bouton #chercherDef introuvable.");
   }
 
   // Écouteur pour la case à cocher "toggle-definitions"
@@ -759,6 +759,6 @@ async function toggleLexiconHighlight(lexiconId, isActive) {
 
     log(`✅ Surlignage ${isActive ? 'activé' : 'désactivé'} pour le lexique ${lexiconId}`);
   } catch (error) {
-    console.error(`❌ Erreur lors du toggle du surlignage pour le lexique ${lexiconId}:`, error);
+    log(`❌ Erreur lors du toggle du surlignage pour le lexique ${lexiconId}:`, error);
   }
 }
diff --git a/src/utils/api.js b/src/utils/api.js
index d725f8da4dabaab7ab6ed3063130a63ff80c4fb6..19d1a12c544fea86a8ac551e9b8d77bcf87a36e3 100644
--- a/src/utils/api.js
+++ b/src/utils/api.js
@@ -44,7 +44,7 @@ async function callApi(url, authToken = null, method = 'GET', data = null) {
     }
     return await response.json();
   } catch (error) {
-    console.error(`🚨 Erreur lors de l'appel API [${url}]:`, error);
+    log(`🚨 Erreur lors de l'appel API [${url}]:`, error);
     throw error;
   }
 }
@@ -91,7 +91,7 @@ async function getAllCategoriesLexicons(authToken) {
     log("✅ Lexiques récupérés (toutes catégories confondues) :", combined);
     return combined;
   } catch (error) {
-    console.error("❌ Erreur lors de la récupération multi-catégories :", error);
+    log("❌ Erreur lors de la récupération multi-catégories :", error);
     return [];
   }
 }
@@ -146,7 +146,7 @@ async function getAllLexiconWords(authToken) {
     log("✅ Toutes les graphies récupérées :", allGraphiesByLexicon);
     return allGraphiesByLexicon;
   } catch (error) {
-    console.error("❌ Erreur lors de la récupération des graphies des lexiques :", error);
+    log("❌ Erreur lors de la récupération des graphies des lexiques :", error);
     return {};
   }
 }
@@ -174,7 +174,7 @@ async function getWiktionaryDefinition(word) {
     log(`📖 Définition trouvée pour '${word}':`, definition);
     return [definition];
   } catch (error) {
-    console.error("Erreur lors de la récupération du Wiktionnaire :", error);
+    log("Erreur lors de la récupération du Wiktionnaire :", error);
     return ["Erreur : " + error.message];
   }
 }
diff --git a/src/utils/definitions.js b/src/utils/definitions.js
index 2010727fc812b69758bbc32022c36ad38d749f0d..b59e496c0fdf72d6b64bdfe288c1f450c942b1c0 100644
--- a/src/utils/definitions.js
+++ b/src/utils/definitions.js
@@ -116,7 +116,7 @@ async function fetchLexiconDefinitions(word) {
     log("Résultat final filtré :", allDefinitions);
     return allDefinitions;
   } catch (error) {
-    console.error("❌ Erreur générale lors de la récupération des définitions :", error);
+    log("❌ Erreur générale lors de la récupération des définitions :", error);
     return [];
   }
 }
@@ -155,7 +155,7 @@ async function fetchLexiconDefinitions(word) {
 //       }
 //     ];
 //   } catch (error) {
-//     console.error("❌ Erreur Wiktionnaire :", error);
+//     log("❌ Erreur Wiktionnaire :", error);
 //     return [
 //       {
 //         source: "Wiktionnaire",
@@ -189,7 +189,7 @@ async function wikiApiResponse(word) {
     log(`Résultats du Wiktionnaire pour le mot "${word}" :`, data);
     return data;
   } catch (error) {
-    console.error('Erreur lors de la récupération de la définition depuis le Wiktionnaire :', error);
+    log('Erreur lors de la récupération de la définition depuis le Wiktionnaire :', error);
     throw error; 
   }
 }
@@ -262,7 +262,7 @@ async function fetchWiktionaryDefinition(word) {
           }
       ];
   } catch (error) {
-      console.error("Erreur lors de la récupération de la définition :", error);
+      log("Erreur lors de la récupération de la définition :", error);
       return [{ source: "Wiktionnaire", text: "Erreur lors de la récupération sur le Wiktionnaire." }];
   }
 }
@@ -387,7 +387,7 @@ function openDefinitionPopup(fullText) {
   const modalOverlay = document.getElementById("modalOverlay");
   const modalFullText = document.getElementById("modalFullText");
   if (!modalOverlay || !modalFullText) {
-    console.error("Modal elements not found!");
+    log("Modal elements not found!");
     return;
   }
   modalFullText.innerHTML = "<p>" + fullText.replace(/\n/g, "<br>") + "</p>";
@@ -467,7 +467,7 @@ async function showDefinitions(word) {
     return allDefinitions;
 
   } catch (error) {
-    console.error("❌ [showDefinitions] Erreur : ", error);
+    log("❌ [showDefinitions] Erreur : ", error);
 
     if (noDefinitionsContainer) {
       noDefinitionsContainer.textContent =
@@ -487,7 +487,7 @@ async function fetchDefinition(word) {
 
   const noDefinitionsContainer = document.getElementById("noDefinitionsContainer");
   if (!noDefinitionsContainer) {
-    console.error("❌ Élément #noDefinitionsContainer introuvable.");
+    log("❌ Élément #noDefinitionsContainer introuvable.");
     return;
   }
 
@@ -503,7 +503,7 @@ async function fetchDefinition(word) {
 
     noDefinitionsContainer.style.display = "none";
   } catch (error) {
-    console.error("❌ Erreur lors de la récupération de la définition :", error);
+    log("❌ Erreur lors de la récupération de la définition :", error);
     noDefinitionsContainer.style.display = "block";
   }
 }
diff --git a/src/utils/highlighting.js b/src/utils/highlighting.js
index bc9386d34abe0529ae758c876681ed9273445b1e..4a673e9a1849f7f040d23b055fd09f39948b448e 100644
--- a/src/utils/highlighting.js
+++ b/src/utils/highlighting.js
@@ -2,22 +2,22 @@
 window.activeLexiconIds = window.activeLexiconIds || new Set();
 
 // Logs immédiats
-console.log("🔵 DÉBUT DU FICHIER highlighting.js");
+log("🔵 DÉBUT DU FICHIER highlighting.js");
 try {
     log("✅ highlighting.js chargé");
 } catch (e) {
-    console.error("❌ Erreur avec la fonction log:", e);
+    log("❌ Erreur avec la fonction log:", e);
 }
 
 // Vérification de l'environnement
-console.log("🔍 Vérification de l'environnement:", {
+log("🔍 Vérification de l'environnement:", {
     hasBrowser: typeof browser !== 'undefined',
     windowLocation: window.location.href
 });
 
 // Gestion globale des erreurs
 window.onerror = function(msg, url, line, col, error) {
-    console.error("🔴 Erreur globale:", { message: msg, url: url, line: line, col: col, error: error });
+    log("🔴 Erreur globale:", { message: msg, url: url, line: line, col: col, error: error });
     return false;
 };
 
@@ -35,7 +35,7 @@ async function initAuthToken() {
             return false;
         }
     } catch (error) {
-        console.error("❌ Erreur lors de la récupération du token:", error);
+        log("❌ Erreur lors de la récupération du token:", error);
         return false;
     }
 }
@@ -53,7 +53,7 @@ browser.runtime.onMessage.addListener((message) => {
 (function () {
     try {
         if (window.hasRun) {
-            console.log("⚠️ highlighting.js déjà chargé");
+            log("⚠️ highlighting.js déjà chargé");
             return;
         }
         window.hasRun = true;
@@ -86,7 +86,7 @@ browser.runtime.onMessage.addListener((message) => {
         
         // Gestion des messages reçus du background
         browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
-            console.log("📨 Message reçu:", message, "Context:", {
+            log("📨 Message reçu:", message, "Context:", {
                 highlightingActive,
                 activeLexiconIds: Array.from(activeLexiconIds),
                 hasAuthToken: !!window.authToken,
@@ -101,7 +101,7 @@ browser.runtime.onMessage.addListener((message) => {
                         sendResponse(true);
                     })
                     .catch(error => {
-                        console.error("❌ Erreur lors de l'activation:", error);
+                        log("❌ Erreur lors de l'activation:", error);
                         sendResponse(false);
                     });
                 return true;
@@ -117,7 +117,7 @@ browser.runtime.onMessage.addListener((message) => {
                         sendResponse(true);
                     })
                     .catch(error => {
-                        console.error("❌ Erreur lors de la désactivation:", error);
+                        log("❌ Erreur lors de la désactivation:", error);
                         sendResponse(false);
                     });
                 return true;
@@ -211,7 +211,7 @@ browser.runtime.onMessage.addListener((message) => {
                 attachMutationObserver();
                 return true;
             } catch (error) {
-                console.error("❌ Erreur lors du démarrage du surlignage:", error);
+                log("❌ Erreur lors du démarrage du surlignage:", error);
                 window.highlightingActive = false;
                 highlightingActive = false;
                 throw error;
@@ -243,14 +243,14 @@ browser.runtime.onMessage.addListener((message) => {
                 }
                 return true;
             } catch (error) {
-                console.error("❌ Erreur lors de l'arrêt du surlignage:", error);
+                log("❌ Erreur lors de l'arrêt du surlignage:", error);
                 throw error;
             }
         }
         
         // Mise à jour du cache des lexiques
         async function updateLexiconCache() {
-            console.log("📥 updateLexiconCache - Début avec context:", {
+            log("📥 updateLexiconCache - Début avec context:", {
                 authToken: !!window.authToken,
                 getAllLexiconWords: !!window.getAllLexiconWords,
                 activeLexiconIds: Array.from(activeLexiconIds)
@@ -297,7 +297,7 @@ browser.runtime.onMessage.addListener((message) => {
                     Object.fromEntries([...lexiconWordsCache.entries()].map(([id, words]) => [id, [...words]])));
                 return true;
             } catch (error) {
-                console.error("❌ Erreur dans updateLexiconCache:", {
+                log("❌ Erreur dans updateLexiconCache:", {
                     message: error.message,
                     stack: error.stack,
                     authTokenExists: !!window.authToken,
@@ -512,7 +512,7 @@ browser.runtime.onMessage.addListener((message) => {
                     await startHighlighting(lexiconId);
                 }
             } catch (error) {
-                console.error("❌ Erreur lors de la restauration de l'état:", error);
+                log("❌ Erreur lors de la restauration de l'état:", error);
                 window.highlightingActive = false;
                 highlightingActive = false;
             }
@@ -521,6 +521,6 @@ browser.runtime.onMessage.addListener((message) => {
         checkAndRestoreHighlightingState();
         
     } catch (error) {
-        console.error("🔴 Erreur critique dans l'IIFE:", error);
+        log("🔴 Erreur critique dans l'IIFE:", error);
     }
 })();
diff --git a/src/utils/logger.js b/src/utils/logger.js
index 1455361feaef60c3e4dc37181c95465cf3f13dbc..9828f273969a19ea77e758e8a30ca17ae84d36ba 100644
--- a/src/utils/logger.js
+++ b/src/utils/logger.js
@@ -5,7 +5,7 @@
 (function () {
   if (typeof window !== 'undefined') {
     if (typeof window.DEBUG === 'undefined') {
-      window.DEBUG = true; // ou false en production
+      window.DEBUG = false; // true en debug
     }
     if (!window.log) {
       function log(...args) {
@@ -17,7 +17,7 @@
     }
   } else if (typeof self !== 'undefined') {
     if (typeof self.DEBUG === 'undefined') {
-      self.DEBUG = true;
+      self.DEBUG = false; // true en debug
     }
     if (!self.log) {
       function log(...args) {
diff --git a/src/workers/pyodide_worker.js b/src/workers/pyodide_worker.js
index 45f9e7745dda83884b2d7a66b539e34e182bb15b..3e8458ee8f68dc9be5e0bc751f4d9c30c645974d 100644
--- a/src/workers/pyodide_worker.js
+++ b/src/workers/pyodide_worker.js
@@ -37,7 +37,7 @@ self.onmessage = async (event) => {
             await pyodide.loadPackage("micropip");
             pyodideLoaded = true;
         } catch (err) {
-          console.error("[Worker] Erreur lors de l'import de pyodide.js :", err);
+          log("[Worker] Erreur lors de l'import de pyodide.js :", err);
           self.postMessage({ type: "pyodide-simplemma", status: "error", message: err.toString() });
           return;
         }
@@ -77,7 +77,7 @@ await main()
       // Envoyer confirmation au background script
       self.postMessage({ type: "pyodide-simplemma", status: "success", message: "Pyodide et Simplemma chargés" });
     } catch (error) {
-      console.error("[Worker] Erreur lors du chargement de Pyodide ou Simplemma :", error);
+      log("[Worker] Erreur lors du chargement de Pyodide ou Simplemma :", error);
       self.postMessage({ type: "pyodide-simplemma", status: "error", message: error.toString() });
     }
   }
@@ -141,7 +141,7 @@ json.dumps({"lang": detected_lang, "frequencies": freq}, ensure_ascii=False)
         checkThreshold(detectedLang);
       }
     } catch (error) {
-      console.error("[Worker] Erreur dans l'analyse du texte :", error);
+      log("[Worker] Erreur dans l'analyse du texte :", error);
     }
   }