PageSourceSearch

https://franklinpetfood.com/cdn/shop/t/442/assets/product-page-revamp.js?v=37317077632144237851788793229

js franklinpetfood.com collected 2026-09-28 05:49:43 UTC 65,629 bytes, 2 lines download raw bytes

1(function(){function initLirePlus(){var lineCount=3;document.querySelectorAll("[data-product-lire-plus]").forEach(function(wrap){var text=wrap.querySelector("[data-lire-plus-text]"),toggle=wrap.querySelector("[data-lire-plus-toggle]");if(!text||!toggle)return;var fullHTML=text.innerHTML,fullText=(text.textContent||"").replace(/\s+/g," ").trim(),lineHeight=parseFloat(window.getComputedStyle(wrap).lineHeight)||20,maxHeight=lineHeight*lineCount+1;function overflows(){return wrap.scrollHeight>maxHeight}function applyCollapse(){if(text.classList.add("is-collapsed"),text.innerHTML=fullHTML,toggle.hidden=!1,toggle.textContent="Lire plus",toggle.setAttribute("aria-expanded","false"),!overflows()){toggle.hidden=!0;return}for(var lo=0,hi=fullText.length,best=0;lo<=hi;){var mid=lo+hi>>1;text.textContent=fullText.slice(0,mid).replace(/\s+$/,"")+"...",overflows()?hi=mid-1:(best=mid,lo=mid+1)}var clipped=fullText.slice(0,best).replace(/\s+$/,""),lastSpace=clipped.lastIndexOf(" ");for(lastSpace>24&&(clipped=clipped.slice(0,lastSpace)),text.textContent=clipped+"...";overflows()&&clipped.length;)clipped=clipped.slice(0,-1).replace(/\s+$/,""),text.textContent=clipped+"..."}function applyExpand(){text.classList.remove("is-collapsed"),text.innerHTML=fullHTML,toggle.hidden=!1,toggle.textContent="Lire moins",toggle.setAttribute("aria-expanded","true")}requestAnimationFrame(applyCollapse),toggle.addEventListener("click",function(){var collapsing=!text.classList.contains("is-collapsed");collapsing?applyCollapse():applyExpand(),window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_description",name:collapsing?"lire_moins":"lire_plus",click_text:toggle.textContent,click_link:"/"}}))})})}function initMarketingPushTracking(){document.querySelectorAll("[data-marketing-push]").forEach(function(el){el.addEventListener("click",function(){var url=el.getAttribute("data-marketing-push-url")||el.getAttribute("href")||"/";window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_marketing_push",name:"marketing_push_click",click_text:"marketing_push",click_link:url}}))})})}function applyUgcCtaSizes(root){if(root)for(var nodes=root.querySelectorAll("button, a, span"),i=0;i<nodes.length;i++){var el=nodes[i];if(!el.classList.contains("product-ugc__arrow")){var text=(el.textContent||"").replace(/\s+/g," ").trim();text==="Publier un contenu"?el.style.display="none":text==="Voir plus"&&(el.style.fontSize="14px")}}}function stripFaqQuestionNumbers(){document.querySelectorAll("#section-faq .faq-group__question-container").forEach(function(el){var text=(el.textContent||"").replace(/^\s*\d+[\.\)\-:]\s+/,"");text&&text!==el.textContent&&(el.textContent=text)})}function countUgcPosts(flow){if(!flow)return 0;for(var selectors=[".bzfy-c-tilegrid-post",".bzfy-t-feed-tile-grid > *",".flb-post",".flowbox-post",".flb-feed__item",".flb-card","[data-post]"],i=0;i<selectors.length;i++){var nodes=flow.querySelectorAll(selectors[i]);if(nodes.length)return nodes.length}return 0}function syncUgcEmptyState(section,flow,ready){var count=countUgcPosts(flow),fallbacks=document.querySelectorAll("[data-reviews-ugc-fallback]");if(count>0){section.classList.remove("is-empty"),section.removeAttribute("hidden"),fallbacks.forEach(function(el){el.setAttribute("hidden","")});return}ready&&(section.classList.add("is-empty"),section.setAttribute("hidden",""),fallbacks.forEach(function(el){el.removeAttribute("hidden")}))}function initUgcNav(){var ugcSections=document.querySelectorAll("[data-product-ugc]");if(!ugcSections.length){document.querySelectorAll("[data-reviews-ugc-fallback]").forEach(function(el){el.removeAttribute("hidden")});return}window.productflowboxPromotions&&typeof window.productflowboxPromotions.init=="function"&&window.productflowboxPromotions.init(),document.querySelectorAll("[data-product-ugc]").forEach(function(section){var flow=section.querySelector(".product-ugc__flow")||section.querySelector(".product-flowbox-sections");if(flow){applyUgcCtaSizes(section);var ctaObserver=new MutationObserver(function(){applyUgcCtaSizes(section),syncUgcEmptyState(section,flow,countUgcPosts(flow)>0)});ctaObserver.observe(section,{childList:!0,subtree:!0});var attempts=0,timer=setInterval(function(){attempts+=1;var count=countUgcPosts(flow);syncUgcEmptyState(section,flow,count>0||attempts>8),(count>0||attempts>20)&&(clearInterval(timer),syncUgcEmptyState(section,flow,!0))},500);flow.addEventListener("click",function(e){var video=e.target.closest("video, .flb-video, [data-vi
1deo], .bzfy-c-tilegrid-post");video&&window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_ugc",name:"ugc_video",click_text:"ugc_video",click_link:"/"}}))})}}),window.addEventListener("resize",function(){document.querySelectorAll("[data-product-ugc]").forEach(applyUgcCtaSizes)})}function initCrossSell(){document.querySelectorAll("[data-product-cross-sell]").forEach(function(root){var track=root.querySelector("[data-cross-sell-track]"),prev=root.querySelector("[data-cross-sell-prev]"),next=root.querySelector("[data-cross-sell-next]"),nav=root.querySelector("[data-cross-sell-nav]");if(!track||track.getAttribute("data-cross-sell-ready"))return;var originals=Array.prototype.slice.call(track.querySelectorAll("[data-cross-sell-card]"));if(!originals.length)return;if(track.setAttribute("data-cross-sell-ready","true"),originals.length<2){nav&&nav.setAttribute("hidden","");return}originals.forEach(function(card){var endClone=card.cloneNode(!0);endClone.setAttribute("data-cross-sell-clone","end"),endClone.setAttribute("tabindex","-1"),endClone.setAttribute("aria-hidden","true"),track.appendChild(endClone)}),originals.slice().reverse().forEach(function(card){var startClone=card.cloneNode(!0);startClone.setAttribute("data-cross-sell-clone","start"),startClone.setAttribute("tabindex","-1"),startClone.setAttribute("aria-hidden","true"),track.insertBefore(startClone,track.firstChild)});var jumping=!1;function setWidth(){var firstClone=track.querySelector('[data-cross-sell-clone="start"]');return firstClone?originals[0].offsetLeft-firstClone.offsetLeft:originals[0].offsetLeft}function cardStep(){if(originals[1])return originals[1].offsetLeft-originals[0].offsetLeft;var styles=window.getComputedStyle(track),gap=parseFloat(styles.columnGap||styles.gap)||12;return originals[0].getBoundingClientRect().width+gap}function jump(to){jumping=!0,track.style.scrollSnapType="none",track.scrollLeft=to,requestAnimationFrame(function(){track.style.scrollSnapType="",jumping=!1})}function normalize(){if(!jumping){var w=setWidth();if(!(w<=0)){var x=track.scrollLeft;x<w?jump(x+w):x>=w*2&&jump(x-w)}}}function goToOriginals(){jump(setWidth())}requestAnimationFrame(function(){requestAnimationFrame(goToOriginals)});var scrollTimer;track.addEventListener("scroll",function(){jumping||(clearTimeout(scrollTimer),scrollTimer=setTimeout(normalize,140))},{passive:!0}),track.addEventListener("scrollend",normalize);function scrollByDir(dir){track.scrollBy({left:cardStep()*dir,behavior:"smooth"}),setTimeout(normalize,420),window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_cross_sell",name:dir<0?"cross_sell_prev":"cross_sell_next",click_text:"cross_sell_arrow",click_link:"/"}}))}prev&&prev.addEventListener("click",function(){scrollByDir(-1)}),next&&next.addEventListener("click",function(){scrollByDir(1)}),track.addEventListener("click",function(e){var card=e.target.closest("[data-cross-sell-card]");card&&window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_cross_sell",name:"cross_sell_product_click",click_text:card.getAttribute("data-product-name")||"cross_sell_product",click_link:card.getAttribute("href")||"/"}}))});var resizeTimer;window.addEventListener("resize",function(){clearTimeout(resizeTimer),resizeTimer=setTimeout(goToOriginals,150)})}),document.querySelectorAll(".product-suggestions [data-add-to-cart], .product-suggestions .product-card__button, .product-suggestions button").forEach(function(btn){btn.addEventListener("click",function(){window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_cross_sell",name:"cross_sell_add_to_cart",click_text:btn.textContent.trim()||"cross_sell_atc",click_link:"/"}}))})})}function formatPrice(value){return!value&&value!==0?"":String(value).replace(".",",")+"\u20AC"}function syncFormatPrices(isSubscription){document.querySelectorAll("[data-pdp-revamp] [data-format-price]").forEach(function(card){var main=card.querySelector("[data-format-price-main]"),secondary=card.querySelector("[data-format-price-secondary]");if(main){var otp=card.getAttribute("data-price-otp"),sub=card.getAttribute("data-price-sub"),compare=card.getAttribute("data-price-compare"),unit=card.getAttribute("data-price-unit");isSubscription?(main.textContent=formatPrice(sub||otp),secondary&&(secondary.textContent=formatPrice(otp),secondary.classList.remove("variant-compare--unit"),secondary.hidden=!1)):(main.textContent=formatPrice(otp),secondary&&(compare?(secondary.textContent=formatPrice(compare),secondary.classList.remove("variant-compare--unit"),secondary.hidden=!1):unit?(secondary.textContent=unit,secondary.classList.add("variant-compare--unit"),secondary.hidden=!1):(secondary.textContent="",secondary.hidden=!0)))}})}
1function syncSubscriptionDetails(isSubscription){document.querySelectorAll("[data-pdp-revamp] .product__buy-options--subscription").forEach(function(block){block.classList.toggle("is-selected",isSubscription)})}function getSelectedPurchaseOption(){var checked=document.querySelector('#product-buy-section input[name="buy-options"]:checked');return checked&&checked.value==="subscription"}function syncPurchasePrices(){var isSubscription=getSelectedPurchaseOption();syncFormatPrices(isSubscription),syncSubscriptionDetails(isSubscription),syncCalculateurSubscribeCta()}function syncCalculateurSubscribeCta(){document.querySelectorAll("[data-calculateur-revamp-subscribe]").forEach(function(btn){btn.hidden=!1,btn.removeAttribute("hidden")})}function syncAtcComparePrice(){document.querySelectorAll("[data-pdp-revamp] .product__only-one-time .product-add-to-cart .inline-price .product-old-price").forEach(function(el){var inner=el.querySelector("[data-oneshot-quantity-price-rrp]"),val=inner?String(inner.textContent||"").replace(/[^\d.,]/g,"").trim():"";val?el.removeAttribute("hidden"):el.setAttribute("hidden","")})}function initAtcComparePrice(){if(document.querySelector("[data-pdp-revamp] .product__only-one-time")){syncAtcComparePrice();var observer=new MutationObserver(function(){syncAtcComparePrice()});document.querySelectorAll("[data-pdp-revamp] .product__only-one-time [data-oneshot-quantity-price-rrp], [data-pdp-revamp] .product__only-one-time [data-oneshot-unit-price-rrp]").forEach(function(el){observer.observe(el,{childList:!0,characterData:!0,subtree:!0})})}}function clearFrequencyError(){document.querySelectorAll("[data-pdp-revamp] .product-subscription-frequence.is-error, [data-pdp-revamp] .frequency-selector.is-error").forEach(function(el){el.classList.remove("is-error")})}function initFrequencyValidation(){document.querySelectorAll("[data-pdp-revamp] #frequence, [data-pdp-revamp] [data-frequency-selector]").forEach(function(select){select.addEventListener("change",function(){clearFrequencyError(),window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_purchase_option",name:"frequency_change",click_text:select.value||"frequency",click_link:"/"}}))})})}function initPurchaseOptionTracking(){document.querySelectorAll('#product-buy-section input[name="buy-options"]').forEach(function(input){input.addEventListener("change",function(){syncPurchasePrices(),input.value!=="subscription"&&clearFrequencyError(),window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_purchase_option",name:"view_subscription_choice",click_text:input.value,click_link:"/"}}))})}),syncPurchasePrices()}function initCompositionAccordion(){document.querySelectorAll("[data-composition-accordion]").forEach(function(root){var items=root.querySelectorAll(".product-composition-accordion__item");items.forEach(function(item){var trigger=item.querySelector("[data-composition-trigger]");trigger&&trigger.addEventListener("click",function(){var willOpen=!item.classList.contains("is-open");item.classList.toggle("is-open",willOpen),trigger.setAttribute("aria-expanded",willOpen?"true":"false"),willOpen&&window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_drawer",name:"drawer_open",click_text:trigger.getAttribute("data-drawer-label")||trigger.textContent.trim(),click_link:"/"}}))})})})}function initIngredientsBenefits(){document.querySelectorAll("[data-ingredients-benefits]").forEach(function(root){var slides=root.querySelectorAll("[data-ingredients-slide]"),prev=root.querySelector("[data-ingredients-prev]"),next=root.querySelector("[data-ingredients-next]"),counter=root.querySelector("[data-ingredients-counter]");if(!slides.length)return;var index=0,total=slides.length;function goTo(nextIndex,dir){total<1||(index=(nextIndex%total+total)%total,slides.forEach(function(slide,i){var active=i===index;slide.classList.toggle("is-active",active),active?slide.removeAttribute("hidden"):slide.setAttribute("hidden","")}),counter&&(counter.textContent=index+1+"/"+total),typeof dir=="number"&&window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_ingredients_benefits",name:dir<0?"ingredients_prev":"ingredients_next",click_text:"ingredients_arrow",click_link:"/"}})))}prev&&prev.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation(),goTo(index-1,-1)}),next&&next.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation(),goTo(index+1,1)}),goTo(0)})}function initGalleryVideos(){document.querySelectorAll("[data-pdp-revamp] .product__slide.is-vi
1deo").forEach(function(slide){var wrap=slide.querySelector(".has-video"),video=slide.querySelector("video");!wrap||!video||(video.setAttribute("playsinline",""),video.setAttribute("webkit-playsinline",""),video.setAttribute("controls",""),video.controls=!0,wrap.classList.remove("not-playing"),video.addEventListener("play",function(){wrap.classList.remove("not-playing")}),video.addEventListener("pause",function(){wrap.classList.remove("not-playing")}),video.addEventListener("ended",function(){wrap.classList.remove("not-playing");try{video.currentTime=0}catch(err){}}))})}function initProblematiqueAccordion(){document.querySelectorAll("[data-product-problematique]").forEach(function(root){var items=root.querySelectorAll(".product-problematique__item");items.forEach(function(item){var trigger=item.querySelector("[data-problematique-trigger]");trigger&&trigger.addEventListener("click",function(){var willOpen=!item.classList.contains("is-open");if(item.classList.toggle("is-open",willOpen),trigger.setAttribute("aria-expanded",willOpen?"true":"false"),willOpen){var label=item.querySelector(".product-problematique__label");window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_problematique",name:"problematique_open",click_text:label?label.textContent.trim():"problematique",click_link:"/"}}))}})})})}function youtubeIdFromUrl(url){if(!url)return"";var match=String(url).match(/(?:youtu\.be\/|youtube\.com\/(?:watch\?v=|embed\/|shorts\/))([A-Za-z0-9_-]{11})/);return match?match[1]:""}function vimeoIdFromUrl(url){if(!url)return"";var match=String(url).match(/vimeo\.com\/(?:video\/)?(\d+)/);return match?match[1]:""}var recipeVideoLightboxState={card:null,cards:[],tapCandidate:!1,pipActive:!1};function getRecipeVideoLightbox(){var lightbox=document.querySelector("[data-recipe-video-lightbox]");return lightbox&&!lightbox.querySelector("[data-recipe-video-lightbox-fullscreen]")&&(lightbox.remove(),lightbox=null),lightbox||(lightbox=document.createElement("div"),lightbox.className="product-recipe-videos-lightbox",lightbox.setAttribute("data-recipe-video-lightbox",""),lightbox.setAttribute("hidden",""),lightbox.setAttribute("role","dialog"),lightbox.setAttribute("aria-modal","true"),lightbox.setAttribute("aria-label","Vid\xE9o"),lightbox.innerHTML='<div class="product-recipe-videos-lightbox__dialog"><button type="button" class="product-recipe-videos-lightbox__close" data-recipe-video-lightbox-close aria-label="Fermer"><svg width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true"><path d="M1 1L11 11M11 1L1 11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg></button><button type="button" class="product-recipe-videos-lightbox__fullscreen" data-recipe-video-lightbox-fullscreen aria-label="Plein \xE9cran"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><path d="M2 6V2h4M10 2h4v4M14 10v4h-4M6 14H2v-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></button><button type="button" class="product-recipe-videos-lightbox__play-toggle" data-recipe-video-lightbox-play-toggle hidden aria-label="Lecture"><svg width="28" height="28" viewBox="0 0 26 26" fill="none" aria-hidden="true"><circle cx="13" cy="13" r="12" stroke="white" stroke-width="1.5"/><path d="M17.5 13L10.5 17.5V8.5L17.5 13Z" fill="white"/></svg></button><video class="product-recipe-videos-lightbox__media" data-recipe-video-lightbox-player playsinline webkit-playsinline></video><iframe class="product-recipe-videos-lightbox__media" data-recipe-video-lightbox-iframe hidden title="Vid\xE9o" allow="autoplay; fullscreen" allowfullscreen></iframe></div>',document.body.appendChild(lightbox),lightbox)}function resetRecipeVideoLightboxChrome(lightbox){var dialog=lightbox&&lightbox.querySelector(".product-recipe-videos-lightbox__dialog");dialog&&(dialog.style.transform="",dialog.style.transition="",dialog.style.aspectRatio="",dialog.style.width="",dialog.style.height="",dialog.classList.remove("is-paused"),dialog.style.removeProperty("--recipe-video-ar")),lightbox&&(lightbox.style.opacity="",lightbox.style.removeProperty("--recipe
1-video-ar"))}function fitRecipeVideoLightboxToMedia(lightbox,player){var dialog=lightbox&&lightbox.querySelector(".product-recipe-videos-lightbox__dialog");if(!(!dialog||!player)){var w=player.videoWidth,h=player.videoHeight;if(!(!w||!h)){var ratio=w/h,gutter=window.matchMedia("(max-width: 800px)").matches?60:0;dialog.style.setProperty("--recipe-video-ar",String(ratio)),dialog.style.aspectRatio=w+" / "+h;var maxW=Math.max(0,window.innerWidth-gutter),maxH=Math.max(0,window.innerHeight-gutter);ratio>=maxW/maxH?(dialog.style.width=maxW+"px",dialog.style.height=maxW/ratio+"px"):(dialog.style.height=maxH+"px",dialog.style.width=maxH*ratio+"px")}}}function syncRecipeVideoPlayUi(lightbox){var player=lightbox&&lightbox.querySelector("[data-recipe-video-lightbox-player]"),dialog=lightbox&&lightbox.querySelector(".product-recipe-videos-lightbox__dialog"),playToggle=lightbox&&lightbox.querySelector("[data-recipe-video-lightbox-play-toggle]");if(!(!player||!dialog)){var paused=player.paused;dialog.classList.toggle("is-paused",paused),playToggle&&(playToggle.hidden=!paused||player.hidden,playToggle.setAttribute("aria-label",paused?"Lecture":"Pause"))}}function toggleRecipeVideoPlayback(){var lightbox=document.querySelector("[data-recipe-video-lightbox]"),player=lightbox&&lightbox.querySelector("[data-recipe-video-lightbox-player]");if(!(!player||player.hidden||lightbox.hasAttribute("hidden"))){if(player.paused){var playPromise=player.play();playPromise&&typeof playPromise.catch=="function"&&playPromise.catch(function(){})}else player.pause();syncRecipeVideoPlayUi(lightbox)}}function enterRecipeVideoFullscreen(player,options){if(player){options=options||{};var onFail=typeof options.onFail=="function"?options.onFail:null,onExit=typeof options.onExit=="function"?options.onExit:null;player.setAttribute("controls",""),player.controls=!0;var fail=function(){onFail?onFail():options.closeOnExit?closeRecipeVideoLightbox():(player.removeAttribute("controls"),player.controls=!1)},done=function(){if(isRecipeVideoInPip(player)){onExit?onExit("pip"):releaseRecipeVideoLightboxForPip();return}if(onExit){onExit("close");return}if(options.closeOnExit){closeRecipeVideoLightbox();return}player.removeAttribute("controls"),player.controls=!1,syncRecipeVideoPlayUi(document.querySelector("[data-recipe-video-lightbox]"))},entered=!1,attempting=!1,tryEnter=function(){if(!(entered||attempting)){if(attempting=!0,typeof player.webkitEnterFullscreen=="function"){var onEnd=function(){player.removeEventListener("webkitendfullscreen",onEnd),done()};player.addEventListener("webkitendfullscreen",onEnd);try{player.webkitEnterFullscreen()}catch(err){attempting=!1,player.removeEventListener("webkitendfullscreen",onEnd),fail();return}window.setTimeout(function(){var mode=player.webkitPresentationMode;if(mode==="fullscreen"||mode==="picture-in-picture"){entered=!0,player.setAttribute("data-was-native-fs","true");return}attempting=!1,player.removeEventListener("webkitendfullscreen",onEnd),fail()},450);return}if(typeof player.requestFullscreen=="function"){var promise=player.requestFullscreen();if(promise&&typeof promise.then=="function"){promise.then(function(){entered=!0,player.setAttribute("data-was-native-fs","true");var onFsChange=function(){document.fullscreenElement||(document.removeEventListener("fullscreenchange",onFsChange),done())};document.addEventListener("fullscreenchange",onFsChange)}).catch(function(){attempting=!1,fail()});return}}attempting=!1,fail()}},armReady=function(){entered||attempting||player.readyState>=1&&tryEnter()};player.readyState>=1?tryEnter():(player.addEventListener("loadedmetadata",armReady,{once:!0}),player.addEventListener("loadeddata",armReady,{once:!0}),player.addEventListener("canplay",armReady,{once:!0}))}}function bindInlineRecipeVideoNativeFs(player){if(!(!player||player.getAttribute("data-inline-fs-bou
1nd"))){player.setAttribute("data-inline-fs-bound","true");var resetInline=function(){if(!isRecipeVideoInPip(player)){player.pause(),player.removeAttribute("controls"),player.controls=!1;try{player.currentTime=0}catch(err){}var card=player.closest("[data-recipe-video-card]");card&&card.classList.remove("is-playing")}};player.addEventListener("webkitendfullscreen",resetInline),document.addEventListener("fullscreenchange",function(){document.fullscreenElement!==player&&(document.fullscreenElement||player.getAttribute("data-was-native-fs")==="true"&&(player.removeAttribute("data-was-native-fs"),resetInline()))}),player.addEventListener("enterpictureinpicture",function(){var card=player.closest("[data-recipe-video-card]");card&&card.classList.remove("is-playing")}),player.addEventListener("leavepictureinpicture",resetInline),player.addEventListener("webkitpresentationmodechanged",function(){if(player.webkitPresentationMode==="fullscreen")player.setAttribute("data-was-native-fs","true");else if(player.webkitPresentationMode==="picture-in-picture"){player.removeAttribute("data-was-native-fs");var card=player.closest("[data-recipe-video-card]");card&&card.classList.remove("is-playing")}else player.webkitPresentationMode==="inline"&&resetInline()})}}function openRecipeVideoNativeFromCard(card){var player=card.querySelector("[data-recipe-video-player]"),videoSrc=card.getAttribute("data-video-src");if(!player||!videoSrc)return!1;bindInlineRecipeVideoNativeFs(player),card.classList.add("is-playing"),player.setAttribute("playsinline",""),player.setAttribute("webkit-playsinline",""),player.setAttribute("preload","auto"),player.getAttribute("src")||player.setAttribute("src",videoSrc),player.setAttribute("controls",""),player.controls=!0,player.muted=!1;var startFs=function(){enterRecipeVideoFullscreen(player,{onFail:function(){card.classList.remove("is-playing"),player.pause(),player.removeAttribute("controls"),player.controls=!1,openRecipeVideoLightbox(card,{forceLightbox:!0})},onExit:function(reason){if(reason!=="pip"){player.pause(),player.removeAttribute("controls"),player.controls=!1;try{player.currentTime=0}catch(err){}card.classList.remove("is-playing")}}})},playPromise=player.play();return playPromise&&typeof playPromise.then=="function"?playPromise.then(startFs).catch(function(){return player.muted=!0,player.play().then(startFs)}).catch(function(){startFs()}):startFs(),!0}function isRecipeVideoInPip(player){return player?document.pictureInPictureElement===player||player.webkitPresentationMode==="picture-in-picture":!1}function stageRecipeVideoOffscreen(lightbox){lightbox&&(lightbox.classList.add("is-direct-fs"),lightbox.classList.remove("is-pip"),lightbox.removeAttribute("hidden"),document.body.classList.remove("is-recipe-video-lightbox"))}function releaseRecipeVideoLightboxForPip(){var lightbox=document.querySelector("[data-recipe-video-lightbox]");if(lightbox){var player=lightbox.querySelector("[data-recipe-video-lightbox-player]");if(recipeVideoLightboxState.pipActive=!0,lightbox.classList.add("is-pip"),lightbox.classList.remove("is-direct-fs"),lightbox.removeAttribute("hidden"),resetRecipeVideoLightboxChrome(lightbox),document.body.classList.remove("is-recipe-video-lightbox"),player&&(player.removeAttribute("controls"),player.controls=!1,player.paused)){var playPromise=player.play();playPromise&&typeof playPromise.catch=="function"&&playPromise.catch(function(){})}}}function closeRecipeVideoLightbox(){var lightbox=document.querySelector("[data-recipe-video-lightbox]");if(lightbox){var isStaged=lightbox.classList.contains("is-pip")||lightbox.classList.contains("is-direct-fs");if(!(lightbox.hasAttribute("hidden")&&!isStaged)){var player=lightbox.querySelector("[data-recipe-video-lightbox-player]"),iframe=lightbox.querySelector("[data-recipe-video-lightbox-iframe]"),fsBtn=lightbox.querySelector("[data-recipe-video-lightbox-fullscreen]"),playToggle=lightbox.querySelector("[data-recipe-video-lightbox-play-toggle]");if(isRecipeVideoInPip(player)){releaseRecipeVideoLightboxForPip();return}player&&(player.pause(),player.removeAttribute("controls"),player.controls=!1,player.removeAttribute("src"),player.load()),iframe&&(iframe.hidden=!0,iframe.removeAttribute("src")),player&&(player.hidden=!1),fsBtn&&(fsBtn.hidden=!1),playToggle&&(playToggle.hidden=!0),resetRecipeVideoLightboxChrome(lightbox),lightbox.classList.remove("is-pip"),lightbox.classList.remove("is-direct-fs"),lightbox.setAttribute("hidden",""),document.body.classList.remove("is-recipe-video-lightbox"),recipeVideoLightboxState.card=null,recipeVideoLightboxState.cards=[],recipeVideoLightboxState.pipActive=!1}}}function cleanupRecipeVideoAfterPip(){var lightbox=document.querySelector("[data-recipe-video-lightbox]"),player=lightbox&&lightbox.querySelector("[data-recipe-video-lightbox-player]");recipeVideoLightboxState.pipActive=!1,lightbox&&(lightbox.classList.remove("is-pip"),lightbox.classList.remove("is-direct-fs")),!(player&&isRecipeVideoInPip(player))&&closeRecipeVideoLightbox()}function getNextRecipeVideoCard(){var cards=recipeVideoLightboxState.cards,current=recipeVideoLightboxState.card;if(!cards.length||!current)return null;var idx=cards.indexOf(current);return idx<0||idx>=cards.length-1?null:cards[idx+1]}function getPrevRecipeVideoCard(){var cards=recipeVideoLightboxState.cards,current=recipeVideoLightboxState.card;if(!cards.length||!current)return null;var idx=cards.indexOf(current);return idx<=0?null:cards[idx-1]}function goToRecipeVideoCard(card,direction){var lightbox=document.querySelector("[data-recipe-video-lightbox]"),dialog=lightbox&&lightbox.querySelector(".product-recipe-videos-lightbox__dialog");dialog&&(dialog.style.transition="transform 180ms ease-out",dialog.style.transform=direction<0?"translateX(-110%)":"translateX(110%)"),lightbox&&(lightbox.style.opacity="0"),window.setTimeout(function(){openRecipeVideoLightbox(card)},160)}function bindRecipeVideoLightboxSwipe(lightbox){var dialog=lightbox.querySelector(".product-recipe-videos-lightbox__dialog"),startX=0,startY=0,dx=0,dy=0,tracking=!1,axis=null;lightbox.addEventListener("touchstart",function(e){if(e.touches.length!==1){tracking=!1;return}if(e.target.closest("button")){tracking=!1;return}startX=e.touches[0].clientX,startY=e.touches[0].clientY,dx=0,dy=0,axis=null,tracking=!0,recipeVideoLightboxState.tapCandidate=!0,dialog&&(dialog.style.transition="none")},{passive:!0}),lightbox.addEventListener("touchmove",function(e){if(tracking&&(dx=e.touches[0].clientX-startX,dy=e.touches[0].clientY-startY,!!dialog)){if(!axis){if(Math.abs(dx)<8&&Math.abs(dy)<8)return;axis=Math.abs(dy)>=Math.abs(dx)?"y":"x",recipeVideoLightboxState.tapCandidate=!1}if(axis==="y"){dialog.style.transform="translateY("+dy+"px)",lightbox.style.opacity=String(Math.max(0,1-Math.abs(dy)/280));return}var hasNeighbor=dx<0?!!getNextRecipeVideoCard():!!getPrevRecipeVideoCard(),pull=hasNeighbor?dx:dx*.25;dialog.style.transform="translateX("+pull+"px)",lightbox.style.opacity=String(hasNeighbor?Math.max(.35,1-Math.abs(dx)/420):Math.max(.55,1-Math.abs(dx)/480))}},{passive:!0}),lightbox.addEventListener("touchend",function(){if(tracking){tracking=!1;var wasTap=recipeVideoLightboxState.tapCandidate&&Math.abs(dx)<10&&Math.abs(dy)<10;if(recipeVideoLightboxState.tapCandidate=!1,wasTap){toggleRecipeVideoPlayback();return}var vertical=axis==="y"&&Math.abs(dy)>80,right=axis==="x"&&dx>80,left=axis==="x"&&dx<-80,nextCard=left?getNextRecipeVideoCard():null,prevCard=right?getPrevRecipeVideoCard():null;if(vertical){closeRecipeVideoLightbox();return}if(nextCard){goToRecipeVideoCard(nextCard,-1);return}
1if(prevCard){goToRecipeVideoCard(prevCard,1);return}dialog&&(dialog.style.transition="transform 180ms ease-out",dialog.style.transform=""),lightbox.style.opacity=""}})}function bindRecipeVideoLightboxControls(lightbox){var player=lightbox.querySelector("[data-recipe-video-lightbox-player]"),fsBtn=lightbox.querySelector("[data-recipe-video-lightbox-fullscreen]"),playToggle=lightbox.querySelector("[data-recipe-video-lightbox-play-toggle]"),closeBtn=lightbox.querySelector("[data-recipe-video-lightbox-close]");player&&(player.addEventListener("play",function(){syncRecipeVideoPlayUi(lightbox)}),player.addEventListener("pause",function(){syncRecipeVideoPlayUi(lightbox)}),player.addEventListener("click",function(e){player.controls||window.matchMedia("(hover: hover)").matches&&(e.preventDefault(),toggleRecipeVideoPlayback())}),player.addEventListener("enterpictureinpicture",function(){releaseRecipeVideoLightboxForPip()}),player.addEventListener("leavepictureinpicture",function(){cleanupRecipeVideoAfterPip()}),player.addEventListener("webkitpresentationmodechanged",function(){player.webkitPresentationMode==="picture-in-picture"?releaseRecipeVideoLightboxForPip():recipeVideoLightboxState.pipActive&&player.webkitPresentationMode==="inline"&&cleanupRecipeVideoAfterPip()})),playToggle&&playToggle.addEventListener("click",function(e){e.stopPropagation(),toggleRecipeVideoPlayback()}),fsBtn&&fsBtn.addEventListener("click",function(e){e.stopPropagation(),enterRecipeVideoFullscreen(player)}),closeBtn&&closeBtn.addEventListener("click",closeRecipeVideoLightbox),lightbox.addEventListener("click",function(e){e.target===lightbox&&closeRecipeVideoLightbox()}),document.addEventListener("keydown",function(e){if(e.key==="Escape"&&closeRecipeVideoLightbox(),e.key===" "&&!lightbox.hasAttribute("hidden")){var tag=e.target&&e.target.tagName||"";if(tag==="INPUT"||tag==="TEXTAREA"||tag==="BUTTON")return;e.preventDefault(),toggleRecipeVideoPlayback()}})}function openRecipeVideoLightbox(card,options){options=options||{};var videoSrc=card.getAttribute("data-video-src"),videoUrl=card.getAttribute("data-video-url"),caption=card.getAttribute("data-video-caption")||"Vid\xE9o",youtubeId=youtubeIdFromUrl(videoUrl),vimeoId=vimeoIdFromUrl(videoUrl),isMobile=window.matchMedia("(max-width: 800px)").matches;if(!(isMobile&&videoSrc&&!options.forceLightbox&&openRecipeVideoNativeFromCard(card))){var lightbox=getRecipeVideoLightbox(),player=lightbox.querySelector("[data-recipe-video-lightbox-player]"),iframe=lightbox.querySelector("[data-recipe-video-lightbox-iframe]"),fsBtn=lightbox.querySelector("[data-recipe-video-lightbox-fullscreen]"),playToggle=lightbox.querySelector("[data-recipe-video-lightbox-play-toggle]"),root=card.closest("[data-product-recipe-videos]");if(recipeVideoLightboxState.card=card,recipeVideoLightboxState.cards=root?Array.prototype.slice.call(root.querySelectorAll("[data-recipe-video-card]")):[card],lightbox.setAttribute("aria-label",caption),resetRecipeVideoLightboxChrome(lightbox),lightbox.classList.remove("is-pip"),lightbox.classList.remove("is-direct-fs"),recipeVideoLightboxState.pipActive=!1,videoSrc&&player){iframe&&(iframe.hidden=!0,iframe.removeAttribute("src")),player.hidden=!1,player.setAttribute("playsinline",""),player.setAttribute("webkit-playsinline",""),player.src=videoSrc,player.muted=!1,player.setAttribute("controls",""),player.controls=!0,fsBtn&&(fsBtn.hidden=!0),playToggle&&(playToggle.hidden=!0),lightbox.classList.remove("is-direct-fs"),lightbox.removeAttribute("hidden"),document.body.classList.add("is-recipe-video-lightbox");var applySize=function(){fitRecipeVideoLightboxToMedia(lightbox,player)};player.videoWidth?applySize():player.addEventListener("loadedmetadata",applySize,{once:!0});var desktopPlay=player.play();desktopPlay&&typeof desktopPlay.catch=="function"&&desktopPlay.catch(function(){player.muted=!0,player.play().catch(function(){})})}else if((youtubeId||vimeoId)&&iframe)player&&(player.pause(),player.hidden=!0,player.removeAttribute("src")),fsBtn&&(fsBtn.hidden=!0),playToggle&&(playToggle.hidden=!0),iframe.hidden=!1,iframe.src=youtubeId?"https://www.youtube.com/embed/"+youtubeId+"?autoplay=1&rel=0&playsinline=1":"https://player.vimeo.com/video/"+vimeoId+"?autoplay=1",lightbox.removeAttribute("hidden"),document.body.classList.add("is-recipe-video-lightbox");else if(videoUrl){window.open(videoUrl,"_blank","noopener");return}else return;lightbox.getAttribute("data-bound")||(lightbox.setAttribute("data-bound","true"),bindRecipeVideoLightboxControl
1s(lightbox),bindRecipeVideoLightboxSwipe(lightbox))}}function initRecipeVideos(){document.querySelectorAll("[data-product-recipe-videos]").forEach(function(root){var track=root.querySelector("[data-recipe-videos-track]"),prev=root.querySelector("[data-recipe-videos-prev]"),next=root.querySelector("[data-recipe-videos-next]"),isSlider=root.classList.contains("product-recipe-videos--slider");if(track){if(isSlider){var scrollByDir2=function(dir){var card=track.querySelector(".product-recipe-videos__card:not(.product-recipe-videos__card--spacer)"),cardWidth=card?card.getBoundingClientRect().width:172,amount=(cardWidth+15)*dir;track.scrollBy({left:amount,behavior:"smooth"}),window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_recipe_videos",name:dir<0?"recipe_videos_prev":"recipe_videos_next",click_text:"recipe_videos_arrow",click_link:"/"}}))},scrollByDir=scrollByDir2;prev&&prev.addEventListener("click",function(){scrollByDir2(-1)}),next&&next.addEventListener("click",function(){scrollByDir2(1)})}root.querySelectorAll("[data-recipe-video-card]").forEach(function(card){card.addEventListener("click",function(){var caption=card.getAttribute("data-video-caption")||"recipe_video",videoSrc=card.getAttribute("data-video-src"),videoUrl=card.getAttribute("data-video-url");window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_recipe_videos",name:"recipe_video_play",click_text:caption,click_link:videoUrl||videoSrc||"/"}})),openRecipeVideoLightbox(card)})})}})}var lastCalculateurPack=null,lastCalculateurRationRaw="";function parseKgFromOption(option1){if(!option1)return null;var m=String(option1).replace(",",".").match(/(\d+(?:\.\d+)?)\s*kg/i);if(m)return parseFloat(m[1]);var g=String(option1).replace(",",".").match(/(\d+(?:\.\d+)?)\s*g\b/i);return g?parseFloat(g[1])/1e3:null}function getVariantKg(v){return v?parseKgFromOption(v.option1)||parseKgFromOption(v.option2)||parseKgFromOption(v.option3)||parseKgFromOption(v.title):null}function isSampleVariant(v){var blob=[v&&v.title,v&&v.option1,v&&v.option2,v&&v.option3].join(" ").toLowerCase();return blob.indexOf("\xE9chantillon")!==-1||blob.indexOf("echantillon")!==-1}function getSelectedPdpOptionValues(){var values=[];return document.querySelectorAll("[data-pdp-revamp] .product__option-radio-buttons:not(.has-poids) input:checked").forEach(function(el){el.value&&values.push(el.value)}),values}function variantOptionMatchCount(v,selectedValues){if(!selectedValues||!selectedValues.length)return 0;for(var opts=[v.option1,v.option2,v.option3],matches=0,i=0;i<selectedValues.length;i++)opts.indexOf(selectedValues[i])!==-1&&(matches+=1);return matches}function formatKgLabel(kg){if(kg==null||isNaN(kg))return"";var n=Number(kg);return Math.abs(n-Math.round(n))<.05?String(Math.round(n)):String(n).replace(".",",")}function parseDailyGrams(rationRaw,isMixed){var raw=String(rationRaw||"");if(isMixed||/\+/.test(raw)){var first=raw.match(/(\d+(?:[.,]\d+)?)\s*g/i);if(first)return parseFloat(String(first[1]).replace(",","."))||0}var grams=parseInt(raw.replace(/[^\d]/g,""),10);return isNaN(grams)?0:grams}function recommendPack(variants,monthlyKg){if(!variants||!variants.length||!monthlyKg)return null;for(var selected=getSelectedPdpOptionValues(),best=null,bestDiff=1/0,bestMatch=-1,i=0;i<variants.length;i++){var v=variants[i];if(!(!v.available||isSampleVariant(v))){var kg=getVariantKg(v);
1if(!(!kg||kg<=0)){var bags=monthlyKg/kg,diff=Math.abs(bags-1),match=variantOptionMatchCount(v,selected);(diff<bestDiff-1e-4||Math.abs(diff-bestDiff)<1e-4&&match>bestMatch)&&(bestDiff=diff,bestMatch=match,best={variant:v,kg:kg,bags:bags})}}}return best}function getCalculateurVariants(){for(var options=document.querySelectorAll('[data-pdp-revamp] [data-product-select] option, [data-calculateur-popup] select[name="id"] option, [data-pdp-revamp] select[name="id"] option'),variants=[],seen={},i=0;i<options.length;i++){var opt=options[i];!opt.value||seen[opt.value]||(seen[opt.value]=!0,variants.push({id:opt.value,available:opt.getAttribute("data-variant-available")!=="false",option1:opt.getAttribute("data-option-1")||"",option2:opt.getAttribute("data-option-2")||"",option3:opt.getAttribute("data-option-3")||"",title:(opt.textContent||"").trim()}))}return variants}function findPdpRadio(pdp,value){if(!pdp||!value)return null;for(var radios=pdp.querySelectorAll(".product__option-radio-buttons:not(.has-poids) input"),i=0;i<radios.length;i++)if(radios[i].value===value)return radios[i];var kg=parseKgFromOption(value);if(!kg)return null;for(var j=0;j<radios.length;j++){var radioKg=parseKgFromOption(radios[j].value);if(radioKg&&Math.abs(radioKg-kg)<.05)return radios[j]}return null}function selectPdpVariant(variant){if(!variant||!variant.id)return!1;var pdp=document.querySelector("[data-pdp-revamp]");if(!pdp)return!1;for(var values=[variant.option1,variant.option2,variant.option3].filter(function(val){return val&&String(val).trim()&&String(val)!=="Default Title"}),lastGroup=null,i=0;i<values.length;i++){var radio=findPdpRadio(pdp,values[i]);if(!(!radio||radio.disabled)){radio.checked=!0;var group=radio.closest(".product__option-radio-buttons");if(group){var select=group.querySelector("select");select&&(select.value=radio.value),lastGroup=group}}}var productSelect=pdp.querySelector("[data-product-select]")||document.querySelector("[data-product-select]");function applyProductSelect(){if(productSelect){productSelect.value=String(variant.id);var selectedOpt=productSelect.querySelector('option[value="'+variant.id+'"]');selectedOpt&&(selectedOpt.selected=!0)}}return applyProductSelect(),lastGroup&&(lastGroup.dispatchEvent(new Event("change",{bubbles:!0})),applyProductSelect()),!0}function getCalculateurRecommendedPack(){if(lastCalculateurPack&&lastCalculateurPack.variant)return lastCalculateurPack;if(!lastCalculateurRationRaw)return null;var mixed=isCalculateurMixte()||/\+/.test(String(lastCalculateurRationRaw)),grams=parseDailyGrams(lastCalculateurRationRaw,mixed),monthlyKg=grams*31/1e3;return!mixed||grams>0?recommendPack(getCalculateurVariants(),monthlyKg):null}function restoreCalculateurOptionValues(){document.querySelectorAll(".calculateur-de-ration--revamp [data-calculateur-question] option").forEach(function(opt){var attr=opt.getAttribute("value");attr==null||attr===""||(opt.value=attr,opt.textContent=attr)})}function syncCalculateurResultPack(rationRaw){lastCalculateurRationRaw=rationRaw||"",applyRationFromRaw(lastCalculateurRationRaw,isCalculateurMixte()||/\+/.test(String(rationRaw||"")));var root=document.querySelector(".calculateur-de-ration--revamp");if(root){var textEl=root.querySelector("[data-calculateur-loaded-text-1]"),packEl=root.querySelector("[data-calculateur-result-pack]"),mixed=isCalculateurMixte()||/\+/.test(String(rationRaw||"")),grams=parseDailyGrams(rationRaw,mixed),monthlyKg=grams*31/1e3,monthlyLabel=formatKgLabel(Number(monthlyKg.toFixed(1)));String(monthlyLabel).slice(-2)===",0"&&(monthlyLabel=String(monthlyLabel).slice(0,-2));var rationLabel=String(rationRaw||"").replace(/\s*\/?jour\.?$/i,"").trim();textEl&&(mixed?textEl.textContent=rationLabel+"/jour.":textEl.textContent=rationLabel+"/jour, soit une consommation de "+monthlyLabel+" kg/mois");var pack=!mixed||grams>0?recommendPack(getCalculateurVariants(),monthlyKg):null;if(lastCalculateurPack=pack,!!packEl)if(pack){var bagsRounded=Math.max(1,Math.round(pack.bags)),packLabel=formatKgLabel(pack.kg).replace(".",",");packEl.innerHTML="= environ "+bagsRounded+" sac"+(bagsRounded>1?"s":"")+" de<br>"+packLabel+" kg par mois"}else packEl.textContent=""}}function initCalculateurRevampCopy(){document.querySelector("[data-pdp-revamp]")&&(restoreCalculateurOptionValues(),window.addEventListener("hb_feeding_guide_action",function(e){!e.detail||e.detail.type!=="generate"||!e.detail.result||(syncCalculateurResultPack(e.detail.result),window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_calculator",name:"daily_calculator_generate",click_text:String(e.detail.result||"generate"),click_link:"/"}})))}
1))}function formatRationKg(kg){if(kg==null||isNaN(kg))return"";var n=Number(kg);if(Math.abs(n-Math.round(n))<.05)return String(Math.round(n));var label=String(Number(n.toFixed(1))).replace(".",",");return label.slice(-2)===",0"&&(label=label.slice(0,-2)),label}function isCalculateurMixte(){for(var root=document.querySelector(".calculateur-de-ration--revamp")||document,selects=root.querySelectorAll("[data-calculateur-question]"),i=0;i<selects.length;i++){var val=String(selects[i].value||"").toLowerCase();if(val==="mixte"||val.indexOf("mixte")!==-1)return!0}return!1}function isMixedAnswer(answers){for(var i=0;i<answers.length;i++){var a=String(answers[i]||"").toLowerCase();if(a==="mixte"||a.indexOf("mixte")!==-1)return!0}return!1}function matchRationResult(results,answers){if(!results||!results.length||!answers||!answers.length)return null;for(var i=0;i<results.length;i++){for(var row=results[i],ok=!0,a=0;a<answers.length;a++){var key="answer_"+(a+1);if(!(row[key]==null||row[key]==="")&&String(row[key]).trim().toLowerCase()!==String(answers[a]).trim().toLowerCase()){ok=!1;break}}if(ok&&row.result!=null&&row.result!=="")return row}return null}function escapeRationHtml(str){return String(str||"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function getCalculateurResults(){var box=document.querySelector(".calculateur-de-ration--revamp [data-calculateur-results]")||document.querySelector("[data-calculateur-results]");if(!box)return[];var attr=box.getAttribute("data-calculateur-results");if(attr)try{var parsed=JSON.parse(attr);if(parsed&&parsed.length)return parsed}catch(e){}if(window.jQuery){var data=window.jQuery(box).data("calculateurResults");if(data&&data.length)return data}return[]}function readCalculateurAnswers(){var root=document.querySelector(".calculateur-de-ration--revamp")||document,selects=root.querySelectorAll("[data-calculateur-question]");if(!selects.length)return null;for(var answers=[],i=0;i<selects.length;i++){var val=selects[i].value;if(!val)return null;answers.push(val)}return answers}function buildRationSummary(rationRaw,mixed){var rationLabel=String(rationRaw||"").replace(/\s*\/?jour\.?$/i,"").trim();if(!rationLabel||/\$/.test(rationLabel))return null;if(mixed||/\+/.test(rationLabel))return{prefix:"Ration recommand\xE9e : ",value:rationLabel+" / jour"};var grams=parseDailyGrams(rationRaw,!1),monthlyLabel=formatRationKg(grams*31/1e3);return monthlyLabel?{prefix:"Ration recommand\xE9e : ",value:monthlyLabel+" kg / mois"}:{prefix:"Ration recommand\xE9e : ",value:rationLabel+" / jour"}}var PDP_RATION_STORAGE_KEY="franklin-pdp-ration",lastCalculateurRationSummary=null;function rationLinkNodes(){return document.querySelectorAll("[data-pdp-ration-label], [data-pdp-revamp] [data-open-calculateur], .guide-block--revamp[data-open-calculateur]")}function applyRationSummaryToPage(summary){if(!(!summary||!summary.value)){lastCalculateurRationSummary=summary;var html=escapeRationHtml(summary.prefix||"Ration recommand\xE9e : ")+'<span class="product-ration-value">'+escapeRationHtml(summary.value)+"</span>";document.querySelectorAll("[data-pdp-ration-label]").forEach(function(node){node.innerHTML=html;var btn=node.closest("[data-open-calculateur]");btn&&btn.classList&&btn.classList.add("is-ration-set")}),document.querySelectorAll("[data-pdp-revamp] [data-open-calculateur], .guide-block--revamp[data-open-calculateur]").forEach(function(btn){if(btn.classList&&btn.classList.add("is-ration-set"),!btn.querySelector("[data-pdp-ration-label]")){var container=btn.querySelector(".guide-block__container");container&&(container.innerHTML="<p data-pdp-ration-label>"+html+"</p>")}})}}function persistRationSummary(rationRaw,summary){try{sessionStorage.setItem(PDP_RATION_STORAGE_KEY,JSON.stringify({path:location.pathname,ration:String(rationRaw||""),summary:summary}))}catch(e){}}function applyRationFromRaw(rationRaw,mixed){var raw=String(rationRaw||"").trim();if(!(!raw||/\$/.test(raw))){lastCalculateurRationRaw=raw;var summary=buildRationSummary(raw,!!mixed);summary&&(applyRationSummaryToPage(summary),persistRationSummary(raw,summary))}}function syncRationFromQuestions(){var answers=readCalculateurAnswers();if(answers){var match=matchRationResult(getCalculateurResults(),answers);if(!(!match||!match.result)){var mixed=isMixedAnswer(answers)||/\+/.test(String(match.result));applyRationFromRaw(match.result,mixed)}}}function restoreRationToPage(){try{var saved=JSON.parse(sessionStorage.getItem(PDP_RATION_STORAGE_KEY)||"null");if(!saved||saved.path!==location.pathname)return;if(saved.summary&&saved.summary.value){lastCalculateurRationRaw=saved.ration||"",applyRationSummaryToPage(saved.summary);return}saved.ration&&applyRationFromRaw(saved.ration,/\+/.test(String(saved.ration)))}catch(e){}}function extractRationFromLoadedText(text){var m=String(text||"").match(/(\d+(?:[.,]\d+)?\s*g(?:\s*\+\s*\d+(?:[.,]\d+)?\s*g)?)/i);return m?m[1].replace(/\s+/g,""):""}
1function watchCalculateurLoadedBox(){var box=document.querySelector(".calculateur-de-ration--revamp [data-calculateur-loaded-1], [data-calculateur-loaded-1]");if(!(!box||box.getAttribute("data-pdp-ration-watched"))){box.setAttribute("data-pdp-ration-watched","true");var applyFromDom=function(){if(!box.classList.contains("hide")){var textEl=box.querySelector("[data-calculateur-loaded-text-1]"),extracted=extractRationFromLoadedText(textEl&&textEl.textContent);if(extracted){applyRationFromRaw(extracted,isCalculateurMixte()||/\+/.test(extracted));return}syncRationFromQuestions()}},observer=new MutationObserver(applyFromDom);observer.observe(box,{attributes:!0,childList:!0,subtree:!0,characterData:!0})}}function initCalculateurRationLabel(){if(document.querySelector("[data-pdp-revamp]")){restoreRationToPage(),syncRationFromQuestions(),watchCalculateurLoadedBox();var questionRoot=document.querySelector(".calculateur-de-ration--revamp")||document;questionRoot.querySelectorAll("[data-calculateur-question]").forEach(function(sel){sel.addEventListener("change",syncRationFromQuestions)}),document.addEventListener("change",function(e){!e.target.closest||!e.target.closest("[data-calculateur-question]")||syncRationFromQuestions()}),window.jQuery&&window.jQuery(document).on("change","[data-calculateur-question]",syncRationFromQuestions),window.addEventListener("hb_feeding_guide_action",function(e){!e.detail||e.detail.type!=="generate"||!e.detail.result||(applyRationFromRaw(e.detail.result,isCalculateurMixte()||/\+/.test(String(e.detail.result))),window.setTimeout(function(){applyRationFromRaw(e.detail.result,isCalculateurMixte()||/\+/.test(String(e.detail.result)))},1100))}),window.addEventListener("openPopupCalculateur",function(){watchCalculateurLoadedBox(),window.setTimeout(syncRationFromQuestions,50)}),document.addEventListener("click",function(e){var target=e.target&&e.target.closest?e.target.closest("[data-close-calculateur]"):null;if(target)try{lastCalculateurRationSummary?applyRationSummaryToPage(lastCalculateurRationSummary):lastCalculateurRationRaw?applyRationFromRaw(lastCalculateurRationRaw,isCalculateurMixte()||/\+/.test(lastCalculateurRationRaw)):syncRationFromQuestions()}catch(err){}},!0),rationLinkNodes().forEach(function(btn){var clickTarget=btn.hasAttribute("data-open-calculateur")?btn:btn.closest("[data-open-calculateur]");!clickTarget||clickTarget.getAttribute("data-pdp-ration-click")||(clickTarget.setAttribute("data-pdp-ration-click","true"),clickTarget.addEventListener("click",function(){window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_calculator",name:"daily_calculator_open",click_text:(clickTarget.textContent||"calculator").replace(/\s+/g," ").trim(),click_link:"/"}}))}))})}}function applyCalculateurDiscount(code){return code?fetch("/cart.js",{credentials:"same-origin"}).then(function(r){return r.json()}).then(function(cart){var codes=cart.discount_codes||[],alreadyApplied=codes.some(function(entry){return entry&&String(entry.code).toLowerCase()===code.toLowerCase()});if(!alreadyApplied)return fetch("/discount/"+encodeURIComponent(code),{credentials:"same-origin"})}).catch(function(){}):Promise.resolve()}function selectSubscriptionForCalculateur(){var subInput=document.querySelector('#product-buy-section input[name="buy-options"][value="subscription"]'),oneTimeInput=document.querySelector('#product-buy-section input[name="buy-options"][value="one-time"]');if(subInput){subInput.checked=!0,oneTimeInput&&(oneTimeInput.checked=!1),subInput.dispatchEvent(new Event("change",{bubbles:!0}));var buyButtons=document.querySelector("buy-buttons-container");buyButtons&&typeof buyButtons.syncPurchaseOption=="function"&&buyButtons.syncPurchaseOption(),syncPurchasePrices()}}var FREQ_ITEM_HEIGHT=44,FREQ_FALLBACK=[25,30,35,40,45,50,60,70,90,120],FREQ_STORAGE_KEY="franklin_subscription_lp_frequency";function labelForFrequency(n){return n>1?"Tous les "+n+" jours":"Tous les "+n+" jour"}function readLockedFrequency(){try{var stored=sessionStorage.getItem(FREQ_STORAGE_KEY);if(stored){var n=Number(stored);if(!isNaN(n)&&n>0)return n}}catch(e){}return null}function writeLockedFrequency(freq){try{sessionStorage.setItem(FREQ_STORAGE_KEY,String(freq))}catch(e){}}function getBuyboxFrequencies(){var freq=document.querySelector("#frequence")||document.querySelector("[data-pdp-revamp] [data-frequency-selector]");if(!freq)return FREQ_FALLBACK.slice();for(var values=[],i=0;i<freq.options.length;i++){var n=Number(String(freq.options[i].value).replace(/[^\d]/g,""));!isNaN(n)&&n>0&&values.push(n)}return values.length?values:FREQ_FALLBACK.slice()}function applyFrequencyToBuybox(days){var ok=!1;return document.querySelectorAll("#frequence, [data-pdp-revamp] [data-frequency-selector]").forEach(function(freq){for(var match=null,i=0;i<freq.options.length;i++)if(Number(String(freq.options[i].value).replace(/[^\d]/g,""))===Number(days)){match=freq.options[i];break}match&&(freq.value=match.value,window.jQuery?window.jQuery(freq).val(match.value).trigger("change"):freq.dispatchEvent(new Event("change",{bubbles:!0})),ok=!0)}),clearFrequencyError(),ok}
1function resolveCalculateurFrequency(){var freqs=getBuyboxFrequencies(),buybox=document.querySelector("#frequence"),current=buybox?Number(String(buybox.value).replace(/[^\d]/g,"")):NaN;if(!isNaN(current)&&current>0&&freqs.indexOf(current)!==-1)return current;var locked=readLockedFrequency();return locked&&freqs.indexOf(Number(locked))!==-1?Number(locked):freqs.indexOf(30)!==-1?30:freqs[0]||30}function getSelectedVariantId(){var pack=getCalculateurRecommendedPack();if(pack&&pack.variant&&pack.variant.id)return String(pack.variant.id);var select=document.querySelector('[data-pdp-revamp] [data-product-select], [data-pdp-revamp] select[name="id"]');return select&&select.value&&select.value!=="label"?String(select.value):null}function getCalculateurSellingPlans(){var script=document.querySelector("[data-calculateur-selling-plans]");if(script)try{var parsed=JSON.parse(script.textContent);if(parsed&&parsed.length)return parsed}catch(e){}var plans=[];return document.querySelectorAll("#frequence option[selling_plan_id], [data-frequency-selector] option[selling_plan_id]").forEach(function(opt){var freq=Number(String(opt.value).replace(/[^\d]/g,"")),id=opt.getAttribute("selling_plan_id");!isNaN(freq)&&freq>0&&id&&plans.push({frequency:freq,id:id})}),plans}function getSellingPlanIdForFrequency(days){for(var plans=getCalculateurSellingPlans(),i=0;i<plans.length;i++)if(Number(plans[i].frequency)===Number(days))return plans[i].id;return plans[0]&&plans[0].id?plans[0].id:null}function closeCalculateurPopup(){var popup=document.querySelector("[data-calculateur-popup]");popup&&(popup.style.display="none",popup.setAttribute("hidden","")),document.querySelectorAll(".quickview.calculateur-overlay, .calculateur-overlay").forEach(function(el){el.style.display="none"}),document.body.classList.remove("non-scroll"),window.jQuery&&window.jQuery("[data-calculateur-popup]").hide()}function getPdpSubscribeAtc(){return document.querySelector("[data-pdp-revamp] button.product-subscription-link[data-subscription-activate], [data-pdp-revamp] .product-subscription-link[data-subscription-activate]")}function addCalculateurSubscription(days,promoCode){var pack=getCalculateurRecommendedPack();pack&&selectPdpVariant(pack.variant),applyFrequencyToBuybox(days),selectSubscriptionForCalculateur(),writeLockedFrequency(days);var variantId=getSelectedVariantId(),sellingPlanId=getSellingPlanIdForFrequency(days),atc=getPdpSubscribeAtc();atc&&atc.classList.remove("hidden");function finish(){closeCalculateurPopup(),applyCalculateurDiscount(promoCode),typeof window.openCart=="function"&&window.openCart()}if(variantId&&sellingPlanId){fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},credentials:"same-origin",body:JSON.stringify({items:[{id:Number(variantId),quantity:1,selling_plan:sellingPlanId,properties:{_shipping_interval_frequency:String(days),_shipping_interval_unit_type:"Days"}}]})}).then(function(r){if(!r.ok)throw new Error("cart add failed");return r.json()}).then(function(){finish()}).catch(function(){atc?atc.click():closeCalculateurPopup()});return}if(atc){window.setTimeout(function(){applyFrequencyToBuybox(days),atc.click(),finish()},60);return}closeCalculateurPopup()}var FrequencyModal={el:null,scrollEl:null,selected:30,options:FREQ_FALLBACK.slice(),pending:null,scrollTimer:null,ensure:function(){if(!this.el){var root=document.createElement("div");root.className="subscription-freq-modal",root.setAttribute("role","dialog"),root.setAttribute("aria-modal","true"),root.setAttribute("aria-labelledby","subscription-freq-modal-title"),root.innerHTML='<button type="button" class="subscription-freq-modal__backdrop" aria-label="Fermer"></button><div class="subscription-freq-modal__panel">  <button type="button" class="subscription-freq-modal__close" aria-label="Fermer">\xD7</button>  <h2 id="subscription-freq-modal-title" class="subscription-freq-modal__title">Choisissez votre fr\xE9quence</h2>  <div class="subscription-freq-modal__wheel-wrap">    <div class="subscription-freq-wheel" role="listbox" aria-label="Fr\xE9quence de commande">      <div class="subscription-freq-wheel__fade subscription-freq-wheel__fade--top" aria-hidden="true"></div>      <div class="subscription-freq-wheel__fade subscription-freq-wheel__fade--bottom" aria-hidden="true"></div>      <div class="subscription-freq-wheel__rail" aria-hidden="true"></div>      <div class="subscription-freq-wheel__scroll"></div>    </div>  </div>  <button type="button" class="subscription-freq-modal__confirm">JE VALIDE</button>  <p class="subscription-freq-modal__footnote">Une seule fr\xE9quence possible pour tous vos produits en abonnement</p></div>',document.body.appendChild(root),this.el=root,this.scrollEl=root.querySelector(".subscription-freq-wheel__scroll");var self=this;root.querySelector(".subscription-freq-modal__backdrop").addEventListener("click",function(){self.close()}),root.querySelector(".subscription-freq-modal__close").addEventListener("click",function(){self.close()}),root.querySelector(".subscription-freq-modal__confirm").addEventListener("click",function(){self.confirm()}),this.scrollEl.addEventListener("scroll",function(){self.scrollTimer&&window.clearTimeout(self.scrollTimer),self.scrollTimer=window.setTimeout(function(){self.scrollTimer=null,self.syncFromScroll()},120)}),document.addEventListener("keydown",function(e){e.key==="Escape"&&self.el.classList.contains("is-open")&&self.close()})}},renderOptions:function(){var self=this;this.scrollEl.innerHTML="",this.options.forEach(function(n){var btn=document.createElement("button");btn.type="button",btn.className="subscription-freq-wheel__item"+(n===self.selected?" is-active":""),btn.setAttribute("role","option"),btn.setAttribute("aria-selected",n===self.selected?"true":"false"),btn.dataset.frequency=String(n),btn.textContent=labelForFrequency(n),btn.addEventListener("click",function(){self.setSelected(n,!0)}),self.scrollEl.appendChild(btn)})},setSelected:function(n,scroll){this.selected=n;for(var items=this.scrollEl.querySelectorAll(".subscription-freq-wheel__item"),i=0;i<items.length;i++){var active=Number(items[i].dataset.frequency)===n;items[i].classList.toggle("is-active",active),items[i].setAttribute("aria-selected",active?"true":"false")}if(scroll){var idx=this.options.indexOf(n);idx>
1=0&&this.scrollEl.scrollTo({top:idx*FREQ_ITEM_HEIGHT,behavior:"smooth"})}},syncFromScroll:function(){if(this.options.length){var idx=Math.round(this.scrollEl.scrollTop/FREQ_ITEM_HEIGHT);idx=Math.max(0,Math.min(this.options.length-1,idx));var next=this.options[idx];next!==void 0&&next!==this.selected&&this.setSelected(next,!1)}},open:function(options,defaultFreq,pending){this.ensure();var sorted=(options&&options.length?options.slice():FREQ_FALLBACK.slice()).map(Number).filter(function(n){return!isNaN(n)&&n>0}).sort(function(a,b){return a-b});this.options=sorted.filter(function(n,i,arr){return arr.indexOf(n)===i});var preferred=Number(defaultFreq)||30;this.options.indexOf(preferred)===-1&&(preferred=this.options[Math.floor(this.options.length/2)]||this.options[0]),this.selected=preferred,this.pending=pending,this.renderOptions(),this.el.classList.add("is-open"),document.body.classList.add("subscription-freq-modal-open");var self=this;requestAnimationFrame(function(){var idx=self.options.indexOf(self.selected);idx>=0&&(self.scrollEl.scrollTop=idx*FREQ_ITEM_HEIGHT)})},close:function(){if(this.el){this.el.classList.remove("is-open"),document.body.classList.remove("subscription-freq-modal-open"),this.pending=null;var confirmBtn=this.el.querySelector(".subscription-freq-modal__confirm");confirmBtn&&(confirmBtn.disabled=!1,confirmBtn.textContent="JE VALIDE")}},confirm:function(){if(this.pending){var confirmBtn=this.el.querySelector(".subscription-freq-modal__confirm");confirmBtn&&(confirmBtn.disabled=!0,confirmBtn.textContent="\u2026");var days=this.selected,pending=this.pending;this.pending=null,typeof pending.onConfirm=="function"?pending.onConfirm(days):addCalculateurSubscription(days,pending.promoCode),this.close()}}};function applyCalculateurRecommendationToPage(){if(lastCalculateurRationRaw)applyRationFromRaw(lastCalculateurRationRaw,isCalculateurMixte()||/\+/.test(String(lastCalculateurRationRaw)));else{syncRationFromQuestions();var textEl=document.querySelector("[data-calculateur-loaded-1]:not(.hide) [data-calculateur-loaded-text-1], [data-calculateur-loaded-text-1]"),extracted=extractRationFromLoadedText(textEl&&textEl.textContent);extracted&&applyRationFromRaw(extracted,isCalculateurMixte()||/\+/.test(extracted))}lastCalculateurRationSummary&&applyRationSummaryToPage(lastCalculateurRationSummary);var pack=getCalculateurRecommendedPack();pack&&selectPdpVariant(pack.variant),selectSubscriptionForCalculateur()}function handleCalculateurSubscribe(promoCode){applyCalculateurRecommendationToPage(),closeCalculateurPopup(),FrequencyModal.open(getBuyboxFrequencies(),30,{promoCode:promoCode})}function onCalculateurSubscribeClick(e){var btn=e.target&&e.target.closest?e.target.closest("[data-calculateur-revamp-subscribe]"):null;if(btn&&(e.preventDefault(),e.stopPropagation(),typeof e.stopImmediatePropagation=="function"&&e.stopImmediatePropagation(),btn.getAttribute("data-busy")!=="true")){btn.setAttribute("data-busy","true"),window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_calculator",name:"daily_calculator_subscribe",click_text:(btn.textContent||"JE M'ABONNE").trim(),click_link:"/"}}));var promoCode=(btn.getAttribute("data-promo-code")||"ABO10").trim();try{handleCalculateurSubscribe(promoCode)}catch(err){closeCalculateurPopup(),FrequencyModal.open(getBuyboxFrequencies(),30,{promoCode:promoCode})}window.setTimeout(function(){btn.removeAttribute("data-busy")},2e3)}}function initCalculateurSubscribeCta(){document.querySelector("[data-pdp-revamp]")&&(syncCalculateurSubscribeCta(),window.addEventListener("openPopupCalculateur",syncCalculateurSubscribeCta),window.addEventListener("hb_feeding_guide_action",function(e){e.detail&&e.detail.type==="generate"&&syncCalculateurSubscribeCta()}),document.addEventListener("click",onCalculateurSubscribeClick,!0))}function isStickyTargetVisible(el){if(!el||el.classList.contains("hidden")||el.classList.contains("hide"))return!1;var style=window.getComputedStyle(el);return style.display!=="none"&&style.visibility!=="hidden"}function getCartSubscriptionFrequency(){return fetch("/cart.js",{credentials:"same-origin"}).then(function(r){return r.json()}).then(function(cart){if(!cart||!cart.items)return null;for(var i=0;i<cart.items.length;i++){var item=cart.items[i],freq=item.properties&&item.properties._shipping_interval_frequency,isSubscription=!!item.selling_plan_allocation||!!freq;if(isSubscription&&freq){var n=Number(String(freq).replace(/[^\d]/g,""));if(!isNaN(n)&&n>0)return n}}return null}).catch(function(){return null})}function triggerSubscriptionAddWithFrequency(days){var subscription=getPdpSubscribeAtc();subscription&&(days&&applyFrequencyToBuybox(days),window.setTimeout(function(){subscription.click()},60))}function onStickyAtcClick(e){var btn=e.target&&e.target.closest?e.target.closest("[data-sticky-add-to-cart]"):null;
1if(btn&&(e.preventDefault(),btn.getAttribute("data-busy")!=="true")){btn.setAttribute("data-busy","true"),window.setTimeout(function(){btn.removeAttribute("data-busy")},1500),window.dispatchEvent(new CustomEvent("hb_navigation_click",{detail:{type:"pdp_sticky_bar",name:"sticky_add_to_cart",click_text:(btn.textContent||"").trim(),click_link:"/"}}));var root=document.querySelector("[data-pdp-revamp]");if(root){var blocked=root.querySelector("[data-new-customer-only-error]");if(isStickyTargetVisible(blocked)){blocked.click();return}var subscription=getPdpSubscribeAtc(),oneTime=root.querySelector("button[data-add-to-cart]"),subscriptionMode=isStickyTargetVisible(subscription);if(!subscriptionMode&&subscription){var checked=document.querySelector('#product-buy-section input[name="buy-options"]:checked');subscriptionMode=!!(checked&&checked.value==="subscription")}if(!subscriptionMode){oneTime&&oneTime.click();return}getCartSubscriptionFrequency().then(function(cartDays){if(cartDays&&applyFrequencyToBuybox(cartDays)){window.setTimeout(function(){subscription.click()},60);return}var freqs=getBuyboxFrequencies(),buybox=document.querySelector("#frequence"),current=buybox?Number(String(buybox.value).replace(/[^\d]/g,"")):NaN,preferred=!isNaN(current)&&current>0?current:30;FrequencyModal.open(freqs,preferred,{onConfirm:function(selectedDays){triggerSubscriptionAddWithFrequency(selectedDays)}})})}}}function initStickyAtc(){document.querySelector("[data-pdp-revamp]")&&document.addEventListener("click",onStickyAtcClick,!0)}function bootPdpRevamp(){bootPdpRevamp.done||(bootPdpRevamp.done=!0,[initLirePlus,initMarketingPushTracking,initProblematiqueAccordion,initCompositionAccordion,initIngredientsBenefits,initGalleryVideos,initUgcNav,stripFaqQuestionNumbers,initRecipeVideos,initCrossSell,initPurchaseOptionTracking,initFrequencyValidation,initAtcComparePrice,initCalculateurRationLabel,initCalculateurRevampCopy,initCalculateurSubscribeCta,initStickyAtc].forEach(function(fn){try{fn()}catch(err){}}))}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",bootPdpRevamp):bootPdpRevamp()})();
2//# sourceMappingURL=/cdn/shop/t/442/assets/product-page-revamp.js.map?v=37317077632144237851788793229

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.