Adopts the weather-display pattern: .env file parsed by tools/load_env.py
and injected as -D compiler flags. WIFI_NETWORKS uses "SSID:password" format.
ESP32 now sends a heartbeat POST after each display update so the server
can track frame status for the HA integration.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>