{# v8.0.0a3: canonical empty-state partial. The same 3-part layout for every "nothing yet" surface in the dashboard so operators see a consistent affordance: headline + one-line explanation + optional CTA. Reduces cognitive load and makes adding a new empty state cheap. Usage (Jinja `with` block): {% include "_partials/_empty_state.html" %} Surrounding scope must define: - es_headline (str) — one-line summary - es_body (str) — secondary explanation - es_cta_label (str) — optional button text - es_cta_action (str) — optional Alpine `@click=` payload - es_cta_href (str) — optional `` instead of button Usage (Alpine slot — render inline without Jinja `with`): If you want a per-section empty state defined inline, copy this markup directly. The partial-include pattern works best when the empty state is reused across templates. #}

{{ es_headline }}

{{ es_body }}

{% if es_cta_action %} {% elif es_cta_href %}
{{ es_cta_label }} {% endif %}