{# Experience flow content — step progress + inner surface Contract: ~/.claude/skills/ux-architect/components/experience-shell.md (UX-072) v0.62 CSS refactor: inline Tailwind → semantic .dz-experience-* / .dz-steps-* family (components/fragments.css) and .dz-button primitives for the form submit. Step state tone now driven by .is-completed / .is-current modifier classes on the
  • rather than per-element class ternaries. #} {% from 'macros/form_field.html' import render_field %} {% from 'macros/experience_transition.html' import experience_transition_button %}
    {# Title #}

    {{ experience.title }}

    {# Progress indicator — reuses the existing .dz-steps / .dz-steps-circle family from fragments/steps_indicator.html. `.is-completed` marker applies to both completed AND current steps so they share the brand fill (matches the steps_indicator position-based convention). #} {% if experience.steps | length > 1 %}
      {% for step in experience.steps %}
    1. {{ loop.index }} {{ step.title }}
      {% if not loop.last %}
      {% endif %}
    2. {% endfor %}
    {% endif %} {# Step content #}
    {% if experience.page_context %} {% set ctx = experience.page_context %} {# Form step: render the form with action rewritten to experience endpoint #} {% if ctx.form %}
    {% include 'fragments/form_errors.html' %}
    {% if ctx.form.sections %} {# Wizard sections within a step #} {% include 'fragments/form_stepper.html' with context %} {% for section in ctx.form.sections %}

    {{ section.title }}

    {% for field in section.fields %} {{ render_field(field, ctx.form.initial_values) }} {% endfor %}
    {% endfor %} {% else %} {% for field in ctx.form.fields %} {{ render_field(field, ctx.form.initial_values) }} {% endfor %} {% endif %} {# Form submit + navigation buttons #}
    {% for tr in experience.transitions %} {% if tr.event != 'success' %} {{ experience_transition_button(tr) }} {% endif %} {% endfor %}
    {# Detail/view step #} {% elif ctx.detail %} {% include 'components/detail_view.html' %} {# Transition buttons — hx-post picks up CSRF header via base.html htmx:configRequest listener. #} {% if experience.transitions %}
    {% for tr in experience.transitions %} {{ experience_transition_button(tr) }} {% endfor %}
    {% endif %} {# Table/list step #} {% elif ctx.table %} {% include 'components/filterable_table.html' %} {% if experience.transitions %}
    {% for tr in experience.transitions %} {{ experience_transition_button(tr) }} {% endfor %}
    {% endif %} {% else %} {% if experience.transitions %}
    {% for tr in experience.transitions %} {{ experience_transition_button(tr) }} {% endfor %}
    {% endif %} {% endif %} {% else %} {# Non-surface step (process/integration) — placeholder #}
    Step in progress

    This step is being processed. Please wait or continue.

    {% if experience.transitions %}
    {% for tr in experience.transitions %} {{ experience_transition_button(tr) }} {% endfor %}
    {% endif %} {% endif %}