PageSourceSearch

https://nutricanine.ca/

html nutricanine.ca collected 2026-10-05 03:29:31 UTC 218,966 bytes, 2,701 lines download raw bytes

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&#39;s gently cooked fresh dog food Canada&#39;s largest and best. Each meal made tailored to your pup&#39;s unique nutritional needs. Find out why NutriCanine is rated Canada&#39;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="{&quot;publisher_shop_id&quot;:3643572269,&quot;theme_id&quot;:186212876659,&quot;theme_published&quot;:true,&quot;theme_store_id&quot;:0,&quot;placement&quot;:&quot;collection&quot;,&quot;event_data&quot;:{&quot;handle&quot;:&quot;&quot;,&quot;page_type&quot;:&quot;home&quot;},&quot;recommendations_tracking_enabled&quot;: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">&times;</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">&times;</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">&times;</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">&times;</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">&times;</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">&times;</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">&ldquo;</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">&rdquo;</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        &nbsp;
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.