1<!doctype html> 2<html class="no-js" lang="en"> 3 <head> 4 5
6<script src="/cdn/shopifycloud/consent-tracking-api/v0.1/consent-tracking-api.js"></script>
6 7
8<script type="text/javascript"> 9 10;(function() { 11 var Rt=Object.defineProperty;var kt=(b,I,E)=>I in b?Rt(b,I,{enumerable:!0,configurable:!0,writable:!0,value:E}):b[I]=E;var c=(b,I,E)=>kt(b,typeof I!="symbol"?I+"":I,E);(function(){"use strict";/*! js-cookie v3.0.8 | MIT */function b(o){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var i in e)i!=="__proto__"&&(o[i]=e[i])}return o}var I={read:function(o){return o[0]==='"'&&(o=o.slice(1,-1)),o.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(o){return encodeURIComponent(o).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function E(o,t){function e(s,n,r){if(!(typeof document>"u")){r=b({},t,r),typeof r.expires=="number"&&(r.expires=new Date(Date.now()+r.expires*864e5)),r.expires&&(r.expires=r.expires.toUTCString()),s=encodeURIComponent(s).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var d="";for(var a in r)r[a]&&(d+="; "+a,r[a]!==!0&&(d+="="+r[a].split(";")[0]));return document.cookie=s+"="+o.write(n,s)+d}}function i(s){if(!(typeof document>"u"||arguments.length&&!s)){for(var n=document.cookie?document.cookie.split("; "):[],r={},d=0;d<n.length;d++){var a=n[d].split("="),l=a.slice(1).join("=");try{var u=decodeURIComponent(a[0]);if(u in r||(r[u]=o.read(l,u)),s===u)break}catch{}}return s?r[s]:r}}return Object.create({set:e,get:i,remove:function(s,n){e(s,"",b({},n,{expires:-1}))},withAttributes:function(s){return E(this.converter,b({},this.attributes,s))},withConverter:function(s){return E(b({},this.converter,s),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(o)}})}var $=E(I,{path:"/"});const U=class U{constructor(t,e={}){c(this,"_writable");this.kind=t,this.cookieAttributes=e}get writable(){if(this._writable===void 0){const t=`${U.PROBE_KEY}_${this.kind}`;this._writable=this.set(t,"1"),this.remove(t)}return this._writable}get(t){var e;try{return this.kind==="cookie"?$.get(t)??null:((e=this.storage)==null?void 0:e.getItem(t))??null}catch(i){return console.debug(`shogun: could not read '${t}' from ${this.kind} store`,i),null}}set(t,e){try{if(this.kind==="cookie")$.set(t,e,this.cookieAttributes);else{const i=this.storage;if(!i)return!1;i.setItem(t,e)}}catch(i){return console.debug(`shogun: could not write '${t}' to ${this.kind} store`,i),!1}return this.get(t)===e}remove(t){try{if(this.kind==="cookie")$.remove(t,this.cookieAttributes);else{const e=this.storage;if(!e)return!1;e.removeItem(t)}}catch(e){return console.debug(`shogun: could not remove '${t}' from ${this.kind} store`,e),!1}return this.get(t)===null}get storage(){try{return(this.kind==="local"?globalThis.localStorage:globalThis.sessionStorage)??null}catch{return null}}};c(U,"PROBE_KEY","_shg_storage_probe");let v=U;class nt{constructor(t,e){c(this,"CACHE_KEY","_shg_audience_cache");c(this,"CACHE_EXPIRATION_DAYS",7);c(this,"DEVICE_MOBILE_BREAKPOINT",768);c(this,"cache",{timestamp:Date.now(),data:{}});c(this,"storage",new v("local"));this.visitor=t,this.locationApiUrl=e,this.restoreCache()}evaluate(t){switch(t.value=this.snakeCaseKeys(t.value),t.audience_type){case"location":return this.locationMatches(t);case"b2b":return this.b2bMatches(t);case"device":return this.deviceMatches(t);case"logged_in":return this.loggedInMatches(t);case"referrer_contains":return this.referrerContainsMatches(t);case"url_contains":return this.urlContainsMatches(t);case"new_visitor":return this.newVisitorMatches(t);case"returning_visitor":return this.returningVisitorMatches(t);default:return{status:"skipped",expected:t.value,actual:null,reason:`No evaluator implemented for audience type: ${t.audience_type}`}}}evaluateAll(t,e="every"){if(!t||t.length===0)return{status:"eligible",condition:e,expected:{},actual:{}};if(!["every","any"].includes(e))return{status:"error",condition:e,expected:{},actual:{}};const i=t.map(d=>({type:d.audience_type,evaluation:this.evaluate(d)})),s=e==="every"?i.every(d=>d.evaluation.status==="match"):i.some(d=>d.evaluation.status==="match"),n=i.some(d=>d.evaluation.status==="error"),r=e==="every"&&i.some(d=>d.evaluation.status==="no_match");return{status:s?"eligible":n&&!r?"error":"not_eligible",condition:e,expected:t.reduce((d,a)=>(d[a.audience_type]={condition:a.condition,value:a.value},d),{}),actual:i.reduce((d,a)=>(d[a.type]=a.evaluation.actual,d),{}),evaluations:i.reduce((d,a)=>(d[a.type]={status:a.evaluation.status,reason:a.evaluation.reason},d),{})}}b2bMatches(t){const e=t.value===this.visitor.isB2B;return{status:(t.condition==="is_not"?!e:e)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:this.visitor.isB2B}}}deviceMatches(t){const e=window.innerWidth<this.DEVICE_MOBILE_BREAKPOINT||window.outerWidth<this.DEVICE_MOBILE_BREAKPOINT?"mobile":"desktop",i=t.value===e;return{status:(t.condition==="is_not"?!i:i)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:e}}}truncate(t){return t?t.slice(0,200):void 0}locationMatches(t){let e=null;if(!this.cache.data.location){let h=null,_=0;try{const m=new XMLHttpRequest;m.open("GET",this.locationApiUrl,!1),m.send(null),_=m.status,_===200?h=JSON.parse(m.responseText):e={cause:"http_status",status:_,error:this.truncate(m.responseText)}}
11catch(m){e={cause:_===200?"invalid_response":"request_failed",status:_,error:this.truncate(String(m))}}e&&console.debug("shogun: location lookup failed, location audiences cannot be evaluated",e),h&&(this.cache.data.location={country:h==null?void 0:h.country,region:h==null?void 0:h.region,city:h==null?void 0:h.city,timestamp:Date.now()},this.saveCache())}const i={condition:t.condition,value:t.value},s=this.cache.data.location;if(!i||!i.value||!i.value.type||!i.value.country_code)return{status:"no_match",expected:i,actual:s?{value:s}:null};if(!s)return{status:"error",expected:i,actual:e,reason:"location_unavailable"};const{type:n,country_code:r,toponym_name:d,parent_name:a}=i.value;let l=!1;switch(n){case"country":l=s.country===r;break;case"region":l=s.region===d&&s.country===r;break;case"city":l=s.city===d&&s.region===a&&s.country===r;break;default:l=!1}return{status:(t.condition==="is_not"?!l:l)?"match":"no_match",expected:i,actual:{value:s}}}loggedInMatches(t){const e=String(t.value)==="true",i=this.visitor.isLoggedIn===e;return{status:(t.condition==="is_not"?!i:i)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:this.visitor.isLoggedIn}}}referrerContainsMatches(t){if(typeof t.value!="string")return{status:"error",expected:{condition:t.condition,value:t.value},actual:null,reason:"Invalid expected value"};const e=document.referrer.toLowerCase().includes(t.value.toLowerCase());return{status:(t.condition==="is_not"?!e:e)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:document.referrer}}}urlContainsMatches(t){if(typeof t.value!="string")return{status:"error",expected:{condition:t.condition,value:t.value},actual:null,reason:"Invalid expected value"};const e=window.location.href.toLowerCase().includes(t.value.toLowerCase());return{status:(t.condition==="is_not"?!e:e)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:window.location.href}}}returningVisitorMatches(t){if(!this.visitor.detailsPersisted||!this.visitor.details)return{status:"error",expected:{condition:t.condition,value:t.value},actual:null,reason:"visitor_details_unavailable"};const{expected_time_in_milliseconds:e,within_or_after:i}=t.value||{};if(typeof e!="number"||!i)return{status:"error",expected:{condition:t.condition,value:t.value},actual:null,reason:"Invalid expected data"};const s=this.visitor.details.first_visit_timestamp,n=Date.now();if(i==="within"){const r=s+e>n;return{status:(t.condition==="is_not"?!r:r)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:s}}}else{const r=s+e<n;return{status:(t.condition==="is_not"?!r:r)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:s}}}}newVisitorMatches(t){if(!this.visitor.detailsPersisted)return{status:"error",expected:{condition:t.condition,value:t.value},actual:null,reason:"visitor_details_unavailable"};const e=t.value==this.visitor.isFirstVisit;return{status:(t.condition==="is_not"?!e:e)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:this.visitor.isFirstVisit}}}restoreCache(){const t=this.storage.get(this.CACHE_KEY);if(t)try{const e=JSON.parse(t);e.timestamp<=Date.now()-this.CACHE_EXPIRATION_DAYS*24*60*60*1e3?(this.storage.remove(this.CACHE_KEY),this.cache.data={}):this.cache=e}catch{this.storage.remove(this.CACHE_KEY),this.cache.data={}}}saveCache(){this.cache.timestamp=Date.now(),this.storage.set(this.CACHE_KEY,JSON.stringify(this.cache))}snakeCaseKeys(t){if(t==null||typeof t!="object")return t;const e={};for(const[i,s]of Object.entries(t)){const n=i.replace(/[A-Z]/g,r=>`_${r.toLowerCase()}`);e[n]=s}return e}}class A extends Error{constructor(e,i,s={}){super(e,{cause:s.cause});c(this,"optimization");this.reason=i,this.name="DispatchError",this.optimization=s.optimization}}const g=class g{constructor(t){c(this,"customerId");c(this,"isB2B");c(this,"details",null);c(this,"sessionId",null);c(this,"id",null);c(this,"_idsPersisted",!0);c(this,"_detailsPersisted",!0);c(this,"storage",new v("local"));c(this,"sessionCookie",new v("cookie",{expires:1/48,path:"/"}));c(this,"visitorCookie",new v("cookie",{expires:365,path:"/"}));this.context=t,this.sessionId=t.sessionId,this.customerId=t.customerId,this.isB2B=t.isB2B,this.loadCachedDetails(),this.loadAndStoreVisitorId(),this.loadAndStoreSessionId()}static storedIds(){const t=new v("cookie");return{id:t.get(g.VISITOR_ID_KEY),sessionId:t.get(g.SESSION_ID_KEY)}}get bin(){return this.sessionId?this.hashWithDjb2(this.sessionId)%g.DEFAULT_NUMBER_OF_BINS:0}
11get firstVisitTimestamp(){var t;return((t=this.details)==null?void 0:t.first_visit_timestamp)??Date.now()}get isFirstVisit(){return this.firstVisitTimestamp>=Date.now()-g.NEW_VISITOR_THRESHOLD_MINUTES*60*1e3}get isLoggedIn(){return!!this.customerId}loadCachedDetails(){var e;const t=this.storage.get(g.DETAILS_KEY);if(t)try{this.details=JSON.parse(t),typeof((e=this.details)==null?void 0:e.first_visit_timestamp)!="number"&&(console.warn("Invalid visitor details found in storage, resetting."),this.details=null)}catch(i){console.error("Error loading visitor details from storage:",i),this.details=null}this.details||(this.details={first_visit_timestamp:Date.now()},this._detailsPersisted=this.storage.set(g.DETAILS_KEY,JSON.stringify(this.details)))}get detailsPersisted(){return this._detailsPersisted}get idsPersisted(){return this._idsPersisted}get cookiesWritable(){return this.visitorCookie.writable}newId(){try{return crypto.randomUUID()}catch{return console.debug("shogun: this platform will not generate an identifier for the visitor"),null}}loadAndStoreSessionId(){const t=this.sessionId||this.sessionCookie.get(g.SESSION_ID_KEY)||null;t?this.sessionId=t:(this.sessionId=this.newId(),this.sessionId||(this._idsPersisted=!1)),this.sessionId&&(this._idsPersisted=this.sessionCookie.set(g.SESSION_ID_KEY,this.sessionId)&&this._idsPersisted)}loadAndStoreVisitorId(){const t=this.visitorCookie.get(g.VISITOR_ID_KEY)||null;t?this.id=t:(this.id=this.newId(),this.id?this._idsPersisted=this.visitorCookie.set(g.VISITOR_ID_KEY,this.id)&&this._idsPersisted:this._idsPersisted=!1)}hashWithDjb2(t){let e=5381;for(let i=0;i<t.length;i++)e=(e<<5)-e+t.charCodeAt(i),e|=0;return Math.abs(e)}};c(g,"DETAILS_KEY","_shg_ab_visitor_details"),c(g,"SESSION_ID_KEY","_shg_ab_session_id"),c(g,"VISITOR_ID_KEY","_shg_ab_visitor_id"),c(g,"DEFAULT_NUMBER_OF_BINS",1e4),c(g,"NEW_VISITOR_THRESHOLD_MINUTES",30);let T=g;const S=class S{constructor(t){c(this,"buyItNowHandlerAttached",!1);this.config=t}run(){typeof document<"u"&&document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{this.attachBuyItNowHandler()}):setTimeout(()=>{this.attachBuyItNowHandler()},100)}attachBuyItNowHandler(){var s;const t=(s=this.config)==null?void 0:s.currentCartVariantId;if(!t){console.debug("shogun: no current cart variant ID assigned, buy-it-now interception skipped");return}if(this.buyItNowHandlerAttached)return;this.buyItNowHandlerAttached=!0,console.debug("shogun: setting up buy-it-now interception with cart variant ID:",t);const e=async(n,r)=>{var u,h,_,m;const d=(r==null?void 0:r.formData)??new FormData(n);let a=(r==null?void 0:r.variantId)??this.extractVariantIdFromFormData(d);if(!a){console.debug("shogun: no product variant ID found for buy-it-now, interception skipped");return}const l=(r==null?void 0:r.quantity)??(parseInt(d.get("quantity")||"1",10)||1);if(console.debug("shogun: buy-it-now details:",{productVariantId:a,quantity:l,cartVariantId:t,storefrontAccessToken:(u=this.config)!=null&&u.storefrontAccessToken?"***":null,shopDomain:(h=this.config)==null?void 0:h.shopDomain}),(_=this.config)!=null&&_.storefrontAccessToken&&((m=this.config)!=null&&m.shopDomain)){console.debug("shogun: attempting cartCreate with merchandiseId:",`gid://shopify/ProductVariant/${a}`);const D=await this.createCartAndGetCheckoutUrl(a,l,t);if(D){console.debug("shogun: redirecting to cartCreate checkoutUrl (original cart preserved)"),window.location.href=D;return}}console.debug("shogun: falling back to cart add with cart variant"),await this.addToCartAndCheckout(a,l,t)};typeof document<"u"&&(()=>{document.addEventListener("click",n=>{const r=n.target;if(!r)return;const d=this.findPaymentElementFromClick(n,r);if(!d)return;const a=this.findFormForPaymentElement(d,r,n);if(!a)return;
11const l=this.getBuyItNowDetailsFromForm(a);l&&(n.preventDefault(),n.stopPropagation(),n.stopImmediatePropagation(),e(a,l))},{capture:!0})})()}async createCartAndGetCheckoutUrl(t,e,i){var a,l,u,h,_,m,D;if(!((a=this.config)!=null&&a.storefrontAccessToken)||!((l=this.config)!=null&&l.shopDomain))return null;const s=` 12 mutation cartCreate($input: CartInput!) { 13 cartCreate(input: $input) { 14 cart { 15 id 16 checkoutUrl 17 } 18 userErrors { 19 field 20 message 21 } 22 } 23 } 24 `,n=i?[{key:"shogun_variant_id",value:i}]:[];let r=[];i&&this.config.lineItemLevelVariant&&(r=[{key:"_shogun_variant_id",value:i}]);const d={input:{lines:[{merchandiseId:`gid://shopify/ProductVariant/${t}`,quantity:e,attributes:r}],attributes:n}};try{const M=JSON.stringify({query:s,variables:d}),st=`https://${this.config.shopDomain}/api/2026-07/graphql.json`;console.debug("shogun: cartCreate request URL:",st),console.debug("shogun: cartCreate request body:",M);const P=await(await fetch(st,{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Storefront-Access-Token":this.config.storefrontAccessToken},body:M})).json();return console.debug("shogun: cartCreate full response:",JSON.stringify(P,null,2)),(_=(h=(u=P.data)==null?void 0:u.cartCreate)==null?void 0:h.cart)!=null&&_.checkoutUrl?(console.debug("shogun: cartCreate successful, checkoutUrl:",P.data.cartCreate.cart.checkoutUrl),P.data.cartCreate.cart.checkoutUrl):(console.error("shogun: cartCreate failed:",((D=(m=P.data)==null?void 0:m.cartCreate)==null?void 0:D.userErrors)||P.errors),null)}catch(M){return console.error("shogun: cartCreate error:",M),null}}async addToCartAndCheckout(t,e,i){var n;const s={items:[{id:t,quantity:e,properties:{}}]};i&&(s.attributes={shogun_variant_id:i},(n=this.config)!=null&&n.lineItemLevelVariant&&(s.items[0].properties={_shogun_variant_id:i}));try{const r=await fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});r.ok?(console.debug("shogun: added to cart, redirecting to checkout"),window.location.href="/checkout"):console.error("shogun: cart add failed:",await r.text())}catch(r){console.error("shogun: cart add error:",r)}}findPaymentElementFromClick(t,e){const i=e.closest(S.SHOPIFY_PAYMENT_BUTTON_SELECTOR);if(i)return i;const s=typeof t.composedPath=="function"?t.composedPath():[];for(const n of s)if(n instanceof HTMLElement&&n.matches(S.SHOPIFY_PAYMENT_BUTTON_SELECTOR))return n;return null}findFormForPaymentElement(t,e,i){const s=t.closest("form");if(s)return s;const n=e==null?void 0:e.closest("form");if(n)return n;const r=(e==null?void 0:e.closest("[form]"))||t.closest("[form]")||t.querySelector("[form]"),d=r==null?void 0:r.getAttribute("form");if(d){const h=document.getElementById(d);if(h instanceof HTMLFormElement)return h}const a=typeof(i==null?void 0:i.composedPath)=="function"?i.composedPath():[];for(const h of a)if(h instanceof HTMLFormElement)return h;const l=document.querySelectorAll("form");let u=null;for(const h of l)if(h.querySelector(S.SHOPIFY_PAYMENT_BUTTON_SELECTOR)){if(u)return console.debug("shogun: multiple payment-button forms found; skipping ambiguous buy-it-now form mapping"),null;u=h}return u}normalizeProductVariantId(t){if(!t)return null;const e=String(t);if(!e.includes("gid://"))return e;const i=e.match(/\/(\d+)$/);return i?i[1]:e}extractVariantIdFromFormData(t){const e=t.get("id")||t.get("variant_id");if(!e)return null;const i=this.normalizeProductVariantId(e);return i&&i!==e&&console.debug("shogun: extracted numeric ID from GID:",i),i}
24getBuyItNowDetailsFromForm(t){const e=new FormData(t),i=this.extractVariantIdFromFormData(e);if(!i)return null;const s=parseInt(e.get("quantity")||"1",10)||1;return{formData:e,variantId:i,quantity:s}}};c(S,"SHOPIFY_PAYMENT_BUTTON_SELECTOR",'shopify-buy-it-now-button, shopify-accelerated-checkout, [data-shopify="payment-button"], .shopify-payment-button');let z=S;class V{constructor(t,e,i){c(this,"id");c(this,"name");c(this,"type");c(this,"scope");c(this,"config");c(this,"variants");c(this,"assignedVariantId");c(this,"state");c(this,"assignedAt");c(this,"eligibility");c(this,"context");c(this,"audienceEvaluator");this.id=t.id,this.name=t.name,this.type=t.type,this.scope=t.scope,this.config=t.config||{},this.variants=t.variants||[],this.assignedVariantId=t.assignedVariantId,this.state=t.assignedVariantId?t.state:void 0,this.assignedAt=t.assignedVariantId?t.assignedAt:void 0,this.context=e,this.audienceEvaluator=i}get isFirstAssignment(){return!!this.assignedVariantId&&this.state===void 0}get isFirstView(){return!!this.assignedVariantId&&(this.isEligible||this.isOnAssignedVariant)&&this.state!=="started"}get assignedVariant(){return this.assignedVariantId&&this.variants.find(t=>t.id===this.assignedVariantId)||null}get originalVariant(){return this.variants.find(t=>t.config.original)||null}get isOnAssignedVariant(){var t;return this.assignedVariantId?this.assignedVariantId===((t=this.currentVariant)==null?void 0:t.id):!1}get isEligible(){var t;return((t=this.eligibility)==null?void 0:t.status)==="eligible"}get firstNonDefaultEligibleVariant(){if(!this.eligibility||!this.eligibility.variants)return null;const t=Object.entries(this.eligibility.variants).filter(([i,s])=>s.status==="eligible").map(([i,s])=>i);return this.variantsByPosition().find(i=>t.includes(i.id)&&!i.config.original)||null}get inReview(){return this.type==="review"}get canDispatch(){return!!this.assignedVariant}get needsDispatch(){return this.assignedVariantId?!this.isOnAssignedVariant&&(this.inReview||this.isEligible):!1}evaluateEligibility(){const t=this.type=="ab_test"?this.evaluateAudienceEligibility():{status:"eligible",condition:void 0,expected:{},actual:{}},e=this.evaluateScopeEligibility(),i=this.evaluateVariantAudienceEligibility(),s=[t,e].every(r=>r.status==="eligible"||r.status==="match")&&(Object.keys(i).length===0||Object.values(i).some(r=>r.status==="eligible")),n=[t,e,...Object.values(i)].some(r=>r.status==="error");this.eligibility={status:s?"eligible":n?"error":"not_eligible",audience:t,scope:e,variants:i}}evaluateAudienceEligibility(){return this.audienceEvaluator.evaluateAll(this.config.audiences||[],this.config.audiences_condition||"every")}evaluateVariantAudienceEligibility(){const t={};for(const e of this.variants)e.config.audiences&&e.config.audiences.length>0?t[e.id]=this.audienceEvaluator.evaluateAll(e.config.audiences,e.config.audiences_condition||"every"):e.config.original||(t[e.id]={status:"eligible",condition:void 0,expected:{},actual:{}});return t}finalize(){this.isEligible&&this.removeViewParam()}extractPartialTemplateKey(t){if(!t)return;const e=t.split(".");return e.length<2?t:e.slice(0,-1).join(".")}variantForCurrentTemplate(){const t=this.pagePartialTemplateKey();return this.variants.find(e=>this.extractPartialTemplateKey(e.config.full_template_key)===t)||null}matchesCurrentTemplate(){return this.variantForCurrentTemplate()!==null}pagePartialTemplateKey(){const t=this.context.page.templateDirectory||(this.context.page.pageType==="metaobject"?"metaobject":null),e=t?`templates/${t}/`:"templates/",i=[this.context.page.templateName,this.context.page.templateSuffix].filter(Boolean).join(".");return e+i}extractViewParamFromFullTemplateKey(t){if(!t)return;const e=t.split("/").pop().split(".")||[];return e.slice(1,e.length-1).join(".")}variantsByPosition(){return this.variants.slice().sort((t,e)=>{const i=t.position||0,s=e.position||0;return i-s})}removeViewParam(){const t=new URL(window.location.href);t.searchParams.delete("view"),window.history.replaceState({},"",t.toString())}redirect(t){t.searchParams.delete("cache"),window.location.replace(t.toString())}}class N extends V{constructor(e,i,s){super(e,i,s);c(this,"buyItNowFinalizer",null);this.buyItNowFinalizer=new z({currentCartVariantId:this.context.page.currentCartVariantId,shopDomain:this.context.shop.shopDomain,storefrontAccessToken:this.context.shop.storefrontAccessToken})}get currentVariant(){return this.variants.find(e=>e.id===this.context.page.currentCartVariantId)||null}evaluateScopeEligibility(){return{status:"match",expected:this.scope,actual:this.scope}}
24dispatch(){this.dispatchCartAssignment(new URL(window.location.href))}dispatchCartAssignment(e){var n;const i=this.assignedVariant;if(!i)throw new Error(`Cannot dispatch ${this.scope} optimization because the assigned variant is not set`);const s=new XMLHttpRequest;if(s.open("POST","/cart/update.js",!1),s.setRequestHeader("Content-Type","application/json"),s.send(JSON.stringify({attributes:{shogun_variant_id:i==null?void 0:i.id}})),s.status===200){const r=(n=i==null?void 0:i.config)==null?void 0:n.theme_id;console.debug(`shogun: dispatching ${this.scope} optimization by setting cart attribute and reloading the page to reflect cart changes`+(r?` with theme_id '${r}'`:"")),this.redirect(e)}else throw new Error(`Failed to update cart for ${this.scope} optimization dispatch, status: ${s.status}`)}finalize(){var e;(this.isEligible||this.inReview)&&((e=this.buyItNowFinalizer)==null||e.run())}}class rt extends N{}class at extends V{get currentVariant(){return this.matchesPage()?this.variantForCurrentTemplate():null}matchesPage(){const{page_type:t,page_id:e}=this.config,i=!t||t===this.context.page.pageType,s=!e||e===this.context.page.pageId;return i&&s}evaluateScopeEligibility(){const{page_type:t,page_id:e}=this.config,i=new URLSearchParams(window.location.search).get("view");return i&&!this.variants.some(s=>this.extractViewParamFromFullTemplateKey(s.config.full_template_key)===i)?{status:"skipped",expected:void 0,actual:void 0,reason:"Visitor has view param that does not match any variant template keys, likely previewing a template change from theme editor"}:{status:this.scope==="page"&&this.matchesCurrentTemplate()&&this.matchesPage()?"match":"no_match",expected:{page_type:t,page_id:e},actual:{page_type:this.context.page.pageType,page_id:this.context.page.pageId}}}get canDispatch(){var t;return super.canDispatch&&!!this.extractViewParamFromFullTemplateKey((t=this.assignedVariant)==null?void 0:t.config.full_template_key)}dispatch(){var i,s,n;const t=new URL(window.location.href),e=this.extractViewParamFromFullTemplateKey((i=this.assignedVariant)==null?void 0:i.config.full_template_key);if(!e)throw new Error(`Assigned variant does not have a valid viewParam for dispatching full_template_key: ${(s=this.assignedVariant)==null?void 0:s.config.full_template_key}, variant: ${(n=this.assignedVariant)==null?void 0:n.id}`);t.searchParams.set("view",e),console.debug("shogun: Dispatching page optimization by redirecting to ",t.toString()),this.redirect(t)}}class ot extends N{}class ct extends N{}const B="_shogun_variant_id",x=`properties[${B}]`,dt=/\/cart\/add(\.js)?$/;class lt{constructor(t){c(this,"addToCartHandlerAttached",!1);c(this,"cartAddRequestInterceptionAttached",!1);this.config=t}run(){var e;const t=(e=this.config)==null?void 0:e.currentCartVariantId;if(!t){console.debug("shogun: no current cart variant ID assigned, add-to-cart interception skipped");return}this.interceptCartAddRequests(t),typeof document<"u"&&document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{this.attachAddToCartHandler(t)}):setTimeout(()=>{this.attachAddToCartHandler(t)},100)}attachAddToCartHandler(t){this.addToCartHandlerAttached||(this.addToCartHandlerAttached=!0,console.debug("shogun: setting up add-to-cart interception with cart variant ID:",t),document.querySelectorAll('form[action="/cart/add"]').forEach(e=>{const i=document.createElement("input");i.name=x,i.value=t,i.type="hidden",e.appendChild(i)}))}interceptCartAddRequests(t){this.cartAddRequestInterceptionAttached||(this.cartAddRequestInterceptionAttached=!0,this.interceptFetchCartAdd(t),this.interceptXhrCartAdd(t))}interceptFetchCartAdd(t){if(typeof window>"u"||typeof window.fetch!="function")return;const e=window.fetch,i=this;window.fetch=function(s,n){try{const r=((n==null?void 0:n.method)??(s instanceof Request?s.method:"GET")).toUpperCase(),d=s instanceof Request?s.url:String(s);if(r==="POST"&&i.isCartAddUrl(d)&&(n==null?void 0:n.body)!=null){const a=i.withShogunVariantProperty(n.body,t);if(a!==null)return e.call(this,s,{...n,body:a})}}catch(r){console.debug("shogun: failed to inject cart variant into fetch cart add request:",r)}return e.call(this,s,n)}}interceptXhrCartAdd(t){if(typeof XMLHttpRequest>"u")return;const e=XMLHttpRequest.prototype.open,i=XMLHttpRequest.prototype.send,s=this;XMLHttpRequest.prototype.open=function(n,r,d=!0,a,l){return this.__shogunIsCartAdd=(n==null?void 0:n.toUpperCase())==="POST"&&s.isCartAddUrl(String(r)),e.call(this,n,r,d,a,l)},XMLHttpRequest.prototype.send=function(n){if(this.__shogunIsCartAdd&&n!=null&&!(n instanceof Document))try{const r=s.withShogunVariantProperty(n,t);if(r!==null)return i.call(this,r)}catch(r){console.debug("shogun: failed to inject cart variant into XHR cart add request:",r)}return i.call(this,n)}}isCartAddUrl(t){try{const e=new URL(t,window.location.origin);return e.origin===window.location.origin&&dt.test(e.pathname)}catch{return!1}}withShogunVariantProperty(t,e){return t instanceof FormData||t instanceof URLSearchParams?(t.has(x)||t.append(x,e),t):typeof t=="string"?this.withShogunVariantPropertyInString(t,e):null}withShogunVariantPropertyInString(t,e){try{const s=JSON.parse(t);return s&&typeof s=="object"&&!Array.isArray(s)?JSON.stringify(this.withShogunVariantPropertyInPayload(s,e)):null}catch{}if(!t.includes("="))return null;const i=new URLSearchParams(t);return i.has(x)||i.append(x,e),i.toString()}withShogunVariantPropertyInPayload(t,e){return Array.isArray(t.items)?{...t,items:t.items.map(i=>i&&typeof i=="object"?{...i,properties:this.withVariantProperty(i.properties,e)}:i)}:"id"in t?{...t,properties:this.withVariantProperty(t.properties,e)}:t}withVariantProperty(t,e){const i=t&&typeof t=="object"?t:{};return i[B]!=null?i:{...i,[B]:e}}}const R=class R{constructor(){c(this,"observer",null)}removePreviewBar(t){t instanceof Element&&t.matches(R.PREVIEW_BAR_IFRAME_SELECTOR)&&(console.debug(`shogun: Removing preview bar iframe with id: ${t.id}`),t.remove(),this.stop()),t.querySelectorAll(R.PREVIEW_BAR_IFRAME_SELECTOR).forEac
24h(e=>{console.debug(`shogun: Removing preview bar iframe with id: ${e.id}`),e.remove(),this.stop()})}run(){if(this.observer)return;const t=document.documentElement;t&&(this.observer=new MutationObserver(e=>{for(const i of e)for(const s of i.addedNodes)s instanceof Element&&this.removePreviewBar(s)}),this.observer.observe(t,{childList:!0,subtree:!0}),this.removePreviewBar(document))}stop(){var t;(t=this.observer)==null||t.disconnect(),this.observer=null}};c(R,"PREVIEW_BAR_IFRAME_SELECTOR","#preview-bar-iframe, #PBarNextFrameWrapper");let F=R;class ht extends N{constructor(e,i,s){super(e,i,s);c(this,"addToCartFinalizer",null);c(this,"themePreviewFinalizer",null);this.buyItNowFinalizer=new z({currentCartVariantId:this.context.page.currentCartVariantId,shopDomain:this.context.shop.shopDomain,storefrontAccessToken:this.context.shop.storefrontAccessToken,lineItemLevelVariant:!0}),this.addToCartFinalizer=new lt({currentCartVariantId:this.context.page.currentCartVariantId})}get currentVariant(){const e=super.currentVariant;if(!e)return null;const i=e.config.theme_id;return i?i===this.context.page.themeId?e:null:e}dispatch(){var s;const e=new URL(window.location.href),i=(s=this.assignedVariant)==null?void 0:s.config.theme_id;i&&i!==this.context.page.themeId&&e.searchParams.set("preview_theme_id",i),this.dispatchCartAssignment(e)}finalize(){var e,i,s,n;(this.isEligible||this.inReview)&&((e=this.addToCartFinalizer)==null||e.run(),(i=this.buyItNowFinalizer)==null||i.run()),this.isOnAssignedVariant&&((s=this.assignedVariant)!=null&&s.config.theme_id)&&(this.themePreviewFinalizer||(this.themePreviewFinalizer=new F),(n=this.themePreviewFinalizer)==null||n.run())}}class ut extends V{get currentVariant(){return this.variantForCurrentTemplate()}evaluateScopeEligibility(){const t=this.pagePartialTemplateKey();return{status:this.matchesCurrentTemplate()?"match":"no_match",expected:t,actual:t}}get canDispatch(){var t;return super.canDispatch&&!!this.extractViewParamFromFullTemplateKey((t=this.assignedVariant)==null?void 0:t.config.full_template_key)}dispatch(){var i,s,n;const t=new URL(window.location.href),e=this.extractViewParamFromFullTemplateKey((i=this.assignedVariant)==null?void 0:i.config.full_template_key);if(!e)throw new Error(`Assigned variant does not have a valid viewParam for dispatching full_template_key: ${(s=this.assignedVariant)==null?void 0:s.config.full_template_key}, variant: ${(n=this.assignedVariant)==null?void 0:n.id}`);t.searchParams.set("view",e),console.debug("shogun: Dispatching template optimization by redirecting to ",t.toString()),this.redirect(t)}}class J extends V{constructor(e,i,s){super(e,i,s);c(this,"themePreviewFinalizer",null);this.themePreviewFinalizer=new F}get currentVariant(){return this.variants.find(e=>e.config.theme_id===this.context.page.themeId)||null}evaluateScopeEligibility(){if(!this.originalVariant)return{status:"error",expected:void 0,actual:void 0,reason:"Original variant is missing"};const e=this.originalVariant.config.theme_id;return e?{status:e===this.context.page.themeId?"match":"no_match",expected:e,actual:this.context.page.themeId}:{status:"error",expected:void 0,actual:void 0,reason:"Original variant is missing theme_id in config"}}
24get needsDispatch(){return this.isEligible&&!this.isOnAssignedVariant&&this.isFirstView}get canDispatch(){var e;return super.canDispatch&&!!((e=this.assignedVariant)!=null&&e.config.theme_id)}dispatch(){var s,n;const e=(s=this.assignedVariant)==null?void 0:s.config.theme_id;if(!e)throw new Error(`Assigned variant does not have a valid theme_id for dispatching, variant: ${(n=this.assignedVariant)==null?void 0:n.id}`);const i=new URL(window.location.href);i.searchParams.set("preview_theme_id",e),console.debug("shogun: Dispatching theme optimization by redirecting to ",i.toString()),this.redirect(i)}finalize(){var e;this.isOnAssignedVariant&&((e=this.themePreviewFinalizer)==null||e.run())}}c(J,"PREVIEW_BAR_IFRAME_IDS",["preview-bar-iframe","PBarNextFrameWrapper"]);class gt extends V{get currentVariant(){const t=decodeURIComponent(this.getCurrentPathWithoutLanguagePrefix());return this.variants.find(e=>e.config.path===t)||null}evaluateScopeEligibility(){const t=this.variants.find(r=>r.config.original);if(!t)return{status:"error",expected:void 0,actual:void 0,reason:"Original variant is missing"};const e=t.config.path;if(!e)return{status:"error",expected:void 0,actual:void 0,reason:"Original variant is missing path in config"};if(new URL(window.location.href).searchParams.get("view"))return{status:"skipped",expected:void 0,actual:void 0,reason:"Visitor is likely previewing a template change from theme editor"};const s=this.getCurrentPathWithoutLanguagePrefix(),n=decodeURIComponent(s);return{status:decodeURIComponent(e)===n?"match":"no_match",expected:e,actual:n}}get needsDispatch(){return!this.assignedVariantId||!this.isEligible?!1:(console.debug("shogun: Checking if URL redirect optimization needs dispatch. isOnAssignedVariant:",this.isOnAssignedVariant,"isFirstView:",this.isFirstView,"permanentRedirect:",this.config.permanent_redirect),this.config.permanent_redirect===!0&&!this.isOnAssignedVariant||!this.isOnAssignedVariant&&this.isFirstView===!0)}get canDispatch(){var t;return super.canDispatch&&!!((t=this.assignedVariant)!=null&&t.config.path)}get isOnAssignedVariant(){var e;if(super.isOnAssignedVariant)return!0;const t=((e=this.currentVariant)==null?void 0:e.config.original)===!0;return!!this.assignedVariantId&&t&&this.state==="started"&&this.config.permanent_redirect!==!0}dispatch(){var e,i,s,n,r;const t=new URL(window.location.href);if(!((e=this.assignedVariant)!=null&&e.config.path))throw new Error(`Assigned variant does not have a valid path for dispatching path: ${(i=this.assignedVariant)==null?void 0:i.config.path}, variant: ${(s=this.assignedVariant)==null?void 0:s.id}`);t.pathname=this.context.page.languageRootUrl!=="/"?this.context.page.languageRootUrl+((n=this.assignedVariant)==null?void 0:n.config.path):(r=this.assignedVariant)==null?void 0:r.config.path,console.debug("shogun: Dispatching url optimization by redirecting to ",t.toString()),this.redirect(t)}getCurrentPathWithoutLanguagePrefix(){return this.context.page.languageRootUrl==="/"||!this.context.page.path.startsWith(this.context.page.languageRootUrl)?this.context.page.path:this.context.page.path.replace(this.context.page.languageRootUrl,"")}}function X(o,t,e){switch(o.scope){case"page":return new at(o,t,e);case"template":return new ut(o,t,e);case"theme":return new J(o,t,e);case"url_redirect":return new gt(o,t,e);case"price":return new ot(o,t,e);case"product_details":return new ct(o,t,e);case"checkout":return new rt(o,t,e);case"shipping":return new ht(o,t,e);default:return console.debug(`shogun: No implementation for optimization scope '${o.scope}', ignoring optimization '${o.name}' (${o.id})`),null}}class H{constructor(t){c(this,"visitorBin");this.visitorBin=t}getRandomVariantForVisitorBin(t){let e=null,i=0;for(const s of t)if(i+=T.DEFAULT_NUMBER_OF_BINS*this.trafficForVariant(s)/100,this.visitorBin<i){e=s;break}return e||null}trafficForVariant(t){return t.config.percentage||0}}const k=class k extends H{assign(t){var s,n;if(t.length===0)return null;const e=this.sortOptimizationsByPriority(t),i=e.find(r=>r.firstNonDefaultEligibleVariant!==null);return i?(i.assignedVariantId=(s=i.firstNonDefaultEligibleVariant)==null?void 0:s.id,i):(e[0].assignedVariantId=(n=e[0].originalVariant)==null?void 0:n.id,e[0])}sortOptimizationsByPriority(t){return t.sort((e,i)=>{const s=this.scopePriority(e.scope),n=this.scopePriority(i.scope);return s-n})}
24scopePriority(t){return k.SCOPE_PRIORITIES[t||"page"]??k.SCOPE_PRIORITIES.page}};c(k,"SCOPE_PRIORITIES",{theme:1,template:2,page:3,url_redirect:4,price:5,product_details:6,checkout:7,shipping:8});let K=k;class Z extends H{assign(t){const e=t.filter(n=>n.isEligible);if(e.length===0)return null;const i=e[Math.floor(Math.random()*e.length)],s=this.getRandomVariantForVisitorBin(i.variants);return s?(i.assignedVariantId=s.id,i):null}}class pt extends H{assign(t){const e=t.flatMap(n=>n.variants),i=this.getRandomVariantForVisitorBin(e),s=t.find(n=>n.variants.some(r=>r.id===(i==null?void 0:i.id)))||null;return s&&i?(s.assignedVariantId=i.id,s):null}trafficForVariant(t){return t.traffic_percentage||0}}const O=class O{constructor(){c(this,"storage",new v("session"))}save(){typeof document>"u"||this.storage.set(O.STORAGE_KEY,document.referrer)||console.debug("shogun: could not retain the referrer, this visitor will be attributed to an internal redirect")}restore(){const t=this.storage.get(O.STORAGE_KEY);return t===null?typeof document<"u"&&document.referrer||null:(this.overrideDocumentReferrer(t),t||null)}clear(){this.storage.remove(O.STORAGE_KEY)}overrideDocumentReferrer(t){if(!(typeof document>"u"))try{Object.defineProperty(document,"referrer",{configurable:!0,get:()=>t})}catch(e){console.debug("shogun: failed to set original referrer via `Object.defineProperty`"),console.error(e);try{window.document.__defineGetter__("referrer",()=>t)}catch(i){console.debug("shogun: failed to set original referrer via `__defineGetter__`"),console.error(i)}}}};c(O,"STORAGE_KEY","_shg_referrer");let Y=O;const p=class p{constructor(t,e){c(this,"storage",new v("session"));c(this,"previewLinkHandlerAttached",!1);c(this,"_optimizationInReview");c(this,"optimizationResolved",!1);this.context=t,this.audienceEvaluator=e}get inReview(){return!!this.optimizationInReview}get optimizationInReview(){if(!this.optimizationResolved){const t=this.previewVariantId;this._optimizationInReview=t?X({id:"review-optimization",name:"Review Optimization",type:"review",scope:this.previewScope,state:"started",variants:[{id:t,name:"Preview Variant",optimization_id:"review-optimization",traffic_percentage:100,config:{original:!1,percentage:100}}],assignedVariantId:t},{page:this.context.page,shop:this.context.shop},this.audienceEvaluator):null,this.optimizationResolved=!0}return this._optimizationInReview||null}run(){const t=document.getElementById(p.PANEL_TEMPLATE_ID);if(!t){console.debug("shogun: sidebar not found!!!");return}const e=t.content.cloneNode(!0);this.attachPreviewLinkClickHandler();const i=()=>{document.body.style.paddingLeft="360px",document.body.style.paddingTop="50px",document.body.prepend(e),typeof window.restoreCollapsedState=="function"&&window.restoreCollapsedState(),typeof window.restoreDescriptionHeightState=="function"&&window.restoreDescriptionHeightState()};if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",i);return}i()}get previewVariantId(){const e=new URLSearchParams(window.location.search).get(p.REVIEW_OPTIMIZATION_VARIANT_ID_PARAM),i=this.storage.get(p.PREVIEW_VARIANT_ID_STORAGE_KEY);return e&&e!==i?(console.debug(`shogun: theme review in progress, setting variant: ${e}`),this.storage.set(p.PREVIEW_VARIANT_ID_STORAGE_KEY,e),e):(i&&console.debug(`shogun: theme review in progress, viewing variant: ${i}`),i)}get previewScope(){const e=new URLSearchParams(window.location.search).get(p.REVIEW_OPTIMIZATION_SCOPE_PARAM),i=this.storage.get(p.PREVIEW_OPTIMIZATION_SCOPE_STORAGE_KEY);return e&&e!==i?(console.debug(`shogun: theme review in progress, setting scope: ${e}`),this.storage.set(p.PREVIEW_OPTIMIZATION_SCOPE_STORAGE_KEY,e),e):i?(console.debug(`shogun: theme review in progress, using scope: ${i}`),i):p.DEFAULT_REVIEW_SCOPE}attachPreviewLinkClickHandler(){this.previewLinkHandlerAttached||(this.previewLinkHandlerAttached=!0,document.addEventListener("click",t=>{var n,r;const e=(r=(n=t.target).closest)==null?void 0:r.call(n,'a[id^="shg-preview-btn-"]'),i=e==null?void 0:e.dataset.variantId;if(!i)return;t.preventDefault();const s=new URLSearchParams(window.location.search);s.set(p.REVIEW_OPTIMIZATION_VARIANT_ID_PARAM,i),window.location.href=`${window.location.pathname}?${s.toString()}`}))}};c(p,"PANEL_TEMPLATE_ID","shogun-price-test-preview"),c(p,"PREVIEW_VARIANT_ID_
24STORAGE_KEY","_shg_preview_variant_id"),c(p,"PREVIEW_OPTIMIZATION_SCOPE_STORAGE_KEY","_shg_preview_optimization_scope"),c(p,"REVIEW_OPTIMIZATION_VARIANT_ID_PARAM","shgpvid"),c(p,"REVIEW_OPTIMIZATION_SCOPE_PARAM","shgsc"),c(p,"DEFAULT_REVIEW_SCOPE","product_details");let j=p;var ft=" daum[ /]| deusu/|(?:^|[^g])news(?!sapphire)|(?<! channel/|google/)google(?!(?:wv|app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!cam)scan|(?<!lib)http|24x7|;\\s\\w+;$|@[a-z][\\w-]+\\.|\\(\\)|\\.com\\b|\\b\\w+/1\\.0;|\\bbw/|\\bdlc\\b|\\bort/|\\bperl\\b|\\btime/|\\||^[<\\(;]|^[\\w \\.\\-\\(?:\\):%]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[\\w\\-]+/[\\w]+$|^[^ ]{50,}$|^\\d+\\b|^\\w*search\\b|^\\w+/[\\w\\(\\)]*$|^\\w+/\\d\\.\\d\\s\\([\\w@]+\\)$|^active|^ad muncher|^amaya|^apache/|^avsdevicesdk/|^azure|^biglotron|^blackbox exporter|^bot|^clamav[ /]|^claude-code/|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^email|^exodusmovement|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^igetter/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d\\s[\\w\\.-]+$|^mozilla/\\d\\.\\d\\s\\((?:compatible;)?(?:\\s?[\\w\\d-.]+\\/\\d+\\.\\d+)?\\)$|^navermailapp|^netsurf|^offline|^openai/|^owler|^php|^postman|^ps_daily/|^python|^rank|^read|^reed|^remove\\.bg/|^rest|^rss|^snapchat|^sora |^space bison|^stape/|^svn|^swcd |^taringa|^thumbor/|^track|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|abuse|advisor|agent\\b|analyzer|archive|ask jeeves/teoma|attracta|audit|bluecoat drtr|browsex|burpcollaborator|capture|catch|check\\b|checker|chrome-lighthouse|chromeframe|classifier|cloudflare|collapsify\\b|convertify|cookiehubverify/|crawl|cursor/|cypress/|dareboost|datanyze|dejaclick|detect|discovery|dmbrowser|download|exaleadcloudview|feed|firephp|foregenix|functionize|grab|hardenize\\b|headless|hotjar|httrack|hubspot marketing grader|ibisbrowser|infrawatch|insight|inspect|iplabel|java(?!;)|library|linkcheck|linktiger|mail\\.ru/|manager|manus-user/|marketgoo/|measure|monitor\\b|neustar wpm|node\\b|nutch|offbyone|openvas|optimize|pageburst|pagespeed|parser|phantomjs|pingdom|playwright|powermarks|preview|productfinder|prospectingstudio|proxy|ptst[ /]\\d|radar|readable/|retriever|rexx;|rigor|rss\\b|scrape|securityheaders|selenium|server|silktide|sindup/|sogou|sparkler/|speedcurve|spider|splash|statuscake|supercleaner|synapse|synthetic|testlocally|tools|torrent|transcoder|url|validator|virtuoso|wappalyzer|watchtowr|webglance|webkit2png|whatcms/|xtate/",mt=/bot|crawl|http|lighthouse|scan|search|spider/i,C;function vt(){if(C instanceof RegExp)return C;try{C=new RegExp(ft,"i")}catch{C=mt}return C}var wt=o=>typeof o=="string"&&o!=="";function _t(o){return wt(o)&&vt().test(o)}var bt=_t;const f=class f{constructor(t){c(this,"storage",new v("local"));this.publishedOptimizationIds=t}get writable(){return this.storage.writable}get legacyEntries(){return Object.values(this.getState()).filter(t=>typeof t=="string").length}get(t){const e=this.getState()[t];return!e||typeof e=="string"?void 0:{...e,state:e.state??"started"}}update(t){var r,d,a,l;if(t.type!=="ab_test"||t.inReview)return!0;console.debug(`shogun: Caching assignment for optimization: '${t.name}' (${t.id}) to variant: '${(r=t.assignedVariant)==null?void 0:r.name}' (${(d=t.assignedVariant)==null?void 0:d.id})'`);const e=this.getState(),i=t.state??"assigned",s=e[t.id],n=s&&typeof s=="object"?s.assignedAt:t.assignedAt??(t.isFirstAssignment?Date.now():void 0);return t.assignedAt=n,this.storage.set(f.STORAGE_KEY,JSON.stringify({...e,[t.id]:{variantId:t.assignedVariantId,themeId:(l=(a=t.assignedVariant)==null?void 0:a.config)==null?void 0:l.theme_id,state:i,assignedAt:n}}))}markDispatched(t){const e=this.getState(),i=e[t];if(!i||typeof i!="object")return null;const s=Date.now();return this.storage.set(f.STORAGE_KEY,JSON.stringify({...e,[t]:{...i,dispatchedAt:s}}))?s:null}pendingDispatch(){let t;try{t=JSON.parse(this.storage.get(f.STORAGE_KEY)||"{}")??{}}catch{return null}for(const[e,i]of Object.entries(t))if(i&&typeof i=="object"&&typeof i.dispatchedAt=="number"){const s=typeof i.landedAt=="number"?i.landedAt:void 0;return{optimizationId:e,variantId:i.variantId,dispatchedAt:i.dispatchedAt,landedAt:s}}return null}markLanded(t,e){const i=this.getState(),s=i[t];!s||typeof s!="object"||s.dispatchedAt!==e||this.storage.set(f.STORAGE_KEY,JSON.stringify({...i,[t]:{...s,landedAt:Date.now()}}))}clearDispatched(){const t=this.getState(),e=Object.keys(t).filter(i=>{const s=t[i];return typeof s=="object"&&s!==null&&(s.dispatchedAt!==void 0||s.landedAt!==void 0)});e.length!==0&&(e.forEach(i=>
24{const{dispatchedAt:s,landedAt:n,...r}=t[i];t[i]=r}),this.storage.set(f.STORAGE_KEY,JSON.stringify(t)))}clearExpired(){const t=this.getState();if(this.expiredOptimizationIds().forEach(i=>delete t[i]),!this.storage.set(f.STORAGE_KEY,JSON.stringify(t))){console.debug("shogun: could not clear expired optimization state, not redirecting so the visitor is not sent round in a loop");return}console.debug("shogun: cleared expired optimization state, redirecting to default theme");const e=new URL(window.location.href);e.searchParams.set(f.PREVIEW_THEME_PARAM,""),window.location.replace(e.toString())}hasExpiredEntries(){return this.expiredOptimizationIds().length>0}expiredOptimizationIds(){return Object.entries(this.getState()).filter(([t,e])=>typeof e=="string"?!0:!!e.themeId).map(([t])=>t).filter(t=>!this.publishedOptimizationIds.includes(t))}getState(){try{const t=JSON.parse(this.storage.get(f.STORAGE_KEY)||"{}");return!t||typeof t!="object"||Array.isArray(t)?{}:t}catch{return this.storage.remove(f.STORAGE_KEY),{}}}};c(f,"STORAGE_KEY","_shg_ab_optimizations_cache"),c(f,"PREVIEW_THEME_PARAM","preview_theme_id");let q=f;function Q(){const o=At(),t=yt();return{navigation_type:(o==null?void 0:o.type)??null,prerendering:t.prerendering,activation_start:typeof(o==null?void 0:o.activationStart)=="number"?Math.round(o.activationStart):null,visibility:t.visibility,elapsed_ms:It(),webdriver:Et()}}function yt(){try{return{prerendering:"prerendering"in document?!!document.prerendering:null,visibility:document.visibilityState??null}}catch(o){return console.debug("shogun: could not read the state of this page",o),{prerendering:null,visibility:null}}}function It(){try{return Math.round(performance.now())}catch(o){return console.debug("shogun: could not read how long this page has been loading",o),null}}function Et(){try{return"webdriver"in navigator?!!navigator.webdriver:null}catch(o){return console.debug("shogun: could not read whether this page is driven by automation",o),null}}function At(){try{return performance.getEntriesByType("navigation")[0]??null}catch(o){return console.debug("shogun: could not read the navigation timing for this page",o),null}}const tt={visitor_consent:null,banner:null,region:null};function et(o){var t,e,i;if(!o)return tt;try{return{visitor_consent:((t=o.currentVisitorConsent)==null?void 0:t.call(o))??null,banner:((e=o.shouldShowBanner)==null?void 0:e.call(o))??null,region:((i=o.getRegion)==null?void 0:i.call(o))||null}}catch(s){return console.debug("shogun: could not read the consent state",s),tt}}const y=class y{constructor(t){c(this,"pixelTrackingStarted",!1);c(this,"assignedOptimization",null);c(this,"pageViewId",y.newPageViewId());this.context=t}static newPageViewId(){try{return crypto.randomUUID()}catch{return null}}get configLapsed(){const t=this.context.shop.configExpiresAt;return typeof t=="number"&&Date.now()-t>=y.CONFIG_LAPSE_GRACE_MS}static isoOrNull(t){if(typeof t!="number"||!Number.isFinite(t))return null;const e=new Date(t);return Number.isNaN(e.getTime())?null:e.toISOString()}async track(t,e,{reason:i,details:s}={}){var d,a,l;if(e!=null&&e.inReview||this.configLapsed)return;console.debug(`shogun: tracking event '${t}' for optimization '${(e==null?void 0:e.name)||"none"}' (${(e==null?void 0:e.id)||"none"}) ${i?`with reason '${i}'`:""}`),this.assignedOptimization=e??this.assignedOptimization,(t=="started"||t=="viewed"||t=="skipped")&&this.startPixelTracking(t==="started").catch(u=>this.reportCollectionFailure(u));const n=(d=window.Shopify)==null?void 0:d.customerPrivacy;let r=!1;try{r=(n==null?void 0:n.analyticsProcessingAllowed())??!1}catch(u){console.debug("shogun: could not read the consent status",u)}try{const u=await fetch(`${this.context.shop.analyticsUrl}/dispatcher/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,shop_id:this.context.shop.shopId,pageview_id:this.pageViewId,session_id:this.context.visitor.sessionId,visitor_id:this.context.visitor.id,optimization_id:e==null?void 0:e.id,variant_id:(a=e==null?void 0:e.assignedVariant)==null?void 0:a.id,reason:i,details:{optimization_ids:this.context.publishedOptimizations.map(h=>h.id),distribution_method:this.context.assignmentStrategy,context:this.context.page,default_theme_id:this.context.shop.defaultThemeId??null,legacy_cache_entries:this.context.legacyCacheEntries,client_timestamp:new Date().toISOString(),optimizations:this.context.publishedOptimizations.map(h=>({id:h.id,assigned_variant_id:h.assignedVariantId,first_assignment:h.isFirstAssignment,assigned_at:y.isoOrNull(h.assignedAt),eligibility:h.eligibility}
24)),from_dispatch_at:y.isoOrNull(this.context.fromDispatchAt),first_visit_at:this.context.visitor.detailsPersisted?y.isoOrNull((l=this.context.visitor.details)==null?void 0:l.first_visit_timestamp):null,consented:r,consent_api:n?"available":"unavailable",consent:et(n),environment:{version:this.context.version,storage:this.context.storage,config_expires_at:y.isoOrNull(this.context.configExpiresAt),...this.context.deferral,...Q()},...s}}),keepalive:!0});u.ok||console.error(`shogun: the analytics endpoint refused the '${t}' event with status ${u.status}, it was not recorded`)}catch(u){console.error("shogun: failed to send tracking event",u)}}static async trackLanded(t){var e;try{const i=await fetch(`${t.analyticsUrl}/dispatcher/landed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:"landed",shop_id:t.shopId,pageview_id:null,session_id:t.visitor.sessionId,visitor_id:t.visitor.id,optimization_id:t.optimization.id,variant_id:t.optimization.variantId,details:{context:t.page,client_timestamp:new Date().toISOString(),from_dispatch_at:y.isoOrNull(t.dispatchedAt),consent:et((e=window.Shopify)==null?void 0:e.customerPrivacy),environment:{version:t.version,...Q()}}}),keepalive:!0});return i.ok||console.error(`shogun: the analytics endpoint refused the 'landed' event with status ${i.status}, it was not recorded`),i.ok}catch(i){return console.error("shogun: failed to send tracking event",i),!1}}async startPixelTracking(t=!1){var n,r,d,a,l;if(console.debug("shogun: attempting to start pixel tracking for optimizations"),this.pixelTrackingStarted)return;const e=Date.now(),[i,s]=await Promise.all([this.getCustomerPrivacy(),this.getAnalytics()]);i.analyticsProcessingAllowed()||(console.debug("shogun: Visitor has not consented to tracking, unable to start pixel tracking for optimizations, waiting for consent..."),await this.waitForConsent(i),this.track("consented",this.assignedOptimization??void 0).catch(u=>console.error("shogun: could not report consent",u))),console.debug("shogun: Visitor has consented to tracking, starting pixel tracking for optimizations");try{s.publish("shogun:load",{app_type:((n=this.assignedOptimization)==null?void 0:n.type)=="personalization"?"personalization":"ab_testing",page_type:this.context.page.pageType,page_id:this.context.page.pageId,optimization_id:((r=this.assignedOptimization)==null?void 0:r.id)??null,variant_id:((a=(d=this.assignedOptimization)==null?void 0:d.assignedVariant)==null?void 0:a.id)??null,on_assigned_variant:((l=this.assignedOptimization)==null?void 0:l.isOnAssignedVariant)??!1,session_id:this.context.visitor.sessionId,visitor_id:this.context.visitor.id,pageview_id:this.pageViewId,original_referrer:this.context.originalReferrer}),this.pixelTrackingStarted=!0}catch(u){this.reportCollectionFailure(u);return}t&&this.track("collecting",this.assignedOptimization??void 0,{details:{waited_ms:Date.now()-e}}).catch(u=>console.error("shogun: could not report that collection started",u))}reportCollectionFailure(t){console.error("shogun: pixel tracking did not start, this visitor will not be collected",t);const e=t instanceof A?t.reason:"analytics_unavailable";this.track("errored",this.assignedOptimization??void 0,{reason:e,details:{error:t instanceof Error?{message:t.message,stack:t.stack}:String(t)}}).catch(i=>console.error("shogun: could not report the collection failure",i))}async getShopify(){return this.until(()=>window.Shopify,"Timed out waiting for Shopify API","analytics_unavailable")}
24async getAnalytics(){const t=await this.getShopify();return this.until(()=>{const e=t.analytics;return e!=null&&e.publish?e:void 0},"Timed out waiting for Shopify analytics API","analytics_unavailable")}async getCustomerPrivacy(){const t=await this.getShopify();return t!=null&&t.customerPrivacy?t.customerPrivacy:(await this.loadConsentTrackingApi(),this.until(()=>{var e;return(e=window.Shopify)==null?void 0:e.customerPrivacy},"Timed out waiting for Shopify customerPrivacy API","analytics_unavailable"))}loadConsentTrackingApi(){return new Promise((t,e)=>{const i=window.Shopify;if(!(i!=null&&i.loadFeatures)){e(new A("Shopify.loadFeatures is not available","analytics_unavailable"));return}i.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],s=>{s&&s.length>0?e(s[0]):t()})})}waitForConsent(t){return t.analyticsProcessingAllowed()?Promise.resolve():new Promise((e,i)=>{let s=!1,n=!1;const r=()=>{document.removeEventListener("visitorConsentCollected",d)},d=()=>{try{s=t.analyticsProcessingAllowed(),s||(n=!0)}catch(a){console.debug("shogun: could not read the consent status after it was collected",a)}};document.addEventListener("visitorConsentCollected",d),this.until(()=>s?!0:void 0,"Timed out waiting for user consent","consent_timeout").then(()=>{r(),e()}).catch(a=>{r(),i(n?new A("Consent was declined","consent_declined",{cause:a}):a)})})}until(t,e,i,{intervalMs:s=250,timeoutMs:n=15e3}={}){return new Promise((r,d)=>{const a=t();if(a){r(a);return}const l=Date.now(),u=window.setInterval(()=>{const h=t();if(h){window.clearInterval(u),r(h);return}Date.now()-l>n&&(window.clearInterval(u),d(new A(e,i)))},s)})}};c(y,"CONFIG_LAPSE_GRACE_MS",4320*60*1e3);let L=y;class St{constructor(t){c(this,"deferredAt",null);c(this,"shownAt",null);c(this,"resume",()=>{this.hidden||(this.shownAt===null&&(this.shownAt=Date.now()),this.onShown())});this.onShown=t}get hidden(){try{const t=document.visibilityState;return!!document.prerendering||t==="hidden"||t==="prerender"}catch(t){return console.debug("shogun: could not read whether the page is visible, treating it as visible",t),!1}}holdUntilShown(){if(!this.hidden)return!1;if(this.deferredAt!==null)return!0;try{this.listen(!0)}catch(t){return console.debug("shogun: could not wait for the page to be shown, running now",t),this.release(),!1}return this.deferredAt=Date.now(),!0}release(){try{this.listen(!1)}catch(t){console.debug("shogun: could not stop waiting for the page to be shown",t)}}get deferral(){return this.deferredAt===null?{was_hidden:!1,hidden_ms:0}:{was_hidden:!0,hidden_ms:(this.shownAt??Date.now())-this.deferredAt}}listen(t){const e=t?"addEventListener":"removeEventListener";document[e]("visibilitychange",this.resume),document[e]("prerenderingchange",this.resume),window[e]("pageshow",this.resume)}}const Ot=["gclid","gbraid","wbraid","fbclid","ttclid","msclkid","srsltid"],Pt=64;function Tt(o,t){const e=Vt(o);return{click_ids:Ot.filter(i=>e==null?void 0:e.has(i)),utm_source:W(e==null?void 0:e.get("utm_source")),utm_medium:W(e==null?void 0:e.get("utm_medium")),utm_campaign:W(e==null?void 0:e.get("utm_campaign")),referrer_host:xt(t)}}function Vt(o){try{return new URL(o).searchParams}catch{return null}}function xt(o){if(!o)return null;try{return new URL(o).host||null}catch{return null}}function W(o){return o?o.slice(0,Pt):null}const Ct={location_unavailable:"location_unavailable",visitor_details_unavailable:"storage_unavailable"},it=o=>o instanceof Error?{message:o.message,stack:o.stack}:String(o),w=class w{constructor(t){c(this,"retainedReferrer");c(this,"originalReferrer");c(this,"optimizationCache");c(this,"_visitor");c(this,"_audienceEvaluator");c(this,"_optimizationReview");c(this,"attemptsStore",new v("session"));c(this,"tracker");c(this,"hasRun",!1);c(this,"pageVisibility",new St(()=>this.run()));c(this,"legacyCacheEntries",0);c(this,"_publishedOptimizations");c(this,"_assignedOptimization");c(this,"fromDispatchAt",null);this.context=t,this.retainedReferrer=new Y,this.originalReferrer=this.retainedReferrer.restore(),this.optimizationCache=new q(t.publishedOptimizations.map(e=>e.id)),this.reportHeldLanding()}reportHeldLanding(){try{if(!this.pageVisibility.hidden)return;const t=this.optimizationCache.pendingDispatch();if(!t||t.landedAt!==void 0)return;
24L.trackLanded({analyticsUrl:this.context.shop.analyticsUrl,shopId:this.context.shop.shopId,version:w.VERSION,page:this.context.page,visitor:T.storedIds(),optimization:{id:t.optimizationId,variantId:t.variantId},dispatchedAt:t.dispatchedAt}).then(e=>{e&&this.optimizationCache.markLanded(t.optimizationId,t.dispatchedAt)}).catch(e=>console.debug("shogun: could not note that a hidden landing was reported",e))}catch(t){console.debug("shogun: could not report a page that loaded hidden after a redirect",t)}}get visitor(){return this._visitor||(this._visitor=new T(this.context.session)),this._visitor}get audienceEvaluator(){return this._audienceEvaluator||(this._audienceEvaluator=new nt(this.visitor,this.context.shop.geoLocationApi)),this._audienceEvaluator}get optimizationReview(){return this._optimizationReview||(this._optimizationReview=new j(this.context,this.audienceEvaluator)),this._optimizationReview}get publishedOptimizations(){return this._publishedOptimizations||(this._publishedOptimizations=this.context.publishedOptimizations.flatMap(t=>{var r,d;const e=this.optimizationCache.get(t.id),i=(e==null?void 0:e.variantId)||t.assignedVariantId,s=(e==null?void 0:e.state)||t.state,n=(e==null?void 0:e.assignedAt)??t.assignedAt;if(i){const a=((d=(r=t.variants)==null?void 0:r.find(l=>l.id===i))==null?void 0:d.name)||i;console.debug(`shogun: Found cached optimization for optimization: '${t.name}' (${t.id}), with variant: '${a}' (${i})`)}return X({...t,assignedVariantId:i,state:s,assignedAt:n},{page:this.context.page,shop:this.context.shop},this.audienceEvaluator)??[]})),this._publishedOptimizations}get abTestStrategy(){switch(this.context.assignmentStrategy){case"greedy":return new Z(this.visitor.bin);case"even":return new pt(this.visitor.bin);default:return new Z(this.visitor.bin)}}get personalizationStrategy(){return new K(this.visitor.bin)}get assignedOptimization(){return this._assignedOptimization===void 0&&(this._assignedOptimization=this.optimizationReview.optimizationInReview||this.previouslyAssignedOptimization||this.abTestStrategy.assign(this.publishedOptimizations.filter(t=>t.type==="ab_test"))||this.personalizationStrategy.assign(this.publishedOptimizations.filter(t=>t.type==="personalization"))||null),this._assignedOptimization}get previouslyAssignedOptimization(){return this.publishedOptimizations.find(t=>t.assignedVariantId!==void 0)||null}get isBot(){return bt(navigator.userAgent)}get dispatchAttempts(){return Number(this.attemptsStore.get(w.DISPATCH_ATTEMPTS_KEY)||"0")}get trackingService(){return this.tracker||(this.tracker=new L({shop:this.context.shop,page:this.context.page,visitor:this.visitor,assignmentStrategy:this.context.assignmentStrategy,publishedOptimizations:this.publishedOptimizations,originalReferrer:this.originalReferrer,storage:{cookie:this.visitor.cookiesWritable,local:this.optimizationCache.writable,session:this.attemptsStore.writable},version:w.VERSION,legacyCacheEntries:this.legacyCacheEntries,deferral:this.pageVisibility.deferral,configExpiresAt:this.context.configExpiresAt??null,fromDispatchAt:this.fromDispatchAt})),this.tracker}get isThemePreview(){var i,s,n;if(this.optimizationReview.inReview)return!1;const t=this.context.page.themeId!=this.context.shop.defaultThemeId,e=(n=(s=(i=this.previouslyAssignedOptimization)==null?void 0:i.assignedVariant)==null?void 0:s.config)==null?void 0:n.theme_id;return t&&(e===void 0||e!==this.context.page.themeId)}set dispatchAttempts(t){this.attemptsStore.set(w.DISPATCH_ATTEMPTS_KEY,t.toString())||console.debug("shogun: could not record the dispatch attempt, this session is not protected against a redirect loop")}exclude(t,e,i=this.previouslyAssignedOptimization){const s=i&&!i.inReview?i:void 0;this.trackingService.track("excluded",s,e?{reason:t,details:e}:{reason:t})}get unassignedReason(){if(this.context.configExpired&&this.publishedOptimizations.length===0)return"config_expired";const e=this.publishedOptimizations.flatMap(i=>{var s,n;return[...Object.values(((s=i.eligibility)==null?void 0:s.audience.evaluations)??{}),...Object.values(((n=i.eligibility)==null?void 0:n.variants)??{}).flatMap(r=>Object.values(r.evaluations??{}))]}).find(i=>i.status==="error");return Ct[(e==null?void 0:e.reason)??""]??"no_assigned_variant"}run(){var t,e,i,s,n,r;if(!this.hasRun&&!this.pageVisibility.holdUntilShown()){this.hasRun=!0,this.pageVisibility.release(),this.legacyCacheEntries=this.optimizationCache.legacyEntries,this.fromDispatchAt=((t=this.optimizationCache.pendingDispatch())==null?void 0:t.dispatchedAt)??null,this.optimizationCache.clearDispatched();try{if(this.isBot){console.debug("shogun: Visitor identified as bot, skipping optimization assignment and execution."),this.exclude("bot");return}const d=!this.optimizationCache.writable&&this.publishedOptimizations.some(l=>l.type==="ab_test");
24if(!this.visitor.idsPersisted||d){console.debug("shogun: Visitor cannot persist their assignment, skipping optimization assignment and execution."),this.exclude("storage_unavailable");return}if(this.dispatchAttempts>=w.MAX_DISPATCH_ATTEMPTS)throw new A(`Maximum dispatch attempts of ${w.MAX_DISPATCH_ATTEMPTS} exceeded. Possible redirect loop detected.`,"max_dispatch_attempts");if(this.optimizationCache.hasExpiredEntries()){this.exclude("cache_expired",{expired_optimization_ids:this.optimizationCache.expiredOptimizationIds()},null),this.optimizationCache.clearExpired();return}if(this.isThemePreview){console.debug("shogun: Visitor identified as theme preview, skipping optimization assignment and execution."),this.exclude("theme_preview");return}this.publishedOptimizations.forEach(l=>l.evaluateEligibility()),console.debug(`shogun: Running dispatcher with ${this.publishedOptimizations.length} published optimizations (${this.publishedOptimizations.map(l=>l.name).join(", ")})`);const a=this.assignedOptimization;if(a){if(!this.optimizationCache.update(a)){console.debug("shogun: Could not record the assignment, skipping optimization execution."),this.exclude("storage_unavailable",void 0,a);return}if(a.isFirstAssignment&&this.trackingService.track("assigned",a,{details:{traffic:Tt(window.location.href,this.originalReferrer)}}),a.needsDispatch){if(!a.canDispatch)throw new A(`Optimization '${a.name}' (${a.id}) cannot dispatch variant '${(e=a.assignedVariant)==null?void 0:e.id}'`,"invalid_variant_config",{optimization:a});console.debug(`shogun: Dispatching optimization: ${a.name} (${a.id}) with variant: ${(i=a.assignedVariant)==null?void 0:i.name} (${(s=a.assignedVariant)==null?void 0:s.id}) [attempt ${this.dispatchAttempts+1}]`),this.dispatchAttempts==0&&this.retainedReferrer.save();const l=this.optimizationCache.markDispatched(a.id);this.trackingService.track("dispatched",a,{details:{dispatched_at:l===null?null:new Date(l).toISOString()}}),this.dispatchAttempts=this.dispatchAttempts+1;try{a.dispatch()}catch(u){throw this.optimizationCache.clearDispatched(),new A(`Dispatch failed for optimization '${a.id}'`,"dispatch_failed",{cause:u,optimization:a})}return}console.debug(`shogun: Running optimization: '${a.name}' (${a.id}) with variant: '${(n=a.assignedVariant)==null?void 0:n.name}' (${(r=a.assignedVariant)==null?void 0:r.id})`),a.inReview?(console.debug("shogun: Optimization is in review, running optimization review flow for optimization"),this.optimizationReview.run()):a.isFirstView?(console.debug("shogun: This is the first view for this optimization, tracking started event."),a.state="started",this.optimizationCache.update(a),this.trackingService.track("started",a)):a.isOnAssignedVariant?(console.debug("shogun: This is not the first view for this optimization, tracking viewed event."),this.trackingService.track("viewed",a)):(console.debug("shogun: Visitor is not eligible for the assigned optimization, skipping view tracking and finalization."),this.trackingService.track("skipped",a,{reason:"not_eligible"})),this.dispatchAttempts=0,a.finalize()}else console.debug("shogun: No optimization assigned to this visitor."),this.trackingService.track("skipped",void 0,{reason:this.unassignedReason});this.retainedReferrer.clear()}catch(d){console.error("shogun: Error running optimizations",d);try{const a=d instanceof A?d:void 0;this.trackingService.track("errored",a==null?void 0:a.optimization,{reason:a==null?void 0:a.reason,details:{error:it(d),cause:(a==null?void 0:a.cause)===void 0?void 0:it(
24a.cause)}})}catch(a){console.error("shogun: Failed to report dispatcher error",a)}this.retainedReferrer.clear()}}}};c(w,"VERSION","2.2.0"),c(w,"MAX_DISPATCH_ATTEMPTS",5),c(w,"DISPATCH_ATTEMPTS_KEY","_shg_dispatch_attempts");let G=w;window.ShogunDispatcher=G})(); 25 26})(); 27 28</script>
28<script type="text/javascript"> 29 ;(function() { 30 const designMode = false; 31 if (designMode) { 32 console.debug("shogun: Design mode is enabled, skipping optimizer initialization"); 33 return; 34 } 35 36 // an Error cannot be sent as-is: message and stack are non-enumerable, so JSON.stringify gives {} 37 const describeThrown = (value) => 38 value instanceof Error ? { message: value.message, stack: value.stack } : String(value); 39 40 const reportExclusion = (reason, details) => { 41 try { 42 if (typeof fetch !== 'function') return; 43 44 fetch("https://shogun-abc-production.global.ssl.fastly.net/dispatcher/excluded", { 45 method: 'POST', 46 headers: { 'Content-Type': 'application/json' }, 47 body: JSON.stringify({ 48 name: 'excluded', 49 shop_id: "d05180d4-cd89-476e-8718-33a02613f55b", 50 reason: reason, 51 details: details || {} 52 }), 53 keepalive: true, 54 }).catch(() => {}); 55 } catch (_error) { 56 // reporting a bail must never be a thing that breaks a merchant's page 57 } 58 }; 59 60 // If the referrer url is the Shopify admin url or other known merchant domains, then set a local storage shg_is_merchant flag to true 61 // This is used to remove the preview bar from the page for shoppers 62 // 63 // Reading localStorage throws outright where the origin is denied storage, and this only decides whether a 64 // merchant sees the preview bar. Letting it escape would take the dispatcher down with it and leave the visitor 65 // reporting nothing at all. 66 try { 67 const referrer = document.referrer 68 const merchantDomains = ['admin.shopify.com', 'ab.shgapi.com', 'abc.shogun.dev'] 69 if (!localStorage.getItem('_shg_is_merchant') && merchantDomains.some(domain => referrer.includes(domain))) { 70 console.debug('shogun: Setting shg_is_merchant to true') 71 localStorage.setItem('_shg_is_merchant', 'true') 72 } 73 } catch (error) { 74 console.debug('shogun: could not read the merchant flag, continuing without it', error) 75 } 76 77 // Check for optimization disable flags 78 const urlParams = new URLSearchParams(window.location.search); 79 const optimizationDisabled = urlParams.get('shg') === "false" || window.location.hostname.includes('shopifypreview'); 80 81 if (optimizationDisabled) { 82 console.debug("shogun: Optimization is disabled, skipping optimizer initialization"); 83 return; 84 } 85 86 // Load shop metafield configuration 87 88 const shopMetafieldConfig = {"default_theme_id":186212876659,"method":"greedy","optimizations":[],"expires_at":1791251403000,"env":"production"}; 89 90 if (!shopMetafieldConfig) { 91 console.debug("shogun: Shop metafield configuration for optimizations is missing. Skipping optimizer initialization."); 92 reportExclusion('config_unavailable'); 93 return; 94 } 95 96 // A lapsed metafield yields no optimizations, which on its own is indistinguishable from a shop running none. 97 const configExpired = !(shopMetafieldConfig.expires_at > Date.now()); 98 const optimizationsData = configExpired ? [] : (shopMetafieldConfig.optimizations || []); 99 100 // These ID should match. It is possible for them to be different if a theme is copied from a different shop. 101 const intendedShopifyId = "3643572269"; // The hard coded shopify ID when this snippet was pushed to the theme. 102 const currentShopifyId = "3643572269"; // The current shopify ID that this theme is rendered in. 103 if (intendedShopifyId !== currentShopifyId) { 104 console.debug(`shogun: Shopify ID mismatch: intendedShopifyId=${intendedShopifyId} currentShopifyId=${currentShopifyId}. This may indicate the theme was copied from another shop and not properly set up. Skipping optimizer initialization to avoid potential issues.`); 105 // Attributed to the shop the snippet was written for, the only internal id it carries; both Shopify ids ride 106 // along so the shop it is actually running on can be resolved. 107 reportExclusion('shop_mismatch', { intended_shopify_id: intendedShopifyId, current_shopify_id: currentShopifyId }); 108 return; 109 } else { 110 console.debug(`shogun: Shopify ID verified: ${intendedShopifyId}`); 111 } 112 113
114 if (typeof ShogunDispatcher === 'undefined') { 115 console.error("shogun: Dispatcher is not defined. Please ensure the shogun optimizer script is properly loaded."); 116 reportExclusion('dispatcher_unavailable', { optimizer_version: 2 }); 117 return; 118 } 119 120 const dispatcherConfig = { 121 shop: { 122 shopId: "d05180d4-cd89-476e-8718-33a02613f55b", 123 shopDomain: "nutricanine.myshopify.com", 124 analyticsUrl: "https://shogun-abc-production.global.ssl.fastly.net", 125 geoLocationApi: "https://ipinfo.io/json?token=f2ae3a557d807b", 126 storefrontAccessToken: "62e42b0fccfcacc468ae6db654253230", 127 defaultThemeId: shopMetafieldConfig.default_theme_id ? shopMetafieldConfig.default_theme_id.toString() : null, 128 configExpiresAt: shopMetafieldConfig.expires_at, 129 }, 130 page: { 131 pageId: "", 132 pageType: "homepage", 133 templateName: "index", 134 templateSuffix: "", 135 templateDirectory: "", 136 themeId: "186212876659", 137 languageRootUrl: "/", 138 path: window.location.pathname, 139 currentCartVariantId: null, 140 }, 141 session: { 142 sessionId: urlParams.get('shgSessionId'), 143 customerId: "", 144 isB2B: false, 145 }, 146 assignmentStrategy: shopMetafieldConfig.method, 147 publishedOptimizations: optimizationsData, 148 configExpired: configExpired, 149 configExpiresAt: typeof shopMetafieldConfig.expires_at === 'number' ? shopMetafieldConfig.expires_at : null 150 } 151 152 console.debug("shogun: Initializing ShogunOptimizer v2"); 153 try { 154 const dispatcher = new ShogunDispatcher(dispatcherConfig); 155 dispatcher.run(); 156 } catch (error) { 157 console.error("shogun: Dispatcher failed to start.", error); 158 reportExclusion('dispatcher_unavailable', { optimizer_version: 2, error: describeThrown(error) }); 159 } 160 161 })(); 162 163</script>
163 164
165<script defer src="https://cdn.skio.com/scripts/shopify/head/shopify.ba9807f79b5cdb6483d5.js"></script>
165 166<link rel='preconnect dns-prefetch' href='https://api.config-security.com/' crossorigin /> 167<link rel='preconnect dns-prefetch' href='https://conf.config-security.com/' crossorigin /> 168<link rel='preconnect dns-prefetch' href='https://whale.camera/' crossorigin />
169<script> 170window.TriplePixelData={TripleName:"nutricanine.myshopify.com",ver:"2.12",plat:"SHOPIFY",isHeadless:false},function(W,H,A,L,E,_,B,N){function O(U,T,P,H,R){void 0===R&&(R=!1),H=new XMLHttpRequest,P?(H.open("POST",U,!0),H.setRequestHeader("Content-Type","text/plain")):H.open("GET",U,!0),H.send(JSON.stringify(P||{})),H.onreadystatechange=function(){4===H.readyState&&200===H.status?(R=H.responseText,U.includes(".txt")?eval(R):P||(N[B]=R)):(299<H.status||H.status<200)&&T&&!R&&(R=!0,O(U,T-1,P))}}if(N=window,!N[H+"sn"]){N[H+"sn"]=1,L=function(){return Date.now().toString(36)+"_"+Math.random().toString(36)};try{A.setItem(H,1+(0|A.getItem(H)||0)),(E=JSON.parse(A.getItem(H+"U")||"[]")).push({u:location.href,r:document.referrer,t:Date.now(),id:L()}),A.setItem(H+"U",JSON.stringify(E))}catch(e){}var i,m,p;A.getItem('"!nC`')||(_=A,A=N,A[H]||(E=A[H]=function(t,e,a){return void 0===a&&(a=[]),"State"==t?E.s:(W=L(),(E._q=E._q||[]).push([W,t,e].concat(a)),W)},E.s="Installed",E._q=[],E.ch=W,B="configSecurityConfModel",N[B]=1,O("https://conf.config-security.com/model",5),i=L(),m=A[atob("c2NyZWVu")],_.setItem("di_pmt_wt",i),p={id:i,action:"profile",avatar:_.getItem("auth-security_rand_salt_"),time:m[atob("d2lkdGg=")]+":"+m[atob("aGVpZ2h0")],host:A.TriplePixelData.TripleName,plat:A.TriplePixelData.plat,url:window.location.href,ref:document.referrer,ver:A.TriplePixelData.ver},O("https://api.config-security.com/event",5,p),O("https://whale.camera/live/dot.txt",5)))}}("","TriplePixel",localStorage); 171</script>
171 172<link rel='preconnect dns-prefetch' href='https://triplewhale-pixel.web.app/' crossorigin /> 173<link rel='preconnect dns-prefetch' href='https://triplewhale-pixel.web.app/' crossorigin />
174<script> 175window.TriplePixelData={TripleName:"nutricanine.myshopify.com",ver:"1.9.0"},function(W,H,A,L,E,_,B,N){function O(U,T,P,H,R){void 0===R&&(R=!1),H=new XMLHttpRequest,P?(H.open("POST",U,!0),H.setRequestHeader("Content-Type","application/json")):H.open("GET",U,!0),H.send(JSON.stringify(P||{})),H.onreadystatechange=function(){4===H.readyState&&200===H.status?(R=H.responseText,U.includes(".txt")?eval(R):P||(N[B]=R)):(299<H.status||H.status<200)&&T&&!R&&(R=!0,O(U,T-1))}}if(N=window,!N[H+"sn"]){N[H+"sn"]=1;try{A.setItem(H,1+(0|A.getItem(H)||0)),(E=JSON.parse(A.getItem(H+"U")||"[]")).push(location.href),A.setItem(H+"U",JSON.stringify(E))}catch(e){}var i,m,p;A.getItem('"!nC`')||(_=A,A=N,A[H]||(L=function(){return Date.now().toString(36)+"_"+Math.random().toString(36)},E=A[H]=function(t,e){return"State"==t?E.s:(W=L(),(E._q=E._q||[]).push([W,t,e]),W)},E.s="Installed",E._q=[],E.ch=W,B="configSecurityConfModel",N[B]=1,O("//conf.config-security.com/model",5),i=L(),m=A[atob("c2NyZWVu")],_.setItem("di_pmt_wt",i),p={id:i,action:"profile",avatar:_.getItem("auth-security_rand_salt_"),time:m[atob("d2lkdGg=")]+":"+m[atob("aGVpZ2h0")],host:A.TriplePixelData.TripleName,url:window.location.href,ref:document.referrer,ver:window.TriplePixelData.ver},O("//api.config-security.com/",5,p),O("//triplewhale-pixel.web.app/dot1.9.txt",5)))}}("","TriplePixel",localStorage); 176</script>
176 177
177<script type="text/javascript">(function e(){var e=document.createElement("script");e.type="text/javascript",e.async=true,e.src="//staticw2.yotpo.com/jxg2XcspAHBIaVpoavGbxENrOX1kkkjKpNlAHR10/widget.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})();</script>
177 178 <meta charset="utf-8" /> 179 <meta http-equiv="x-ua-compatible" content="ie=edge"> 180 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 181 <meta name="description" content="Canadians love NutriCanine's gently cooked fresh dog food Canada's largest and best. Each meal made tailored to your pup's unique nutritional needs. Find out why NutriCanine is rated Canada's best and healthiest fresh pet food brand. Sign up for customized fresh-food meals for your dog, delivered to your door for free."> 182 <link rel="canonical" href="https://nutricanine.ca/"> 183 <title>Gently Cooked Dog Food | NutriCanine</title> 184 <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/apple-touch-icon.png?v=1612547703"> 185 <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/favicon-32x32.png?v=1612547703"> 186 <link rel="icon" type="image/png" sizes="194x194" href="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/favicon-194x194.png?v=1612547703"> 187 <link rel="icon" type="image/png" sizes="192x192" href="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/android-chrome-192x192.png?v=1612547703"> 188 <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/favicon-16x16.png?v=1612547703"> 189 <link rel="manifest" href="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/site.webmanifest?v=1612547866"> 190 <link rel="mask-icon" href="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/safari-pinned-tab.svg?v=1612547703" color="#5bbad5"> 191 <meta name="msapplication-TileColor" content="#ffffff"> 192 <meta name="theme-color" content="#ffffff"> 193 <meta name="facebook-domain-verification" content="5d5qx4jy0bs67qnpiowo9qu47htktx" /> 194
194<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
194<meta name="google-site-verification" content="mgl07nexQny4YO6JKa67PpSqmP_Q_N07K_xNkh8Pbvw"> 195<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/3643572269/digital_wallets/dialog"> 196<meta id="in-context-paypal-metadata" data-shop-id="3643572269" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="CAD"> 197<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="alternate" hreflang="x-default" href="https://nutricanine.ca/"> 198<link rel="alternate" hreflang="en" href="https://nutricanine.ca/"> 199<link rel="alternate" hreflang="fr" href="https://nutricanine.ca/fr">
200<script async="async" src="/checkouts/internal/preloads.js?locale=en-CA&default_configuration_id=9404477"></script>
200 201<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
202<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-CA&default_configuration_id=9404477&shop_id=3643572269" crossorigin="anonymous"></script>
vendor: 1 bytes, line 202
202
203<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":3643572269,"countryCode":"CA","currencyCode":"CAD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/3643572269","merchantName":"NutriCanine","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","interac","jcb"],"total":{"type":"pending","label":"NutriCanine","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 203
203
204<script id="shopify-features" type="application/json">{"accessToken":"afa75f324289eb0ad3a0453b5f6bc701","betas":["rich-media-storefront-analytics"],"domain":"nutricanine.ca","predictiveSearch":true,"shopId":3643572269,"locale":"en"}</script>
vendor: 1 bytes, line 204
204
205<script>var Shopify = Shopify || {}; 206Shopify.shop = "nutricanine.myshopify.com"; 207Shopify.locale = "en"; 208Shopify.currency = {"active":"CAD","rate":"1.0"}; 209Shopify.country = "CA"; 210Shopify.theme = {"name":"Mobility Mix Supplement Launch 2026-08-11","id":186212876659,"schema_name":"Themekit template theme","schema_version":"1.0.0","theme_store_id":null,"role":"main"}; 211Shopify.theme.handle = "null"; 212Shopify.theme.style = {"id":null,"handle":null}; 213Shopify.cdnHost = "nutricanine.ca/cdn"; 214Shopify.routes = Shopify.routes || {}; 215Shopify.routes.root = "/"; 216Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 217Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 218Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 219Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 219
219
220<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 220
220
221<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 221
221
222<script> 223 window.ShopifyPay = window.ShopifyPay || {}; 224 window.ShopifyPay.apiHost = "shop.app\/pay"; 225 window.ShopifyPay.redirectState = null; 226</script>
vendor: 1 bytes, line 226
226
227<script> 228 window.Shopify = window.Shopify || {}; 229 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 230 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 231 window.Shopify.SignInWithShop.eligible = true; 232</script>
vendor: 1 bytes, line 232
232
233<script id="shop-js-analytics" type="application/json">{"pageType":"index"}</script>
vendor: 1 bytes, line 233
233
234<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 234
234
235<script type="module"> 236 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 237 238 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 239 240</script>
vendor: 1 bytes, line 240
240
241<script> 242 window.Shopify = window.Shopify || {}; 243 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 244 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 245</script>
vendor: 1 bytes, line 245
245
246<script>(function() { 247 var isLoaded = false; 248 function asyncLoad() { 249 if (isLoaded) return; 250 isLoaded = true; 251 var urls = ["https:\/\/d1639lhkj5l89m.cloudfront.net\/js\/storefront\/uppromote.js?shop=nutricanine.myshopify.com","https:\/\/api.socialsnowball.io\/js\/referral.js?shop=nutricanine.myshopify.com"]; 252 for (var i = 0; i < urls.length; i++) { 253 var s = document.createElement('script'); 254 s.type = 'text/javascript'; 255 s.async = true; 256 s.src = urls[i]; 257 var x = document.getElementsByTagName('script')[0]; 258 x.parentNode.insertBefore(s, x); 259 } 260 }; 261 if(window.attachEvent) { 262 window.attachEvent('onload', asyncLoad); 263 } else { 264 window.addEventListener('load', asyncLoad, false); 265 } 266})();</script>
vendor: 1 bytes, line 266
266
267<script id="__st">var __st={"a":3643572269,"offset":-14400,"reqid":"f34ec958-57f4-4577-97f9-f5115a8da0bc-1791170969","pageurl":"nutricanine.ca\/","u":"de4f40559c4b","p":"home"};</script>
vendor: 1 bytes, line 267
267
268<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 268
268
269<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 269
269
270<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//nutricanine.ca/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 270
270
271<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//nutricanine.ca/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
271<script crossorigin="anonymous" defer="defer" src="//nutricanine.ca/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 271
271
272<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 272
272
273<script> 274 window.Shopify = window.Shopify || {}; 275 window.Shopify.MCP = window.Shopify.MCP || {}; 276 window.Shopify.MCP.enabled = true; 277 window.Shopify.MCP.shop = "nutricanine.myshopify.com"; 278 window.Shopify.MCP.mcpEndpoint = "https:\/\/nutricanine.ca\/api\/mcp"; 279 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 280</script>
vendor: 1 bytes, line 280
280
281<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/nutricanine.ca\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 282</script>
vendor: 1 bytes, line 282
282
283<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://nutricanine.ca/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 284</script>
vendor: 1 bytes, line 284
284
285<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 286 function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent); 287</script>
vendor: 1 bytes, line 287
287
288<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}})); 289</script>
vendor: 1 bytes, line 289
289
290<script integrity="sha256-/LA1C2Bx6899fYCos0FS9qLj2opaGFm7AXrTUvBEb4s=" data-source-attribution="shopify.remote_product_tracking" data-shopify-remote-tracking="{"publisher_shop_id":3643572269,"theme_id":186212876659,"theme_published":true,"theme_store_id":0,"placement":"collection","event_data":{"handle":"","page_type":"home"},"recommendations_tracking_enabled":true}" defer="defer" src="//nutricanine.ca/cdn/shopifycloud/storefront/assets/storefront/remote_product_tracking-91d95044.js" crossorigin="anonymous"></script>
290 291<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://nutricanine.ca/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 292<style id="shopify-accelerated-checkout-cart"> 293 #shopify-buyer-consent { 294 margin-top: 1em; 295 display: inline-block; 296 width: 100%; 297} 298 299#shopify-buyer-consent.hidden { 300 display: none; 301} 302 303#shopify-subscription-policy-button { 304 background: none; 305 border: none; 306 padding: 0; 307 text-decoration: underline; 308 font-size: inherit; 309 cursor: pointer; 310} 311 312#shopify-subscription-policy-button::before { 313 box-shadow: none; 314} 315 316 </style> 317
318<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
318 <!-- Header hook for plugins --> 319 <!-- Google Tag Manager --> 320
320<script>
vendor: 350 bytes, lines 320-325
320 321 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 322 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 323 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 324 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 325 })(window,document,'script','dataLayer','
325GTM-KX3PGC8
vendor: 8 bytes, lines 325-326
325'); 326
326</script>
326 327 <!-- End Google Tag Manager --> 328
328<script>var loox_global_hash = '1640822960110';</script>
328<style>.loox-reviews-default { max-width: 1200px; margin: 0 auto; }.loox-rating .loox-icon { color:#000000; }</style> 329
329<script async type="text/javascript" src="https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=LF9CQ5"></script>
329 330 331<link href="//nutricanine.ca/cdn/shop/t/143/assets/custom.css?v=33000224398751804881785419880" rel="stylesheet" type="text/css" media="all" /> 332 333 334 335 336 337 338 339 340 341
341<script type="text/javascript"> 342 (function(c,l,a,r,i,t,y){ 343 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 344 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 345 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 346 })(window, document, "clarity", "script", "md3h10hh95"); 347</script>
vendor: 1 bytes, line 347
347
348<script type="application/ld+json"> 349{ 350 "@context": "https://schema.org", 351 "@type": "Organization", 352 "@id": "https://nutricanine.ca/#organization", 353 "name": "NutriCanine", 354 "alternateName": "NutriCanine Fresh Dog Food", 355 "url": "https://nutricanine.ca", 356 "logo": { 357 "@type": "ImageObject", 358 "url": "https://nutricanine.ca/CONFIRM-WORDMARK-FILE.png" 359 }, 360 "foundingDate": "2019", 361 "areaServed": { "@type": "Country", "name": "Canada" }, 362 "description": "NutriCanine sells gently cooked, complete and balanced fresh dog food, pre portioned to each dog and delivered frozen across Canada.", 363 "sameAs": [ 364 "https://www.cbc.ca/dragonsden/pitches/nutricanine", 365 "https://ca.linkedin.com/company/nutricanine", 366 "https://www.instagram.com/nutricanine/", 367 "https://www.facebook.com/NutriCanine/", 368 "https://www.tiktok.com/@nutricanine/", 369 "https://www.trustpilot.com/review/nutricanine.ca" 370 ], 371 "aggregateRating": { 372 "@type": "AggregateRating", 373 "ratingValue": "4.8", 374 "reviewCount": "317", 375 "bestRating": "5" 376 } 377} 378</script>
378 379 380 381 382 383 384<!-- BEGIN app block: shopify://apps/avada-seo-ai-blog/blocks/avada-seoon-setting/a45c3e67-be9f-4255-a194-b255a24f37c9 --><!-- END app block --><!-- BEGIN app block: shopify://apps/skio-subscriptions-yc-s20/blocks/referral-banner-block/de50f7a4-0bb0-4d4c-84e2-c03dce83436d --><div 385 class="skioReferralBanner" 386 id="skioReferralBanner" 387 style="background-color: #eaffed; border-color: #eaffed; box-shadow: 0px 2px 8px 0px rgba(0, 0, 0, 0.04), 0px -2px 8px 0px rgba(0, 0, 0, 0.02); display: none; padding-top: 5px; padding-bottom: 5px;" 388 data-nosnippet 389> 390 <svg 391 class="skioReferralBannerIcon" 392 width="40" 393 height="40" 394 viewBox="0 0 32 32" 395 fill="none" 396 xmlns="http://www.w3.org/2000/svg"> 397 <path 398 d="M0 16C0 7.16344 7.16344 0 16 0C24.8366 0 32 7.16344 32 16C32 24.8366 24.8366 32 16 32C7.16344 32 0 24.8366 0 16Z" 399 fill="#73E2A3" 400 class="skio-banner-icon-background" /> 401 <path 402 d="M14.6663 13.3333V12.6667M14.6663 16.3333V15.6667M14.6663 19.3333V18.6667M11.4663 10.6667H20.533C21.2797 10.6667 21.6531 10.6667 21.9383 10.812C22.1892 10.9398 22.3932 11.1438 22.521 11.3947C22.6663 11.6799 22.6663 12.0533 22.6663 12.8V13.6667C21.3777 13.6667 20.333 14.7113 20.333 16C20.333 17.2887 21.3777 18.3333 22.6663 18.3333V19.2C22.6663 19.9467 22.6663 20.3201 22.521 20.6053C22.3932 20.8562 22.1892 21.0602 21.9383 21.188C21.6531 21.3333 21.2797 21.3333 20.533 21.3333H11.4663C10.7196 21.3333 10.3462 21.3333 10.061 21.188C9.81014 21.0602 9.60616 20.8562 9.47833 20.6053C9.33301 20.3201 9.33301 19.9467 9.33301 19.2V18.3333C10.6217 18.3333 11.6663 17.2887 11.6663 16C11.6663 14.7113 10.6217 13.6667 9.33301 13.6667V12.8C9.33301 12.0533 9.33301 11.6799 9.47833 11.3947C9.60616 11.1438 9.81014 10.9398 10.061 10.812C10.3462 10.6667 10.7196 10.6667 11.4663 10.6667Z" 403 stroke="#087443" 404 stroke-width="1.33333" 405 stroke-linecap="round" 406 stroke-linejoin="round" 407 class="skio-banner-icon-path" /> 408 </svg> 409 <div class="skioReferralBannerText" id="referralDiscountCode"><p><b>Referral discount applied to cart!</b> Create your first order and enjoy the credits from your friend!</p></div> 410 <div 411 class="skioReferralBannerClose" 412 onclick="onCloseSkioReferralBanner()" 413 > 414 <svg 415 width="25" 416 height="24" 417 viewBox="0 0 25 24" 418 fill="none" 419 xmlns="http://www.w3.org/2000/svg" 420 class="skio-close-icon"> 421 <path 422 d="M17.2197 7L7.21973 17M7.21973 7L17.2197 17" 423 stroke="#23a136" 424 stroke-width="2" 425 stroke-linecap="round" 426 stroke-linejoin="round" 427 class="skio-close-icon-path" /> 428 </svg> 429 </div> 430</div> 431 432<!-- END app block --><!-- BEGIN app block: shopify://apps/triplewhale/blocks/triple_pixel_snippet/483d496b-3f1a-4609-aea7-8eee3b6b7a2a --><link rel='preconnect dns-prefetch' href='https://api.config-security.com/' crossorigin /> 433<link rel='preconnect dns-prefetch' href='https://conf.config-security.com/' crossorigin />
434<script> 435/* >> TriplePixel :: start*/ 436window.TriplePixelData={TripleName:"nutricanine.myshopify.com",ver:"2.16",plat:"SHOPIFY",isHeadless:false,src:'SHOPIFY_EXT',product:{id:"",name:``,price:"",variant:"",av:{ }},search:"",collection:"",cart:"",template:"index",curr:"CAD" || "CAD", market:"2073264189"},function(W,H,A,L,E,_,B,N){function O(U,T,P,H,R){void 0===R&&(R=!1),H=new XMLHttpRequest,P?(H.open("POST",U,!0),H.setRequestHeader("Content-Type","text/plain")):H.open("GET",U,!0),H.send(JSON.stringify(P||{})),H.onreadystatechange=function(){4===H.readyState&&200===H.status?(R=H.responseText,U.includes("/first")?eval(R):P||(N[B]=R)):(299<H.status||H.status<200)&&T&&!R&&(R=!0,O(U,T-1,P))}}if(N=window,!N[H+"sn"]){N[H+"sn"]=1,L=function(){return Date.now().toString(36)+"_"+Math.random().toString(36)};try{A.setItem(H,1+(0|A.getItem(H)||0)),(E=JSON.parse(A.getItem(H+"U")||"[]")).push({u:location.href,r:document.referrer,t:Date.now(),id:L()}),A.setItem(H+"U",JSON.stringify(E))}catch(e){}var i,m,p;A.getItem('"!nC`')||(_=A,A=N,A[H]||(E=A[H]=function(t,e,i){return void 0===i&&(i=[]),"State"==t?E.s:(W=L(),(E._q=E._q||[]).push([W,t,e].concat(i)),W)},E.s="Installed",E._q=[],E.ch=W,B="configSecurityConfModel",N[B]=1,O("https://conf.config-security.com/model",5),i=L(),m=A[atob("c2NyZWVu")],_.setItem("di_pmt_wt",i),p={id:i,action:"profile",avatar:_.getItem("auth-security_rand_salt_"),time:m[atob("d2lkdGg=")]+":"+m[atob("aGVpZ2h0")],host:A.TriplePixelData.TripleName,plat:A.TriplePixelData.plat,url:window.location.href.slice(0,500),ref:document.referrer,ver:A.TriplePixelData.ver},O("https://api.config-security.com/event",5,p),O("https://api.config-security.com/first?host=".concat(p.host,"&plat=").concat(p.plat),5)))}}("","TriplePixel",localStorage); 437/* << TriplePixel :: end*/ 438</script>
438 439 440 441 442<!-- END app block -->
442<script src="https://cdn.shopify.com/extensions/01a0d540-be06-7f95-a53f-067e89e45bb4/subscriptions-23-164/assets/skio-referrals.js" type="text/javascript" defer="defer"></script>
442 443<link href="https://cdn.shopify.com/extensions/01a0d540-be06-7f95-a53f-067e89e45bb4/subscriptions-23-164/assets/skio-referrals.css" rel="stylesheet" type="text/css" media="all"> 444<meta property="og:image" content="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/NutriCanine-For_Socials.png?v=1619737401" /> 445<meta property="og:image:secure_url" content="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/NutriCanine-For_Socials.png?v=1619737401" /> 446<meta property="og:image:width" content="656" /> 447<meta property="og:image:height" content="656" /> 448<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
449<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 3643572269,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "index"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 449
449
450<script> 451 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 452</script>
vendor: 1 bytes, line 452
452
453<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
453).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 3643572269,storefrontBaseUrl: "https://nutricanine.ca",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://nutricanine.ca/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2434564467","configuration":"{\"campaignID\":\"53433\",\"externalExecutionURL\":\"https:\/\/engine.saasler.com\/api\/v1\/webhook_executions\/9bcea03d88ec7755ebb36368f8c82290\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"4d2ae310e7f99f154f33560b5c81cfa9","type":"APP","apiClientId":3546795,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
453,"dataSharingState":"unrestricted"},{"id":"2203255155","configuration":"{\"shopId\":\"nutricanine.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7093dff47f098f6de2afb75b62011ebe","type":"APP","apiClientId":2753413,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2203124083","configuration":"{\"ti\":\"25093622\",\"endpoint\":\"https:\/\/bat.bing.com\/action\/0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"5ee93563fe31b11d2d65e2f09a5229dc","type":"APP","apiClientId":2997493,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2183201139","configuration":"{\"pixelCode\":\"CDKLJIJC77UFB29QF0E0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"22e92c2ad45662f435e4801458fb78cc","type":"APP","apiClientId":4383523,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2028339571","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"ef9b37cee6fb2f93ffcc681cf1cfdc4e","type":"APP","apiClientId":3624803,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1946124659","configuration":"{\"accountID\":\"LF9CQ5\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"1866989939","configuration":"{\"shopId\":\"d05180d4-cd89-476e-8718-33a02613f55b\",\"analyticsUrl\":\"https:\\\/\\\/shogun-abc-production.global.ssl.fastly.net\",\"appType\":\"ab_testing\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"6d2b8445c58f7ac1a1dfccce276de7aa","type":"APP","apiClientId":214825828353,"privacyPurposes":["ANALYTICS"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"1358201203","configuration":"{\"shopId\":\"2328\",\"env\":\"production\",\"metaData\":\"[]\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"8323bee30e1ec3ae135ae5e0cef4ab6d","type":"APP","apiClientId":2773553,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"725746035","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"AW-730017245\\\",\\\"GT-KFHTL7P\\\"],\\\"target_country\\\":\\\"CA\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-NH01MNWH3X\\\",\\\"AW-730017245\\\/tjwbCPHnwsgBEN3bjNwC\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-NH01MNWH3X\\\",\\\"AW-730017245\\\/jJgRCPTnwsgBEN3bjNwC\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-NH01MNWH3X\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-NH01MNWH3X\\\",\\\"AW-730017245\\\/vs9NCOvnwsgBEN3bjNwC\\\",\\\"MC-59LC73KK3K\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-NH01MNWH3X\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-NH01MNWH3X\\\",\\\"AW-730017245\\\/_eavCOjnwsgBEN3bjNwC\\\",\\\"MC-59LC73KK3K\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-NH01MNWH3X\\\",\\\"AW-730017245\\\/px5FCOXnwsgBEN3bjNwC\\\",\\\"MC-59LC73KK3K\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-NH01MNWH3X\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-NH01MNWH3X\\\",\\\"AW-730017245\\\/Q9_tCPfnwsgBEN3bjNwC\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-NH01MNWH3X\\\",\\\"AW-730017245\\\/F8bkCO7nwsgBEN3bjNwC\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-NH01MNWH3X\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]}
453,{"id":"183107645","configuration":"{\"pixel_id\":\"705016120004909\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"56361021","configuration":"{\"tagID\":\"2613618938626\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7ae565e198624b39e0856d352b9a6b4c","type":"APP","apiClientId":3009811,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"9601085","configuration":"{\"myshopifyDomain\":\"nutricanine.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"23b97d18e2aa74363140dc29c9284e87","type":"APP","apiClientId":2775569,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_phone","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"128909683","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS"],"name":"Google Analytics tag (migrated)"}
453,{"id":"167149939","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"6","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"],"name":"Reddit Pixel"},{"id":"200114547","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"19","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"ChatGPT "},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"NutriCanine","paymentSettings":{"currencyCode":"CAD"},"myshopifyDomain":"nutricanine.myshopify.com","countryCode":"CA","storefrontUrl":"https:\/\/nutricanine.ca"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://nutricanine.ca/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"186212876659","themePublished":"true","eventMetadataId":"6595f4bd-ffd3-4d5a-b4a3-080596da7e49","pageType":"home","shopId":"3643572269","storefrontBaseUrl":"https:\/\/nutricanine.ca","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
453<script> 454 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 455 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 456 window.ShopifyAnalytics.meta.currency = 'CAD'; 457 var meta = {"page":{"pageType":"home","requestId":"f34ec958-57f4-4577-97f9-f5115a8da0bc-1791170969"}}; 458 for (var attr in meta) { 459 window.ShopifyAnalytics.meta[attr] = meta[attr]; 460 } 461</script>
vendor: 1 bytes, line 461
461
462<script class="analytics"> 463 (function () { 464 var customDocumentWrite = function(content) { 465 var jquery = null; 466 467 if (window.jQuery) { 468 jquery = window.jQuery; 469 } else if (window.Checkout && window.Checkout.$) { 470 jquery = window.Checkout.$; 471 } 472 473 if (jquery) { 474 jquery('body').append(content); 475 } 476 }; 477 478 var hasLoggedConversion = function(token) { 479 if (token) { 480 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 481 } 482 return false; 483 } 484 485 var setCookieIfConversion = function(token) { 486 if (token) { 487 var twoMonthsFromNow = new Date(Date.now()); 488 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 489 490 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 491 } 492 } 493 494 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 495 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 496 if (trekkie.integrations) { 497 return; 498 } 499 trekkie.methods = [ 500 'identify', 501 'page', 502 'ready', 503 'track', 504 'trackForm', 505 'trackLink' 506 ]; 507 trekkie.factory = function(method) { 508 return function() { 509 var args = Array.prototype.slice.call(arguments); 510 args.unshift(method); 511 trekkie.push(args); 512 if (method == 'track' || method == 'page') { 513 var pageUrl; 514 try { 515 pageUrl = window.location.href; 516 } catch (e) {} 517 var pageReferrer; 518 try { 519 pageReferrer = document.referrer; 520 } catch (e) {} 521 try { 522 if (window.__TREKKIE_SHIM_QUEUE == null) { 523 window.__TREKKIE_SHIM_QUEUE = []; 524 } 525 window.__TREKKIE_SHIM_QUEUE.push({ 526 from: 'trekkie-stub', 527 method: method, 528 args: args.slice(1), 529 pageContext: { 530 url: pageUrl, 531 referrer: pageReferrer 532 } 533 }); 534 } catch (e) { 535 // no-op 536 } 537 } 538 return trekkie; 539 }; 540 }; 541 for (var i = 0; i < trekkie.methods.length; i++) { 542 var key = trekkie.methods[i]; 543 trekkie[key] = trekkie.factory(key); 544 } 545 trekkie.load = function(config) { 546 trekkie.config = config || {}; 547 trekkie.config.initialDocumentCookie = document.cookie; 548 var first = document.getElementsByTagName('script')[0]; 549var script = document.createElement('script'); 550script.type = 'text/javascript'; 551script.onerror = function(e) { 552 var scriptFallback = document.createElement('script'); 553 scriptFallback.type = 'text/javascript'; 554 scriptFallback.onerror = function(error) { 555 var Monorail = { 556 produce: function produce(monorailDomain, schemaId, payload) { 557 var currentMs = new Date().getTime(); 558 var event = { 559 schema_id: schemaId, 560 payload: payload, 561 metadata: { 562 event_created_at_ms: currentMs, 563 event_sent_at_ms: currentMs 564 } 565 }; 566 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 567 }, 568 sendRequest: function sendRequest(endpointUrl, payload) { 569 // Try the sendBeacon API 570 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 571 var blobData = new window.Blob([payload], { 572 type: 'text/plain' 573 }); 574 575 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 576 return true; 577 } // sendBeacon was not successful 578 579 } // XHR beacon 580 581 var xhr = new XMLHttpRequest(); 582 583 try { 584 xhr.open('POST', endpointUrl); 585 xhr.setRequestHeader('Content-Type', 'text/plain'); 586 xhr.send(payload); 587 } catch (e) { 588 console.log(e); 589 } 590 591 return false; 592 }, 593 isIos12: function isIos12() { 594 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 595 } 596 }; 597 Monorail.produce('monorail-edge.shopifysvc.com', 598 'trekkie_storefront_load_errors/1.1', 599 {shop_id: 3643572269, 600 theme_id: 186212876659, 601 app_name: "storefront", 602 context_url: window.location.href, 603 source_url: "//nutricanine.ca/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 604 605 }; 606 scriptFallback.async = true; 607 scriptFallback.src = '//nutricanine.ca/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 608 first.parentNode.insertBefore(scriptFallback, first); 609}; 610script.async = true; 611script.src = '//nutricanine.ca/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 612first.parentNode.insertBefore(script, first); 613 614 }; 615 trekkie.load( 616 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":3643572269,"isMerchantRequest":null,"themeId":186212876659,"themeCityHash":"6886977562067633887","contentLanguage":"en","currency":"CAD","eventMetadataId":"6595f4bd-ffd3-4d5a-b4a3-080596da7e49"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 617 ); 618 619 var loaded = false;
620 trekkie.ready(function() { 621 if (loaded) return; 622 loaded = true; 623 624 window.ShopifyAnalytics.lib = window.trekkie; 625 626 var originalDocumentWrite = document.write; 627 document.write = customDocumentWrite; 628 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 629 document.write = originalDocumentWrite; 630 631 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 632 var token = match? match[1]: undefined; 633 if (!hasLoggedConversion(token)) { 634 setCookieIfConversion(token); 635 636 } 637 }); 638 639 window.ShopifyAnalytics.lib.page(null,{"pageType":"home","requestId":"f34ec958-57f4-4577-97f9-f5115a8da0bc-1791170969","shopifyEmitted":true}); 640 641 var eventsListenerScript = document.createElement('script'); 642 eventsListenerScript.async = true; 643 eventsListenerScript.src = "//nutricanine.ca/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 644 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 645})();</script>
645 646
646<script> 647 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 648 window.ga = function ga() { 649 (window.ga.q = window.ga.q || []).push(arguments); 650 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 651 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 652 } 653 console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information."); 654 }; 655 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 656 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 657 } 658 } 659</script>
vendor: 1 bytes, line 659
659
660<script 661 defer 662 src="https://nutricanine.ca/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 663 data-application="storefront-renderer" 664 data-shop-id="3643572269" 665 data-render-region="gcp-us-central1" 666 data-page-type="index" 667 data-theme-instance-id="186212876659" 668 data-theme-name="Themekit template theme" 669 data-theme-version="1.0.0" 670 data-monorail-region="shop_domain" 671 data-resource-timing-sampling-rate="10" 672 data-shs="true" 673 data-shs-beacon="true" 674 data-shs-export-with-fetch="true" 675 data-shs-logs-sample-rate="1" 676 data-shs-beacon-endpoint="https://nutricanine.ca/api/collect" 677></script>
677 678<meta name="shopify-y" content="502ed31e-c76b-4dca-96c8-7c6423979b3d" data-expiration="1822728569000"><meta name="shopify-s" content="11288bff-8cd6-4db6-b024-df2e18281d10" data-expiration="1791172769000"><meta name="new-cookie-storage-activated" content="t"> 679</head> 680 681<link 682 rel="preload" 683 href="//nutricanine.ca/cdn/shop/t/143/assets/foundation.css?v=72458084318921809351764704021" 684 as="style" 685 onload="this.onload=null;this.rel='stylesheet'" 686> 687<link rel="preload" href="//nutricanine.ca/cdn/shop/t/143/assets/slick.css?v=98340474046176884051764704019" as="style" onload="this.onload=null;this.rel='stylesheet'"> 688<link 689 rel="preload" 690 href="//nutricanine.ca/cdn/shop/t/143/assets/slick-theme.css?v=111566387709569418871764704019" 691 as="style" 692 onload="this.onload=null;this.rel='stylesheet'" 693> 694<link rel="preload" href="//nutricanine.ca/cdn/shop/t/143/assets/nutricane.css?v=157620013475009658521774469568" as="style" onload="this.onload=null;this.rel='stylesheet'"> 695 696<link rel="preload" href="//nutricanine.ca/cdn/shop/t/143/assets/v3.css?v=11379369839022596101776870526" as="style" onload="this.onload=null;this.rel='stylesheet'"> 697<link rel="preload" href="//nutricanine.ca/cdn/shop/t/143/assets/v3-mobile.css?v=109432805452069803411776430871" as="style" onload="this.onload=null;this.rel='stylesheet'"> 698 699 700 <link rel="preload" href="//nutricanine.ca/cdn/shop/t/143/assets/v2.css?v=125949638962127380471774469568" as="style" onload="this.onload=null;this.rel='stylesheet'"> 701 <link 702 rel="preload" 703 href="//nutricanine.ca/cdn/shop/t/143/assets/v2-mobile.css?v=109343950134525943081764704041" 704 as="style" 705 onload="this.onload=null;this.rel='stylesheet'" 706 > 707 708 709 710 711
712<script stype="text/javascript" src="//nutricanine.ca/cdn/shop/t/143/assets/vendor.js?v=103877692193233732311764704041" defer></script>
vendor: 1 bytes, line 712
712
713<script stype="text/javascript" src="//nutricanine.ca/cdn/shop/t/143/assets/foundation.js?v=159394978499355502751764704021" defer></script>
vendor: 1 bytes, line 713
713
714<script stype="text/javascript" src="//nutricanine.ca/cdn/shop/t/143/assets/slick.min.js?v=90343649680834749901764704029" defer></script>
vendor: 1 bytes, line 714
714
715<script stype="text/javascript" src="//nutricanine.ca/cdn/shop/t/143/assets/application.js?v=54203818638454769611785431343" defer></script>
715 716 717 718
719<script id="sca_affiliateJS" data-src="//nutricanine.ca/cdn/shop/t/143/assets/sca_affiliate.js?v=49802"> 720 var scaaffCheck = false; 721</script>
721 722 723
724<script type="text/javascript" id="subscribersAPP" data-src="https://cdn.subscribers.com/assets/subscribers.js"> 725 var subscribersSiteId = 'a04f64ed-1e3d-4f5e-9c42-72ec3bbc30ae'; 726 var subscribersServiceWorkerPath = '/apps/firebase-messaging-sw'; 727</script>
727 728 729<body class="body-Wr cstm--index-"> 730 <!-- ClickCease.com tracking--> 731
731<script type='text/javascript'>var script = document.createElement('script'); 732 script.async = true; script.type = 'text/javascript'; 733 var target = 'https://www.clickcease.com/monitor/stat.js'; 734 script.src = target;var elem = document.head;elem.appendChild(script); 735 </script>
735 736 <noscript> 737 <a href='https://www.clickcease.com' rel='nofollow'><img src='https://monitor.clickcease.com' alt='ClickCease'/></a> 738 </noscript> 739 740 741 <div id="shopify-section-topbar" class="shopify-section top-bar-section"> 742<div class="hTopBar"> 743 <div class="grid-container"> 744 <div class="grid-x grid-padding-x align-middle"> 745 <div class="large-12 cell"><p>FALL SALE! ð 40% OFF YOUR FIRST BOX <a href="https://nutricanine.ca/pages/meal-plan-questionnaire" title="Canada's best raw dog food">Get Started</a></p></div> 746 </div> 747 </div> 748 </div> 749 750 751<style> #shopify-section-topbar .top-bar-white-text {color: white;} </style></div> 752 753 754<div id="shopify-section-header" class="shopify-section header-section"><section 755 class="header-wrapper" 756 id="topSec" 757 data-template="index" 758> 759 <div class="grid-container" id="v3-desktop-menu-container"> 760 <div class="grid-x grid-padding-x hLMS v3-main-menu" id="v3-mobile-menu"> 761 <div class="small-7 medium-4 large-3 cell logo-con"> 762 <div class="title-bar hide-for-large XXXX" id="topMenuBar" data-toggle="top_menu"> 763 <div class="title-bar-title"> 764 <img 765 class="lazy icon-open" 766 id="icon-open" 767 src="" 768 data-src="//nutricanine.ca/cdn/shop/t/143/assets/menu-icon.svg?v=163500827045488472291764704019" 769 alt="Open-Close Menu" 770 width="40" 771 height="40" 772 > 773 <img 774 class="lazy icon-close" 775 id="icon-close" 776 src="" 777 data-src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Close.svg?v=1699393639" 778 alt="Open-Close Menu" 779 width="40" 780 height="40" 781 > 782 </div> 783 </div> 784 <a href="/" 785 ><img 786 class="lazy" 787 src="" 788 data-src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/NutriCanine_Logo.png?v=1612536848" 789 alt="Nutricanine Canada - Raw dog food" 790 width="238" 791 height="33" 792 ></a> 793 </div> 794 <div class="small-1 medium-5 large-7 cell"> 795 796<div class="top-bar hMenu" id="top_menu" data-toggler=".expanded"> 797 <div class="tMenu"> 798 <ul class="tMainMenu"> 799 800 <li><a href="/pages/recipes">Recipes</a></li> 801 802 <li><a href="/pages/google-reviews">Reviews</a></li> 803 804 <li><a href="/pages/fresh-dog-food-faqs">FAQs</a></li> 805 806 <li><a href="/a/account/login">Login</a></li> 807 808 </ul> 809 <a class="hide-for-medium mobile-login" href="https://nutricanine.myshopify.com/account/login">Login</a> 810 </div> 811 <div class="hide-for-medium menu-footer-pan"> 812 <div class="header-review-pan"> 813 <div class="review-card"> 814 <span class="rating"> 815 816 817 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 818 819 </span> 820 <div class="content"> 821 <p>âI have three pups, all picky eaters, and they devoured their meals! Iâm so happy to have found a quick, easy and super healthy food.â</p> 822 </div> 823 <span class="name">Stacey F. from Edmonton</span> 824 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 825 </div> 826 827 </div> 828 <div class="mobile-btn-group"> 829 <a href="/pages/meal-plan-questionnaire" class="button yellow">Get Started</a> 830 <b>Free shipping</b> Ontario, Quebec, Vancouver, Calgary, and more. 831 </div> 832 </div> 833</div> 834 835 </div> 836 <div class="large-2 cell medium-3 small-4"><a href="/pages/meal-plan-questionnaire" class="button yellow topButton">Get Started</a> 837 </div> 838 </div> 839 </div> 840
840<script> 841 842 window.onscroll = function () { 843 scrollFunction(); 844 }; 845 const menubar = document.getElementById('v3-mobile-menu'); 846 const topmenu = document.getElementById('top_menu'); 847 const desktopMenuContainer = document.getElementById('v3-desktop-menu-container'); 848 849 // Create placeholder element to prevent content jump 850 const placeholder = document.createElement('div'); 851 placeholder.id = 'header-placeholder'; 852 placeholder.style.display = 'none'; 853 placeholder.style.height = '0px'; 854 desktopMenuContainer.parentNode.insertBefore(placeholder, desktopMenuContainer.nextSibling); 855 856 function scrollFunction() { 857 if (document.body.scrollTop > 50 || document.documentElement.scrollTop > 50) { 858 // Get header height before making it fixed 859 const headerHeight = desktopMenuContainer.offsetHeight; 860 placeholder.style.height = headerHeight + 'px'; 861 placeholder.style.display = 'block'; 862 863 topmenu.classList.add('floating-menu'); 864 menubar.classList.add('floating-nav'); 865 desktopMenuContainer.classList.add('floating-desktop-menu-con'); 866 menubar.classList.add('floating-desktop-menu'); 867 } else { 868 placeholder.style.display = 'none'; 869 870 topmenu.classList.remove('floating-menu'); 871 menubar.classList.remove('floating-nav'); 872 desktopMenuContainer.classList.remove('floating-desktop-menu-con'); 873 menubar.classList.remove('floating-desktop-menu'); 874 } 875 } 876 877 </script>
877 878</section> 879 880 881</div> 882 883<main> 884 885 <div id="shopify-section-hero-banner" class="shopify-section hero-banner-section"><div class="v3-main-board"> 886 <div class="left-pan"></div> 887 <div class="right-pan"></div> 888 <img src="//nutricanine.ca/cdn/shop/files/NutriCanine-431_2.jpg?v=1764773288" alt="" class="mobile-background"> 889 <div class="main-pan"> 890 <div class="grid-container"> 891 <div class="text-container"> 892 893 <div class="over-shipped"> 894 <img 895 src="//nutricanine.ca/cdn/shop/files/image_158.svg?v=1700162727" 896 alt="" 897 class="hide-on-mobile" 898 > 899 Over 18 Million Meals Shipped Across Canada 900 </div> 901 902 <h1 class="board-title">Your dog deserves better than a bag.</h1> 903 <p class="board-desc">NutriCanine delivers freshly cooked, human-grade meals built for your dogs health â not shelf life.</p> 904 <a href="/pages/meal-plan-questionnaire" class="button yellow"> 905 Start the Quiz â Save 40% 906 </a> 907 </div> 908 </div> 909 </div> 910</div> 911 912<style> 913 @media screen and (max-width: 767px) { 914 .hide-on-mobile { 915 display: none !important; 916 } 917 } 918 @media print, screen and (min-width: 64em) { 919 .right-pan { 920 background-image: url("//nutricanine.ca/cdn/shop/files/NutriCanine-431_2.jpg?v=1764773288"); 921 } 922 } 923 @media print, screen and (max-width: 64em) { 924 .right-pan { 925 background-image: url("//nutricanine.ca/cdn/shop/files/NutriCanine-431_2.jpg?v=1764773288"); 926 } 927 } 928</style> 929 930 931</div> 932 933<div class="homePWrapper"> 934 <div id="shopify-section-health_benefits" class="shopify-section banner-template"><section class="hpHealthBenefits v3-health-benefits-section"> 935 <div class="grid-container"> 936 <div class="grid-x grid-padding-x"> 937 <div class="large-12 cell title-con"> 938 <h3>Transformative Health Benefits of NutriCanine</h3> 939 <h4>Using only clean, wholesome ingredients, we craft meals that bring genuine health benefits to your dog:</h4> 940 </div> 941 </div> 942 </div> 943 <div class="grid-container hHpBenefitsRow"> 944 <div class="grid-x grid-padding-x " id="HpBenefitsSlick"> 945 946 <div class="small-12 medium-4 large-2 cell"> 947 <div class="hpHBimg"> 948 949 <img data-src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/health_benefits_more_energy.svg?v=1612540268" width="60" height="91" alt="More stable energy" class="lazy img-more-energy" /> 950 951 </div> 952 <div class='text-con'> 953 <h5>More stable energy</h5> 954 <p>Promotes increased energy levels and consistent mood without sudden crashes.</p> 955 </div> 956 957 </div> 958 959 <div class="small-12 medium-4 large-2 cell"> 960 <div class="hpHBimg"> 961 962 <img data-src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/health_benefits_shiny_coat.png?v=1669643821.png" width="43" height="87" alt="Happy skin and coat" class="lazy" /> 963 964 </div> 965 <div class='text-con'> 966 <h5>Happy skin and coat</h5> 967 <p>Enhances your pup's coat to a lustrous shine with healthy fatty acids.</p> 968 </div> 969 970 </div> 971 972 <div class="small-12 medium-4 large-2 cell"> 973 <div class="hpHBimg"> 974 975 <img data-src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/ion_scale-outline.png?v=1726840903" width="40" height="75" alt="Healthier weight" class="lazy" /> 976 977 </div> 978 <div class='text-con'> 979 <h5>Healthier weight</h5> 980 <p>Supports optimal weight through balanced nutrition and precise portioning.</p> 981 </div> 982 983 </div> 984 985 <div class="small-12 medium-4 large-2 cell"> 986 <div class="hpHBimg"> 987 988 <img data-src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/poop.svg?v=1612540269" width="50" height="68" alt="Better digestion" class="lazy" /> 989 990 </div> 991 <div class='text-con'> 992 <h5>Better digestion</h5> 993 <p>Aids digestion, resulting in less flatulence and firmer stools for easier cleanup.</p> 994 </div> 995 996 </div> 997 998 <div class="small-12 medium-4 large-2 cell"> 999 <div class="hpHBimg"> 1000 1001 <img data-src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/n1-removebg-preview.png?v=1726811062" width="40" height="75" alt="Longer life" class="lazy" /> 1002 1003 </div> 1004 <div class='text-con'> 1005 <h5>Longer life</h5> 1006 <p>Fresh food can extend your dog's lifespan by up to 3 years, based on studies.</p> 1007 </div> 1008 1009 </div> 1010 1011 </div> 1012 </div> 1013 <div class="grid-container"> 1014 <div class="grid-x grid-padding-x "> 1015 <div class="large-12 cell"> 1016 <a href="/pages/meal-plan-questionnaire" class="button yellow">Claim 40% Off</a> 1017 </div> 1018 </div> 1019 </div> 1020</section> 1021 1022</div> 1023 1024 <div id="shopify-section-dual_recipes_block" class="shopify-section dual-food-template"> 1025<div class="moreInfo"> 1026 <!-- Pork Recipe --> 1027 <div class="revealMine" id="pid15045349114227PP" data-index="pork-recipe_info"> 1028 <h4>Pork Recipe</h4> 1029 <p class="feature">Hypoallergenic & GI Support</p> 1030 <ul> 1031 <li>Specially formulated for dogs with food sensitivities and allergies</li> 1032 <li>Enhanced with probiotics and digestive enzymes to aid digestion and reduce GI irritation.</li> 1033 <li>Made with carefully selected, easily digestible ingredients</li> 1034 </ul> 1035 <p> 1036 <strong>Ingredients:</strong><br> 1037 Fresh ground pork, Sweet potatoes, Pumpkin, Butternut squash, Whole oats, Carrots, Apples, Spinach, Fresh pork 1038 liver, Fresh pork heart, Dicalcium phosphate, Sunflower oil, Probiotic supplement, Digestive enzyme supplement, 1039 Fish oil, Vitamin and mineral supplement, Calcium carbonate, Sea salt, Chia seeds 1040 </p> 1041 <p> 1042 <strong>Functional Ingredients</strong> <br> 1043 1044 <b>Probiotics</b>: Lactic Acid Producing Organisms (Enterococcus faecium, Lactobacillus casei, Bifidobacterium 1045 thermophilum) - 0.011Ã10â¹ CFU/g, Lactobacillus acidophilus - 2Ã10â¹ CFU/g, Bacillus Organisms (Bacillus 1046 amyloliquefaciens, Bacillus licheniformis) - 0.2Ã10â¹ CFU/g, Bacillus subtilis - 6.5Ã10â¹ CFU/g.<br> 1047 <b>Prebiotics</b>: Pumpkin powder - 300mg/g, Chicory root powder (source of inulin) - 150mg/g, Ginger root - 1048 100mg/g<br> 1049 <b>Digestive Enzymes</b>: Amylase - 368 SKB/g, Protease (from pancreatin) - 368 HUT/g, Lipase - 59 FIP/g, Fungal 1050 protease - 849 HUT/g, Bromelain (from pineapple) - 0.013 MCU/mg, Papain (from papaya) - 0.0053 MCU/mg 1051 </p> 1052 <p> 1053 <strong class="tableHeading">Guaranteed Analysis:</strong><br> 1054 <table class="tableAnalysis"> 1055 <tr> 1056 <td></td> 1057 <td><strong>As Fed</strong></td> 1058 <td><strong>Dry Matter</strong></td> 1059 </tr> 1060 <tr> 1061 <td>Crude Protein (%)</td> 1062 <td>12</td> 1063 <td>31</td> 1064 </tr> 1065 <tr> 1066 <td>Crude Fat (%)</td> 1067 <td>8</td> 1068 <td>21</td> 1069 </tr> 1070 <tr> 1071 <td>Crude Fibre (%)</td> 1072 <td>3</td> 1073 <td>7</td> 1074 </tr> 1075 <tr> 1076 <td>
1076Moisture (%)</td> 1077 <td>62</td> 1078 <td></td> 1079 </tr> 1080 </table> 1081 </p> 1082 <button class="close-button" data-close aria-label="Close modal" type="button"> 1083 <span aria-hidden="true">×</span> 1084 </button> 1085 </div> 1086 <!-- Chicken Recipe --> 1087 <div class="revealMine" id="pid6539902091325PP" data-index="chicken-recipe_info"> 1088 <p class="feature">Grain Free</p> 1089 <h4>Chicken Recipe</h4> 1090 <ul> 1091 <li>Premium human-grade chicken for lean muscle support</li> 1092 <li>Low-carb formula</li> 1093 <li>Easily digestible ingredients for optimal nutrient absorption</li> 1094 </ul> 1095 <p> 1096 <strong>Ingredients:</strong><br> 1097 Fresh ground chicken, Russet potatoes, Fresh chicken liver, Fresh chicken heart, Butternut squash, Carrots, 1098 Broccoli, Strawberries, Dicalcium phosphate, Vitamin and mineral supplement, Sunflower oil, Calcium carbonate, 1099 Fish oil, Sea salt, Parsley, Chia seeds 1100 </p> 1101 <p> 1102 <strong class="tableHeading">Guaranteed Analysis:</strong><br> 1103 <table class="tableAnalysis"> 1104 <tr> 1105 <td></td> 1106 <td>As Fed</td> 1107 <td>Dry Matter</td> 1108 </tr> 1109 <tr> 1110 <td>Crude Protein (%)</td> 1111 <td>13</td> 1112 <td>41</td> 1113 </tr> 1114 <tr> 1115 <td>Crude Fat (%)</td> 1116 <td>11</td> 1117 <td>33</td> 1118 </tr> 1119 <tr> 1120 <td>Crude Fibre (%)</td> 1121 <td>1</td> 1122 <td>4</td> 1123 </tr> 1124 <tr> 1125 <td>Moisture (%)</td> 1126 <td>67</td> 1127 <td></td> 1128 </tr> 1129 </table> 1130 </p> 1131 <button class="close-button" data-close aria-label="Close modal" type="button"> 1132 <span aria-hidden="true">×</span> 1133 </button> 1134 </div> 1135 <!-- Turkey Recipe --> 1136 <div class="revealMine" id="pid6539896422461PP" data-index="turkey-recipe_info"> 1137 <p class="feature">Low Fat</p> 1138 <h4>Turkey Recipe</h4> 1139 <ul> 1140 <li>Specially formulated for dogs with pancreatitis or challenges with weight management</li> 1141 <li>Low-fat and low-protein profile for gentle digestion</li> 1142 <li>Anti-inflammatory ingredients to soothe GI irritation</li> 1143 </ul> 1144 <p> 1145 <strong>Ingredients:</strong><br> 1146 Fresh ground turkey, Sweet potatoes, Whole oats, Russet potatoes, Carrot, Kale, Fresh turkey liver, Fresh turkey 1147 heart, Dicalcium phosphate, Strawberries, Vitamin & mineral supplement, Calcium carbonate, Fish oil, Sunflower 1148 oil, Sea salt, Parsley, Chia seeds 1149 </p> 1150 <p> 1151 <strong class="tableHeading">Guaranteed Analysis:</strong><br> 1152 <table class="tableAnalysis"> 1153 <tr> 1154 <td></td> 1155 <td>As Fed</td> 1156 <td>Dry Matter</td> 1157 </tr> 1158 <tr> 1159 <td>Crude Protein (%)</td> 1160 <td>11</td> 1161 <td>26</td> 1162 </tr> 1163 <tr> 1164 <td>Crude Fat (%)</td> 1165 <td>6</td> 1166 <td>13</td> 1167 </tr> 1168 <tr> 1169 <td>Crude Fibre (%)</td> 1170 <td>3</td> 1171 <td>7</td> 1172 </tr> 1173 <tr> 1174 <td>Moisture (%)</td> 1175 <td>59</td> 1176 <td></td> 1177 </tr> 1178 </table> 1179 </p> 1180 <button class="close-button" data-close aria-label="Close modal" type="button"> 1181 <span aria-hidden="true">×</span> 1182 </button> 1183 </div> 1184 <!-- Beef Recipe --> 1185 <div class="revealMine" id="pid6539890720829PP" data-index="beef-recipe_info"> 1186 <p class="feature">Picky Eater Approved</p> 1187 <h4>Beef Recipe</h4> 1188 <ul> 1189 <li>Savoury ground beef for irresistible flavour</li> 1190 <li>Antioxidant-rich berries for immune system support</li> 1191 <li>Perfect balance of protein and energy for active dogs</li> 1192 </ul> 1193 <p> 1194 <strong>Ingredients:</strong><br> 1195 Fresh ground beef, Whole grain rice, Butternut squash, Carrots, Fresh beef liver, Fresh beef heart, Broccoli, 1196 Dicalcium phosphate, Vitamin and mineral supplement, Strawberries, Parsley, Sunflower oil, Calcium carbonate, Fish 1197 oil, Sea salt, Chia seed 1198 </p> 1199 <p> 1200 <strong class="tableHeading">Guaranteed Analysis:</strong><br> 1201 <table class="tableAnalysis"> 1202 <tr> 1203 <td>Guaranteed Analysis</td> 1204 <td>As Fed</td> 1205 <td>Dry Matter</td> 1206 </tr> 1207 <tr> 1208 <td>Crude Protein (%)</td> 1209 <td>14</td> 1210 <td>38</td> 1211 </tr> 1212 <tr> 1213 <td>Crude Fat (%)</td> 1214 <td>9</td> 1215 <td>24</td> 1216 </tr> 1217 <tr> 1218 <td>Crude Fibre (%)</td> 1219 <td>1</td> 1220 <td>3</td> 1221 </tr> 1222 <tr> 1223 <td>
1223Moisture (%)</td> 1224 <td>64</td> 1225 <td></td> 1226 </tr> 1227 </table> 1228 </p> 1229 <button class="close-button" data-close aria-label="Close modal" type="button"> 1230 <span aria-hidden="true">×</span> 1231 </button> 1232 </div> 1233 <!-- Lamb Recipe --> 1234 <div class="revealMine" id="pid6539900125245PP" data-index="lamb-recipe_info"> 1235 <p class="feature">Heart Healthy</p> 1236 <h4>Lamb Recipe</h4> 1237 <ul> 1238 <li>Rich in L-Carnosine to support cardiovascular health</li> 1239 <li>Garden-fresh produce for complete nutrition</li> 1240 <li>Source of glutathione, to reduce oxidative stress and inflammation.</li> 1241 </ul> 1242 <p> 1243 <strong>Ingredients:</strong><br> 1244 Fresh ground lamb, Whole grain rice, Butternut squash, Carrots, Fresh lamb liver, Fresh lamb heart, Green beans, 1245 Strawberries, Sunflower oil, Dicalcium phosphate, Vitamin and mineral supplement, Calcium carbonate, Fish oil, 1246 Parsley, Sea salt, Chia seeds 1247 </p> 1248 <p> 1249 <strong class="tableHeading">Guaranteed Analysis:</strong><br> 1250 <table class="tableAnalysis"> 1251 <tr> 1252 <td></td> 1253 <td>As Fed</td> 1254 <td>Dry Matter</td> 1255 </tr> 1256 <tr> 1257 <td>Crude Protein (%)</td> 1258 <td>13</td> 1259 <td>38</td> 1260 </tr> 1261 <tr> 1262 <td>Crude Fat (%)</td> 1263 <td>9</td> 1264 <td>25</td> 1265 </tr> 1266 <tr> 1267 <td>Crude Fibre (%)</td> 1268 <td>2</td> 1269 <td>4</td> 1270 </tr> 1271 <tr> 1272 <td>Moisture (%)</td> 1273 <td>65</td> 1274 <td></td> 1275 </tr> 1276 </table> 1277 </p> 1278 <button class="close-button" data-close aria-label="Close modal" type="button"> 1279 <span aria-hidden="true">×</span> 1280 </button> 1281 </div> 1282 <!-- Salmon Recipe --> 1283 <div class="revealMine" id="pid15277960069491PP" data-index="salmon-recipe_info"> 1284 <p class="newRibbon">New</p> 1285 <p class="feature">Skin & Coat</p> 1286 <h4>Salmon Recipe</h4> 1287 <ul> 1288 <li>Salmon as a source of protein and omega-3 fatty acids</li> 1289 <li>Sweet potatoes and pumpkin as carbohydrate and fiber sources</li> 1290 <li>Spinach and cranberries as sources of naturally occurring antioxidants</li> 1291 </ul> 1292 <p> 1293 <strong>Ingredients:</strong><br> 1294 Fresh salmon, sweet potatoes, russet potatoes, pumpkin, spinach, cranberries, dicalcium phosphate, vitamin & 1295 mineral supplement, sunflower oil, flaxseed, coconut oil, calcium carbonate, sea salt 1296 </p> 1297 <p> 1298 <strong class="tableHeading">Guaranteed Analysis:</strong><br> 1299 <table class="tableAnalysis"> 1300 <tr> 1301 <td></td> 1302 <td>As Fed</td> 1303 <td>Dry Matter</td> 1304 </tr> 1305 <tr> 1306 <td>Crude Protein (%)</td> 1307 <td>11</td> 1308 <td>30</td> 1309 </tr> 1310 <tr> 1311 <td>Crude Fat (%)</td> 1312 <td>9</td> 1313 <td>26</td> 1314 </tr> 1315 <tr> 1316 <td>Crude Fibre (%)</td> 1317 <td>2</td> 1318 <td>4</td> 1319 </tr> 1320 <tr> 1321 <td>Carbohydrates (%)</td> 1322 <td>10</td> 1323 <td>27</td> 1324 </tr> 1325 <tr> 1326 <td>Moisture (%)</td> 1327 <td>64</td> 1328 <td></td> 1329 </tr> 1330 </table> 1331 </p> 1332 <button class="close-button" data-close aria-label="Close modal" type="button"> 1333 <span aria-hidden="true">×</span> 1334 </button> 1335 </div> 1336</div> 1337<section class="hpRecipes v3-our-receipe-section"> 1338 <div class="grid-container"> 1339 <div class="grid-x grid-padding-x title-con"> 1340 <div class="small-12 medium-12 large-12 cell"> 1341 <h2>Our Recipes</h2> 1342 <p>Our recipes, developed by an agronomist, are nutrient-rich, delicious, and complete and balanced, meeting AAFCO guidelines.</p> 1343 </div> 1344 <div class="small-12 medium-12 large-12 cell mark-container"> 1345 <div class="mark-con"> 1346 <img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt=""> 1347 Guided by science 1348 </div> 1349 <div class="mark-con"> 1350 <img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt=""> 1351 Made fresh daily 1352 </div> 1353 </div> 1354 </div> 1355 <div class="cellBlock grid-x grid-padding-x hpRecipesBox"> 1356 1357 <div class="fiveCell cell "> 1358 <div class="hpRecipeBox v3-recipe-card"> 1359 <img src="//nutricanine.ca/cdn/shop/files/Untitled_design__1_-removebg-preview_1.png?v=1770643353"> 1360 1361 <p class="newRibbon">New</p> 1362 1363 <h4>Salmon Recipe</h4> 1364 <a 1365 class="button yellow1 topButton chicken-btn1 smt" 1366 href="/pages/meal-plan-questionnaire" 1367 style="background-color: #afb5df !important;" 1368 >Skin & Coat</a> 1369 <p>Smooth, savory, and nourishing, premium salmon blended with wholesome vegetables and functional ingredients to support skin, coat, and total-body comfort.</p> 1370 <div class="sub-head"> 1371 <div>KEY INGREDIENTS</div> 1372 <div class="readMore" data-index="salmon-recipe_info">Read More</div> 1373 </div> 1374 <div class="ing-con"> 1375 <img src="//nutricanine.ca/cdn/shop/files/Salmon.png?v=1771860716" alt=""> 1376 Salmon 1377 </div> 1378 <div class="ing-con"> 1379 <img src="//nutricanine.ca/cdn/shop/files/cranberries.png?v=1771860441" alt=""> 1380 Cranberries 1381 </div> 1382 <div class="ing-con"> 1383 <img src="//nutricanine.ca/cdn/shop/files/Coconut_Oil.png?v=1771860727" alt=""> 1384 Coconut oil 1385 </div> 1386 <div class="sub-head">KEY BENEFIT</div> 1387 <ul> 1388 <li>Ideal for dogs with signs of allergies, dull coats, or protein sensitivities. Supports skin health, mobility, and overall vitality with clean, simple ingredients.</li> 1389 </ul> 1390 </div> 1391 </div> 1392 1393 <div class="fiveCell cell paddingBottom"> 1394 <div class="hpRecipeBox v3-recipe-card"> 1395 <img src="//nutricanine.ca/cdn/shop/files/Pork-Recipe_fcc4a024-5d2b-4e77-ab17-8fbf99e2c242.png?v=1767636530"> 1396 1397 <h4>Pork Recipe</h4> 1398 <a 1399 class="button yellow1 topButton chicken-btn1 smt" 1400 href="/pages/meal-plan-questionnaire" 1401 style="background-color: #ffa3b3 !important;" 1402 >Hypoallergenic & GI Support</a> 1403 <p>Wrap your dog in comfort with every bowl - soothing relief for itchy skin and sensitive tummies, with irresistible flavour.</p> 1404 <div class="sub-head"> 1405 <div>KEY INGREDIENTS</div> 1406 <div class="readMore" data-index="pork-recipe_info">Read More</div> 1407 </div> 1408 <div class="ing-con"> 1409 <img src="//nutricanine.ca/cdn/shop/files/Ground-Pork_1.png?v=1750843649" alt=""> 1410 Ground Pork 1411 </div> 1412 <div class="ing-con"> 1413 <img src="//nutricanine.ca/cdn/shop/files/Pumpkin.png?v=1750843653" alt=""> 1414 Pumpkin 1415 </div> 1416 <div class="ing-con"> 1417 <img src="//nutricanine.ca/cdn/shop/files/Probiotic_d94dc3de-b9c6-436f-a7e8-01b07b5fdae0.png?v=1750843655" alt=""> 1418 Probiotic 1419 </div> 1420 <div class="sub-head">KEY BENEFIT</div> 1421 <ul> 1422 <li>Specially formulated for allergy relief and with probiotics for digestive support</li> 1423 </ul> 1424 </div> 1425 </div> 1426 1427 <div class="fiveCell cell paddingBottom"> 1428 <div class="hpRecipeBox v3-recipe-card"> 1429 <img src="//nutricanine.ca/cdn/shop/files/Pre-Cooked-Shadow-Chicken_dog_food.png?v=1614300498"> 1430 1431 <h4>Chicken Recipe</h4> 1432 <a 1433 class="button yellow1 topButton chicken-btn1 smt" 1434 href="/pages/meal-plan-questionnaire" 1435 style="background-color: #55bed6 !important;" 1436 >Grain Free</a> 1437 <p>
1437Bowl lickin' good - a symphony of premium chicken, crisp vegetables, and wholesome ingredients that'll keep tails wagging.</p> 1438 <div class="sub-head"> 1439 <div>KEY INGREDIENTS</div> 1440 <div class="readMore" data-index="chicken-recipe_info">Read More</div> 1441 </div> 1442 <div class="ing-con"> 1443 <img src="//nutricanine.ca/cdn/shop/files/Ground-Chicken.png?v=1750836800" alt=""> 1444 Ground Chicken 1445 </div> 1446 <div class="ing-con"> 1447 <img src="//nutricanine.ca/cdn/shop/files/broccoli.png?v=1750843659" alt=""> 1448 Broccoli 1449 </div> 1450 <div class="ing-con"> 1451 <img src="//nutricanine.ca/cdn/shop/files/Carrots_2578569c-e8c0-47b0-8e1a-bf37ccde9ddf.png?v=1750836800" alt=""> 1452 Carrots 1453 </div> 1454 <div class="sub-head">KEY BENEFIT</div> 1455 <ul> 1456 <li>High-protein, low-carb formula for lean muscles and vitality, plus nutrient-dense vegetables. Also great for diabetic dogs</li> 1457 </ul> 1458 </div> 1459 </div> 1460 1461 <div class="fiveCell cell paddingBottom"> 1462 <div class="hpRecipeBox v3-recipe-card"> 1463 <img src="//nutricanine.ca/cdn/shop/products/Pre-Cooked-Shadow-Beef.png?v=1762526348"> 1464 1465 <h4>Beef Recipe</h4> 1466 <a 1467 class="button yellow1 topButton chicken-btn1 smt" 1468 href="/pages/meal-plan-questionnaire" 1469 style="background-color: #fcd655 !important;" 1470 >Picky Eater Approved</a> 1471 <p>Every bite is a love letter to your dog's taste buds - a hearty feast that'll have them begging for more.</p> 1472 <div class="sub-head"> 1473 <div>KEY INGREDIENTS</div> 1474 <div class="readMore" data-index="beef-recipe_info">Read More</div> 1475 </div> 1476 <div class="ing-con"> 1477 <img src="//nutricanine.ca/cdn/shop/files/Ground-Beef.png?v=1750836800" alt=""> 1478 Ground Beef 1479 </div> 1480 <div class="ing-con"> 1481 <img src="//nutricanine.ca/cdn/shop/files/Butternut-Squash.png?v=1750836800" alt=""> 1482 Butternut Squash 1483 </div> 1484 <div class="ing-con"> 1485 <img src="//nutricanine.ca/cdn/shop/files/Strawberries.png?v=1750843651" alt=""> 1486 Strawberries 1487 </div> 1488 <div class="sub-head">KEY BENEFIT</div> 1489 <ul> 1490 <li>Ideal for picky eaters with immune-boosting antioxidants and easily digestible ingredients</li> 1491 </ul> 1492 </div> 1493 </div> 1494 1495 <div class="fiveCell cell paddingBottom"> 1496 <div class="hpRecipeBox v3-recipe-card"> 1497 <img src="//nutricanine.ca/cdn/shop/products/Pre-Cooked-Shadow-Turkey.png?v=1762526348"> 1498 1499 <h4>Turkey Recipe</h4> 1500 <a 1501 class="button yellow1 topButton chicken-btn1 smt" 1502 href="/pages/meal-plan-questionnaire" 1503 style="background-color: #95de9a !important;" 1504 >Low Fat</a> 1505 <p>Indulge your dog with the tender embrace of lean turkey and vibrant, nourishing ingredients that bring comfort to every bowl.</p> 1506 <div class="sub-head"> 1507 <div>KEY INGREDIENTS</div> 1508 <div class="readMore" data-index="turkey-recipe_info">Read More</div> 1509 </div> 1510 <div class="ing-con"> 1511 <img src="//nutricanine.ca/cdn/shop/files/Ground-Turkey.png?v=1750836800" alt=""> 1512 Ground Turkey 1513 </div> 1514 <div class="ing-con"> 1515 <img src="//nutricanine.ca/cdn/shop/files/Butternut-Squash.png?v=1750836800" alt=""> 1516 Butternut Squash 1517 </div> 1518 <div class="ing-con"> 1519 <img src="//nutricanine.ca/cdn/shop/files/Kale_3595c811-a0df-4df6-b849-9362e9ca5621.png?v=1750836800" alt=""> 1520 Kale 1521 </div> 1522 <div class="sub-head">KEY BENEFIT</div> 1523 <ul> 1524 <li>For improved digestibility, perfect for most dogs with pancreatitis or challenges with weight management</li> 1525 </ul> 1526 </div> 1527 </div> 1528 1529 <div class="fiveCell cell paddingBottom"> 1530 <div class="hpRecipeBox v3-recipe-card"> 1531 <img src="//nutricanine.ca/cdn/shop/products/Pre-Cooked-Shadow-Lamb.png?v=1762526350"> 1532 1533 <h4>Lamb Recipe</h4> 1534 <a 1535 class="button yellow1 topButton chicken-btn1 smt" 1536 href="/pages/meal-plan-questionnaire" 1537 style="background-color: #fc936f !important;" 1538 >Heart Healthy</a> 1539 <p>Savour the richness of tender lamb paired with garden-fresh produce - a premium meal for your premium pup.</p> 1540 <div class="sub-head"> 1541 <div>KEY INGREDIENTS</div> 1542 <div class="readMore" data-index="lamb-recipe_info">Read More</div> 1543 </div> 1544 <div class="ing-con"> 1545 <img src="//nutricanine.ca/cdn/shop/files/Ground-Lamb.png?v=1750836800" alt=""> 1546 Ground Lamb 1547 </div> 1548 <div class="ing-con"> 1549 <img src="//nutricanine.ca/cdn/shop/files/Carrots_2578569c-e8c0-47b0-8e1a-bf37ccde9ddf.png?v=1750836800" alt=""> 1550 Carrots 1551 </div> 1552 <div class="ing-con"> 1553 <img src="//nutricanine.ca/cdn/shop/files/Strawberries.png?v=1750843651" alt=""> 1554 Strawberries 1555 </div> 1556 <div class="sub-head">KEY BENEFIT</div> 1557 <ul> 1558 <li>Rich in L-Carnosine for heart health, with antioxidant-packed vegetables for complete wellness</li> 1559 </ul> 1560 </div> 1561 </div> 1562 1563 </div> 1564 <div class="small-12 medium-12 large-12 cell tAc"> 1565 <a href="/pages/meal-plan-questionnaire" class="button yellow">Get started</a> 1566 </div> 1567 <div class="small-12 medium-12 large-12 cell bt-ship-text"> 1568 <b>Free shipping</b> to Ontario, Quebec, Vancouver, Calgary, and more. 1569 </div> 1570 </div> 1571</section> 1572 1573<style> 1574 .hpRecipes .slick-prev:before, 1575 .hpRecipes .slick-next:before { 1576 font-size: 22px; 1577 color: #55bed6; 1578 } 1579 .paddingBottom img { 1580 padding-bottom: 20px; 1581 } 1582 .hpRecipes .slick-prev, 1583 .hpRecipes .slick-next { 1584 width: 40px; 1585 height: 40px; 1586 color: white; 1587 border: 1px solid #55bed6; 1588 background: white; 1589 border-radius: 50%; 1590 } 1591 .hpRecipes .slick-prev { 1592 left: -60px; 1593 } 1594 .hpRecipes .slick-next { 1595 right: -60px; 1596 } 1597 .hpRecipes .slick-track { 1598 padding-top: 65px; 1599 } 1600 1601 @media (max-width: 1350px) { 1602 .hpRecipes .slick-prev { 1603 left: 0px; 1604 z-index: 1; 1605 } 1606 .hpRecipes .slick-next { 1607 right: 0px; 1608 } 1609 } 1610</style>
1611<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
vendor: 1 bytes, line 1611
1611
1612<script> 1613 jQuery(document).ready(function () { 1614 $('.readMore').click(function () { 1615 var index = $(this).attr('data-index'); 1616 $('.revealMine').removeClass('active'); 1617 $('.moreInfo').addClass('active'); 1618 $('.revealMine[data-index="' + index + '"]').addClass('active'); 1619 }); 1620 1621 $('.moreInfo .close-button').click(function () { 1622 $('.moreInfo').removeClass('active'); 1623 $('.revealMine').removeClass('active'); 1624 }); 1625 }); 1626</script>
1626 1627 1628</div> 1629 1630 <div id="shopify-section-blue_slider-ab-test" class="shopify-section blue-slider-section"><section class="v3-blue-slider-section slider-grid"> 1631 <div class="grid-container"> 1632 <div class="container"> 1633 <div class="v3BlueSlider"> 1634 1635 <div style="padding:10px"> 1636 <div class="blu-slider"> 1637 <div class="grid-x grid-padding-x"> 1638 <div class="large-12 cell"> 1639 <p class="content">"You guys deliver this to my house like every month. My dog loves it. Like literally loves itâ - Wes Hall</p> 1640 <img src="//nutricanine.ca/cdn/shop/files/Dragons_Den.png?v=1759503375" alt="" class="logo"/> 1641 </div> 1642 </div> 1643 </div> 1644 </div> 1645 1646 <div style="padding:10px"> 1647 <div class="blu-slider"> 1648 <div class="grid-x grid-padding-x"> 1649 <div class="large-12 cell"> 1650 <p class="content">"I always wanted to know what dog food tastes like. It's shockingly not bad." - Simu Liu</p> 1651 <img src="//nutricanine.ca/cdn/shop/files/CBC_Featured_NutriCanine.jpg?v=1613774831" alt="" class="logo"/> 1652 </div> 1653 </div> 1654 </div> 1655 </div> 1656 1657 <div style="padding:10px"> 1658 <div class="blu-slider"> 1659 <div class="grid-x grid-padding-x"> 1660 <div class="large-12 cell"> 1661 <p class="content">"From the scientific findings to ingredient sourcing â itâs all very transparent with them."</p> 1662 <img src="//nutricanine.ca/cdn/shop/files/Untitled-1.png?v=1700159673" alt="" class="logo"/> 1663 </div> 1664 </div> 1665 </div> 1666 </div> 1667 1668 <div style="padding:10px"> 1669 <div class="blu-slider"> 1670 <div class="grid-x grid-padding-x"> 1671 <div class="large-12 cell"> 1672 <p class="content">"And they look so good, you might just confuse it for your own meal!"</p> 1673 <img src="//nutricanine.ca/cdn/shop/files/slider-blogto-icon.png?v=1698958605" alt="" class="logo"/> 1674 </div> 1675 </div> 1676 </div> 1677 </div> 1678 1679 <div style="padding:10px"> 1680 <div class="blu-slider"> 1681 <div class="grid-x grid-padding-x"> 1682 <div class="large-12 cell"> 1683 <p class="content">"You can see just about every ingredient they use for their recipes."</p> 1684 <img src="//nutricanine.ca/cdn/shop/files/pk-logo-white.svg?v=1700159673" alt="" class="logo"/> 1685 </div> 1686 </div> 1687 </div> 1688 </div> 1689 1690 <div style="padding:10px"> 1691 <div class="blu-slider"> 1692 <div class="grid-x grid-padding-x"> 1693 <div class="large-12 cell"> 1694 <p class="content">"They ensure their food adheres to regulatory standards, while maintaining a high-quality product full of nutrition."</p> 1695 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_2.png?v=1700158908" alt="" class="logo"/> 1696 </div> 1697 </div> 1698 </div> 1699 </div> 1700 1701 <div style="padding:10px"> 1702 <div class="blu-slider"> 1703 <div class="grid-x grid-padding-x"> 1704 <div class="large-12 cell"> 1705 <p class="content">"They gain trust and respect from the customers for their excellent service and quality fresh dog food."</p> 1706 <img src="//nutricanine.ca/cdn/shop/files/Medium_logo.png?v=1700338535" alt="" class="logo"/> 1707 </div> 1708 </div> 1709 </div> 1710 </div> 1711 1712 <div style="padding:10px"> 1713 <div class="blu-slider"> 1714 <div class="grid-x grid-padding-x"> 1715 <div class="large-12 cell"> 1716 <p class="content">"The care they put into each of their meals show that they are striving to be top contenders in fresh pet food."</p> 1717 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_1.png?v=1700158908" alt="" class="logo"/> 1718 </div> 1719 </div> 1720 </div> 1721 </div> 1722 1723 </div> 1724 </div> 1725 </div> 1726 <style> 1727 .v3-blue-slider-section{ 1728 background-image:url("//nutricanine.ca/cdn/shop/files/blue-slider-bg-pattern.svg?v=1698960150") 1729 } 1730 </style> 1731</section> 1732 1733</div> 1734 1735 <div id="shopify-section-hp_blue_section" class="shopify-section usp-blue-section"><section class="hHPusp"> 1736 <div class="grid-container"> 1737 <h2 class="v3-blue-section-title"> 1738 Why NutriCanine? 1739 </h2> 1740 </div> 1741 <div class="grid-container"> 1742 <div class="grid-x grid-padding-x "> 1743 <div class="large-4 cell"> 1744 <div class="HPuspImg"> 1745 <lottie-player src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Fresh_food.json?v=1700074862" background="transparent" speed="1" style="width: 175px; height: 175px;" hover loop autoplay></lottie-player> 1746 </div> 1747 <h3>Fresh food made with real ingredients.</h3> 1748 <p>All meals are freshly made with local, human-grade ingredients. No hormones, by-products, or artificial additives.</p> 1749 </div> 1750 <div class="large-4 cell"> 1751 <div class="HPuspImg"> 1752 <lottie-player src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Meals_02_3f3c6bce-198b-4e55-8a1e-e5d5ca81e85b.json?v=1700401139" background="transparent" speed="1" style="width: 175px; height: 175px;" hover loop autoplay></lottie-player> 1753 </div> 1754 <h3>Tailored for your pup's needs.</h3> 1755 <p>
1755Based on your pup's unique needs, we craft a customized meal plan and ready-to-serve recipes.</p> 1756 </div> 1757 <div class="large-4 cell"> 1758 <div class="HPuspImg"> 1759 <lottie-player src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Delivery.json?v=1700074852" background="transparent" speed="1" style="width: 175px; height: 175px;" hover loop autoplay></lottie-player> 1760 </div> 1761 <h3>Delivered on your schedule.</h3> 1762 <p>Your dogâs meals are delivered directly to your door in a refrigerated box. Pause or cancel your subscription any time.</p> 1763 </div> 1764 </div> 1765 </div> 1766 <div class="grid-container"> 1767 <div class="v3-blue-section-button-container"> 1768 <a href="/pages/meal-plan-questionnaire?ref=skio" class="button yellow">Start the Quiz - Save 40%</a> 1769 </div> 1770 </div> 1771 1772</section><style> 1773 #shopify-section-hp_blue_section .v3-blue-section-title { 1774 color: #1d252c; 1775 } 1776 #shopify-section-hp_blue_section .hHPusp .large-4.cell h3 { 1777 color: #1d252c; 1778 } 1779 #shopify-section-hp_blue_section .hHPusp .large-4.cell p { 1780 color: #1d252c; 1781 } 1782 #shopify-section-hp_blue_section + .v3-blue-section-shipping-info, 1783 #shopify-section-hp_blue_section .v3-blue-section-shipping-info { 1784 color: #1d252c; 1785 } 1786 #shopify-section-hp_blue_section .v3-blue-section-button-container .button.yellow { 1787 margin-top: 0; 1788 } 1789 @media only screen and (max-width: 40em) { 1790 #shopify-section-hp_blue_section .hHPusp { 1791 padding-bottom: 16px; 1792 } 1793 } 1794</style> 1795 1796</div> 1797 1798 <div id="shopify-section-vet-testimonial" class="shopify-section"><style> 1799 .vet-testimonial { 1800 background-color: #f5f0eb; 1801 padding: 60px 20px; 1802 } 1803 1804 .vet-testimonial__inner { 1805 max-width: 900px; 1806 margin: 0 auto; 1807 display: flex; 1808 align-items: center; 1809 gap: 50px; 1810 } 1811 1812 .vet-testimonial__image { 1813 flex-shrink: 0; 1814 width: 280px; 1815 height: 280px; 1816 border-radius: 12px; 1817 overflow: hidden; 1818 } 1819 1820 .vet-testimonial__image img { 1821 width: 100%; 1822 height: 100%; 1823 object-fit: cover; 1824 } 1825 1826 .vet-testimonial__content { 1827 flex: 1; 1828 } 1829 1830 .vet-testimonial__quote-icon { 1831 color: #4dbfbf; 1832 font-size: 93px; 1833 font-family: Lato; 1834 line-height: 1; 1835 height: 50px; 1836 font-weight: 800; 1837 } 1838 1839 .vet-testimonial__quote-icon--close { 1840 text-align: right; 1841 margin-top: -10px; 1842 } 1843 1844 .vet-testimonial__text { 1845 font-size: 24px; 1846 line-height: 1.2; 1847 color: #1D252C; 1848 margin-bottom: 20px; 1849 font-weight: 700; 1850 } 1851 1852 .vet-testimonial__name { 1853 font-size: 20px; 1854 color: #1D252C; 1855 font-weight: 700; 1856 margin-bottom: 0; 1857 } 1858 1859 .vet-testimonial__title { 1860 color: #1D252C; 1861 font-size: 20px; 1862 margin-bottom: 0; 1863 } 1864 1865 @media (max-width: 768px) { 1866 .vet-testimonial { 1867 padding: 40px 20px; 1868 } 1869 1870 .vet-testimonial__inner { 1871 flex-direction: column; 1872 gap: 30px; 1873 text-align: left; 1874 } 1875 1876 .vet-testimonial__image { 1877 width: 220px; 1878 height: 220px; 1879 } 1880 1881 .vet-testimonial__text { 1882 font-size: 24px; 1883 } 1884 } 1885</style> 1886 1887<div class="vet-testimonial"> 1888 <div class="vet-testimonial__inner"> 1889 1890 <div class="vet-testimonial__image"> 1891 <img 1892 src="//nutricanine.ca/cdn/shop/files/993cdf27d1c6dd8fccc7997ddd344bf7381c1f3c_1.jpg?v=1774528476&width=560" 1893 alt="Dr. Charly Guatto" 1894 loading="lazy" 1895 > 1896 </div> 1897 1898 <div class="vet-testimonial__content"> 1899 <div class="vet-testimonial__quote-icon">“</div> 1900 <p class="vet-testimonial__text">As a veterinarian, I appreciate NutriCanine's use of simple, whole ingredients and their commitment to balanced, fresh nutrition. I choose to feed it to my own dog, Denna, who has a sensitive stomach, because the gently cooked recipes are easy for her to tolerate and she loves the taste. It's a brand I feel confident recommending to pet parents looking for a trustworthy fresh-food option.</p> 1901 <div class="vet-testimonial__quote-icon vet-testimonial__quote-icon--close">”</div> 1902 <p class="vet-testimonial__name">Dr. Charly Guatto</p> 1903 <p class="vet-testimonial__title">Doctor of Veterinary Medicine (DVM)</p> 1904 </div> 1905 </div> 1906</div> 1907 1908 1909</div> 1910 1911 <div id="shopify-section-display_box_1" class="shopify-section display-imgtxt_l"><section class="hHPmealdDealivery v3-how-it-works-section"> 1912 <div class="grid-container"> 1913 <div> 1914 <h2>How It Works</h2> 1915 </div> 1916 1917 </div> 1918 <div class="grid-container"> 1919 <div class="grid-x grid-padding-x "> 1920 <div class="large-5 medium-5 cell"> 1921 <img data-src="//nutricanine.ca/cdn/shop/files/2E1BBFBC-21BD-4234-9BD1-479AFFC14588_1.jpg?v=1764774653" width="541" height="418" alt="Cute dog behind kitchen table" class="lazy hide-for-medium" /> 1922 <img data-src="//nutricanine.ca/cdn/shop/files/2E1BBFBC-21BD-4234-9BD1-479AFFC14588_1.jpg?v=1764774653" width="541" height="418" alt="Dog with Nutricanine.ca food box" class="lazy show-for-medium" /> 1923 </div> 1924 <div class="large-7 medium-7 cell text-con"> 1925 <div> 1926 <div class="step-con" style="margin-top:-5px;"> 1927 <div class="line1"> 1928 <div>
1929 <span class="circle-num">1</span> 1930 </div> 1931 <p>Fill out our 1-minute onboarding form.</p> 1932 </div> 1933 </div> 1934 <div class="step-con"> 1935 <div class="line1"> 1936 <div> 1937 <span class="circle-num">2</span> 1938 </div> 1939 <p>Choose your preferred recipes.</p> 1940 </div> 1941 <div class="sub-con"> 1942 <a href="/pages/recipes">View Recipes</a> 1943 </div> 1944 </div> 1945 <div class="step-con"> 1946 <div class="line1"> 1947 <div> 1948 <span class="circle-num">3</span> 1949 </div> 1950 <p>Select your plan.</p> 1951 </div> 1952 <div class="sub-con"> 1953 <ul> 1954 <li>Full Plan (From $2.30 per day)</li> 1955 <li>Topper Plan (From $1.15 per day)</li> 1956 </ul> 1957 </div> 1958 </div> 1959 <div class="step-con" style="margin-bottom:-5px !important;"> 1960 <div class="line1"> 1961 <div> 1962 <span class="circle-num">4</span> 1963 </div> 1964 <p>Add delicious treats.</p> 1965 </div> 1966 </div> 1967 </div> 1968 </div> 1969 </div> 1970 </div> 1971 <div class="grid-container"> 1972 <div> 1973 <a href="/pages/meal-plan-questionnaire" class="button yellow">Claim 40% Off</a> 1974 </div> 1975 1976 </div> 1977</section> 1978</div> 1979 1980 <div id="shopify-section-our_plan_section" class="shopify-section our-plans-section"><section class="v3-our-plan-section"> 1981 <div class="grid-container"> 1982 <h2 class="v3-plan-section-title">Our Plans</h2> 1983 </div> 1984 <div class="grid-container"> 1985 <div class="grid-x grid-padding-x v3-plan-card-container"> 1986 1987 <div class="plan-card "> 1988 <div class="img"> 1989 <img src="//nutricanine.ca/cdn/shop/files/plan1.svg?v=1699035640" alt="" /> 1990 <div class="percent-circle"> 1991 <h2>100%</h2> 1992 <span>of Daily Calories</span> 1993 </div> 1994 </div> 1995 <div class="body"> 1996 <span class="yellow-mark">Recommended</span> 1997 <h2 class="plan-title">Full Plan </h2> 1998 <p class="plan-desc">Give your dog the health benefits of a complete fresh diet. </p> 1999 <p class="price-text">Starts at</p> 2000 <h2 class="price">$2.30</h2> 2001 <p class="price-text">per day, billed every 2 weeks </p> 2002 </div> 2003 <div class="items"> 2004 <div class="item"> 2005 <div class="check-con"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Check_Outline.png?v=1699034556" alt="" /></div> 2006 <div class="item-text">Customized meal plan tailored to your dogâs needs </div> 2007 </div> 2008 <div class="item"> 2009 <div class="check-con"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Check_Outline.png?v=1699034556" alt="" /></div> 2010 <div class="item-text"><b>100% of daily calories</b> </div> 2011 </div> 2012 <div class="item"> 2013 <div class="check-con"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Check_Outline.png?v=1699034556" alt="" /></div> 2014 <div class="item-text">14-day supply of pre-portioned meals </div> 2015 </div> 2016 <div class="item"> 2017 <div class="check-con"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Check_Outline.png?v=1699034556" alt="" /></div> 2018 <div class="item-text">Delivered every 2 weeks </div> 2019 </div> 2020 <div class="item"> 2021 <div class="check-con"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Check_Outline.png?v=1699034556" alt="" /></div> 2022 <div class="item-text">40% off your first box </div> 2023 </div> 2024 </div> 2025 </div> 2026 2027 <div class="plan-card "> 2028 <div class="img"> 2029 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_11.png?v=1700063396" alt="" /> 2030 <div class="percent-circle"> 2031 <h2>50%</h2>
2032 <span>of Daily Calories</span> 2033 </div> 2034 </div> 2035 <div class="body"> 2036 <span class="yellow-mark">Budget-Friendly</span> 2037 <h2 class="plan-title">Topper Plan </h2> 2038 <p class="plan-desc">An affordable way to add fresh food to your dog's existing diet. </p> 2039 <p class="price-text">Starts at</p> 2040 <h2 class="price">$1.15</h2> 2041 <p class="price-text">per day, billed every 4 weeks </p> 2042 </div> 2043 <div class="items"> 2044 <div class="item"> 2045 <div class="check-con"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Check_Outline.png?v=1699034556" alt="" /></div> 2046 <div class="item-text">Customized meal plan tailored to your dogâs needs </div> 2047 </div> 2048 <div class="item"> 2049 <div class="check-con"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Check_Outline.png?v=1699034556" alt="" /></div> 2050 <div class="item-text"><b>50% of daily calories</b> </div> 2051 </div> 2052 <div class="item"> 2053 <div class="check-con"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Check_Outline.png?v=1699034556" alt="" /></div> 2054 <div class="item-text">28-day supply of pre-portioned meals </div> 2055 </div> 2056 <div class="item"> 2057 <div class="check-con"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Check_Outline.png?v=1699034556" alt="" /></div> 2058 <div class="item-text">Delivered every 4 weeks </div> 2059 </div> 2060 <div class="item"> 2061 <div class="check-con"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/Check_Outline.png?v=1699034556" alt="" /></div> 2062 <div class="item-text">40% off your first box </div> 2063 </div> 2064 </div> 2065 </div> 2066 2067 </div> 2068 </div> 2069 <div class="grid-container"> 2070 <a href="/pages/meal-plan-questionnaire" class="button yellow">Claim 40% Off</a> 2071 </div> 2072</section> 2073 2074</div> 2075 2076 <div id="shopify-section-first_box" class="shopify-section first-box-section"><section class="hHPusp v3-first-box-section"> 2077 <div class="grid-container"> 2078 <h2 class="v3-blue-section-title"> 2079 Whatâs Inside Your First Box 2080 </h2> 2081 </div> 2082 <div class="grid-container"> 2083 <div class="grid-x grid-padding-x "> 2084 <div class="large-4 medium-4 cell"> 2085 <div class="HPuspImg"> 2086 <img src="//nutricanine.ca/cdn/shop/files/NutriCanine-040.jpg?v=1764087393" alt=""> 2087 </div> 2088 <h3>Pre-Portioned Packs of Fresh Food</h3> 2089 <p>Real, fresh meals tailored to your dog's nutritional needs</p> 2090 </div> 2091 <div class="large-4 medium-4 cell"> 2092 <div class="HPuspImg"> 2093 <img src="//nutricanine.ca/cdn/shop/files/NutriCanine-508.jpg?v=1764087518" alt=""> 2094 </div> 2095 <h3>Welcome Guide & Meal Plan</h3> 2096 <p>Your essential guide to starting your dog on a fresh food diet</p> 2097 </div> 2098 <div class="large-4 medium-4 cell"> 2099 <div class="HPuspImg"> 2100 <img src="//nutricanine.ca/cdn/shop/files/NutriCanine-434.jpg?v=1770401569" alt=""> 2101 </div> 2102 <h3>Exclusive Surprise <br>Gifts</h3> 2103 <p>A special something to make your dog's tail wag even more</p> 2104 </div> 2105 </div> 2106 </div> 2107 <div class="grid-container"> 2108 <div class="v3-blue-section-button-container"> 2109 <a href="/pages/meal-plan-questionnaire?ref=skio" class="button yellow">Get My Dog's Plan</a> 2110 </div> 2111 </div> 2112</section> 2113 2114 2115</div> 2116 2117 <div id="shopify-section-hp_reviews" class="shopify-section customer-reviews-section"><section class="hReviewsHP v3-customer-review-section"> 2118 <div class="grid-container"> 2119 <div class="grid-x grid-padding-x title-con"> 2120 <div class="large-12 cell">
2121 <span class="rating"> 2122 2123 2124 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2125 2126 </span> 2127 <h3>Rated 4.9 / 5 by 6000+ Canadian Fur Parents</h3> 2128 </div> 2129 </div> 2130 </div> 2131 <div class="grid-container hReviewSlider"> 2132 <div class="reviewSlider"> 2133 2134 <div style="padding:10px"> 2135 <div class="grid-container"> 2136 <div class="grid-x grid-padding-x "> 2137 <div class="review-card"> 2138 <img src="//nutricanine.ca/cdn/shop/files/Craig_H_1.webp?v=1773406348" alt="Nutricanine.ca review by Craig H." width="250" height="250" /> 2139 <div class="review-body"> 2140 <span class="rating"> 2141 2142 2143 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2144 2145 </span> 2146 <div class="content"> 2147 <p>Our Border Collie had allergy issues. Going with NutriCanine resolved the issues. I highly recommend NutriCanine. I know it will hurt your budget. But if you go for the top up program and mix some kibble it will only be about 1/3 more. Update our Amelia has now been on NutriCanine Fresh Dog Food for almost a year. She is always eager morning and night waiting for her NutriCanine to warm up. She sits beside the stove in anticipation for another delicious meal. I know dogs will get exited for treats but she gets more exited for every NutriCanine meal. Our Amelia is a happy and healthy dog thanks to NutriCanine. Thank You</p> 2148 </div> 2149 <span class="name">Craig H.</span> 2150 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 2151 2152 </div> 2153 <div class="review-footer"> 2154 <p>Chosen Plan:</p> 2155 Topper Plan 2156 </div> 2157 </div> 2158 </div> 2159 </div> 2160 </div> 2161 2162 <div style="padding:10px"> 2163 <div class="grid-container"> 2164 <div class="grid-x grid-padding-x "> 2165 <div class="review-card"> 2166 <img src="//nutricanine.ca/cdn/shop/files/Kendall_R_1.webp?v=1773406139" alt="Nutricanine.ca review by Kendall R" width="250" height="250" /> 2167 <div class="review-body"> 2168 <span class="rating"> 2169 2170 2171 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2172 2173 </span> 2174 <div class="content"> 2175 <p>My small dog Oliver is a very picky eater but he absolutely loves the lamb and beef recipe! He is a senior and his teeth are starting to go, so this soft food option is easy for him to eat and very healthy as well! Delivery is fast, with tracking, and comes with freezer packs to keep everything frozen upon arrival. Food comes in frozen patties (quick to thaw) that last my 20 pound pup about 4 meals each. I am very happy with the quality and the convenience of Nutricanineâs dog food and I will definitely be repurchasing! I also want to shout them out for amazing customer service! Thank you!!</p> 2176 </div> 2177 <span class="name">Kendall R</span> 2178 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 2179 2180 </div> 2181 <div class="review-footer"> 2182 <p>Chosen Plan:</p> 2183 Topper Plan 2184 </div> 2185 </div> 2186 </div> 2187 </div> 2188 </div> 2189 2190 <div style="padding:10px"> 2191 <div class="grid-container"> 2192 <div class="grid-x grid-padding-x "> 2193 <div class="review-card"> 2194 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_3.png?v=1700062774" alt="Nutricanine.ca review by Jodi A." width="250" height="250" /> 2195 <div class="review-body">
2196 <span class="rating"> 2197 2198 2199 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2200 2201 </span> 2202 <div class="content"> 2203 <p>Our dog loves the food and is thriving on it. The delivery service handles the product with care. The customer service is 10 star.</p> 2204 </div> 2205 <span class="name">Jodi A.</span> 2206 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 2207 2208 </div> 2209 <div class="review-footer"> 2210 <p>Chosen Plan:</p> 2211 Full Plan 2212 </div> 2213 </div> 2214 </div> 2215 </div> 2216 </div> 2217 2218 <div style="padding:10px"> 2219 <div class="grid-container"> 2220 <div class="grid-x grid-padding-x "> 2221 <div class="review-card"> 2222 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_10.png?v=1700062804" alt="Nutricanine.ca review by Minnie F" width="250" height="250" /> 2223 <div class="review-body"> 2224 <span class="rating"> 2225 2226 2227 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2228 2229 </span> 2230 <div class="content"> 2231 <p>After my dog got sick of her kibble, we tried NutriCanine and she loves it! Honestly, the food looks good enough for us to eat..lol</p> 2232 </div> 2233 <span class="name">Minnie F</span> 2234 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 2235 2236 </div> 2237 <div class="review-footer"> 2238 <p>Chosen Plan:</p> 2239 Full Plan 2240 </div> 2241 </div> 2242 </div> 2243 </div> 2244 </div> 2245 2246 <div style="padding:10px"> 2247 <div class="grid-container"> 2248 <div class="grid-x grid-padding-x "> 2249 <div class="review-card"> 2250 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_9.png?v=1700062812" alt="Nutricanine.ca review by Katy K." width="250" height="250" /> 2251 <div class="review-body"> 2252 <span class="rating"> 2253 2254 2255 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2256 2257 </span> 2258 <div class="content"> 2259 <p>Lola LOVES her chicken meals! Her energy is higher than itâs ever been and sheâs had zero tummy issues since we switched to this food.</p> 2260 </div> 2261 <span class="name">Katy K.</span> 2262 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 2263 2264 </div> 2265 <div class="review-footer"> 2266 <p>Chosen Plan:</p> 2267 Topper Plan 2268 </div> 2269 </div> 2270 </div> 2271 </div> 2272 </div> 2273 2274 <div style="padding:10px"> 2275 <div class="grid-container"> 2276 <div class="grid-x grid-padding-x "> 2277 <div class="review-card"> 2278 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_8.png?v=1700062815" alt="Nutricanine.ca review by Chrstine L." width="250" height="250" /> 2279 <div class="review-body">
2280 <span class="rating"> 2281 2282 2283 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2284 2285 </span> 2286 <div class="content"> 2287 <p>Bianca loved it from first bite! The packages and delivery are very convenient. You donât have to think about picking up more!</p> 2288 </div> 2289 <span class="name">Chrstine L.</span> 2290 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 2291 2292 </div> 2293 <div class="review-footer"> 2294 <p>Chosen Plan:</p> 2295 Full Plan 2296 </div> 2297 </div> 2298 </div> 2299 </div> 2300 </div> 2301 2302 <div style="padding:10px"> 2303 <div class="grid-container"> 2304 <div class="grid-x grid-padding-x "> 2305 <div class="review-card"> 2306 <img src="//nutricanine.ca/cdn/shop/files/unnamed.png?v=1699291599" alt="Nutricanine.ca review by Jennifer Y." width="250" height="250" /> 2307 <div class="review-body"> 2308 <span class="rating"> 2309 2310 2311 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2312 2313 </span> 2314 <div class="content"> 2315 <p>It was an immediate hit! She has more energy, sleeps better, her poops are more regular and her diarrhea has improved.</p> 2316 </div> 2317 <span class="name">Jennifer Y.</span> 2318 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 2319 2320 </div> 2321 <div class="review-footer"> 2322 <p>Chosen Plan:</p> 2323 Topper Plan 2324 </div> 2325 </div> 2326 </div> 2327 </div> 2328 </div> 2329 2330 <div style="padding:10px"> 2331 <div class="grid-container"> 2332 <div class="grid-x grid-padding-x "> 2333 <div class="review-card"> 2334 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_7.png?v=1700062799" alt="Nutricanine.ca review by Valerie B." width="250" height="250" /> 2335 <div class="review-body"> 2336 <span class="rating"> 2337 2338 2339 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2340 2341 </span> 2342 <div class="content"> 2343 <p>I started my 15-year-old dog Lola on NutriCanine food about a month ago. She loves it! She is like a puppy again.</p> 2344 </div> 2345 <span class="name">Valerie B.</span> 2346 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 2347 2348 </div> 2349 <div class="review-footer"> 2350 <p>Chosen Plan:</p> 2351 Full Plan 2352 </div> 2353 </div> 2354 </div> 2355 </div> 2356 </div> 2357 2358 <div style="padding:10px"> 2359 <div class="grid-container"> 2360 <div class="grid-x grid-padding-x "> 2361 <div class="review-card"> 2362 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_6.png?v=1700062818" alt="Nutricanine.ca review by Michelle J." width="250" height="250" /> 2363 <div class="review-body">
2364 <span class="rating"> 2365 2366 2367 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2368 2369 </span> 2370 <div class="content"> 2371 <p>After switching my fussy dog to NutriCanine, he has lost weight, (our vet is so pleased) and he has way more energy for an old boy!</p> 2372 </div> 2373 <span class="name">Michelle J.</span> 2374 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 2375 2376 </div> 2377 <div class="review-footer"> 2378 <p>Chosen Plan:</p> 2379 Topper Plan 2380 </div> 2381 </div> 2382 </div> 2383 </div> 2384 </div> 2385 2386 <div style="padding:10px"> 2387 <div class="grid-container"> 2388 <div class="grid-x grid-padding-x "> 2389 <div class="review-card"> 2390 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_5.png?v=1700062817" alt="Nutricanine.ca review by Marianne S." width="250" height="250" /> 2391 <div class="review-body"> 2392 <span class="rating"> 2393 2394 2395 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2396 2397 </span> 2398 <div class="content"> 2399 <p>This is a great company that truly cares for your fur babies. No gimmicks, just good, wholesome, top grade food for your babies.</p> 2400 </div> 2401 <span class="name">Marianne S.</span> 2402 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 2403 2404 </div> 2405 <div class="review-footer"> 2406 <p>Chosen Plan:</p> 2407 Topper Plan 2408 </div> 2409 </div> 2410 </div> 2411 </div> 2412 </div> 2413 2414 <div style="padding:10px"> 2415 <div class="grid-container"> 2416 <div class="grid-x grid-padding-x "> 2417 <div class="review-card"> 2418 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_4.png?v=1700062816" alt="Nutricanine.ca review by Jennifer R." width="250" height="250" /> 2419 <div class="review-body"> 2420 <span class="rating"> 2421 2422 2423 <i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i> 2424 2425 </span> 2426 <div class="content"> 2427 <p>Crosby runs to his bowl & doesn't look up until it's all gone. He's FINALLY excited to eat!</p> 2428 </div> 2429 <span class="name">Jennifer R.</span> 2430 <div class="verified-mark"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/check_full.png?v=1699057387" alt="" />Verified Purchase</div> 2431 2432 </div> 2433 <div class="review-footer"> 2434 <p>Chosen Plan:</p> 2435 Full Plan 2436 </div> 2437 </div> 2438 </div> 2439 </div> 2440 </div> 2441 2442 </div> 2443 <div style="text-align:center"> 2444 <a href="/pages/meal-plan-questionnaire" class="button yellow">Claim 40% Off</a> 2445 </div> 2446 </div> 2447 <style> 2448 .v3-customer-review-section{ 2449 background-image:url("//nutricanine.ca/cdn/shop/files/bg_pattern.svg?v=1699286426") 2450 } 2451 </style> 2452</section> 2453 2454 2455</div> 2456</div> 2457 2458 2459</main> 2460 2461<div id="shopify-section-footer" class="shopify-section footer_section-section"> 2462
vendor: 1,878 bytes, lines 2463-2468
2463<script type="text/javascript"> 2464(function(f,b){if(!b.__SV){var e,g,i,h;window.mixpanel=b;b._i=[];b.init=function(e,f,c){function g(a,d){var b=d.split(".");2==b.length&&(a=a[b[0]],d=b[1]);a[d]=function(){a.push([d].concat(Array.prototype.slice.call(arguments,0)))}}var a=b;"undefined"!==typeof c?a=b[c]=[]:c="mixpanel";a.people=a.people||[];a.toString=function(a){var d="mixpanel";"mixpanel"!==c&&(d+="."+c);a||(d+=" (stub)");return d};a.people.toString=function(){return a.toString(1)+".people (stub)"};i="disable time_event track track_pageview track_links track_forms track_with_groups add_group set_group remove_group register register_once alias unregister identify name_tag set_config reset opt_in_tracking opt_out_tracking has_opted_in_tracking has_opted_out_tracking clear_opt_in_out_tracking start_batch_senders people.set people.set_once people.unset people.increment people.append people.union people.track_charge people.clear_charges people.delete_user people.remove".split(" "); 2465for(h=0;h<i.length;h++)g(a,i[h]);var j="set set_once union unset remove delete".split(" ");a.get_group=function(){function b(c){d[c]=function(){call2_args=arguments;call2=[c].concat(Array.prototype.slice.call(call2_args,0));a.push([e,call2])}}for(var d={},e=["get_group"].concat(Array.prototype.slice.call(arguments,0)),c=0;c<j.length;c++)b(j[c]);return d};b._i.push([e,f,c])};b.__SV=1.2;e=f.createElement("script");e.type="text/javascript";e.async=!0;e.src="undefined"!==typeof MIXPANEL_CUSTOM_LIB_URL? 2466MIXPANEL_CUSTOM_LIB_URL:"file:"===f.location.protocol&&"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//)?"https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js":"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js";g=f.getElementsByTagName("script")[0];g.parentNode.insertBefore(e,g)}})(document,window.mixpanel||[]); 2467mixpanel.init("9b974aa94e0adfba54b24471f843f339"); 2468</script>
2468 2469<section class="v3-footer-top"> 2470 <div class="grid-container"> 2471 <div class="grid-x grid-padding-x title-con"> 2472 <div class="large-5 medium-5 small-12 cell img-con"> 2473 <img src="//nutricanine.ca/cdn/shop/files/Screenshot_2022-11-27_150246.png?v=1699302366" alt=""/> 2474 </div> 2475 <div class="large-7 medium-7 small-12 cell right-side"> 2476 <h3>Not ready yet? Get fresh feeding tips and be the first to know about promos.</h3> 2477 <p> 2478 Sign up to our newsletter to receive pet tips and updates plus 40% off your first personalized NutriCanine meal plan order. 2479 </p> 2480 <div id="klaviyo-form-WQDydp">Subscribed!</div> 2481 <form id="email_signup" class="email-con klaviyo_gdpr_embed_WQDydp" action="//manage.kmail-lists.com/subscriptions/subscribe" data-ajax-submit="//manage.kmail-lists.com/ajax/subscriptions/subscribe" method="GET" target="_blank" novalidate="novalidate"> 2482 <input type="hidden" name="g" value="WQDydp"> 2483 <input type="email" name="email" id="k_id_email" placeholder="Email Address" class="large-7 small-12" /> 2484 <button type="submit" class="k_signupbtn button yellow large-5 small-12">Get 40% Off</button> 2485 </form> 2486 2487 </div> 2488 </div> 2489 </div> 2490
2490<script> 2491 document.getElementById('email_signup').addEventListener('submit', function(event){ 2492 document.getElementById('klaviyo-form-WQDydp').style.display='block'; 2493 }) 2494 </script>
2494 2495</section> 2496 2497<footer> 2498 <div class="grid-container"> 2499 <div class="grid-x grid-padding-x "> 2500 <div class="large-5 medium-5 small-12 cell logo-con"> 2501 <a href="/"><img class="lazy" src="" data-src="https://cdn.shopify.com/s/files/1/0499/5615/9639/files/NutriCanine_Logo_White.png?v=1608132370" alt="Nutricanina Canada - Gently Cooked dog Food" width="378" height="52"></a> 2502 <div class="contact-info show-for-medium"> 2503 <a href="mailto:[email protected]" class="footMUL"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/envelop_icon_c1b5438d-2579-4808-853d-141ab7a52c95.svg?v=1699305452" alt=""/> [email protected]</a> 2504 <a href="tel:14167261311" class="footMUL"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/phone_icon_42d24360-6947-431d-b656-9d337b3bdcca.svg?v=1699305452" alt=""/> (416) 726-1311</a> 2505 </div> 2506 <div class="icon-b"> 2507 <p class="footsocialtxt"> 2508 <a href="https://www.facebook.com/NutriCanine/" class="hIco show-for-medium" target="_blank"><i class="fab fa-facebook-f"></i></a> 2509 <a href="https://www.instagram.com/nutricanine/" class="hIco show-for-medium" target="_blank"><i class="fab fa-instagram"></i></a> 2510 <a href="https://www.tiktok.com/@nutricanine/" class="hIco show-for-medium" target="_blank"><i class="fab fa-tiktok"></i></a> 2511 </p> 2512 </div> 2513 </div> 2514 <div class="large-1 medium-1 cell show-for-medium"> 2515 2516 </div> 2517 <div class="small-12 medium-3 large-3 cell"> 2518 2519 <ul class="footMenu"> 2520 2521 <li><a href="/pages/meal-plan-questionnaire">Create a Meal Plan</a></li> 2522 2523 <li><a href="/a/account/login">Login</a></li> 2524 2525 <li><a href="/pages/recipes">Recipes</a></li> 2526 2527 <li><a href="/pages/fresh-dog-food-faqs">FAQs</a></li> 2528 2529 <li><a href="https://nutricanine.ca/pages/google-reviews">Google Reviews</a></li> 2530 2531 <li><a href="/pages/careers">Careers</a></li> 2532 2533 <li><a href="/blogs/dog-digest">Blog</a></li> 2534 2535 </ul> 2536 2537 2538 </div> 2539 <div class="small-12 hide-for-medium cell"> 2540 <div class="border-line"></div> 2541 </div> 2542 <div class="small-12 medium-3 large-3 cell" style="z-index:9999;"> 2543 <p class="footSMtxt"> 2544 2545 2546 2547 2548 2549 2550 2551 2552 <a href="/pages/affiliate-program" class="footMUL" style="display:block">Affiliate Program</a> 2553 2554 2555 2556 <a href="https://vets.nutricanine.ca" class="footMUL" style="display:block">Vet Professionals</a> 2557 2558 2559 2560 <a href="/pages/wholesale_inquiries" class="footMUL" style="display:block">Wholesale Inquiries</a> 2561 2562 2563 2564 2565 2566 2567 2568 2569 <a href="/policies/refund-policy" class="footMUL hide-for-medium" style="display:block">Refund Policy</a> 2570 2571 <a href="/policies/terms-of-service" class="footMUL hide-for-medium" style="display:block">Terms of Service</a> 2572 2573 2574 </p> 2575 </div> 2576 <div class="small-12 hide-for-medium cell"> 2577 <div class="border-line"></div> 2578 <div class="contact-info hide-for-medium"> 2579 <a href="mailto:[email protected]" class="footMUL"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/envelop_icon_c1b5438d-2579-4808-853d-141ab7a52c95.svg?v=1699305452" alt=""/> [email protected]</a> 2580 <a href="tel:14167261311" class="footMUL"><img src="https://cdn.shopify.com/s/files/1/0036/4357/2269/files/phone_icon_42d24360-6947-431d-b656-9d337b3bdcca.svg?v=1699305452" alt=""/> (416) 726-1311</a> 2581 <div class="icon-b"> 2582 <a href="https://www.facebook.com/NutriCanine/" class="hIco hide-for-medium" target="_blank"><i class="fab fa-facebook-f"></i></a> 2583 <a href="https://www.instagram.com/nutricanine/" class="hIco hide-for-medium" target="_blank"><i class="fab fa-instagram"></i></a> 2584 <a href="https://www.tiktok.com/@nutricanine/" class="hIco hide-for-medium" target="_blank"><i class="fab fa-tiktok"></i></a> 2585 </div> 2586 </div> 2587 </div> 2588 2589 </div> 2590 </div> 2591 <div class="grid-container show-for-medium new-footer-menu"> 2592 <div class="grid-y grid-padding-y "> 2593 <div class="large-1 tMenu"> 2594 <ul class="tMainMenu"> 2595 2596 <li><a href="/policies/refund-policy">Refund Policy</a></li> 2597 2598 <li><a href="/policies/terms-of-service">Terms of Service</a></li> 2599 2600 </ul> 2601 </div> 2602 </div> 2603 </div> 2604</footer> 2605</div> 2606 2607
2608<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
2608 2609 2610
2611<script> 2612 2613const tabContainers = document.querySelectorAll(".tab_area_pk"); 2614 2615tabContainers.forEach(tabContainer => { 2616 const navList = tabContainer.querySelectorAll(".menu button"); 2617 const tabList = tabContainer.querySelectorAll(".tab"); 2618 2619 navList.forEach((navItem, index) => { 2620 navItem.addEventListener('click', (evt) => { 2621 const currentLink = tabContainer.querySelector("button.active"); 2622 const currentTab = tabContainer.querySelector(".tab.active"); 2623 2624 currentLink.classList.remove("active"); 2625 navItem.classList.add("active"); 2626 2627 currentTab.classList.remove("active"); 2628 tabList[index].classList.add("active"); 2629 }); 2630 }); 2631}); 2632 2633 2634</script>
2634 2635 2636
2637<script> 2638 document.querySelectorAll(".accordion-item:not([data-accordion-item])").forEach((item) => { 2639 item.querySelector(".accordion-item-header").addEventListener("click", () => { 2640 item.classList.toggle("open"); 2641 }); 2642}); 2643</script>
2643 2644
2645<script> 2646 $(window).scroll(function() { 2647 var scroll = $(window).scrollTop(); 2648 2649 if (scroll >= 100) { 2650 $(".nutri-main-custom").addClass("extra_class"); 2651 } else { 2652 $(".nutri-main-custom").removeClass("extra_class"); 2653 } 2654}); 2655 2656 $(document).ready(function(){ 2657 $('.cellBlock').slick({ 2658 slidesToShow: 4, 2659 slidesToScroll: 1, 2660 arrows: true, 2661 dots: true, 2662 speed: 300, 2663 infinite: true, 2664 autoplaySpeed: 5000, 2665 autoplay: false, 2666 centerMode: true, 2667 centerPadding: "60px", 2668 responsive: [ 2669 { 2670 breakpoint: 991, 2671 settings: { 2672 slidesToShow: 3, 2673 } 2674 }, 2675 { 2676 breakpoint: 767, 2677 settings: { 2678 slidesToShow: 1, 2679 } 2680 } 2681 ] 2682 }); 2683 }); 2684</script>
2684 2685 2686 2687 2688 2689 2690
2690<script async src="https://loox.io/widget/4kZurWXjco/loox.1640116775440.js?shop=nutricanine.myshopify.com"></script>
2690 2691<!--Gorgias Chat Widget Start--> 2692 2693<!--Gorgias Chat Widget Start-->
2693<script id="gorgias-chat-widget-install-v2" src="https://config.gorgias.chat/gorgias-chat-bundle-loader.js?applicationId=17001"></script>
2693<!--Gorgias Chat Widget End--> 2694 2695<!--Gorgias Chat Widget End--> 2696 <!--Convert Bundle Start-->
2697<script id="convert-bundle-loader" src="https://bundle.dyn-rev.app/loader.js?g_cvt_id=bf9b7169-276a-411b-bf64-6956ed6c01a6"></script>
2697 2698<!--Convert Bundle End-->
2699<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
2699 2700</body> 2701</html>
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.