Patch release — LED/LCD display-correctness fixes + a per-device panel model.
LCD — portrait orientation now works end-to-end. Non-square panels mounted rotated showed squished/mis-rotated content. The render pipeline is orientation-driven from a single source: at 90°/270° the canvas composes portrait and content is not re-rotated (authored portrait, matching the Windows themeDirection model). Cloud backgrounds download per resolution and orientation (web/480854 vs web/854480), re-apply on rotation, and decode video at the oriented canvas — so a portrait cloud background fills the screen. Every cloud-asset command (themes/masks/backgrounds, save/export/import/upload) resolves the oriented catalog, so CLI and API match the GUI.
LED — control panel fixes. "Circulate" rotates through exactly the metric pages you toggle (was stuck on page 0); selecting a metric page reaches the device; effect modes (breathing/colour-cycle/rainbow/carousel) animate at full speed again; zone buttons render their images; selector buttons are labelled with their metric.
LED metrics no longer flicker — the value now updates once per refresh interval instead of re-sampling raw sensors ~7×/second.
Per-device panel model (LED + LCD), sourced from the Windows app and keyed on the handshake, shared by both GUI front-ends.
Plus tooling: audit_csharp extraction + button images for the 2.1.6 devices (LC10/LC13/LC15/LF014/LD11/RX1).
Full changelog: doc/CHANGELOG.md