diff --git a/webui/static/script.js b/webui/static/script.js
index 78dba4aa..6d53eed8 100644
--- a/webui/static/script.js
+++ b/webui/static/script.js
@@ -42962,13 +42962,21 @@ function _renderRedownloadStep1(overlay, track, data) {
`;
}).join('');
- body.innerHTML = `
-
${columnsHtml}
+ body.innerHTML = `${columnsHtml}
`;
+
+ // Add sticky footer for Step 1
+ const modal = overlay.querySelector('.redownload-modal');
+ const oldFooter = modal.querySelector('.redownload-sticky-footer');
+ if (oldFooter) oldFooter.remove();
+ const footer = document.createElement('div');
+ footer.className = 'redownload-sticky-footer';
+ footer.innerHTML = `
`;
+ modal.appendChild(footer);
// Next button
document.getElementById('redownload-next-btn').addEventListener('click', async () => {
@@ -42983,10 +42991,19 @@ function _renderRedownloadStep1(overlay, track, data) {
overlay.querySelector('.redownload-step[data-step="2"]').classList.add('active');
// Stream results from all download sources — columns appear as each source responds
+ // Body gets the scrollable content, footer is sticky outside the scroll
body.innerHTML = `
Searching download sources...
+ `;
+ // Add sticky footer outside the scrollable body
+ const existingFooter = overlay.querySelector('.redownload-sticky-footer');
+ if (existingFooter) existingFooter.remove();
+ const modal = overlay.querySelector('.redownload-modal');
+ const footer = document.createElement('div');
+ footer.className = 'redownload-sticky-footer';
+ footer.innerHTML = `