{"product_id":"pack-de-6-limes-recip-one-1","title":"Pack of 6 Recip-One Silver files - 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\u003eQuantity offer\u003c\/strong\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"oofti-tier-offer__intro\"\u003e\n    Save more depending on the quantity ordered.\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\u003eBuy in 5-9\u003c\/strong\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"oofti-tier-offer__tier-right\"\u003e\n        save \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\u003eBuy in 10-49\u003c\/strong\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"oofti-tier-offer__tier-right\"\u003e\n        save \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\u003eBuy in 50-100\u003c\/strong\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"oofti-tier-offer__tier-right\"\u003e\n        save \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    Discount visible at checkout.\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    Checking the offer…\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   \u003cp\u003eReciprocation tool for root canal treatment. Instruments in sterile blister packs, recommended for single use to provide consistent cutting efficiency, reduce the risk of fractures, and decrease cross-contamination risks.\u003c\/p\u003e\n\u003cp\u003e\u003cspan style=\"color: rgb(64, 64, 64);\"\u003e\u003cstrong\u003e\"We had these files tested by many exclusive endodontists, and the verdict is clear: “The Recip-One Blue files are comparable in every way to the best files on the market, offering unmatched performance, exceptional durability, and unparalleled precision.” Their unanimous feedback confirms the superior quality and undeniable reliability of this product, designed to meet the demands of the most rigorous clinical practices.\"\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003eRecip-One files come in three versions with distinct characteristics tailored to the specific needs of practitioners:\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eRecip-One Silver\u003c\/strong\u003e: Highly efficient in terms of work and cutting effectiveness, they are designed for straight canals. Their rigidity makes them less flexible, but their cutting ability is optimal in cases where the canal curvature is minimal.\u003c\/p\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eRecip-One Blue\u003c\/strong\u003e: These files are extremely flexible, making them ideal for canals with pronounced curves. Their flexibility allows precise adaptation to the canal contours, minimizing the risk of deviation and fracture.\u003c\/p\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eRecip-One Gold\u003c\/strong\u003e: Combining flexibility and cutting ability, the gold files offer a perfect balance between work and maneuverability. They are ideal for mixed canals, meaning those that require both good cutting ability and some flexibility.\u003c\/p\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eEach type of file is designed to meet the specific needs of endodontic treatments, providing practitioners with a choice suited to the complexity of the canals to be treated.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003eWe offer the following variations for this product  \u003c\/p\u003e\n\u003cp\u003eLength: 21, 25, 31 mm\u003c\/p\u003e\n\u003cp\u003eType#: 25 offering 8% taper,\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\"\u003eoffering 6\u003c\/span\u003e\u003cspan data-mce-fragment=\"1\"\u003e% taper\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\"\u003eoffering 5\u003c\/span\u003e\u003cspan data-mce-fragment=\"1\"\u003e% taper\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\u003eIts S-shape (cross-section) improves its flexibility. \u003cstrong\u003eOnly one instrument can be used for root canal preparation.\u003c\/strong\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eSold in packs of 6 files\u003c\/span\u003e\u003c\/p\u003e","brand":"Dental Coop","offers":[{"title":"L 21mm, #25","offer_id":38010429243544,"sku":"RECIPLIMNRM_21_25","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 21mm #40","offer_id":38010429276312,"sku":"RECIPLIMNRM_21_40","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 21mm #50","offer_id":38010429309080,"sku":"RECIPLIMNRM_21_50","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 25mm, #25","offer_id":38010429341848,"sku":"RECIPLIMNRM_25_25","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 25mm, #40","offer_id":38010429374616,"sku":"RECIPLIMNRM_25_40","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 25mm, #50","offer_id":38010429407384,"sku":"RECIPLIMNRM_25_50","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 25mm, #25 #40 #50","offer_id":38010429440152,"sku":"RECIPLIMNRM_25_ASS","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 31mm, #25","offer_id":38010429472920,"sku":"RECIPLIMNRM_31_25","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 31mm, #40","offer_id":38010429505688,"sku":"RECIPLIMNRM_31_40","price":19.0,"currency_code":"EUR","in_stock":true},{"title":"L 31mm, #50","offer_id":38010429538456,"sku":"RECIPLIMNRM_31_50","price":19.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0335\/9873\/4474\/products\/recipfiles2_b509328a-b8b5-4c18-8495-9685099a87d6.jpg?v=1618931724","url":"https:\/\/ootopfti.com\/en\/products\/pack-de-6-limes-recip-one-1","provider":"ootopfti.com","version":"1.0","type":"link"}