{# Pipeline steps region — v0.61.56 (#890). Sequential-stage workflow visualisation: a row of stage cards with arrow connectors between them. Each card carries a kicker (label), a headline number (aggregate value), and optional caption. Mobile: stacks vertically, connectors become vertical chevrons. Stage values resolved server-side (one count per stage). Stages without a value (or with unsupported aggregates like median, or under denied scope) render `—`. v0.61.78 (#911) added per-stage `progress:` (0-100). When set, a thin progress track + percent label sit beneath the headline value so the operator sees how complete the stage is, not just how many rows are in it. `data-dz-progress="74"` carries the bound value for theming; `data-dz-progress-overshoot="true"` flags clamped values >100 so themes can surface "over capacity" visually. Card safety: region emits zero chrome + zero title. The dashboard slot owns both via region_card. #} {# v0.62 CSS refactor: inline Tailwind on every .dz-pipeline-* element moved to its CSS rule in components/fragments.css. The class-name markers were already in place; only the parallel utility list was removed. Responsive behaviour (stack =md) now keyed off a 48rem @media breakpoint inside each rule. #} {% from 'macros/region_wrapper.html' import region_card %} {% call region_card(title) %}
{% if pipeline_stage_data and pipeline_stage_data | length > 0 %}
    {% for stage in pipeline_stage_data %}
  1. {{ stage.label }} {% if stage.value is not none %}{{ stage.value }}{% else %}—{% endif %} {% if stage.caption %} {{ stage.caption }} {% endif %} {# Progress bar (#911) — track + fill + percent label. Renders only when `progress:` resolved to a number (None means the field was omitted, unparseable, or under denied scope for an aggregate). The fill width is set inline so themes don't need to touch the rule; tone styling can key off `data-dz-progress` thresholds (e.g. >=100 = success). `data-dz-progress-overshoot` flags values that were clamped from >100 so themes can surface "over capacity". #} {% if stage.progress is not none %}
    {{ stage.progress }}%
    {% endif %} {# Connector — sits to the right (desktop) or below (mobile) of every stage except the last. Pure CSS / SVG triangle, design token colour. Hidden on the last stage via :last-child. #} {% if not loop.last %} {% endif %}
  2. {% endfor %}
{% else %}

{{ empty_message | default("No pipeline data available.") }}

{% endif %}
{% endcall %}