/** * Custom Modal Utilities */ // Global function to clean up any stuck modal backdrops window.forceCleanupModals = function() { document.body.classList.remove('modal-open'); document.body.style.overflow = ''; document.body.style.paddingRight = ''; const backdrops = document.querySelectorAll('.modal-backdrop, .overlay, .loading'); if (backdrops.length > 0) { console.warn('Cleanup: Removing backdrops:', backdrops.length); backdrops.forEach(el => el.remove()); } }; // Auto-cleanup on hide document.addEventListener('hidden.bs.modal', () => { setTimeout(forceCleanupModals, 100); }); // Watchdog setInterval(() => { if (document.querySelectorAll('.modal.show').length === 0) { if (document.querySelectorAll('.modal-backdrop').length > 0) { forceCleanupModals(); } } }, 2000); window.addEventListener('load', forceCleanupModals);