* Pin status legends to the bottom of the page (match MacTrack)
Wrap the thold, host and log legend renders in the same fixed-position footer container MacTrack uses, so the legend stays pinned to the bottom of the viewport instead of scrolling away with the list.
* Use a CSS class for the legend footer instead of inline styles
Replace the inline fixed-position wrapper around the status legend with a
plugin-specific *LegendFooter class defined in the plugin's stylesheet. The
class lays the legend out as a centered footer in normal document flow, so it
no longer sits outside flow and overlay the final rows, pagination, or action
controls at the bottom of the page.
---------
Co-authored-by: TheWitness <1439914+TheWitness@users.noreply.github.com>
The legend chips carry both the new .tholdLegendItem class and a legacy
state class (.tholdAlert, .deviceUpFull, etc.) that still declares a fixed
width (14%/11.11%). The grid rule never set a width, so that legacy width
leaked onto the grid items: chips did not stretch to fill their cell and
long labels overflowed the coloured box. Give .tholdLegendItem
width:100% + box-sizing:border-box + min-width:0 so each chip fills its
grid track, keeping the label centred inside the colour boundary.
* thold: keep legend chips equal width using the longest label
The Thold/Host/Log status legends used flex:1 1 0 with no shared minimum, so chips grew to unequal widths (and could clip their labels when tight). CSS can't measure the widest sibling, so the three legend renderers now compute the longest label and emit it as a --thold-chip-min CSS variable (calc(<longest>ch + 1.5rem)); every theme's .tholdLegendItem uses it as a shared min-width (falling back to max-content). All chips share one minimum, so they stay equal width as the legend wraps. Updated TholdLegendTest assertions to match the new container markup.
* thold: use CSS Grid for truly equal-width legend chips; assert exact chip min
Review follow-up (#847). The flex: 1 1 0 + flex-wrap layout distributes free space per wrapped line, so a partial last row stretched its chips wider than full rows - chips were not equal across rows. Switch .tholdLegend to a grid (repeat(auto-fill, minmax(var(--thold-chip-min), 1fr))) so every chip shares an equal column across all rows. The longest-label seed still drives the column minimum. Tests now assert the exact computed calc(Nch + 1.5rem) value instead of mere presence.
* thold: use auto-fit so chips fill the legend width when they fit on one row
Review follow-up: auto-fill keeps empty implicit tracks, so on a wide viewport where all chips fit in one row they no longer stretch to fill the legend (as they did under flex). auto-fit collapses the empty tracks while still sharing equal columns when the legend wraps to multiple rows.
* thold: escape status-legend chip labels at output
Defence-in-depth: wrap the legend chip display text in html_escape() so markup or HTML entities in a translated label cannot alter the legend DOM. Applied consistently across the thold/monitor/servcheck/mactrack/syslog fleet legends. The chip-min sizing still measures the unescaped label length, so layout is unchanged.