v2.3.0
Added
- Self-hosted Google Fonts (closes #40) — Bebas Neue, Playfair Display, Inter, Anton, Monoton, and Oswald shipped as bundled woff2 files. Survives internet outages with zero CDN dependency.
- Per-section info panel toggles (closes #64) — independent visibility switches for title, subtitle, meta, summary, tech box, and player info. All default ON.
- HA WebSocket subscription + SSE push (closes #10) — server connects to HA's WebSocket API for real-time state changes. Browser falls back to 30s poll instead of 5s polling.
- Poster framing modes (closes #67), film-grain overlay (closes #27), Ken Burns pan (closes #22) — visual polish features.
Fixed
- Film-grain overlay always visible — CSS was missing
display: nonegate, now gated onbody.visual-film-grain - haWs.stop() never called on graceful shutdown — WebSocket connection leak on restart
- Cross-device config sync: posterFraming, filmGrain, kenBurns were never registered in the overlay store, causing setup UI saves to silently drop them. All 27 visual settings now persist server-side.
- Setup form now has controls for posterFraming, filmGrain, and kenBurns (were env-var only)
Changed
- No more Google Fonts external dependency at runtime — fonts shipped in add-on image