Prices re-checked within 72 hours 640,000 live prices 268 UK retailers
Login Register
Tool Sets & Kits
  • General Tool Kits
  • Socket & Ratchet Sets
  • Screwdriver Sets
  • (' + items.length + ')'; var html = ''; items.forEach(function(p) { var img = p.image_url || '/assets/images/no-image.png'; var price = p.lowest_price ? '£' + parseFloat(p.lowest_price).toFixed(2) : ''; var name = (p.product_name || '').substring(0, 45); html += '
    ' + '' + '
    ' + '
    ' + name + '
    ' + '
    ' + (p.brand || '') + (price ? ' · ' + price : '') + '
    ' + '
    ' + '' + '
    '; }); document.getElementById('compareList').innerHTML = html; document.getElementById('compareFooter').style.display = ''; }) .catch(function() { document.getElementById('compareList').innerHTML = '
    Login to compare
    '; }); } function removeFromCompare(sku, event) { event.stopPropagation(); fetch('/api/comparison.php', { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: 'action=remove&sku=' + encodeURIComponent(sku) }) .then(function(r) { return r.json(); }) .then(function(d) { if (d.success) loadCompareList(); }); } function clearCompareList() { fetch('/api/comparison.php', { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: 'action=clear' }) .then(function(r) { return r.json(); }) .then(function(d) { if (d.success) loadCompareList(); }); } function updateCompareBadge(count) { var badge = document.getElementById('compareCount'); if (count > 0) { badge.textContent = count; badge.style.display = ''; } else { badge.style.display = 'none'; } } // Load compare count on page load function refreshCompareBadge() { fetch('/api/compare.php?action=count', {credentials: 'same-origin'}) .then(function(r) { return r.json(); }) .then(function(d) { if (d.success) updateCompareBadge(d.count || 0); }).catch(function() {}); } refreshCompareBadge(); // Listen for compare updates from anywhere on the page document.addEventListener('compareUpdated', function() { refreshCompareBadge(); }); // Also poll every 5 seconds in case event was missed setInterval(refreshCompareBadge, 5000); function toggleDarkMode() { var html = document.documentElement; var isDark = html.getAttribute('data-theme') === 'dark'; if (isDark) { html.removeAttribute('data-theme'); localStorage.setItem('dside-theme', 'light'); } else { html.setAttribute('data-theme', 'dark'); localStorage.setItem('dside-theme', 'dark'); } // Update mobile icon label var mLabel = document.querySelector('#mobileDarkIcon'); if (mLabel) { var parent = mLabel.closest('.dside-topicon'); if (parent) parent.querySelector('small').textContent = isDark ? 'DARK' : 'LIGHT'; } } // Update mobile label on load (function(){ var isDark = document.documentElement.getAttribute('data-theme') === 'dark'; if (isDark) { var mi = document.getElementById('mobileDarkIcon'); if (mi) { mi.closest('.dside-topicon').querySelector('small').textContent = 'LIGHT'; } } })(); // Close all mobile panels function closeAllPanels() { // Close menu var menu = document.getElementById('dsideMobileMenu'); var menuBtn = document.getElementById('menuToggleBtn'); if (menu.classList.contains('open')) { menu.classList.remove('open'); menuBtn.classList.remove('active'); } // Close account closeAccountPanel(); document.body.style.overflow = ''; } // Toggle mobile menu function toggleDsideMenu() { var btn = document.getElementById('menuToggleBtn'); var menu = document.getElementById('dsideMobileMenu'); var isOpen = menu.classList.contains('open'); closeAccountPanel(); if (isOpen) { menu.classList.remove('open'); btn.classList.remove('active'); document.body.style.overflow = ''; } else { menu.classList.add('open'); btn.classList.add('active'); document.body.style.overflow = 'hidden'; } } // Toggle account panel function toggleAccountPanel() { var panel = document.getElementById('mobileAccountPanel'); var backdrop = document.getElementById('mobileAccountBackdrop'); var isOpen = panel.classList.contains('open'); // Close menu if open var menu = document.getElementById('dsideMobileMenu'); var menuBtn = document.getElementById('menuToggleBtn'); if (menu.classList.contains('open')) { menu.classList.remove('open'); menuBtn.classList.remove('active'); document.body.style.overflow = ''; } if (isOpen) { closeAccountPanel(); } else { panel.classList.add('open'); backdrop.classList.add('open'); } } function closeAccountPanel() { var panel = document.getElementById('mobileAccountPanel'); var backdrop = document.getElementById('mobileAccountBackdrop'); if (panel) panel.classList.remove('open'); if (backdrop) backdrop.classList.remove('open'); } function toggleMobileSub(e, el) { e.preventDefault(); var li = el.parentElement; li.classList.toggle('open'); } // Mobile search bar (always visible) var mobileBarTimer = null; function performMobileBarSearch() { var q = document.getElementById('mobileSearchInputBar').value.trim(); if (q) window.location.href = '/?q=' + encodeURIComponent(q); } function mobileBarLiveSearch(q) { clearTimeout(mobileBarTimer); var resultsDiv = document.getElementById('mobileBarSearchResults'); if (q.trim().length < 2) { resultsDiv.style.display = 'none'; resultsDiv.innerHTML = ''; return; } mobileBarTimer = setTimeout(function() { fetch('/api/search_products.php?q=' + encodeURIComponent(q.trim()) + '&limit=6') .then(function(r) { return r.json(); }) .then(function(data) { if (!data.success || !data.products || data.products.length === 0) { resultsDiv.innerHTML = '
    No results found
    '; resultsDiv.style.display = 'block'; return; } var html = ''; data.products.forEach(function(p) { var url = p.url_slug ? '/product/' + p.url_slug : '/product.php?sku=' + encodeURIComponent(p.sku); var img = p.image_url || ''; html += '
    '; if (img) html += ''; html += '
    ' + (p.name || '') + '
    '; if (p.brand) html += '
    ' + p.brand + '
    '; html += '
    '; if (p.lowest_price) { html += '
    \u00A3' + parseFloat(p.lowest_price).toFixed(2) + '
    '; if (p.cheapest_seller) html += '
    ' + p.cheapest_seller + '
    '; html += '
    '; } html += '
    '; }); resultsDiv.innerHTML = html; resultsDiv.style.display = 'block'; }) .catch(function() { resultsDiv.style.display = 'none'; }); }, 300); } // Close search results on outside click document.addEventListener('click', function(e) { var resultsDiv = document.getElementById('mobileBarSearchResults'); var searchBar = document.querySelector('.dside-mobile-search'); if (resultsDiv && searchBar && !searchBar.contains(e.target)) { resultsDiv.style.display = 'none'; } });

    Cleaning & Maintenance Essentials

    Keep your home and workshop in top condition with our range of cleaning and maintenance supplies, compared across top UK retailers to find you the best price.

    52,342 products available
    Filters
    Categories
    Price Range
    Clear
    52,342 products
    310,000+ Products
    215+ Trusted Sellers
    700,000+ Price Points
    72hr Price Updates