From e61f9cd1da103efe67461ea950e986e81dc231db Mon Sep 17 00:00:00 2001 From: decarvalhoe Date: Thu, 2 Jul 2026 16:18:42 +0200 Subject: [PATCH] feat(security): CSP stricte + durcissement du site statique (E10-5, #166) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CSP stricte SANS 'unsafe-inline', active via et vérifiée en CI. Débloquée par l'extraction des styles inline (#163). - index.html : script de pré-peinture du thème externalisé (src/theme-init.js), bloc + - +

MemoForge

diff --git a/src/theme-init.js b/src/theme-init.js new file mode 100644 index 0000000..1312e09 --- /dev/null +++ b/src/theme-init.js @@ -0,0 +1,7 @@ +// Applique le thème sauvegardé AVANT le premier paint (évite le flash de couleur). +// Externalisé de index.html pour permettre une CSP stricte (script-src 'self', sans +// 'unsafe-inline'). Script classique et bloquant dans → s'exécute avant le rendu. +try { + if (localStorage.getItem('memoforge.theme') === 'light') + document.documentElement.classList.add('theme-light'); +} catch { /* localStorage indisponible : on garde le thème par défaut */ } diff --git a/styles/main.css b/styles/main.css index 296685a..6cd60fd 100644 --- a/styles/main.css +++ b/styles/main.css @@ -152,6 +152,19 @@ button:hover { border-color: var(--accent); color: var(--accent); } .star-off { color: var(--text-muted); opacity: .6; } .verdict .btn-primary { margin-top: var(--sp-3); } +/* Boutons flottants langue/thème (déplacés de l'inline