Avant : renderConfirm() échappait le résumé et l'extrait avec escapeHtml(),
donc les **gras**, *italique*, [liens](), listes, titres du Markdown
produit par l'IA s'affichaient en texte brut (littéral « **gras** »).
Maintenant : renderMarkdownSafe() parse le Markdown en HTML limité
et sûr (escapeHtml d'abord, puis regex sur le texte échappé — pas de
HTML brut autorisé).
+ Refonte du panneau de prévisualisation :
- .preview-block avec header sticky (label Résumé / Extrait)
- .excerpt-block : min-height 180px, max-height 360px, scroll si long
- .summary-block : fond bleuté léger, bordure gauche sky
- markdown-h3/h4/h5 stylés (serif pour titres), strong/em/code/ul/a
- Polices 14px, line-height 1.7, word-break pour texte long
+ Nouvelle clé i18n summaryLabel dans les 15 locales.
+ Version 0.4.2 → 0.4.3.
Bannière pick mode :
- ensureContentScript() : retry le PING 8x (avec backoff 80→290ms) après
chrome.scripting.executeScript, parce que l'injection est async côté page
et le listener n'est pas enregistré immédiatement.
- Avant : SET_PICK_MODE partait dans le vide, la bannière « surlignez le
texte à clipper » n'apparaissait jamais.
Responsive :
- Media queries : <380px (Chrome Side Panel narrow), 380-420px (default),
>420px (Firefox sidebar), <320px (very small).
- Padding/margin/font-size adaptatifs selon la largeur du panneau.
- .selection-body : min-height 80px, plus de max-height fixe, scroll si
trop long. overflow-wrap: anywhere pour le texte long.
- .btn : padding 16px / min-height 48px pour le tactile.
- .page-card : word-break + overflow-wrap pour les URLs et titres longs.
- Firefox : media query dédié >480px pour aérer la sidebar Firefox
(plus large que Chrome Side Panel).
Rebuilt :
- memento-web-clipper-chrome-store.zip
- memento-web-clipper-firefox.xpi
Livre US-FLASHCARDS avec decks, session de révision, stats et migration Prisma. Finalise le Web Clipper (i18n 15 langues) et corrige les erreurs ESLint bloquant la CI.
Co-authored-by: Cursor <cursoragent@cursor.com>