Detail view for a single catalogue, with infinite-scroll paging over its categories and items.
A single InfiniteScroll sentinel at the page bottom drives loading.
The cursor walks categories in display order: it fills the current
category's card up to @per_page items at a time, then advances to
the next category, then finally pages through uncategorized items.
Each load_more event loads exactly one batch — the user can keep
scrolling to stream through catalogues with thousands of items
without a single blocking query.