Structural cleanup based on thermo-nuclear code quality review:
- Extract shared color-picker.css and color-popover.css from badges.css (611→85 lines)
- Extract shared lib/presets.js for preset CRUD used by popup and popover
- Unify dark mode to single applyDarkModeClass on <html>, removing 4 scattered functions
- Fix stale closure in startPostObserver, data-driven reload key check
- Remove dead exports, getHelpers wrapper, duplicated colorToHex
- Replace DOM expando properties with state array in popup.js
Net: -318 lines of duplication, no file over 401 lines.
Co-authored-by: Cursor <cursoragent@cursor.com>
saveSettings() writes all keys including 'enabled', which triggered
the storage.onChanged reload check even when enabled didn't actually
change. Compare oldValue vs newValue so the reload only fires when
the enabled state genuinely toggles.
Co-authored-by: Cursor <cursoragent@cursor.com>