{% load static i18n lucide %} {% comment %} App shell for Member mode (M1-M7) -- design_handoff_rosterchief_platform/README.md. Standalone, like management/base.html and controlpanel/base.html: its own stylesheet (assets/mobile.css), no daisyUI, no shared nav. Mobile-first, viewport-fit=cover + env(safe-area-inset-*) throughout (see mobile.css's own file banner) rather than the iOS bezel in the design canvas, which is presentation-only. The Coach/Member role switcher renders once has_coach_access is true (an account with >=1 current-season staff assignment -- mobile/mixins.py's PersonScopeMixin) -- Coach mode (C1-C6, mobile/coach_views.py) is being built out screen by screen; only what's actually shipped is linked to. hx-boost="true" on
: every same-shell link/form becomes an AJAX navigation (swapping 's children, pushing the URL) instead of a full browser reload -- the SPA-like feel without an SPA. Only 's *children* swap, not the tag itself, so anything that crosses into the differently-styled Coach shell (coach/base.html: bg-ink vs this page's bg-paper, its own hx-headers/data attrs) is marked hx-boost="false" to force a real navigation instead -- a boosted cross-shell swap would leave the OLD shell's class/attributes in place under the NEW shell's content. See coach/base.html's own comment for the same rule mirrored the other direction. The page itself scrolls (body/document), not a boxed-in