{"product_id":"balle-rebondissement-avec-plume-48","title":"Balle rebondissement avec Plume","description":"\u003csection data-name=\"Couleurs\" data-snippet=\"s_embed_code\" class=\"s_embed_code text-center s_custom_snippet pt0 pb0 o_colored_level\"\u003e\u003ctemplate class=\"s_embed_code_saved\"\u003e\u003c\/template\u003e\n\u003cdiv class=\"s_embed_code_embedded container o_not_editable\"\u003e\n\u003cscript\u003e\n(function () {\n  const TARGETS = new Set([\"couleurs\", \"colors\"]); \/\/ uniquement pluriel\n\n  function norm(t){ return (t || \"\").trim().toLowerCase(); }\n\n  function hideVariantSelectors(){\n    \/\/ Cache le bloc de variantes \"Couleurs\/Colors\" (radio) sans toucher aux filtres shop\n    document.querySelectorAll(\".js_add_cart_variants [data-attribute-name]\").forEach(el=\u003e{\n      const n = norm(el.getAttribute(\"data-attribute-name\"));\n      if (TARGETS.has(n)) el.style.display = \"none\";\n    });\n  }\n\n  function removeSpecsRows(){\n    \/\/ Dans \"Spécifications\" (table), supprime la ligne entière si la 1ère cellule = Couleurs\/Colors\n    const scope = document.querySelector(\"#category_accordion\") || document;\n    scope.querySelectorAll(\"table tr\").forEach(tr=\u003e{\n      const first = tr.querySelector(\"td, th\");\n      if (!first) return;\n      const label = norm(first.textContent);\n      if (TARGETS.has(label)) tr.remove();\n    });\n\n    \/\/ Si le tableau est vide après suppression, on évite un gros espace\n    scope.querySelectorAll(\"table\").forEach(tbl=\u003e{\n      const hasRow = tbl.querySelector(\"tr\");\n      if (!hasRow) {\n        const wrap = tbl.closest(\".accordion-body, .o_wsale_product_details, .o_product_specifications\") || tbl.parentElement;\n        if (wrap) wrap.style.display = \"none\";\n      }\n    });\n  }\n\n  function run(){\n    try{\n      hideVariantSelectors();\n      removeSpecsRows();\n    }catch(e){}\n  }\n\n  \/\/ Run plusieurs fois sans observer (évite les erreurs carousel)\n  let tries = 0;\n  function multiRun(){\n    run();\n    tries++;\n    if (tries \u003c 8) setTimeout(multiRun, 250); \/\/ 2s total\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", multiRun);\n  } else {\n    multiRun();\n  }\n})();\n\u003c\/script\u003econçu pour éveiller l'instinct naturel de chasse de votre chat.\u003cbr\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e","brand":"NekoZoo","offers":[{"title":"Default Title","offer_id":56923176272198,"sku":null,"price":1.9,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1008\/4227\/5142\/files\/balle-rebondissement-avec-plume.webp?v=1783453430","url":"https:\/\/nekozoo.com\/products\/balle-rebondissement-avec-plume-48","provider":"NekoZoo","version":"1.0","type":"link"}