{% extends "base.html" %} {# The site's config file, editable (ยง13.1, P3.4). A plain form, posting to itself. No `hx-post` and no fetch: this page is the last resort when something is wrong with the site, which is exactly when a vendored script failing to load must not be what stands between the operator and the fix. The range chips set the precedent in P4.1 โ€” a real control, working without scripting. #} {% block title %}Config โ€” Mesopic{% endblock %} {% block heading %}mesopic.yaml{% endblock %} {% block subtitle %} The file is the authority: the store's tables and the running geometry are compiled from it. Saving validates the whole document first, so a config that would not start cannot land. {% endblock %} {% block content %}
{% if error %} {# The P2.1 message, shown rather than swallowed: it names the failing key path and never the value under it, which is what makes it safe on a page. #} {% elif stale %} {% elif saved %}

Saved. {%- if restart %} Geometry and budgets are live. Not until the next restart: {{ restart | join(", ") }}. {%- else %} The running engine has adopted it. {%- endif %}

{% endif %}
{# The consequence said before the click, as on the calibration page. #}

Saving reloads geometry immediately: everyone standing in a zone right now is counted out and re-enters, so dwell and occupancy will show a break. Sources, exporters and storage are read when the engine starts and need a restart.

{% endblock %}