64c1e4c8e5
_bindItemEvents attached direct click listeners to the favorite star, the shared badge and every custom action button of every row — ~3+ listeners per row on top of the container delegation the component already wires, i.e. ~10-15k listeners with a few thousand rows loaded via load-more, plus the per-row binding cost on every render. The container's delegated click handler already dispatches by closest() checks; move the three button behaviours there (they return before the card-open branch, preserving the old stopPropagation semantics) and drop _bindItemEvents entirely. Row creation is now pure innerHTML — no listener allocation per row. https://claude.ai/code/session_01Dp3oWon5GBMVn4j3QXZdgx