{"product_id":"acoustic-wall-panel-black-thread-1ft-x-1ft","title":"Acoustic Felt Panel, Graphite Thread, 1ft x 1ft","description":"\u003cdiv style=\"display: flex; gap: 20px; align-items: flex-start; justify-content: flex-end;\" class=\"container\"\u003e\n\u003cdiv class=\"table-container\" style=\"flex: 1;\"\u003e\n\u003c!-- Product table here --\u003e\n\u003ctable height=\"392\" style=\"width: 100%; border-collapse: collapse; font-family: Arial, sans-serif; border: 1px solid rgb(230, 230, 230); margin-top: 1px; height: 195.938px;\" class=\"m__table\"\u003e\n\u003cthead\u003e\n\u003ctr style=\"font-weight: bold; background-color: rgb(255, 255, 255) !important; color: rgb(105, 16, 41) !important; height: 19.5938px;\"\u003e\n\u003cth style=\"padding: 8px; text-align: left; font-family: 'Roboto Condensed', sans-serif; font-size: 14px; border-right: 1px dashed rgb(204, 204, 204); width: 30%; color: rgb(105, 16, 41) !important; height: 19.5938px;\"\u003eAttribute\u003c\/th\u003e\n\u003cth style=\"padding: 8px; text-align: left; font-size: 14px; width: 70%; color: rgb(105, 16, 41) !important; height: 19.5938px;\"\u003eDescription\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003c!-- start Table rows --\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); border-right: 1px dashed rgb(204, 204, 204); padding: 10px; font-weight: bold; font-family: 'Roboto Condensed', sans-serif; color: rgb(0, 0, 0); height: 19.5938px;\"\u003eMaterial\u003c\/td\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); padding: 6px; color: rgb(0, 0, 0); height: 19.5938px;\"\u003e\u003cspan\u003e\u003cmeta charset=\"utf-8\"\u003eHigh-Density PET Acoustic Felt\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background-color: rgb(249, 249, 249); height: 19.5938px;\"\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); border-right: 1px dashed rgb(204, 204, 204); padding: 10px; font-weight: bold; font-family: 'Roboto Condensed', sans-serif; color: rgb(0, 0, 0); height: 19.5938px;\"\u003ePanel Dimension\u003c\/td\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); padding: 6px; color: rgb(0, 0, 0); height: 19.5938px;\"\u003e12 inches (L) x 12 inches (W) x 0.25 inches (D)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); border-right: 1px dashed rgb(204, 204, 204); padding: 10px; font-weight: bold; font-family: 'Roboto Condensed', sans-serif; color: rgb(0, 0, 0); height: 19.5938px;\"\u003eColor\u003c\/td\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); padding: 6px; color: rgb(0, 0, 0); height: 19.5938px;\"\u003eAs shown\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background-color: rgb(249, 249, 249); height: 19.5938px;\"\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); border-right: 1px dashed rgb(204, 204, 204); padding: 10px; font-weight: bold; font-family: 'Roboto Condensed', sans-serif; color: rgb(0, 0, 0); height: 19.5938px;\"\u003ePacking\u003c\/td\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); padding: 6px; color: rgb(0, 0, 0); height: 19.5938px;\"\u003e1 Panel\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); border-right: 1px dashed rgb(204, 204, 204); padding: 10px; font-weight: bold; font-family: 'Roboto Condensed', sans-serif; color: rgb(0, 0, 0); height: 19.5938px;\"\u003eTotal Area\u003c\/td\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); padding: 6px; color: rgb(0, 0, 0); height: 19.5938px;\"\u003e1 Square Feet per Box\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background-color: rgb(249, 249, 249); height: 19.5938px;\"\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); border-right: 1px dashed rgb(204, 204, 204); padding: 10px; font-weight: bold; font-family: 'Roboto Condensed', sans-serif; color: rgb(0, 0, 0); height: 19.5938px;\"\u003eInstallation\u003c\/td\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); padding: 6px; color: rgb(0, 0, 0); height: 19.5938px;\"\u003ePeel \u0026amp; Stick\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); border-right: 1px dashed rgb(204, 204, 204); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; font-weight: bold; font-family: 'Roboto Condensed', sans-serif; color: rgb(0, 0, 0); height: 19.5938px;\"\u003e   Function\u003c\/td\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); padding: 6px; color: rgb(0, 0, 0); height: 19.5938px;\"\u003eIndoor Decorative Wall Panel, Soundproofing\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"background-color: rgb(249, 249, 249); height: 19.5938px;\"\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); border-right: 1px dashed rgb(204, 204, 204); padding: 10px; font-weight: bold; font-family: 'Roboto Condensed', sans-serif; color: rgb(0, 0, 0); height: 19.5938px;\"\u003ePickup Address\u003c\/td\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); padding: 6px; color: rgb(0, 0, 0); height: 19.5938px;\"\u003e\u003ca style=\"color: #c9994c; text-decoration: none; font-weight: bold;\" href=\"https:\/\/maps.app.goo.gl\/mLuwjkVTf4Ucz2PFA\" target=\"_blank\"\u003e5170 Dixie Rd, Mississauga, ON L4W 1E3\u003c\/a\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); border-right: 1px dashed rgb(204, 204, 204); padding: 10px; font-weight: bold; font-family: 'Roboto Condensed', sans-serif; color: rgb(0, 0, 0); height: 19.5938px;\"\u003e\u003cbr\u003e\u003c\/td\u003e\n\u003ctd style=\"border-top: 1px solid rgb(230, 230, 230); padding: 6px; color: rgb(0, 0, 0); height: 19.5938px;\"\u003e\u003cbr\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c!-- end Table rows --\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\n\u003c!-- START Calculator code here --\u003e \u003cscript type=\"text\/javascript\" src=\"https:\/\/cdn.jsdelivr.net\/npm\/autonumeric@4.5.4\/dist\/autoNumeric.min.js\"\u003e\u003c\/script\u003e \u003clink rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/tippy.js@6\/dist\/tippy.css\"\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cstyle type=\"text\/css\"\u003e\n    .m__calculator *,\n    .m__calculator ::after,\n    .m__calculator ::before {\n        box-sizing: border-box\n    }\n\n    .m__calculator * {\n        font-family: inherit;\n        font-family: \"Roboto Condensed\", sans-serif;\n    }\n\n    [data-tippy-root] *{\n        font-family: \"Roboto Condensed\", sans-serif;\n        font-size: 12px;\n    }\n\n\n    .m__calculator {\n        max-width: 290px;\n        background: #ffffff;\n        border: 4px solid #691029;\n        border-radius: 8px;\n        overflow: hidden;\n        margin: auto;\n    }\n\n    .m__calculator .m__row {\n        margin: 25px 15px;\n    }\n\n    .m__calculator .m__row.m__head {\n        margin: 0;\n        background: #f5f5f5;\n        padding: 20px 0;\n        border-bottom: 1px solid #ececec;\n    }\n\n\n\n    .m__group {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 5px;\n    }\n\n    .m__title {\n        font-size: 22px;\n        font-weight: 700;\n        color: #691029;\n        text-align: center;\n        font-family: \"Roboto Condensed\", sans-serif;\n    }\n\n    .m__label {\n        font-size: 16px;\n        font-family: inherit;\n        color: #691029;\n        font-weight: 600;\n        margin-bottom: 4px;\n    }\n\n    .unit_changer {\n        background: #691029;\n        border: 2px solid #691029;\n        color: white;\n        height: 40px;\n        border-radius: 4px;\n        font-size: 14px;\n        padding-left: 8px;\n        max-width: 70px;\n        width: 100%;\n        cursor: pointer;\n        position: relative;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 5px;\n    }\n\n    .m__calculator .m__row.m__result {\n        margin: 0;\n        padding: 20px;\n        text-align: center;\n        background: #691029;\n    }\n\n    .m__calculator .m__row.m__result .m__label {\n        color: white;\n        font-size: 16px;\n    }\n\n    .m__calculator .m__row.m__result .m__res {\n        font-size: 29px;\n        font-family: inherit;\n        color: #ffffff;\n        font-weight: 700;\n    }\n\n    .group_input {\n        display: flex;\n        border: 2px solid #C9994C;\n        border-radius: 4px;\n        overflow: hidden;\n        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n        min-height: 40px;\n    }\n\n    .group_input input {\n        width: 100%;\n        border: 0;\n        outline: none;\n        font-size: 18px;\n        font-family: inherit;\n        text-align: center;\n        min-height: 36px;\n    }\n\n    .group_input button {\n        background-color: #ffffff;\n        color: #535353;\n        border: none;\n        cursor: pointer;\n        font-size: 20px;\n        width: 40px;\n        height: auto;\n        text-align: center;\n        transition: background-color 0.2s;\n        position: relative;\n    }\n\n    .group_input button.m_minus:before {\n        content: \" \";\n        background: #ffe9c8;\n        width: 1px;\n        height: 24px;\n        display: block;\n        position: absolute;\n        right: 0;\n    }\n\n    .group_input button.m_plus:before {\n        content: \" \";\n        background: #ffe9c8;\n        width: 1px;\n        height: 24px;\n        display: block;\n        position: absolute;\n        left: 0;\n    }\n\n    .group_input button:hover {\n        background-color: #ffe9c8;\n    }\n\n    .m__input_number {\n        width: 40px;\n        text-align: center;\n        border: none;\n        padding: 8px 10px;\n        font-size: 16px;\n        outline: none;\n    }\n    .tooltip-btn{\n        cursor: pointer;\n    }\n    \u003c\/style\u003e\n\u003cdiv style=\"display: flex; gap: 20px; align-items: flex-start; justify-content: flex-end;\" class=\"container\"\u003e\n\u003cdiv\u003e\n\u003cdiv id=\"m_calculator_content\"\u003e\n\u003cdiv class=\"m__calculator\"\u003e\n\u003cdiv class=\"m__wrap\"\u003e\n\u003cdiv class=\"m__section\"\u003e\n\u003cdiv class=\"m__row m__head\"\u003e\n\u003cdiv class=\"m__title\"\u003ePanels Calculator\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"m__row\"\u003e\n\u003cdiv class=\"m__label\"\u003eYour Wall Height \u003cspan class=\"tooltip-btn\" data-tippy-content=\"Measure the total height of your wall, ignoring any windows or doors as if they aren't there. Measure only the complete wall height.\"\u003e \u003csvg width=\"14px\" height=\"14px\" viewbox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n                                \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1 12C1 5.92487 5.92487 1 12 1C18.0751 1 23 5.92487 23 12C23 18.0751 18.0751 23 12 23C5.92487 23 1 18.0751 1 12ZM10.3027 13.3942C10.2316 13.7147 10.5038 14 10.8479 14H13.0406C13.2979 14 13.5151 13.8351 13.6064 13.6061C13.697 13.3789 14.0117 12.9674 14.254 12.7518C14.4827 12.5112 14.7213 12.2848 14.9563 12.0618C15.8824 11.183 16.754 10.356 16.754 8.91047C16.754 6.40301 14.582 5 12.2707 5C10.5038 5 8.06416 5.80604 7.58396 8.50363C7.48716 9.04737 7.94773 9.5 8.50002 9.5H9.91229C10.4388 9.5 10.8312 9.07642 11.0121 8.582C11.1863 8.10604 11.5379 7.7551 12.2707 7.7551C13.6066 7.7551 13.6064 9.22371 12.8346 10.1843C12.5434 10.5467 12.2023 10.8677 11.8648 11.1853C11.1798 11.8298 10.5098 12.4602 10.3027 13.3942ZM13.9999 17C13.9999 18.1046 13.1045 19 11.9999 19C10.8954 19 9.99994 18.1046 9.99994 17C9.99994 15.8954 10.8954 15 11.9999 15C13.1045 15 13.9999 15.8954 13.9999 17Z\" fill=\"#691029\"\u003e\u003c\/path\u003e\n                                \u003c\/svg\u003e \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"m__group\"\u003e\n\u003cdiv class=\"group_input\"\u003e\n\u003cbutton class=\"m_minus\" aria-label=\"Decrease\"\u003e−\u003c\/button\u003e \u003cinput type=\"text\" class=\"input-box\" value=\"0\" inputmode=\"numeric\" id=\"calc_Height\"\u003e \u003cbutton class=\"m_plus\" aria-label=\"Increase\"\u003e+\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"unit_changer\"\u003e\n\u003cspan\u003eFeet\u003c\/span\u003e \u003csvg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\n                                    \u003cpath stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"\u003e\u003c\/path\u003e\n                                    \u003cpath d=\"M8 9l4 -4l4 4\"\u003e\u003c\/path\u003e\n                                    \u003cpath d=\"M16 15l-4 4l-4 -4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"m__row\"\u003e\n\u003cdiv class=\"m__label\"\u003eYour Wall Width \u003cspan class=\"tooltip-btn\" data-tippy-content=\"Measure the total width of your wall, ignoring any windows or doors as if they aren't there. Measure only the complete wall width.\"\u003e \u003csvg width=\"14px\" height=\"14px\" viewbox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n                                \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1 12C1 5.92487 5.92487 1 12 1C18.0751 1 23 5.92487 23 12C23 18.0751 18.0751 23 12 23C5.92487 23 1 18.0751 1 12ZM10.3027 13.3942C10.2316 13.7147 10.5038 14 10.8479 14H13.0406C13.2979 14 13.5151 13.8351 13.6064 13.6061C13.697 13.3789 14.0117 12.9674 14.254 12.7518C14.4827 12.5112 14.7213 12.2848 14.9563 12.0618C15.8824 11.183 16.754 10.356 16.754 8.91047C16.754 6.40301 14.582 5 12.2707 5C10.5038 5 8.06416 5.80604 7.58396 8.50363C7.48716 9.04737 7.94773 9.5 8.50002 9.5H9.91229C10.4388 9.5 10.8312 9.07642 11.0121 8.582C11.1863 8.10604 11.5379 7.7551 12.2707 7.7551C13.6066 7.7551 13.6064 9.22371 12.8346 10.1843C12.5434 10.5467 12.2023 10.8677 11.8648 11.1853C11.1798 11.8298 10.5098 12.4602 10.3027 13.3942ZM13.9999 17C13.9999 18.1046 13.1045 19 11.9999 19C10.8954 19 9.99994 18.1046 9.99994 17C9.99994 15.8954 10.8954 15 11.9999 15C13.1045 15 13.9999 15.8954 13.9999 17Z\" fill=\"#691029\"\u003e\u003c\/path\u003e\n                                \u003c\/svg\u003e \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"m__group\"\u003e\n\u003cdiv class=\"group_input\"\u003e\n\u003cbutton class=\"m_minus\" aria-label=\"Decrease\"\u003e−\u003c\/button\u003e \u003cinput type=\"text\" class=\"input-box\" value=\"0\" inputmode=\"numeric\" id=\"calc_Width\"\u003e \u003cbutton class=\"m_plus\" aria-label=\"Increase\"\u003e+\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"unit_changer\"\u003e\n\u003cspan\u003eFeet\u003c\/span\u003e \u003csvg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\n                                    \u003cpath stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"\u003e\u003c\/path\u003e\n                                    \u003cpath d=\"M8 9l4 -4l4 4\"\u003e\u003c\/path\u003e\n                                    \u003cpath d=\"M16 15l-4 4l-4 -4\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"m__row m__result\"\u003e\n\u003cdiv class=\"m__label\"\u003eTotal Panels You need\u003c\/div\u003e\n\u003cdiv class=\"m__res\"\u003e0 Panels\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript src=\"https:\/\/unpkg.com\/@popperjs\/core@2\"\u003e\u003c\/script\u003e \u003cscript src=\"https:\/\/unpkg.com\/tippy.js@6\"\u003e\u003c\/script\u003e \u003cscript type=\"text\/javascript\"\u003e\n    document.addEventListener('DOMContentLoaded', function() {\n        const inputs = document.querySelectorAll('.input-box'),\n            resultDisplay = document.querySelector('.m__res');\n        let currentUnit = 'Feet';\n\n        const autoNumericFields = Array.from(inputs).map(input =\u003e {\n            const anField = new AutoNumeric(input, { minimumValue: '0', maximumValue: '1000', decimalPlaces: 1, modifyValueOnWheel: true });\n            const container = input.closest('.group_input'),\n                minusBtn = container.querySelector('.m_minus'),\n                plusBtn = container.querySelector('.m_plus');\n\n            const updateButtons = () =\u003e {\n                let value = anField.getNumber();\n                minusBtn.disabled = value \u003c= 0;\n                plusBtn.disabled = value \u003e= 1000;\n            };\n\n            minusBtn.addEventListener('click', () =\u003e {\n                anField.set(Math.max(anField.getNumber() - 1, 0).toFixed(1));\n                updateButtons();\n                calculateResult();\n            });\n\n            plusBtn.addEventListener('click', () =\u003e {\n                anField.set(Math.min(anField.getNumber() + 1, 1000).toFixed(1));\n                updateButtons();\n                calculateResult();\n            });\n\n            input.addEventListener('input', () =\u003e {\n                updateButtons();\n                calculateResult();\n            });\n\n            return anField;\n        });\n\n        document.querySelectorAll('.unit_changer').forEach(changer =\u003e {\n            changer.addEventListener('click', () =\u003e {\n                currentUnit = currentUnit === 'Feet' ? 'Inch' : 'Feet';\n                document.querySelectorAll('.unit_changer span').forEach(span =\u003e span.textContent = currentUnit);\n                autoNumericFields.forEach(anField =\u003e {\n                    let value = anField.getNumber();\n                    anField.set(currentUnit === 'Inch' ? (value * 12).toFixed(1) : (value \/ 12).toFixed(1));\n                });\n                calculateResult();\n            });\n        });\n\n        function calculateResult() {\n            const height = parseFloat(document.getElementById('calc_Height').value) || 0,\n                width = parseFloat(document.getElementById('calc_Width').value) || 0;\n\n            let result = 0;\n            if (currentUnit === 'Feet') {\n                result = Math.ceil((height * width) \/ 1);\n            } else {\n                result = Math.ceil((height * width) \/ 144);\n            }\n            resultDisplay.textContent = `${result} Box`;\n        }\n        calculateResult();\n        tippy('.tooltip-btn');\n    });\n    \u003c\/script\u003e \u003c!-- Calculator code here END --\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Additional CSS styling --\u003e\n\u003cstyle\u003e\n.container {\n    display: flex;\n    gap: 20px;\n    align-items: flex-start;\n    flex-direction: row; \/* Ensures calculator stays on the right side *\/\n}\n\n.table-container {\n    flex: 1;\n}\n\n.m__calculator {\n    max-width: 290px;\n}\n@media (max-width: 480px) {\n    .container {\n        flex-direction: column; \/* Stack elements vertically on mobile *\/\n        gap: 20px;\n    }\n}\n\u003c\/style\u003e","brand":"Swan Canada","offers":[{"title":"Default Title","offer_id":51505647255874,"sku":"SW3072S","price":4.5,"currency_code":"CAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0021\/6973\/3173\/files\/8_9e927903-0edf-4137-b4d4-6358a7fbaac6.png?v=1770056736","url":"https:\/\/swancanada.ca\/fr\/products\/acoustic-wall-panel-black-thread-1ft-x-1ft","provider":"Swan Canada","version":"1.0","type":"link"}