Replaced all 31 innerHTML assignments across popup.js (12),
options.js (17), and content.js (3) to pass Mozilla AMO linter.
Each file gets a safeHTML(el, html) helper:
- popup.js/options.js: DOMParser-based (extension page context)
- content.js: <template> element pattern (page world context)
Empty innerHTML clears replaced with el.replaceChildren().
innerHTML += replaced with createElement + safeHTML + appendChild.
All event listener bindings after HTML rebuilds remain functional
since safeHTML uses replaceChildren() which populates DOM
synchronously before querySelectorAll + addEventListener calls.
https://claude.ai/code/session_01SWSwDfMVij53bCTNSCLMwn