{% comment %} The grid, and the only region any media interaction swaps. `mediaChanged from:body` is the refresh contract: every mutating view returns a 204 carrying that event (apps/common/htmx.py's toast_response), so a delete or a move re-renders the grid without the view needing to know anything about the page it is rendered on. {% endcomment %} {% load media_library %} {% comment %} `@container`: the columns below size against THIS element rather than the viewport. The grid shares its row with a folder rail and a detail panel, and the page now renders inside the settings column too, so the viewport says very little about how much room the cards actually have — at a 1300px window the grid gets 532px, and a viewport-keyed `xl:grid-cols-4` drew four 124px cards in it. Declared here rather than on the page, so the picker this markup is meant to serve elsewhere (see the note on the thumbnail below) gets the right columns wherever it is mounted. {% endcomment %}
{% if query %}Nothing matches “{{ query }}”.{% else %}No media here yet.{% endif %}
{% if query %}Try a shorter word, or clear the filter.{% else %}Drop a picture or a file above and it is ready to use in any flow, broadcast or email.{% endif %}