{% load lucide static ui %} {% comment %} The page skeleton, with no branding of its own. `_platform_base.html` dresses it as RosterChief, `_club_base.html` as a club; the `branding` context processor picks between them per tenant. {% endcomment %} {% block title %}RosterChief{% endblock title %} {% comment %} Apply the stored theme before first paint, otherwise the page flashes the wrong colours. Nothing stored means "auto": we set no attribute at all, so daisyUI's `dark --prefersdark` follows the OS. {% endcomment %} {# After the stylesheet: brand overrides (logo urls, club colours) must win. #} {% block extra %}{% endblock extra %} {% comment %} An app shell: the viewport is the frame, and exactly one region scrolls. The body is a flex column pinned to the screen height with overflow hidden, so the navbar and the sidebar cannot be scrolled away — only
moves. Leave the body scrollable instead and a "sticky" sidebar still drifts on a long page, which is the thing this is for. {% endcomment %}
{% comment %} The sidebar is a sibling of
, not inside it, so it sits outside the one scrolling region and stays put by construction. Pages with no menu (the auth screens) leave the block empty and
simply takes the full width. {% endcomment %} {% block menu %}{% endblock menu %}
{% if messages %}
{% for message in messages %} {% with alert=message|as_alert %} {% endwith %} {% endfor %}
{% endif %} {% block main %}{% endblock main %}
{% comment %} allauth puts page-level scripts and out-of-form markup here — notably the hidden `mfa_login` form the passkey button submits. Without this block that form is never rendered and "Sign in with a passkey" is a dead button. {% endcomment %} {% block extra_body %}{% endblock extra_body %}