{# Rendered through flashes() (flask_construct_ui/flashes.py), once per request: by the layout, or wherever the page placed it. The wrapper is always present, even with nothing in it. aria-live sits on it, not role="alert" per message, so messages that land in it via a fragment swap are announced; `assertive` only for errors — a success confirmation should not interrupt the reader. It is up-hungry so a swap that targets a narrower fragment still delivers this request's messages, which get_flashed_messages() has already taken out of the session; core.js keeps what is on screen when the response brings nothing new. #} {% with messages = get_flashed_messages(with_categories=true) %}