{"product_id":"furrypaws-xl-stainless-steel-cat-litter-tray-easy-to-clean-and-leak-proof-stainless-steel-litter-box-20l-large-cat-litter-trays-with-litter-scoop-61x41x30cm","title":"FURRYPAWS XL Stainless Steel Cat Litter Tray, Easy to Clean and Leak-Proof Stainless Steel Litter Box, 20L Large Cat Litter Trays with Litter Scoop (61x41x30cm)","description":"\u003cdiv\u003e\n\u003cdiv class=\"aplus-v2 desktop celwidget\"\u003e\n\u003cscript type=\"application\/javascript\"\u003e\/\/ \u003c![CDATA[\n    \/**\n     * Common event handler for click and keydown events.\n     * @param {Event} event - The event object.\n     * @param {Function} handleClickOrEnter - Function to handle click or Enter key events.\n     * @param {Function} handleEsc - Function to handle Esc key events.\n     *\/\n    \/\/ [TODO][AplusMantle-8064] Create common event handler util(key events, click events) in AplusModuleResources\n    function handleClickAndKeyEvents(event, handleClickOrEnterOrSpace) {\n        const ENTER_KEY_CODE = 13;\n        const ESCAPE_KEY_CODE = 27;\n        const SPACE_KEY_CODE = 32;\n        const isClick = event.type === 'click';\n        const isKeydown = event.type === 'keydown';\n        const isEnter = isKeydown \u0026\u0026 event.keyCode === ENTER_KEY_CODE;\n        const isSpace = isKeydown \u0026\u0026 event.keyCode === SPACE_KEY_CODE;\n        const isEsc = isKeydown \u0026\u0026 event.keyCode === ESCAPE_KEY_CODE;\n\n        if (isClick || isEnter || isSpace) {\n            handleClickOrEnterOrSpace();\n        } else if (isEsc) {\n            handleEsc(event);\n        }\n    }\n\n    \/**\n    * Function to handle esc key event.\n    * @param {Event} event - The event object.\n    *\/\n    function handleEsc(event) {\n        event.target.blur()  \/\/ force remove focus\n    }\n\/\/ ]]\u003e\u003c\/script\u003e\u003cscript type=\"text\/javascript\"\u003e\/\/ \u003c![CDATA[\n(function(f) {var _np=(window.P._namespace(\"PremiumAplusModule\"));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {\nP.now('premium-module-5-comparison-table-scroller').execute(function(init){\n    if (init) {\n        return;\n    }\n    P.register('premium-module-5-comparison-table-scroller', function(){\n        return function() {\n            P.when('jQuery', 'a-popover', 'A', 'ready').execute(function($, popover, A) {\n                function initCompTable(module) {\n                    \/**\n                    * Premium comparison table: popover trigger module\n                    *\/\n                    var comparisonName = $(module).data('comparison-name');\n                    (function() {\n                        var $additionalInfo = $('.aplus-v2 .aplus-popover-trigger');\n                        $additionalInfo.each(function(i, trigger) {\n                            return popover.create(trigger, $(trigger).data());\n                        });\n                        $additionalInfo.hover(\n                            function() {\n                                $(this).focus();\n                            }\n                        );\n                    })();\n                    \/**\n                    * Premium comparison table: adjust column width module\n                    *\/\n                    (function() {\n                        var VISIBLE_COLUMNS = 4.2;  \/* How many visible columns on load *\/\n                        var MIN_WIDTH = 230;\n                        var getWidth = function() {\n                            return $(this).outerWidth();\n                        }\n                        \/* cache selectors *\/\n                        var\n                            $container = $('.aplus-v2 .comparison-table #'+comparisonName),\n                            $header = $('.aplus-v2 .comparison-table #'+comparisonName+' td.attribute'),\n                            $slider = $('.aplus-v2 .comparison-table #'+comparisonName+' .table-slider'),\n                            $columns = $('.aplus-v2 .comparison-table #'+comparisonName+' .aplus-data-column'),\n                            $activeColumn = $('.aplus-v2 .comparison-table #'+comparisonName+' .aplus-data-column.active.active-item');\n\n                        \/* Formula for determining desired column width *\/\n\n                        var calculatedColumnWidth = Math.floor(\n                            ($container.innerWidth() - $header.innerWidth()) \/ VISIBLE_COLUMNS\n                        );\n\n                        var childWidths = $activeColumn.map(getWidth).get();\n                        var maxChildWidth = Math.max(MIN_WIDTH, Math.max.apply(Math, childWidths));\n                        var minColumnWidth = $columns.innerWidth();\n\n                        \/* set the min-width of each column to the calulated width or minWidth *\/\n                        $columns.css(\n                            'min-width',\n                            Math.max(MIN_WIDTH, (calculatedColumnWidth \u003c minColumnWidth\n                                ? calculatedColumnWidth\n                                : minColumnWidth))\n                        );\n                        $activeColumn.css('width', maxChildWidth);\n\n                        \/* show the component *\/\n                        $container.removeClass('loading');\n                    })();\n\n                    \/**\n                     * Premium comparison table: sticky attribute \u0026 column\n                     *\/\n\n                    (function() {\n                        \/* cache selectors *\/\n                        const comparisonTable = document.querySelector('.aplus-v2 .comparison-table #'+comparisonName);\n                        const header = comparisonTable.querySelector('td.attribute');\n                        const fixedColumn = comparisonTable.querySelector('td.active');\n\n                        const attributeColumnObserver = new ResizeObserver((entries) =\u003e {\n                            for (let entry of entries) {\n                                const bounds = entry.target.getBoundingClientRect().width;\n                                const activeCellWidth = window.getComputedStyle(fixedColumn).left;\n                                if (bounds + \"px\" !== activeCellWidth) {\n                                    const activeCells = document.querySelectorAll('.aplus-data-column.active');\n                                    activeCells.forEach(cell =\u003e cell.style.left = bounds + \"px\");\n\n                                }\n                            }\n\n                        })\n\n                        attributeColumnObserver.observe(header)\n                    })();\n\n                    \/**\n                    * Premium comparison table: top scroll bar\n                    *\/\n                    (function() {\n                        \/* cache selectors *\/\n                        var\n                            $header = $('.aplus-v2 .comparison-table #'+comparisonName+' td.attribute'),\n                            $fixedColumn = $('.aplus-v2 .comparison-table #'+comparisonName+' td.active'),\n                            $scrollWrapperTop = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-wrapper-top'),\n                            $scrollWrapperBottom = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-wrapper-bottom'),\n                            $scrollWidth = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-width'),\n                            $scrollBar = $('.aplus-v2 .comparison-table #'+comparisonName+' .scroll-bar');\n                        \/* confirm fixed column exists and can add width to the total width of the scroll bar *\/\n                        var fixedColumnWidth = $fixedColumn.innerWidth();\n                        if ( fixedColumnWidth === null ) {\n                            fixedColumnWidth = 0;\n                        }\n                        \/* set width of scrollBar *\/\n                        $scrollBar.css('width', $scrollWidth.innerWidth() + fixedColumnWidth + $header.innerWidth());\n                        \/* connect scrolls together *\/\n                        $scrollWrapperTop.scroll(function() {\n                            $scrollWrapperBottom.scrollLeft($scrollWrapperTop.scrollLeft());\n                        });\n                        $scrollWrapperBottom.scroll(function() {\n                            $scrollWrapperTop.scrollLeft($scrollWrapperBottom.scrollLeft());\n                        });\n                    })();\n                }\n\n                $('.aplus-v2 .premium-aplus-module-5 .table-container').each(function(index, module) {\n                    initCompTable(module);\n                });\n            });\n        }\n    });\n});\n}));\n\/\/ ]]\u003e\u003c\/script\u003e\u003cscript type=\"text\/javascript\"\u003e\/\/ \u003c![CDATA[\n(function(f) {var _np=(window.P._namespace(\"PremiumAplusModule\"));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {\nP.now('premium-module-11-faq').execute(function(init) {\n    if (init) {\n        return;\n    }\n    P.register('premium-module-11-faq', function() {\n        return function() {\n            P.when('A', 'jQuery', 'ready').execute(function(A, $){\n                function initFaq(module) {                   \n                    const MODULE_CLASS_NAME = 'premium-aplus-module-11';\n                    const FAQ_CONTAINER_CLASS_NAME = 'faqs-container';\n                    const FAQ_BLOCK_CLASS_NAME = 'faq-block';\n                    const moduleId = $(module).data('faq-block');\n                    const $faqBlocks = $('.aplus-v2 .' + MODULE_CLASS_NAME + ' .' + FAQ_CONTAINER_CLASS_NAME + '.' + moduleId + ' .' + FAQ_BLOCK_CLASS_NAME);\n\n                    \/**\n                    * Function to handle click or Enter or Space key events.\n                    * @param {Element} element - The this object from which the event is dispatched\n                    * @param {faqBlocks} faqBlocks - List of all the Question and Answer blocks.\n                    *\/\n                    function handleClickOrEnterOrSpace(element, faqBlocks) {\n                        const $element = $(element);\n                        const isActive = $element.hasClass('aplus-active');\n\n                        faqBlocks.removeClass('aplus-active');\n                        faqBlocks.find('[data-faq-question]').attr('aria-expanded', 'false');\n\n                        if (!isActive) {\n                            $element.addClass('aplus-active');\n                            $element.find('[data-faq-question]').attr('aria-expanded', 'true');\n                        }\n                    }\n\n                    \/* Using jQuery event namespace for preventing duplicate binding on twister refresh *\/\n                    $faqBlocks.unbind('click keydown.premiumAplusModule11ClickHandler').bind('click keydown.premiumAplusModule11ClickHandler', function(event) {\n                        handleClickAndKeyEvents(event, () =\u003e handleClickOrEnterOrSpace(this, $faqBlocks)); \n                    });\n                }\n                $(\".aplus-v2 .premium-aplus-module-11 .faqs-container\").each(function(index, module) {\n                    initFaq(module);\n                });\n            });\n        };\n    });\n});\n}));\n\/\/ ]]\u003e\u003c\/script\u003e\n\u003cdiv class=\"celwidget aplus-module premium-module-8-hero-video aplus-premium\"\u003e\n\u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-8\"\u003e\n\u003cdiv class=\"a-section a-spacing-none premium-aplus-module-8-video\"\u003e\n\u003cdiv class=\"a-section a-spacing-none video-placeholder\"\u003e\n\u003cp class=\"isSelectedEnd\"\u003e\u003cstrong\u003eDescription:\u003c\/strong\u003e\u003cbr\u003e\u003cspan\u003eA spacious stainless steel litter tray designed for cats of different breeds and sizes. Its high-sided, leak-resistant design helps contain litter and urine, while the smooth non-stick surface makes everyday cleaning easier. A litter scoop is included for added convenience.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"isSelectedEnd\"\u003e\u003cstrong\u003eSpecifications:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003eCapacity: 20L\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eSize: XL\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDimensions: 61 × 41 × 30 cm\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eMaterial: Stainless steel\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eColour: Grey\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eDesign: High-sided open litter tray\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eSurface: Smooth and non-stick\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eLeak Resistant: Yes\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eOdour Resistant: Yes\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eRust Resistant: Yes\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eAnti-Slip Feet: Yes\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eEdges: Smooth and rounded\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eLitter Scoop: Included\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eLid Included: No\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eItem Weight: 2.8 kg\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eSuitable For: Adult cats, large breeds, and multi-cat households\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\u003c\/div\u003e","brand":"Sayby’s Sanctuary ","offers":[{"title":"L","offer_id":56121978454281,"sku":"B0FPF2WJ5N","price":21.41,"currency_code":"GBP","in_stock":true},{"title":"XL","offer_id":56121978487049,"sku":"B0DZ65FYL4","price":28.51,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0859\/0508\/0585\/files\/Untitleddesign-2026-09-16T170028.308.png?v=1789560042","url":"https:\/\/saybys.com\/products\/furrypaws-xl-stainless-steel-cat-litter-tray-easy-to-clean-and-leak-proof-stainless-steel-litter-box-20l-large-cat-litter-trays-with-litter-scoop-61x41x30cm","provider":"Sayby’s Ltd","version":"1.0","type":"link"}