- Panel is mounted sideways: render landscape (600x400), rotate to the
panel's native portrait orientation right before writing to hardware.
- Web UI: card-based layout, dark mode, active nav highlighting, save
confirmation toasts, error banners.
- Rotation: separate enabled/disabled toggle (off pins to the first screen
in the list) and the interval is now in minutes instead of raw seconds.
Migrates existing config.json from the old interval_seconds field.
- Weather: type a city name instead of hunting down coordinates, resolved
via Open-Meteo's free geocoding API. Manual lat/long still available as
a fallback.
Was importing 'waveshare_epd' as a top-level package, but it's nested
under display/waveshare_epd/ -- caused ModuleNotFoundError on the Pi
since only display/ is on sys.path via main.py's imports, not
display/waveshare_epd/ itself. Verified the corrected import resolves
by exercising it directly; the only error left is the driver's own
platform check falling through to its Jetson Nano path on this non-Pi
dev machine, which is expected here and won't happen on the real
Raspberry Pi (it checks /proc/cpuinfo for "Raspberry").