{# 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. #}
{{ 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. #}