โจ New Features
๐๏ธ Per-dashboard energy date pickers โ energy_collection_key
If you run several dashboards, each with its own energy-date-selection card using a collection_key, the card used to follow whichever collection it found first โ so every dashboard danced to the first dashboard's picker (#349). You can now bind a card to a specific picker:
energy_date_sync: true
energy_collection_key: energy_dashboard2 # same key as your energy-date-selection cardLeave it empty and the card follows the default collection, exactly as before.
๐ช Period comparison comes to State Timeline (#350)
The per-entity compare option now works in State Timeline mode. Each comparison renders as its own row directly under the main entity โ "Landing Motion (yesterday)" โ with the same state colors at reduced opacity, time-aligned so yesterday's 14:00 sits right under today's 14:00. Tooltips on the comparison row show the real historical time, clicking the legend hides main + comparison together, and periods beyond your recorder retention simply show an empty row. All the existing compare forms work: yesterday, last_week, previous_period, hours, or a list with periods_back.
chart_mode: state_timeline
entities:
- entity: binary_sensor.landing_motion
compare: yesterdayโฎ๏ธ Sequential comparison โ past and present side by side (#351)
The per-entity compare gains a second way of drawing: layout: sequential. Instead of overlaying the previous period on top of the live data, the X axis extends backward and the previous period is drawn at its real position โ past on the left (dashed), present on the right (solid), meeting in the middle as one continuous timeline. Great for "how did today follow from yesterday" reading rather than "today vs yesterday at the same hour".
entities:
- entity: sensor.temperature
compare:
period: previous_period
layout: sequentialA Layout dropdown on each comparison row in the editor switches between Overlay (default) and Sequential. It applies to previous_period on line/bar charts; tooltips show each half's real date and time, and brush zoom works across the whole extended axis. Existing compare configs are untouched โ overlay stays the default.
๐ -- instead of "unavailable" in the state row
An entity that is unavailable, unknown or has an empty state now shows a compact -- in the state row and legend instead of the long word, which used to stretch the row and break the card's alignment (#347). Entities whose state is genuinely a word (sunny, on, โฆ) still show that word, and the State Timeline still labels its bands as before.
๐ The Y axis now follows your zoom
Zooming into a chart (brush or pinch) now rescales the Y axis to the visible data, so small variations become readable instead of staying flattened against the full-range axis โ the behavior you know from every charting tool. Your hard bounds (lower_bound/upper_bound) and min_bound_range still win, and zooming back (double-click / double-tap) restores the full axis.
๐ Fixes & reliability
๐จ Fill gradients now follow the data's sign (#338)
4.00 fixed the fill gradient for invert: true series; this release completes the picture for naturally negative data (grid export, sub-zero temperaturesโฆ): the gradient is now strongest at the line and fades toward the X axis, exactly like positive series โ the direction is decided by where your values actually are, not by a config flag. As a side effect this also corrects the rare combination of invert: true on already-negative data (displayed positive), which was fading the wrong way. And series that cross zero now get a two-lobe gradient: strongest at the line on both sides, fading to transparent exactly at the zero axis โ so a mostly-negative chart with brief positive edges finally looks right too.
๐ Legend MIN/MAX no longer nonsensical for inverted series
With invert: true, the legend used to print the value magnitudes but with the roles reversed โ a sensor ranging 3โฆ10 showed MIN 10 / MAX 3. The legend now reports the sensor's actual range (MIN 3 / MAX 10), consistent with the state row; the chart itself is unchanged.
๐ Tiny bars are no longer invisible
A bar whose value was very small relative to the axis used to collapse to a sliver โ or below half a pixel, disappear entirely. Any non-zero value now draws a bar of at least 2px, anchored at the baseline, so you can always tell the three states apart: no bar (zero or no data), a 2px stub (a value, tiny at this scale), a normal bar. Zeros and gaps still draw nothing, and the tooltip shows the exact value as always.
๐ height: auto no longer shrinks after a reload
With height: auto and no grid_options (masonry layouts, or sections without a fixed row count), the card's height depended on how tall its container happened to be at load time โ fine when saved in the editor, smaller after F5. The card now uses its natural content height whenever no fixed row count exists, so it renders the same size every time; fill-to-container behavior is kept when grid_options.rows is a number.