{% set ap = active_project(request) %}

UmbraAudio logo UmbraAudio Review Active project: {{ ap.name }} {# Spec 30 MOCKUP: the language selector is a page that opts in by overriding this block, rather than base.html rendering a global control from context that most pages do not pass. An earlier version keyed off a `languages` variable here, which produced an empty 38px dropdown with zero options on every page that did not supply it - i.e. most of them. #} {% block header_extra %}{% endblock %}

{# Spec 30: pages override header_extra to place the language selector. It has its own row rather than sitting inside the h1 flex row, which cannot fit a long project name plus a 10-item dropdown before the dropdown is pushed past the right edge. #} {% block header_bar %}{% endblock %} {% set vm = voice_maintenance() %} {% if vm %}
⚠ Voice re-generation unavailable — {{ vm.reason }} Voice generation will fall back to Edge-TTS (loses raspy/texture) until the run finishes.
{% endif %} {% block content %}{% endblock %}