{# @description The app sidebar: brand header, AppMenu, fixed footer. #}
{# @prop bg:text | default:"mvp-sidebar-bg" | description:"Background class, passed to the header and footer." #}
{# @prop brand-url:text | default:"/" | description:"URL the brand mark links to." #}
{# @prop class:text | description:"Extra classes on the sidebar root." #}
{# @prop menu:text | default:"" | description:"Menu name to render. Empty renders AppMenu (or the mounted app's menu) with no back link." #}
{# @prop :collapse:text | description:"How the sidebar collapses: icons for an icon rail, or the default drawer behaviour." #}
{# @prop :title:text | description:"Title text shown in the sidebar header." #}
{# @prop :boost:boolean | description:"Set hx-boost on the sidebar root so every link inside it — menu items, brand link, footer actions — navigates with htmx." #}
{# @slot:header — Replaces the top strip: brand icon, title, collapse toggle. #}
{# @slot:body — Replaces the scrolling middle: the back link for a mounted app, then the menu. #}
{# @slot:footer — Replaces the fixed bottom strip: user menu or log-in, theme, language. #}
{% load flex_menu %}
{# The slots are declared so that an unfilled one is empty, rather than a #}
{# page variable that happens to be called `header`, `body` or `footer`. #}