{# Server-rendered guided-tutorial banner (issue #3, slice 6). Rendered in base.html ABOVE {% block body %} — i.e. OUTSIDE the workbench's
htmx target — so decision/enroll fragment swaps never clobber it. It appears only when the API layer put a `tutorial` dict in the context, which it does exclusively for the real tutorial run on the step's bound page. The banner is data-driven: the resolver sets whichever action fields this step needs (a next-link, a claim form, or the export + finish controls). #}

{% if tutorial.n %}Guided tutorial · step {{ tutorial.n }} of {{ tutorial.total }} {% else %}Guided tutorial{% endif %}

{{ tutorial.title }}

{{ tutorial.body }}

{% if tutorial.claim_run_id %} {# REVIEW step (and ADJUDICATE with no live claim): claim THIS exact run and continue into the workbench — works whether or not the run is still in the queue, so a replayed (already-resolved) run is still reachable. Continuation into `adjudicate` mode is keyed on run identity in the claim route, so this button and the ordinary queue/workbench claim buttons behave identically. #}
{% endif %} {% if tutorial.export_href %} {# EXPORT step: open the plaintext transcript in a new tab (the claim token is never placed in this URL), then finish the tutorial via an explicit POST. #} Export transcript ↗
{% endif %} {% if tutorial.next_href %} {{ tutorial.next_label }} {% endif %}