{% load static mvp %} {% 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 %} {% endblock app.sidebar %} {% block app.header %} {% block app.header.widgets %} {% endblock app.header.widgets %} {% block app.header.tray %} {% endblock app.header.tray %} {% endblock app.header %} {% block app.main %} {% block content %} {% endblock content %} {% endblock app.main %} {% block app.footer %} {% endblock app.footer %} {% endblock app %} {% block extra_js %} {% endblock extra_js %}