Shared TypeScript source with separate manifests and webpack configs. Firefox uses background scripts (not service workers) so WASM loading uses dynamic import instead of initSync. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>