- NEW: shared/constants.js — single source of truth for all config
- NEW: shared/hash.js — single FNV-1a hash (was duplicated 3x)
- SIMPLIFIED: analysis-controller.js (320→131 lines)
- Removed: cache, retry, timeout, AbortController
- Kept: debounce (2-tier), validate, sendMessage
- SIMPLIFIED: background.js (248→170 lines)
- Uses importScripts for constants + hash
- Version from chrome.runtime.getManifest()
- No hardcoded API URL
- SIMPLIFIED: content-inline.js (638→392 lines)
- Removed BayanState dependency (inline local vars)
- Overlay-only rendering for ALL fields (no innerHTML on user content)
- Fixed listener tracking leak (F10)
- FIXED: config.js derives from BAYAN constants, no hardcoded version
- FIXED: manifest.json
- Removed dead content.js
- Removed bayan-state.js from content_scripts
- Added minimum_chrome_version: 114
- Changed matches to https/http only (was <all_urls>)
- Version bumped to 2.1.0
- Updated popup.html + sidepanel.html script load …