- Fix: chainState/chain used renamed var (jpxChainEnabled vs jpxChainStarted)
- Fix: jpxChainStart lazy-retries (10x/600ms) since jpx creates #ctrl-widget lazily
- Remove duplicate jpxChainStart definition
- HV.diag() now reports scripts.jpx + jpxBridge state for field diagnosis
- Listen for jpx_ctrlWidget_update (detail.active) — jpx's own state signal
- Re-trigger M when jpx reports inactive + monsters present + not battle over
- Fallback 2s poll in case the event is missed on page reload
- Cooldown guard (2.5s) to avoid double-trigger
- Stops on maxRounds / low HP / battle finish