{# Host card (B5, enriched Stage F, compacted Stage G). The single home for host resources now that the status-header tiles are gone. Stage G levels this card's height against its three neighbours (VMware, Runners, Cargo cache): the four near-static identity facts pair up onto two rows, uptime moves to the header bar, and the load average becomes the CPU gauge's sub-line -- the same shape the disk row already used for "GB free". Eleven rows became five, for the same data. Health is not color-only, but the level word (ok / elevated / critical / unknown, from ``_resource_levels``) is no longer drawn as a strip under each gauge -- it rides the gauge's ``aria-label`` instead. What a sighted viewer reads is the number: "42%", "20.0 / 62 GB", "40%" are stated in text next to every bar, so nothing here depends on distinguishing the fill colour. #}

Host {# Spelled out, not "up": the header has no
to label it. #} {% if resources %}uptime {{ resources.uptime_sec | duration }}{% endif %}

{% if resources %}
System
{{ resources.hostname or "-" }} · {{ resources.kernel or "-" }}
{# The raw model name is ~40 chars and wraps to three lines in a quarter- width track, which is exactly the height this card is trying to lose -- so it is trimmed, with the untouched name on the title. #}
CPU
{{ resources.cpu_model | cpu_short or "-" }} · {{ resources.ncpu }} cores
CPU load
{{ "%.0f"|format(resources.cpu_pct) }}% {{ "%.2f"|format(resources.load1) }} / {{ "%.2f"|format(resources.load5) }} / {{ "%.2f"|format(resources.load15) }}
Memory
{{ "%.1f"|format(resources.mem_used_gb) }} / {{ "%.0f"|format(resources.mem_total_gb) }} GB
Disk
{% if disk %} {{ "%.0f"|format(disk.used_pct) }}% {{ "%.0f"|format(disk.free_gb) }} GB free {% else %} {# No gauge to hang the level on, so the word is the value itself -- a bare dash would read as "no disk", not "could not be measured". #} {{ levels.disk_label }} {% endif %}
{% else %} {% endif %}