Root cause of the Home screen dial rendering tiny and pinned to the
top-left, confirmed via isolated test compile and direct inspection
of generated C++: an explicit main: sub-block on an LVGL arc widget
silently suppresses the implicit top-level MAIN-part style properties
(align, width, height, x, y) instead of merging with them. All three
arcs (dial_bg_arc, heat_arc, cool_arc) used a main: block for
arc_color/arc_width/arc_opa, which wiped out their align/width/height
in the exact same commit that set them (my earlier size/wrapper fix
never had a chance to take effect).
Verified via a standalone test config: an arc with main: nesting
generates zero lv_obj_set_style_width/height/align calls; the
identical arc with the same properties flattened to top-level
generates them correctly. indicator:/knob: are unaffected since those
are genuinely separate LVGL parts that require explicit nesting.
Two bugs found on first hardware test:
1. page_home placed all widgets directly on the page with no sized
wrapper container, unlike every other page in this codebase (which
all wrap content in an explicit width/height obj before using
align:). The dial and its siblings rendered tiny and pinned to the
top-left instead of filling/centering on the real 1024x600 screen.
Wrapped all of page_home's content in a width:100%/height:100% obj,
matching the established pattern.
2. heat_arc and cool_arc were both adjustable:true at the identical
400x400 size, so their rings occupied the same physical pixels.
LVGL hit-tests arcs by distance from center, so a shared radius is
touch-ambiguous, and the topmost widget (cool_arc, declared last)
won every touch regardless of where on the ring you tapped. Shrunk
cool_arc to 360x360 so the two rings are physically distinguishable
by touch position.
The dual-arc setpoint dial uses a Fahrenheit-range scale (60-90) to
match the Lennox reference UI, but climate.control expects Celsius
throughout this codebase. Dragging the dial was sending raw
Fahrenheit values straight into target_temperature_low/high, which
would have commanded wildly wrong setpoints on live hardware.
Also fixes a stale comment pointing at the wrong file after the
panel.yaml extraction.