{"product_id":"uproot-cleaners-bundles","title":"Uproot Cleaners™ Bundles","description":"\u003cul\u003e\n\u003cli\u003eFor use on most product fabrics\u003c\/li\u003e\n\u003cli\u003eSpecial edges collect pet hair, lint, and dust in seconds\u003c\/li\u003e\n\u003cli\u003eEasy to use and infinitely reusable\u003c\/li\u003e\n\u003cli\u003eSafe around pets, no harmful substances\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch2\u003eMini\u003c\/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBest used for small areas and tight corners including: cars, cat towers, clothes, and furniture\u003c\/li\u003e\n\u003cli\u003eSize: 4.2 x 0.1 x 3.25 inches\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch2\u003ePro\u003c\/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBest used for medium sized areas including: carpets, rugs, stairs, cars, cat towers, and furniture\u003c\/li\u003e\n\u003cli\u003eSize: 6.6 x 5 x 0.37 inches\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch2\u003ePro\u003c\/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBest used for large sized areas including: carpets, rugs, stairs, cars, cat towers, and furniture\u003c\/li\u003e\n\u003cli\u003eSize: 11 x 12 x 1 inches\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch2\u003eXtra\u003c\/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBest used for large areas including: carpets, rugs, cars\u003c\/li\u003e\n\u003cli\u003eSize: 60 x 8.07 x 1.97 inches\u003c\/li\u003e\n\u003cli\u003eAdjustable Handle\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch2\u003eDeshedder\u003c\/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cmeta\u003eStop pet hair at the source - deshed first.\u003c\/li\u003e\n\u003cli\u003eBest For Removing loose fur before it hits your home\u003c\/li\u003e\n\u003cli\u003eAll dog and cat coat types Tackling the root cause of pet hair messes\u003c\/li\u003e\n\u003cli\u003eSize: 5 x 6 x 1 inches\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv\u003e\n\u003cp\u003e*Not intended for use on knitted \u0026amp; delicate fabrics\u003c\/p\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- Define templates for each bundle list --\u003e\n\u003ctemplate\u003e\n  \u003cul\u003e\n    \u003cli\u003e\n\u003cspan\u003e✓\u003c\/span\u003e Mini\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✓\u003c\/span\u003e Xtra\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✓\u003c\/span\u003e Deshedder\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✓\u003c\/span\u003e Pro\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✓\u003c\/span\u003e Max\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/template\u003e\n\n\u003ctemplate\u003e\n  \u003cul\u003e\n    \u003cli\u003e\n\u003cspan\u003e✓\u003c\/span\u003e Mini\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✓\u003c\/span\u003e Xtra\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✗\u003c\/span\u003e Deshedder\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✓\u003c\/span\u003e Pro\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✗\u003c\/span\u003e Max\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/template\u003e\n\n\u003ctemplate\u003e\n  \u003cul\u003e\n    \u003cli\u003e\n\u003cspan\u003e✓\u003c\/span\u003e Xtra\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✗\u003c\/span\u003e Mini\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✗\u003c\/span\u003e Deshedder\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✗\u003c\/span\u003e Pro\u003c\/li\u003e\n    \u003cli\u003e\n\u003cspan\u003e✗\u003c\/span\u003e Max\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/template\u003e\n\n\u003c!-- Script to inject the correct list into each option-wrapper on load --\u003e\n\u003cscript\u003e\n  document.addEventListener('DOMContentLoaded', () =\u003e {\n    \/\/ Select wrappers by known class, fallback to any .option-wrapper\n    const wrappers = document.querySelectorAll('.input-pill .option-wrapper, .option-wrapper');\n\n    wrappers.forEach(wrapper =\u003e {\n      \/\/ Remove previously injected lists\n      const prev = wrapper.querySelector('ul.injected-list');\n      if (prev) prev.remove();\n\n      const text = wrapper.innerText.toLowerCase();\n      let tplId = null;\n      if (text.includes('ultimate')) tplId = 'ultimate-list-template';\n      else if (text.includes('starter')) tplId = 'starter-list-template';\n      else if (text.includes('cleaner')) tplId = 'cleaner-list-template';\n\n      if (tplId) {\n        const tpl = document.getElementById(tplId);\n        if (tpl) {\n          const frag = document.importNode(tpl.content, true);\n          \/\/ Mark list for removal\/identification\n          const ul = frag.querySelector('ul');\n          if (ul) ul.classList.add('injected-list');\n          wrapper.appendChild(frag);\n        }\n      }\n    });\n  });\n\u003c\/script\u003e\n\n\n\u003cstyle\u003e\n  .product-options__option {\n    position: relative !important;\n  }\n  .product-options .onetime-pricing-display, .product-options .onetime-display {\n  display: flex !important;\n  flex-direction: column-reverse;\n}\n.product-options .product-options__option-title.sr-only {\n  all: unset !important;\n  color: transparent !important;\n  pointer-events: none !important;\n  font-size: 0 !important;\n  margin-bottom: 0.5rem !important;\n}\n.product-options .product-options__option-title.sr-only:before {\n  content: \"Select Bundle\";\n  color: black;\n  font-weight: bold;\n  font-size: 1.04rem !important;\n}\n.input-pill label.has-img {\n    flex-direction: row !important;\n    align-items: center !important;\n}\n.product-options__pack {\n  flex-direction: column !important;\n}\n.product-options__pack\u003e * {\n  max-width: 100% !important;\n}\n.product-options .input-pill {\n  display: block !important;\n}\n.input-pill label .option-wrapper, .input-pill label .option-wrapper__price {\n  text-align: left !important;\n}\n.input-pill label .option-wrapper__price {\n  margin-left: auto !important;\n  width: min-content !important;\n  float: right;\n}\n.input-pill label .option-wrapper ul {\n  column-count: 2;\n  float: left;\n  min-width: 67%;\n  padding: 0;\n  margin: 0;\n}\n.input-pill label .option-wrapper li {\n  font-size: 0.967rem;\n  font-weight: 500;\n  white-space: nowrap;\n}\n.input-pill label.has-img {\n  padding: .5625rem !important;\n}\n  \n  ul.injected-list {\n    margin-top: 0.5em;\n    padding-left: 1.2em;\n  }\n  .injected-list li.excluded {\n    color: gray;\n  }\n  .injected-list li.included {\n    color: black;\n  }\n  .injected-list .icon.check {\n    font-weight: bold;\n    color: #3f858e;\n    margin-right: 0.3em;\n  }\n  .injected-list .icon.cross {\n    font-weight: bold;\n    color: gray;\n    margin-right: 0.3em;\n  }\n  .input-pill label .option-wrapper__price {\n    background-color: transparent !important;\n    font-size: 1.3rem !important;\n    font-weight: bold !important;\n  }\n  .input-pill label .option-wrapper__price .price-compare {\n    background: none !important;\n  }\n  .input-pill .price-compare {\n    width: min-content !important;\n    padding: 0.25rem !important;\n    margin: auto !important;\n  }\n  .input-pill .price-compare::before {\n    top: 20% !important;\n    left: 50% !important;\n    transform: rotate(-15deg) translate(-50%, 0) !important;\n  }\n  .onetime-pricing-display::before {\n    background-color: green;\n    border-radius: 5px;\n    display: block;\n    font-size: 0.8rem;\n    text-align: center;\n    color: white;\n    width: fit-content;\n    padding: 0 6px;\n    margin: auto;\n  }\n  .input-pill input:active ~ label, \n  .input-pill input:checked ~ label {\n    background-color: #e5f6f9;\n  }\n  input[value=\"Ultimate Bundle:\"] + label .onetime-pricing-display,\n  input[value=\"Starter Kit:\"] + label .onetime-pricing-display {\n    margin-top: -7px;\n  }\n  input[value=\"Cleaner Xtra:\"] + label .onetime-pricing-display {\n    margin-top: 16px;\n  }\n  input[value=\"Ultimate Bundle:\"] + label .onetime-pricing-display::before {\n    content: \"30% OFF\";\n  }\n  input[value=\"Starter Kit:\"] + label .onetime-pricing-display::before {\n    content: \"22% OFF\";\n  }\n  .input-pill .has-img img {\n    background-color: white !important;\n    mix-blend-mode: normal !important;\n  } \n  @media (max-width: 800px) {\n    .input-pill label .option-wrapper ul {\n      max-width: 50%;\n      margin: 0;\n      gap: 0;\n      min-width: unset;\n    }\n    html, body {\n      overflow-x: hidden !important;\n      width: 100% !important;\n    }\n  }\n  @media (min-width: 800px) {\n    .input-pill .has-img img {\n      margin: 0 0.5rem !important;\n    } \n  }\n  .injected-list .icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-size: contain;\n    background-repeat: no-repeat;\n    text-indent: -9999px;\n    overflow: hidden;\n    margin-right: 0 !important;\n    vertical-align: middle;\n  }\n\n  .input-pill label .option-wrapper__price .price-compare {\n    color: #666 !important;\n    line-height: 0.5 !important;\n    font-size: 1rem !important;\n    font-weight: 500 !important;\n    padding-top: 0.67rem !important;\n  }\n  .input-pill label .option-wrapper__price .price-compare::before {\n    background-color: red !important;\n  }\n  \n  \/* Green checkmark icon *\/\n  .injected-list .icon.check {\n    background-image: url(\"https:\/\/cdn.shopify.com\/s\/files\/1\/0551\/2957\/1484\/files\/ico-checkmark.svg?v=1753899177\");\n  }\n  \n  \/* Red cross icon *\/\n  .injected-list .icon.cross {\n    background-image: url(\"https:\/\/cdn.shopify.com\/s\/files\/1\/0551\/2957\/1484\/files\/ico-cross.svg?v=1753899177\");\n    filter: grayscale(1);\n    opacity: 0.67;\n  }\n\n  .help-choose-link::before {\n    content: \"i\";\n    margin: 0 0.5rem;\n    width: 24px;\n    height: 24px;\n    line-height: 24px;\n    border: 1.5px solid currentColor;\n    border-radius: 24px;\n    text-align: center;\n    display: inline-block;\n    font-weight: 500;\n  }\n\n  .shopify-section.compare-cleaners {\n    display: none !important;\n  }\n  \n\u003c\/style\u003e\n","brand":"⭐⭐⭐⭐⭐","offers":[{"title":"Cleaner Xtra:","offer_id":52440231870746,"sku":"45150521622684","price":15.0,"currency_code":"USD","in_stock":true},{"title":"Starter Kit:","offer_id":52440231903514,"sku":"45150521655452","price":24.89,"currency_code":"USD","in_stock":true},{"title":"Ultimate Bundle:","offer_id":52440231936282,"sku":"45150521688220","price":38.38,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1003\/5219\/6890\/files\/AllCleaner_8382b2e9-75cb-490e-9433-aa45c7ccbf83_jpg_v_1755870449.webp?v=1783428267","url":"https:\/\/uprootcleanshop.com\/products\/uproot-cleaners-bundles","provider":"uprootcleanshop.com","version":"1.0","type":"link"}