{% block head %}
{% block head.title %}{% block title %}
{% endblock title %}{% if mounted_app %} | {{ mounted_app.name }}{% endif %}{% endblock head.title %}
| {% firstof mvp_config.site_name request.site.name %}
{% comment %}
Two links, not one merged file: the light/dark SVGs would go stale
if merged. The light link is unconditional as well as media-scoped,
so a browser that ignores `media` on an icon still gets one.
{% endcomment %}
{% if mvp_config.pwa %}{% include "mvp/pwa/head.html" %}{% endif %}
{% block styles %}
{% endblock styles %}
{% comment %}
Bundled and shipped with the package rather than fetched at page
load, so the UI does not depend on a third party staying up. Add
your own Alpine plugins or htmx extensions by extending `head`.
{% endcomment %}
{% comment %}
Conditional hide based on the applied theme. Keyed off the configured
pair rather than the literal names "light" and "dark", so a project
that sets its own two themes keeps these hooks working.
{% endcomment %}
{% endblock head %}
{% comment %}
Declared outside the app shell, in normal document flow, so filled
content scrolls away with the page while `app.header` keeps pinning
independently — an announcement bar above a sticky navbar (#244).
{% endcomment %}
{% block announcement %}
{% endblock announcement %}
{% block app %}
{% comment %}
Resolved once here so every region agrees. A page overrides by
setting `breakpoint`/`collapse` in context (or a `{% with %}`
wrapping `{{ block.super }}`) — drawer, rail and toggle all follow.
{% endcomment %}
{% firstof breakpoint mvp_config.layout.sidebar.breakpoint as breakpoint %}
{% firstof collapse mvp_config.layout.sidebar.collapse as collapse %}
{% block app.sidebar %}
{% comment %}
A region block left empty draws the component's own default.
Fill one and its content replaces that region outright.
{% endcomment %}
{% block app.sidebar.header %}
{% endblock app.sidebar.header %}
{% block app.sidebar.body %}
{% endblock app.sidebar.body %}
{% block app.sidebar.footer %}
{% endblock app.sidebar.footer %}
{% endblock app.sidebar %}
{% block app.header %}
{% block app.navbar %}
{% block app.navbar.start %}
{% endblock app.navbar.start %}
{% block app.breadcrumbs %}
{% endblock app.breadcrumbs %}
{% block app.navbar.center %}
{% endblock app.navbar.center %}
{% block app.navbar.end %}
{% endblock app.navbar.end %}
{% endblock app.navbar %}
{% block app.header.tray %}
{% endblock app.header.tray %}
{% endblock app.header %}
{% block app.main %}
{% block content %}
{% endblock content %}
{% block app.messages %}
{% endblock app.messages %}
{% endblock app.main %}
{% block app.footer %}
{% endblock app.footer %}
{% block app.dock %}
{% endblock app.dock %}
{% endblock app %}
{% block extra_js %}
{% endblock extra_js %}