{# The document title mixes the project name with the tool name; the tool
name is identical in every supported locale and the rest is user data,
so the title needs no runtime switch. #}
{% block title %}{{ project_name }} · {{ t("site.tool") }}{% endblock %}
{# Locale boot (V0.1.2): apply a stored browser language preference before
first paint, so the zh-CN line-height and the raw-enum chips render in
the reader's locale immediately. Presentation only — it reads one
localStorage key (same key app.js uses) and never writes anything.
The tiny locale list is validated again by app.js against the payload. #}
{{ t("site.skip") }}
{{ project_name }}
{# Global utility layer, right of the topbar. The order is fixed:
Overview, then the language selector (V0.1.2 final polish §1/§3).
Both controls share one visual weight class — global navigation,
never the page's primary action, which stays Copy Context. #}
{{ t("site.dashboard") }}
{# Runtime language switch (V0.1.2 LANG-D1). Hidden until app.js runs:
without JavaScript the page stays complete in its build locale and
the control would do nothing. Button labels are endonyms ("中文",
"English") and are never translated. #}
{% block content %}{% endblock %}
{# Single translation source (V0.1.2 §5): the Python dictionaries from
planning_control_plane.i18n, serialized once per page. app.js reads this
at runtime; there is no second translation table in JavaScript. #}