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.