{# `data-fcu-auth` fingerprints the session this shell (navbar user menu, sidebar) was rendered for. Fragment responses carry the same value in the X-Construct-Auth header; construct-core.js reloads the document when they diverge, since a partial swap can never bring the shell back in sync. #} {# Varies per page (construct.page_title folds in the active view's name), so navigating between list/create/edit changes the document title. #} {% block title %}{{ construct.page_title }}{% endblock %} {% if construct.icon_mode == "bootstrap" %} {% else %} {% endif %} {% if construct.design_stylesheet %} {% endif %} {# Application stylesheets (FlaskConstructUI(stylesheets=…) / add_stylesheet). Linked after everything the library owns so app rules and --fcu-* overrides win the cascade. #} {% for href in construct.stylesheets or [] %} {% endfor %} {% block head_extra %}{% endblock %} {# First focusable element on the page: lets a keyboard user jump the sidebar (which can be 20+ links) straight to content. Visible only while focused. #} {{ construct.t("nav-skip-to-content") }}
{% block navbar %} {{ construct.title }} {% endblock navbar %}
{% block sidebar %} {% endblock sidebar %}
{% include "style/_flashes.html" %} {# Every page needs exactly one

. Templates that render their own visible heading override this block to empty (the CRUD views do); component pages, whose content the library does not compose, get this visually-hidden default. #} {% block page_heading %}

{{ construct.page_heading }}

{% endblock %} {% block content %} {% endblock %}