{"product_id":"pack-de-6-limes-recip-one-1-1","title":"Pack de 6 limes Recip-One Dorées - ROGIN","description":"\u003cdiv class=\"oofti-tier-offer\" data-product-handle=\"recip-one-rogin\" data-unit-price-ttc=\"22.80\"\u003e\n  \u003cdiv class=\"oofti-tier-offer__header\"\u003e\n    \u003cstrong\u003eOffre quantité\u003c\/strong\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"oofti-tier-offer__intro\"\u003e\n    Économisez davantage selon la quantité commandée.\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"oofti-tier-offer__tiers\"\u003e\n    \u003cdiv class=\"oofti-tier-offer__tier\" data-tier=\"1\"\u003e\n      \u003cdiv class=\"oofti-tier-offer__tier-left\"\u003e\n        \u003cstrong\u003eAchetez en 5-9\u003c\/strong\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"oofti-tier-offer__tier-right\"\u003e\n        économisez \u003cstrong\u003e5 %\u003c\/strong\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"oofti-tier-offer__tier\" data-tier=\"2\"\u003e\n      \u003cdiv class=\"oofti-tier-offer__tier-left\"\u003e\n        \u003cstrong\u003eAchetez en 10-49\u003c\/strong\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"oofti-tier-offer__tier-right\"\u003e\n        économisez \u003cstrong\u003e9 %\u003c\/strong\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"oofti-tier-offer__tier\" data-tier=\"3\"\u003e\n      \u003cdiv class=\"oofti-tier-offer__tier-left\"\u003e\n        \u003cstrong\u003eAchetez en 50-100\u003c\/strong\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"oofti-tier-offer__tier-right\"\u003e\n        économisez \u003cstrong\u003e13 %\u003c\/strong\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"oofti-tier-offer__note\"\u003e\n    Remise visible au moment du paiement.\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"oofti-tier-offer__progress\"\u003e\n    \u003cdiv class=\"oofti-tier-offer__progress-bar\" data-offer-bar\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"oofti-tier-offer__status\" data-offer-status\u003e\n    Vérification de l’offre…\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n  .oofti-tier-offer {\n    margin: 16px 0;\n    padding: 16px;\n    border: 1px solid #bfe7df;\n    border-radius: 12px;\n    background: #f6fffc;\n    font-family: inherit;\n  }\n\n  .oofti-tier-offer__header {\n    margin-bottom: 6px;\n    font-size: 16px;\n    line-height: 1.3;\n    color: #163342;\n  }\n\n  .oofti-tier-offer__intro {\n    font-size: 14px;\n    color: #163342;\n    margin-bottom: 12px;\n  }\n\n  .oofti-tier-offer__tiers {\n    display: flex;\n    flex-direction: column;\n    gap: 8px;\n    margin-bottom: 10px;\n  }\n\n  .oofti-tier-offer__tier {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    gap: 12px;\n    padding: 10px 12px;\n    border-radius: 10px;\n    background: #ffffff;\n    border: 1px solid #d9ece7;\n    font-size: 14px;\n    color: #163342;\n  }\n\n  .oofti-tier-offer__tier.is-active {\n    border-color: #39bfa7;\n    background: #ecfbf7;\n  }\n\n  .oofti-tier-offer__tier.is-reached {\n    border-color: #8ad8c7;\n    background: #f3fffb;\n  }\n\n  .oofti-tier-offer__note {\n    font-size: 13px;\n    color: #4f6b78;\n    margin-bottom: 12px;\n  }\n\n  .oofti-tier-offer__progress {\n    width: 100%;\n    height: 10px;\n    background: #dfeceb;\n    border-radius: 999px;\n    overflow: hidden;\n    margin-bottom: 10px;\n  }\n\n  .oofti-tier-offer__progress-bar {\n    height: 100%;\n    width: 0%;\n    border-radius: 999px;\n    background: #39bfa7;\n    transition: width 0.25s ease;\n  }\n\n  .oofti-tier-offer__status {\n    font-size: 14px;\n    color: #163342;\n  }\n\u003c\/style\u003e\n\n\u003cscript\u003e\n  (function() {\n    const container = document.querySelector('.oofti-tier-offer');\n    if (!container) return;\n\n    const productHandle = container.getAttribute('data-product-handle');\n    const unitPriceTTC = Number(container.getAttribute('data-unit-price-ttc')) || 22.8;\n\n    const statusEl = container.querySelector('[data-offer-status]');\n    const barEl = container.querySelector('[data-offer-bar]');\n    const tierEls = container.querySelectorAll('.oofti-tier-offer__tier');\n\n    const tiers = [\n      { min: 5, max: 9, discount: 5 },\n      { min: 10, max: 11, discount: 9 },\n      { min: 50, max: 100, discount: 13 }\n    ];\n\n    function formatEuro(value) {\n      return value.toLocaleString('fr-FR', {\n        style: 'currency',\n        currency: 'EUR'\n      });\n    }\n\n    function clearTierStates() {\n      tierEls.forEach(function(el) {\n        el.classList.remove('is-active');\n        el.classList.remove('is-reached');\n      });\n    }\n\n    function markTierState(qty) {\n      clearTierStates();\n\n      tierEls.forEach(function(el, index) {\n        const tier = tiers[index];\n        if (!tier) return;\n\n        if (qty \u003e= tier.min \u0026\u0026 qty \u003c= tier.max) {\n          el.classList.add('is-active');\n        } else if (qty \u003e tier.max) {\n          el.classList.add('is-reached');\n        }\n      });\n    }\n\n    function getCurrentTier(qty) {\n      return tiers.find(function(tier) {\n        return qty \u003e= tier.min \u0026\u0026 qty \u003c= tier.max;\n      });\n    }\n\n    function getNextTier(qty) {\n      return tiers.find(function(tier) {\n        return qty \u003c tier.min;\n      });\n    }\n\n    function updateProgress(qty) {\n      let progress = 0;\n\n      if (qty \u003c= 0) {\n        progress = 0;\n      } else if (qty \u003c 5) {\n        progress = (qty \/ 5) * 100;\n      } else if (qty \u003c 10) {\n        progress = 100;\n      } else if (qty \u003c 50) {\n        progress = 100;\n      } else {\n        progress = 100;\n      }\n\n      if (barEl) {\n        barEl.style.width = Math.min(progress, 100) + '%';\n      }\n    }\n\n    function updateUI(qty) {\n      markTierState(qty);\n      updateProgress(qty);\n\n      const currentTier = getCurrentTier(qty);\n      const nextTier = getNextTier(qty);\n\n      if (qty \u003c 5) {\n        const remaining = 5 - qty;\n        statusEl.innerHTML =\n          'Ajoutez encore \u003cstrong\u003e' + remaining + '\u003c\/strong\u003e unité' + (remaining \u003e 1 ? 's' : '') +\n          ' pour débloquer \u003cstrong\u003e5 %\u003c\/strong\u003e de remise.';\n        return;\n      }\n\n      if (currentTier) {\n        const unitAfter = unitPriceTTC * (1 - currentTier.discount \/ 100);\n        statusEl.innerHTML =\n          '✅ Offre active : \u003cstrong\u003e' + currentTier.discount + ' %\u003c\/strong\u003e de remise appliquée, soit \u003cstrong\u003e' +\n          formatEuro(unitAfter) + '\u003c\/strong\u003e TTC par unité.';\n        return;\n      }\n\n      if (qty \u003e= 12 \u0026\u0026 qty \u003c 50) {\n        const remaining = 50 - qty;\n        statusEl.innerHTML =\n          'Aucun palier promo entre \u003cstrong\u003e12\u003c\/strong\u003e et \u003cstrong\u003e49\u003c\/strong\u003e unités dans cette configuration. Ajoutez encore \u003cstrong\u003e' +\n          remaining + '\u003c\/strong\u003e unité' + (remaining \u003e 1 ? 's' : '') +\n          ' pour atteindre \u003cstrong\u003e13 %\u003c\/strong\u003e.';\n        return;\n      }\n\n      if (qty \u003e 100) {\n        statusEl.innerHTML =\n          '✅ Vous avez dépassé le palier affiché de \u003cstrong\u003e100\u003c\/strong\u003e unités. Vérifiez dans BOGOS si la remise doit continuer au-delà.';\n        return;\n      }\n\n      if (nextTier) {\n        const remaining = nextTier.min - qty;\n        statusEl.innerHTML =\n          'Ajoutez encore \u003cstrong\u003e' + remaining + '\u003c\/strong\u003e unité' + (remaining \u003e 1 ? 's' : '') +\n          ' pour atteindre \u003cstrong\u003e' + nextTier.discount + ' %\u003c\/strong\u003e de remise.';\n        return;\n      }\n\n      statusEl.innerHTML = 'Remise visible au moment du paiement.';\n    }\n\n    function itemMatchesProduct(item) {\n      if (!item) return false;\n\n      if (item.handle \u0026\u0026 item.handle === productHandle) {\n        return true;\n      }\n\n      if (item.url \u0026\u0026 item.url.indexOf('\/products\/' + productHandle) !== -1) {\n        return true;\n      }\n\n      return false;\n    }\n\n    async function refreshOffer() {\n      try {\n        const res = await fetch('\/cart.js', { credentials: 'same-origin' });\n        const cart = await res.json();\n\n        let totalQty = 0;\n\n        if (cart \u0026\u0026 cart.items \u0026\u0026 Array.isArray(cart.items)) {\n          cart.items.forEach(function(item) {\n            if (itemMatchesProduct(item)) {\n              totalQty += Number(item.quantity || 0);\n            }\n          });\n        }\n\n        updateUI(totalQty);\n      } catch (error) {\n        statusEl.textContent = 'Remise visible au moment du paiement.';\n      }\n    }\n\n    refreshOffer();\n\n    document.addEventListener('DOMContentLoaded', refreshOffer);\n    document.addEventListener('cart:refresh', refreshOffer);\n    document.addEventListener('ajaxProduct:added', refreshOffer);\n\n    document.addEventListener('click', function(e) {\n      const btn = e.target.closest('button[type=\"submit\"], [name=\"add\"], .shopify-payment-button__button');\n      if (!btn) return;\n      setTimeout(refreshOffer, 1200);\n    });\n\n    const cartDrawer = document.querySelector('cart-drawer, .drawer, .cart-drawer');\n    if (cartDrawer \u0026\u0026 window.MutationObserver) {\n      const observer = new MutationObserver(function() {\n        refreshOffer();\n      });\n      observer.observe(cartDrawer, { childList: true, subtree: true });\n    }\n  })();\n\u003c\/script\u003e\n\n\n\u003cp\u003eOutil de réciprocité pour le traitement du canal radiculaire. Instrument sous blister stérile, recommandé à usage unique pour offrir une efficacité de coupe constante, réduire le risque de fractures et diminuer les risques de contamination croisées.\u003c\/p\u003e\n\u003cp\u003e\u003cspan style=\"color: rgb(64, 64, 64);\"\u003e\u003cstrong\u003e\"Nous avons fait tester ces limes par de nombreux endodontistes exclusifs, et le verdict est sans appel : « Les Recip-One bleues sont comparables en tous points aux meilleures limes du marché, offrant une performance inégalée, une résistance exceptionnelle et une précision incomparable. » Leurs retours unanimes confirment la qualité supérieure et la fiabilité incontestable de ce produit, conçu pour répondre aux exigences des pratiques cliniques les plus rigoureuses.\"\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003eLes limes Recip-One se déclinent en trois versions avec des caractéristiques distinctes adaptées aux besoins spécifiques des praticiens :\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eRecip-One Silver\u003c\/strong\u003e : Très performantes en termes de travail et d’efficacité de coupe, elles sont conçues pour les canaux droits. Leur rigidité les rend moins flexibles, mais leur capacité de coupe est optimale dans les cas où la courbure du canal est minimale.\u003c\/p\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eRecip-One Bleues\u003c\/strong\u003e : Ces limes sont extrêmement flexibles, ce qui les rend idéales pour les canaux présentant des courbures prononcées. Leur flexibilité permet une adaptation précise aux contours du canal, minimisant les risques de déviation et de fracture.\u003c\/p\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eRecip-One Dorées\u003c\/strong\u003e : Combinant flexibilité et capacité de coupe, les limes dorées offrent un équilibre parfait entre travail et maniabilité. Elles sont idéales pour les canaux mixtes, c’est-à-dire ceux qui exigent à la fois une bonne capacité de coupe et une certaine flexibilité.\u003c\/p\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eChaque type de lime est conçu pour répondre aux spécificités des traitements endodontiques, offrant aux praticiens un choix adapté à la complexité des canaux à traiter.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003eNous vous proposons sur ce produit les déclinaisons \u003c\/p\u003e\n\u003cp\u003eLongueur : 21, 25, 31 mm\u003c\/p\u003e\n\u003cp\u003eType:\u003c\/p\u003e\n\u003cp\u003e#25 offrant  8% de conicité,\u003cspan\u003e \u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan data-mce-fragment=\"1\"\u003e#\u003c\/span\u003e40\u003cspan\u003e \u003c\/span\u003e\u003cspan data-mce-fragment=\"1\"\u003eoffrant 6\u003c\/span\u003e\u003cspan data-mce-fragment=\"1\"\u003e% de conicité\u003c\/span\u003e,\u003c\/p\u003e\n\u003cp\u003e\u003cspan data-mce-fragment=\"1\"\u003e#\u003c\/span\u003e\u003cspan\u003e \u003c\/span\u003e50 \u003cspan data-mce-fragment=\"1\"\u003eoffrant 5\u003c\/span\u003e\u003cspan data-mce-fragment=\"1\"\u003e% de conicité\u003c\/span\u003e\u003cspan\u003e \u003c\/span\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\u003cimg style=\"float: none;\" alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0335\/9873\/4474\/files\/reciponecross_100x100.jpg?v=1603209004\"\u003e\u003c\/div\u003e\n\u003cp\u003e\u003cspan\u003eSa forme en S (coupe transversale) améliore sa flexibilité. \u003cstrong\u003eUn seul instrument peut être utilisé pour la préparation d'un canal radiculaire. \u003c\/strong\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eVendu par pack de 6 limes \u003c\/span\u003e\u003c\/p\u003e","brand":"Dental Coop","offers":[{"title":"L 21mm - #25","offer_id":50968682791239,"sku":"RECIPLIMD_21_25","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 21mm - #40","offer_id":50968682824007,"sku":"RECIPLIMD_21_40","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 21mm - #50","offer_id":50968682856775,"sku":"RECIPLIMD_21_50","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 21 mm #25 #40 #50","offer_id":50968682889543,"sku":"RECIPLIMD_21_ASSO","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 25mm, #25","offer_id":39345036165272,"sku":"RECIPLIMD_25_25","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 25mm - #40","offer_id":50968682922311,"sku":"RECIPLIMD_25_40","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 25mm - #50","offer_id":50968682955079,"sku":"RECIPLIMD_25_50","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 25 mm #25 #40 #50","offer_id":50968682987847,"sku":"RECIPLIMD_25_ASSO","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 31mm - #25","offer_id":50968683020615,"sku":"RECIPLIMD_31_25","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 31mm - #40","offer_id":50968683053383,"sku":"RECIPLIMD_31_40","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 31mm - #50","offer_id":50968683086151,"sku":"RECIPLIMD_31_50","price":19.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0335\/9873\/4474\/products\/ronegold.jpg?v=1615209483","url":"https:\/\/ootopfti.com\/products\/pack-de-6-limes-recip-one-1-1","provider":"ootopfti.com","version":"1.0","type":"link"}