diff --git a/webui/static/shell-bridge.js b/webui/static/shell-bridge.js index 1f93f2c3..6263b6c8 100644 --- a/webui/static/shell-bridge.js +++ b/webui/static/shell-bridge.js @@ -211,6 +211,11 @@ function _handleShellLinkClick(event) { if (!anchor || (anchor.target && anchor.target !== '_self')) return; if (anchor.hasAttribute('download')) return; + // In-card controls (source/watchlist badges, etc.) handle their OWN click — don't let + // this capture-phase handler hijack it into the surrounding card's navigation. Their + // bubble-phase handlers preventDefault, but that runs after capture, so we opt out here. + if (event.target?.closest?.('.source-card-icon, [data-no-card-nav]')) return; + const href = anchor.getAttribute('href'); if (!href || href === '#' || href.startsWith('javascript:')) return;