fix: voice caption ordering, background audio, image persistence
- Voice captions send voice first (sets [PAILot:voice] reply channel)
- iOS background audio mode for playback through screen lock
- Images persist across app restarts (no longer stripped on save)
- Voice messages without audio downgraded to text on load
- Caption dialog rewritten with proper mic button and recording states
- Image captions displayed below thumbnails in chat bubbles
- WoL sends to subnet broadcast derived from localHost
- lastSeq loaded before connect to prevent catch-up replay
- Fixed ping format (JSON instead of raw string)
- All commands use proper gateway format